Le Message Passing Interface est un standard de communication utilisé dans la programmation parallèle pour permettre à des processus distincts de partager des informations et de coopérer entre eux pour résoudre pour résoudre des problèmes complexes.
Son utilisation est préférée à celle des fonctionnalités offertes par les systèmes d’exploitations pour les raisons suivantes :
Il permet de gérer entre autre :
MPI est fourni sous forme de bibliothèques pour les langages C/C++ et Fortran.
Le programme MPI démarre en appelant la fonction MPI_Init pour configurer l'environnement de communication. Une fois l’environnement MP I initialisé, on dispose d’un ensemble de processus actifs et d’un espace de communication au sein duquel sont effectuées des opérations MPI. Ce couple (processus actifs, espace de communication) est appelé communicateur.
Le communicateur par défaut est MPI_COMM_WORLD et comprend tous les processus actifs. Il est initialisé lors de l’appel à la fonction MPI_INIT() et désactivé par l’appel à la fonction MPI_FINALIZE().
On peut connaître le nombre de processus actifs gérés par un communicateur avec la fonction MPI_COMM_SIZE(comm, nb_procs, code) ainsi que le rang (ou numéro) d’un processus avec la fonction MPI_COMM_RANK (comm, rang, code).
Ce mode de fonctionnement comprend les étapes suivantes :
Initialisation : Le programme MPI démarre en appelant la fonction MPI_Init pour configurer l'environnement de communication.
Identification des processus : Une fois que l’environnement d’exécution qui accompagne une bibliothèque MPI a lancé plusieurs processus (éventuellement sur plusieurs machines), chacun de ces processus se voit attribuer un numéro, qui est son rang. Ces numéros servent d’adresse au sein des opérations MPI : quand on envoie un message à quelqu’un, on indique le rang de la destination.
Le rang d’un processus est en fait son rang au sein d’un communicateur donné (on verra plus tard comment partitionner un communicateur en plusieurs morceaux). La « numérotation » des processus à laquelle il a été fait allusion ci-dessus correspond en fait aux rangs dans MPI_COMM_WORLD.
Communication :
Les processus échangent des données à l'aide de fonctions comme MPI_Send et MPI_Recv. Ces Communications sont fiables et tout message émis est reçu exactement une fois (ni perte, ni duplication). Il utilise FIFO (First In – First Out) comme mode de communication c'est-à-dire, si m est envoyé avant m', alors m est reçu avant m'.
Ces communications peuvent être :
Synchronisation : MPI offre des mécanismes tels que MPI_Barrier pour synchroniser l'exécution des processus à des points spécifiques du programme de sorte à s'assurer que tous les processus atteignent un point donné du programme avant de continuer.
Finalisation : Une fois les tâches accomplies, le programme se termine en appelant MPI_Finalize pour finaliser l'environnement.
En conclusion, MPI offre des outils robustes pour la communication entre processus en programmation parallèle. Les modes point à point et collectif permettent une coordination efficace, essentielle pour résoudre des problèmes complexes sur des systèmes distribués. La norme MPI facilite ainsi le développement d'applications hautement performantes et parallèles.