#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) {
int rank, size;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
int *i
= (int *) malloc(sizeof(int) * BIG
); // reserve BIG(10000) int pointers.
i[0] = rank;
i[BIG - 1] = size * (rank + 1);
printf("Task %d is trying to send to task %d\n", rank
, (rank
+ 1) % size
); MPI_Send(i, BIG, MPI_INT, (rank + 1) % size, 1, MPI_COMM_WORLD);
printf("Task %d sent values i[0]=%d and i[%d]=%d\n", rank
, i
[0], BIG
-1, i
[BIG
- 1]);
printf("Task %d is trying to receive from task %d\n", rank
, (size
+ rank
- 1) % size
); MPI_Recv(i, BIG, MPI_INT, (size + rank - 1) % size, 1, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
printf("Task %d received values i[0]=%d and i[%d]=%d from task %d\n", rank
, i
[0], BIG
-1, i
[BIG
- 1], (size
+ rank
- 1) % size
);
MPI_Finalize();
return 0;
}
I2luY2x1ZGUgPG1waS5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CiAgICBpbnQgcmFuaywgc2l6ZTsKICAgIGludCBCSUcgPSBhdG9pKGFyZ3ZbMV0pOwogICAgTVBJX0luaXQoJmFyZ2MsICZhcmd2KTsKICAgIE1QSV9Db21tX3NpemUoTVBJX0NPTU1fV09STEQsICZzaXplKTsKICAgIE1QSV9Db21tX3JhbmsoTVBJX0NPTU1fV09STEQsICZyYW5rKTsKICAgIAogICAgaW50ICppID0gKGludCAqKSBtYWxsb2Moc2l6ZW9mKGludCkgKiBCSUcpOwogICAgLy8gcmVzZXJ2ZSBCSUcoMTAwMDApIGludCBwb2ludGVycy4KICAgIGlbMF0gPSByYW5rOwogICAgaVtCSUcgLSAxXSA9IHNpemUgKiAocmFuayArIDEpOwogICAgCiAgICBwcmludGYoIlRhc2sgJWQgaXMgdHJ5aW5nIHRvIHNlbmQgdG8gdGFzayAlZFxuIiwgcmFuaywgKHJhbmsgKyAxKSAlIHNpemUpOwogICAgTVBJX1NlbmQoaSwgQklHLCBNUElfSU5ULCAocmFuayArIDEpICUgc2l6ZSwgMSwgTVBJX0NPTU1fV09STEQpOwogICAgcHJpbnRmKCJUYXNrICVkIHNlbnQgdmFsdWVzIGlbMF09JWQgYW5kIGlbJWRdPSVkXG4iLCByYW5rLCBpWzBdLCBCSUctMSwgaVtCSUcgLSAxXSk7CiAgICAKICAgIHByaW50ZigiVGFzayAlZCBpcyB0cnlpbmcgdG8gcmVjZWl2ZSBmcm9tIHRhc2sgJWRcbiIsIHJhbmssIChzaXplICsgcmFuayAtIDEpICUgc2l6ZSk7CiAgICBNUElfUmVjdihpLCBCSUcsIE1QSV9JTlQsIChzaXplICsgcmFuayAtIDEpICUgc2l6ZSwgMSwgTVBJX0NPTU1fV09STEQsIE1QSV9TVEFUVVNfSUdOT1JFKTsKICAgIAogICAgcHJpbnRmKCJUYXNrICVkIHJlY2VpdmVkIHZhbHVlcyBpWzBdPSVkIGFuZCBpWyVkXT0lZCBmcm9tIHRhc2sgJWRcbiIsIHJhbmssIGlbMF0sIEJJRy0xLCBpW0JJRyAtIDFdLCAoc2l6ZSArIHJhbmsgLSAxKSAlIHNpemUpOwogICAgCiAgICBNUElfRmluYWxpemUoKTsKICAgIHJldHVybiAwOwp9Cg==