Nov. 2021 - Offres de stages M1


1. Développement d’outils d’analyse dynamique de programmes

Mots clés : RISC-V, Intel Pin, analyse dynamique

Contexte

Afin d’améliorer la performance des processeurs généralistes (types Intel/Arm) modernes, il est souvent nécéssaire de comprendre le comportement des programmes généralistes. Par comportement, on entend par exemple : \

  • Quelles parties du code du binaire sont exécutées plus ou moins souvent (code “chaud”)
  • Quel est le mix d’instructions
  • Quel est le parallélisme d’instructions au sein du code
  • A quel point le comportement des branchements est régulier
  • Quelle est la distance moyenne d’un saut
  • Etc.

Bien que ces propriétés ne soient pas strictement indépendantes du jeu d’instruction (x86, Arm, RISC-V), elles sont indépendantes de la microarchitecture, c’est à dire de la machine sur laquelle on exécute le programme. Typiquement, on va donc donner le binaire à exécuter à un simulateur fonctionnel (e.g., Spike pour RISC-V), un émulateur (QEMU) ou un JIT (Intel pin ou DynamoRIO). Ces outils exécutent le binaire pas à pas mais permettent en général d’insérer du code d’analyse à chaque pas (chaque instruction). Un certain nombre d’outils d’analyses sont d’ailleurs déjà fournis dans DynamoRIO, par exemple.

Cependant, chaque simulateur/émulateur (par ex., Pin, Spike, Qemu, DynamoRIO) possède sa propre interface et le même outil d’analyse (par ex., analyse du mix d’instructions) doit être réimplémenté en utilisant l’interface spécifique du simulateur/émulateur.

Objectif

Ce projet vise donc à abstraire le concept d’instruction afin de n’implémenter les outils d’analyse qu’une seule fois. On fournira ensuite un adapteur à chaque simulateur/émulateur qui utilisera les API spécifiques dudit simulateur/émulateur afin d’extraire les informations nécéssaires à créer une instruction “abstraite”, que l’outil d’analyse pourra ensuite traiter.

Il faudra ensuite implémenter les différents outils d’analyses utiles pour la caractérisation des programmes. Cette suite d’outils sera donc capable d’analyser des programmes compilés pour n’importe quel jeu d’instruction (RISC-V, Arm, x86) tant qu’il existe 1) un simulateur/émulateur pouvant simuler/émuler le binaire et 2) Un adapteur pour ce simulateur/émulateur vers la représentation abstraite de la suite d’outils.

Compétences attendues/mises en oeuvre

  • Maîtrise du C/C++
  • Notion de ce qu’est une instruction et des différents types (arithmétique, mémoire, branchement, etc.)
  • Des notions en assembleur x86/Arm/RISC-V sont bienvenues

Contacts :

Arthur Perais

2. Caractérisation de benchmarks multicœurs

Mots clés : Multicœur, benchmark, calcul parallèle

Contexte

Les besoins en calcul grandissant ont donné lieu à la multiplication des machines de type multicœur et le développement des performances de ces machines est un sujet de recherche très étudié autant par les laboratoires de recherche que par l’industrie. L’une des clés pour l'évaluation des nouvelles machines est l’utilisation d’application de référence de type benchmark. Les benchmarks permettent de comparer les performances de plusieurs machines et ce pour une même application ayant des caractéristiques connues. Les benchmarks de référence dépendent des communautés mais ces derniers évoluent très lentement par rapport aux technologies utilisées et ne présentent plus aussi bien les types d’application pour lesquels les machines multicœurs sont développés et utilisés aujourd’hui par l’industrie.

Objectif

L’objectif principal de ce stage est de faire un état des lieux sur les benchmarks de références dans le domaine des multicœurs comme par exemple Splash et Parsec. Cet état des lieux devra permettre d’analyser en détail un ou plusieurs benchmarks afin de voir si ils utilisent au mieux l’ensemble des ressources sur des fenêtres temporelles ou si le nombre de cœurs utilisés en parallèle est bien inférieur au nombre de cœurs disponibles sur la machine. Les expérimentations auront lieu sur des machines réelles et non en simulation. Les différentes étapes de ce stage sont les suivantes:

  • Recherche bibliographique des benchmarks pour des architectures multicœurs
  • Prise en main et compilation des différents benchmarks dans un environnement natif
  • Instrumentation d’un ou plusieurs benchmarks
  • Analyse des expérimentations sur plusieurs machines multicœurs.

Compétences attendues/mises en oeuvre

Le ou la candidat(e) utilisera les compétences suivantes~:

  • Programmation~: des connaissances en C++ et en C ainsi que l’utilisation d’un debugger sont nécessaires
  • Mécanismes de synchronisation
  • Des connaissances en MPI et/ou OpenMP sont un plus.

Contacts :

Julie Dumas