Zasady projektowania algorytmów równoległych Rafał Walkowiak Zima? 25 /8/25 Zasady projektowania
Algorytm równoległy Algorytm sekwencyjny: sekwencja kroków rozwiązujących problem przy użyciu komputera sekwencyjnego. Algorytm równoległy: jak rozwiązać problem przy użyciu komputera równoległego? Specyfikacja kolejnych kroków i kroków, które mogą być realizowane współbieżnie. Zadania: określenie pracy nadającej się do współbieżnej realizacji przydział współbieżnych fragmentów pracy na procesory współbieżne dystrybucja danych wejściowych, wyjściowych i pośrednich zarządzanie dostępem do danych współdzielonych przez wiele procesorów synchronizacja procesorów na różnych etapach wykonania programu równoległego. Określenie algorytmu równoległego to zadanie dla programisty i projektanta algorytmów niewiele można zrobić automatycznie. /8/25 Zasady projektowania 2
Podział, zadania i graf zależności kolejnościowych Podział (ang. decomposition) obliczeń na zadania (ang. tasks). Współbieżna realizacja zadań podstawowym warunkiem efektywności przetwarzania równoległego. Zadania: dowolne rozmiary, niepodzielne, niezależne lub zależne: pewne zdania wykorzystują dane generowane przez inne zadania i oczekują na ich zakończenie: powiązania tego typu opisuje: graf zależności kolejnościowych graf acykliczny, węzły zadania, łuki -zależności między zadaniami: zadanie może być wykonane, gdy zakończyło się przetwarzanie wszystkich zadań połączonych z nim łukiem wejściowym, wagi w węzłach określają ilość pracy zadania. /8/25 Zasady projektowania 3
Przykład Podział przykłady generacji zadań wiele zadań to możliwość przetwarzania równoległego A * b = y - niezależne zadania różnej wielkości, graf zależności bez łuków Relacyjna baza danych samochodów: zapytanie dotyczące modelu, roku produkcji, koloru. Realizacja: generacja tablic zawierających informacje oddzielnie o modelu, roku i kolorze, następnie wyznaczenie przecięcia lub sumy tablic. corsa 2 srebrny biały corsa 2 srebrny biały corsa i 2 9 srebrny lub biały 6 Przykład2 srebrny lub biały corsa i 2 i (srebrny lub biały) 2 i (srebrny lub biały) 8 Grafy zależności kolejnościowych dla różnych sposobów przetwarzania zapytania. corsa i 2 i (srebrny lub biały) 7
Ziarnistość (ang. granularity) określona za pomocą liczby i rozmiaru zadań, obliczenia drobnoziarniste i gruboziarniste. Stopień współbieżności (ang. degree of concurrency) liczba zadań nadająca się do jednoczesnej realizacji, maksymalny, średni stopień współbieżności (dla zapytania o samochody z poprzedniej strony, 4;2.33, 4;,88) Ścieżka krytyczna w grafie zależności kolejnościowych najdłuższa ścieżka skierowana pomiędzy dowolną parą węzłów wejściowego (bez łuków wejściowych) i wyjściowego (bez łuków wyjściowych). Długość ścieżki krytycznej to suma etykiet węzłów na ścieżce krytycznej. Stosunek całej pracy do długości ścieżki krytycznej określa średni stopień współbieżności. Graf interakcji (między zadaniami) jest nadgrafem grafu zależności kolejnościowych i uwzględnia dodatkowo interakcje związane z koniecznością udostępnienia danych wejściowych, wyjściowych lub pośrednich przez zadania, które są właścicielami tych danych (w modelu p.r. z przesyłaniem komunikatów) przykład: mnożenie macierzy (przydział poszczególnych wierszy tablicy i wektora do procesorów udostępnianie elementów wektora). /8/25 Zasady projektowania 5
Procesy i przydział zadań Proces jednostka realizująca przetwarzanie, wykorzystuje ona kod i dane odpowiadające zadaniu i generuje dane wyjściowe w określonym czasie po aktywacji zadania przez program równoległy. Proces realizuje obliczenia, komunikuje się i synchronizuje z innymi procesami. Dla uzyskania przyspieszenia koniecznych jest wiele procesów aktywnych współbieżnie i pracujących nad różnymi zadaniami. Aby tego dokonać konieczny przydział zadań do procesów (ang. mapping). Przydział zadań Graf zależności kolejnościwych i graf interacji - baza wyjściowa maksymalizacja współbieżności przez przydział zadań niezależnych do różnych procesów, minimalizacja całkowitego czasu przetwarzania przez zapewnienie możliwości wykonania każdego zadania ze ścieżki krytycznej natychmiast jak tylko stanie się ono gotowe, minimalizacja interakcji przez przydział zadań o wysokim stopniu wzajemnych interakcji do jednego procesu, powyższe cele są często konfliktowe, przydział zadań określa w jaki sposób wykorzystana zostanie współbieżność zdefiniowana na etapie podziału, kluczowy dla efektywności przetwarzania. /8/25 Zasady projektowania 6
Przydział zadań do procesów cd przykład str 4 liczba interakcji Z4 Z3 Z2 Z Z4 Z3 Z2 Z P3 P2 P P P3 P2 P P Z6 Z5 Z5 Z7 P2 P P Efektywny przydział przypadku samochodowego na 4 procesory. Proces jednostka logiczna realizująca zadania Procesor jednostka sprzętowa wykonująca przetwarzanie Rzutowanie jeden do jeden - proces procesor na danym etapie projektu algorytmu uwzględniającym jedną formę współbieżności. Zadania procesu przydzielonego do węzła wieloprocesorowego mogą się stać elementem dalszego podziału uwzględniającego architekturę sprzętu. /8/25 Zasady projektowania 7 Z7 Z6 P P P
Metody ogólnego przeznaczenia: - dekompozycja rekursywna, - dekompozycja danych. Techniki podziału Metody specjalnego przeznaczenia: - dekompozycja eksploracyjna. Dekompozycja rekursywna polega na podziale problemu na zbiór podobnych niezależnych podproblemów, które będą mogły być rozwiązane przez podobną dekompozycję rekursywnie. Strategia dziel i zwyciężaj. Przykłady: - sortowanie poprzez rekursywny podział zbioru względem elementu osiowego na dwa podzbiory - znajdowanie maksimum przez rekursywny podział na zbioru na równe podzbiory i znajdowanie w nich maksimum /8/25 Zasady projektowania 8
Dekompozycja rekursywna przykłady określanie zadań 5 2 6 8 7 9 min(,2) 5 6 8 7 9 2 min(4,) min(9,2) 5 6 7 8 9 2 min(4,9) min(,6) min(9,) min(2,2) 5 6 7 8 2 2 Podział na 2 podzbiory o wartościach mniejszych i większych równych elementowi osiowemu; wynik w liściach. Rekurencyjny podział zbioru na podzbiory, a następnie propagacja wartości minimalnej z dwóch elementów. /8/25 Zasady projektowania 9
Dekompozycja danych () Dekompozycja danych wyjściowych określenie zadania jako pracy niezbędnej do wyznaczenia podzbioru danych wyjściowych Przykłady: mnożenia tablic elementy tablicy wyniku znajdowanie częstości występowania podzbiorów w bazie transakcji jeden/kilka wzorców dla różnych podzbiorów bazy /8/25 Zasady projektowania
Dekompozycja danych (2) Dekompozycja danych wejściowych określenie zadania jako pracy niezbędnej do przetworzenia podzbioru danych wejściowych, zazwyczaj konieczne dalsze zdania dla konsolidacji uzyskanych w ten sposób wyników pośrednich dla uzyskania wyników ostatecznych. Przykłady: znajdowanie częstości występowania podzbiorów w bazie transakcji krotności dla wszystkich wzorców w fragmencie bazy transakcji wyznaczanie sumy elementów zbioru (praca na podzbiorach). /8/25 Zasady projektowania
Dekompozycja danych (3) Podział danych wejściowych i wyjściowych. Podział danych pośrednich zdefiniowanie zadań obliczających elementy danych pośrednich Reguła właściciel przetwarza bazuje na dekompozycji danych zadanie oblicza wszystko co może wyznaczyć bazując na partycji danych wejściowych lub oblicza wszystkie elementy przydzielonej mu partycji danych wyjściowych. /8/25 Zasady projektowania 2
Dekompozycja eksploracyjna Dotyczy przeszukiwania przestrzeni rozwiązań. Zadania określają jedno z rozwiązań na drodze do celu. Każde zadanie może mieć wielu następników Znalezienie poszukiwanego rozwiązania powoduje przerwanie realizacji pozostałych zadań. Sekwencyjna generacja zadań (rozwiązań) startowych dla przetwarzania równoległego. Przykłady: metody kombinatoryczne lokalnego przeszukiwania: tabu search, genetic algorithms itp. /8/25 Zasady projektowania 3
Dekompozycja eksploracyjna - przykład - 5-to elementowa układanka 2 3 4 5 6 8 9 7 3 4 5 2 2 3 4 5 6 7 8 9 3 4 5 2 2 3 4 5 6 7 8 9 3 4 5 2 2 3 4 5 6 7 8 9 2 3 4 5 rozwiązanie startowe rozwiązania pośrednie rozwiązanie końcowe Zadania polegają na wyznaczaniu możliwych następników aktualnego rozwiązania (zadania) i współbieżnej ich analizie. Rozwiązanie startowe ma 4 następników: 7 w górę, 8 w lewo, 6 w prawo, 3 w dół /8/25 Zasady projektowania 4
Charakterystyka zadań Statyczne generowanie zadań zadania znane przed rozpoczęciem przetwarzania (dekompozycja danych), statyczny graf zależności danych (dekompozycja rekursywna) Dynamiczne generowanie zadań zadania tworzone na bieżąco w czasie przetwarzania (dekompozycja rekursywna) Rozmiary zadań jednakowe- zadania jednorodne, niejednakowe- zadania niejednorodne Znajomość rozmiarów zadań Wielkość danych związanych z zadaniem dane wejściowe, wyjściowe, pośrednie różny rozmiar /8/25 Zasady projektowania 5
Rodzaje interakcji zadań Interakcje wymiana danych, pracy, synchronizacja Interakcje statyczne określony moment i uczestnicy interakcji przed rozpoczęciem przetwarzania łatwe do implementacji w modelu z przekazywaniem komunikatów Interakcje dynamiczne brak określonych z góry momentu bądź uczestników interakcji implementacja w modelu z przekazywaniem komunikatów ze względu na konieczność uczestnictwa 2 stron wymaga wprowadzenia dodatkowych mechanizmów synchronizacji lub badania stanu. Interakcje regularne i nieregularne Interakcje: tylko-odczyt, odczyt-zapis Interakcje jedno-, dwu- stronne jednostronne możliwe w modelu współdzielonej pamięci, interakcje dwustronne wymagają zaangażowania 2 zadań, w modelu z przekazywaniem komunikatów interakcje dwustronne. /8/25 Zasady projektowania 6
Przydział zdań do procesorów Cel: minimalizacja czasu, w którym wszystkie zadania zostaną wykonane. Praktycznie minimalizacja czasu niezbędnego na interakcję między procesami, minimalizacja czasu bezczynności procesorów (ograniczenia kolejnościowe zadań) Dobry przydział zapewnia zrównoważenie przetwarzania i interakcji między procesami na każdym etapie realizacji algorytmu równoległego. Przydział statyczny stosowany gdy zadania generowane statycznie o znanym koszcie łatwiejsze programowanie. Przydział dynamiczny stosowany gdy zadania generowane dynamicznie, uwzględnienie lokalizacji i wielkości danych oraz modelu programowania trudniejsze programowanie, potencjalnie bardziej efektywne przetwarzanie. /8/25 Zasady projektowania 7
Przydział statyczny Przydział bazujący na podziale danych lub statycznym grafie zależności między zadaniami. Schematy przydziału bazujące na podziale danych, podziale zadań i hierarchiczne schematy przydziału. W podziale danych zadania definiowane są przez określenie danych. Przydział zadań do procesorów polega w tym przypadku na przydziale (dystrybucji) danych do procesorów. Schematy dystrybucji danych dzielą się w zależności od struktury danych: dystrybucje tablicowe: blokowe, gdy jednakowa ilość pracy związana z generowanym elementem cykliczne, gdy ilość pracy różna dla różnych elementów (znany trend): brak lokalności danych, wiele różnorodnych zadań większe prawdopodobieństwo, że któreś z nich gotowe, przykład - LU faktoryzacja. blokowo-cykliczne, analogiczne zyski do cyklicznej dystrybucji, większa lokalność danych. losowe dystrybucje blokowe w przypadkach gdy struktura przetwarzania nieregularna (tablice rzadkie) i możliwe nierównomierne przydziały pracy w dystrybucji cyklicznej podział grafu nieregularne struktury danych, graf określający sąsiedztwo elementów struktury danych powinien być podzielony na podgrafy (zdania procesorów) w sposób minimalizujący liczbę krawędzi z wierzchołkami przynależnymi do różnych podgrafów, przykład: symulacja rozprzestrzeniania się zanieczyszczeń w akwenach wodnych o nieregularnych kształtach. Zasady projektowania 8
Blokowy przydział statyczny - przykład A x B = C P. P6. P5 P P P2 P3 P4 P5 P6 P7 P8 P9 PP P2P3P4P5 A x B = C Przydział statyczny bazujący na podziale danych wyjściowych. Dane wejściowe niezbędne dla mnożenia tablicy podział wymiariowy n 2 +n 2 /6 O(n 2 ) podział 2 wymiarowy n 2 /2 O(n 2 / p)
Przydział statyczny (2) Statyczny regularny graf interakcji między zadaniami 4 2 4 2 3 4 5 6 7 Przydział zadań opisanych binarnym drzewem zależności do hiperkostki procesów. Minimalizacja kosztów komunikacji: wiele zależnych od siebie zadań przydzielonych do tego samego procesora, pozostałe zadania komunikujące się przydzielone do procesorów bezpośrednio ze sobą połączonych. Zapewnienie maksymalnej równoległości: wszystkie zadania nadające się do współbieżnej realizacji przydzielone do różnych procesorów. Minimalizacja czasu jałowego: tutaj oczekiwanie procesorów na realizację przetwarzania wynika z zależności kolejnościowych opisanych w grafie interakcji a nie z liczby zadań. 6
Przydział zadań do procesorów miary jakości Rzutowanie grafu zadań na graf architektury systemu komputerowego - odwzorowanie (zagnieżdżenie) grafów. Graf aplikacji - graf wyjściowy przydziału - graf zadań ze strukturą komunikacji (połączeń między zadaniami). Graf systemu obliczeniowego - graf docelowy przydziału - struktura systemu wielokomputerowego, w którym przetwarzanie ma być realizowane. Przeciążenie (ang. congestion) liczba ścieżek komunikacyjnych między zadaniami przypadająca na jedno łącze systemu. Odstęp (ang.dilation) - liczba łączy komunikacyjnych wykorzystywanych do realizacji pojedynczej ścieżki komunikacyjnej między zadaniami. Powiększenie (ang. expansion) liczba zadań przydzielonych do jednego procesora. 2
Odwzorowanie grafów Zagnieżdżenie łańcucha w hiperkostce. Kolejne 2 d elementów (oznaczonych od do 2 d -) odwzorowanych na d wymiarową hiperkostkę. Etykiety kolejnych (wg lańcucha) węzłów w hyperkostce określa się za pomocą funkcji kodu Graya. Wartości odpowiadające kolejnej pozycji liczby binarnej powstają w wyniku umieszczenia na tej pozycji i odbiciu lustrzanym wartości wcześniejszych. Brak przeciążenia i odstęp=, gdyż węzły których etykiety różnią się na jednej pozycji mają bezpośrednie łącze. łańcuch hyperkostka 2 3 4 3 2 6 5 6 7 5 7 4 22
Odwzorowanie grafów Krata zamknięta o 2 r * 2 s węzłach odwzorowana w hiperkostkę 2 r+s węzłową : wezłowi i,j odpowiada węzeł o etykiecie będącej złożeniem kodu i-tego elementu r pozycyjnego kodu Graya i kodu j-tego elementu s pozycyjnego kodu Graya czyli każdy wiersz i każda kolumna są odwzorowane w podkostkę o odpowiedniej liczbie węzłów 2,4,8,6... procesory, do których przydzielone są zadania z jednej kolumny mają jednakowe mniej znaczące bity, procesory w wierszu mają jednakowe bardziej znaczące bity etykiet, sąsiednie zadania przydzielone do sąsiednich procesorów (o etykietach różniących się na jednym bicie) brak przeciążenia i odstęp=, gdyż węzły komunikujące się - których etykiety różnią się na jednej pozycji - mają bezpośrednie łącze. Jaka będzie jakość zagnieżdzenia kraty 8-2 na hiperkostkę 2 6 lub na h 2 4? (,) (,) (,2) (,3),3,2 2,3 2,2 (,) (,) (,2) (,3),, 2, 2, (2,) (2,) (2,2) (2,3),3,2 3,3 3,2 (3,) (3,) (3,2) (3,3),, 3, 3, 23
Odwzorowanie kraty w łańcuch,,2,3,4 2,4 2,3 2,2 2, 3, 3,2 3,3 3,4 4,4 4,3 4,2 4, Krata otwarta 4X4 odwzorowana w łańcuch 6 elementowy Maksymalne przeciążenie wynosi 5 (linia przerywana) w ogólności pierwiastek(p) +. Dolne ograniczenie przeciążenia: Iloraz szerokości połowienia odwzorowywanych sieci np. szerokość połowienia: krata 4, łańcuch więc iloraz = 4 Ile wynosi maksymalny odstęp? 7 Jak odwzorować łańcuch w kratę? Szerokość połowienia to minimalna liczba łączy, jakie należy usunąć z sieci aby ją podzielić na dwie podsieci o jednakowej liczbie węzłów. 24
Odwzorowanie hiperkostki w kratę 2 wymiarową - otwartą Założenie: liczba procesorów jest równa 2 d gdzie d jest parzystą potęgą dwójki. Docelowa krata jest wymiaru 2 d/2 x 2 d/2. Kostka p węzłowa widziana jako p kostek p węzłowych (por. rysunek). Ustalając d/2 starszych bitów etykiety i biorąc pod uwagę możliwe kombinacje d/2 młodszych bitów definiujemy 2 d/2 elementowe hiperkostki. Każda taka hiperkostka (kolejno dla starszych bitów będących kolejnymi wartościami kodu Graya) jest odwzorowywana na kolejny wiersz kraty. Jest to odwzorowanie realizowane odwrotne do odwzorowania łańcuch-hiperkostka. Dolne ograniczenie przeciążenia wynika z ilorazów szerokości podziału hiperkostki (2 d- ) oraz kraty 2 d/2 i wynosi 2 d/2-. Dla p = 2 d procesorów ½ p.6 procesorów hiperkostka 4 wymiarowa 2.podział na 4 hiperkostki 2 wymiarowe 3.odwzorowanie hkostek krat na łańcuchy 4.przeciążenie i odstęp wynoszą 2 25
Przydział dynamiczny Stosowany gdy: statyczny przydział dostarcza niezrównoważonego obciążenia pracą graf zależności między zadaniami jest dynamiczny Przydział dynamiczny = równoważenie obciążeń scentralizowane jedna struktura lub proces posiadające informacje o pracy do wykonania ograniczona skalowalność ze względu na dostęp do scentralizowanej struktury/procesu stanowi wąskie gardło self scheduling szeregowanie niezależnych pojedynczych iteracji pętli pobieranych na bieżąco do realizacji po zakończeniu poprzedniej odporne na różne koszty zadań chunk scheduling zapobieganie ograniczeniu powodowanemu przez wiele procesów realizujących dostęp do jednej struktury - przydział wielu iteracji zamiast jednej; liczba iteracji właściwa dla ilości pracy, liczby procesorów, może maleć ze spadkiem ilości pracy pozostałej do wykonania. rozproszone - wymiana zadań między procesami w trakcie pracy odzwierciedlająca obciążenie pracą, konieczne do określenia: które procesy mają się komunikować? kto i kiedy inicjuje przesłanie pracy? ile pracy jest przesyłanej? W większym stopniu nadają się do systemów z pamięcią współdzielona niż systemów bazujących na przesyłaniu komunikatów. 26
Nakładanie się obliczeń i interakcji Minimalizacja kosztów interakcji Przydział wielu zadań do procesora pozwala na realizację jednego w oczekiwaniu na zakończenie interakcji innych niebezpieczeństwo wzrostu narzutów wynikających ze zmniejszenia ziarna przetwarzania (przełącznie zadań, równoważenie) Przewidywanie zakończenia przydzielonej aktualnie pracy może pozwolić na wysłanie żądania o nowe zadanie i równoczesną z kończącym się przetwarzaniem obsługę tego żądania. Wykorzystywanie przesłań nieblokujących w architekturach z przesyłaniem komunikatów. Wykorzystywanie mechanizmu wstępnego pobrania danych (sprzęt lub kompilator - wprowadzanie awansem dodatkowych instrukcji pobrania) w architekturach z pamięcią współdzieloną. /8/25 Zasady projektowania 27
Modele algorytmów równoległych Struktura algorytmu równoległego: równoległość danych przydział statyczny bazujący na podziale danych jednakowe operacje na różnych elementach ważne zapewnienie lokalności danych, możliwość stosowania zbiorowych funkcji operacji interakcji przykład: mnożenie macierzy model grafu zadań (równoległość zadań) wykorzystanie w przydziale grafu zależności zadań asynchroniczne metody interakcji przykład: równoległe sortowanie, faktoryzacja macierzy rzadkiej, wynik dekompozycji dziel i zwyciężaj model puli zadań każde zadanie wykonywalne przez dowolny proces dynamiczny przydział zadań do procesorów praca generowana statycznie lub dynamicznie zadania dostępne na liście/listach mały wolumen danych w stosunku do wielkości obliczeń (dostosowane: niezrównoważenie obciążenia koszt dostępu do puli zadań) przykład: efekt zrównoleglenia pętli /8/25 Zasady projektowania 28
Modele algorytmów równoległych model master-slave jeden lub wielu procesów zarządcy generuje i przydziela zadania do podległych procesów wykonawców generacja zadań i obliczenia mogą być realizowane w nie nakładających się fazach (synchronizacja) dostosowanie granulacji (master wąskie gardło) potok przetwarzania/ producent-konsument strumień danych przechodzi przez następujące po sobie procesy realizujące na nim przetwarzanie przybycie nowych danych wyzwala przetwarzanie potok przetwarzania może mieć formę grafu spójnego skierowanego z łukami łączącymi producentów i konsumentów, dostosowanie granulacji zadań umożliwia wyważyć pomiędzy czasem oczekiwania na rozpoczęcie przetwarzania kolejnych procesów i narzutem wynikającym z częstych interakcji równoległość strumieniowa - równoczesne wykonywania wielu programów na strumieniu danych modele mieszane połączenie modeli hierarchiczne lub czasowe /8/25 Zasady projektowania 29