Adaptation automatique et semi-automatique des optimisations de programmes
Auteur / Autrice : | Lénaïc Bagnères |
Direction : | Christine Eisenbeis |
Type : | Thèse de doctorat |
Discipline(s) : | Informatique |
Date : | Soutenance le 30/09/2016 |
Etablissement(s) : | Université Paris-Saclay (ComUE) |
Ecole(s) doctorale(s) : | École doctorale Sciences et technologies de l'information et de la communication (Orsay, Essonne ; 2015-....) |
Partenaire(s) de recherche : | Laboratoire : Laboratoire de recherche en informatique (Orsay, Essonne ; 1998-2020) - Institut national de recherche en informatique et en automatique (France). Unité de recherche (Saclay, Ile-de-France) |
établissement opérateur d'inscription : Université Paris-Sud (1970-2019) | |
Jury : | Président / Présidente : Yannis Manoussakis |
Examinateurs / Examinatrices : Christine Eisenbeis, Yannis Manoussakis, Erven Rohou, Corinne Ancourt, Cédric Bastoul, Patrick Carribault | |
Rapporteurs / Rapporteuses : Erven Rohou, Corinne Ancourt |
Mots clés
Mots clés contrôlés
Mots clés libres
Résumé
Les compilateurs offrent un excellent compromis entre le temps de développement et les performances de l'application. Actuellement l'efficacité de leurs optimisations reste limitée lorsque les architectures cibles sont des multi-cœurs ou si les applications demandent des calculs intensifs. Il est difficile de prendre en compte les nombreuses configurations existantes et les nombreux paramètres inconnus à la compilation et donc disponibles uniquement pendant l'exécution. En se basant sur les techniques de compilation polyédrique, nous proposons deux solutions complémentaires pour contribuer au traitement de ces problèmes. Dans une première partie, nous présentons une technique automatique à la fois statique et dynamique permettant d'optimiser les boucles des programmes en utilisant les possibilités offertes par l'auto-tuning dynamique. Cette solution entièrement automatique explore de nombreuses versions et sélectionne les plus pertinentes à la compilation. Le choix de la version à exécuter se fait dynamiquement avec un faible surcoût grâce à la génération de versions interchangeables: un ensemble de transformations autorisant le passage d'une version à une autre du programme tout en faisant du calcul utile. Dans une seconde partie, nous offrons à l'utilisateur une nouvelle façon d'interagir avec le compilateur polyédrique. Afin de comprendre et de modifier les transformations faites par l'optimiseur, nous traduisons depuis la représentation polyédrique utilisée en interne n'importe quelle transformation de boucles impactant l’ordonnancement des itérations en une séquence de transformations syntaxiques équivalente. Celle-ci est compréhensible et modifiable par les programmeurs. En offrant la possibilité au développeur d'examiner, modifier, améliorer, rejouer et de construire des optimisations complexes avec ces outils de compilation semi-automatiques, nous ouvrons une boîte noire du compilateur: celle de la plateforme de compilation polyédrique.