211service.com
Równoległy wszechświat
Kiedy Anwar Ghuloum przyszedł do pracy w Intelu w 2002 roku, firma dominowała wśród producentów chipów, głównie dlatego, że dostarczała procesory, które działały z coraz większymi prędkościami. Byliśmy już przy trzech gigahercach z Pentium 4, a mapa drogowa przewidywała przyszłe taktowanie na poziomie 10 gigaherców i więcej, wspomina Ghuloum, który ma doktorat z Carnegie Mellon i jest obecnie jednym z głównych inżynierów firmy. W tym samym roku, na konferencji deweloperów Intela, dyrektor ds. technologii, Pat Gelsinger, powiedział: Do 2010 r. jesteśmy na dobrej drodze do urządzeń 30-gigahercowych, 10 nanometrów lub mniej, zapewniających tera-instrukcje wydajności. To jeden bilion instrukcji komputerowych na sekundę.
Ale Gelsinger się mylił. Intel i jego konkurenci wciąż produkują procesory, które osiągają szczytową prędkość poniżej czterech gigaherców, a około pięciu gigaherców zaczęło być postrzegane, przynajmniej na razie, jako maksymalna możliwa prędkość dla technologii krzemowej.
Ta historia była częścią naszego wydania ze stycznia 2009
- Zobacz resztę numeru
- Subskrybuj
Nie jest tak, że prawo Moore'a – pomysł, że liczba tranzystorów w chipie podwaja się co dwa lata – zostało uchylone. Raczej nieoczekiwane problemy z wytwarzaniem ciepła i zużyciem energii nałożyły praktyczne ograniczenie na szybkość zegara procesorów lub szybkość, z jaką mogą one wykonywać instrukcje. Nowe technologie, takie jak spintronika (która wykorzystuje kierunek wirowania pojedynczego elektronu do kodowania danych) i tranzystory kwantowe (tunelowe), mogą ostatecznie umożliwić komputerom działanie wielokrotnie szybsze niż obecnie, przy znacznie mniejszym zużyciu energii. Ale te technologie są co najmniej dziesięć lat od wejścia na rynek i wymagałyby wymiany linii produkcyjnych półprzewodników, których budowa kosztowała dziesiątki miliardów dolarów.
Aby jak najlepiej wykorzystać dostępne technologie, producenci chipów stosują inne podejście. Dodatkowe tranzystory przewidziane przez prawo Moore'a są wykorzystywane nie do przyspieszenia działania poszczególnych procesorów, ale do zwiększenia liczby procesorów wewnątrz chipa. Chipy z dwoma procesorami – lub rdzeniami – są teraz standardem dla komputerów stacjonarnych, a czterordzeniowe chipy są coraz bardziej powszechne. W dłuższej perspektywie Intel przewiduje setki rdzeni na urządzenie.
Ale o to chodzi: podczas gdy sprzętowy problem przegrzewania się chipów dobrze nadaje się do rozwiązania sprzętowego przetwarzania wielordzeniowego, to rozwiązanie powoduje z kolei trudny problem z oprogramowaniem. Jak programujesz dla wielu procesorów? Zadaniem Anwara Ghulouma jest to rozgryźć z pomocą grup programistycznych, którymi zarządza w Stanach Zjednoczonych i Chinach.
Firmy mikroprocesorowe podejmują ogromne ryzyko, przyjmując strategię wielordzeniową. Jeśli nie mogą znaleźć łatwych sposobów na napisanie oprogramowania dla nowych chipów, mogą stracić wsparcie programistów. Właśnie dlatego wielordzeniowy automat do gier Sony PlayStation 3 pojawił się późno na rynku i wciąż ma mniej tytułów gier niż jego konkurenci.
Problem z krzemem
Przez pierwsze 30 lat rozwoju mikroprocesorów sposobem na zwiększenie wydajności było tworzenie chipów, które miały coraz mniejsze funkcje i pracowały z coraz większymi częstotliwościami zegara. Oryginalny komputer Apple II z 1977 roku używał ośmiobitowego procesora działającego z częstotliwością jednego megaherca. Standardem dla komputerów PC jest obecnie 64-bitowy chip działający z szybkością 3,6 GHz, czyli 28 800 razy szybciej. Ale na tym ta trajektoria wydaje się kończyć. Około 2002 r. najmniejsze elementy, które można było wytrawić na chipie za pomocą fotolitografii, skurczyły się do 90 nanometrów – w skali, w której nieprzewidziane efekty powodowały, że znaczna część energii elektrycznej pompowanej do każdego chipa po prostu wyciekała, wytwarzając ciepło, ale w ogóle nie wykonując żadnej pracy. . Tymczasem tranzystory były tak ciasno upchane na chipach, że generowane przez nie ciepło nie mogło zostać wchłonięte i odprowadzone. Producenci chipów zdali sobie sprawę, że do czasu, gdy zegar osiągnął pięć gigaherców, chipy nagrzewałyby się tak bardzo, że bez skomplikowanych systemów chłodzenia stopiłby się krzem, z którego zostały wykonane. Branża potrzebowała innego sposobu na poprawę wydajności.
Ze względu na złożoną konstrukcję wymaganą obecnie przez szybkie, jednordzeniowe chipy, wiele rdzeni może zapewnić taką samą moc obliczeniową przy mniejszym zużyciu energii elektrycznej. Mniej energii elektrycznej generuje mniej ciepła. Co więcej, użycie wielu rdzeni powoduje rozproszenie ciepła.
Jednak większość programów komputerowych nie została zaprojektowana z myślą o wielu rdzeniach. Ich instrukcje są wykonywane w kolejności liniowej, a nic nie dzieje się równolegle. Jeśli Twój komputer wydaje się robić więcej niż jedną rzecz na raz, dzieje się tak dlatego, że procesor przełącza się między czynnościami szybciej, niż możesz to zrozumieć. Najłatwiejszym sposobem korzystania z wielu rdzeni jest zatem podział pracy — na przykład uruchamianie systemu operacyjnego na jednym rdzeniu, a aplikacji na drugim. Nie wymaga to zupełnie nowego modelu programowania i może działać z dzisiejszymi chipami, które mają dwa lub cztery rdzenie. Ale co z przyszłymi, które mogą mieć 64 rdzenie lub więcej?
Ponowne odwiedzanie starej pracy
Na szczęście, jak mówi Leslie Valiant, profesor informatyki i matematyki stosowanej na Uniwersytecie Harvarda, podstawy paralelizmu zostały opracowane dziesiątki lat temu w dziedzinie obliczeń o wysokiej wydajności, czyli z wykorzystaniem superkomputerów. Teraz wyzwanie, mówi Valiant, polega na znalezieniu sposobu, aby ta stara praca była użyteczna.
Superkomputery, które zainspirowały obliczenia wielordzeniowe, były urządzeniami drugiej generacji z lat 80., wyprodukowanymi przez takie firmy jak Thinking Machines i Kendall Square Research. Komputery te korzystały z gotowych procesorów przez setki, a nawet tysiące, uruchamiając je równolegle. Niektóre zostały zlecone przez amerykańską Agencję Zaawansowanych Projektów Badawczych Obrony jako tańsza alternatywa dla superkomputerów Cray. Lekcje zdobyte podczas programowania tych komputerów są przewodnikiem, jak sprawić, by programowanie wielordzeniowe działało dzisiaj. Tak więc Grand Theft Auto może wkrótce skorzystać z badań oprogramowania przeprowadzonych dwie dekady temu, aby wspomóc projektowanie bomb wodorowych.
W latach 80. stało się jasne, że kluczowy problem obliczeń równoległych jest następujący: trudno jest rozdzielić oprogramowanie, aby mogło być przetwarzane równolegle przez setki procesorów, a następnie złożyć je z powrotem we właściwej kolejności bez pozwolenia zamierzony rezultat może zostać uszkodzony lub utracony. Informatycy odkryli, że podczas gdy niektóre problemy można łatwo zrównoleglać, inne nie. Nawet jeśli problemy mogą być zrównoleglone, wyniki mogą nadal być zwracane w niewłaściwym porządku, w tak zwanym stanie wyścigu. Wyobraź sobie dwie operacje działające równolegle, z których jedna musi zakończyć się przed drugą, aby ogólny wynik był poprawny. Jak zapewnić, że ten właściwy wygra wyścig? A teraz wyobraź sobie dwa tysiące lub dwa miliony takich procesów.
To, czego nauczyliśmy się z tej wcześniejszej pracy w zakresie obliczeń o wysokiej wydajności, to to, że istnieją problemy, które nadają się do paralelizmu, ale aplikacje równoległe nie są łatwe do napisania, mówi Marc Snir, współdyrektor Centrum Badawczego Universal Parallel Computing (UPCRC) w Uniwersytet illinois w Urbana-Champaign. Zwykle programiści używają wyspecjalizowanych języków programowania i narzędzi do pisania instrukcji dla komputera w terminach łatwiejszych do zrozumienia dla ludzi niż jedynek i zer kodu binarnego. Ale te języki zostały zaprojektowane do reprezentowania liniowych sekwencji operacji; trudno jest zorganizować tysiące równoległych procesów za pomocą liniowej serii poleceń. Aby tworzyć programy równoległe od zera, potrzebne są języki, które pozwalają programistom pisać kod bez myślenia o tym, jak zrobić go równolegle do programu, jak zwykle, podczas gdy oprogramowanie zastanawia się, jak skutecznie dystrybuować instrukcje między procesorami. Nie ma jeszcze dobrych narzędzi do ukrycia paralelizmu lub uczynienia tego oczywistym [jak to osiągnąć], mówi Snir.

