• Aucun résultat trouvé

Cours 4. Analyse d'algorithmes avec prise en compte des communications

N/A
N/A
Protected

Academic year: 2022

Partager "Cours 4. Analyse d'algorithmes avec prise en compte des communications"

Copied!
18
0
0

Texte intégral

(1)

Cours 4. Analyse d'algorithmes avec prise en compte des communications

1

www-id.imag.fr/Laboratoire/Membres/Roch_Jean-Louis/perso.html/COURS/

- Analyse de schémas de communication globale - Exemple du produit de matrices

- FFT

(2)

Distribution bloc-cyclique bi-dimensionnelle

Sur 6 Processeurs, agencés en grille 2x3

2

(3)

Exemple de synthèse :

produit de matrices

I.

Distribution de données: ligne-colonne

II.

Distribution de données: bloc bi-dimensionnel

III.

Distribution de calculs

3

(4)

Algorithme 1: ligne-colonne

l

A(i, _) : découpée en K blocs de n/K lignes:

l

B(_, j) : découpée en K blocs de n/K colonnes

§ Répliquée sur tous les processeurs

l

C(i, _) : découpée en K blocs de n/K lignes

l

Affectation des calculs sur C(i,_) au même proc

l

Coût : T

= (n/K).n2 = n3/K T1 = = n3 opérations 4

(5)

Algorithme ligne-colonne

Circulation des colonnes de B

l

Algorithme en K étapes : sur le proc i

(0<=i<K<=n)

§ Init : C( i, _) = 0 ;

§ For (k=0; k<K; k++) {

w C( i, i+k % K) = A( i, _ )*B( _, i+k % K) ;

§ }

(6)

Algorithme ligne-colonne

Circulation des colonnes de B

l

Algorithme en K étapes : sur le proc i

(0<=i<K<=n)

§ Init : C( i, _) = 0 ;

§ For (k=0; k<K; k++) {

w C( i, i+k % K) = A( i, _ )*B( _, i+k % K) ;

§ }

l

Coût : T

= K. (n/K)2.n = n3/K et T1 = n3

l Communications: C = n2/K + K.n2/K = n2 et C1 = n2.K

l Avec K=p <= n processeurs : T =n3/p et C1 = n2.p

(7)

Algorithme ligne-colonne

Circulation des colonnes de B

l

Algorithme en K étapes : sur le proc i

(0<=i<K<=n)

§ Init : C( i, _) = 0 ; localB=B(_,i); tmpB = buffer(n2/K);

§ For (k=0; k<K; k++) {

w async_send (localB, i-1%K) ; async_recv(tmpB, i+1%K) ; w C( i, i+k % K) = A( i, _ )*localB ;

w Sync ; swap (localB, tmpB);

§ }

l

Coût : T

= K. (n/K)2.n = n3/K et T1 = n3

l Communications: C = n2/K + K.n2/K = n2 et C1 = n2.K

l Avec K=p <= n processeurs : T =n3/p et C1 = n2.p

(8)

Algorithme par blocs bidimensionnel

8 A : circulation

en ligne

B : circulation en colonne

KxK blocs de taille

(n/K)x(n/K)

0<K<=n

§ K2=p

§ K=√p

(9)

Produit de matrices en bloc

: KxK blocs

9 A : circulation

en ligne

B : circulation en colonne

(10)

Algorithme par bloc

l - Calcul C(i,j) = Σ A(i,k)*B(k,j) sur un même proc

l - Pipeline: circulation A par ligne; circulation B par colonne

l - Init: Attention : on démarre avec A(i,i) sur chaque proc.

l Processeur (i,j) :

§ Init : wait localA= A(i,i); localB=B(i,j); tmpA= ...; tmpB= ...

