Algorytmy równoległe Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka
Znajdowanie maksimum w zbiorze n liczb węzły - maksimum liczb głębokość = 3 praca = 4++ = 7 (operacji) n - liczność zbioru W(n) = n- cykli f Ap (n) = O(log n) S p (n),e p (n) obliczenia w potoku Algorytmy równoległe
Znajdowanie maksimum w k zbiorach n liczb 3 k - krotne obliczenia w potoku n - liczność zbioru W(n) = k*(n-) f Ap (n) = O(k +log n) Algorytmy równoległe 3
Analiza efektywności - aglomeracja () Czy aglomeracja (połączenie zadań) jest możliwa bez spadku stopień równoległości? I II Zgrupowanie operacji realizowanych sekwencyjnie - możliwy przydział do jednego węzła przetwarzającego, mniej komunikacji, ten sam stopień równoległości. III I I I Przesłania poszczególnych etapów I II III II Algorytmy równoległe 4
Analiza efektywności - aglomeracja () Mniej przesłań między węzłami Niższa złożoność obliczeniowa Ta sama ilość pracy ( 7 porównań) Wzrost stopnia wierzchołka ( 3 do 5 ) Mniejsza liczba procesorów (4 zamiast 7) Algorytmy równoległe 5
Analiza efektywności -aglomeracja (3) wykres praca-czas Procesory A - 3*t por +7*t kom = (log n)t por +(log n+)t kom B - 3*t por +5*t kom = (log n)t por +(log n+)t kom Bez aglomeracji Po aglomeracji Algorytmy równoległe Czas 6
Sortowanie w łańcuchu procesorów Wejście: ciąg liczb (minimum jedna) zakończonych - Wyjście: posortowany ciąg zakończony - Kod dla wszystkich węzłów: pobierz a pobierz b while b > do { if a>b then wyślij b we pobierz b } wyślij a; wyślij b; else wyślij a; a:=b wy Algorytmy równoległe 7
Działanie algorytmu na wejście łańcucha podajemy kolejno wartości: 4,3,5,6,- krok I II III IV 4,3 t,p 4, 3 t 4,5 3 t,p 5 4,3 t,p 5,6 4 3 t,p 6 5,4 3 t,p 6,- 5 3,4 t,p - 6,5 4 3 t,p we 6,- 5,4 3 t,p - 6,5 3,4 t,p wy Algorytmy równoległe 8
Sortowanie liczb w łańcuchu wykres praca- czas t sortowanie na I czas t sortowanie na I-IV t 3 zbieranie wyników t = (n-)*t p +(n-)* t k n* t c t c = t p +t k t =t +(n-)*(t p +t k ) n*t c t 3 =(n+)*t c t +t 3 3n*t c f Am = 3n*t c = O(n) Algorytmy równoległe 9
Wyznaczanie sumy rozproszonych elementów - pierścień jednokierunkowy analogiczne do rozesłania N do N Węzeł centralny, całkowita liczba węzłów K Sekwencyjne sumowanie i przesyłanie sum częściowych do węzła centralnego; Rozsyłanie wyniku do wszystkich węzłów Liczba operacji praca: K- razy - dla każdego węzła oprócz węzła następnego po centralnym - odbiór komunikatu i sumowanie, K- razy dla każdego węzła oprócz węzła przed centralnym - wysłanie wyniku sumy RAZEM: (K-) * ( t kom + t sum ) + (K-) * t kom K t sum +K t kom Czas przetwarzania liczba kolejno realizowanych kroków algorytmu: Jak wyżej, gdyż wszystkie operacje realizowane sekwencyjnie. Uwagi : Liczba operacji sumowania równa minimalnej. Brak równoległości. Możliwość minimalizacji liczby przesłań w tej architekturze (uniknięcie rozsyłania wyniku) poprzez wyznaczanie sumy we wszystkich węzłach porównaj następny algorytm. Algorytmy równoległe
Wyznaczanie sumy rozproszonych elementów pierścień jednokierunkowy - komunikacja synchroniczna - analogiczne do rozesłania N do N (por. wykład komunikacja) a elementy sumowane; liczba_węzłów =n;n> k:=;s := a wyślij a; odbierz a s:= s + a while k < liczba_węzłów wyślij a; odbierz a; s:= s + a k:= k + Algorytmy równoległe
Wyznaczanie sumy rozproszonych elementów pierścień jednokierunkowy - komunikacja synchroniczna a elementy sumowane; liczba_węzłów =n;n> k:=;s := a wyślij a; odbierz b s:= s + b while k < liczba_węzłów wyślij a; odbierz b; s:= s + b k:= k + Algorytmy równoległe
Wyznaczanie sumy rozproszonych elementów pierścień jednokierunkowy - komunikacja synchroniczna a elementy sumowane; liczba_węzłów =n;n> k:=;s := a jeśli parzysty to odbierz b; wyślij a jeśli nieparzysty to wyślij a; odbierz b s:= s + b while k < liczba_węzłów jeśli parzysty to odbierz b; wyślij b;b:=b jeśli nieparzysty to wyślij b; odbierz b s:= s + b k:= k + Optymalizacja liczby przesłań kosztem nadmiarowych obliczeń (n sumowań, n (n) komunikacji - zamiast n sumowań, n komunikacji (zbieranie i wysyłanie) Algorytmy równoległe 3
Wyznaczanie sumy rozproszonych elementów pierścień () 4 3 Operacje węzła 3 (przechowuje wartość a). wyślij a;odbierz b; s = a+b;. wyślij b; odbierz b; s = s+b; 3. wyślij b;odbierz b; s = s +b; liczba węzłów n, liczba kroków przetwarzania n-, każdy krok przetwarzania to: nadanie, odbiór, sumowanie ilość pracy n*(n-) sumowań, n*(n-) przesłań zmniejszenie czasu przetwarzania do (n-)t s +(n-)t k Algorytmy równoległe 4
Wyznaczanie sumy rozproszonych elementów - podział węzeł - operacja dodawania łuk - operacja przesłania jednej liczby liczność zbioru n, W= 3*n, f Ap (n)= log n Algorytmy równoległe 5
Wyznaczanie sumy rozproszonych elementów - aglomeracja zadania-operacje realizowane sekwencyjnie połączone w jedno zadanie, minimalizacja komunikacji, wzrost lokalności danych Algorytmy równoległe 6
Wyznaczanie sumy rozproszonych elementów - aglomeracja 3 fazy wymiany wartości między parami zadań 3 fazy dodawania dodawanie wartości, wyznaczana lokalnie suma,4 lub 8 elementów Algorytmy równoległe 7
Wyznaczanie sumy rozproszonych elementów - struktura systemu Sumowanie danych rozproszonych w 6 węzłach log 6 = 4 kroki Algorytmy równoległe 8
Znajdowanie liczb pierwszych () Metody: dzielenie badanej liczby przez liczby pierwsze i badanie wartości reszty z dzielenia usuwanie ze zbioru badanych liczb liczb będących wielokrotnością liczb pierwszych Jakie liczby pierwsze uwzględniać dla badanej liczby (bądź górnego zakresu przedziału) n? Wystarczy znaleźć dla każdej liczby złożonej minimalny podzielnik: 35 5, 77 7,. Czy istnieje warunek ograniczający maksymalną wartość najmniejszego podzielnika liczby n? Algorytmy równoległe 9
Znajdowanie liczb pierwszych (3) Tak. Maksymalna wartość najmniejszego podzielnika liczby złożonej n wynosi n /. Aby znaleźć zatem liczby pierwsze x i <k,l> należy: usunąć liczby dzielące się bez reszty przez liczby pierwsze brane z przedziału <, x i / > lub usunąć liczby będące wielokrotnością liczb pierwszych z przedziału <, l / > Algorytmy równoległe
Sito Eratostenesa - podejście funkcjonalne do podziału,3,4,5,.., / /3 /5 /7,3,7,9,3,9,3,37,4,..., Pierwsza liczba odebrana przez każdy z procesów jest traktowana jako dzielnik i jako liczba pierwsza. Liczby dzielące się z resztą są przesyłane dalej. Wynik przetwarzania liczby pierwsze pojawiają się na wyjściu systemu oraz rezydują w procesach (należy je przesłać na wyjście). Liczba procesów niezbędbych dla zakresu <n,k> jest równa liczbie liczb pierwszych w zakresie od <, k / > k / /ln k Algorytmy równoległe
Wykreślanie z tablicy podejście domenowe do podziału Z badanego zbioru (tablicy) usuwamy wielokrotności (jakie?) liczb pierwszych z przedziału <,zakres górny / > Przykład dla zakresu : <,65> : 4,6,8,...64 3 : 9,5,,7,33,39,45,5,57,63 5 : 5,35,55,65 7 : 49 nie jest konieczna do rozpoczęcia obliczeń znajomość wszystkich liczb-pierwszych z przedziału <,zakres górny / >; kolejno pojawiające się liczby pierwsze mogą być wykorzystane dopiero później, gdyż wyznaczanie wielokrotności mniejszych liczb pierwszych odbywa się dla całego badanego przedziału i zajmuje stosunkowo dużo czasu. Algorytmy równoległe
Znajdowanie składowych spójnych grafu wstęp Składowa spójna grafu G każdy największy (nie dający się powiększyć o dalsze krawędzie i wierzchołki) spójny, podgraf grafu G. Graf spójny zawiera co najmniej jedną drogę między dowolną parą tworzących go wierzchołków. Algorytm: Bada graf o n wierzchołkach, Wykorzystuje n - procesorów w strukturze drzewa binarnego; Graf jest reprezentowany przez macierz sąsiedztwa, Liść drzewa posiada wiersz macierzy odpowiadający przetwarzanemu wierzchołkowi i a[i,..n]. Po zakończeniu przetwarzania zmienna ss zawiera numer składowej do której należy wierzchołek, numer ten jest równy najmniejszemu spośród numerów wierzchołków należących do tej składowej. Super-wierzchołek graf spójny, dowolny podgraf, identyfikowany przez wierzchołek o najniższym numerze spośród należących do niego. Algorytmy równoległe 3
Znajdowanie składowych spójnych grafu - algorytm Dla każdego i węzła-liścia: ss[i] = i //należy do swojego sw W pętli po wierzchołkach j=..n : Dla każdego węzła-liścia: wybrany[i] = a[i,j] W korzeniu wyznacz: c=min {ss[i]:wybrany[i]=} Roześlij c do liści //wierzchołek i należy do sw c Dopóki istnieje i dla którego wybrany[i] = W korzeniu wybierz dowolne d = ss[i]: wybrany[i] = Roześlij d do liści W każdym z liści: Jeśli ss[i]= d to ss[i]=c i wybrany[i]= //propogacja do superwierzchołka c tych wierzchołków, które należą do superwierzchołków spójnych z wierzchołkiem i Algorytmy równoległe 4
Składowe spójne -rysunek / 3/ Stan po iteracjach 4/ / / 3/ 4/ / Stan po 3 iteracjach w 3 iteracji te wierzchołki, które należą do superwierzchołków i zostają przyporządkowane do superwierzchołka Algorytmy równoległe 5
Znajdowanie składowych spójnych grafu przykład obliczeniowy Macierz sąsiedztwa 4 3 Badany graf Wartości zmiennych w węzłach s składowa, w - wybrany i zmiennych globalnych c,d 5 s w s w s3 w3 s4 w4 s5 w5 c,d krok 3 4 5,, 3 4 5,4, 3 5 3 5,, 3 5,3, 5,5,3, 3,, 3,, 3, Algorytmy równoległe 6
Znajdowanie składowych spójnych grafuomówienie W każdej iteracji j:. w wierszach 3-4 wyznaczamy (superwierzchołek) - NAJMNIEJSZY numer spośród numerów superwierchołków, do których należały dotychczas wierzchołki incydentne z wierzchołkiem j. w wierszach 7- każdemu wierzchołkowi, którego superwierzchołkiem jest wierzchołek incydentny z j zmieniamy jego superwierzchołek na wyznaczony w bieżącym kroku. Algorytmy równoległe 7
Znajdowanie składowych spójnych grafu - złożoność Każda iteracja pętli zewnętrznej wymaga czasu log n (wyznaczenie maksimum w drzewie), pętla ta jest powtarzana n razy. Pętla wewnętrzna może być powtórzona (globalnie) co najwyżej *n razy. Jej złożoność to koszt komunikacji między liściami a korzeniem. Dla każdego j jest realizowana jednokrotnie dla c=d gdyż jest tylko jedna wartość minimalna identyfikatorów superwierzchołków incydentnych w danej iteracji. Dla przypadku c<>d - łączenie superwierzchołków - może być realizowana globalnie co najwyżej n- razy. Tyle razy można powiększać superwierzchołki, na które składa się maksymalnie n elementów. Ostatecznie złożoność algorytmu wynosi O(n log n), gdyż liczba kroków o złożoności log n jest mniejsza od n. W przypadku algorytmu sekwencyjnego złożoność O(n+m) m-liczba krawędzi. Algorytmy równoległe 8