• Aucun résultat trouvé

Le format OpenScop

Dans le document The DART-Europe E-theses Portal (Page 33-36)

Informations sémantiques. Certaines transformations ne sont pas représentables dans le modèle polyédrique, par exemple, le déroulage de boucle et les annotations OpenMP permettant de paralléliser les bouclesfor. Pour contourner ce problème, des informations sémantiques peuvent être portées par les dimensions de sortie. Ces ajouts permettent de transporter des informations entre les différentes étapes de la compilation. Dans certains cas, on pourrait encoder les informations dans la représentation poly-édrique. Par exemple, si on révoque notre choix sur l’unicité des β-vecteurs, on pourrait exprimer du parallélisme avec deux β-vecteurs identiques. Un autre exemple : en dupliquant les instructions et en changeant le domaine, on pourrait exprimer un déroulage de boucle. Ces solutions restent hasardeuses car elles dépendent fortement du générateur de code. De plus elles complexifient les outils polyédriques.

Par exemple, le déroulage de boucle effectué en dupliquant les instructions quitte le modèle polyédrique classique lorsque le facteur de déroulage n’est pas un diviseur entier de la borne supérieure de l’indice de la boucle à dérouler. L’ajout des informations sémantiques sur les dimensions de sortie est donc la bonne solution. Par exemple, on peut qualifier les dimensions de sortie de parallèles, vectorisables, déroulées.

Pour ces exemples, ces informations sont destinées au générateur de code qui générera le code demandé.

Dans ce document, on ne s’intéresse qu’aux relations d’ordonnancement qui respectent la condition de validité globale.

2.2.4 Accès mémoire

Les relations d’accès terminent l’abstraction polyédrique des instructions : les accès aux variables et aux tableaux, en lecture et en écriture. Ces accès permettent de calculer précisément les dépendances entre les différentes instances de l’instruction. Plus la description des dépendances est précise, plus le compilateur aura la possibilité d’effectuer des transformations agressives.

Les dimensions de sortie d’une relation d’accès correspondent au nom de la variable ou du tableau auquel s’ajoute, dans le cas où c’est un tableau, aux différentes dimensions de ce tableau. Les dimensions d’entrée correspondent aux dimensions de sortie du domaine d’itération. Le nom de la variable ou du tableau est considéré comme une dimension et les variables sont considérées comme des tableaux sans dimension supplémentaire.

Par exemple, les relations suivantes correspondent aux accès mémoires de l’instruction S2 du code jacobi-2d-imper:

On définit le terme delégalité.

Légalité. Un ensemble de relations d’ordonnancement est légal par rapport à un autre ensemble de relations d’ordonnancement si le premier ensemble ordonnance les instances des instructions définies dans les domaines d’itération en respectant les dépendances définies dans le second ensemble. Les domaines des instructions sont les mêmes pour les deux ensembles de relations d’ordonnancement. Les relations d’accès sont nécessaires pour calculer les dépendances. Il ne faut pas confondre la légalité avec la validité.

2.3 Le format OpenScop

Avec ces différentes relations : la relation du domaine d’itération, la relation de l’ordonnancement des instances de l’instruction et les relations d’accès, on peut représenter une instruction dans le modèle polyédrique. La section suivante présente le formatOpenScop. Ce format d’échange permet d’encoder la représentation polyédrique d’un code source (contenant plusieurs instructions).

Chapitre2. La compilation polyédrique 2.3. Le format OpenScop La représentation polyédrique présentée peut être encodée au formatOpenScop7[29]. OpenScop per-met de stocker les informations minimales mais nécessaires pour construire une chaîne de compilation polyédrique complète.

Les services fournis par OpenScop sont à la fois pérennes, extensibles et universels.

Pérennes. OpenScop utilise uniquement des unions de relations qui permettent d’encoder les infor-mations nécessaires. Il s’agit du cœur du système, il est stable et il peut être facilement exporté vers d’autres formats commeScopLib(dépréciée) et isl.

Extensibles. OpenScop fournit un système d’extensions extensible et donc personnalisable.

