#include "mpi.h" #include int main(argc,argv) int argc; char *argv[]; { int numtasks, rank,rc,i; MPI_Status stat; char inmsg[20],outmsg[20]={"from node"}; char packdata[50],unpackdata[50]; int iposition,from; rc = MPI_Init(&argc,&argv); if(rc!=0){printf("error in mpi initialization\n"); MPI_Abort(MPI_COMM_WORLD,rc); } MPI_Comm_size(MPI_COMM_WORLD,&numtasks); MPI_Comm_rank(MPI_COMM_WORLD,&rank); if (rank == 0) { iposition=0; MPI_Pack(outmsg,20,MPI_CHARACTER,packdata,50,&iposition,MPI_COMM_WORLD); MPI_Pack(&rank,1,MPI_INT,packdata,50,&iposition,MPI_COMM_WORLD); for (i=1; i< numtasks; i++) { MPI_Send(packdata,50,MPI_PACKED,i,i,MPI_COMM_WORLD); } } else { MPI_Recv(unpackdata,50,MPI_PACKED,0,rank,MPI_COMM_WORLD,&stat); iposition=0; MPI_Unpack(unpackdata,50,&iposition,inmsg,20,MPI_CHARACTER,MPI_COMM_WORLD); MPI_Unpack(unpackdata,50,&iposition,&from,1,MPI_INT,MPI_COMM_WORLD); printf("rank = %d, recved %s \n",from,inmsg); } MPI_Finalize(); }