Algorytmy równoległe - Politechnika Poznańska

advertisement
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
Download