Universels. OpenScop est un format mais pour faciliter son intégration, la bibliothèque OpenScop Library (osl) est disponible sous licence libre. osl est écrite en C qui est compatible avec de nombreux autres langages de programmation et n’a aucune dépendance obligatoire vers des bibliothèques externes.

osl est multiplateforme.

OpenScop est simple. Le format d’échange est pensé pour être très facilementparsable (lue par une machine). Pour un humain, c’est un peu verbeux mais la bibliothèque osl ajoute des commentaires pour mettre les équations et inéquations sous une forme facilement lisible.

1

<OpenScop>

2

# Language

3 C

4

# Context

5 CONTEXT

6 0 4 0 0 0 2

7

# Parameters are provided

8 1

9

<strings> T_STEPS N </strings>

(a) Début

Figure 2.7 – Extraits du SCoP utilisant le format OpenScop, extrait depuis le code source C jacobi-2d-impervenant des PolyBench/C 3.2 par Clan 0.7.1

Dans sa configuration minimale, OpenScop est composé de ces différents éléments permettant de dé-crire leScoP : le contexte, le langage du code source, les noms des paramètres, les instructions et des extensions. Le contexte est une relation décrivant les éventuelles contraintes sur les paramètres, Pour chaque instruction (statement en anglais), on a la relation décrivant le domaine d’itération, la relation décrivant l’ordonnancement des instances de l’instruction, les relations décrivant les accès mémoires et des extensions. Des exemples d’extensions du SCoP sont :scatnames, qui donne les noms des dimensions de sortie de l’ordonnancement,arrays, qui donne les noms des variables et des tableaux etcoordinates, qui donne les coordonnées du SCoP dans le code source d’origine. Chaque instruction a une extension bodydécrivant le corps de l’instruction. Ces extensions apparaissent par défaut mais, comme toutes les autres, restent optionnelles.

Des extraits du fichier OpenScop correspondant à la représentation polyédrique dejacobi-2d-imper se trouve dans la figure2.7. La version complète se trouve dans la figure B.3dans l’annexeB. Ce SCoP a été généré par osl. On remarque qu’il n’y a aucune ambiguïté lors du parsage : soit, on sait quel est l’élément à lire, soit, un entier permet de savoir si l’élément est présent. Par exemple, la ligne 42 indique la présence ou non des paramètres et la ligne 48 donne le nombre d’éléments à parser. Les extensions sont dans des balises inspirées de XML contenant le nom de l’extension comme celles des paramètres des lignes 43 à 45. Les commentaires commencent par le caractère#et finissent à la fin de la ligne courante.

De nombreux commentaires sont présents pour faciliter la lecture du SCoP par un humain.

7. https://github.com/periscop?tab=repositories

Chapitre2. La compilation polyédrique 2.3. Le format OpenScop

# Number of Statement Extensions

36

Figure 2.7 – Extraits du SCoP utilisant le format OpenScop, extrait depuis le code source C jacobi-2d-impervenant des PolyBench/C 3.2 par Clan 0.7.1

Dans ce format, une relation basique est décrite avec 6 entiers suivis par une matrice contenant uni-quement des entiers. Les deux premiers entiers donnent le nombre de lignes et le nombre de colonnes de la matrice, les troisièmes et quatrièmes entiers donnent le nombre de dimensions de sortie et le nombre de dimensions de sortie, l’entier suivant donne le nombre de dimensions locales et le dernier entier donne le nombre de paramètres. Chaque ligne correspond à une équation ou une inéquation. Si la première valeur est 0, il s’agit d’une équation (opérateur égal). Si c’est 1, il s’agit d’une inéquation (opérateur supérieur ou égal à 0). Ensuite viennent les coefficients des dimensions de sortie, puis ceux des dimensions d’entrée.

On finit avec les coefficients des paramètres et une constante. L’(in)équation est de la forme coefficients des dimensions de sortie × dimensions de sortie + coefficients des dimensions d’entrée × dimensions d’entrée +coefficients des dimensions locales × dimensions locales+ coefficients des paramètres× pa-ramètres+ constante opérateur 0. Un exemple, quelque peu intéressant, d’inéquation est à la ligne 143

Chapitre2. La compilation polyédrique 2.4. Extraction depuis un programme

Dans le document The DART-Europe E-theses Portal (Page 33-36)