#include #include "mpi.h" #define TOKTAG 5 #define VERBOSE 1 int main(int argc, char** argv) { int me, nproc, src, dst, token; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &me); MPI_Comm_size(MPI_COMM_WORLD, &nproc); src = (me == nproc - 1) ? 0 : me + 1; dst = (me == 0) ? nproc - 1 : me - 1; if (me == 0) { token = 0; fprintf(stderr, "Token = %i sent\n", token); MPI_Send(&token, 1, MPI_INT, dst, TOKTAG, MPI_COMM_WORLD); MPI_Recv(&token, 1, MPI_INT, src, TOKTAG, MPI_COMM_WORLD, &status); fprintf(stderr, "Token = %i arrived back\n", token); } else { MPI_Recv(&token, 1, MPI_INT, src, TOKTAG, MPI_COMM_WORLD, &status); if(VERBOSE)fprintf(stderr, "Node %d passing token = %i\n", me, token); token++; MPI_Send(&token, 1, MPI_INT, dst, TOKTAG, MPI_COMM_WORLD); } MPI_Finalize(); return 0; }