2018-00734 - Ingénieur en développement d'une bibliothèque C++ pour résoudre des problèmes à N-corps

Type de contrat : CDD de la fonction publique

Niveau de diplôme exigé : Bac + 5 ou équivalent

Autre diplôme apprécié : Diplome d'ingénieur ou M2 en calcul scientifique/informatique

Fonction : Ingénieur scientifique contractuel

Contexte et atouts du poste

Les avancées significatives en terme de simulation numérique ont toujours été liées aux paliers importants franchis par les technologies du HPC. Après le seuil des machines teraflops des années 1990 et actuelles, la communauté scientifique se prépare à utiliser de manière généraliste les architectures pétaflops et même exaflops dans les années 2020. Pour que des codes applicatifs puissent exploiter de telles puissances de calcul en utilisant des centaines de millions de coeurs de calcul en passant effectivement à l'échelle, il est nécessaire de repenser les modèles physiques, leur modélisation mathématique et les algorithmes associés, ainsi que faire une mise en oeuvre permettant d'exploiter tous les niveaux de parallélisme de l'architecture. Le traitement des données pour ces simulations sera aussi un problème critique vue les tailles qui sont en jeu.

Dans ce contexte, l'objectif de HiePACS est de développer des compétences pluridisciplinaires de pointe en mathématiques appliquées et en informatique du HPC pour traiter des simulations frontières multi-échelles sur les machines petaflops et exaflops qui vont être disponibles bientôt.

Mission confiée

La bibliothèque parallèle ScalFMM calcule les interactions entre objets (particules, lignes ...) via la méthode des multipoles rapide. Elle utilise des techniques HPC avancées (parallélisme à base de tâches ...) permettant l'étude de très grands systèmes.

L'objectif est de redesigner complètement le framework de notre bibliothèque autour des quatre activités suivantes :

  1. Framework ScalFMM : refondre et uniformiser les fonctionnalités pour permettre une meilleure expressivité des algorithmes, des noyaux et du parallélisme pour le passage à l’échelle ainsi qu’une utilisation plus simple et plus efficace de la bibliothèque. Cela passera notamment  par réécriture, factorisation de classes en utilisant les techniques avancées des normes du C++ moderne ;
  2. Mise en place de cas tests pour permettre la comparaison entre nos différents algorithmes en fonction des évolutions du code et aussi avec des bibliothèques concurrentes ;
  3. Validation des développements de l’ADT dans l’application OptiDIS (dynamique des dislocations collaboration CEA/Inria) ; Il s’agit de mettre à jour les noyaux d’élasticité que nous avons développés  dans les nouvelles structures de données et algorithmes de la tâche 1 puis d’optimiser les mécanismes de mise à jour entre deux pas de temps de l’arbre.
  4. Produire un code mature et documenté utilisable à long terme par les chercheurs de l’équipe et d’autres équipes de recherche.

 

Principales activités

Le travail de l’ADT sera organisé autour de quatre grandes actions listées ci-dessus, et sur une durée de 24 mois. La méthodologie consistera d’abord à mettre en place des cas tests représentatifs des fonctionnalités de la ScalFMM et des usages pour valider les transformations de la bibliothèque. Cela permettra à l’ingénieur de se familiariser avec la bibliothèque et d’en comprendre les rouages. Les développements plus approfondis se feront ensuite dans les différentes tâches. Le critère d’évaluation principal de ces tâches sera la réalisation des jalons suivants :

Jalon 1 (T0 + 2 mois) : mise en place d’un mécanisme pour valider, comparer et publier sur Gitlab les résultats numériques des algorithmes qui seront développés/transformés à partir de cas tests d’utilisateurs.

Jalon 2 (T0 + 8 mois) : première version de la bibliothèque basée uniquement sur la méthode d’interpolation en prenant en compte les différents types d’arbres (hiérarchique uniforme, arbre bloqué et l’arbre adaptatif).

Jalon 3  (T0 + 9 mois) : mise en ligne des comparaisons avec les codes concurrents.

Jalon 4  (T0 + 15 mois) : version 3.0 de ScalFMM mise en ligne.

Jalon 5  (T0 + 18 mois) : validation de l’intégration dans OptiDis à partir des benchmarks d’OptiDIS.

Jalon 6  (T0 + 24 mois) : version 3.1 de ScalFMM mise en ligne intégrant toutes les fonctionnalités.

 Ces principales activitées seront faites en collaboration avec les membres de l'équipe HiePACS, les utilisateurs de la bibliothèqe ainsi que le CEA/DEN.

Compétences

Compétences techniques et niveau requis : Maîtrise du C++ moderne (C++11) ou motivation pour acquérir une maîtrise de ce langage. Maîtrise du parallélisme (MPI en particulier). Goût prononcé pour le calcul scientifique.

Langues : Anglais bon niveau

Compétences relationnelles : Travail en équipe

Avantages sociaux

  • Restauration subventionnée
  • Transports publics remboursés partiellement

Rémunération

Entre 2562€ et 5264€ brut par mois selon expérience.