Jasne światła: W 1987 roku firma Thinking Machines wypuściła na rynek superkomputer CM-2 (powyżej), w którym równolegle pracowało 64 000 procesorów. Firma ogłosiła upadłość w 1994 roku, ale jej wpływ na informatykę był znaczący.
Aby pomóc rozwiązać takie problemy, firmy oddzwoniły do obsługi niektórych siwobrodych superkomputerów z lat 80. XX wieku. Na przykład David Kuck jest emerytowanym profesorem Uniwersytetu Illinois, znanym jako twórca narzędzi do programowania równoległego. Teraz pracuje nad programowaniem wielordzeniowym dla Intela. Tak samo cały zespół wynajęty z dawnej firmy Digital Equipment Corporation; w poprzednim życiu zawodowym opracowała implementację interfejsu przekazywania wiadomości (MPI) firmy Digital, obecnie dominującego standardu oprogramowania dla wielomaszynowych superkomputerów.
W pewnym sensie ci starzy gracze mają łatwiej niż ostatnim razem. Dzieje się tak, ponieważ wiele dzisiejszych wielordzeniowych aplikacji bardzo różni się od tych, które wyobraził sobie legendarny projektant systemów mainframe Gene Amdahl, który teoretyzował, że przyrost szybkości, jaki można osiągnąć przy użyciu wielu procesorów, jest ograniczony stopniem, w jakim dany program może być zrównoleglony.
Komputery obsługują większe ilości danych niż kiedykolwiek wcześniej, ale ich zadania przetwarzania są tak idealnie przystosowane do zrównoleglania, że ograniczenia wynikające z prawa Amdahla – opisanego w 1967 r. – zaczynają wydawać się zerowe. Najprostszym przykładem zadania masowo równoległego jest określenie nieznanego hasła metodą brute-force poprzez wypróbowanie wszystkich możliwych kombinacji znaków. Podział potencjalnych rozwiązań na 1000 procesorów nie może pomóc, ale będzie 1000 razy szybszy. To samo dotyczy dzisiejszych aplikacji intensywnie korzystających z procesora do kodowania danych wideo i audio. Równoległe kompresowanie klatek filmowych jest niemal idealnie wydajne. Ale jeśli przetwarzanie równoległe jest dziś łatwiejsze do zastosowania, niekoniecznie jest o wiele łatwiejsze. Ułatwienie tego będzie wymagało wspólnego wysiłku ze strony producentów chipów, programistów i akademickich informatyków. Rzeczywiście, UPCRC w Illinois jest finansowane przez Microsoft i Intel – dwie firmy, które mogą najwięcej zyskać, jeśli przetwarzanie wielordzeniowe odniesie sukces, i najwięcej do stracenia, jeśli się nie powiedzie.
Wymyślanie nowych narzędzi
Jeśli oprogramowanie staje się coraz bardziej złożone, to nie tylko dlatego, że dodaje się do niego więcej funkcji; dzieje się tak również dlatego, że kod jest zbudowany na coraz większej liczbie warstw abstrakcji, które ukrywają złożoność tego, co naprawdę robią programiści. To nie jest zwykłe nadużycie: programiści potrzebują abstrakcji, aby podstawowy kod binarny wykonywał coraz bardziej zaawansowaną pracę, jakiej oczekujemy. Jeśli chodzi o pisanie dla procesorów równoległych, programiści używają narzędzi tak szczątkowych, że James Larus, dyrektor ds. architektury oprogramowania w projekcie Data Center Futures w Microsoft Research, porównuje je do najniższego poziomu i najtrudniejszego języka, jakiego może używać programista. .
Nie wyobrażamy sobie pisania dzisiejszego oprogramowania w asemblerze, mówi. Ale z jakiegoś powodu uważamy, że możemy napisać równoległe oprogramowanie o równym stopniu zaawansowania z nowymi i krytycznymi kawałkami napisanymi w równoległym języku asemblera. Nie możemy.
Właśnie dlatego Microsoft udostępnia narzędzia do programowania równoległego tak szybko, jak to możliwe. Na przykład F# jest równoległą wersją języka programowania ML ogólnego przeznaczenia firmy Microsoft. Nie tylko paralelizuje niektóre funkcje, ale zapobiega ich niewłaściwej interakcji, dzięki czemu oprogramowanie równoległe staje się łatwiejsze do pisania.
Tymczasem Intel wysyła Ghuloum raz w miesiącu za granicę, aby porozmawiać z twórcami oprogramowania o architekturze wielordzeniowej i modelach programowania równoległego. Przyjęliśmy filozofię, że „problem” programowania równoległego nie zostanie rozwiązany w ciągu najbliższego roku lub dwóch i będzie wymagał wielu stopniowych ulepszeń – i niewielkiej liczby przeskoków – do istniejących języków, mówi Ghuloum. Myślę też, że nie możemy tego zrobić w próżni; to znaczy, bez znaczących opinii programistów, bez wątpienia w jakiś sposób otrzymamy coś złego.
Zarówno na rynku komercyjnym, jak i na rynku open source inne nowe języki i narzędzia albo wykorzystują moc przetwarzania wielordzeniowego, albo maskują jego złożoność. Należą do nich platforma Google MapReduce, która ułatwia wykonywanie obliczeń równoległych w klastrach komputerów, oraz Hadoop, implementacja MapReduce typu open source, która może dystrybuować aplikacje na tysiące węzłów. Nowe języki programowania, takie jak Clojure i Erlang, zostały zaprojektowane od podstaw do obliczeń równoległych. Popularna aplikacja do czatowania na Facebooku została napisana częściowo w języku Erlang.
Tymczasem spinoff MIT, Cilk Arts, może dzielić programy napisane w ustalonym języku C++ na wątki, które mogą być wykonywane równolegle na wielu rdzeniach. A Appistry z St. Louis twierdzi, że jego Enterprise Application Fabric automatycznie dystrybuuje aplikacje dla platformy programistycznej Microsoft .Net na tysiące serwerów, nie wymagając od programistów zmiany jednego wiersza ich oryginalnego kodu.
Granice obliczeń wielordzeniowych
Tak jak marzenie Intela o 10- i 30-gigahercowych chipach ustąpiło miejsca pogoni za przetwarzaniem wielordzeniowym, jednak sam wielordzeniowy może istnieć przez lata, a nie dekady. Wydajność systemów równoległych spada z każdym dodanym procesorem, ponieważ rdzenie walczą o te same dane; nadejdzie moment, w którym dodanie dodatkowego rdzenia do chipa faktycznie go spowolni. To może ustawić praktyczny limit strategii wielordzeniowej na długo przed tym, zanim zaczniemy kupować sturdzeniowe komputery.
Ale czy to ma znaczenie? Chociaż mogą istnieć aplikacje wymagające mocy wielu rdzeni, większość ludzi nie korzysta z tych aplikacji. Poza zagorzałymi graczami niewiele osób narzeka, że ich komputery są zbyt wolne. W rzeczywistości Microsoft podkreślił, że Windows 7, następca kłopotliwego systemu Windows Vista, będzie zużywał mniej mocy obliczeniowej i pamięci niż Vista – co było konieczne ze względu na popularność słabszych mobilnych platform komputerowych i spodziewaną migrację aplikacji PC do Serwery internetowe. Cynik mógłby powiedzieć, że poszukiwanie coraz większej mocy obliczeniowej jest czysto komercyjne – że firmy produkujące półprzewodniki i komputery, dostawcy oprogramowania i producenci telefonów komórkowych potrzebują nas do kupowania nowych gadżetów.
Jaka jest więc wada, jeśli przetwarzanie wielordzeniowe zawiedzie? Jaki jest prawdopodobny wpływ na naszą kulturę, jeśli weźmiemy techniczny zig, który powinien być zagięciem i nagle nie będzie w stanie wykorzystać wszystkich 64 rdzeni procesorów w naszych przyszłych notebookach?
Nie mogę się doczekać! mówi Steve Wozniak, wynalazca Apple II. Twierdzi, że uchylenie prawa Moore'a wywołałoby renesans rozwoju oprogramowania. Dopiero wtedy będziemy mogli wreszcie stworzyć oprogramowanie, które będzie działać na stabilnej i trwałej platformie.
W szkołach, mówi Woz, żywotność biurka wynosi 25 lat, podręcznika 10 lat, a komputera 3 lata. Które z tych urządzeń kosztuje najwięcej w zakupie i eksploatacji? Dlaczego, oczywiście komputer. Który ma wartość rezydualną po zakończeniu okresu użytkowania? Nie komputer — wyrzucenie go kosztuje. Przynajmniej książki można spalić na ciepło. Dopóki technologia nie zwolni wystarczająco, aby platformy komputerowe działały wystarczająco długo, aby były opłacalne ekonomicznie, nie będą one naprawdę nieodłączne od edukacji. Tak więc koniec Prawa Moore'a, choć może wyglądać źle, w rzeczywistości byłby bardzo dobry.
Robert X. Cringely pisze o technologii od 30 lat. Jest autorem Przypadkowe imperia: jak chłopcy z Doliny Krzemowej zarabiają miliony, walczą z zagraniczną konkurencją i wciąż nie mogą się umówić na randkę .
