Harnessing the Power of Supercomputing
Transkrypt
Harnessing the Power of Supercomputing
Harnessing the Power of Supercomputing Tomasz Młocek, Szymon Pałka Katedra Informatyki na Wydziale Elektrotechniki, Automatyki, Informatyki i Elektroniki Akademii Górniczo-Hutniczej w Krakowie al. Mickiewicza 30, 30-059, Kraków email: [mltomasz,pszymon]@student.agh.edu.pl http://student.agh.edu.pl/∼pszymon/mownit.pdf http://student.agh.edu.pl/∼mltomasz/mownit/mownit.pdf Streszczenie Poniższa praca powstała w celu zaprezentowania historii rozwoju superkomputerów oraz celów w jakich powstały, od pierwszej programowalnej maszyny liczącej w latach 40-tych XX wieku po dziś dzień. W dalszej części artykułu chcielibyśmy dokładniej przybliżyć dwa przykładowe zastosowania możliwości obliczeniowych tego typu konstrukcji. 1 Wstęp Superkomputerem nazywamy maszynę liczącą, która w obecnym momencie posiada największą możliwą moc obliczeniową, a szczególnie prędkość obliczeń. Zgodnie z tą definicją historii superkomputerów należy doszukiwać się już w początkowych teoriach dotyczących maszyn obliczeniowych, autorstwa Claude’a Shannona oraz Alana Turinga pod koniec lat 40 XX wieku, kiedy to miały miejsce pierwsze próby skonstruowania programowalnej maszyny liczącej. Jednakże obecnie mianem superkomputera nazywamy maszyny o mocy obliczeniowej rzędu setek bądź tysięcy bilionów operacji zmiennoprzecinkowych na sekundę (TFLOPS), których szybkość przewyższa miliony razy pierwsze konstrukcje tego typu. 2 2.1 Historia Początki - lata 40. Początków obliczeń maszynowych na dużą skalę można dopatrywać się w maszynach szyfrujących II wojny światowej min. Enigmie oraz pracach dążących do złamania ich szyfrów. Podstawy teoretyczne do złamania Enigmy wypracowali polscy matematycy jednak została ona ostatecznie złamana dzięki pracy brytyjskiego kryptoanalityka z Instytutu w Bletchley Park, Alana Turinga [6]. Zaprojektował on maszynę krypto-analityczną zwaną “bombą Turinga-Welchmana”, która była głównym narzędziem wspomagającym odczytywanie wiadomości z Enigmy. Ten sam naukowiec wprowadził w swoich pracach ideę maszyny będącej abstrakcyjnym modelem komputera, służącej do wykonywania odpowiednio przygotowanych algorytmów. Maszyna ta stanowi najprostszy i wyidealizowany matematyczny model komputera – zwany maszyną Turinga. Warto również nadmienić, iż w instytucie w Bletchey Park powstała - na podstawie prac Turinga - najprawdopodobniej pierwsza programowalna maszyna cyfrowa “Colossus” [7] służąca do rozpracowania niemieckiej maszyny Lorenza. Istnienie tej maszyny było objęte tajemnicą aż do 1976 roku , co było powodem konfliktów nt pierwszeństwa powstania takiej maszyny. Drugą wartą wymienienia osobą jest amerykański uczony, Claude’a Shannon, którego prace dotyczyły między innymi teorii komunikacji, która była bezpośrednią podwaliną teorii informacji i kodowania. Przez wielu autorów uważany jest on za osobę, od której rozpoczęła się rewolucja cyfrowa. Na podstawie prac Turinga nt jego maszyn opublikował w 1950 roku pracę “Programming a Computer for Playing a Chess”[16] , w której przedstawił podwaliny teorii gier oraz podstawowe zasady projektowania algorytmów grających. Należy nadmienić, iż właśnie chęć stworzenia maszyny zdolnej do pokonania człowieka w szachy była jedną z motywacji do szybkiego rozwoju superkomputerów oraz oprogramowania. Warto wspomnieć również o niemieckim uczonym - Konradzie Zuse - który w 1941 roku skonstruował pierwszą ( nie jest to powszechnie uznane ) w pełni działającą, programowalną maszynę liczącą opartą na systemie binarnym – Zuse Z3. Była ona wykorzystywana min. do obliczeń przy konstruowaniu skrzydeł samolotów Luftwaffe. Wspominając o zastosowaniu mocy obliczeniowej maszyn cyfrowych przez wojsko należy również nadmienić o amerykańskim komputerze ENIAC ( Electronic Numerical Integrator And Computer ) powstałym w 1945 w Pensylwanii. Był to 27-tonowy kolos zawierający 18 000 lamp elektronowych ( przez co był bardzo awaryjny ), liczący w systemie dziesiętnym o zawrotnej jak na owe czasy szybkości około 5 000 dodawań całkowitych na sekundę. Jego budowa w dużym stopniu była oparta na rozwiązaniach użytych w ABC ( Atanasoff-Berry Computer – nieprogramowalna maszyna służąca do rozwiązywania układów równań liniowych, powstała w 1939 roku ). Mógł on być oprogramowywany za pomocą najpierw przełączania kabli połączeniowych, a potem poprzez karty perforowane. Ze względu na bardzo awaryjną technikę lampową średni czas bezawaryjnej pracy urządzenia wynosił pół godziny. Pomimo opornej obsługi oraz trudnego programowania maszyny, przysłużyła się ona do obliczeń nad wytwarzaniem broni jądrowej oraz min. prognozowaniem pogody. Rysunek 1: Wzrost prędkości pierwszych superkomputerów lampowych. 2.2 Lata 50 - era superkomputerów lampowych W 1949 na Uniwersytecie Manchester skonstruowano Manchester Mark 1 [3], który był pierwszym komputerem w którym zastosowano rejestry indeksowe. Wykonywał 40-bitową arytmetykę szeregową ze sprzętowym wspomaganiem dodawania, odejmowania oraz mnożenia. Podstawowe operacje ( poza mnożeniem ) wykonywały się w czasie 1.8 ms. Warto również wspomnieć o zamówionym przez Marynarkę USA komputerze Whirlwind I, skonstruowanym w ’49 roku na MIT. Był to pierwszy komputer działający w czasie rzeczywistym oraz używającym wyświetlacza do komunikacji z użytkownikiem. Co ciekawe był używany jako symulator lotu do nauki załóg bombowców. Pierwszym masowo produkowanym komputerem z obsługą operacji zmiennoprzecinkowych była maszyna IBM 704 [10] skonstruowana w 1954. Jej możliwości stanowiły duży postęp w porównaniu z wcześniejszymi konstrukcjami, oferowała szybkość do 40 kOPS ( tysięcy operacji całkowitoliczbowych na sekundę) . Języki programowania LISP oraz FORTRAN zostały pierwotnie napisane właśnie pod tę maszynę. 2.3 Era komputerów tranzystorowych Pomimo dużych osiągów maszyn lampowych i elektromechanicznych nie udało się rozwiązać ich najważniejszcyh bolączek – dużych rozmiarów, awaryjności i ogromnego poboru prądu. Za przełom w użyciu maszyn obliczeniowych uważa się wynalezienie w laboratoriach Bell Telephone przez Johna Bardeena w roku 1947 tranzystora. Zastąpił on lampy elektronowe i stał się podstawowym elementem wykorzystywanym w wielu urządzeniach elektronicznych do dnia dzisiejszego. Pierwszą próbą skonstruowania superkomputera w oparciu o technikę tranzystorową był projekt LARC[8] ( Livemore Advanced Research Computer ). W zamierzeniu miał posiadać 2 procesory do obliczeń oraz jeden do obsługi operacji wejścia/wyjścia. Jednakże nie powstał ani jeden wieloprocesorowy komputer LARC – powstały tylko 2 egzemplarze z pojedynczym procesorem do obliczeń. Pomimo tego i tak były to najszybsze komputery w tamtym okresie, oferując czasy operacji dodawania rzędu 4 µs , mnożenia 8 µs oraz dzielenia 28 µs. IBM idąc za ciosem, zachęcony powodzeniem swojego wcześniejszego komputera 704 postanowił skonstruować model 100 krotnie szybszy. W 1961 powstał IBM 7030 zwany inaczej Stretch, który pomimo wcześniejszych zapowiedzi był „tylko” 30-krotnie szybszy od poprzednika. Pozwoliło mu to objąć miano najszybszego superkomputera na 3 lata, do 1964 do rzecz konstrukcji firmy Cray. 7030 oferował szybkość rzędu 1.2 MIPS ( milion instrukcji na sekundę ), co daje około 1.4 µs na zmiennoprzecinkowe dodawanie. Stretch był ważną konstrukcją ze względu na takie nowości jak wielozadaniowość, ochronę pamięci oraz używanie 8 bitowego typu byte – te cechy stały się w późniejszym czasie standardem dla innych konstrukcji. Maszyny tego typu były używane przy badaniach nad bronią jądrową w Laboratoriach Los Alamos oraz min. w placówce pocisków atomowych w Aldermastom w Anglii. 2.4 Superkomputery Seymoura Cray’a W powszechnej opinii za pierwszy prawdziwy superkomputer uznaje się konstrukcję firmy ’CDC 6600 ( Control Data Corporation ). Komputer ten powstał pod kierownictwem Seymoura Cray’a - człowieka uznanego za ojca superkomputerów - charakteryzował się szybkością 1 MFLOPS ( milion operacji ) co trzykrotnie przebijało osiągi poprzedniego rekordzisty IBM Stretch. Po raz pierwszy przy budowie komputera zastosowano tranzystory krzemowe. Przy tej szybkości taktowania zegara wydzielało się bardzo dużo ciepła, które trzeba było niwelować za pomocą specjalnie skonstruowanego chłodzenia freonem. Kolejne modele firmy CDC również wyznaczały czołówkę rynku superkomputerów, aż w końcu Cray założył własną firmę Cray Research, która produkuje aż do dziś najszybsze komputery na świecie, w tym najszybszy obecnie Cray Jaguar – 1.75 PFLOPS ( 1.75 · 1015 ). Rysunek 2: Wzrost prędkości superkomputerów do dziś. 2.5 Podsumowanie Warto nadmienić, że pojęcie superkomputera było na przestrzeni lat bardzo płynne. We wczesnych latach tego typu konstrukcje były oparte na bardzo szybkich procesorach skalarnych (wykonujących w danym momencie jedną operacje na liczbie) [8]. Następnie w latach 70 zaczęto projektować do takich konstrukcji procesory wektorowe ( procesor w jednym cyklu operuje na jednowymiarowej tablicy danych ), by następnie w latach 80-tych projektować konstrukcje oparte o zrównoleglone procesory wektorowe. W latach 90 zaczęto łączyć tysiące „zwykłych” ( ogólnodostępnych ) procesorów w jeden system zwany klastrem. 3 Ranking TOP500 oraz benchmark LINPACK Ranking TOP500[1] jest dwa razy do roku aktualizowaną listą 500 aktualnie najszybszych superkomputerów na świecie, których moc jest obliczana za pomocą benchmarka LINPACK. Ranking prowadzony od 1993 na stronie www.top500.org jest publikowany w Czerwcu na International Supercomputer Conference oraz w Listopadzie w czasie IEEE Super Computer Conference. Od 93’ roku wydajność pierwszego na liście komputera rośnie stale zgodnie z prawem Moore’a zwiększając się dwukrotnie w ciągu 14 miesięcy – najszybszy komputer na liście w listopadzie 2009 był 18 tysięcy razy szybszy niż pierwszy na liście w Czerwcu 1993. Na pierwszym miejscu znajduje się od Listopada 2009 wspomniany wcześniej Cray Jaguar, w czołówce znajdują się również konstrukcje IBM oraz HP. Głównie wykorzystywanym systemem operacyjnym są specjalistyczne dystrybucje Linuxa. 3.1 LINPACK benchmark Wspomniany wcześniej benchmark LINPACK jest testem opartym na bibliotece algebry liniowej LINPACK. Mierzy on prędkość rozwiązywania gęstego układu równań liniowych ( często spotykany problem w inżynierii i badaniach naukowych ). Badanie szybkości superkomputera jest zadaniem trudnym gdyż każda tego typu maszyna jest projektowana do konkretnego wąskiego grona problemów [4], szczególnie operacji numerycznych i wydajność tego typu maszyny może się zmniejszyć dla ogólnych problemów. Jednak poza prędkością maszyny coraz bardziej istotne staje się zużycie energii, które przy obecnych czołowych superkomputerach jest rzędu MW. Zagadnienie związane z redukcją zużycia energii jest nazywane Green Computing - pod adresem www.green500.org publikowana jest lista najoszczędniejszysz aktualnie superkomputerów. 3.2 Statystyki Projekt Top500 oferuje na swojej stronie wgląd do najnowszych statystyk, w tym również statystyk związanych z rozbiciem procentowym zastosowań możliwości superkomputerów. Z listy 500 najszybszych komputerów - 154 z nich nie posiada dedykowanych zastosowań i ich czas pracy jest poświęcony na różne projekty. Jednak pozostałe 70 % to komputery zaprojektowane pod konkretne cele, głównie : Badania naukowe , 82 komputery (16.4%) Finanse , 53 komputery (10.6%) Przewidywanie trendów finansowych, obliczanie ryzyka przy inwestycjach Geofizyka , 24 komputery (4.8%) Przewidywanie trzęsień ziemi, sejsmografia. Wykrywanie złóż ropy naftowej i gazu. Obronność , 15 komputery (3.0%) Projektowanie nowych broni, samolotów. Obliczanie efektów składowania głowic jądrowych. Technika półprzewodnikowa , 15 komputery (3.0%) Badanie zachowań skomplikowanych układów półprzewodnikowych poprzez symulacje, w przypadku gdy realne doświadczenie jest niemożliwe do zrealizowania bądź zbyt kosztowne. Rysunek 3: Rozkład zastosowań głównych superkomputerów na Czerwiec ’10. 4 Przykłady zastosowania superkomputerów W kolejnej części artykułu zostaną przybliżone dwa przykładowe zastosowania mocy superkomputerów. Pierwszym z nich będzie stworzenie superkomputera mogącego rozgrywać partie szachowe na poziomie arcymistrza – na przykładzie komputera IBM Deep Blue. Drugim zastosowaniem będzie modelowanie i przewidywanie zmian pogody. 5 5.1 Komputer szachowy Zarys historyczny. Szachy – gra znana od początków naszej ery, do Europy dotarła w początkach X stulecia, a obecne zasady ukształtowały się około XV wieku. Próby stworzenia mechanizmu pozwalającego rozegrać partię szachów z człowiekiem sięgają setek lat wstecz. 5.2 Teoretyczne modele grające Pierwszą udaną próbą stworzenia mechanizmu rozgrywającego część gry w szachy był elektroniczny wynalazek Torresa y Quevedo z 1890 r., potrafił on rozgrywać szachową końcówkę ‘król + wieża : król’ i wykonywał mata w optymalny sposób. Jednak prawdziwa historia ‘silników szachowych’ rozpoczyna się wraz z powstaniem teorii gier i pracy Claude’a Shannona – “Programming a Computer for Playing a Chess” [16] z 1950 r. Zawarte w niej idee wyznaczyły kierunek rozwoju programowanie gier i podstawy obowiązują do dziś. Shannon przedstawił dwa schematy rozwiązywania problemu gry w szachy – Typ A polegający na metodzie brute-force korzystającej z algorytmu MINIMAX oraz Typ B polegający na głębszej analizie zasad szachowych i sprawdzaniu tylko niektórych ruchów uznanych wcześniej za sensowne. Oczywiście oba schematy działają w praktyce jako heurystyki. Kilka lat po Shannon’ie, Alan Turing stworzył na kartce papieru pierwszy program grający w szachy i przetestował go ręcznie. 5.3 Rozwój komputerów szachowych Do końca lat 50 wszystkie tego typu programy zaimplementowane na maszynach liczących nie były w stanie pokonać nawet amatora, a jedynie umiały prowadzić grę zgodnie z regułami[14]. W międzyczasie powstało wiele udoskonaleń do schematy Shanonna, m.in. wymyślono ulepszoną wersję algorytmu MINIMAX – Alfa-Beta. Z powodu złożoności problemu w roku 1956 stworzony na komputerze MANIAC I program umożliwiający grę na szachownicy 6x6 – bez gońców, bez roszady oraz promocji pionków. Od lat 60-tych zaczęto intensywne prace nad stworzeniem programu mogącego pokonać człowieka. W roku 1966 rozegrano pierwszy oficjalny mecz pomiędzy dwoma komputerami szachowymi – radziecką Kaissą zaprogramowaną przez moskiewskich studentów oraz programem amerykańskim autorstwa studentów MIT. Rozgrywkę wygrali Rosjanie w stosunku 3:1. W roku 1974 rozegrano pierwszą edycję mistrzostw świata komputerów World Computer Chess Championship . Najważniejsze silniki tego okresu to rozwijana dalej Kaissa oraz amerykański Chess , jednak oba silniki nie były w stanie wygrać partii z wytrenowanym zawodnikiem. Ich ranking ELO wynosił około 1700-2000 – w porównaniu ranking ELO Garry’ego Kasparova w najwyższym momencie wynosił ponad 2850. Ciekawostką jest iż pod koniec lat 80 K. Thompson stworzył program umożliwiający rozgrywanie bezbłędnie końcówki 5 elementowe, co ciekawe udowodnił tym samym iż można wygrać wiele z konfiguracji uważanych dotąd za remisowe. Skonstruowany w 1997 roku, specjalnie w celu pokonania w pojedynku szachowym arcymistrza, IBM Deep Blue[9] pokonał aktualnego mistrza świata Garriego Kasparova. Datę tę uważa się za przełomową. Co ciekawe superkomputery z serii Deep Blue oraz Deep Thought miały zaimplementowany podobny algorytm jak o wiele starsze komputery Chess, oparty na siłowym schemacie A Shannona. 5.4 Teoretyczne podstawy systemu szachowego Szachy są dwuosobową grą skończoną, o pełnej informacji, i sumie zerowej. Skończoność wynika z zasady iż jeśli dana pozycja powtórzy się 3-krotnie to partia kończy się remisem. Natomiast suma zerowa oznacza iż cele przeciwników są przeciwstawne (-1) + 1 = 0. Wartość MiniMaksowa - Załóżmy iż istnieją 2 gracze A i B. Strategią nazwiemy pojedynczy wybór gracza. Załóżmy iż gracz A wybiera strategię SA , gracz B w odpowiedzi dobiera strategię SB która jest dla niego najkorzystniejsza. Jednak jeśli wybrana wcześniej przez A strategia SA była optymalna to zabezpiecza sobie w ten sposób wynik gry. Jest to tzw. górna przegrana. Jeśli gracz A będzie cały czas wybierał optymalne w danej sytuacji ruchy przy założeniu że gracz B gra również optymalnie to górna przegrana dla gracza A jest niezmienna od początku gry. Analogicznie, tyle że z pozycji gracza B definiujemy dolną wygraną. Z twierdzenia o mini-maksie wiemy iż te wartości są sobie równe. Wartość minimaksowa dla gracza A w danej pozycji P jest liczbą przeciwną do liczby minimaksowej gracza B. Ogólne Twierdzenie o Minimaksie[15] - Jeśli gracz ma teraz ruch to istnieje przynajmniej jeden ruch nie pogarszający wartości minimaksowej i nie ma żadnego ruchu który by tę wartość powiększył. Algorytm obliczania wartości minimaksowej przedstawia się następująco : MINIMAX(Pozycja P) { If(P.Koncowa) Return Wynik(P) Else{ List = NULL For All (P’ : pozycja możliwa po P) List.AddToList(MINIMAX(P’)) If(A ma teraz ruch) Return List.max() Else Return List.min() } } Gracz A dąży do maksymalizacji wyniku, natomiast B dąży do minimalizacji. Jak widać jest to algorytm rekurencyjny, którego działanie można przedstawić za pomocą drzewa gry. Jeśli będziemy pamiętać w programie który ruch z pozycji P → P 0 zwracał odpowiednio MAX Bądź MIN wartość to otrzymamy gotowy program do gry w szachy. Jednak podany algorytm jest zupełnie niepraktyczny z powodu ogromnej złożoności. Jak wyliczył Shannon ilość możliwych pozycji na szachownicy wynosi (64!/32!)· 8!· 2· 2!· 6 czyli około 1043 . Ponadto zakładając że średnio gracz w danym momencie ma możliwość wykonania około 30 legalnych ruchów oraz iż średnia gra zajmuje 40 pełnych ruchów daje ( 302 ≈ 103 ) 103·40 = 10120 to zakładając szybkość obliczeń na 1 na µs to daje 1090 lat na obliczenie pierwszego ruchu[11]. Aby schemat tego algorytmu mógł się stać praktycznym programem należy przeszukiwać drzewa gry do określonej głębokości, (wchodzić rekurencyjnie tylko do n poziomów) a wynik w liściach drzewa rekurencji określać za pomocą funkcji oceniającej f (P ). Oczywiście taka funkcja ma zwracać jak najbliżej przybliżoną wartość minimaksową dla danej pozycji. Dokładne i przemyślane dobranie funkcji oceniającej jest najważniejszym elementem programu szachowego. Konstrukcja funkcji oceniającej : f (P ) = PN i=0 (wi · Ai (P )) , gdzie P - oceniana pozycja Ai – funkcja zwracająca 0 bądź 1 i oceniająca czy pozycja P ma własność Ai Wi – waga danej własności Ai Najbardziej oczywistą własnością, braną jako A0 jest przewaga materialna. Zakładając że waga pionka to 1, skoczka 3,gońca 3, wieży 5, hetmana 9 a króla 2000 możemy obliczyć przykładowe w0 jako : w0 = 2000(K − K 0 ) + 9(Q − Q0 ) + 5(R − R0 ) + 3(B − B 0 + N − N 0 ) + (P − P 0 ) Gdzie X oraz X 0 to ilość danych figur na szachownicy zawodnika i jego przeciwnika. Tak wielka waga dla króla wynika z tego iż nie możemy dopuścić do jego utraty w trakcie gry, jedyny moment w którym można go zbić to mat. Pozostałe własności zwane pozycyjnymi są o wiele bardziej skomplikowane do wyliczenia i zależą od wielu czynników np. stanu gry (końcówka czy otwarcie, np. król w centrum szachownicy jest pożądany w końcówce,ale nie w czasie otwarcia). Poza tym własności pozycyjne oddziałują na siebie wzajemnie i raz mogą być razem korzystne innym razem przeciwnie. Przykładową wagą własności pozycyjnej może być ocena położenia pionków : w1 = −0.5(D − D0 + S − S 0 + I − I 0 ) gdzie argumenty to odpowiednio ilość zdublowanych, opóźnionych i izolowanych pionków. W praktyce do określania wagi danej własności analizuje się partie arcymistrzowskie rozegrane wcześniej i określa się statystycznie na ile często dana własność występowała przy wygranej a na ile przy przegranej i odpowiednio na tej podstawie określa się wagę. Schemat A Shannona : Mając już zdefiniowaną funkcję oceniającą f (P ) oraz algorytm MINIMAX można stworzyć program szachowy oparty o schemat typu A wg Shannona. SHANNON_A(Pozycja P, N : głębokość przeszukiwania){ If(N==0) OR Koncowa(P) return F(P) Else{ List = NULL For all(P’ { nastepnik P) List.addToList(SHANNON(P’,N-1)) If(ruch gracza A) Return List.max() Else Return List.min() } } Tego typu algorytm opierający się na metodzie brute-force przy dzisiejszej mocy obliczeniowej jest w stanie pokonać człowieka w szachy. Natomiast przy innych grach typu GO gdzie w dla każdej pozycji istnieje około 300 możliwych ruchów ten algorytm będzie miał zbyt płytkie przeszukiwanie i nie pokona nawet amatora. W praktyce głównie korzysta się z modyfikacji algorytmu MINIMAX - AlfaBeta. Polega on na tym aby nie liczyć danego wariantu jeśli równolegle wcześniej znaleźliśmy lepszy ruch. Metoda ta działa tym szybciej im więcej jest cięć, dlatego ważne jest aby ruchy potencjalnie lepsze były sprawdzane wcześniej. W przypadku kolejności od najgorszego do najlepszego algorytm Alfa-Beta zachowuje się dokładnie jak MINIMAX. Schemat B Shannon’a zakładał zaimplementowanie podejścia zbliżonego do myślenia szachisty ( w przeciwieństwie do brutalnego podejścia A) , jednak pomimo wielu prób nigdy nie udało się stworzyć mocnego komputera szachowego w oparciu o takie założenie. 5.5 Deep Blue Komputer IBM Deep Blue zbudowany jako 30 węzłowy klaster IBM RS/6000, z czego każdy węzeł posiadał mikroprocesor 120MHz P2SC wzmocniony 480 specjalnymi szachowymi czipami VLSI[9]. W lutym 1997 Deep Blue był 259 na liście najmocniejszych superkomputerów TOP500 osiągając moc 11.38 GFLOPS w bechmarku LINPACK. Program grający został napisany w języku C, sam algorytm był zmodyfikowaną wersją podejścia Alfa-Beta z funkcją oceniającą. Pracował pod system Rysunek 4: Przykład obcinania węzłów algorytmem Alfa-Beta. AIX. Taka moc pozwoliła Deep Blue sprawdzać co sekundę 200 milionów pozycji na szachownicy. Deep Blue mógł z reguły przeszukiwać z głębokością 6-7 ruchów ( ruch składa się z dwóch posunięć zawodników ), a w niektórych sytuacjach nawet do 20 bądź więcej ruchów. Obliczono że powiększenie możliwości przeszukiwania o kolejny „pół-ruch” zwiększa ranking szachowy maszyny o około 50-70 punktów ELO. Największym problemem przy konstruowaniu komputera było wyznaczenie funkcji oceniającej która powstała poprzez rozważenie wielu tysięcy możliwych rozpoczęć oraz na podstawie około 700 000 gier mistrzowskich. Przed pojedynkiem z aktualnym arcymistrzem Gary’m Kasparovem, funkcje oceniająca była modyfikowana na podstawie sugestii innych wybitnych zawodników. W Maju 1997 Deep Blue stał się pierwszym komputerem szachowym który wygrał z aktualnym mistrzem świata w meczu ze standardową kontrolą czasu – w stosunku 3.5 : 2.5. 6 6.1 Modelowanie i prognoza pogody Wstęp Podejście klasyczne (synoptyczne): powstaje na podstawie pomiarów (klasycznych oraz satelitarnych) parametrów pogodowych takich jak: ciśnienie, temperatura, zachmurzenie, prędkość wiatru itp. Dane są nanodzone na mapy synoptyczne, a synoptyk na podstawie znajomości i zrozumienia mechanizmów zjawisk pogodowych oraz przy pomocy subiektywnej oceny wyznacza najbardziej prawdopodobne zjawiska, które mogą wystąpić. Wadą takiej metody jest duża zależność od czynnika ludzkiego – subiektywność oceny zjawisk, duża praca potrzebna do stworzenia prognozy, konieczność nanoszenia danych na mapy i przeglądania ich, oraz oczywiście mała dokładność. Podejście numeryczne: opiera się najczęściej na zastosowaniu metod statystycznych wspomaganych oraz zasad fizyki. Aby uzyskać prognozę numeryczną należy stworzyć odpowiedni model zawierający wartości opisujące parametry pogodowe w odpowiedniej liczbie stanów czasowych oraz równania fizyczne i statystyczne przybliżające wielkości w czasie t + 1 na podstawie odpowiedniej ilości znanych pomiarów poprzednich. Idea takiej prognozy pogody została wprowadzona w latach 20-tych XX wieku przez angielskiego uczonego, Lewisa Richardsona. Obliczenia na początku wykonywane były ręcznie, co nie pozwalało na osiągnięcie dużej dokładności, zwiększało prawdopodobieństwo popełnienia błędu oraz praktycznie uniemożliwiało użycie wyszukanych teorii czy też dokładniej opisujących parametry modelu równań matematycznych. Przełomem w prognozowaniu numerycznym okazało się wprowadzenie najpierw maszyn liczących, co pozwoliło na znaczne usprawnienie wykonywanych obliczeń oraz zwiększenie ilości czynników. Naturalną konsekwencją tego kroku stało się użycie komputerów. Jednakże i tutaj pojawiły się trudności. Oczywistym jest, że chcąc wykonać bardzo dobrą prognozę trzeba użyć ogromnej ilości parametrów. Przykładem mogą być choćby tak egzotyczne wielkości jak siły wypornościowe związane z dostarczaną energią słoneczną, czy tarcie powietrza o ziemię. Niemniej jednak, wraz ze wzrostem mocy obliczeniowej możemy zwiększyć dokładność obliczeń poprzez dodanie nowych składników oraz użycie bardziej wyrafinowanych metod prognozowania. Oczywiście zwiększenie ilości obliczeń wykonywanych w jednostce czasu pozwala także na zwiększenie ”gęstości” otrzymywanych wyników. 6.2 Zastosowanie superkomputerów. Stworzenie odpowiedniego modelu numerycznego nie jest łatwe. Potrzeba do tego małej armii programistów i naukowców, którzy przez ponad rok tworzą odpowiedni model. Potem dla tak utworzonego modelu należy znaleźć odpowiednio szybki superkomputer, który będzie w stanie podołać obliczeniom. Superkomputery są drogie nie tylko w wytwarzaniu, ale i w użytkowaniu. Pobierają ogromne ilości energii, zajmują duże powierzchnie, które trzeba odpowiednie chłodzić, a więc każde niedopracowane oprogramowanie uruchamiane na nich może przynosić ogromne straty. Trzeba więc najpierw opracować metodę która pozwoli zminimalizować ryzyko. W celu uproszczenia procesu projektowania oprogramowania używa się więc ”miniaturowych superkomputerów” – specjalnie zaprojektowanych systemów, które są zgodne ze specyfikacją odpowiedniego superkomputera, na którym prowadzone mają być obliczenia. Po zaakceptowaniu modelu i realizującego go programu jako poprawnego może on być uruchomiony na superkomputerze i dostarczać odpowiednio dokładnych danych. Najbardziej rozbudowane superkomputery, pracujące w Ameryce potrafią w ciągu około 5 godzin przygotować prognozę na następne 16 dni uwzględniając przy tym takie czynniki, jak temperaturę, prędkość wiatru na różnych pułapach, ciśnienie, zachmurzenie i wiele więcej. Z wyników pracy takich komputerów, poprzez dane przekazywane w telewizji i na stronach internetowych korzysta większość mieszkańców Ziemi. Oczywiście superkomputery na nic zdałyby się bez odpowiednich danych. Tutaj też powszechna jest elektronika i wszystkie potrzebne do przygotowywania prognoz zmienne przetwarzane są zaraz po automatycznym pomiarze na postać odpowiednią dla wykorzystujących je programów i przesyłane do superkomputera, który po skompletowaniu informacji może rozpocząć obliczanie prognozy. 6.3 Przykłady modeli. WRF – Weather Research and Forecasting Model : Jest to wieloletni projekt rozwijany przez kilka firm i uniwersytetów. Model jest projektowany jako mezoskalowy numeryczny system przewidywania pogody [12]. Ma on za zadanie zapewniać zarówno samo przewidywanie jak i wspomaganie dla badań nad atmosferą. Jest zaprojektowany w taki sposób, aby możliwe było wykorzystanie obliczeń równoległych oraz rozbudowywanie systemu, co jak wiadomo jest idealnym rozwiązaniem dla superkomputerów. Model jest ponadto pomyślany tak, aby było możliwe dostosowanie wymaganej skali (można wybrać skalę w zakresie od metrów do tysięcy kilometrów). Model ten jest w chwili pisania tego artykułu wykorzystywany w kilkudziesięciu centrach badawczych i prognozowych takich jak na przykład National Observatory of Athens czy uniwersytet w Illinois. Ponadto jest on wciąż rozwijany poprzez zorganizowaną grupę developerów. GEOS-5 SYSTEM - Goddard Earth Observing System Model, Version 5 : jest systemem zintegrowanych modeli używających podsystemu zwanego Earth System Modeling Framework (ESMF)[13]. Projekt ten jest rozwijany przez NASA i jest używany do analizowania danych, przewidywania zmian klimatycznych i prognozowania pogody oraz podstawowych badań związanych z klimatem. System ten pozwala na uwzględnienie zjawisk, które powodują nagłe zmiany w klimacie (wybuchy wulkanów, ogromne trzęsienia ziemi itp.). Może być on używany w wielu konfiguracjach np. do badania oceanów, nume- rycznego prognozowania pogody oraz innych. GEOS-5 jest w tej chwili oprogramowaniem typu open-source, co oznacza że możliwe jest jego nieodpłatne wykorzystywanie poprzez zarejestrowanych użytkowników. 6.4 Superkomputer Columbia NASA Nazwany na cześć zmarłych członków załogi promu kosmicznego Columbia, superkomputer został zaprojektowany do prac nad badaniami modeli klimatycznych[2]. Wykorzystywany przez Amerykańską Agencję Kosmiczną superkomputer do niedawna był jednym z najpotężniejszych na świecie. Dla podkreślenia jak szybko zmienia się moc obliczeniowa takiej maszyny można użyć następującego porównania: około roku 1985 najpotężniejszy używany przez NASA superkomputer o nazwie Ames miał wydajność rzędu 1 GFLOPS ( 109 operacji na sekundę). Opisywana tutaj Columbia jest 50 tysięcy razy szybsza. Co ciekawe już w 2000 roku najszybszy procesor z rodziny Pentium III firmy Intel miał wydajność około 2,1 GFLOPS. Porównanie to bardzo dobrze obrazuje płynność słowa ”superkomputer” – coś co jest superkomputerem teraz, za kilkanaście lat będzie kilkadziesiąt tysięcy razy wolniejsze od przyszłych superkomputerów, a podobną wydajność oferować będą urządzenia biurowe. Najważniejsze programy wykonywane na superkomputerze Columbia : Cart3D – program pozwalający badać aerodynamikę. Używany jest zarówno do badania istniejących rozwiązań, jak też i projektowania nowych. Używany przede wszystkim do optymalizowania elementów promów kosmicznych Debris – zestaw programów do badania trajektorii pyłów i drobnych cząsteczek zderzających się z pojazdami latającymi. Estimating the Circulation and Climate of the Ocean (ECCO) pozwala na obliczenia modeli oceanów o wielkiej skali i o dużej rozdzielczości. Używany jest do monitorowania poziomu mórz, czy pomiaru lodowców za pomocą gromadzonych przez satelity danych. The NASA Finite Volume General Circulation Model (FVGCM) - jest programem pozwalającym na tworzenie prognoz klimatycznych i pogodowych dla całej kuli ziemskiej. Używany przede wszystkim do tworzenia prognoz czasu rzeczywistego dla bardzo gęstej siatki o boku 25 km. Kod programu jest na tyle dobry że potrafi przewidzieć huragany z dokładnością do 100km na 5 dni przed ich pojawieniem się. PHANTOM – program pozwalający na symulację maszyn turbinowych. Kod może być używany zarówno do turbin działających w płynach jak i w gazach. References 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. http://www.top500.org/project/linpack http://www.nas.nasa.gov/About/Projects/Columbia/columbia.html http://pl.wikipedia.org/wiki/Manchester Mark I http://www.computerbasicsguide.com/basics/supercomputers.html http://www.chip.pl/artykuly/trendy/2009/06/400-000-pecetow-w-jednymkomputerze http://www.colindaylinks.com/bletchley/bletchley4.html http://en.wikipedia.org/wiki/Colossus computer http://en.wikipedia.org/wiki/Supercomputer http://www.research.ibm.com/deepblue/ http://www-03.ibm.com/ibm/history/exhibits/mainframe/mainframe PP704.html http://mathworld.wolfram.com/Chess.html http://wrf-model.org/ http://gmao.gsfc.nasa.gov/systems/geos5/ http://www.chessbase.com/columns/column.asp?pid=102 Adama Kujawski, Uniwersytet Warszawski 1994 praca magisterska Programowanie gry w szachy http://www.armageddon.szach.pl/joanna.pdf Shannon, Claude E. Programming a Computer for Playing Chess