Exemples de sujets de stages, thèses et post-docs¶
Instrumentation par sondes de mesure d’énergie de serveurs pour comprendre la consommation d’énergie du logiciel¶
Sur les machines Gabian, conception de sondes pour instrumenter les processeurs (CPU), la mémoire (RAM), les disques, le réseau, les GPU, afin de mesurer et comprendre la consommation d’énergie du logiciel. Création de micro-benchmarks spécialisés à bas niveau tournant sous un OS Linux customisé (baremetal) pour obtenir des données précises. Généralisation des méthodes de mesures à des serveurs modernes. Comparaison avec les compteurs matériels (RAPL) disponibles sur les machines récentes.
Logiciels fondamentaux ciblés: CoreBoot, Linux.
Axe principal: 1. mesurer et comprendre
Conception d’un modèle de coût statique pour prédire le temps, la mémoire et l’énergie consommés par un logiciel¶
En utilisant les données récoltées par instrumentation, concevoir un modèle permettant de prédire la consommation d’un logiciel sans avoir besoin de l’exécuter (modèle statique). Ce modèle prédictif doit permettre d’estimer cette consommation sur le code binaire (machine), sans nécessiter le code source des logiciels. La prédiction du coût d’un code source se fera par transformation (compilation) du source en binaire pour une architecture de machine données. Le modèle développé se présentera sous la forme d’une bibliothèque intégrée au système Linux.
Logiciels fondamentaux ciblés: Linux, LLVM, GCC.
Axe principal: 2. modèles de coûts en énergie, en temps et en mémoire
Atelier logiciel pour la réduction de l’énergie: rendre visible les coûts en temps, en mémoire et en énergie pendant le développement des logiciels¶
Intégrer le modèle précédent dans les outils classiques du développeur logiciel (VSCode, IntellijIDEA, vim, Emacs) lui permettant d’estimer au moment de la conception des logiciels ses coûts. Permettre également d’auditer les logiciels existants dont le code source n’est pas disponible.
Logiciels fondamentaux ciblés: Linux, LLVM, GCC.
Axe principal: 6. visibilité des coûts en temps, mémoire et énergie
Optimisations automatiques sensibles à l’énergie dans les compilateurs et interpréteurs¶
Optimisation automatique de code dans les compilateurs ou les interpréteurs, notamment par l’exploitation automatique des différents niveaux de parallélisme présents dans les architectures modernes: pipelines, vecteurs, threads, GPU, machines distribuées. Utilisation comme fonction objective des modèles de coûts statiques développés précédemments.
Logiciels fondamentaux ciblés: LLVM, GCC, Python, NodeJS, GraalVM, OpenJDK, jax, xla, Python, NodeJS, GraalVM, OpenJDK, …
Axes principaux: 3. modèles de coûts dans les compilateurs optimisants, 4. génération automatique de code parallèle frugal et efficace.
Amélioration automatisée de l’efficacité énergétique des bibliothèques et des noyaux systèmes¶
Optimisation des bibliothèques, notamment celles utilisées pour le calcul intensif, grâce aux modèles de coûts statiques développés permettant l’emploi de techniques d”autotuning. Choix des meilleurs paramètres de configuration d’un noyau Linux en fonction du type d’application, guidés par les modèles de coûts.
Logiciels fondamentaux ciblés: noyau Linux, libc, libc++, BLAS, LAPACK, numpy, pytorch, tensorflow, keras, Scikit-learn, …
Axes principaux: 3. modèles de coûts dans les compilateurs optimisants, 4. génération automatique de code parallèle frugal et efficace.
Traduction de C++ à Rust par analyse statique pour extraire des spécifications et générer du code efficace et sûr¶
Dans la continuité du sujet précédent, le principe de ces travaux sera de créer une spécification du comportement d’un code C++ par analyse statique et de traduire cette spécification automatiquement et de manière prouvée en Rust pour profiter du modèle mémoire plus sûr de ce langage. Voir par exemple des travaux récents de Xavier Denis sur la vérification de programmes Rust.
La génération de code à partir d’une spécification d’une architecture d’application, de ses algorithmes et structures de données, aussi appelée metaprogrammation, peut permettre de générer un code efficace exploitant au mieux l’architecture matérielle. Validation de la réduction de l’empreinte énergétique par utilisation du modèle de coût créé précédemment.
Logiciels fondamentaux ciblés: GCC, LLVM, Rust
Axe principal: 4. génération automatique de code parallèle frugal et efficace.
Compression et réduction de la taille des flottants dans les calculs machine¶
En lien avec le projet SiNuS (Simulations Numériques Soutenables) en collaboration avec l’Université de Perpignan et l’ENAC, ce sujet consiste à: 1) améliorer la librairie d’algèbre linéaire sur données compressées blaz adaptée aux données scientifiques et permettant de réaliser les calculs les plus courants sans décompression; 2) régler la précision des calculs (precision tuning) pour réduire le format des nombres utilisés tout en maîtrisant la précision; 3) valider les gains obtenus en temps, mémoire et énergie avec les modèles de coûts développés dans la chaire; 4) implémenter ces méthodes dans les compilateurs et bibliothèques courantes.
Logiciels fondamentaux ciblés: LLVM, GCC, BLAS, LAPACK, numpy
Axe principal: 5. réduction de la taille des données et de la quantité de calcul.
Portabilité et garantie de précision des calculs numériques optimisés¶
Les optimisations effectuées sur les codes et la génération de code parallèle optimisé, même si elles préservent la sémantique originelle du code, peuvent potentiellement changer les résultats de calculs utilisant des nombres flottants. En effet, les calculs flottants n’étant ni distributifs, ni associatifs, changer l’ordre de ces calculs peut donner des résultats différents. Par ailleurs, l’exécution d’un même code sur des architectures différentes, notamment sur des architectures GPU, peut également donner des résultats différents. Il s’agit donc ici d’étudier les mécanismes statiques permettant de garantir la portabilité des codes utilisant des calculs numériques flottants sur une précision donnée et d’implémenter ces mécanismes dans les compilateurs optimisants.
Logiciels fondamentaux ciblés: LLVM, GCC
Axes principaux: 4. génération automatique de code parallèle frugal et efficace et 5. réduction de la taille des données et de la quantité de calcul.
Migration de conteneurs sensible à l’énergie sur grappes de machines hétérogènes¶
Ce travail de synthèse s’inscrit dans le prolongement du projet Gabian où l’on dispose d’une centaine de machines hétérogènes et dans l’obtention de modèles de coûts en énergie, temps, mémoire. Il consiste à intégrer ces modèles prédictifs dans un système d’exploitation capable de gérer un ensemble de machines hétérogènes et de déplacer des conteneurs d’une machine à l’autre en fonction d’une stratégie d’ordonnancement sensible à l’énergie.
La conteneurisation peut également permettre d’explorer des mécanismes de checkpointing intégrables dans les compilateurs ou de duplication des calculs, permettant d’explorer des stratégies de tolérances aux pannes permettant une reprise après erreur ou voire une continuité de service. Ces aspects sont importants dans le cas d’un prolongement de la durée de vie des machines, où le taux de panne va potentiellement augmenter.
Logiciels: Linux, KVM, Kubernetes, Docker, GCC, LLVM
Axe principal: 7. stratégies d’ordonnancement et de placement des tâches sensibles à l’énergie.