#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) {
const int PING_PONG_LIMIT = 10;
// Initialize the MPI environment
MPI_Init(NULL, NULL);
// Find out rank, size
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
// We are assuming 2 processes for this task
if (world_size != 2) {
fprintf(stderr
, "World size must be two for %s\n", argv
[0]); MPI_Abort(MPI_COMM_WORLD, 1);
}
int ping_pong_count = 0;
int partner_rank = (world_rank + 1) % 2;
while (ping_pong_count < PING_PONG_LIMIT) {
if (world_rank == ping_pong_count % 2) {
// Increment the ping pong count before you send it
ping_pong_count++;
MPI_Send(&ping_pong_count, 1, MPI_INT, partner_rank, 0, MPI_COMM_WORLD);
printf("%d sent and incremented ping_pong_count %d to %d\n", world_rank, ping_pong_count, partner_rank);
} else {
MPI_Recv(&ping_pong_count, 1, MPI_INT, partner_rank, 0, MPI_COMM_WORLD,
MPI_STATUS_IGNORE);
printf("%d received ping_pong_count %d from %d\n", world_rank, ping_pong_count, partner_rank);
}
}
MPI_Finalize();
}
I2luY2x1ZGUgPG1waS5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgppbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKY29uc3QgaW50IFBJTkdfUE9OR19MSU1JVCA9IDEwOwovLyBJbml0aWFsaXplIHRoZSBNUEkgZW52aXJvbm1lbnQKTVBJX0luaXQoTlVMTCwgTlVMTCk7Ci8vIEZpbmQgb3V0IHJhbmssIHNpemUKaW50IHdvcmxkX3Jhbms7Ck1QSV9Db21tX3JhbmsoTVBJX0NPTU1fV09STEQsICZ3b3JsZF9yYW5rKTsKaW50IHdvcmxkX3NpemU7Ck1QSV9Db21tX3NpemUoTVBJX0NPTU1fV09STEQsICZ3b3JsZF9zaXplKTsKLy8gV2UgYXJlIGFzc3VtaW5nIDIgcHJvY2Vzc2VzIGZvciB0aGlzIHRhc2sKaWYgKHdvcmxkX3NpemUgIT0gMikgewpmcHJpbnRmKHN0ZGVyciwgIldvcmxkIHNpemUgbXVzdCBiZSB0d28gZm9yICVzXG4iLCBhcmd2WzBdKTsKTVBJX0Fib3J0KE1QSV9DT01NX1dPUkxELCAxKTsKfQppbnQgcGluZ19wb25nX2NvdW50ID0gMDsKaW50IHBhcnRuZXJfcmFuayA9ICh3b3JsZF9yYW5rICsgMSkgJSAyOwp3aGlsZSAocGluZ19wb25nX2NvdW50IDwgUElOR19QT05HX0xJTUlUKSB7CmlmICh3b3JsZF9yYW5rID09IHBpbmdfcG9uZ19jb3VudCAlIDIpIHsKLy8gSW5jcmVtZW50IHRoZSBwaW5nIHBvbmcgY291bnQgYmVmb3JlIHlvdSBzZW5kIGl0CnBpbmdfcG9uZ19jb3VudCsrOwpNUElfU2VuZCgmcGluZ19wb25nX2NvdW50LCAxLCBNUElfSU5ULCBwYXJ0bmVyX3JhbmssIDAsIE1QSV9DT01NX1dPUkxEKTsKcHJpbnRmKCIlZCBzZW50IGFuZCBpbmNyZW1lbnRlZCBwaW5nX3BvbmdfY291bnQgJWQgdG8gJWRcbiIsCndvcmxkX3JhbmssIHBpbmdfcG9uZ19jb3VudCwgcGFydG5lcl9yYW5rKTsKfSBlbHNlIHsKTVBJX1JlY3YoJnBpbmdfcG9uZ19jb3VudCwgMSwgTVBJX0lOVCwgcGFydG5lcl9yYW5rLCAwLCBNUElfQ09NTV9XT1JMRCwKTVBJX1NUQVRVU19JR05PUkUpOwpwcmludGYoIiVkIHJlY2VpdmVkIHBpbmdfcG9uZ19jb3VudCAlZCBmcm9tICVkXG4iLAp3b3JsZF9yYW5rLCBwaW5nX3BvbmdfY291bnQsIHBhcnRuZXJfcmFuayk7Cn0KfQpNUElfRmluYWxpemUoKTsKfQo=