#include #include /* * Sends 'n' messages between processes. When a process * receives a message it chooses a new destination at random. * * usage: random-mpi */ main(int argc, char **argv) { int n, i, data[1]; int dest, size, rank; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD,&size); MPI_Comm_rank(MPI_COMM_WORLD,&rank); n = atoi(argv[1]); srandom(rank); /* Send 'n' startup messages. */ if (rank < n) { while ((dest = (random()%size)) == rank); MPI_Send(data, 1, MPI_INT, dest, 0, MPI_COMM_WORLD); } while (1) { MPI_Recv(data, 1, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); /* Don't send to self. */ while ((dest = (random()%size)) == rank); MPI_Send(data, 1, MPI_INT, dest, 0, MPI_COMM_WORLD); } MPI_Finalize(); }