#include <stdio.h> #include "mpi.h" int main( argc, argv ) int argc; char **argv; { int rank, value, size, false=0; int right_nbr, left_nbr; MPI_Comm ring_comm; MPI_Status status; MPI_Init( &argc, &argv ); MPI_Comm_size( MPI_COMM_WORLD, &size ); MPI_Cart_create( MPI_COMM_WORLD, 1, &size, &false, 1, &ring_comm ); MPI_Cart_shift( ring_comm, 0, 1, &left_nbr, &right_nbr ); MPI_Comm_rank( ring_comm, &rank ); MPI_Comm_size( ring_comm, &size ); do { if (rank == 0) { scanf( "%d", &value ); MPI_Send( &value, 1, MPI_INT, right_nbr, 0, ring_comm ); } else { MPI_Recv( &value, 1, MPI_INT, left_nbr, 0, ring_comm, &status ); MPI_Send( &value, 1, MPI_INT, right_nbr, 0, ring_comm ); } printf( "Process %d got %d\n", rank, value ); } while (value >= 0); MPI_Finalize( ); return 0; }