Matthieu Ospici - Modèles de programmation et d’exécution pour les architectures parallèles et hybrides. Applications à des codes de simulation pour la physique.

09:00
Wednesday
3
Jul
2013
Organized by: 

Matthieu Ospici

- Thèse préparée dans le cadre d’une collaboration entre l’équipe MESCAL du Laboratoire d’Informatique de Grenoble (LIG), le laboratoire L_SIM de l’institut INAC du CEA Grenoble et la société Bull.

Lieu de soutenance :

  • UFR IMAG, salle f022, sur le domaine universitaire de Grenoble 
    (plan d’accès)

Composition du jury :

  • M. Édouard AUDIT, CEA/Maison de la Simulation, Rapporteur
  • M. Pierre MANNEBACK, Université de Mons, Rapporteur
  • M. David GOUDIN, CEA-CESTA, Examinateur
  • M. Jean VIRIEUX, Université Joseph Fourier, Examinateur
  • M. Dimitri KOMATITSCH, CNRS-Marseille, Examinateur
  • M. Thierry DEUTSCH, CEA-Grenoble, Co-Directeur de thèse
  • Mme Pascale ROSSÉ-LAURENT, Bull-Échirolles, Examinateur
  • M. Jean-François MÉHAUT, Université Joseph Fourier, Directeur de thèse

Nous nous intéressons dans cette thèse aux grandes architectures parallèles hybrides, c’est-à-dire aux architectures parallèles qui sont une combinaison de processeurs généraliste (Intel Xeon par exemple) et de processeurs accélérateur (GPU Nvidia). L’exploitation efficace de ces grappes hybrides pour le calcul haute performance est au coeur de nos travaux. L’hétérogénéité des ressources de calcul au sein des grappes hybrides pose de nombreuses problématiques lorsque l’on souhaite les exploiter efficacement avec de grandes applications scientifiques existantes. Deux principales problématiques ont été traitées. La première concerne le partage des accélérateurs pour les applications MPI et la seconde porte sur la programmation et l’exécution concurrente de code entre CPU et accélérateur.

Les calculateurs hybrides sont très hétérogènes : en fonction des architectures, le ratio entre le nombre d’accélérateurs et le nombre de coeurs CPU est très variable. Ainsi, nous avons tout d’abord proposé une notion de virtualisation d’accélérateur, qui permet de donner l’illusion aux applications qu’elles ont la capacité d’utiliser un nombre d’accélérateurs qui n’est pas lié au nombre d’accélérateurs physiques disponibles dans le matériel. Un modèle d’exécution basé sur un partage des accélérateurs est ainsi mis en place et permet d’exposer aux applications une architecture hybride plus homogène. Nous avons également proposé des extensions aux modèles de programmation basés sur MPI / threads afin de traiter le problème de l’exécution concurrente entre CPU et accélérateurs. Nous avons proposé pour cela un modèle basé sur deux types de threads, les threads CPU et les threads accélérateur, permettant de mettre en place des calculs hybrides exploitant simultanément les CPU et les accélérateurs.

Le déploiement et l’exécution du code sur les ressources hybrides est crucial. Nous avons pour cela proposé deux bibliothèques logicielles S_GPU 1 et S_GPU 2 qui ont pour rôle de déployer et d’exécuter les calculs sur le matériel hybride. S_GPU 1 s’occupant de la virtualisation, et S_GPU 2 de l’exploitation concurrente CPU — accélérateurs. Pour observer le déploiement et l’exécution du code sur des architectures complexes à base de GPU, nous avons intégré des mécanismes de traçage qui permettent d’analyser le déroulement des programmes utilisant nos bibliothèques.

La validation de nos propositions a été réalisée sur deux grandes application scientifiques : BigDFT (simulation ab-initio) et SPECFEM3D (simulation de propagation d’ondes sismiques).