• Aucun résultat trouvé

S´election et ordonnancement affine d’instructions sp´ecialis´ees

6.3 Formulation du probl`eme

6.3.2 S´election et ordonnancement affine d’instructions sp´ecialis´ees

La plupart des approches de s´election d’instructions sp´ecialis´ees s’appuient sur un graphe acy- clique (DAG) issu d’un bloc de base de la repr´esentation interm´ediaire du compilateur. Dans cette repr´esentation, les nœuds sont des op´erations de calcul support´ees par le processeur. S´electionner une instruction sp´ecialis´ee consiste alors `a s´electionner une occurrence d’un motif de calcul dans le graphe de l’application. Il s’en suit que l’ensemble des nœuds qui y sont contenus est alors ex´ecut´e sur l’extension mat´erielle du processeur. Le PRDG fournit beaucoup plus d’informations qu’un simple DAG : chaque nœud est associ´e `a un domaine poly´edrique de d´efinition et les liens identifient les instructions produisant les donn´ees ainsi que leurs positions dans l’espace d’it´eration. L’expressivit´e du PRDG n´ecessite cependant de faire la distinction entre la notion de motif et celle d’instruction sp´ecialis´ee.

Dans notre approche, nous consid´erons qu’une occurrence de motif sera mise œuvre par un ma- crobloc mat´eriel (cf. figure 6.4) contenant le chemin de donn´ees d’une ou plusieurs instructions sp´ecialis´ees communiquant entre elles par l’interm´ediaire de m´emoires embarqu´ees dans le macrobloc. De plus, un des objectifs de l’approche est de s´electionner des instructions sp´ecialis´ees vectorisables. Nous chercherons donc ´egalement `a d´eterminer un ordonnancement affine respectant cette contrainte. 6.3.2.1 S´election d’instruction sp´ecialis´ee dans un PRDG

Un motif dans un PRDG est constitu´e de nœuds pouvant ˆetre d´efinis sur des domaines d’it´era- tions diff´erents, ils n’auront alors pas les mˆemes points dans l’espace multidimensionnel de leurs nids

132 Chapitre 6. Espace conjoint de sp´ecialisation et d’optimisation de code File de registres Mémoire principale UAL Processeur Extension ctrl + + + macrobloc 1 mem ctrl macrobloc 2 * + + IS2 IS3 IS1 @gen

Figure 6.4 – Sch´ema fonctionnel d’un processeur coupl´e `a une extension comportant les compo- sants mat´eriels de deux macroblocs. Le deuxi`eme macrobloc utilise une m´emoire pour enregistrer des r´esultats interm´ediaires des instructions sp´ecialis´ees IS1 ou IS2.

de boucles respectifs. De plus, les liens entre chacun des nœuds d’un motif repr´esentent une d´epen- dance de donn´ees dont la source et la destination sont susceptibles d’ˆetre ex´ecut´ees `a des it´erations diff´erentes.

Dans ce contexte, un motif est susceptible de ne pas correspondre `a une unique instruction sp´ecia- lis´ee. En effet, si l’on choisit de regrouper, par exemple, la multiplication du dernier nid de boucles du triple produit matriciel (cf. figure 6.3) avec l’addition du second, la d´ependance de donn´ees indique que l’it´eration source est hi, k, N −1i. Il ne sera donc pas possible de regrouper ces deux nœuds en une seule instruction sp´ecialis´ee puisqu’une donn´ee produite par l’addition ne sera utilisable qu’`a la derni`ere it´eration de k.

Une premi`ere approche envisageable est de consid´erer uniquement les occurrences de motifs dont toutes les d´ependances de donn´ees sont directes et totales. Ainsi, de mˆeme que pour un DAG, une oc- currence de motif identifiera une unique instruction sp´ecialis´ee. Cependant, cette approche ne cherche pas `a transformer le code original pour y faire apparaˆıtre de nouvelles instructions sp´ecialis´ees et on retombe alors sur les travers des techniques existantes puisqu’on ne s´electionnera alors principalement que des instructions sp´ecialis´ees contenues dans le mˆeme bloc de base.

