Principe :
- MPI est une librairie C portable permettant d'echanger des messages entre processus repartis sur un ensemble de processeurs.
- Tous les fichiers sont supposes etre deja sur les machines.
- MPI ne gere pas dynamiquement les processus (pas de migration par exemple).
Etapes :
- Ecrire le source de chaque processus en incluant la librairie mpi.h
#include "mpi.h" |
- Le programme est compile par la commande mpicc. Le nombre de processus est donne au lancement du programme par la commande mpirun (un fichier decrit les machines disponibles). Ainsi, si l'on veut lancer 3 processus ex0, on tape :
mpicc ex0.c -o ex0 mpirun -np 3 ex0 |
- Un processus commence toujours par definir un monde commun qui contient l'ensemble des processus du programme parallele. Ceci se fait par la commande MPI_Init.
- Il est ensuite alors possible d'acceder aux nombre total de processus (MPI_Comm_size), au nom (i.e. numero) du processus courant par MPI_Comm_rank,au nom de la machine qui gere le processus courant (MPI_Get_processor_name), ...
- Le programme finit toujours par MPI_Finalise>.
Programme :
#include "mpi.h" #include <stdio.h> int main(int argc, char* argv[]) { double startwtime, endwtime; int namelen, numprocs, myid ; char processor_name[MPI_MAX_PROCESSOR_NAME] ; /** initialisation de mpi **/ MPI_Init(&argc,&argv); /** heure de depart **/ startwtime = MPI_Wtime(); /** combien y-a-t-il de processeurs ? **/ MPI_Comm_size(MPI_COMM_WORLD,∓numprocs); /** numero du processus courant **/ MPI_Comm_rank(MPI_COMM_WORLD,∓myid); /** num du processeur courant **/ MPI_Get_processor_name(processor_name,∓namelen); fprintf(stderr,"Processus %d sur la machine %s parmi %d processus.\n", myid, processor_name, numprocs); if (numprocs != 3) fprintf(stderr,"Il me faut 3 processus !\n") ; /** heure de fin **/ endwtime = MPI_Wtime(); printf("Temps ecoule sur %d = %f\n", myid, endwtime-startwtime); /** fin du pg **/ MPI_Finalize(); return 0; } |
Resultat de l'execution :
Processus 0 sur la machine lil. parmi 3 processus. Temps ecoule sur 0 : 0.001744 Processus 2 sur la machine lil. parmi 3 processus. Processus 1 sur la machine lil. parmi 3 processus. Temps ecoule sur 2 : 0.000781 Temps ecoule sur 1 : 0.000840 |