Instytut Informatyki Politechnika Śląska Obliczenia równoległe Opracował: Zbigniew J. Czech materiały dydaktyczne Gliwice, luty 1
Spis treści 1 Procesy współbieżne Podstawowe modele obliczeń równoległych 4 Elementarne algorytmy równoległe 4.1 Miara Karpa i Flatta.............................................. 4. Algorytmy dla modelu PRAM...........................................1 Sortowanie przez przestawianie nieparzysto-parzyste.......................... Znajdowanie minimum w czasie O(log n), n = r............................ Znajdowanie sumy elementów w czasie O(log n), n dowolne.................... 9..4 Znajdowanie sumy elementów za pomocą p procesorów... 1.. Problem sum prefiksowych...................................... 1.. Znajdowanie minimum w czasie O(1)................................. 11..7 Sortowanie w czasie O(log n)..................................... 1..8 Mnożenie macierzy........................................... 1. Algorytmy dla modelu sieciowego....................................... 1..1 Mnożenie macierzy przez wektor w jednowymiarowym torusie................... 1.. Mnożenie macierzy przez macierz w dwuwymiarowym torusie................... 14.. Problem redukcji w kostce....................................... 14..4 Znajdowaniesumprefiksowychwkostce... 1.. Problem redukcji w sieci doskonale przetasowanej.......................... 17.. Problem redukcji w siatce dwuwymiarowej.............................. 17.4 Algorytm dla komputera CREW MIMD................................... 4 Komputery równoległe klasy architektur oraz sieci połączeń Literatura
1 Procesy współbieżne R s 1 s s s 4 Rysunek 1: Algorytm równoległy R złożony z algorytmów składowych s 1, s, s i s 4 rozwiązujących poszczególne zadania (podproblemy); strzałki oznaczają współpracę algorytmów składowych, tj. przesłania danych lub synchronizację działania P 1 P o 1 o o o 4 o i o i+1 o 1 o o o 4 o i o i+1 Rysunek : Procesy sekwencyjne P 1 i P równoważne pod względem wyników obliczeń; t oznacza oś czasu t P 1 P o 1 o o 1 o o 1 o o 1 o P 1 P t t Rysunek : Dwie możliwe realizacje procesów P 1 i P P i P j P k o i1 o i o i o i4 o i o j1 o j o j o j4 o k1 o k o k o k4 t Rysunek 4: Jednoczesne wykonywanie operacji procesów P i, P j oraz P k
P i o i1 o i P j o j1 o j P k o k1 o k Rysunek : Przeplatanie operacji procesów jeden procesor rzeczywisty implementuje trzy procesory wirtualne t Pamięć Procesor Rysunek : Model obliczeń sekwencyjnych RAM Podstawowe modele obliczeń równoległych 1. M 4 := M 1 +{zapisanie w komórce M 4 sumy zawartości komórki M 1 istałej}. M := M M4 {adresowanie pośrednie: zapamiętanie w komórce M zawartości} {komórki, której adres jest w komórce M 4 }. M := M 1 1 {obliczenie numeru iteracji; M = n 1} 4. M := M M {zapisanie w komórce M iloczynu zawartości komórek M i M }. M 4 := M +{obliczenie indeksu współczynnika wielomianu}. M := M + M M4 7. M := M 1 8. goto 4 if M {wykonanie instrukcji 4, jeśli zawartość komórki M jest nieujemna} 9. halt {koniec obliczeń} Pamiȩć wspólna P 1 P P p Pamiȩć Pamiȩć Pamiȩć lokalna lokalna lokalna Rysunek 7: Model obliczeń równoległych PRAM Elementarne algorytmy równoległe.1 Miara Karpa i Flatta Patrz rys. 1, rys. 17 oraz tab.. 4
Sieć po l aczeń P 1 P P p Pamiȩć Pamiȩć Pamiȩć lokalna lokalna lokalna Rysunek 8: Model sieciowy obliczeń równoległych Pamięć Procesor Rysunek 9: Sieć pełna a) b) Rysunek 1: a) Jednowymiarowa siatka oraz b) jednowymiarowy torus (pierścień). Algorytmy dla modelu PRAM..1 Sortowanie przez przestawianie nieparzysto-parzyste 1. procedure sort nieparzyste parzyste;. begin. for i := 1 to n do 4. parfor P j, j = 1,,..., n 1 do. if A[j] >A[j +1]then. A[j] A[j +1] 7. end if; 8. end for; 9. parfor P j, j =, 4,..., n 1 do 1. if A[j] >A[j +1]then 11. A[j] A[j +1] 1. end if; 1. end for; 14. end for; 1. end;
(a) (b) (c) Rysunek 11: Dwuwymiarowa siatka 4 4 (a); dwuwymiarowy torus 4 4 (b) oraz trójwymiarowy torus (c) (a) (b) (c) (d) 11 111 1 1 11 1 11 1 11 1 1 (e) 11 111 111 1111 1 11 11 111 1 11 11 111 1 1 11 Rysunek 1: Kostka zerowymiarowa (a); jednowymiarowa (b); dwuwymiarowa (c); trójwymiarowa (d); czterowymiarowa (e).. Znajdowanie minimum w czasie O(log n), n = r 1 m := a[1];
14 1 1 1 4 7 1 1 11 8 9 Rysunek 1: Kostka czterowymiarowa (wariant ) 1 11 1 1 11 111 11 11 111 1111 111 1 11 111 11 Rysunek 14: Kostka czterowymiarowa (wariant ) 1 1 11 1 11 11 111 Rysunek 1: Sieć doskonale przetasowana (m =) S 1 9 8 7 4 1 n =1 7 n =1 n =1 1 4 7 8 9 1 Liczba procesów E 1.8..4. n =1 n =1 n =1 7 1 4 7 8 9 1 Liczba procesów Rysunek 1: Przyspieszenia S oraz efektywności E w funkcji liczby procesów dla programu MPI wyznaczania liczb pierwszych; linią kreskowaną przedstawiono maksymalne przyspieszenie równe liczbie procesów 7
Tabela 1: Wybrane parametry charakteryzujące topologie połączeń procesorów Rodzaj Maks. Szerokość Spójność sieci Średnica stopień połowienia krawędz. Koszt Sieć pełna 1 p 1 p /4 p 1 p(p 1)/ Siatka jednowym. p 1 1 1 p 1 Pierścień p/ p Siatka dwuwym. ( p 1) 4 p (p p) Torus dwuwym. p/ 4 p 4 p Kostka log p log p p/ logp (p log p)/ Sieć id. przetas. logp 1 p/ 1 p/ S 8 7 4 1 n =1 7 n =1 n =1 1 4 7 8 Liczba w atków E 1.8..4. n =1 n =1 n =1 7 1 4 7 8 Liczba w atków Rysunek 17: Przyspieszenia S oraz efektywności E w funkcji liczby procesów dla programu OpenMP wyznaczania liczb pierwszych; linią kreskowaną przedstawiono maksymalne przyspieszenie równe liczbie wątków Tabela : Części sekwencyjne f programów wyznaczania liczb pierwszych obliczone na podstawie przyspieszeń z rys. 1 oraz 17 Program MPI Program OpenMP n =1 n =1 7 n =1 n =1 7 p S f S f S f S f 1.9. 1.9. 1.7.14 1.9..91.1.99...17.. 4.4..94..8.7.89.9 4..7 4.4..7. 4.7.1.18....8.48..1 7...7..4.1..4 8.44.7.7.7.14.91..47 9..74 7.47. 1..97 8..7 for i := to n do if a[i] < m then m := a[i]; 4 end for; Dane wejściowe: Tablica a[1..n] umieszczona w pamięci wspólnej modelu PRAM o n procesorach. Zmienne lokalne (w pamięci lokalnej każdego procesora) przechowujące rozmiar n oraz numer procesora i. Dane pomocnicze: Tablica b[1..n] umieszczona w pamięci wspólnej. Zmienne lokalne j i k Dane wyjściowe: Wartość min{a[i]}, dlai = 1,,..., n, umieszczona w zmiennej m pamięci wspólnej. 8
1. begin. parfor P i,1 i ndo. b[i] := a[i]; {kopiowanie tablicy a do tablicy pomocniczej b} 4. k := n;. end for;. for j := 1 to log n do 7. parfor P i,1 i k/ do 8. if b[i] >b[i + k/] then 9. b[i] :=b[i + k/]; 1. end if; 11. end for; 1. k := k/; 1. end for; 14. if i =1then m := b[1]; end if; 1. end; m min min min min min min min b[1] b[] b[] b[4] b[] b[] b[7] b[8] a[1] a[] a[] a[4] a[] a[] a[7] a[8] P 1 P P P 4 P P P 7 P 8 Rysunek 18: Ilustracja działania algorytmu wyznaczania elementu minimalnego (n = 8).. Znajdowanie sumy elementów w czasie O(log n), n dowolne Dane wejściowe: Tablica a[1..n] umieszczona w pamięci wspólnej modelu PRAM o n procesorach. Zmienne lokalne przechowujące rozmiar n oraz numer procesora i. Dane pomocnicze: Tablica b[1..n] umieszczona w pamięci wspólnej. Zmienne lokalne j i k. Dane wyjściowe: Wartość n i=1 a[i] umieszczona w zmiennej s pamięci wspólnej. 1. begin. parfor P i,1 i ndo. b[i] := a[i]; {kopiowanie tablicy a do tablicy pomocniczej b} 4. k := n;. end for;. for j := 1 to log n do 7. parfor P i,1 i k/ do 8. b[i] :=b[i]+b[k +1 i]; 9. end for; 1. k := k/ ; 11. end for; 1. if i =1then s := b[1]; end if; 1. end; 9
s + + + + + + b[1] b[] b[] b[4] b[] b[] b[7] a[1] a[] a[] a[4] a[] a[] a[7] P 1 P P P 4 P P P 7 Rysunek : Ilustracja działania algorytmu wyznaczania sumy elementów (n = 7)..4 Znajdowanie sumy elementów za pomocą p procesorów Dane wejściowe: Tablica a[1..n] umieszczona w pamięci wspólnej modelu PRAM o p, 1<p n, procesorach. Zmienne lokalne przechowujące rozmiar n, liczbę procesorów p oraz numer procesora i. Dane pomocnicze: Tablica b[1..p] umieszczona w pamięci wspólnej. Zmienne lokalne g oraz j. Dane wyjściowe: Wartość n i=1 a[i] umieszczona w zmiennej s pamięci wspólnej. 1. begin. parfor P i,1 i pdo. g := n p (i 1) + 1; 4. b[i] :=a[g];. for j := 1 to n p 1 do {sumowanie w grupach}. if g + j n then {ostatnia grupa może być niepełna} 7. b[i] :=b[i] +a[g + j]; 8. end if; 9. end for; 1. end for; 11. Sumowanie b[1], b[],..., b[p] w czasie O(log p) za pomocą poprzedniego algorytmu; 1. end; Złożoność czasową, osiągane przyspieszenia oraz efektywności przedstawiają rys. a, b i c... Problem sum prefiksowych Dane wejściowe: Tablica x[1..n] umieszczona w pamięci wspólnej modelu PRAM o n procesorach. Zmienne lokalne przechowujące rozmiar n oraz numer procesora i. Dane pomocnicze: Zmienna lokalna j. Dane wyjściowe: Sumy prefiksowe umieszone w tablicy s[1..n] w pamięci wspólnej. 1. begin. parfor P i,1 i ndo {inicjalizacja}. s[i] :=x[i]; 4. end for;. for j := to log n 1 do. parfor P i, j <i n do 7. s[i] :=s[i j ]+s[i]; 8. end for; 9. end for; 1. end; 1
a) b) 1 n = 1 1 1 n = 1 T (p, n) c 1 n/p + c log p c log p S(p, n) n = c 1 n/p 1 1 4 p opt = c 1 n ln /c p 1 1 4 p c) 1.7 E(p, n). n = n = 1. n = 1 1 4 p Rysunek : a) Złożoność czasowa algorytmu znjdowania sumy elementów za pomocą p procesorów, przyjęto c 1 =1., c = 1, n = ; b) osiągane przyspieszenia dla różnych wartości n; c) osiągane efektywności dla różnych wartości n Tabela : Ilustracja działania algorytmu wyznaczania sum prefiksowych Inic. j = j =1 j = s[1] s[] () + s[] 1 ()+1 ()++1 s[4] (1)+ (+)+1+ s[] 4 ()+4 (+1)++4 ()++1++4 s[] 7 (4)+7 (1+)+4+7 (+)+1++4+7.. Znajdowanie minimum w czasie O(1) Dane wejściowe: Tablica a[1..n] umieszczona w pamięci wspólnej modelu CRCW PRAM o n procesorach. Zmienne lokalne przechowujące rozmiar n oraz numer procesora w postaci pary zmiennych i oraz j. Dane pomocnicze: Tablica t[1..n] umieszczona w pamięci wspólnej. Dane wyjściowe: Wartość min{a[i]}, dlai = 1,,..., n, zwracana przez instrukcję return. Jeśli wartości minimalnych jest więcej, to zwracana jest wartość minimalna a[i] położona najbliżej początku tablicy a. 1. begin. parfor P i,j, i =1,1 j n do {pracują procesory w pierwszym wierszu}. t[j] := ;{inicjalizacja tablicy t} 4. end for;. parfor P i,j,1 i, j n do {pracują wszystkie procesory}. if a[i] <a[j] then {a[j] nie jest elementem minimalnym} 7. t[j] :=1; 8. end if; {t[j] = oznacza, że a[j] =min{a[i]}, dlai =1,,..., n} 11
9. if (t[i] =)and (i <j) then 1. t[j] :=1; 11. end if; {tylko dla jednego j zachodzi t[j] =} 1. end for; 1. parfor P i,j, i =1,1 j n do {pracują procesory w pierwszym wierszu} 14. if t[j] =then 1. return a[j]; {zwrócenie elementu minimalnego} 1. end if; 17. end for; 18. end; Załóżmy, że algorytm przetwarza tablicę o postaci a[1..4] = [, 1,, 1]. P i,j 1 4 1 a[1] <a[1] a[1] <a[] a[1] <a[] a[1] <a[4] a[] <a[1] a[] <a[] a[] <a[] a[] <a[4] a[] <a[1] a[] <a[] a[] <a[] a[] <a[4] 4 a[4] <a[1] a[4] <a[] a[4] <a[] a[4] <a[4] t 1 1 (po wyk. kroku 8.) t 1 1 1 (po wyk. kroku 1.) Rysunek 1: Ilustracja działania algorytmu..7 Sortowanie w czasie O(log n) { 1, gdy a[i] >a[j], lub gdy a[i] =a[j] orazi>j, w[i, j] = (1), w przeciwnym razie. Dane wejściowe: Tablica a[1..n] umieszczona w pamięci wspólnej modelu CREW PRAM o n procesorach. Zmienne lokalne przechowujące rozmiar n oraz numer procesora w postaci pary zmiennych i oraz j. Dane pomocnicze: Tablica w[1..n, 1..n] umieszczona w pamięci wspólnej. Zmienne lokalne k oraz r. Dane wyjściowe: Tablica b[1..n] umieszczona w pamięci wspólnej zawierająca wartości elementów tablicy a[1..n] w porządku niemalejącym. 1. begin. parfor P i,j,1 i, j n do. if (a[i] >a[j]) or ((a[i] =a[j]) and (i >j)) then 4. w[i, j] :=1;. else. w[i, j] :=; 7. end if; 8. end for; 9. k := n; 1. for r := 1 to log n do {zliczanie jedynek w wierszach tablicy w} 11. parfor P i,j,1 i n, 1 j k/ do 1. w[i, j] :=w[i, j]+w[i, k +1 j]; 1. end for; 14. k := k/ ; 1. end for; {wartości w[i, 1] wyznaczają pozycje elementów a[i] w tablicy b} 1. parfor P i,j,1 i n, j =1do 17. b[w[i, 1] + 1] := a[i]; 18. end for;. end; 1
P i,j 1 4 1 a[1] a[1] a[1] a[] a[1] a[] a[1] a[4] a[] a[1] a[] a[] a[] a[] a[] a[4] a[] a[1] a[] a[] a[] a[] a[] a[4] 4 a[4] a[1] a[4] a[] a[4] a[] a[4] a[4] w 1 4 1 1 1 1 1 1 4 1 1 Rysunek : Relacje sprawdzane przez procesory oraz postać tablicy w..8 Mnożenie macierzy Dane wejściowe: Macierze a[1..n, 1..n] ib[1..n, 1..n] umieszczone w pamięci wspólnej modelu CREW PRAM o n procesorach. Zmienne lokalne przechowujące rozmiar n (n = r dla pewnego całkowitego r>) oraz numer procesora w postaci zmiennych i, j oraz k. Dane pomocnicze: Macierz t[1..n, 1..n, 1..n] umieszczona w pamięci wspólnej. Zmienna lokalna l. Dane wyjściowe: Iloczyn macierzy c = a b umieszczony w pamięci wspólnej. 1. begin. parfor P i,j,k,1 i, j, k n do. t[i, j, k] :=a[i, k] b[k, j]; {obliczanie składowych iloczynów skalarnych} 4. end for;. for l := 1 to log n do {sumowanie składowych iloczynów skalarnych}. parfor P i,j,k,1 i, j n, 1 k n/ l do 7. t[i, j, k] :=t[i, j, k 1] + t[i, j, k]; 8. end for; 9. end for; 1. parfor P i,j,k,1 i, j n, k =1do 11. c[i, j] :=t[i, j, 1]; 1. end for; 1. end;. Algorytmy dla modelu sieciowego..1 Mnożenie macierzy przez wektor w jednowymiarowym torusie Dane wejściowe: Podmacierze b = a[(i 1)r +1..ir, 1..n], r = n/p, orazwektorx[1..n], umieszczone w procesorach P i pracujących asynchronicznie, 1 i p, połączonych w pierścień. Zmienne lokalne w każdym procesorze P i przechowujące rozmiar n oraz numer procesora w postaci zmiennej i. Dane pomocnicze: Wektory y[1..n/p] iz[1..n] umieszczone w pamięci lokalnej. Zmienne lokalne j i k. Dane wyjściowe: Iloczyn z = ax umieszczony w procesorze P 1. 1. begin. {Obliczenie wektora y = bx przez procesory P i,1 i p.}. for k := 1 to n/p do 4. y[k] :=b[k, 1] x[1];. for j := to n do. y[k] :=y[k]+b[k, j] x[j]; 7. end for; 8. end for; 9. if i =1then {procesor P 1 przesyła wektor y wprawo} 1. send(y, prawy); 11. else {pozostałe procesory odbierają dane z procesora położonego po lewej stronie} 1. receive(z[1..(i 1)r],lewy); 1. z[1..ir] := z[1..(i 1)r] y; {dopisanie obliczonego wektora y} 14. send(z[1..ir],prawy); 1. end if; 1. if i =1then 1
17. receive(z[1..n],lewy); {odebranie przez procesor P 1 końcowego wyniku} 18. end if;. end;.. Mnożenie macierzy przez macierz w dwuwymiarowym torusie Dane wejściowe: Macierze a[1..n, 1..n] ib[1..n, 1..n], których elementy a[i, j] ib[i, j] umieszczone są w pamięciach lokalnych procesorów P i,j. Zmienne lokalne w każdym procesorze przechowujące rozmiar n oraz numer procesora w postaci zmiennych i oraz j. Dane pomocnicze: Zmienna lokalna k w każdym procesorze P i,j. Dane wyjściowe: Iloczyn macierzy c = ab. Elementy macierzy c[i, j] umieszczone są w zmiennych lokalnych c procesorów P i,j. 1. begin. {Faza 1: Zmodyfikowanie dystrybucji elementów macierzy a i b wtorusie.}. for k := to n do 4. parfor P i,j,1 i, j n do. if i k then {przemieszczenie wierszy macierzy a cyklicznie w lewo}. a prawy(a); 7. end if; 8. if j k then {przemieszczenie kolumn macierzy b cyklicznie w górę} 9. b dół(b); 1. end if; 11. end for; 1. end for; 1. {Faza : Obliczanie iloczynu macierzy a i b.} 14. for k := 1 to n do 1. parfor P i,j,1 i, j n do 1. if k =1then 17. c := a b ; 18. else. a prawy(a);. b dół(b); 1. c := c + a b ;. end if;. end for; 4. end for;. end;.. Problem redukcji w kostce Dane wejściowe: Podtablice a[1.. n/p ] zawierające fragmenty tablicy a[1..n] umieszczone w pamięciach lokalnych p procesorów kostki. Zmienne lokalne przechowujące rozmiar n, liczbę procesorów p oraz numer procesora i, i<p. Dane pomocnicze: Zmienna lokalna rozmiar przechowująca rozmiar podtablicy a danego procesora oraz zmienne lokalne d, j i pom. Dane wyjściowe: Wartość n i=1 a[i] umieszczona w zmiennej sum procesora P. 1. begin. parfor P i, i<pdo. sum := a[1]; 4. if i<(n mod p) then. rozmiar := n/p ;. else 7. rozmiar := n/p ; 8. end if; 14
a) a 1,1 a 1, a 1, b 1,1 b, b, a, a, a,1 b,1 b, b 1, a, a,1 a, b,1 b 1, b, b) a 1, a 1, a 1,1 b,1 b, b 1, a, a,1 a, b,1 b 1, b, a,1 a, a, b 1,1 b, b, c) a 1, a 1,1 a 1, b,1 b 1, b, a,1 a, a, b 1,1 b, b, a, a, a,1 b,1 b, b 1, Rysunek : Dystrybucja elementów macierzy a oraz b pomiędzy procesorami po a) pierwszej, b) drugiej i c) trzeciej iteracji instrukcji for w krokach 14 4 9. for j := to n/p do {sumowanie w grupach} 1. if j rozmiar then {niektóre procesory mają mniejsze grupy} 11. sum := sum + a[j]; 1. end if; 1. end for; 14. end for; 1. for j := log p 1 downto do {sumowanie sum obliczonych w grupach} 1. d := j ; 17. parfor P i, i<ddo 18. pom [i + d]sum;. sum := sum + pom;. end for; 1. end for;. end; 1
Rozgłaszanie 1. for j := to log p 1 do. d := j ;. parfor P i, i<ddo 4. [i + d]sum sum;. end for;. end for; (a) (b) P 1 1 P 1 P 7 P 7 P 1 P P P 7 P 14 P 4 P 7 P P 14 P 4 P P (c) (d) P P 7 P P 7 P 1 11 P P 1 P P 4 P P 4 P P P P P Rysunek 4: Ilustracja rozwiązywania problemu redukcji w kostce trójwymiarowej: przykładowe wartości podlegające sumowaniu (wyznaczone w wierszach 14) (a) oraz wartości po pierwszej (b), drugiej (c) i trzeciej (d) iteracji w wierszach 1 1 algorytmu na s. 14..4 Znajdowanie sum prefiksowych w kostce Dane wejściowe: Zmienne lokalne b w każdym procesorze kostki zainicjalizowane w taki sposób, że wartością tej zmiennej w procesorze P jest element x 1, w procesorze P 1 element x itd. Zmienne lokalne przechowujące liczbę procesorów p oraz numer procesora i, i<p. Dane pomocnicze: Zmienna lokalna j oraz m. Dane wyjściowe: Wartości zmiennych s w procesorach P i, i<p, będące sumami prefiksowymi s i,1 i p. 1. begin. parfor P i, i<pdo. s := b; {inicjalizacja wartości sum prefiksowych} 4. end for;. m := i;. for j := to log p 1 do 7. parfor P i, m mod = do {j-ty bit numeru procesora i jest równy } 8. [i + j ]pom b; 9. end for; 1. parfor P i, m mod do 11. s := s + pom; 1. b := b + pom; 1. [i j ]b b; 14. end for; 1
1. m := m div ; 1. end for; 17. end; a) b) x x x 8 x 8 x x x 78 x 78 11 111 11 111 x x 1 11 x 1 x 1 1 11 x 4 x 4 x 4 x 4 1 x x 11 x 7 x 7 1 x x 11 x 7 x 78 x 1 x 1 1 x x x 1 x 1 1 x x 4 c) d) x x 8 x 8 x 8 x 1 x 18 x 18 x 18 11 111 11 111 x 1 x 14 1 11 x 1 x 18 1 11 x 14 x 14 x 14 x 18 1 x x 8 11 x 7 x 8 1 x 1 x 18 11 x 17 x 18 x 1 x 14 1 x 1 x 14 x 1 x 18 1 x 1 x 18 Rysunek : Wartości zmiennych s i b w procesorach kostki a) przed wykonaniem iteracji for w wierszach 1, a następnie po wykonaniu b) pierwszego, c) drugiego i d) trzeciego przebiegu tej iteracji.. Problem redukcji w sieci doskonale przetasowanej Dane wejściowe: Tablica a[1..n], której poszczególne elementy zostały umieszczone w zmiennych lokalnych a procesorów P i, i<p, p = n. Zmienne lokalne przechowujące liczbę procesorów p oraz numer procesora i, i<p. Dane pomocnicze: Zmienne lokalne b oraz j. Dane wyjściowe: Wartość p i=1 a[i] umieszczona w zmiennych a procesorów P i, i<p. 1. begin. for j := 1 to log p do. parfor P i, i<pdo 4. tasuj (a);. b := a;. wymień(b); 7. a := a + b; 8. end for; 9. end for; 1. end;.. Problem redukcji w siatce dwuwymiarowej 1. begin. for i := m 1 downto 1 do. parfor P j,i,gdzie1 j m do {aktywna kolumna i} 17
a a a a 1 1 4 4 4 4 4 4 7 7 przed tasuj(a) po przed wymień(a) po Rysunek : Operacje tasuj i wymień a) 1 4 7 b) 4 4 8 8 1 1 c) 1 1 1 1 1 1 1 1 d) 8 8 8 8 8 8 8 8 Rysunek 7: Wartości zmiennych a w procesorach sieci doskonale przetasowanej a) przed wykonaniem iteracji for w wierszach 9, a następnie po wykonaniu b) pierwszego, c) drugiego i d) trzeciego przebiegu tej iteracji (p =8) 4. t[j, i] a[j, i +1];. a[j, i] :=a[j, i] +t[j, i];. end for ; 7. end for ; 8. for i := m 1 downto 1 do 9. parfor P i,1 do 1. t[i, 1] a[i +1, 1] ; 11. a[i, 1] := a[i, 1] + t[i, 1] ; 1. end for ; 1. end for ; 14. end ; 18
ind a tasuj a wymień b a tasuj a wymień b a tasuj a wymień b a 9 1 1 4 9 1 4 4 1 4 4 1 4 9 4 1 4 1 4 1 7 4 1 Rysunek 8: Redukcja w sieci doskonale przetasowanej
4 9 1 8 1 7 4 Rysunek 9: Redukowane (dodawane) wartości w siatce dwuwymiarowej.4 Algorytm dla komputera CREW MIMD 1. begin. parfor P i,gdziei =do wykonuje procesor P. suma globalna := ; 4. end for;. parfor P i,gdzie i p 1 do Równoległa praca p procesorów.. suma lokalna := ; 7. for j := i to n 1 step p do 8. suma lokalna := suma lokalna + a[j]; 9. end for ; 1. lock(suma globalna); 11. suma globalna := suma globalna + suma lokalna ; 1. unlock(suma globalna); 1. end for ; 14. end ; 4 Komputery równoległe klasy architektur oraz sieci połączeń Literatura [1] Ben-Ari, M., Podstawy programowania współbieżnego i rozproszonego, WNT, Warszawa 9. [] Czech, Z.J., Wprowadzenie do obliczeń równoległych, PWN, Warszawa 1, wyd. II. [] Herlichy, M., Shavit, N., Sztuka programowania wieloprocesorowego, PWN, Warszawa, 1. [4] Huzar, Z., i in., Ada 9, Helion, Gliwice 98. [] Neapolitan, R., Naimipour, K., Podstawy algorytmów z przykładami w C++, Helion, Gliwice 4 (rozdział 11 Wprowadzenie do algorytmów równoległych).
a) b) 4 1 17 9 9 1 1 1 7 9 c) d) 7 7 11 11 14 14 e) f) Rysunek : Redukcja w siatce dwuwymiarowej. Po a) pierwszym, b) drugim, c) trzecim, d) czwartym, e) piątym i f) szóstym dodawaniu 1
J J J 4 J J J 1 i 1 i i i 1 i i i 4 i 1 i i i 4 i i 1 i i i 4 i i i 1 i i i 4 i i i 7 i 1 i i i 4 i i i 7 i 8 czas 1 4 7 8 (w cyklach) Rysunek 1: Potokowe wykonywanie strumienia instrukcji we/wy Centralna jednostka steruj aca Pamiȩć z programem E 1 Pamiȩć lokalna E Pamiȩć lokalna Sieć po l aczeń E p Pamiȩć lokalna Rysunek : Struktura komputera macierzowego (SIMD)
Pamiȩć wspólna we/wy M 1 M M m Sieć po l aczeń P 1 P P p Pamiȩć Pamiȩć Pamiȩć lokalna lokalna lokalna Rysunek : Struktura komputera wieloprocesorowego (MIMD) z pamięcią wspólną P 1 Pamiȩć lokalna P Pamiȩć Sieć po l aczeń lokalna P p Pamiȩć lokalna we/wy Rysunek 4: Struktura komputera wieloprocesorowego (MIMD) z pamięcią rozproszoną a) b) Komputer dostȩpowy Komputery (wȩz ly) Komputer dostȩpowy Komputery (wȩz ly) Rysunek : Klaster stacji roboczych a) połączonych pojedynczym przewodem, b) w postaci pierścienia
Sieć po l aczeń M M M P P P P P P P P P SMP 1 SMP SMP n Rysunek : Klaster multiprocesorów symetrycznych (SMP); przez M i P oznaczono odpowiednio pamięci wspólne oraz procesory a) b) Rysunek 7: Sieć połączeń a) statyczna oraz b) dynamiczna. Węzły sieci (procesory lub bloki pamięci) oznaczono kółkami bez zacieniowania, a przełączniki kółkami zacieniowanymi magistrala M M U linie adresowe linie danych linie steruj ace K K K P P P Rysunek 8: Struktura komputera z siecią połączeń opartą na magistrali (oznaczenia: P procesory, M bloki pamięci wspólnej, K pamięci podręczne, U urządzenia wej/wyj) 4
M 1 M M M m P 1 P P P p Rysunek 9: Struktura sieci z przełącznicą krzyżową P 1 M 1 P S 1 S S k M P p M m Rysunek 4: Sieć wielostopniowa: S 1, S,..., S k są stopniami sieci
P M P 1 M 1 P 1 M 1 P 11 M 11 P 1 M 1 P 11 M 11 P 11 M 11 P 111 M 111 Rysunek 41: Sieć omega dla p =8 P M P 1 M 1 P 1 B M 1 P 11 M 11 P 1 f A M 1 P 11 M 11 P 11 A g M 11 P 111 M 111 Rysunek 4: Stan przełączników sieci omega podczas transmisji danych pomiędzy procesorem P 1 a blokiem pamięci M 11