• Aucun résultat trouvé

Impl´ ementation de la m´ ethode sur un exemple

exemple

Cette section pr´esente un exemple qui illustre notre m´ethode. Son contenu est une contribution du travail de th`ese de Pascal Sotin, encadr´e par Thomas Jensen et David Cachera, et ne doit donc pas ˆetre mis au cr´edit de l’auteur. Cependant, afin de faciliter la r´edaction de cette section, nous continuons `a utiliser la premi`ere personne du pluriel.

Nous proposons ici un langage imp´eratif simple ´equip´e d’op´erations de tableaux dont le coˆut d´epend de la taille du tableau en question. Les coˆuts sont compos´es de deux attributs : un attribut temps qui exprime le nombre de cycles n´ecessaires `

a la r´ealisation d’une op´eration, et un attribut ´energie qui exprime la puissance consomm´ee par cette op´eration. Un programme peut s’ex´ecuter sous diff´erents modes d’´energie, chacun de ces modes d´eterminant la puissance consomm´ee par op´eration. On supposera qu’il est possible de changer dynamiquement de mode. Grˆace `a une conversion sur les temps de transitions, les coˆuts ´energ´etiques sont exprim´es `a l’aide du dio¨ıde (Q, max, +).

3.6.1

Syntaxe

Notre langage est un langage imp´eratif simple et explicitement ´etiquet´e, ins- pir´e par le langage Simple d´efini par Min´e dans [Min04], et ´equip´e d’op´erations de manipulation de tableaux. On l’appelle ArraySimple, et on donne sa syntaxe en Figure 3.6.1.

Nous ne d´etaillons pas les constructions classiques du langage telles que if ou while, qui ont un comportement standard. La taille des tableaux peut ˆetre af-

expr ::= X X ∈ V

| − expr

| expr expr  ∈ {+, −, ×, /}

| length A A∈ A

| A[expr] A∈ A

test ::= expr ./ expr ./ ∈ {=, 6=, <, ≤}

| not test | test and test | test or test

inst ::= X ← expr X ∈ V

| if test {block} else {block}

| while pc1 test {block} pc1 ∈ L

| A[expr]← expr A∈ A

| apply op A A∈ A, op ∈ O

| setlength expr A A∈ A

| setmode M M ∈ M

block ::= pc1 inst; pc2 . . . inst pcn pc1. . . pcn ∈ L L est un ensemble fini d’´etiquettes de programme

V est un ensemble fini de variables scalaires A est un ensemble fini de variables de tableau O est un ensemble fini d’op´erations de tableau M est un ensemble fini de modes d’´energie.

fect´ee par l’instruction setlength et acc´ed´ee via l’op´eration length. En plus des op´erations classiques d’affectation des cellules des tableaux, les tableaux peuvent ˆ

