• Aucun résultat trouvé

Règles de vérification : cas des références relatives

(a) order YA1 order YA2 A C order YA1 order YA2 B D (b) order YA1 order YA2 A C order YA1 order YB2 B D

FIG. 4.2 – (a) cohérence et (b) incohérence des directives order pour le graphe modulaire de la figure 4.1. La connexion incohérente relative aux order imbriqués est B(i, j − 1,t) → D(i, j,t).

et par deux boucles extérieures différentes, relativement aux axes de L, représente le cas le plus simple. En effet, il suffit dans ce cas d’appliquer la règle suivante :

Règle 1. Soit Fs(I,t) → Fd(I,t) (t= t) un ctin entre les fonctions de base Fs et Fd. On suppose que Fset Fdappartiennent à deux boucles extérieures différentes. Si la boucle extérieure contenant Fsest écrite avant celle qui contient Fd, alors la directive ctin est cohérente, sinon la directive ctin n’est pas cohérente.

La vérification de la cohérence est plus délicate lorsque les deux fonctions de base Fs et Fd se présentent dans une même boucle extérieure. Dans la prochaine section, nous donnons deux règles, qui permettent de déterminer la cohérence d’une directive ctin par rapport à un ensemble de directives order. Dans la section 4.3, on présente un algorithme de vérification général. Nous nous limiterons, dans ces deux prochaines sections, aux cas des références relatives. Les références absolues seront traitées par la suite.

4.2 Règles de vérification : cas des références relatives

Règle 2. Soit Fs(I,t) → Fd(I,t) une connexion entre deux fonctions de base contenues dans une boucle extérieure l∈ L∪ {t}, avec distance dl6= 0. Si dl< 0 (respectivement dl > 0) et la boucle l est ascendante (respectivement descendante), alors cette connexion est cohérente. De la même façon, si dl< 0 (respectivement dl> 0) et la boucle l est descendante (respectivement ascendante), alors cette connexion est incohérente.

Justification. Supposons que la boucle l soit ascendante. Considérons un point I de l’espace S et supposons que lIsoit sa composante sur l’axe l. Considérons également un point Ide l’espace Set supposons que lI soit sa composante sur l’axe l. Si l est la boucle extérieure, alors, au moment du calcul de I, l’ensemble des points de grille avec lI< lIà déjà été calculé, grâce au sens ascendant de la boucle. En effet, lorsque les boucles imbriquées calculent l’itération lI, toutes les instructions,

(a) order YA1 order YA2 A B 1 , 1 2 , 1 3 , 1 4 , 1 5 , 1 6 , 1 7 , 1 1 , 2 2 , 2 3 , 2 4 , 2 5 , 2 6 , 2 7 , 2 1 , 3 2 , 3 3 , 3 4 , 3 5 , 3 6 , 3 7 , 3 1 , 4 2 , 4 3 , 4 4 , 4 5 , 4 6 , 4 7 , 4 1 , 5 2 , 5 3 , 5 4 , 5 5 , 5 6 , 5 7 , 5 1 , 6 2 , 6 3 , 6 4 , 6 5 , 6 6 , 6 7 , 6 1 , 7 2 , 7 3 , 7 4 , 7 5 , 7 6 , 7 7 , 7 i1 i2 i3 i4 i5 i6 i7 j 1 j 2 j 3 j 4 j 5 j 6 j 7 (b) order YB2 order YB1 A B 1 , 1 2 , 1 3 , 1 4 , 1 5 , 1 6 , 1 7 , 1 1 , 2 2 , 2 3 , 2 4 , 2 5 , 2 6 , 2 7 , 2 1 , 3 2 , 3 3 , 3 4 , 3 5 , 3 6 , 3 7 , 3 1 , 4 2 , 4 3 , 4 4 , 4 5 , 4 6 , 4 7 , 4 1 , 5 2 , 5 3 , 5 4 , 5 5 , 5 6 , 5 7 , 5 1 , 6 2 , 6 3 , 6 4 , 6 5 , 6 6 , 6 7 , 6 1 , 7 2 , 7 3 , 7 4 , 7 5 , 7 6 , 7 7 , 7 i1 i2 i3 i4 i5 i6 i7 j 1 j 2 j 3 j 4 j 5 j 6 j 7

FIG. 4.3 – Parcours donné par deux directives order imbriquées et sa visualisation sur un espace de dimension 7× 7. Le point de grille I = (i, j) = (4,4) est le point de l’itération courante. La

partie de l’espace en gris et celle en blanc représentent respectivement les points de grille calculés et pas encore calculés. Les flèches sont des connexions cohérentes pour (a) et des connexions incohérentes pour (b).

