1   Parallélisme

Eric Goubault

Commissariat à l'Energie Atomique

Saclay

2  Plan

3  Généralités

4  Caractéristiques

Topologie # proc. do diam. # liens
Complet p p-1 1
p(p-1)

2
Anneau p 2
ë
p

2
û
p
Grille 2D (p)(p) 2,3,4 2((p)-1) 2p-2(p)
Tore 2D (p)(p) 4
2 ë
(p)

2
û
2p
Hypercube p=2d d=log(p) d
p log(p)

2

5  Intérêt

6  Routage

Modèle ``Store and Forward'' (SF):

7  Routage

Modèle ``cut-through'' (CT):

8  Circuit-switching

9  Wormhole

10  Comparaison

11  Comparaison

file=compCCWHSF.eps,width=15cm,clip=

12  Communications dans un hypercube

13  Numérotation des sommets

Un m-cube est la donnée de:
00 [r]0 [d]101 [d]1
10 [r]011

14  Chemins et routage

15  Chemins et routage

Un routage possible: on corrige les poids faibles d'abord,

Egalement algorithme dynamique qui corrige les bits selon les liens disponibles

16  Plongements d'anneaux et de grilles

Code de Gray Gm de dimension m, défini récursivement:
Gm = 0Gm-1 | 1 Gm-1rev

17  Codes de Gray: exemple

