211service.com
Problem z komputerami wielordzeniowymi
Dzisiejsze najnowocześniejsze komputery są wyposażone w procesory dwurdzeniowe: dwie jednostki obliczeniowe, które mogą jednocześnie wykonywać oddzielne zadania. A w przyszłym roku główni producenci chipów Intel i AMD wprowadzą systemy czterordzeniowe. Chociaż wiele procesorów jest teoretycznie szybszych niż jeden rdzeń, pisanie oprogramowania wykorzystującego wiele procesorów – zadanie zwane programowaniem równoległym – jest niezwykle trudne.
Jednak ostatnie badania przeprowadzone przez MIT mogą ułatwić programowanie równoległe, ostatecznie pomagając w utrzymaniu wydajności komputerów osobistych na właściwym torze. Naukowcy proponują nową platformę obliczeniową, która łączy specjalistyczne instrukcje oprogramowania i modyfikacje sprzętu wielordzeniowego, co umożliwi programistom pisanie oprogramowania bez konieczności zajmowania się żmudnymi szczegółami programowania równoległego.
Historycznie rzecz biorąc, pisanie oprogramowania dla systemów wielordzeniowych było zadaniem ekspertów w świecie superkomputerów. Jednak wraz z nadchodzącą erą superkomputerów osobistych, przeciętni programiści również muszą umieć pisać oprogramowanie z myślą o wielu rdzeniach.
To przerażające, mówi Krste Asanovic , profesor elektrotechniki i informatyki na MIT, ponieważ większość nigdy tego nie robiła, a jest to dość trudne. Asanovic i jego koledzy mierzą się z jednym z głównych wyzwań, przed jakimi stają programiści, gdy próbują pisać oprogramowanie, które będzie wydajnie działać na systemach wielordzeniowych: koordynowanie wielu zadań działających na osobnych rdzeniach w sposób, który nie powoduje awarii systemu .
Kiedy aplikacja, taka jak Microsoft Outlook lub odtwarzacz wideo, jest zrównoleglona, pewne zadania są dzielone między procesory. Jednak często te oddzielne zadania muszą sięgnąć do współdzielonej pamięci podręcznej, aby uzyskać dostęp do danych. Gdy jedna transakcja uzyskuje dostęp do pamięci, a inna transakcja musi uzyskać dostęp do tej samej części pamięci, a odpowiednie zabezpieczenia nie są wprowadzone, system może ulec awarii. Można to porównać do pary ze wspólnym kontem czekowym z ograniczonymi funduszami, które jednocześnie wypisują czeki i nieumyślnie przepłacają z konta.
Standardowe programowanie równoległe wymaga od programisty przewidywania tych jednoczesnych działań i upewniania się, że gdy określona aktywność zaczyna uzyskiwać dostęp do pamięci, blokuje inne działania, aby czekały na zakończenie transakcji.
Prawidłowo zaimplementowane blokady przyspieszają działanie systemów równoległych, ale wprowadzenie ich w życie jest skomplikowane, mówi Jim Larus, kierownik obszaru badawczego w firmie Microsoft. Wyjaśnia na przykład, że dwie różne aplikacje mogą jednocześnie uzyskiwać blokady, co zmusza je do wzajemnego oczekiwania. Larus mówi, że bez udziału osób trzecich, które przełamałyby impas, aplikacje pozostałyby zamrożone.
Naukowcy z MIT obchodzą ten problem, stosując podejście zwane pamięcią transakcyjną, obszar badawczy, który eksplodował w ciągu ostatnich pięciu lat, mówi Asanovic. Pamięć transakcyjna koordynuje operacje oprogramowania, dzięki czemu programiści nie muszą zapisywać tego w swoich programach. W rzeczywistości pozwala wielu transakcjom na współdzielenie tej samej pamięci w tym samym czasie. Po zakończeniu transakcji system sprawdza, czy inne transakcje nie wprowadziły w pamięci zmian, które mogłyby utrudnić wynik pierwszej transakcji. Jeśli tak, transakcja jest ponownie wykonywana, dopóki się nie powiedzie.
Chociaż pamięć transakcyjna działa w niektórych przypadkach, nadal nie jest idealna, wyjaśnia Asanovic. W większości przypadków transakcje są niewielkie, a stały rozmiar pamięci w sprzęcie może szybko sobie z nimi poradzić. Ale, jak mówi, raz na jakiś czas transakcje wymagają więcej pamięci niż ustalona ilość, która jest dostępna, a kiedy to się dzieje, system ulega awarii. Asanovic mówi, że dodając do sprzętu małą pamięć podręczną pamięci podręcznej oraz dodając oprogramowanie do rozpoznawania, kiedy transakcje są przepełnione, można zwiększyć pojemność pamięci transakcyjnej, łagodząc poprzednie awarie systemu.
Metoda, której używają badacze z MIT, opiera się na połączeniu oprogramowania i sprzętu w celu ulepszenia pamięci transakcyjnej, mówi Larus Microsoftu, i istnieje wiele projektów, które w różnym stopniu opierają się na oprogramowaniu lub sprzęcie. Nie jest jeszcze jasne, gdzie przebiega właściwa granica między wykorzystaniem sprzętu i oprogramowania do rozwiązania problemu, mówi, ale naukowcy zajmują się ważnymi nierozwiązanymi problemami w programowaniu systemów wielordzeniowych.
Microsoft, AMD, Intel i uniwersytety, takie jak MIT i Stanford, między innymi, inwestują w ułatwianie programowania systemów wielordzeniowych. Oprócz ulepszania pamięci transakcyjnej badacze badają lepsze sposoby debugowania programów równoległych, a także tworzą biblioteki gotowych operacji równoległych, aby programiści mogli podłączać fragmenty kodu do oprogramowania bez konieczności każdorazowego rozwiązywania problemów.
Obecnie systemy dwurdzeniowe nie są tak dotknięte brakiem prawdziwie równoległych programów, jak nadchodzące systemy czterordzeniowe, mówi Asanovic. W większości systemy operacyjne, takie jak Windows i Mac OS X, są w stanie skutecznie rozdzielać aplikacje w systemie dwurdzeniowym. Na przykład skaner antywirusowy działa dyskretnie w tle na jednym rdzeniu, podczas gdy aplikacje takie jak Microsoft Word lub Firefox działają na drugim rdzeniu, bez ograniczania ich szybkości.
Ale jeśli chodzi o 4, 8 lub 16 rdzeni, same aplikacje muszą zostać zmodyfikowane, aby uzyskać większą wydajność. Asanovic mówi, że pamięć transakcyjna nie będzie srebrną kulą ułatwiającą programowanie tych systemów, ale spodziewa się, że będzie to element przyszłego modelu obliczeń równoległych. To jeden z mechanizmów, który wydaje się być przydatny, mówi.