790 likes | 1.12k Views
Capitolul 5 Exemple de algoritmi paraleli. Proiectare si analiza. Prelucrare de matrici/masive regulate de date. Caracteristici: structuri masive regulate de date (tip matrice) => descompunere de date Scop: algoritm paralel eficient, cost-optimal, scalabil
E N D
Capitolul 5 Exemple de algoritmi paraleli.Proiectare si analiza.
Prelucrare de matrici/masive regulate de date • Caracteristici: structuri masive regulate de date (tip matrice) => descompunere de date • Scop: algoritm paralel eficient, cost-optimal, scalabil • Puncte de variabilitate a solutiei: • Descompunere • 1D • 2D • 3D • Granularitate: • P=n • P<n; • Distributie: pe blocuri, ciclica • Exemple: • Inmultirea matrice-vector • Sistem de n ecuatii liniare • Modelarea bazata pe diferente finite
Reminder: performantele operatiilor pentru comunicatii colective
Exemplul 1 Inmultire matrice*vector
Inmultirea matrice-vector Timpul de executie secvential Ts=W=n*n
Inmultirea matrice-vector: paralelizare prin descompunere de date 1D pe linii • Se presupune ca dimensiunea matricii este n*n si se utilizeaza p<n procese • Fiecare proces Pi detine n/p linii ale matricii A si n/p elemente ale vectorului x si calculeaza n/p elemente ale rezultatului y[i]=sumj=0,n-1(A[i,j]*x[j]), n/p valori ale lui i • Fiecare proces Pi are nevoie de toate elementele vectorului x => acestea sunt distribuite printr-o operatie de tip all-to-all broadcast intre p procese, cu mesaje de lungime n/p
Evaluarea performantelor – cazul 1D cu p<n procese • Difuzarea vectorului x prin operatia all-to-all broadcast: • Tbroadc= ts* log(p) + tw*m*(p-1), m=n/p • Tbroadc≈ ts* log(p) + tw* n • Fiecare proces Pi: n*n/p calcule • Timpul de executie paralel: • Tp=Tbroadc+Tpi=n*n/p + ts* log(p) + tw* n • Cost=Tp*p= n*n + ts* p*log(p) + tw* n*p • Alg cost-optimal (Cost=O(Ts)): daca p=O(n) • Eficienta E=S/p=Ts/(p*Tp) • E=n*n/(n*n+ts* p*log(p) + tw* n*p)
Evaluarea performantelor – cazul 1D cu p<n procese • Analiza scalabilitatii: calculul functiei de izoeficienta • To=Cost-W= ts* p*log(p) + tw* n*p • W(p)=K*To(W,p) • W=K*(ts* p*log(p) + tw* n*p) • W=n*n • Rezulta ecuatie de grd 2 in n: n*n-b*n-c=0 • => n functie de p (n=O(b)) => n*n functie de p • W=O(p*p)
Inmultirea matrice-vector: paralelizare prin descompunere de date 2D • p<n*n procese, organizate sub forma de masiv bidimensional • Fiecare proces detine un bloc de dimensiune n/sqrt(p)*n/sqrt(p) • Elementele vectorului x sunt initial distribuite in blocuri de dimensiune n/sqrt(p) intre procesele din ultima coloana • Fiecare bloc j trebuie sa fie difuzat tuturor proceselor de pe coloana j (sqrt(p) operatii simultane de one-to-all broadcast pe fiecare coloana, de n/sqrt(p) valori per mesaj) • Dupa efectuarea inmultirilor, rezultatele acestora trebuie adunate pe linii (all-to-one reduction)
Evaluarea performantelor – cazul 2D cu p<n*n procese • Comunicare: • One-to-one communication (alinierea pe diagonala a lui x): ts+tw*n/sqrt(p) • One-to-all broadcast (difuzarea fiecarui x[j] pe coloana j): (ts+tw*n/sqrt(p))*log(sqrt(p)) • All-to-one reduction (insumarea pe linii): (ts+tw*n/sqrt(p))*log(sqrt(p)) • Calcule: n*n/p • Tp≈n*n/p+ts*log(p)+tw*n/sqrt(p)*log(p)
Evaluarea performantelor – cazul 2D cu p<n*n procese • Analiza scalabilitatii: calculul functiei de izoeficienta • To=Cost-W=p*Tp-W= ts*p*log(p)+tw*n*sqrt(p)*log(p) • W(p)=K*To(W,p) • W=K*(ts*p*log(p)+tw*n*sqrt(p)*log(p)) • W=n*n • Rezulta o ecuatie de grd 2 in n => n => W=n*n • W=O(p*log(p)*log(p))
Comparatia solutiilor: partitionare 1D vs. 2D • Timpul paralel de executie: • Solutia 1D: Tp=n*n/p + ts* log(p) + tw* n • Solutia 2D: Tp≈n*n/p+ts*log(p)+tw*n/sqrt(p)*log(p) • La utilizarea aceluiasi numar p de procese, solutia 2D este mai rapida • Solutia 1D poate utiliza maxim n procese • Solutia 2D poate utiliza maxim n*n procese • Scalabilitate: • Solutia 1D: W=O(p*p) • Solutia 2D: W=O(p*log(p)*log(p)) • Solutia 2D este mai scalabila
Exemplul 2 Inmultirea matrice*matrice
Inmultire matrice*matrice • Matrici dense de dimensiune n x n : C =A x B. • Complexitatea seriala este O(n3). • Operatii matriceale pe blocuri: o matrice A de n*n elemente este echivalenta cu o matrice de q*q blocuri Ai,j (0 ≤i, j < q) unde fiecare bloc este o submatrice de dimensiune (n/q) x (n/q) • Se executa q3 inmultiri de matrici de dimensiune (n/q) x (n/q)
Inmultire matrice*matrice: paralelizare prin descompunere de date 2D • Matricile A si B de dimensiune n*n se partitioneaza 2D in p blocuri Ai,j si Bi,j (0 ≤i, j < ) de dimensiune • Fiecare proces Pi,j detine initial Ai,j si Bi,j si calculeaza blocul Ci,j al matricii rezultat
Inmultire matrice*matrice: paralelizare prin descompunere de date 2D • Pentru calculul submatricii Ci,j este nevoie de toate submatricile Ai,k si Bk,j pentru 0 ≤k < . • All-to-all broadcast blocuri din A pe linii si blocuri din B pe coloane. • Inmultirea submatricilor (blocurilor) se face local
Evaluarea performantelor • Operatiile de broadcast pe linii si pe coloane: participa procesoare si se transmit n*n/p cuvinte: • Calculele pe care le realizeaza fiecare proces: inmultiri de matrici de dimensiune • Timpul paralel este aprox • Algoritmul este cost optimal pentru p=O(n*n) • Functia de izoeficienta W=O(p1.5) • Dezavantaj major al algoritmului: fiecare proces va memora la sfarsitul operatiilor de broadcast blocuri => se utiliz de ori mai multa memorie decat secv
Inmultire matrice*matrice: algoritmul lui Cannon • Matricile A si B de dimensiune n*n se partitioneaza 2D in p blocuri Ai,j si Bi,j (0 ≤i, j < ) de dimensiune • Fiecare proces Pi,j detine initial Ai,j si Bi,j si calculeaza blocul Ci,j al matricii rezultat • Se urmareste ca fiecare proces sa nu detina in memoria locala mai mult de un bloc din A si un bloc din B la fiecare moment • Se schimba ordinea calculului termenilor, astfel incat pentru orice linie i, la un moment dat, toate procesele utilizeaza un bloc diferit Ai,k. • Blocurile Ai,k sunt rotite intre procesele de pe o linie, dupa fiecare inmultire de blocuri • Analog pentru blocurile Bkj pe coloane • Este nevoie de un pas de initializare, in care fiecare proces primeste perechea sa de start Ai,k si Bkj
Inmultire matrice*matrice: algoritmul lui Cannon • Se aliniaza blocurile lui A si B astfel incat fiecare proces sa detina blocurile pe care le inmulteste. Alinierea se face shift-and pe linii toate blocurile Ai,j la stanga cu i pozitii si toate blocurile Bi,j pe coloane in sus cu j pozitii. • Executa inmultirea blocurilor in fiecare proces. • Fiecare bloc din A se shift-eaza cu o pozitie la stanga si fiecare blod din B se shift-eaza cu o pozitie in sus • In fiecare proces, executa inmultirea blocurilor curente si aduna la rezultatul partial. • Repeta pasii 3 si 4 pentru toate cele perechi de blocuri
Evaluarea performantelor - Algoritmul lui Cannon • Pasul de aliniere initiala a blocurilor: • distanta maxima de shiftare este • Cantitatea de date transportata = un bloc • Timpul necesar pentru cele 2 shiftari: • Cei pasi de calcul: • Inmultirea blocurilor: • Shift-are. • Timpul de calcul paralel: • Din punct de vedere al costului si izoeficientei, algoritmul lui Cannon se comporta ca si varianta simpla anterioara • Algoritmul lui Cannon este optimal din punct de vedere al necesarului de memorie
Inmultire matrice*matrice: algoritmul Dekel-Nassimi-Sahni DNS • Limitarile algoritmilor care utilizeaza partitionari 2D: • Se pot utiliza maximum n2 procese • Oricat s-ar imbunatati algoritmul paralel de inmultire, nu poate depasi performanta paralela de O(n), deoarece W=O(n3) • Algoritmul DNS: utilizeaza o partitionare 3-D bazata pe partitionarea datelor intermediare • Exista n3 inmultiri A[i,k]*B[k,j] => acestea vor fi efectuate in paralel de n3 procese Pi,j,k • Fiecare element C[i,j] al rezultatului se obtine insumand rezultatele partiale de la cele n procese Pi,j,k , 0<=k<n. Insumarea se poate face paralel in O(log n) => inmultirea matricilor in paralel poate fi facuta in principiu in O(log n)
Inmultire matrice*matrice: algoritmul Dekel-Nassimi-Sahni DNS p=n3 procesoare • Procesoarele sunt organizate sub forma unui cub • Initial fiecare procesor din planul orizontal k=0 detine perechea de elemente Aij si Bij • Elementele trebuie replicate pe celelalte plane k, astfel : • orice Pijk sa detina Aik si Bkj • Valoarea Aik trebuie sa se gaseasca pe toata linia i din planul k • Valoarea Bkj trebuie sa se gaseasca pe toata coloana j din planul k • Aranjarea elementelor se obtine astfel: • Muta elementul Aij din planul k=0 Pi,j,0 in planul k=j Pi,j,j • Difuzeaza one-to-all broadcast elementul Aij pe toata linia i din planul sau • Analog pentru B
Evaluarea performantelor – algoritmul DNS cu p=n3 procesoare • Fiecare procesor calculeaza o adunare. Aceasta este urmata de o insumare pe axa k – insumarea se poate face sub forma unei operatii de all-to-one reduction • Timpul paralel este dat de timpii de comunicare: • Mutarea coloanelor lui A si a liniilor lui B • One-to-all broadcast pe axa j pentru A si one-to-all broadcast pe axa i pentru B • All-to-one reduction pe axa k • Fiecare dintre aceste operatii este O(log n) • TP=O(log n) Nu este cost-optimal
Inmultire matrice*matrice: algoritmul Dekel-Nassimi-Sahni DNS p=q3 <n3procesoare • Matricile sunt partitionate in blocuri de (n/q) x(n/q). • Algoritmul descris anterior se adapteaza astfel incat lucreaza cu blocuri in loc de elemente
Evaluarea performantelor – algoritmul DNS cu p=q3<n3 procesoare • Mutarea liniilor si coloanelor in alte plane: one-to-one communication • Difuzarile in plane: one-to-all broadcasts • Insumarea prin all-to-one reduction . • Inmultirea a doua blocuri de dimensiune dureaza • Timpul paralel este aproximativ: • Algoritmul este cost-optimal pentru p=O(n3/(log n)3)
Exemplul 3 Rezolvarea sistemelor de ecuatii liniare
Rezolvarea unui sistem de n ecuatii cu n necunoscute • Etapele rezolvarii sistemului prin • metoda Gauss de eliminare: • Reducerea sistemului la o forma tridiagonala • Substitutia regresiva
Exemplu eliminare Gaussiana – etapa 1 Ec1 se imparte la 2 Din Ec2 se scade 1*Ec1 Din Ec3 se scade 3*Ec1 Din Ec4 se scade 1*Ec1
Exemplu eliminare Gaussiana – etapa 2 Ec2 se imparte la 2 Din Ec3 se scade -Ec2 Din Ec4 se scade 0*Ec2
Exemplu eliminare Gaussiana – etapa 3 Ec3 se imparte la -4 Din Ec4 se scade Ec3
Exemplu substitutii regresive Pentru un sistem de ecuatii adus la forma tridiagonala:
Paralelizare prin descompunere 1D pe linii • Matricea A este partitionata pe linii intre n procese: procesul Pi detine linia i a matricii pe care o transforma • La un moment dat toate procesele executa aceeasi iteratie k • Exista dependente de date intre instructiunile 12 (scadere) si 6 (impartire)
Evaluarea performantelor - descompunere 1D pe linii • Intr-un pas k: • Calcule impartire (instructiunile 5-6): Procesul Pk: n-k-1 operatii aritmetice de impartire • Calcule scadere (instructiunile 11-12): procesele Pi, k<i<n: 2*(n-k-1) operatii aritmetice( de inmultire si scadere) • Comunicare: one-to-all broadcast Tcomm=(ts+(n-k-1)*tw)*log(n)
Evaluarea performantelor (continuare) • Timpul total in toti pasii k: • Cost: • Timpul secvential:
Descompunere 1D pe linii cu procesare pipeline • Solutia prezentata anterior: La un moment dat toate procesele executa aceeasi iteratie k => executia iteratiei k+1 incepe dupa terminarea tuturor actiunilor iteratiei k • Posibilitate de imbunatatire a performantei: executia iteratiei k+1 poate incepe inainte de terminarea completa a iteratiei k => algoritm pipeline • Reguli: • Daca un proces detine date cerute de alte procese, le transmite • Daca un proces are suficiente date pentru a executa o secventa de calcul, o executa
Descompunere 1D pe linii cu procesare pipeline (cont.) • Operatiile one-to-all broadcast sunt inlocuite de comunicatii simple: Procesul Pk transmite procesului Pk+1 care transmite mai departe la Pk+2. In timp ce Pk+1 transmite mai departe, Pk poate deja incepe calculele.
Exemplu – pipeline pentru matrice 5*5 • P0: Impartire0 • P0: transmite Linia0 • P1: transmite Linia0 • P1: Scadere0; P2: transmite Linia0
Exemplu – pipeline pentru matrice 5*5 (cont.) • P1: Impartire1; P2: Scadere0; P3: transmite Linia 0 • P1: transmite Linia1; P3: Scadere0 • P2: transmite Linia1; P4: Scadere0 • P2: Scadere1; P3: transmite Linia1
Exemplu – pipeline pentru matrice 5*5 (cont.) • P2: Impartire2; P3: Scadere1 • P2: transmite Linia2; P4: Scadere1 • P3: transmite Linia2; • P3: Scadere2
Exemplu – pipeline pentru matrice 5*5 (cont.) • P3: impartire3; P4: Scadere2 • P3: transmite Linia 3 • P3: Scadere 3 • P4: impartire 4
Evaluarea performantelor - Descompunere 1D pe linii cu procesare pipeline • Cazul p=n • Numarul total de pasi in pipeline: 4*(n-1) • Fiecare pas consta din una din operatiile: • Impartire O(n) • Scadere O(n) • Comunicare directa O(n) • Timpul total : Tp=O(n*n) • Cost: O(n*n*n) – varianta pipeline este cost-optimala
Partitionare 1D, pipeline, distributie pe blocuri • Se utilizeaza p<n procese • Fiecare proces detine n/p linii succesive • Descompunere 1D, procesare pipeline • Se schimba raportul dintre timpul de comunicare si timpul de calcul: • Impartire: (n-k-1)*n/p operatii, O(n*n/p) • Scadere: 2*(n-k-1)*n/p operatii, O(n*n/p) • Comunicare directa: (n-k-1) cuvinte, O(n)