X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/025965074dbe4c1b04466cc260260470f28b7472..89e6365b5fbabe18c2d162cedd9ba07cd3e429b8:/examples/smpi/ring_c.c diff --git a/examples/smpi/ring_c.c b/examples/smpi/ring_c.c index c301ab33b5..773d74e16b 100644 --- a/examples/smpi/ring_c.c +++ b/examples/smpi/ring_c.c @@ -12,70 +12,70 @@ int main(int argc, char *argv[]) { - int rank, size, next, prev, message, tag = 201; + int rank, size, next, prev, message, tag = 201; - /* Start up MPI */ + /* Start up MPI */ - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); - - /* Calculate the rank of the next process in the ring. Use the - modulus operator so that the last process "wraps around" to - rank zero. */ + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); - next = (rank + 1) % size; - prev = (rank + size - 1) % size; + /* Calculate the rank of the next process in the ring. Use the + modulus operator so that the last process "wraps around" to + rank zero. */ - /* If we are the "master" process (i.e., MPI_COMM_WORLD rank 0), - put the number of times to go around the ring in the - message. */ + next = (rank + 1) % size; + prev = (rank + size - 1) % size; - if (0 == rank) { - message = 10; + /* If we are the "master" process (i.e., MPI_COMM_WORLD rank 0), + put the number of times to go around the ring in the + message. */ - printf("Process 0 sending %d to %d, tag %d (%d processes in ring)\n", - message, next, tag, size); - MPI_Send(&message, 1, MPI_INT, next, tag, MPI_COMM_WORLD); - printf("Process 0 sent to %d\n", next); - } + if (0 == rank) { + message = 10; - /* Pass the message around the ring. The exit mechanism works as - follows: the message (a positive integer) is passed around the - ring. Each time it passes rank 0, it is decremented. When - each processes receives a message containing a 0 value, it - passes the message on to the next process and then quits. By - passing the 0 message first, every process gets the 0 message - and can quit normally. */ - - sleep(3); - - while (1) { - MPI_Recv(&message, 1, MPI_INT, prev, tag, MPI_COMM_WORLD, - MPI_STATUS_IGNORE); - - if (0 == rank) { - --message; - printf("Process 0 decremented value: %d\n", message); - } - - MPI_Send(&message, 1, MPI_INT, next, tag, MPI_COMM_WORLD); - if (0 == message) { - printf("Process %d exiting\n", rank); - break; - } - } + printf("Process 0 sending %d to %d, tag %d (%d processes in ring)\n", + message, next, tag, size); + MPI_Send(&message, 1, MPI_INT, next, tag, MPI_COMM_WORLD); + printf("Process 0 sent to %d\n", next); + } + + /* Pass the message around the ring. The exit mechanism works as + follows: the message (a positive integer) is passed around the + ring. Each time it passes rank 0, it is decremented. When + each processes receives a message containing a 0 value, it + passes the message on to the next process and then quits. By + passing the 0 message first, every process gets the 0 message + and can quit normally. */ + + sleep(3); - /* The last process does one extra send to process 0, which needs - to be received before the program can exit */ + while (1) { + MPI_Recv(&message, 1, MPI_INT, prev, tag, MPI_COMM_WORLD, + MPI_STATUS_IGNORE); if (0 == rank) { - MPI_Recv(&message, 1, MPI_INT, prev, tag, MPI_COMM_WORLD, - MPI_STATUS_IGNORE); + --message; + printf("Process 0 decremented value: %d\n", message); } - - /* All done */ - MPI_Finalize(); - return 0; + MPI_Send(&message, 1, MPI_INT, next, tag, MPI_COMM_WORLD); + if (0 == message) { + printf("Process %d exiting\n", rank); + break; + } + } + + /* The last process does one extra send to process 0, which needs + to be received before the program can exit */ + + if (0 == rank) { + MPI_Recv(&message, 1, MPI_INT, prev, tag, MPI_COMM_WORLD, + MPI_STATUS_IGNORE); + } + + /* All done */ + + MPI_Finalize(); + return 0; }