• Aucun résultat trouvé

Grille virtuelle de processus ´etendue

4.2 Mod`ele de distribution

4.2.3 Grille virtuelle de processus ´etendue

Un tableau ou un nid de boucles avec un nombre de dimensions sup´erieur ou ´egal `a deux peut avoir une dimension distribu´ee avec une distribution diagonalis´ee en utilisant le mot cl´e diag. La distribution ainsi obtenue est dite multi-partitionn´ee, pour reprendre le vocabulaire utilis´e dans l’impl´ementation de r´ef´erence des benchmarks NAS BT et SP [11] pour ce type de distribution. Nous rappelons sur un exemple ce qu’est une distribution multi-partitionn´ee ainsi que son int´erˆet. Nous explicitons

ensuite la construction d’une grille virtuelle, que l’on qualifiera d’´etendue, associ´ee `a un tableau ou un nid de boucle avec une distribution multi-partitionn´ee.

Contrainte du mod`ele. Une seule dimension d’un nid de boucles ou d’un tableau peut ˆetre diagonalis´ee.

Int´erˆet. Une distribution multi-partitionn´ee permet d’obtenir un meilleur ´equilibrage de charge pour des sch´emas d’acc`es `a balayage. Il s’agit de tableaux multi-dimensionnels qui sont acc´ed´es par des nids de boucles avec au moins une dimension comportant une d´ependance, imposant ainsi un ordre s´equentiel sur cette dimension. Dans ce type de programmes, la dimension ordonn´ee change entre les diff´erents nids de boucles successifs du programme.

Exemple. La figure 4.2 montre un exemple d’ex´ecution d’un code effectuant un balayage par lignes d’un tableau 2-dimensionnel sur quatre processus. Si le tableau parcouru est distribu´e par lignes, alors il faudrait quatre ´etapes successives pour effectuer le calcul. Les diff´erents niveaux de gris indiqu´es sur la figure montre ces diff´erentes ´etapes, rappelant une vague avan¸cant par blocs de lignes. Dans ce cas, `a chaque ´etape, un seul processus est actif et les trois autres sont inactifs, en attente des r´esultats des ´etapes pr´ec´edentes. Il est ainsi clair que cette configuration r´esulte en une d´egradation des performance de l’ex´ecution parall`ele.

Si en revanche on distribuait le tableau par blocs de colonnes alors le probl`eme de la d´ependance sur la premi`ere dimension ne se poserait plus et les calculs seraient effectu´es en une seule ´etape o`u tous les processus sont actifs. Mais si un nid de boucle suivant acc`ede au mˆeme tableau avec une d´ependance sur la deuxi`eme dimension, alors le probl`eme sym´etrique se poserait.

Une distribution 2-dimensionnelle ne r´esoudrait pas non plus le probl`eme de l’´equilibrage de charge car il y aurait deux ´etapes de calcul et pour chaque ´etape, la moiti´e des processus seraient inactifs.

Maintenant que nous avons rappel´e le probl`eme pos´e par ce type de sch´ema d’acc`es, nous verrons comment une distribution multi-partitionn´ee permet de r´egler le probl`eme de l’´equilibrage de charge. Dans notre exemple, si la deuxi`eme dimension du tableau est distribu´ee avec un type diag, on obtient une distribution multi-partitionn´ee comme indiqu´e sur la figure 4.2. Les blocs du tableau A sont affect´es aux diff´erents processus suivant une diagonale (nous donnerons les d´etails de la construction d’une telle distribution dans les sections suivantes). Dans ce cas, on a toujours quatre ´etapes de calcul, mais la diff´erence majeure avec les distributions pr´ec´edentes est qu’`a chaque ´etape de calcul, tous les processus sont actifs.

Remarque importante. La distribution multi-partitionn´ee, illustr´ee par l’exemple pr´ec´edent, permet d’obtenir un meilleur ´equilibrage de charge, mais introduit des communications suppl´ementaires entre les diff´erents blocs de donn´ees, qui sont plus nombreux que dans les autres exemples de distribution. Le gain effectif d’une telle distribution d´ecoule directement de la diff´erence entre le gain en ´equilibrage de charge

et les surcoˆuts des communications induites, d´ecrits dans le chapitre 7 sur le mod`ele de coˆut de dSTEP.

Figure 4.2 – Illustration de la distribution multi-partitionn´ee sur un tableau 2- dimensionnel

Une distribution multi-partitionn´ee est effectu´ee sur une grille de processus ´etendue, dont nous donnons la d´efinition dans la section suivante.

D´efinition. Une grille virtuelle ´etendue de processus est d´efinie par l’ensemble Pgrid

(´equation 4.5). Le vecteur ~˜pgrid est un identifiant de processus virtuel dans cette grille.

La matrice P , de dimension d, est une matrice diagonale contenant le nombre de pro- cessus selon chaque dimension. La matrice P est obtenue `a partir de la matrice P′

(´equation 4.4) en l’´etendant d’une dimension correspondant `a la dimension diagona- lis´ee et en donnant comme valeur `a cette dimension un nombre de processus virtuels correspondant au minimum du nombre de processus affect´es aux autres dimensions, autres les dimensions r´epliqu´ees.

Pk,k=

 P

k,k si k est non diagonalis´ee

M IN {P′

j,j, 0 ≤ j < d, j 6= k, j n’est pas r´epliqu´ee} sinon

(4.4)

