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