etre manipul´es par des op´erateurs globaux via l’instruction apply instruction. Par exemple, on peut calculer l’´el´ement maximum d’un tableau, ou d’autres op´era- tions plus complexes telles que le tri ou la permutation. Ces op´erations seront consid´er´ees comme des primitives du langage, et seul leur comportement quanti- tatif sera d´ecrit. Enfin, l’instruction setmode permet de passer du mode d’´energie courant `a celui sp´ecifi´e.

3.6.2

S´emantique op´erationnelle quantitative

Nous d´efinissons une s´emantique op´erationnelle qui prend en compte les coˆuts des op´erations sur les tableaux. Cette s´emantique n´eglige les valeurs des cellules des tableaux et retient seulement la taille de ces tableaux.

La s´emantique des expressions et tests est donn´ee par une s´emantique collec- trice non-d´eterministe inspir´ee des travaux de Min´e [Min04]. Plus pr´ecis´ement, les environnements sont compos´es de fonctions des variables scalaires dans un ensemble de valeurs I (soit Z, Q ou R), et de fonctions de l’ensemble des variables de tableaux dans N, qui servent `a repr´esenter leur taille : E = V → I ∪ A → N. Nous notonsJeK la s´emantique de l’expression e, qui est une fonction associant des environnements `a des ensembles de valeurs num´eriques : JexprK : E → P (I) ∪ N. La s´emantique collectrice pour les instructions est not´ee {|.|} et est une fonction deP(E) dans lui-mˆeme. Par exemple, la s´emantique d’une affectation est d´efinie par {|X ← e|}R = {ρ[X 7→ v] | ρ ∈ R, v ∈JeKρ}.

Concentrons-nous sur le syst`eme de transition muni de l’aspect quantitatif de la s´emantique. Les ´etats sont compos´es d’un compteur de programme, d’un environnement et d’un mode d’´energie : formellement, nous avons σ =L×E ×M. Les transitions de la s´emantique op´erationnelle sont instrument´es par des coˆuts qui sont des couples dans N× Q, le premier ´el´ement comptant le temps (dans les cycles) et le second l’´energie par cycle, c.`a.d. la puissance.

Nous pr´esentons maintenant les r`egles d´efinissant les transitions qui impactent la consommation d’´energie. Les instructions sont munies de leur ´etiquette de programme initiale et finale. L’instruction setmode permet de changer le mode d’´energie courant, et coˆute cm(m, m0) qui est une paire d´ependant uniquement du

mode d’´energie pr´ec´edant l’instruction ainsi que du nouveau mode. pc setmode m0 pc0

(pc , ρ, m)cm(m,m0) (pc0, ρ, m0)

Le coˆut d’une instruction d’affectation d´epend du mode d’´energie. Plus pr´e- cis´ement, il est extrait d’une table associant chaque mode d’´energie `a une paire (temps, ´energie). Cette table poss`ede trois colonnes : la premi`ere qui d´ecrit le

mode, la deuxi`eme pour le temps (compt´e en cycles) et la derni`ere pour la puis- sance consomm´ee (en mWh par cycle). On acc`ede `a cette table via une fonc- tion lookup qui rend le couple (temps, puissance) associ´e au mode actuel. Dans l’exemple que nous d´eveloppons ici, nous utilisons cinq modes, variant de A `aE. Le mode A est le mode le plus lent mais aussi le plus ´econome en ´energie. Au contraire,E est le mode le plus rapide mais aussi le plus gourmand en puissance instantan´ee. Notons cependant que le modeE peut permettre de consommer glo- balement moins d’´energie que le A si l’on consid`ere l’op´eration en entier (temps × puissance instantan´ee). Nous pr´esentons ci-dessous un exemple de table que l’on peut utiliser pour calculer les coˆuts d’une affectation.

Ta =

A 7 1

B 4 1.5

E 2 4

Cette table se lit de la mani`ere suivante : dans le mode B, une op´eration d’af- fectation n´ecessite un temps de 4 cycles et consomme une ´energie de 1.5 mWh par cycle7. ´Etant donn´e la table T

a, la r`egle s´emantique pour l’affectation est la

suivante.

pc X ← expr pc0 ρ0 ∈ {|X ← expr|}{ρ} ce = lookup(Ta, m)

(pc , ρ, m)ce (pc0, ρ0, m)

Nous pr´esentons maintenant la r`egle de transition d’une op´eration globale sur les tableaux. Les coˆuts de ce genre d’op´eration sont aussi inf´er´es d’une table et sont d´ependants de la taille du tableau sur lequel l’op´eration est effectu´ee.

pc apply op A pc0 size = ρ(A) ca= lookup(JopKc(size), m) (pc , ρ, m)ca (pc0, ρ, m)

La s´emantique de coˆut d’une op´eration de tableaux est not´ee entre crochets J.Kc

et associe `a la variable de taille n une table o`u la consommation d’´energie est d´ependante de n. Notons que le nombre de cycles doit rester constant dans ce mod`ele (ce point sera discut´e plus loin).

En guise d’illustration, la table suivante donne le coˆut de calcul associ´e `a l’op´erateur read.

