Français Anglais
Accueil Annuaire Plan du site
Accueil > Production scientifique > Thèses et habilitations
Production scientifique
Doctorat de

Doctorat
Equipe : Systèmes Parallèles

Adaptation automatique et semi-automatique des optimisations de programmes

Début le 01/10/2012
Direction : EISENBEIS, Christine
[Cédric BASTOUL]

Ecole doctorale : ED STIC 580
Etablissement d'inscription : Université Paris-Sud

Lieu de déroulement : LRI

Soutenue le 30/09/2016 devant le jury composé de :
Co-Directrice de thèse
Christine Eisenbeis, Directrice de recherche, Inria (Saclay - Île-de-France),

Co-Directeur de thèse
Cédric Bastoul, Professeur, Université de Strasbourg,

Rapporteurs :
-Erven Rohou, Directeur de recherche, Inria (Rennes - Bretagne Atlantique),
-Corinne Ancourt, Enseignant-chercheur, École nationale supérieure des mines de Paris,

Examinateurs :
-Patrick Carribault, Ingénieur-chercheur, CEA,
-Yannis Manoussakis, Professeur, Université Paris-Sud,

Activités de recherche :

Résumé :
Cette thèse porte sur l'adaptation automatique et semi-automatique
des optimisations de programmes
en utilisant le modèle polyédrique,
un modèle mathématique permettant de représenter
une certaine classe de programme.
Ces optimisations peuvent être
statiques, c'est-à-dire faites à la compilation, et
dynamiques, c'est-à-dire faites à l'exécution.
Une première approche automatique, statique et dynamique se concentre sur
l'exploration, la sélection, la combinaison et l'évaluation
de différentes versions issues du programme.
Celles-ci sont générées par le compilateur polyédrique
à partir du programme à optimiser afin d'exécuter
la version la plus pertinente au bon moment.
Une seconde approche semi-automatique et statique présente
les optimisations faites par le compilateur polyédrique
sous une forme compréhensible, rejouable et modifiable
par n'importe quel développeur
qui pourra alors raffiner l'optimisation
afin de l'adapter à son cas.

Les architectures matérielles offrent
une puissance de calcul de plus en plus élevée
pour une consommation d'énergie relative de plus en plus faible
mais deviennent de plus en plus complexes.
C'est le rôle du programmeur expert de prendre en compte
les différentes hiérarchies de mémoire et
les multiples niveaux de parallélisme
afin d'obtenir de bonnes performances.
Malheureusement, pour la grande majorité des développeurs,
il est difficile voire impossible, d'atteindre ces performances.
Si la rapidité d'exécution est vue comme une fonctionnalité alors,
dans de nombreux cas, celle-ci n'est pas toujours nécessaire.
Généralement, l'utilisateur a besoin d'une certaine performance
qui peut être éloignée des performances maximales.
Il est raisonnable de laisser cette tâche
aux outils automatiques ou semi-automatiques
accessibles par n'importe quel programmeur non expert
en techniques d'optimisation.

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.

Ces deux approches complémentaires contribuent à
l'élaboration d'optimisations automatiques et semi-automatiques plus robustes.
L'utilisation des versions interchangeables permet
d'exécuter la meilleure optimisation dynamiquement et automatiquement.
Pour les cas où le développeur désire plus de contrôle,
on offre un moyen simple d'interagir avec le compilateur polyédrique.
Le développeur peut alors profiter de l'analyse précise et
des transformations de code agressives du compilateur.