Exemple. Le listing 4.3 montre l’utilisation de la directive dstep distribute pour indiquer que la deuxi`eme dimension du tableau A est diagonalis´ee. Les diff´erentes ´etapes permettant de construire la grille virtuelle de processus ´etendue pour cette distribution sont illustr´ees par la figure 4.3. Sur la grille virtuelle ´etendue, il y a seize identifiants de processus alors que l’on ne dispose r´eellement que de quatre processus. En effet, les processus affect´es `a la deuxi`eme dimension de la grille, correspondant `a la dimension diagonalis´ee, n’existent pas. Ils sont obtenus en associant vprocs processus virtuels `a chaque processus r´eel. Dans l’exemple pr´ec´edent, vprocs = 4.

D´efinition. Pour une grille virtuelle de processus, on d´efinit : vprocs = Pk,k si une dimension k est diagonalis´ee,

1 sinon (4.6)

La matrice P a donc la propri´et´e suivante :

det(P ) = nb procs × vprocs 6= 0 (4.7)

1 # pragma dstep d i s t r i b u t e A (1: block :1 , 1: diag :1) 2 double A [ m ][ n ];

Listing 4.3 – Exemple d’un tableau distribu´e sur ses deux dimensions, avec une distribution diagonalis´ee sur la deuxi`eme dimension

D´efinition. La fonction extend id (´equation 4.8) associe vprocs identifiants de pro- cessus dans une grille virtuelle ´etendue `a chaque identifiant de processus dans une grille virtuelle simple. L’ensemble V est d´efini par V = [0, vprocs[.

extend id : P′

grid× V → Pgrid

(~p′

grid, v) → (~p′grid+ v~1)modvP~1

(4.8) Exemple. La figure 4.4 montre les quatre processus virtuels associ´es au processus p = 1.

Th´eor`eme. 1. La fonction extend id est bijective.

La bijectivit´e de la fonction extend id permet de garantir que tous les processus virtuels peuvent ˆetre ´enum´er´es : chaque processus obtient son identifiant en interro- geant l’environnement d’ex´ecution, et ´enum`ere les vprocs qui lui sont affect´es grˆace `a la fonction extend id. Les grilles virtuelles ´etant les supports sur lesquels les nids de boucles et les tableaux sont distribu´es, cette propri´et´e garantit que toutes les it´erations et les ´el´ements de tableaux distribu´es peuvent ˆetre visit´es (voir le chapitre compilation 5).

Figure 4.3 – Construction d’une grille virtuelle ´etendue

D´emonstration. Si aucune dimension n’est diagonalis´ee, la fonction extend id est la fonction identit´e, qui est trivialement bijective. Sinon, soit k la dimension diagonalis´ee de la grille :

a) Soit (~p′

grid, v), (~q′grid, w) ∈ Pgrid′ × V avec (~p′grid, v) 6= (~q′grid, w)

On suppose que extend id(~p′

grid, v) = extend id(~q′grid, w)

=⇒ (~p′

grid+ v~1)modvP~1 = (~q′grid+ w~1)modvP~1

L’´equation pr´ec´edente exprime que les vecteurs (~p′

grid+ v~1) et (~q′grid+ w~1) ont le

mˆeme modulo, composante par composante, par le vecteur (P~1). Leur difference est donc forc´ement un multiple du vecteur (P~1), ce qui s’ecrit :

((~p′

grid+ v~1) − (~q′grid+ w~1))modvP~1 = ~0

=⇒ ((~p′

grid− ~q′grid) + (v − w)~1)modvP~1 = ~0

=⇒ ((~p′

grid(k) − ~q′grid(k)) + (v − w)) mod Pk,k = 0

Or, on a par d´efinition ~p′

grid(k) = ~q′grid(k) = 0,

ce qui implique que (v − w) mod Pk,k = 0, c’est-`a-dire que (v − w) = nPk,k, n ∈ Z

On a par ailleurs 0 ≤ v < Pk,k et 0 ≤ w < Pk,k, ce qui implique que −Pk,k <

v − w < Pk,k.

On en d´eduit que n ne peut ˆetre que nul, donc que v = w. On peut maintenant r´e´ecrire (~p′

grid− ~q′grid+ (v − w)~1)modvP~1 = ~0 en

(~p′

Figure 4.4 – Illustration de la fonction extend id

Soit une dimension k′, k6= k,

(~p′

grid− ~q′grid)modvP~1 = ~0 =⇒ (~p′grid(k′) − ~q′grid(k′)) mod Pk′,k′ = 0

=⇒ ~p′

grid(k′) − ~q′grid(k′) = nPk′,k′, n ∈ Z

On a par ailleurs 0 ≤ ~p′

grid(k′) < Pk′,k′ et 0 ≤ ~q′grid(k′) < Pk,k′, ce qui implique

que −Pk′,k′ < ~p′grid(k′) − ~q′grid(k′) < Pk,k′,

On en d´eduit que n ne peut ˆetre que nul, donc que ~p′

grid(k′) = ~q′grid(k′) pour tout

k′, c’est `a dire que ~p

grid = ~q′grid.

Le r´esultat v = w et ~p′

grid = ~q′grid est en contradiction avec notre hypoth`ese,

extend id est donc une injection.

b) On montre que extend id est une surjection, c’est-`a-dire qu’il existe un ant´ec´edent (~p′

grid, v) ∈ Pgrid′ × V pour tout ´el´ement ~˜p ∈ Pgrid.

On v´erifie facilement que l’´el´ement (~p′

grid = (~˜pgrid+P~1− ˜p(k)~1)modvP~1, v = ~˜p(k))

est un ant´ec´edent de l’´el´ement ~˜p ∈ Pgrid.

La fonction extend id est donc bien une bijection.

Remarque. Une grille virtuelle simple n’est qu’un cas particulier d’une grille vir- tuelle ´etendue dans laquelle vprocs = 1 et la fonction extend id est la fonction iden-

tit´e. Dans toute la suite, nous parlerons de grilles virtuelles de processus au sens large.