Il est donc nécessaire d'opérer certaines transformations sémantiques des énoncés PEI pour obtenir un programme raffiné ayant une forme traduisible. Une fois l'énoncé transformé de manière à respecter les principes exposés ci-dessous, il est possible d'entamer un processus de transformation de nature syntaxique.
Equations
Seules les équations assimilables à des affectations sont traduisibles. Ces équations doivent ainsi ne faire apparaître qu'un seul identificateur de champ sur au moins un des membres de l'équation.
Ainsi, l'équation f :: X = g :: Y n'est-elle pas directement traduisible. Il faut auparavant rendre explicite X ou Y. Dans ce cas particulier, les règles de raffinement autorise à écrire, si f est inversible, X = (f-1 o g) :: Y.
Il n'est cependant pas toujours possible de trouver une stratégie permettant de rendre traduisible une équation. Il n'existe par exemple aucun moyen de raffiner de façon satisfaisante les équations du type X f = Y g lorsque f et g sont des fonctions non inversibles. Il faut alors admettre que l'énoncé contenant une telle équation ne pourra pas être traduit.
Cadencement des équations récurrentes
Il s'agit là d'un problème classique de la parallélisation
automatique : seules sont traduisibles les équations récurrentes
pour lesquelles il est possible de déterminer un cadencemnt des
calculs dans le temps. La solution consiste à trouver des fonctions
de cadencement et de placement. En PEI, cette transformation
se fait par un changement de base
appliqué à l'énoncé.
Cependant, un énoncé PEI n'est en général pas directement traduisible et on a même mis en évidence des énoncés qui ne pourront pas être traduits, tout cela pour des raisons sémantiques. D'autres complications font que même un énoncé PEI transformé de manière à être sémantiquement traduisible, en procédant comme décrit au chapitre précédent, n'est en général pas directement traduisible et il faut encore lui appliquer quelques transformations.
Fome traduisible
Le traducteur accepte en entrée le sous-ensemble des programmes
PEI constitués des équations ayant la
forme suivante :
Cet ensemble d'expressions restreint a été choisi pour le prototype d'une part parce qu'il est possible d'associer à chacune d'elle un ensemble d'instructions HPF, sans avoir besoin d'informations contextuelles supplémentaires, et, d'autre part, la traduction d'expression de champs de données plus complexes n'est de toute façon pas toujours possible.
Synopsis du fonctionnement du traducteur
Lorsqu'un énoncé PEI a atteind une forme traduisible, sa structure est semblable à celle d'un programme parallèle. Il ne reste alors plus qu'à traduire les équations une à une et à inférer les dimensions des variables parallèles utilisées.
Le mécanisme de la traduction peut être résumé
de la manière suivante :
Traduction HPF des équations PEI
L'équation PEI :
L'équation PEI :
L'équation X = h :: X exprime que l'application de la fonction identité sur le domaine des valeurs de référence de X ne modifie pas X, h ne pouvant être ici que la fonction identité. On peut déduire de cette équation les dimensions de la variable X utilisée dans le programme HPF. Cette forme d'équation n'est donc pas directement traduite en HPF mais est utilisée pour dimensionner le tableau utilisée en HPF pour la traduction du champ X.
Pour les équations de la forme Y
= h :: X, qui indiquent que toute valeur placée au point
z dans le champ Y est aussi la valeur placée au point h(z) dans
le champ X. Pour traduire cela, on peut soit determiner quel tableau est
calculé le premier lors de l'exécution du programme puis
recopier les valeurs, soit considérer que l'équation indique
comment sont placés les deux tableaux sont placés l'un par
rapport à l'autre sur la machine virtuelle. La première méthode
implique des communications lors de l'exécution, mais est l'unique
possibilité de traduction pour les langages data-parallèles
n'offrant pas la possibilité d'alignement. La deuxième méthode
est par contre bien adaptée à HPF, la directive align étant
tout à fait adaptée à cela. L'équation se traduit
donc ainsi :
Réduction géométrique combinée avec une opération fonctionnelle
Seules les fonctions XXX_SCATTER
de réduction des tableaux d'HPF permettent d'exprimer les réductions
PEI en toute généralité. Soit
l'équation PEI :
index : | Nm x [1...m]
((i1,...,im),k) |
N
ik |
On rencontre souvent dans les énoncés PEI une définition
récursive d'un champ de données sous la forme :
En outre, la difficulté de traduction de cette équation
repose sur le fait que la dimension des données sur lesquelles sont
effectuées les fonctions n'est pas explicite, alors qu'en HPF ,
on doit distinguer les cas pour lesquels l'opérateur a un nombre
différent d'arguments. Cela revient à décomposer l'union
des domaines de valeurs utilisés en sous-domaines sur lesquels le
nombre de valeurs superposées est constant.