Algorytmy równoległe Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010 Znajdowanie maksimum w zbiorze n liczb węzły - maksimum 2 liczb n - liczność zbioru głębokość = 3 W(n) = n-1 cykli praca = 4+2+1 = 7 (operacji) fAp(n) = O(log n) Sp(n),ep(n) obliczenia w potoku Algorytmy równoległe 2 Znajdowanie maksimum w k zbiorach n liczb 3 2 k - krotne obliczenia w potoku 1 n - liczność zbioru W(n) = k*(n-1) fAp(n) = O(k +log n) Algorytmy równoległe 3 Analiza efektywności - aglomeracja (1) Czy aglomeracja (połączenie zadań) jest możliwa bez spadku stopień równoległości ? I II III Przesłania poszczególnych etapów Zgrupowanie operacji realizowanych sekwencyjnie - możliwy przydział do jednego węzła przetwarzającego, mniej komunikacji, ten sam stopień równoległości. I II I I I III Algorytmy równoległe II 4 Analiza efektywności aglomeracja (2) 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*tpor+7*tkom= (log2n)tpor+(2log2n+1)tkom B - 3*tpor+5*tkom= (log2n)tpor+(log2n+2)tkom 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 „ -1” Wyjście: posortowany ciąg zakończony -1 Kod dla wszystkich węzłów: pobierz a pobierz b while b > 0 do { if a>b then wyślij b else wyślij a; a:=b pobierz b } we wyślij a; wyślij b; wy Algorytmy równoległe 7 Działanie algorytmu na wejście łańcucha podajemy kolejno wartości: 4,3,5,6,1 krok I II III IV 4,3 2t,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,-1 5 3,4 t,p -1 6,5 4 3 t,p we 6,-1 5,4 3 t,p wy -1 6,5 3,4 t,p Algorytmy równoległe 8 Sortowanie liczb w łańcuchu wykres praca- czas czas t1 sortowanie na I t2 sortowanie na I-IV t3 zbieranie wyników t1= (n-1)*tp+(2n-1)* tk≈ n* tc tc= tp+2tk t2=t1+(n-2)*(tp+tk) ≈ 2n*tc t3=(n+2)*tc t2+t3 ≈ 3n*tc Algorytmy równoległe fAm= 3n*tc= O(n) 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-1 – razy - dla każdego węzła oprócz węzła następnego po centralnym - odbiór komunikatu i sumowanie, K-1 – razy – dla każdego węzła oprócz węzła przed centralnym wysłanie wyniku – sumy RAZEM: (K-1) * ( tkom+ tsum) + (K-1) * tkom ≈ K tsum +2K tkom 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 10 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 =2n;n>1 k:=2;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 + 1 Algorytmy równoległe 11 Wyznaczanie sumy rozproszonych elementów pierścień jednokierunkowy komunikacja synchroniczna a – elementy sumowane; liczba_węzłów =2n;n>1 k:=2;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 + 1 Algorytmy równoległe 12 Wyznaczanie sumy rozproszonych elementów pierścień jednokierunkowy komunikacja synchroniczna a – elementy sumowane; liczba_węzłów =2n;n>1 k:=2;s := a jeśli parzysty to odbierz b1; wyślij a jeśli nieparzysty to wyślij a; odbierz b1 s:= s + b1 while k < liczba_węzłów jeśli parzysty to odbierz b2; wyślij b1;b1:=b2 jeśli nieparzysty to wyślij b1; odbierz b1 s:= s + b1 k:= k + 1 Optymalizacja liczby przesłań kosztem nadmiarowych obliczeń (n sumowań, n (2n) komunikacji - zamiast – n sumowań, 2n komunikacji (zbieranie i wysyłanie) Algorytmy równoległe 13 Wyznaczanie sumy rozproszonych elementów pierścień (2) 4 1 3 Operacje węzła 3 (przechowuje wartość a) 2 1. wyślij a;odbierz b; s = a+b; 2. 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-1, każdy krok przetwarzania to: nadanie, odbiór, sumowanie ilość pracy n*(n-1) sumowań, n*(n-1) przesłań zmniejszenie czasu przetwarzania do (n-1)ts+2(n-1)tk Algorytmy równoległe 14 Wyznaczanie sumy rozproszonych elementów - podział węzeł - operacja dodawania łuk - operacja przesłania jednej liczby liczność zbioru n, W= 3*n, fAp(n)= log2n Algorytmy równoległe 15 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 16 Wyznaczanie sumy rozproszonych elementów - aglomeracja 3 fazy wymiany wartości między parami zadań 3 fazy dodawania – dodawanie 2 wartości, wyznaczana lokalnie suma 2,4 lub 8 elementów Algorytmy równoległe 17 Wyznaczanie sumy rozproszonych elementów - struktura systemu Sumowanie danych rozproszonych w 16 węzłach – log216 = 4 kroki Algorytmy równoległe 18 Znajdowanie liczb pierwszych (1) 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, 121 – 11. Czy istnieje warunek ograniczający maksymalną wartość najmniejszego podzielnika liczby n? Algorytmy równoległe 19 Znajdowanie liczb pierwszych (3) Tak. Maksymalna wartość najmniejszego podzielnika liczby złożonej n wynosi n1/2. Aby znaleźć zatem liczby pierwsze xi∈<k,l> należy: usunąć liczby dzielące się bez reszty przez liczby pierwsze brane z przedziału <2, xi1/2> lub usunąć liczby będące wielokrotnością liczb pierwszych z przedziału <2, l1/2> Algorytmy równoległe 20 Sito Eratostenesa podejście funkcjonalne do podziału /2 /3 /5 /7 2,3,4,5,..,120 11,13,17,19,23,29,31,37,41,..., 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 <2, k1/2> 2k1/2/ln k Algorytmy równoległe 21 Wykreślanie z tablicy – podejście domenowe do podziału Z badanego zbioru (tablicy) usuwamy wielokrotności (jakie?) liczb pierwszych z przedziału <2,zakres górny1/2> Przykład dla zakresu : <2,65> 2 : 4,6,8,...64 3 : 9,15,21,27,33,39,45,51,57,63 5 : 25,35,55,65 7 : 49 • nie jest konieczna do rozpoczęcia obliczeń znajomość wszystkich liczb-pierwszych z przedziału <2,zakres górny1/2>; • 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 22 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 2 n - 1 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,1..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 23 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= 1..n : Dla każdego węzła-liścia: wybrany[i] = a[i,j] W korzeniu wyznacz: c=min {ss[i]:wybrany[i]=1} Roześlij c do liści //wierzchołek i należy do sw c Dopóki istnieje i dla którego wybrany[i] = 1 W korzeniu wybierz dowolne d = ss[i]: wybrany[i] = 1 Roześlij d do liści W każdym z liści: Jeśli ss[i]= d to ss[i]=c i wybrany[i]=0 //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 24 Składowe spójne -rysunek 1/1 Stan po 2 iteracjach 3/1 4/2 2/2 1/1 Stan po 3 iteracjach – w 3 iteracji te wierzchołki, które należą do superwierzchołków 1 i 2 zostają przyporządkowane do superwierzchołka 1 3/1 4/1 2/1 Algorytmy równoległe 25 Znajdowanie składowych spójnych grafu – przykład obliczeniowy Badany graf 1 0 0 1 0 0 1 1 0 1 0 1 1 1 0 1 0 1 1 0 0 1 0 0 1 Macierz sąsiedztwa 4 1 3 2 5 Wartości zmiennych w węzłach s – składowa, w - wybrany i zmiennych globalnych c,d s1 w1 s2 w2 s3 w3 s4 w4 s5 w5 c,d krok 1 1 2 0 3 0 4 1 5 0 1,1 1,1 1 0 2 0 3 0 4 1 5 0 1,4 1,2 1 0 2 0 3 0 1 0 5 0 1 0 2 1 3 1 1 0 5 1 2,2 2,1 1 0 2 0 3 1 1 0 5 1 2,3 2,2 1 0 2 0 2 0 1 0 5 1 2,5 2,3 1 0 2 0 2 0 1 0 2 0 1 0 2 1 2 1 1 1 2 0 1,1 3,1 1 0 2 1 2 1 1 0 2 0 1,2 3,2 1 0 1 0 1 0 1 0 1 0 1,2 3,2 Algorytmy równoległe 26 Znajdowanie składowych spójnych grafuomówienie W każdej iteracji j: 1. 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 2. w wierszach 7-10 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 27 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 2*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-1 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 2n. W przypadku algorytmu sekwencyjnego złożoność O(n+m) m-liczba krawędzi. Algorytmy równoległe 28