STAGE Master 2 : Développeur C++ pour la simulation des plasmas

Le laboratoire de physique des plasmas (LPP) est fortement impliqué dans la conception et le développement de codes permettant la simulation tri-dimensionnelle et parallèle de la dynamique de plasmas astrophysiques. L’execution de ces codes est aujourd’hui extrêmement couteuse. Malgré des millions d’heures de calcul sur des machines massivement parallèles, les simulations à ce jour ne parviennent pas à simuler des systèmes tels que la magnétosphère terrestre et son interaction avec le plasma solaire, dans leur globalité.

Le projet PHARE (Parallel Hybrid code with Adaptive mesh REfinement), débuté en 2016, vise à développer un nouveau type de code permettant de diminuer significativement la charge de calcul en adoptant un maillage à résolution adaptative (AMR – Adaptive Mesh Refinement), réduisant la résolution de la grille de calcul, et donc la puissance machine nécessaire, là où une très grande précision n’est pas utile. Après un an de développement, l’équipe possède aujourd’hui un prototype validant les algorithmes numériques et de rafinement, et le projet entre dans une phase où le code doit maintenant s’interfacer avec une bibliothèque externe parallèle de raffinement de maille, voir la performance de ses parties critiques mesurée et optimisée, et proposer des modules d’entrées / sorties flexibles et performants.

Le code est écrit en C++ moderne (C++11/14). Son architecture est relativement flexible et basées sur l’utilisation de design patterns usuels (e.g. strategy, abstract factory, …). Le code est versioné sur un dépôt git principal et chaque contribution se fait via des pull-request sur notre serveur d’intégration continue, au cours desquels l’analyse statique du code, l’execution des tests unitaires, et une revue de code par l’équipe sont effectués. Le projet suit la méthodologie agile SCRUM.

L’équipe cherche aujourd’hui un stagiaire afin de participer au développement du code. Sa mission sera dans un premier temps de développer le module d’entrées utilisateurs ainsi que le module de sortie parallèle des diagnostiques. Dans un second temps il s’agira d’effectuer l’analyse de performance des parties critiques du code, et de proposer des optimisations. Le stagiaire participera aux daily scrum meetings, aux revues et planifications de sprints, et interviendra à toutes les étapes du projets, du design à l’implémentation, en passant par l’implémentation de tests unitaires (API google tests).

Profil du candidat

  • Passionné de développement C++
  • Bonnes connaissances en C++ modern (C++11 minimum)
  • Bonne connaissance de la programmation objet. Une connaissance de design patterns courants est un plus.
  • Expérience d’utilisation de la STL.
  • bonne connaissance de git
  • connaissance de cmake
  • connaissance de la programmation parallèle (MPI ou OpenMP ou threads)
  • Expérience dans la rédaction de tests unitaire.
  • Une connaissance de l’API Google Test est un atout.
  • Une connaissance de la méthodologie de Test Driven Development est un atout.
  • connaissances de programmation bas niveau, pour la performance.
  • Connaissance des effets liés au cache
  • Une connaissance en vectorisation de code sera un atout.
  • Une expérience en python sera aussi appréciée.
Contact : nicolas.aunai@lpp.polytechnique.fr