• Nie Znaleziono Wyników

3.   Istota rozwiązania

3.4.   Przetwarzanie rozproszone

Algorytmy współbieżne i rozproszone, pomimo swoich ograniczeń, są dziś ochoczo stosowane w niezliczonej liczbie złożonych problemów obliczeniowych. Ich popularność wynika bezpośrednio z zalet ich stosowania:

§ umożliwiają rozwiązanie zadań zbyt dużych/złożonych dla maszyny sekwencyjnej,

§ umożliwiają znaczne skrócenie czasu przetwarzania poprzez równoczesne wykorzystanie wielu procesorów/węzłów,

§ umożliwiają zwiększenie precyzji obliczeń przy tym samym czasie obliczeń, § umożliwiają lepsze wykorzystanie mocy komputerów wieloprocesorowych

i procesorów wielordzeniowych,

§ umożliwiają zwiększenie niezawodności.

Algorytmy współbieżne mają nieoceniony udział w dzisiejszym postępie cywilizacyjnym, umożliwiają bowiem przeprowadzanie badań (symulacji/obliczeń) zagadnień tak złożonych, że ich przeprowadzenie bez współbieżności jest bardzo czasochłonne lub nawet niemożliwe. Niestety nie tylko problem zrównoleglania algorytmów sekwencyjnych stanowi nierozłączną część każdego problemu obliczeniowego, lecz co więcej nie wszystkie istniejące algorytmy da się zamienić na bardziej efektywną od sekwencyjnej postać współbieżną. Istnieje wiele czynników wpływających na opłacalność i wydajność obliczeniową algorytmu równoległego. Najistotniejszymi z nich dla niniejszej pracy są: ziarnistość zadań, topologia oraz czas komunikacji.

Podstawowe miary efektywności zrównoleglania

Zaprojektowanie oraz zaimplementowanie algorytmu współbieżnego każdorazowo wiąże się z dogłębną analizą natury rozwiązywanego problemu obliczeniowego oraz precyzyjnym określeniem wszystkich aspektów Inżynierii Oprogramowania danego

algorytmu (klas, diagramów, zależności, komunikacji, m.in.). Niezbędne jest również określenie rodzaju zastosowanego zrównoleglenia:

§ zrównoleglenie procesowe (zrównoleglenie kodu) § zrównoleglenie danych

W ramach równoległości procesowej wyróżnia się [124]:

§ równoległość funkcjonalną (przypisanie odmiennych zadań obliczeniowych poszczególnym węzłom)

§ równoległość geometryczną (przypisanie odmiennego fragmentu kodu zadania obliczeniowego, m.in. w zadaniach związanych z przemieszczaniem mas powietrza, teorią pola, m.in.)

§ równoległość algorytmiczna (przypisanie jak najmniejszych zadań)

Zadania obliczeniowe stawiane architekturom równoległym z założenia nie są zadaniami trywialnymi (wówczas zbędne byłoby stosowanie zrównoleglenia), dlatego fazę69 projektowania należy przeprowadzić z nadzwyczajną dbałością o optymalność70 kodu.

Z tego powodu niezwykle istotnym zagadnieniem, nierozerwalnie związanym z algorytmami współbieżnymi, jest metodyka określania efektywności kodu równoległego. W przypadku tworzenia kodu współbieżnego na podstawie istniejącego rozwiązania/ /algorytmu sekwencyjnego (czyli tzw. zrównoleglania kodu) niezbędne jest określenie zysku/strat wynikających ze zrównoleglenia. W tym celu stosuje się tzw. miary efektywności zrównoleglenia.

Jako podstawowe miary efektywności zrównoleglenia literatura [56] podaje m.in.: § współczynnik przyspieszenia oraz wydajność (względny współczynnik

przyspieszenia),

§ skalowalność i sprawność

Współczynnik przyspieszenia (równanie 3) określa się na podstawie czasu wykonania danego algorytmu dla jednego procesora (rdzenia/węzła) oraz czasu wykonania tego samego algorytmu w implementacji równoległej (wieloprocesorowej):

S(n, p) = T (n,1)

T (n, p) (3)

gdzie S – współczynnik przyspieszenia; T – czas wykonania zadania;

69 Terminu użyto w znaczeniu znanym z Inżynierii Oprogramowania, dotyczy jednej z faz cyklu życia oprogramowania.

70 Kod optymalny – poprawny i bezpieczny kod, o najmniejszej możliwej złożoności obliczeniowej, wykonujący dane zadanie w możliwie najkrótszym czasie.

