| [d094548] | 1 | #include "mpi.h"
|
|---|
| 2 | #include "assert.h"
|
|---|
| 3 |
|
|---|
| 4 | int main(int argc, char *argv[]) {
|
|---|
| 5 | int numtasks, rank, next, prev, buf[2], tag1=1, tag2=2;
|
|---|
| 6 | MPI_Request reqs[4];
|
|---|
| 7 | MPI_Status stats[4];
|
|---|
| 8 |
|
|---|
| 9 | MPI_Init(&argc,&argv);
|
|---|
| 10 | MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
|
|---|
| 11 | MPI_Comm_rank(MPI_COMM_WORLD, &rank);
|
|---|
| 12 |
|
|---|
| 13 | prev = rank-1;
|
|---|
| 14 | next = rank+1;
|
|---|
| 15 | if (rank == 0) prev = numtasks - 1;
|
|---|
| 16 | if (rank == (numtasks - 1)) next = 0;
|
|---|
| [a374423] | 17 |
|
|---|
| 18 | MPI_Irecv(&buf[0], 1, MPI_INT, prev, tag1, MPI_COMM_WORLD, &reqs[0]);
|
|---|
| [5a071cc] | 19 | MPI_Irecv(&buf[1], 1, MPI_INT, next, tag2, MPI_COMM_WORLD, &reqs[1]);
|
|---|
| [d094548] | 20 | MPI_Isend(&rank, 1, MPI_INT, prev, tag2, MPI_COMM_WORLD, &reqs[2]);
|
|---|
| [a374423] | 21 | MPI_Isend(&rank, 1, MPI_INT, next, tag1, MPI_COMM_WORLD, &reqs[3]);
|
|---|
| [5a071cc] | 22 | assert(buf[1] == next, "Receive maynot be completed");
|
|---|
| [d094548] | 23 | MPI_Waitall(4, reqs, stats);
|
|---|
| 24 |
|
|---|
| 25 | // assert(buf[1] == next);
|
|---|
| 26 |
|
|---|
| 27 | MPI_Finalize();
|
|---|
| 28 | }
|
|---|