• Aucun résultat trouvé

Le mod`ele poly´edrique

Le mod`ele poly´edrique est une abstraction math´ematique qui ne repr´esente plus un nid de boucles sous une forme imp´erative. Selon ce mod`ele, les instructions sont d´efinies dans des espaces multidi- mensionnels ; ceux-ci repr´esentent les conditions d’existence de chaque instructions en fonction des indices de ses boucles englobantes.

Afin d’exprimer l’intuition de cette abstraction, la figure4.1billustre le domaine d’it´eration d’une instruction S contenue dans deux boucles imbriqu´ees. Ce domaine est d´efini par un espace bidimen- sionnel o`u chaque dimension repr´esente un indice du nid boucle entourant S. Dans cet exemple, les bornes hautes des boucles i et j sont respectivement inf´erieures `a des param`etres N et M qui ne seront connus qu’`a l’ex´ecution du programme. La figure4.1bcorrespond donc `a un cas particulier o`u

N et M sont ´egaux `a 6. Dans ce cas, chaque it´eration du nid de boucle est identifi´ee par un unique point de coordonn´ees(i, j) tel que 6 ≥ i, j ≥ 1. L’instruction S disposera donc d’autant d’instances que de points dans son domaine d’it´eration ; les d´ependances de donn´ees de S porteront alors sur une instance de S `a l’it´eration produisant une donn´ee et sur les instances de S qui y acc´ederont.

4.2. Le mod`ele poly´edrique 85

(a) Exemple de nid de boucles.

1 for(i=1;i<N+1;i++){ 2 for(j=1;j<M+1;j++)

3 S: A[i][j] = A[j][i] + A[i][j-1];

4 }

(b) Domaine d’it´eration de S pour N = M = 6.

i

j

0

lexmin lexmax N=6 M=6

Figure 4.1 – Domaine d’it´eration d’un nid de boucles. Chaque point du domaine repr´esente une it´eration du nid de boucles.

nous d´etaillons ´egalement, plus formellement que dans le paragraphe pr´ec´edent, son application `a l’analyse des d´ependances de donn´ees d’un programme.

4.2.1

Notations

Le mod`ele poly´edrique s’appuie sur l’alg`ebre lin´eaire pour repr´esenter de mani`ere compacte des nids de boucles. Quelques d´efinitions sont n´ecessaires `a la compr´ehension du formalisme math´ema- tique utilis´e. Pour une description plus approfondie, le lecteur pourra se r´ef´erer aux travaux de Schri- jver [167].

efinition 8 (Fonction affine) Une fonction f : Zm

→ Zn est affine ssi il existe une matrice A ∈ Zm∗n

et un vecteur ~b ∈ Zn tels que :

∀~x ∈ Zm, f(~x) = A~x +~b

efinition 9 (Hyperplan affine) Un hyperplan affine de dimension m −1 est un sous-espace d’un espace de dimension m. Il est d´efini par une fonction affine φ(~v) : Zm→ Z telle que :

φ(~v) = h.~v + c

Avec h le vecteur ligne normal `a l’hyperplan et c ∈ Z.

Un hyperplan affine h.~v = k divise un espace affine en un demi-espace positif (h.~v ≥ k) et un demi-espace n´egatif (h.~v ≤ k). Chacun de ces demi-espaces peut ˆetre repr´esent´e par une in´egalit´e affine. La figure4.2 illustre les notions de la d´efinition 9 et de demi-espace. Le sch´ema4.2b montre ainsi un espace mono-dimensionnel k0 o`u ont ´et´e projet´es l’ensemble des instances de l’hyperplan du

86 Chapitre 4. Optimisation de code dans le mod`ele poly´edrique (a) Instance de l’hyperplan (0 0 1) dans

l’espace (i j k)

!"

#"

!"#$%#%#&'#

k

(b) Transformation de l’espace par l’hyperplan (pro- jection)

k' i'

j'