n – wielkość zadania; p – ilość procesów;

Również przy użyciu współczynnika przyspieszenia przedstawia się zależność zwaną Prawem Amdahla (równanie 4), które mówi o maksymalnym możliwym do osiągnięcia przyspieszeniu obliczeń przy przyspieszeniu jedynie części algorytmów danej aplikacji. Prawo Amdahla stosowane jest przy określaniu teoretycznego przyspieszenia algorytmów zrównoleglanych – gdzie za część przyspieszaną rozumie się część współbieżną algorytmów, w przeciwieństwie do części sekwencyjnej. Z Prawa Amdahla (4) wynika, że maksymalne teoretyczne przyspieszenie algorytmu ograniczone jest do wartości będącej odwrotnością udziału części sekwencyjnej w algorytmie [56].

S(n, p)#p!"##! 1

!(n,1) (4)

gdzie S – współczynnik przyspieszenia;

β – udział czasu wykonania części sekwencyjnej zadania;

Literatura podaje sposób „osłabiania Prawa Amdahla” – poprzez stosowanie obliczeń asynchronicznych bez sztywnego podziału algorytmu na część sekwencyjną i równoległą [56]. Rozwiązanie prezentowane w niniejszej pracy bazuje na zrównolegleniu funkcjonalnym algorytmu, z asynchronicznym przesyłaniem danych i asynchroniczną pracą węzłów.

Inną miarą efektywności zrównoleglania jest skalowalność, określająca zależność sprawności algorytmu programu równoległego od liczby użytych procesorów (węzłów). Skalowalność definiowana jest w literaturze [56] jako własność systemu polegająca na zachowywaniu tej samej sprawności dla różnej liczby procesorów. Sprawność natomiast może być wyznaczona ze wzoru (5):

!(n, p) = 1 1+h(n, p)

w(n)

(5)

gdzie η – sprawność programu równoległego;

w – liczba operacji związanych z obliczeniami; h – narzut na komunikację;

Ogromny wpływ na skalowalność ma czas komunikacji, celowe jest zatem poszukiwanie sposobów jego zmniejszania, co również jest realizowane w niniejszej pracy.

Popularne narzędzia przetwarzania rozproszonego

W ostatniej dekadzie wzrost popularności maszyn równoległych zaskoczył nawet najbardziej optymistycznych zwolenników tego rodzaju architektur. Przed rokiem 2004 termin „maszyny równoległe” kojarzony był z wieloprocesorowymi serwerami, sieciami maszyn (klastry, gridy) i innymi specjalistycznymi architekturami. Natomiast od roku 2004, w którym producenci procesorów dotarli do bariery 4GHz [22], do grona maszyn równoległych dołączyły nawet najtańsze komputery osobiste. Pomimo od dawna istniejących rozszerzeń strumieniowych, technologia HT (ang. HyperThreading), uznawana za pierwszy zdecydowany krok w kierunku procesorów wielordzeniowych, nie dawała zadowalającego przyspieszenia. Dopiero pierwsze procesory wielordzeniowe71 dały użytkownikom komfort pracy wcześniej zarezerwowany tylko dla użytkowników o wiele droższych komputerów wieloprocesorowych.

Niezwykle istotnym sposobem znacznego przyspieszenia szeroko rozumianych obliczeń macierzowych jest zastosowanie specjalistycznych kart GPGPU (ang. General Purpose computing on Graphics Processing Units). Stosowanie coraz potężniejszych procesorów GPU do zastosowań innych niż przetwarzanie obrazu stało się tematem szczególnie atrakcyjnym po publikacji [40] z 2005 roku, choć termin GPGPU powstał nieco wcześniej, a koncepcja – znacznie wcześniej: [149]72. W roku 2007 firma NVIDIA rozpoczęła produkcję pierwszych dedykowanych73 kart GPGPU serii Tesla. Obecna najnowsza74 wersja – Tesla C2070 – oferuje moc obliczeniową do75 1.03 T FLOPS [94] (ang. Floating point Operations Per Second). Według aktualnego rankingu Top500, trzy spośród pierwszej czwórki najpotężniejszych superkomputerów na świecie, zbudowano w oparciu o karty GPGPU NVIDIA Tesla [143].

71 Procesory wielordzeniowe (ang. multicore) – układy scalone zawierające dwa lub więcej pojedynczych procesorów oraz wspólny interfejs do magistrali systemowej i przełącznicę krzyżową, czasami wspólną pamięć drugiego poziomu [56]