qui correspondent à un vecteur d’itération I, avec une composante lI inférieure de lI, ont déjà été calculées par la boucle l. Si la distance dl est dl < 0, alors le vecteur d’itération I admet la composante lI = lI+ dl < lI, qui démontre la cohérence de la connexion. En conséquence, si

dl > 0, alors le module Fs(I,t) n’a pas encore été calculé et la connexion est incohérente. Ce

résultat est symétrique et ainsi valable aussi pour une boucle descendante.

La figure 4.3a illustre un parcours sur un espace 2D, où les fonctions de base A et B sont définies. Le point(i, j), encerclé dans la figure, se réfère au point de calcul courant. Les points de

grille calculés dans les itérations précédentes sont colorés en gris. Le reste de la grille (en blanc) représente les itérations qui ne sont pas encore calculées. Les flèches représentent des connexions cohérentes par rapport à ces directives order imbriquées. Il s’agit des connexions Fs(i − 1, j +

1,t) → Fd(I,t), Fs(i−1, j,t) → Fd(I,t), Fs(i−1, j −1,t) → Fd(I,t). Les trois éléments qui assurent

le calcul sont la boucle extérieure (l’axe i), le sens YA1 (ascendant) et le signe (-) de di, comme le résultat 2 le montre. A noter que Fset Fd peuvent être indistinctement A ou B3. La figure 4.3b illustre un autre exemple de traversée 2D avec une boucle extérieure j descendante.

4.2. RÈGLES DE VÉRIFICATION : CAS DES RÉFÉRENCES RELATIVES

Remarque : Ainsi, étant donné que la boucle la plus extérieure concerne la trajectoire tempo-relle, la règle 2 indique que si dt = t− t < 0 alors la directive ctin est cohérente quelles que soit

les directives order relatives aux axes des espaces de calcul. C’est pourquoi dans la suite nous considérerons uniquement le cas où t= t (dt= 0).

Règle 3. Étant donnée une boucle extérieure relative à un axe l∈ {i, j,k} associé à une directive

order. Supposons que Fs(I,t) → Fd(I,t) est une connexion entre deux fonctions de base contenues par cette boucle extérieure et avec une distance dl = 0. Pour tester la cohérence, nous devons supprimer la boucle extérieure et garder le reste de ses instructions (boucles et fonctions de base). Nous pouvons avoir deux cas pour les instructions restantes :

– Les deux fonctions de base sont intégrées dans la même nouvelle boucle extérieure, alors nous appliquons la règle 2 ou 3 récursivement.

– Les deux fonctions de base sont dans deux instructions différentes, on applique dans ce cas, la règle 1 (l’instruction qui contient Fsdoit précéder l’instruction qui contient Fd).

Justification. Dans le cas dl = 0 les fonctions de base Fset Fd sont calculées lors d’une même itération de la boucle suivant l’axe l. Or cette boucle exécute une ou plusieurs instructions qui sont soit le calcul d’une fonction de base, soit l’exécution d’une boucle (imbriquée dans la première). Ainsi, si les fonctions de base Fs et Fd sont calculées par une même boucle imbriquée dans la première, alors il faut vérifier la cohérence relative à cette seconde boucle, pour cela il faut lui appliquer la règle 2 ou 3. Par contre, si les fonctions de base de type Fs et Fd sont calculées par deux instructions différentes de la liste des instructions de la boucle l, c’est la règle 1 qui s’applique (l’instruction qui contient la fonction de base Fs doit être exécutée avant celle qui contient la

fonction de base Fd). Exemple 1 A(i, j-1, t) B(I, t) order YA1 order YA2 A B

On applique la règle 3 et, après avoir supprimé la boucle la plus extérieure t puis i (puisque dt= 0

et di= 0), on a :

order YA2 A B

Exemple 2

A(i, j+dj, t) B(I, t) avec dj = -1 ou 0 ou +1 order YA1

order YB2 A order YB2

B

On applique la règle 3 et après avoir supprimé la boucle la plus extérieure t puis i on a : order YB2

A order YB2

B

Puisque A et B sont contenues dans deux boucles extérieures différentes et que A précède B, la connexion est cohérente (règle 3). Pour le troisième exemple, la même connexion est incohérente :

order YA1 order YB2

B order YB2

A

Remarque : Comme nous l’avons signalé, le programme généré par YAO contient toujours une boucle extérieure relative aux pas de temps (la trajectoire) ; à l’intérieur de cette boucle, les instructions permettent de calculer toutes les fonctions de base à un même pas de temps. On doit donc commencer par vérifier la cohérence par rapport à cette boucle extérieure (temps). Etant donné que cette boucle (temps) est toujours ascendante et que les délais dt sont toujours≤ 0 dans

YAO, la vérification de la cohérence se réduit tout simplement à tester la valeur de dt. Ainsi, si une directive ctin vérifie dt 6= 0, alors elle est cohérente.