(imaginer la numérotation des processeurs sur l'anneau, dans cet ordre - un seul bit change à chaque fois)

18  Codes de Gray: intérêt

19  Codes de Gray: exemple

file=anneauGray.eps,width=16cm,clip=

20  Diffusion simple dans l'hypercube

21  Arbres couvrants de l'hypercube

22  Arbres couvrants de l'hypercube

On construit à la fois un arbre couvrant de l'hypercube et l'algorithme de diffusion (ici m=4):

file=arbrecouvrant4.eps,width=15cm,clip=

23  Exemple

Pour m=4, Améliorations possibles, voir poly

24  Algorithmique sur grille 2D

25  Produit de matrices sur grille 2D

Distribution des données:

26  Distribution cyclique par blocs

Vecteur à M composantes sur p processeurs, 0 £ m < M et 0 £ q < p:
m ®
(q,b,i)= æ
ç
ç
è
ë
m mod T

r
û, ë
m

T
û, m mod r ö
÷
÷
ø

r est la taille de bloc et T=rp.

27  Réseau linéaire par blocs (4 procs)

M=8, p=4, r=8 (pour chaque colonne):

0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3

28  Réseau linéaire cyclique

M=8, p=4, r=4 (pour chaque colonne):

0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3

29  Réseau en grille 2D par blocs (4×4 procs)

M=8, p=4, r=8 en ligne et en colonne:

0.0 0.0 0.1 0.1 0.2 0.2 0.3 0.3
0.0 0.0 0.1 0.1 0.2 0.2 0.3 0.3
1.0 1.0 1.1 1.1 1.2 1.2 1.3 1.3
1.0 1.0 1.1 1.1 1.2 1.2 1.3 1.3
2.0 2.0 2.1 2.1 2.2 2.2 2.3 2.3
2.0 2.0 2.1 2.1 2.2 2.2 2.3 2.3
3.0 3.0 3.1 3.1 3.2 3.2 3.3 3.3
3.0 3.0 3.1 3.1 3.2 3.2 3.3 3.3

30  Réseau en grille 2D par blocs cycliques

M=8, p=4, r=4 en ligne et en colonne:

0.0 0.1 0.2 0.3 0.0 0.1 0.2 0.3
1.0 1.1 1.2 1.3 1.0 1.1 1.2 1.3
2.0 2.1 2.2 2.3 2.0 2.1 2.2 2.3
3.0 3.1 3.2 3.3 3.0 3.1 3.2 3.3
0.0 0.1 0.2 0.3 0.0 0.1 0.2 0.3
1.0 1.1 1.2 1.3 1.0 1.1 1.2 1.3
2.0 2.1 2.2 2.3 2.0 2.1 2.2 2.3
3.0 3.1 3.2 3.3 3.0 3.1 3.2 3.3

31  En pratique?

32  Produit de matrices sur grille 2D

33  Au départ:

æ
ç
ç
ç
è
C00 C01 C02 C03
C10 C11 C12 C13
C20 C21 C22 C23
C30 C31 C32 C33
ö
÷
÷
÷
ø
¬
æ
ç
ç
ç
è
A00 A01 A02 A03
A10 A11 A12 A13
A20 A21 A22 A23
A30 A31 A32 A33
ö
÷
÷
÷
ø
×
æ
ç
ç
ç
è
B00 B01 B02 B03
B10 B11 B12 B13
B20 B21 B22 B23
B30 B31 B32 B33
ö
÷
÷
÷
ø

34  Principe de l'algorithme de Cannon

``Preskewing'':

æ
ç
ç
ç
è
C00 C01 C02 C03
C10 C11 C12 C13
C20 C21 C22 C23
C30 C31 C32 C33
ö
÷
÷
÷
ø
=
æ
ç
ç
ç
è
A00 A01 A02 A03
A11 A12 A13 A10
A22 A23 A20 A21
A33 A30 A31 A32
ö
÷
÷
÷
ø
×
æ
ç
ç
ç
è
B00 B11 B22 B33
B10 B21 B32 B03
B20 B31 B02 B13
B30 B01 B12 B23
ö
÷
÷
÷
ø

35  Principe de l'algorithme de Cannon (2)

Rotations sur A et B:

æ
ç
ç
ç
è
C00 C01 C02 C03
C10 C11 C12 C13
C20 C21 C22 C23
C30 C31 C32 C33
ö
÷
÷
÷
ø
=
æ
ç
ç
ç
è
A01 A02 A03 A00
A12 A13 A10 A11
A23 A20 A21 A22
A30 A31 A32 A33
ö
÷
÷
÷
ø
×
æ
ç
ç
ç
è
B30 B01 B12 B23
B00 B11 B22 B33
B10 B21 B32 B03
B20 B31 B02 B13
ö
÷
÷
÷
ø

36  Principe de l'algorithme de Cannon

/* diag(A) sur col 0, diag(B) sur ligne 0 */
Rotations(A,B); /* preskewing */

/* calcul du produit de matrice */
forall (k=1; k<=sqrt(P)) {
  LocalProdMat(A,B,C);
  VerticalRotation(B,downwards);
  HorizontalRotation(A,leftwards); }

/* mouvements des donnees apres les calculs */
Rotations(A,B); /* postskewing */

37  Principe de l'algorithme de Fox

38  Principe de l'algorithme de Fox

æ
ç
ç
ç
è
C00 C01 C02 C03
C10 C11 C12 C13
C20 C21 C22 C23
C30 C31 C32 C33
ö
÷
÷
÷
ø
+=
æ
ç
ç
ç
è
A00 A00 A00 A00
A11 A11 A11 A11
A22 A22 A22 A22
A33 A33 A33 A33
ö
÷
÷
÷
ø
×
æ
ç
ç
ç
è
B00 B01 B02 B03
B10 B11 B12 B13
B20 B21 B22 B23
B30 B31 B32 B33
ö
÷
÷
÷
ø

39  Principe de l'algorithme de Fox (2)

æ
ç
ç
ç
è
C00 C01 C02 C03
C10 C11 C12 C13
C20 C21 C22 C23
C30 C31 C32 C33
ö
÷
÷
÷
ø
+=
æ
ç
ç
ç
è
A01 A01 A01 A01
A12 A12 A12 A12
A23 A23 A23 A23
A30 A30 A30 A30
ö
÷
÷
÷
ø
×
æ
ç
ç
ç
è
B10 B11 B12 B13
B20 B21 B22 B23
B30 B31 B32 B33
B00 B01 B02 B03
ö
÷
÷
÷
ø

40  Principe de l'algorithme de Fox

/* pas de mouvements de donnees avant les calculs */

/* calcul du produit de matrices */
broadcast(A(x,x));
forall (k=1; k<sqrt(P)) {
  LocalProdMat(A,B,C);
  VerticalRotation(B,upwards);
  broadcast(A(k+x,k+x)); }
forall () {
  LocalProdMat(A,B,C);
  VerticalRotation(B,upwards); }

/* pas de mouvements de donnees apres les calculs */

41  Principe de l'algorithme de Snyder

42  Principe de l'algorithme de Snyder

æ
ç
ç
ç
è
C00 C01 C02 C03
C10 C11 C12 C13
C20 C21 C22 C23
C30 C31 C32 C33
ö
÷
÷
÷
ø
+=
æ
ç
ç
ç
è
A00 A01 A02 A03
A10 A11 A12 A13
A20 A21 A22 A23
A30 A31 A32 A33
ö
÷
÷
÷
ø
×
æ
ç
ç
ç
è
B00 B01 B02 B03
B10 B11 B12 B13
B20 B21 B22 B23
B30 B31 B32 B33
ö
÷
÷
÷
ø

43  Principe de l'algorithme de Snyder (2)

æ
ç
ç
ç
è
C00 C01 C02 C03
C10 C11 C12 C13
C20 C21 C22 C23
C30 C31 C32 C33
ö
÷
÷
÷
ø
+=
æ
ç
ç
ç
è
A00 A01 A02 A03
A10 A11 A12 A13
A20 A21 A22 A23
A30 A31 A32 A33
ö
÷
÷
÷
ø
×
æ
ç
ç
ç
è
B10 B11 B12 B13
B20 B21 B22 B23
B30 B31 B32 B33
B00 B01 B02 B03
ö
÷
÷
÷
ø

44  Principe de l'algorithme de Snyder

/* mouvements des donnees avant les calculs */
Transpose(B);
/* calcul du produit de matrices */
forall () {
  LocalProdMat(A,B,C);
  VerticalRotation(B,upwards); }
forall (k=1;k<sqrt(P)) {
  GlobalSum(C(i,(i+k-1) mod sqrt(P)));
  LocalProdMat(A,B,C);
  VerticalRotation(B,upwards); }
GlobalSum(C(i,(i+sqrt(P)-1) mod sqrt(P)));
/* mouvements des donnees apres les calculs */
Transpose(B);

45  Analyse des algorithmes

Selon les modèles (CC, SF, WH): voir poly!

46  Algorithmique hétérogène

Allocation statique de tâches:

47  Allocation statique optimale

Distribute(B,t1,t2,...,tn)
/* initialisation: calcule ci */
for (i=1;i<=p;i++)
  c[i]=...
/* incrementer iterativement les ci minimisant le temps */
while (sum(c[])<B) {
  find k in {1,...,p} st t[k]*(c[k]+1)=min{t[i]*(c[i]+1)};
  c[k] = c[k]+1;
return(c[]);

48  Algorithme incrémental

49  Algorithme incrémental

Distribute(B,t1,t2,...tp)
/* Initialisation: aucune tache a distribuer m=0 */
for (i=1;i<=p;i++) c[i]=0;
/* construit iterativement l'allocation sigma */
for (m=1;m<=B;m++)
  find(k in {1,...p} st t[k]*(c[k]+1)=min{t[i]*(c[i]+1)});
  c[k]=c[k]+1;
  sigma[m]=k;
return(sigma[],c[]);

50  Exemple

# atomes c1 c2 c3 cout proc. sel. alloc. s
0 0 0 0   1  
1 1 0 0 3 2 s[1]=1
2 1 1 0 2.5 1 s[2]=2
3 2 1 0 2 3 s[3]=1
4 2 1 1 2 1 s[4]=3
5 3 1 1 1.8 2 s[5]=1
...            
9 5 3 1 1.67 3 s[9]=2
10 5 3 2 1.6   s[10]=3

51  Ressources hétérogènes et équilibrage de charges

LU hétérogène:

52  Allocation statique équilibrant les charges 1D

53  Allocation statique équilibrant les charges 1D

54  Allocation 1D

55  Exemple

n=B=10, t1=3, t2=5, t3=8 le motif sera:

P3 P2 P1 P1 P2 P1 P3 P1 P2 P1

56  Allocation statique 2D

Exemple: Multiplication de matrices sur grille homogène:

57  Multiplication de matrices - cas homogène

file=partition.eps,width=15cm,clip=

58  Multiplication - cas inhomogène ``régulier''

59  Equilibrage de charge parfait

60  Problème

Il faut optimiser:

61  Régularité?

62  Partitionnement libre

où comment faire avec p (premier) processeurs??

file=partitionlibre.eps,width=12cm,clip=

63  Partitionnement libre

64  Géométriquement

65  Exemple

file=partitionlibre2.eps,width=12cm,clip=

66  Exemple


This document was translated from LATEX by HEVEA.