Diffusion generale d'un message |
Principe :
Programme :
#include "mpi.h"
#include <stdio.h> #define SIZE 1000 int main( int argc; char *argv[]) { double startwtime, endwtime; int namelen, numprocs, myid, size ; char processor_name[MPI_MAX_PROCESSOR_NAME], buff[SIZE], msg[SIZE] ; 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,"\nProcessus %d sur la machine %s parmi %d processus.\n", myid, processor_name, numprocs); if (numprocs != 3) fprintf(stderr,"Il me faut 3 processus !\n") ; strcpy(msg,"Message Broadcast") ; size=sizeof(char)*strlen(msg) ; if (myid==0) fprintf(stderr,"%d envoie <%s>\n",myid, msg) ; /* c'est le processus 0 qui est l'envoyeur */ MPI_Bcast((void*) msg, size, MPI_CHAR, 0, MPI_COMM_WORLD) ; fprintf(stderr,"%d recoit [%s]\n",myid,msg) ; endwtime = MPI_Wtime(); printf("Temps ecoule sur %d = %f\n", myid, endwtime-startwtime); MPI_Finalize(); return 0; } |
Resultat :
Processus 0 sur la machine lil. parmi 3 processus.
0 envoie <Message Broadcast> 0 recoit [Message Broadcast] Temps ecoule sur 0 = 0.003915 Processus 1 sur la machine lil. parmi 3 processus. 1 recoit [Message Broadcast] Processus 2 sur la machine lil. parmi 3 processus. 2 recoit [Message Brroadcast] Temps ecoule sur 1 = 0.001793 Temps ecoule sur 2 = 0.001993 |
Ph. RIS 1997