Compile-time Validation and Optimization of MPI Nonblocking Communications - TEL - Thèses en ligne Accéder directement au contenu
Thèse Année : 2022

Compile-time Validation and Optimization of MPI Nonblocking Communications

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

Résumé

High-Performance Computation (HPC) clusters are made of multiple computing and memory storage units (or nodes) interconnected with a high performance network. Such architecture is called”distributed”. Computations are spread over these nodes which each work on a subset of the whole simulation, leading to increased performance thanks to parallelism. The results then needs to be shared between the nodes to carry out the computations, which is source of latencies. The Message Passing Interface (MPI) is the most widely used solution in HPC to implement these exchanges. It defines multiple flavors of communications, including point-to-point and collective communications. They exist in three versions: blocking, nonblocking, and persistent. Nonblocking communications allow the overlapping of communications by computations, thus leading to a better use of computing resources and reduced time to results. Yet this version of the communications, whose collective forms were added to the interface by its third major version in 2012, are harder to use because of their composition and offer less security mechanisms. Developers are more prone to commit programming errors which can lead to deadlocks or data corruption. Consequently, nonblocking communications, and more specifically the collective forms, are still not widely used to create overlapping opportunities. The goal of this study is the development of methods to help developers in using these communications. First, we propose a method to match nonblocking calls at compile-time and to detect programming errors involving those using information on the control flow and the data flow. Secondly, we propose a method to automatically transform existing blocking calls into their nonblocking versions. This method then reorganizes the code of a function by moving the dependencies of communications in order to maximize the length of overlapping intervals. It is also applied on existing nonblocking calls using the matching information found by the verification process. Finally, we build upon the limitations of the automatic approach to propose a method to improve the overlapping potential of MPI programs by identifying the boundaries of overlapping intervals and suggesting code modification to developers. The three processes we proposed have been tested on several benchmarks, including miniapps and CORAL codes.
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.
Fichier principal
Vignette du fichier
NGUYEN_VAN_MAN_2022.pdf (1.36 Mo) Télécharger le fichier
Origine : Version validée par le jury (STAR)

Dates et versions

tel-04074295 , version 1 (19-04-2023)

Identifiants

  • HAL Id : tel-04074295 , version 1

Citer

van Man Nguyen. Compile-time Validation and Optimization of MPI Nonblocking Communications. Data Structures and Algorithms [cs.DS]. Université de Bordeaux, 2022. English. ⟨NNT : 2022BORD0415⟩. ⟨tel-04074295⟩
95 Consultations
58 Téléchargements

Partager

Gmail Facebook X LinkedIn More