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

Podobne dokumenty