D’autre part, un des int´erˆets du PRDG est de fournir une connaissance exacte des it´erations o`u sont produites les donn´ees. Cette information offre des possibilit´es tr`es int´eressantes quant au d´eport de d´ependances de donn´ees dans des ressources de m´emorisation (e.g., registres ou m´emoires) embarqu´ees sur l’extension mat´erielle. Cependant, il n’est ´evidemment pas raisonnable de mat´erialiser toutes les d´ependances d’un PRDG comme des m´emoires de l’extension. Un choix explicite des d´ependances m´emoris´ees sur l’extension constitue un autre param`etre d’optimisation difficile `a ´evaluer et complique consid´erablement le probl`eme.

La solution que nous adoptons consiste `a consid´erer qu’une occurrence de motif est une zone de calcul et de m´emorisation int´egralement d´eport´ee sur l’extension mat´erielle.

`

A la diff´erence de l’approche pr´ec´edente, cette zone peut ´eventuellement contenir des d´ependances pour lesquelles les it´erations de la source et de la destination sont diff´erentes. Dans ce contexte, une occurrence de motif contient potentiellement plusieurs instructions sp´ecialis´ees (d´efinition 3). Une d´ependance de donn´ees indirecte, interne `a l’occurrence, y utilisera alors directement une m´emoire de

6.3. Formulation du probl`eme 133 l’extension et ´evitera une communication coˆuteuse avec le processeur et sa hi´erarchie m´emoire. D´efinition 3 (Instruction sp´ecialis´ee atomique) Soit G(N, E) un PRDG. Une instruction sp´e- cialis´ee est constitu´ee d’un ensemble de nœuds I ⊂ N dont les domaines de d´efinitions sont identiques et qui sont reli´es uniquement par des d´ependances directes.

La s´election d’une occurrence de motif r´epond `a la fois au probl`eme de partitionnement des nœuds et `a celui du choix des d´ependances d´eport´ees sur les m´emoires de l’extension. En effet, seules les occurrences de motifs de taille unitaire sont ex´ecut´ees sur le processeur, les autres constituent des ensembles d’instructions sp´ecialis´ees. De plus, les donn´ees de toutes les d´ependances non directes d’une occurrence sont m´emoris´ees sur l’extension. R´eciproquement, toutes les d´ependances sortantes d’une occurrence de motif n’utilisent pas la m´emoire de l’extension, les donn´ees produites sont communiqu´ees au processeur.

Afin d’´eviter une confusion entre la notion de motif d’un DAG et celle d’un PRDG, une occurrence de motif dans un PRDG est appel´ee macrobloc (d´efinition4).

D´efinition 4 (Macrobloc sp´ecifique) Soit G(N, E) un PRDG et P une biblioth`eque de motifs. Un macrobloc sp´ecifique est une instance M d’un motif Pk ∈ P dans G ex´ecut´e int´egralement sur

l’extension mat´erielle. Il est constitu´e d’un ensemble d’instructions sp´ecialis´ees atomiques reli´ees par des d´ependances n´ecessitant une m´emorisation.

6.3.2.2 Ordonnancement affine des instructions sp´ecialis´ees

La repr´esentation fine du PRDG nous permet d’identifier des instructions sp´ecialis´ees qui se situent pourtant dans des boucles diff´erentes. La figure6.5illustre un exemple o`u les nids de boucles peuvent ˆetre fusionn´es pour d´etecter une instruction sp´ecialis´ee vectorisable. En effet, si l’on dispose d’un motif contenant trois additions, l’int´egralit´e du PRDG peut ˆetre couverte par un seul macrobloc ne contenant qu’une unique instruction sp´ecialis´ee puisque toutes les d´ependances de donn´ees sont directes. De plus, si l’on consid`ere que seul le tableau G est utile (liveout), l’instruction sp´ecialis´ee s´electionn´ee ´elimine toute m´emorisation temporaire inutile dans les tableaux E et F . Si dans cet exemple, il est ´evident que le code source aurait pu ˆetre optimis´e (en fusionnant les boucles et les calculs), d’autres cas sont beaucoup plus difficiles `a d´etecter et `a optimiser en vue d’une approche d’extension de jeu d’instructions.

Un des objectifs de notre approche est d’identifier des macroblocs qui respectent des contraintes sp´ecifiques. En effet, les instructions sp´ecialis´ees doivent ˆetre vectorisables et l’on souhaite ´egalement avoir la possibilit´e d’ajouter des contraintes suppl´ementaires (i.e. limiter la taille des m´emoires utilis´ees pour temporiser les donn´ees produites dans chaque macrobloc). Les op´erations qui ne peuvent ˆetre couvertes par des macroblocs respectant toutes ces contraintes sont ex´ecut´ees sur le processeur. Elles pourront n´eanmoins ˆetre la cible d’un flot standard de sp´ecialisation, analysant chaque bloc de base du code source reg´en´er´e `a partir du PRDG couvert.

