Messages asynchrones avec MPI |
Principe :
Programme :
#include "mpi.h" #include <stdio.h> #define SIZE 32 int main(nt argc, char* argv[]) { double startwtime, endwtime; int namelen, numprocs, myid ; char processor_name[MPI_MAX_PROCESSOR_NAME], buff[SIZE] ; MPI_Status status ; MPI_Init(&argc,&argv); startwtime = MPI_Wtime(); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); 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") ; if (myid==0) /* processus 0 envoie */ { MPI_Send((void*) "Message 1", SIZE*sizeof(char), MPI_CHAR, 1, 1, MPI_COMM_WORLD) ; fprintf(stderr,"%d envoie %s\n",myid,"Message 1") ; MPI_Send((void*) "Message 2", SIZE*sizeof(char), MPI_CHAR, 2, 1, MPI_COMM_WORLD) ; fprintf(stderr,"%d envoie %s\n",myid,"Message 2") ; } else /* processus 1 et 2 recoivent */ { system("sleep 5") ; MPI_Recv(buff, SIZE*sizeof(char), MPI_CHAR, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status) ; fprintf(stderr,"%d recoit %s\n",myid,buff) ; } endwtime = MPI_Wtime(); printf("Temps ecoule sur %d = %f\n", myid, endwtime-startwtime); MPI_Finalize(); return 0; } |
Resultat de l'execution :
Processus 0 sur la machine lil. parmi 3 processus.
0 envoie Message 1 0 envoie Message 2 Temps ecoule sur 0 : 0.003501 Processus 1 sur la machine lil. parmi 3 processus. Processus 2 sur la machine lil. parmi 3 processus. 1 recoit Message 1 Temps ecoule sur 1 : 5.058632 2 recoit Message 2 Temps ecoule sur 2 : 5.056387 |
Ph. RIS 1997