Génération dynamique de code pour l'optimisation énergétique. (Online Auto-Tuning for Performance and Energy through Micro-Architecture Dependent Code Generation)

Dans les systemes informatiques, la consommation energetique est devenue le facteur le plus limitant de la croissance de performance observee pendant les decennies precedentes. Consequemment, les paradigmes d'architectures d'ordinateur et de developpement logiciel doivent changer si nous voulons eviter une stagnation de la performance durant les decennies a venir.Dans ce nouveau scenario, des nouveaux designs architecturaux et micro-architecturaux peuvent offrir des possibilites d'ameliorer l'efficacite energetique des ordinateurs, grâce a la specialisation materielle, comme par exemple les configurations de cœurs heterogenes, des nouvelles unites de calcul et des accelerateurs. D'autre part, avec cette nouvelle tendance, le developpement logiciel devra faire face au manque de portabilite de la performance entre les materiels toujours en evolution et a l'ecart croissant entre la performance exploitee par les programmeurs et la performance maximale exploitable du materiel. Pour traiter ce probleme, la contribution de cette these est une methodologie et la preuve de concept d'un cadriciel d'auto-tuning a la volee pour les systemes embarques. Le cadriciel propose peut a la fois adapter du code a une micro-architecture inconnue avant la compilation et explorer des possibilites d'auto-tuning qui dependent des donnees d'entree d'un programme.Dans le but d'etudier la capacite de l'approche proposee a adapter du code a des differentes configurations micro-architecturales, j'ai developpe un cadriciel de simulation de processeurs heterogenes ARM avec execution dans l'ordre ou dans le desordre, base sur les simulateurs gem5 et McPAT. Les experimentations de validation ont demontre en moyenne des erreurs absolues temporels autour de 7 % compare aux ARM Cortex-A8 et A9, et une estimation relative d'energie et de performance a 6 % pres pour le benchmark Dhrystone 2.1 comparee a des CPUs Cortex-A7 et A15 (big.LITTLE). Les resultats de validation temporelle montrent que gem5 est beaucoup plus precis que les simulateurs similaires existants, dont les erreurs moyennes sont superieures a 15 %. Un composant important du cadriciel d'auto-tuning a la volee propose est un outil de generation dynamique de code, appele deGoal. Il definit un langage dedie dynamique et bas-niveau pour les noyaux de calcul. Pendant cette these, j'ai porte deGoal au jeu d'instructions ARM Thumb-2 et cree des nouvelles fonctionnalites pour l'auto-tuning a la volee. Une validation preliminaire dans des processeurs ARM ont montre que deGoal peut en moyenne generer du code machine avec une qualite equivalente ou superieure compare aux programmes de reference ecrits en C, et meme par rapport a du code vectorise a la main.La methodologie et la preuve de concept de l'auto-tuning a la volee dans des processeurs embarques ont ete developpees autour de deux applications basees sur noyau de calcul, extraits de la suite de benchmark PARSEC 3.0 et de sa version vectorisee a la main PARVEC.Dans l'application favorable, des accelerations de 1.26 et de 1.38 ont ete observees sur des cœurs reels et simules, respectivement, jusqu'a 1.79 et 2.53 (toutes les surcharges dynamiques incluses). J'ai aussi montre par la simulation que l'auto-tuning a la volee d'instructions SIMD aux cœurs d'execution dans l'ordre peut surpasser le code de reference vectorise execute par des cœurs d'execution dans le desordre similaires, avec une acceleration moyenne de 1.03 et une amelioration de l'efficacite energetique de 39 %. L'application defavorable a ete choisie pour montrer que l'approche proposee a une surcharge negligeable lorsque des versions de noyau plus performantes ne peuvent pas etre trouvees.En faisant tourner les deux applications sur les processeurs reels, la performance de l'auto-tuning a la volee est en moyenne seulement 6 % en dessous de la performance obtenue par la meilleure implementation de noyau trouvee statiquement.