Naturellement, le respect de toutes ces contraintes n´ecessite souvent de transformer le code original d’un programme. Les ordonnancements affines nous permettent d’explorer l’espace des transforma- tions de boucles de mani`ere `a faire apparaˆıtre des macroblocs respectant `a la fois les contraintes de l´egalit´e et les contraintes additionnelles. Cependant, la s´election et l’ordonnancement de diff´erents

134 Chapitre 6. Espace conjoint de sp´ecialisation et d’optimisation de code 1 for(i=0;i<N;i++){

2 for(j=0;j<N;j++){

3 E[i][j] = A[i][j] + B[i][j];

4 }

5 }

6 for(i=0;i<N;i++){ 7 for(j=0;j<N;j++){

8 F[i][j] = C[i][j] + D[i][j];

9 }

10 }

11 for(i=0;i<N;i++){ 12 for(j=0;j<N;j++){

13 //G: liveout array

14 G[i][j] = E[i][j] + F[i][j];

15 } 16 } + + +

�i, j�

�i, j�

Figure 6.5 – Calcul de la somme de quatre matrices : G = A + B + C + D. Il est ´evident ici que les nids de boucles peuvent ˆetre fusionn´es. La s´election et l’ordonnancement d’un macrobloc permettent d’identifier une unique instruction sp´ecialis´ee vectorisable.

macroblocs peuvent ˆetre exclusifs. Le cas le plus ´evident est quand un mˆeme nœud est couvert par deux macroblocs potentiels : un seul macrobloc sera s´electionn´e. Deux macroblocs disjoints peuvent ´egalement ˆetre exclusifs. Dans ce cas, la s´election du premier macrobloc imposera des contraintes sur l’ordonnancement global du PRDG qui ne pourront ˆetre satisfaites par le second.

Nous proposons d’utiliser les r´esultats de l’ordonnancement affine modulaire d’un r´eseau de proces- sus (cf. section6.2), pour ´enoncer dans un cadre unifi´e (programmation par contraintes), un probl`eme conjoint de couverture et d’ordonnancement du PRDG. Le principe est d’assimiler chaque macrobloc `a un processus. Les contraintes ´evoqu´ees pr´ec´edemment sont alors exprim´ees de mani`ere modulaire et ne d´ependent que des coefficients d’ordonnancement des communications externes du macrobloc. La modularit´e des contraintes de chaque macrobloc est n´ecessaire `a la gestion de leurs ´eventuelles relations d’exclusivit´e dans la couverture et l’ordonnancement du PRDG. Ainsi, si un macrobloc n’est pas s´electionn´e, ses contraintes d’ordonnancement n’ont pas `a ˆetre respect´ees. R´eciproquement, si les contraintes d’ordonnancement d’un macrobloc ne sont pas respect´ees alors il ne sera pas s´electionn´e dans la couverture du PRDG. L’algorithme conjoint d’ordonnancement et de couverture est d´etaill´e dans lasection 6.4. Cet algorithme consiste principalement `a r´esoudre un probl`eme de satisfaction de contraintes mˆelant les contraintes non lin´eaires de couverture d’un graphe (cf.sous-section 3.3.1) au probl`eme d’ordonnancement affine structur´e.