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.

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.

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.

Optimisations sensibles à l’énergie dans les compilateurs, interpréteurs et bibliothèques

Optimisation automatique de code dans les compilateurs par l’exploitation automatique des différents niveaux de parallélisme présents dans les architectures modernes (pipelines, vecteurs, threads, GPU, machines distribuées), utilisant comme fonction objective le modèle statique développé précédemment. Intégration de ces optimisations dans les interpréteurs et les bibliothèques optimisées.

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.

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 de compression 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.

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.

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.