Message Passing Interface

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

MPI (The Message Passing Interface), conçue en 1993-94, est une norme définissant une bibliothèque de fonctions, utilisable avec les langages C, C++ et Fortran. Elle permet d'exploiter des ordinateurs distants ou multiprocesseur par passage de messages.

Elle est devenue de facto un standard de communication pour des nœuds exécutant des programmes parallèles sur des systèmes à mémoire distribuée.

MPI a été écrite pour obtenir de bonnes performances aussi bien sur des machines massivement parallèles à mémoire partagée que sur des clusters d'ordinateurs hétérogènes à mémoire distribuée. Elle est disponible sur de très nombreux matériels et systèmes d'exploitation. Ainsi, MPI possède l'avantage par rapport aux plus vieilles bibliothèques de passage de messages d'être grandement portable (car MPI a été implantée sur presque toutes les architectures de mémoires) et rapide (car chaque implantation a été optimisée pour le matériel sur lequel il s'exécute).

Depuis 1997, une nouvelle version de MPI est disponible, MPI-2, qui apporte quelques puissantes fonctionnalités supplémentaires.

Concepts[modifier | modifier le code]

Communicateurs[modifier | modifier le code]

Un communicateur désigne un ensemble de processus pouvant communiquer ensemble, et deux processus ne pourront communiquer que s'ils sont dans un même communicateur. Un communicateur initial englobe tous les processus (MPI_COMM_WORLD), qu'il est possible de subdiviser en communicateurs plus petits correspondants à des entités logiques. Il existe deux types de communicateurs : les intracommunicateurs et les intercommunicateurs. Les intracommunicateurs sont les communicateurs standards, alors que les intercommunicateurs servent à créer un pont entre deux intracommunicateurs. MPI-2 améliore grandement l'usage des intercommunicateurs en leur permettant de réaliser des communications collectives.

Communications point-à-point[modifier | modifier le code]

Les communications point-à-point permettent à deux processus à l'intérieur d'un même communicateur d'échanger une donnée (scalaire, tableau ou type dérivé). Les fonctions correspondantes sont MPI_Send, MPI_Recv et MPI_Sendrecv.

Communications collectives[modifier | modifier le code]

Les communications collectives impliquent tous les processus d'un communicateur. Il est possible d'envoyer une même donnée à tous les processus (MPI_Bcast), de découper un tableau entre tous les processus (MPI_Scatter), ou d'effectuer une opération (par exemple addition) où chaque processus contribuera.

Types dérivés[modifier | modifier le code]

Les types de base (entier, flottant simple ou double précision, caractère) sont nativement pris en charge. Il est ensuite possible de créer des types dérivés, qui s'écartent plus ou moins de ces types de base : les types contigu (pour des données homogènes et contiguës en mémoire), vecteur (pour des données homogènes et espacées d'un pas constant en mémoire), indexé (pour des données homogènes et espacées d'un pas variable en mémoire) et structure (pour des données hétérogènes).

MPI I/O (MPI-2)[modifier | modifier le code]

MPI I/O autorise les entrées-sorties parallèles.

Implémentations[modifier | modifier le code]

Les implémentations classiques sont en C/C++ et FORTRAN, mais il existe aussi des implémentations en Python, OCaml et Java. L'implémentation initiale du standard MPI 1.x était MPICH, aujourd'hui devenue MPICH 2 en supportant le standard MPI-2 ; c'est un logiciel libre. On trouve aussi sous licence libre OpenMPI. À côté de ces implémentations généralistes, des implémentations optimisées ont été faites par certains constructeurs.

Voir aussi[modifier | modifier le code]

Liens externes[modifier | modifier le code]