#include #include #define ERR(...) fprintf(stderr, __VA_ARGS__) int main(int argc, char** argv) { int rc; int token; MPI_Status status; rc = MPI_Init(NULL, NULL); if (rc != MPI_SUCCESS) { ERR("Unable to initialize MPI, aborting..."); return 0; } int world_size; MPI_Comm_size(MPI_COMM_WORLD, &world_size); int world_rank; MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); int neighbor = (world_rank + 1) % world_size; printf("[%d/%d] neighbor %d\n", world_rank, world_size, neighbor); if (world_rank == 0) { token = 5; MPI_Send(&token, 1, MPI_INT, neighbor, 0, MPI_COMM_WORLD); MPI_Recv(&token, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status); } else { MPI_Recv(&token, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status); printf("[%d/%d] received %d from neighbor :^)\n", world_rank, world_size, token); MPI_Send(&token, 1, MPI_INT, neighbor, 0, MPI_COMM_WORLD); } MPI_Finalize(); return 0; }