140 likes | 242 Views
8INF856. Algorithmes parallèles. Le langage parallèle Cilk. Trois nouveaux mots clés: s pawn s ync Parallel Si on enlève ces mots clés, on obtient un programme C standard. Exemple: Fibonacci. P-Fib (n) if n<=1 return n else x = spawn P-Fib(n-1) y = P-Fib(n-2)
E N D
8INF856 Algorithmes parallèles
Le langage parallèle Cilk Trois nouveaux mots clés: • spawn • sync • Parallel Si on enlève ces mots clés, on obtient un programme C standard.
Exemple: Fibonacci P-Fib(n) if n<=1 return n else x = spawn P-Fib(n-1) y = P-Fib(n-2) sync return x+y
Mesures de performance • Travail (work): temps séquentiel • Durée (span): temps parallèle • TP:temps d’exécution sur p processeurs • T1: travail • T∞:durée
Mesures de performance • Loi du travail: TP ≥ T1/P • Loi de la durée: TP ≥ T∞ • Accélération: T1/Tp ≤ P • Parallélisme: T1/T∞ ≥ T1/Tp
Analyse de P-Fib T1(n) = θ(ϕn) où ϕ est le nombre d’or T∞(n) = max(T∞(n-1), T∞(n-2)) + θ(1) = T∞(n-1) + θ(1) = θ(n) Parallélisme: θ(ϕn/n)
Boucles parallèles Exemple: On veut multiplier une matrice M par un vecteur x Mat-Vec(M,x,n) parallèle for i=1 to n do y[i]=0 parallèle for i=1 to n do for j=1 to n do y[i] = y[i] + M[i,j]*x[j] return y
Implémentation des boucles parallèles On implémente les boucles parallèles à l’aide de l’instruction spawn: Mat-Vec-Main-Loop(M,x,y,n,d,f) if (d==f) for j=1 to n do y[d] = y[d] + M[d,j]*x[j] else m = (d+f)/2 spawn Mat-Vec-Main-Loop(M,x,y,n,d,m) Mat-Vec-Main-Loop(M,x,y,n,m+1,f) sync
Analyse de Mat-Vec(A,x,n) • Travail: θ(n2) • Durée: Total: θ(n) • Parallélisme: θ(n2/n) = θ(n) Mat-Vec(M,x,n) parallèle for i=1 to n do y[i]=0 parallèle for i=1 to n do for j=1 to n do y[i] = y[i] + M[i,j]*x[j] return y Θ(lg n) Θ(lg n) + θ(n) Θ(1)
Multiplication matricielle (1) P-Square-Matrix-Multiply(A,B,n) parallèle for i=1 to n do parallèle for j=1 to n do C[i,j]=0 for k=1 to n do C[i,j] = C[i,j] + A[i,k]*B[k,j] return C