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.