#include #include "mpi.h" #define ASIZE 100 void main(int argc, char **argv) { int me, nprocs, namelen; char processor_name[MPI_MAX_PROCESSOR_NAME]; int val[ASIZE], sval[ASIZE], rval[ASIZE], i, j, flag; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_rank(MPI_COMM_WORLD, &me); MPI_Get_processor_name(processor_name, &namelen); printf("I'm process %d of %d\n", me, nprocs); /* Initialize: stuff some bogus values in an array */ for (j = 0; j < ASIZE; j++) val[j] = sval[j] = j * me; for (i = 0; i < nprocs; i++) { /* Send values to neighboring process */ MPI_Send(sval, ASIZE, MPI_INT, (me < (nprocs-1) ? (me+1) : 0), i, MPI_COMM_WORLD); /* Receive values from neighboring process */ MPI_Recv(rval, ASIZE, MPI_INT, MPI_ANY_SOURCE, i, MPI_COMM_WORLD, &status); for (j = 0; j < ASIZE; j++) sval[j] = rval[j]; } for (j = flag = 0; j < ASIZE; j++) if (rval[j] != val[j]) flag++; if (flag) printf("%d: %d values were different!\n", me, flag); else printf("%d: No values were changed.\n", me); MPI_Finalize(); }