• Aucun résultat trouvé

F2 F1 F3 0,+1 1,+ 1 1,0 F4 0,0 0 , + 1

FIG. 5.1 – Exemple de GDR avec quatre

fonctions de base (F1, F2, F3et F4) rattachées à un espace à 2 dimensions et 4 ctin.

F2 F1 F3 0,0 F4 ,0 ,+ 0 , + 0,+ FIG. 5.2 – GDR simplifié déduit du GDR de la figure 5.1 en supprimant toutes les dis-tances et en ne laissant que leurs signes.

qui lui est associé est appelé par la directive order. L’ensemble d’instructions d’une fonction de

base est indivisible, ce qui signifie que l’application YAO exécute toutes les instructions dans une

même étape. Le graphe modulaire est très similaire à un graphe appelé dans la littérature Graphe

de Dépendance Etendu (GDE) [Legrand et Robert, 2003, Darte et al., 2000]. Un module Fp(I) est

l’équivalent d’une opération3 du GDE. En général le GDE, comme pour le graphe modulaire, ne

peut pas être généré au moment de la compilation, car la génération de l’ensemble du graphe est trop coûteuse (proportionnelle au nombre de Fp(I), donc proportionnelle à l’espace de calcul).

En plus, ce graphe n’est pas nécessaire pour la génération automatique que nous voulons réaliser. L’analyse du GDE peut être faite par le biais d’un plus petit multigraphe orienté4, en général cy-clique, qui a comme sommets les fonctions de base Fp. Ce multigraphe correspond au Graphe de

Dépendance Réduit (GDR) [Legrand et Robert, 2003, Darte et al., 2000] de la théorie de la

compi-lation et la génération automatique de code parallèle dans les boucles imbriquées. Classiquement les sommets du GDR sont des instructions, et non leurs instances. Du point de vue du GDR de YAO, les instructions du GDR classique sont les fonctions de base Fp, c’est-à-dire des macro-instructions. Dans ce graphe YAO, il y a un arc de Fs à Fd si un ctin est défini entre ces deux

fonctions de base et l’arc est valué par le vecteur de distance du ctin. La figure 5.1 présente un

exemple de GDR. Puisque, dans cet exemple, la dimension de l’espace est 2, les arcs sont valués par(di, dj), ce qui indique que la fonction de base destination, au point (i, j), prend ses entrées à

partir du module source au point(i + di, j + dj), avec di, dj∈ Z. Dans le reste du manuscrit, nous

avons uniquement besoin des signes des distances dl, l∈ {i, j,k}, donc on ne retient que le signe (−,+) si dl6= 0 et 0 si dl= 05. Cette simplification est montrée en figure 5.2.

5.2 Analyse structurelle du GDR

Le graphe modulaire, comme son homologue le GDE, est sans circuit (DAG). En utilisant le

GDR au lieu du graphe modulaire, on perd la propriété acyclique, comme le montre l’exemple

5.3. Le GDR contient, en général, des circuits et des boucles ({F1, F2, F3}, {F6, F7}, {F4}, {F5} de

3Une opération dans la littérature est l’instance d’une instruction. 4Un multigraphe est un graphe avec des arcs parallèles multiples.

0,0

F

-,- 0,- -,-0,0 0 , + + , + 1

F

2

F

3

F

6

F

7 + , +

F

4

-,-F

5 - , +

FIG. 5.3 – GDR avec des circuits et des boucles.

X

- , +

X

X

1,2,3

X

-,- -,-6,7 4 5

FIG. 5.4 – GDRr : réduction du GDR de la figure 5.3. X1,2,3signifie que la réduction a impliqué les fonctions de base F1, F2et F3.

l’exemple). La décomposition du graphe en Composantes Fortement Connexes (CFC) permet de localiser l’ensemble des circuits du graphe GDR. La caractérisation de ces CFC se fait par le biais de la relation binaire

R

qui est définie par :

Définition 2. Un couple de fonctions de base Fpet Fqsont en relation (Fp

R

Fq) si et seulement si il existe un circuit dans le GDR qui contient les deux sommets Fpet Fq.

Il est facile de voir que cette relation est une relation d’équivalence (en supposant la réflexivité), elle partitionne l’ensemble des sommets du GDR (les fonctions de base) en classes d’équivalence qui seront appelées les CFC du graphe. Le GDR peut contenir plusieurs CFC ; s’il n’en contient qu’une, il sera dit fortement connexe. Par définition, les CFC captent tous les circuits du GDR ; en effet, chaque circuit est inclus dans une et une seule CFC.

