Parallélisation d`un générateur de code

Transcription

Parallélisation d`un générateur de code
Équipe ICPS
Sujet Compilation - Génération de code de haut niveau
Sujet de TER
2013–2014
Parallélisation d’un générateur de code
Lieu
Équipe ICPS, ICube (UMR CNRS 7357)
Encadrant
Cédric Bastoul ([email protected])
Contexte
L’équipe Informatique et Calcul Parallèle Scientifique (ICPS) appartient au laboratoire ICube de l’université de Strasbourg. La préoccupation principale de cette équipe est de fournir les moyens théoriques et logiciels aux
développeurs d’applications pour optimiser leurs programmes ou permettre leur déploiement sur des architectures à large
échelle ou sur le cloud. Formée de 9 membres permanents, d’une dizaine de doctorants, post-doctorants ou ingénieurs,
ses membres sont fortement impliqués dans des collaborations européennes et internationales sur des projets scientifiques,
des projets de transfert technologique et des plateformes logicielles libres, incluant les compilateurs GCC, la bibliothèque
de calcul PolyLib ou le générateur de code de haut niveau CLooG. Durant ce TER, vous ferez partie de cette équipe et
vous travaillerez avec les chercheurs impliqués dans ces problématiques.
Sujet
L’équipe ICPS développe le générateur de code de haut niveau CLooG ∗ . Il s’agit d’un outil de compilation avancée
capable de transposer une représentation mathématique des programmes en un code compilable [1, 2, 3, 4]. Son utilité principale est de permettre aux compilateurs d’appliquer des transformations de code extrêmement agressives pour
optimiser les performances des programmes. Ce générateur est particulièrement répandu puisqu’il est utilisé comme bibliothèque à la fois par le compilateur GCC et par le compilateur LLVM. Il est installé par défaut dans la plupart des
distributions Linux. Les techniques développées dans cet outil ont une complexité algorithmique extrêmement élevée (au
pire de l’ordre de 3n opérations elles-mêmes exponentielles, n étant le nombre d’instructions). Bien que la complexité en
pratique soit très raisonnable, la performance du générateur de code reste importante : si on ne peut pas générer le code
correspondant à une optimisation en un temps donné, on doit abandonner cette optimisation.
Il s’agit dans ce TER d’améliorer les performances du générateur de code CLooG en le parallélisant pour tirer parti
des architectures multi-cœurs. En étudiant les bases théoriques de la génération de code de haut niveau [2, 3], on trouvera
les sources de parallélisme (dont on sait qu’elles sont importantes) dans l’algorithme de génération de code. L’outil CLooG
sera audité pour connaître ses défauts en terme parallélisation (on cherchera en particulier les parties non thread-safe).
Enfin on réalisera la parallélisation de ce logiciel via l’emploi de directives OpenMP et on étudiera l’impact de cette
évolution sur ses performances.
L’étudiant choisissant ce sujet devra être intéressé par les techniques de compilation avancées et le parallélisme. Des
compétences raisonnables en programmation C et en environnement Unix/Linux sont requises. Il n’est pas demandé
d’avoir une expérience en OpenMP (l’encadrant formera l’étudiant si besoin). Si le TER débouche sur un travail de
qualité, celui-ci sera intégré à CLooG et diffusé à large échelle (potentiellement toutes les distributions Linux), ce qui
devra être une source supplémentaire de motivation !
Référence clé (synthèse et critique de l’UE Initiation Recherche)
La référence clé à étudier et à présenter en UE Initiation Recherche est l’article détaillant l’algorithme de génération
de code [2].
∗. http://www.cloog.org
Références
[1] C. Ancourt and F. Irigoin. Scanning polyhedra with DO loops. In 3rd ACM SIGPLAN Symposium on Principles and
Practice of Parallel Programming, pages 39–50, June 1991.
[2] F. Quilleré, S. Rajopadhye, and D. Wilde. Generation of efficient nested loops from polyhedra. International Journal
of Parallel Programming, 28(5) :469–498, October 2000.
[3] Cédric Bastoul. Code generation in the polyhedral model is easier than you think. In PACT’13 IEEE International
Conference on Parallel Architecture and Compilation Techniques, pages 7–16, Juan-les-Pins, France, September 2004.
[4] Chun Chen. Polyhedra scanning revisited. In Proceedings of the 33rd ACM SIGPLAN conference on Programming
Language Design and Implementation, PLDI ’12, pages 499–508, Beijing, China, 2012. ACM.

Documents pareils