JreadKc= λn.

B 5 n

D 3 2 + 3n

Lecture de n entr´ees et stockage de celles-ci dans un tableau.

7. Ces quantit´es sont donn´ees ici dans un but d’illustration et ne refl`etent pas des donn´ees issues d’ex´ecutions r´eelles.

Les tailles des tableaux sont d´etermin´ees par une analyse statique utilisant des domaines num´eriques abstraits. Une telle analyse renverra le r´esultat > si elle ne parvient pas `a borner la taille d’un tableau. Un tel r´esultat sera aussi renvoy´e si la taille d’un tableau est exprim´e par une expression qui ne peut pas ˆetre d´etermin´ee de mani`ere pr´ecise dans le domaine num´erique abstrait consid´er´e.

3.6.3

Abstraction

L’abstraction utilis´ee sur notre langage est bas´ee sur une analyse d´ej`a exis- tante, dont le domaine num´erique abstrait est l’ensemble des poly`edres. Plus pr´ecis´ement, nous utilisons l’analyseur Concurinterproc [AJL]. On obtient alors, pour tout couple (compteur de programme, mode), un poly`edre convexe qui repr´e- sente une sur-approximation relationnelle des valeurs des variables du programme, chaque dimension du poly`edre repr´esentant une variable. Rappelons maintenant que le coˆut des op´erations de tableaux d´epend de la taille des tableaux. L’envi- ronnement abstrait pr´ec´edent nous permet d’obtenir une sur-approximation de la taille d’un tableau A. Pour ce faire, nous projetons le poly`edre sur la dimension correspondant `a la variable A, obtenant ainsi un intervalle [a, b] contenant la taille de A. Le calcul du coˆut des op´erations sur A est effectu´e `a l’aide de la valeur b. Ce proc´ed´e est correct d`es lors que nous consid´erons des op´erations de tableaux dont le coˆut croˆıt avec la taille, ce que nous supposons dor´enavant.

Rappelons que nous souhaitons calculer un coˆut long-run pour un programme du langage ArraySimple. Jusqu’ici, les coˆuts ont ´et´e repr´esent´es par deux com- posants : le premier est un entier naturel qui exprime le nombre de cycles que n´ecessite l’instruction, le second repr´esente l’´energie consomm´ee par cycle. Afin de passer `a une repr´esentation de coˆuts avec une unique composante, nous proc´e- dons comme suit : pour toute transition requ´erant n cycles et de coˆut w (coˆut par cycle), nous cr´eons un chemin de longueur n dont chaque transition est ´etiquet´ee uniquement par w, vu comme un coˆut ind´ependant du temps.

3.6.4

R´esultats exp´erimentaux

L’abstraction et les calculs du coˆut long-run sont effectu´es en suivant trois ´

etapes : premi`erement, l’outil Concurinterproc est utilis´e pour calculer des ap- proximations poly´edriques, ce qui permet de borner les tailles des tableaux. Les ´

etats abstraits correspondent `a des couples de L × M. On les ´enum`ere et on ne retient que les ´etats d’int´erˆet, c.`a.d. ceux qui sont accessibles depuis les ´etats ini- tiaux. Dans un deuxi`eme temps, une matrice est construite, index´ee par les ´etats abstraits, et compos´ee de valeurs qui sont d´etermin´ees par les tables de coˆut et l’approximation du coˆut inf´er´e par l’analyse poly´edrique. Cette ´etape a ´et´e impl´e- ment´ee en OCaml. La troisi`eme ´etape consiste `a calculer le coˆut long-run. Ceci

est r´ealis´e avec l’aide de la librairie max-plus de Scilab, qui permet de calculer le coˆut long-run efficacement par utilisation de matrices creuses et de l’algorithme de calcul de valeur propre d’Howard [CTCG+98]. Cette utilisation nous a permis

des calculs pour un ensemble d’´etats contenant jusqu’`a 20k ´etats.