Dans le cadre des séminaires de l’axe méthodes et outils du GdR SOC2 et du groupe CLAP du GdR GPL, nous organisons une journée commune d’introduction à LLVM, intitulée LLVM pour les nuls. Elle sera composée d’une introduction au framework de compilation LLVM, suivie de 3 présentations de travaux basés sur LLVM. Voici le programme et les infos de connexion :
Vendredi 1 Avril 2022, 14h - 17h heure de Paris
Lien vers les présentations enregistrées :
https://www.youtube.com/watch?v=UPD3tTwRP34&list=PLmGjWuyn2GtRUeEWCm2CtY7ZpRJu560Pw
Le compte-rendu est disponible ici.
Programme :
- 14h00 - 14h30 : LLVM : un framework de compilation, mais pas que...
- 14h30 - 14h45 : Échanges et questions
- 14h45 - 15h15 : MemorySSA : Représentation des flux de données en mémoire
- 15h15 - 15h45 : Analyses statiques pour l’optimisation et la vérification des applications parallèles
- 15h45 - 16h15 : instrumentation de programmes pour l'analyse de performances
- 16h15 - 16h45 : Échanges et questions
Le projet LLVM a été présenté pour la première fois en 2004 comme un framework de compilation, et son succès ne se dément pas depuis, en grande partie grâce à son architecture modulaire qui facilite son extension. Cette première présentation vous emmènera pour une visite guidée de cette architecture et des principaux outils ou sous-projets présents dans le dépôt officiel. Nous aborderons ensuite les fondamentaux du cœur du projet, c'est-à-dire son optimiseur : sa représentation interne (la LLVM IR) et le concept de passe, et nous verrons comment rajouter notre propre passe.
Une des forces de l'IR LLVM réside dans sa représentation des résultats des instructions sous forme SSA, ce qui permet de représenter le flux des données scalaires de manière très précise. Ce modèle ne prend toutefois pas en compte les accès à la mémoire, qui requièrent de ce fait des analyses complémentaires. MemorySSA a été introduit dans LLVM en 2016. Nous verrons dans cette présentation ce qui se cache réellement sous ce nom, quelles sont les APIs disponibles, ainsi que les forces et les limitations de cette analyse.
Les supercalculateurs sont de plus en plus complexes et puissants, ce qui rend les machines de classe exaflopique difficiles à utiliser de manière efficace. De plus, s’assurer que les applications parallèles s’exécutent correctement sur ces machines devient aussi important que d’obtenir de bonnes performances. Dans ce contexte, il est important de trouver des techniques pour aider au mieux les développeurs à optimiser et vérifier leurs applications. Dans cette présentation, nous verrons comment des analyses statiques intégrées dans le compilateur LLVM peuvent répondre à cette problématique.
Dans un premier temps, je présenterai comment on peut mettre en place des points de mesure dans un programme en utilisant une passe LLVM : nous pouvons ainsi faire de l'instrumentation sélective, et ne regarder que certaines fonctions. Dans un deuxième temps, je présenterai une autre façon d'insérer des points de mesure avec des callbacks. Les normes OpenMP et OpenACC (entre autres) définissent des callbacks déclenchés à des moments précis de l'exécution. Je présenterai l'interaction entre l'environnement d'exécution parallèle et le système de mesure de performances à travers un exemple d'implémentation de ces callbacks.
Mickaël Dardaillon et Kevin Martin