Thèse soutenue

Vérification et optimisation à la compilation des communications MPI non-bloquantes

FR  |  
EN
Auteur / Autrice : Van Man Nguyen
Direction : Denis BarthouPatrick CarribaultEmmanuelle Saillard
Type : Thèse de doctorat
Discipline(s) : Informatique
Date : Soutenance le 16/12/2022
Etablissement(s) : Bordeaux
Ecole(s) doctorale(s) : École doctorale Mathématiques et informatique (Talence, Gironde ; 1991-....)
Partenaire(s) de recherche : Laboratoire : Laboratoire bordelais de recherche en informatique - Institut national de recherche en informatique et en automatique (France). Centre de recherche Inria de l'université de Bordeaux (Bordeaux)
Jury : Président / Présidente : Emmanuel Jeannot
Examinateurs / Examinatrices : Vincent Loechner, Julien Jaeger
Rapporteurs / Rapporteuses : Alexandra Jimborean, Purushotham Bangalore

Résumé

FR  |  
EN

Les clusters de Calcul Haute Performance (HPC) sont composés de multiples unités de calcul ou de stockage mémoire, aussi appelés « nœuds », interconnectés par un réseau haut débit et basse latence. Une telle architecture est qualifiée de « distribuée ». Les calculs sont ainsi distribués sur ces nœuds qui vont chacun travailler sur une section d’une simulation, ce qui permet de réduire le temps d’exécution de simulations grâce au parallélisme. Les nœuds doivent toutefois se communiquer leurs résultats afin d’avancer dans les calculs, ce qui cause des latences. Message Passing Interface (MPI) est la solution la plus utilisée en HPC pour définir ces échanges entre nœuds de calcul. Elle définit des communications point-à-point et des communications collectives. Chaque type de communication existe en trois versions : bloquante, non-bloquante, et persistante. Les communications non-bloquantes permettent une meilleure utilisation des ressources de calcul en recouvrant les communications par des calculs, ce qui permet de réduire le temps d’obtention des résultats. Cependant, ces communications non-bloquantes sont plus complexes à l’usage, et offrent moins de mécanismes de sécurité. Les développeurs sont davantage susceptibles de commettre des erreurs de programmation pouvant conduire à des blocages du programme ou corrompre les résultats. Cela conduit à une moindre popularité de ces communications, en particulier de la forme collective introduite lors de la troisième révision majeure de l’interface en 2012, pour dégager du recouvrement. L’objectif de cette étude est de proposer des méthodes visant à aider les développeurs à utiliser ces communications. Premièrement, nous proposons une méthode pour associer les appels non-bloquants lors de la compilation d’un programme MPI en utilisant des informations sur le flot de contrôle et de le flot de données. Dans un deuxième temps, nous proposons une méthode pour automatiquement transformer les appels bloquants dans leur version non-bloquante. Cette méthode va ensuite réorganiser le code d’une fonction en déplaçant les dépendances des communications dans le but de maximiser la taille des intervalles de recouvrement. Cette méthode est également appliquée sur les appels non-bloquants existants en exploitant les associations trouvées par le processus de validation. Enfin, nous exploitons les limitations du processus de transformation automatique afin de proposer une méthode permettant d’améliorer le potentiel de recouvrement des programmes MPI en identifiant les bornes de ces intervalles et en suggérant des modifications de code à appliquer. Les trois processus que nous proposons ont été testés sur plusieurs benchmarks, dont des miniapps et des codes CORAL.