#include #include #include #define NDATA 10000 int main(int argc, char* argv[]){ int me, nprocs, i = 0, sndto, rcvfrom; MPI_Status status; float a[NDATA]; float b[NDATA]; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_rank(MPI_COMM_WORLD, &me); /* Initialize data */ for(i=0;i nprocs-1 ) sndto = 0; rcvfrom = me-1; if ( rcvfrom < 0 ) rcvfrom = nprocs-1; if(me==0){ MPI_Send(a, NDATA, MPI_REAL, sndto, 0, MPI_COMM_WORLD); MPI_Recv(b, NDATA, MPI_REAL, rcvfrom, 0, MPI_COMM_WORLD, &status); } else{ MPI_Recv(b, NDATA, MPI_REAL, rcvfrom, 0, MPI_COMM_WORLD, &status); MPI_Send(a, NDATA, MPI_REAL, sndto, 0, MPI_COMM_WORLD); } printf("\tI am task %d and I have received b(0) = %1.2f \n", me, b[0]); MPI_Finalize(); return 0; }