8inf856

17
8INF856 Algorithmes parallèles

Upload: chinue

Post on 24-Jan-2016

35 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: 8INF856

8INF856

Algorithmes parallèles

Page 2: 8INF856

Le langage parallèle Cilk

Trois nouveaux mots clés:1. spawn2. sync3. Parallel

Si on enlève ces mots clés, on obtient un programme C standard.

Page 3: 8INF856

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

Page 4: 8INF856

Exemple: Fibonacci

Page 5: 8INF856

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

Page 6: 8INF856

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

Page 7: 8INF856

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)

Page 8: 8INF856

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

Page 9: 8INF856

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

Page 10: 8INF856

Implémentation des boucles parallèles

Page 11: 8INF856

Analyse de Mat-Vec(A,x,n)

• Travail: θ(n2)• Durée:

Total: θ(n)• Parallélisme: θ(n2/n) = θ(n)

Θ(lg n)

Θ(lg n) + θ(n)

Θ(1)

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

Page 12: 8INF856

Multiplication matricielle (1)

Multiplier deux matrices carrées

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

Quel est la durée et le parallélisme?

Page 13: 8INF856

Multiplication matricielle (2)

Page 14: 8INF856

Algorithme de Strassen

Page 15: 8INF856

Tri-fusion parallèle (première version)

Tri-fusion(A, p, r)if (p>= r) returnq= partie entière de (p+r)/2spawn Tri-fusion(A, p, q)Tri-fusion(q+1, r)syncFusion(A, p, q, r)

Page 16: 8INF856

Fusion parallèleP-fusion(T,p1, r1, p2, r2, A, p3)

n1=r1-p1+1; n2=r2-p2+1if n1<n2 interchanger (n1,p1,r1) et (n2,p2,r2)if n1>0

q1= partie entière de (p1+r1)/2q2=recherche-dychotomique(T[q1], T, p2, r2)q3=p3+(q1-p1) + (q2-p2)A[q3]=T[q1]spawn P-fusion(T, p1, q1-1, p2, q2-1, A,

p3)P-fusion(T, q1+1, r1, q2, r2, A, q3+1)sync

Page 17: 8INF856

Tri-fusion parallèleP-tri-fusion(A,p,r,B,s)

//tri les éléments de A[p..r] et les place dans B[s..s+r-p]if (n—1) B[s]=A[p]sinon

soit T[1..n], un nouveau tableauq=partie entière de (p+r)/2q’=q-p+1spawn P-tri-fusion(A,p,q,T,1)P-tri-fusion(A,q+1,r,T,q’+1)syncP-fusion(T,1,q’,q’+1,n,B,s)