MPI (Message
Passing Interface) est une bibliothèque d'échanges de messages pour
machines parallèles homogènes, c’est un standard créé pour le
développement d’applications parallèles portables. Une
application MPI est un ensemble de processus exécutant chacun son
propre code (modèle SPMD) et communiquant via des appels à des
sous-programmes de la bibliothèque MPI. Le modèle d'exécution d'une
application MPI est le SPMD (Single
Program Multiple Data), soit l'exécution du même programme
pour tous les processus.
MPICH est une
implémentation de MPI développée par le MCS de l'Argonne
University; elle propose donc une librairie MPI ainsi que
l'environnement nécessaire pour respecter les autres exigences de
la norme. Cet environnement contient un certain nombre de commandes
spécifiques à MPICH (mpirun, mpicc,...) et permet par exemple de
gérer l'initialisation de l'application (serveur p4serv,
utilisation de ssh, rsh ou autre). Les fonctions MPI implémentées
dans MPICH sont écrites au dessus d'une ADI (Abstract Device
Interface). Cette ADI est une bibliothèque de macros définissant
une interface avec une bibliothèque de communications appelée
device. De fait, à la compilation de MPICH il est nécessaire de
choisir un device.
Les deux principaux device sont ch_p4
et ch_schmem.
ch_p4
: permet une liaison
inter-machines (inter-noeuds) par utilisation du protocole TCP/IP.
Son utilisation pour réaliser des communications au sein d'une
machine conduit à une dégradation importante des
performances.
ch_shmem
: permet une liaison
rapide entre tâches s'exécutant sur une même machine par
utilisation de la mémoire partagée pour effectuer les échanges de
messages.
MPICH-G2 est une
spécialisation de MPICH-G reposant principalement sur un device
Globus2 obtenu par modification de Nexus et réalisée en
collaboration avec les gens de Globus.
PVM ("Parallel
Virtual Machine") est issu d'un projet interne de l'Oak Ridge
National Laboratory (ORNL) aux USA en 1989. La première version a
servi de base en 1991 à un projet plus vaste commun à trois
universités des USA et soutenu par plusieurs programmes tant
gouvernementaux qu'industriels. PVM est un logiciel constitué d'un
ensemble de programmes et de librairies permettant d'utiliser des
machines de calcul hétérogènes, insérées dans un environnement de
réseaux basés sur le protocole INTERNET (IP), pour mettre en oeuvre
des technologies de calcul parallèle et distribué. PVM est implanté
aussi bien sur les machines monoprocesseur (dans ce cas la
technique de la mémoire distribuée est utilisée) que sur des
machines multiprocesseurs à architecture explicitement parallèle
(dans ce cas la gestion de la mémoire partagée est
possible).
Le
processeur sera identifié par un nombre entier. Une table sera
créée pour assurer la correspondance entre adresse de machine au
sens IP et ce numéro de processeur. Ces séquences indépendantes de
programme sont, dans la terminologie PVM, dénommées tâches. Chaque
tâche a deux fonctions :
- réaliser les traitements prévus par la séquence de programme sur
la partie des données qui lui sont affectées à ce moment là.
- assurer les communications avec le programme principal (lui-même
une tâche) et éventuellement les autres tâches (échange des données
initiales et des données traitées, informations de synchronisation
...).
Une tâche PVM sera, sur la machine, constituée par un process au
sens UNIX. La machine virtuelle va donc fournir les moyens pour
identifier chaque tâche indépendamment du système d'identification
des process : un TID ("Task IDentifier") lui sera attribué ;
schématiquement ce sera la concaténation du numéro du processeur et
du PID du process.