Figure 4.2 – Hyperplan dans un espace `a trois dimensions.

D´efinition 10 (Poly`edre) Un poly`edre est l’intersection d’un ensemble fini de demi-espaces. Chaque demi-espace correspondant `a une face du poly`edre, il peut ˆetre d´ecrit par un ensemble d’in´egalit´es :

P = {~x ∈ Zm|A~x+~b ≥ ~0}

D´efinition 11 (Poly`edre param´etrique) Soit ~n un vecteur de param`etres. Un poly`edre param´e- trique est d´efini par :

P = {~x ∈ Zm|A~x+ B~n +~b ≥ ~0}

Soit ~x= (x1, . . . , xp) le vecteur des i indices et ~n = (n1, . . . , nq) le vecteur des j param`etres. Les kfaces d’un poly`edre param´etrique P peuvent ˆetre exprim´ees sous forme matricielle :

P =     x1 . . . xp n1 . . . nj c l1 a1,1 . . . a1,p b1,1 . . . b1,q c1 .. . ... . .. ... ... . .. ... ... lk ak,1 . . . ak,p bk,1 . . . bk,q ck     Chaque ligne li correspond `a la contrainte suivante :

ai,1.x1+ · · · + ai,p.xp+ bi,1.n1+ · · · + bi,q.nq+ ci≥0

Un poly`edre poss`ede ´egalement une repr´esentation duale d´efinissant chaque point d’un poly`edre comme ´etant la somme de combinaisons de sommets, de lignes et de rayons. L’algorithme de Cher- nikova [120] permet de passer de la repr´esentation donn´ee dans la d´efinition 10 `a celle-ci dite des sommets. Polylib [145] et PPL [151] sont deux biblioth`eques poly´edriques permettant de manipuler ces deux repr´esentations dans R. ISL [96] est une biblioth`eque qui n’utilise pas la repr´esentation des sommets mais qui est uniquement dans Z, la syntaxe est proche de celle d’Omega [105].

4.2. Le mod`ele poly´edrique 87 Un poly`edre est convexe par d´efinition. Cependant, il est souvent utile de manipuler des formes g´eom´etriques non convexes. Celles-ci sont compos´ees d’une union de poly`edres (d´efinition 12) et disposent des mˆemes op´erateurs que des poly`edres.

D´efinition 12 (Domaine poly´edrique) Soit ~n un vecteur de param`etres, un domaine poly´edrique

D de dimension m est une union de n poly`edres d´efini par :

D= {~x ∈ Zm|Sn

k=1Ak~x+ Bk~n+~bk ≥ ~0}

4.2.2

Parties de code `a contrˆole statique (SCoP)

La majorit´e des travaux bas´es sur le mod`ele poly´edrique sont applicables `a une sous-classe de pro- grammes dite de SCoP1[54,200] (´egalement appel´ee ACL2). Initialement d´efini pour un programme

complet, le concept a ´et´e ´etendu `a des parties d’un programme. Une SCoP poss`ede les caract´eristiques suivantes :

• les instructions de contrˆole ne peuvent ˆetre que des boucles f or ou des instructions condition- nelles (pas de boucles while).

• les bornes des boucles et les conditions sont des fonction affines des indices de boucles et des param`etres du programme.

• les fonctions d’acc`es tableaux sont ´egalement des fonctions affines des indices de boucles et des param`etres du programme.

• l’incr´ement des boucles est unitaire.

Extraction de SCoP Si un programme n’est pas une SCoP dans son int´egralit´e, il est souvent possible d’en extraire des sous-parties qui le sont. Les indices de boucles ext´erieures aux SCoP sont des invariants et vus comme des param`etres. La couverture d’un programme par des SCoP peut ˆetre am´elior´ee par des transformations classiques comme la propagation de constantes ou la transformation de boucles while poss´edant une variable d’induction en boucles f or. D’autre part, une passe de normalisation de boucle permet toujours de traiter les pas non unitaires et n´egatifs. Les travaux de Girbal [70,71] ont montr´e l’importance et la fr´equence ´elev´ee de ces parties dans les programmes de calcul scientifique.

Domaine d’it´eration Un domaine d’it´eration est un poly`edre d´efinit dans un espace o`u chaque dimension correspond `a un indice de boucle. Un point de ce domaine est un vecteur d’it´eration positionnant de mani`ere unique les instances dynamiques des instructions de calcul englob´ees.