72 Publikację przytoczono jako przykład - profesor Wiatr w swojej monografii nie opisuje co prawda procesorów GPU, lecz „specjalizowane procesory sprzętowe o architekturze potokowej” (FPGA – ang. Field Programmable

Gate Arrays). Programowanie dzisiejszych procesorów nierozerwalnie wiąże się z przetwarzaniem potokowym,

dlatego można się dopatrywać wspólnej platformy łączącej te dwa nurty – przetwarzania potokowego wyspecjalizowanymi procesorami, mającego na celu przyspieszenie obliczeń. Przetwarzanie potokowe jest koncepcją o wiele starszą: [3].

73 Karty zawierające szybki procesor graficzny GPU, szybką pamięć (oraz pozostałe niezbędne komponenty), nie posiadające wyjścia na monitor – służące z założenia wyłącznie do celów obliczeniowych.

74 czerwiec 2010r.

Oprócz GPGPU istnieje jeszcze wiele procesorów o innych architekturach niż te znane z komputerów osobistych. Za najbardziej reprezentatywny przykład może posłużyć procesor CELL, użyty (w wersji76 PowerXCell 8i) w serii „Roadrunner”, z których jeden był najszybszym superkomputerem na świecie w latach 2008-2009 (i jednocześnie najbardziej ekologicznym77) według tej samej listy [143].

Pomimo rosnącej popularności kart GPGPU, zdecydowaną większość wykorzystywanych maszyn równoległych stanowią nadal superkomputery nie wykorzystujące GPGPU oraz wirtualne (sieciowe) maszyny równoległe, czyli popularne klastry i gridy. Podział superkomputerów ze względu na ich architekturę w ciekawy i przystępny sposób opisuje [56]. Klastry i gridy są pojęciami do siebie zbliżonymi, oznaczają grupę niezależnych komputerów, połączonych siecią komputerową, z uruchomionym programem (biblioteką lub demonem) umożliwiającym wykorzystanie mocy obliczeniowej wszystkich komputerów w jednej aplikacji. To co różni klastry od gridów to zasięg (sieć) oraz architektura komputerów. Gridy łączą komputery nawet w skali sieci globalnej, połączone komputery mogą mieć różne systemy/architektury. Gridy, zwane też komputerami globalnymi, są siecią połączonych heterogenicznych maszyn, podczas gdy klastry składają się z maszyn będących w niewielkiej odległości, zazwyczaj homogenicznych.

Przetwarzanie rozproszone w niniejszej pracy

Eksperymenty implementacyjne, będące uzupełnieniem niniejszej pracy, przeprowadzano z wykorzystaniem klastrów komputerowych. Klastry komputerowe są rozwiązaniem optymalnym zarówno pod względem ekonomicznym jak i w kontekście powtarzalności (i rozwoju) przeprowadzanych badań i opracowywanych implementacji.

Szczegóły techniczne użytych narzędzi przetwarzania rozproszonego, jak również sprzętu komputerowego wchodzącego w ich skład, przedstawiono w rozdziale 4.1.

Najbardziej znaczące spośród eksperymentów implementacyjnych przeprowadzono z użyciem interfejsu MPI (ang. Message Passing Interface) [33], wykorzystując bibliotekę LAM/MPI [67].

76 Asymetryczny 9-rdzieniowy procesor w architekturze Power, zawierający osiem rdzeni [56] wektorowych AltiVec

MPI jest to specyfikacja interfejsu dla tworzonych bibliotek MPI, opisująca sposób przekazywania komunikatów [78] pomiędzy procesami w aplikacjach równoległych. Standard MPI definiuje m.in. sposoby komunikacji międzyprocesowej, synchronizacji oraz tworzenia wirtualnych topologii. Biblioteką MPI określa się każdą spośród implementacji interfejsu MPI, poczynioną wg specyfikacji. Najbardziej popularnymi bibliotekami MPI są MPICH2 i LAM/MPI.

Część eksperymentów przeprowadzono w środowisku Xgrid, stanowiącego narzędzie systemowe systemu operacyjnego MacOsX, służące tworzeniu klastrów i gridów na platformach Apple Macintosh. Konfiguracja i użytkowanie klastra Xgrid są o wiele mniej złożone niż w przypadku LAM/MPI, jednak wytworzenie aplikacji wykorzystującej klaster może się okazać trudniejsze78.