§ For (k=1; k<K; k++) {

w async_send (localA, P(i,j-1%K)) ; async_recv(tmpA, P(i,j+1%K) ; w async_send (localB, P(i-1%K,j)) ; async_recv(tmpB, P(i+1%K, j) ;

w C( i, j) += localA*localB ;

w Sync ; swap (localB, tmpB); swap (localA, tmpA); }

(11)

Algorithme par bloc

l - Calcul C(i,j) = Σ A(i,k)*B(k,j) sur un même proc

l - Pipeline: circulation A par ligne; circulation B par colonne

l - Init: Attention : on démarre avec A(i,i) sur chaque proc.

l Processeur (i,j) :

§ Init : wait localA= A(i,i); localB=B(i,j); tmpA= ...; tmpB= ...

§ For (k=1; k<K; k++) {

w async_send (localA, P(i,j-1%K)) ; async_recv(tmpA, P(i,j+1%K) ; w async_send (localB, P(i-1%K,j)) ; async_recv(tmpB, P(i+1%K, j) ;

w C( i, j) += localA*localB ;

w Sync ; swap (localB, tmpB); swap (localA, tmpA); } l

Coût : T

= K. (n/K)3 = n3/K2 et T1 = n3

l Communications: C = K.n2/K2 = n2/K et C1 = n2.K

l Avec K=p (p <= n2)processeurs : T =n3/p et C1 = n2.p

(12)

Algorithme par distribution des calculs

l

- A et B découpées en KxK blocs bidimensionnels

l

- => K

3 calculs parallèles : tmp(i, k, j) = A(i,k) * B(k,j)

l - Puis réduction : C( i, j) =

Σ

κ=0..Κ−1 tmp(i,k,j) (en arbre)

(13)

Algorithme par blocs et distribution des calculs

l

- A et B découpées en KxK blocs bidimensionnels

l

- => K

3 calculs parallèles : tmp(i, k, j) = A(i,k) * B(k,j)

l Coût : T = (n/K)3 = n3/K3 et T1 = n3 avec K3 procs

l Comm.: C = n2/K2 et C1 = n2.K

l - Puis réduction : C( i, j) =

Σ

κ=0..Κ−1 tmp(i,k,j) (arbre)

Coût : T = (n/K)2 .log K et T1 = K2.K.(n/K)2 =n2.K

l Comm.: C = n2/K2 .log K et C1 = n2.K

l

- Avec K=p1/3 (p <= n3)processeurs : T =n3/p et C1 = n2.p1/3

(14)

Algorithme par bloc

et distribution des calculs

l - Pipeline des accès pour masquer le facteur log K

l - On choisit K >> p1/3 (i.e. Parallelisation plus fine)

l - Chaqueprocesseur peut ainsi anticiper les sommations

l => Avec p=n3 processeurs : C = n2/K2 et C1 = n2.K soit Cp=n4/3 au max. par proc.

l => Distribution bloc-cyclique bi-dimensionnel

(15)

Distribution bloc-cyclique bi-dimensionnelle

Sur 6 Processeurs, agencés en grille 2x3

15

(16)

Exemple 3 : FFT

16

(17)

FFT : performances

17

« LogP : Towards a realistic model of Parallel Computation » D. Culler & al.

(18)

FFT : redistribution

T

1

= √ n

T

= √ n.log n

C1= n

18

Références

Documents relatifs

I La racine de l'arbre est étiquetée par l'axiome de la grammaire (qui est aussi le premier élément de la dérivation gauche). I On parcourt la dérivation de gauche à droite,

[r]

• Meilleur cas: notée par t min (n) repésentant la complexité de l’algorithme dans le meilleur des cas en fonction du paramètre n (ici le nombre d’éléments dans le

spécifiques dans la structure de données, la méthode du potentiel de l’analyse amortie représente ce travail comme un potentiel qui peut être libéré pour payer des.

Application: recherche arborescente Contrôle de l'espace mémoire.. 4

Nb colonnes calculées sur une colonne de Pes Mise à jour sur une ligne Mapping des blocs Nb x Nb .

Certes, la diversité communautaire était un facteur de division qui remettait en cause l’unité politique et territoriale des villes, ce qui est fondamental dans une

Pour faire une preuve de terminaison, on cherche donc ce que l’on appelle un variant de boucle ou encore une fonction de terminaison, c’est à dire une suite d’entiers