Comme nous l’avons signalé, les directives order possibles se décomposent, en général, en plusieurs blocs qui réalisent ainsi une partition de l’ensemble des fonctions de base en N sous-ensembles disjoints X1, X2, . . . , XN. On pourra définir le multigraphe réduit (du GDR) qui corres-pond à cette partition. Il suffit pour cela de considérer le multigraphe ayant N sommets, chaque sommet correspondant à un sous-ensemble de la partition, et de considérer uniquement les arcs du GDR ayant les deux extrémités dans deux sous-ensembles distincts. On notera ce graphe réduit

GDRr. Le graphe de la figure 5.4 est la réduction du GDR de la figure 5.3 lorsque l’on considère la partition définie par les CFC. Le résultat est un DAG avec 4 nœuds, chaque nœud représente une CFC. De manière plus générale, il est facile de démontrer le résultat suivant :

5.2. ANALYSE STRUCTURELLE DU GDR

Résultat 1. Le GDRr, associé à un partition X1, X2, . . . , XN, est sans circuit si et seulement si chaque CFC du GDR est incluse entièrement dans l’un des sous-ensembles de la partition.

Lorsque le GDRrest sans circuit, il est possible de choisir un ordre topologique et de définir ainsi un ordre partiel entre les sous-ensembles Xide la partition.

Nous présentons dans la suite un résultat qui montre comment la décomposition en CFC porte une information structurelle intrinsèque utile pour la génération des order.

Nous supposons que l’on dispose de directives order valables et permettant de parcourir le graphe modulaire défini par les directives ctin. On suppose que ces directives order se présentent sous la forme d’une suite de blocs, chacun étant caractérisé par une boucle extérieure relative à un axe de l’espace. Ces blocs partitionnent l’ensemble des fonctions de base en sous-ensembles disjoints. Résultat 2. Soit le GDR composé par l’ensemble des m fonctions de base{Fp, p = 1, . . . , m}. Si X⊂ {Fp, p = 1, . . . , q} avec q ≤ m est une CFC du GDR, alors toutes les fonctions de base de X sont liées à un même espace Sxet doivent appartenir à un même bloc de directives order que l’on caractérise par l’axe de sa boucle extérieure, que l’on note lX ∈ {i, j,k}.

Démonstration. Soit Fpi et Fpj deux fonctions de base du CFC X , alors, par définition, Fpi et Fpj sont situées dans un même circuit Fp1, . . . , Fpq du GDR. On note li et lj les deux blocs order, qui contiennent respectivement Fpiet Fpj. Si nous parcourons le circuit en sens inverse, le prédécesseur

Fp|i−1| 6 de Fpi, doit appartenir à un bloc qui est, soit le même, soit celui qui précède li, car sinon le calcul de la fonction Fpi ne peut se faire7. D’autre part, la définition de la directive ctin nous permet aussi d’affirmer que l’espace Spi, associé à la fonction de base Fpi, est inclus dans l’espace

Sp|i−1|associé à Fp|i−1|(Sp|i−1|⊂ Spi). En partant de Fp|i−1|on tire aussi que le bloc qui contient Fp|i−2| doit être égal à ou précéder celui qui contient Fp|i−1| et que Sp|i−2|⊂ Sp|i−1|. Ainsi, en répétant cette descente dans le circuit, on arrive à Fpj avec la condition que le bloc lj est égal à ou précède le bloc liet que Spj ⊂ Spi. Si nous reprenons le raisonnement précédent en circulant en sens opposé, à partir de Fpj le long du circuit, on arrive à la conclusion que le bloc li est égal à ou précède le bloc ljet que Spi ⊂ Spj. De ces deux résultats on tire alors que nécessairement les deux blocs liet

lj sont confondus et que Spi = Spj. En conclusion, pour une fonction de base Fpi de la CFC X et pour toute fonction de base Fpj de X , Fpj est située dans le bloc liet Spi = Spj; ce qui démontre le résultat.

L’exemple 5.3 est composé de deux circuits{F1, F2, F3} et {F6, F7}. Le résultat 2 affirme que

les fonctions de base{F1, F2, F3} doivent appartenir à une même boucle extérieure, comme aussi

les fonctions de base{F6, F7}. Les fonctions de base faisant partie des deux circuits sont rattachées

à deux espaces qui sont éventuellement égaux. Cette information est utile pour le processus de génération des directives order.

6| | est l’opérateur module, |i − 1| = i − 1 mod q.

7Autrement dit, la boucle extérieure qui contient Fp|i−1| doit être soit la même, soit elle doit précéder la boucle extérieure qui contient Fpi. Ceci découle des règles de test de la cohérence que nous avons présentées au chapitre précédent.