Par exemple, dans le code de la figure4.1achaque instance de l’instruction S est identifi´ee par un vecteur d’it´eration ~xS = hi, ji. Une instance de S est not´ee hS, ~xSi avec ~xS dans le domaine :

DS : {i, j|N ≥ i ≥ 1, M ≥ j ≥ 1}

La figure 4.1b repr´esente DS dans un espace bidimensionnel. Les contraintes de bornes des indices

d´efinissent la forme et la taille du poly`edre, mais celui-ci ne suffit pas `a mod´eliser un nid de boucles. En effet, dans le programme original, les instances d’une instruction sont ´evalu´ees s´equentiellement. La modification de cet ordre peut entraˆıner le non-respect des d´ependances de donn´ees.

1. Static Control Part 2. Affine Control Loop

88 Chapitre 4. Optimisation de code dans le mod`ele poly´edrique

Ordre lexicographique Un domaine d’it´eration est associ´e `a un parcours explicite appel´e ordre lexicographique (cf. fl`eches en pointill´es sur la figure4.1b). Le premier et dernier point ´evalu´e dans l’ordre lexicographique correspondent respectivement au minimum (lexmin) et au maximum lexi- cographique (lexmax) du poly`edre. Soit deux vecteurs d’it´eration ~x1 et ~x2 tels que le premier soit

lexicographiquement inf´erieur au second, on note :

~ x1≺ ~x2

Relˆachement du mod`ele poly´edrique Des travaux ´etendent le mod`ele poly´edrique aux pro- grammes dits irr´eguliers. Barthou [16] et Benabderrahmane [20] utilisent une approximation conser- vatrice surestimant les d´ependances de donn´ees. Cette politique permet d’´elargir la couverture du mod`ele poly´edrique `a des programmes dont le flot de contrˆole d´epend des donn´ees tout en empˆe- chant des transformations risquant de modifier la s´emantique. L’analyse d´ecrite par Gr¨oßlinger [78] s’int´eresse aux bornes, conditions et fonctions d’acc`es qui ne sont pas des fonctions affines.

4.2.3

Repr´esentation des d´ependances de donn´ees

Le mod`ele poly´edrique offre une analyse exacte des d´ependances de donn´ees. `A l’inverse des ana- lyses classiques, une d´ependance n’implique pas deux instructions, mais deux instances dynamiques d’instructions. Intuitivement, deux instances d’instructions seront d´ependantes si elles acc`edent au mˆeme ´el´ement d’un tableau. Les fonctions d’acc`es `a cet ´el´ement ´etant affines, il est possible de d´eter- miner de mani`ere exacte les conditions et les positions relatives des instances d´ependantes.

D´ependance dynamique Une d´ependance dynamique eS1→S2 exprime une d´ependance de donn´ee

entre une instance de S1et une instance de S2. Elle est associ´ee `a un poly`edre de d´ependance Peconte-

nant les conditions d’existence de la d´ependance et les ´equations positionnant l’instance productrice par rapport `a l’instance consommatrice d’une donn´ee. Le nombre de dimensions de Peest donn´e par

la relation suivante :

dim(Pe) = dim(~xS1) + dim(~xS2) + dim(~n) + 1

Graphe de d´ependances g´en´eralis´ees L’ensemble des instructions d’une SCoP et des d´epen- dances dynamiques peuvent ˆetre repr´esent´ees dans un graphe G(N, E) appel´e graphe de d´ependances g´en´eralis´ees ou PRDG3. Chaque nœud n ∈ N correspond `a une instruction et chaque lien indique une d´ependance dynamique entre deux instructions. Dans le cas d’une d´ependance entre deux ins- tances d’une mˆeme instruction, la source et la destination du lien sont donc identiques. Le graphe de d´ependances (cf. figure4.3) associ´e `a l’exemple pr´ec´edent fait ainsi apparaˆıtre deux d´ependances dynamiques qui ont pour source et destination des instances de la mˆeme instruction. Le poly`edre

Pe1 donne les conditions d’existence de la d´ependance et indique que pour une instance destination ~

xdest= hi, ji, l’instance source est ~xsource= hi, j − 1i.