#include <stdio.h>
#include <string.h>
#include <mpi.h>
#define MAX_MESSAGE_LENGTH 20
int main(int argc, char **argv) {
int rank, size;
char message[MAX_MESSAGE_LENGTH];
MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
char* messages[] = {"mepco", "schlenk", "engineering"};
if (rank == 0) {
// Process 0 sends "mepco" to process 1
MPI_Send
(messages
[0], strlen(messages
[0]) + 1, MPI_CHAR
, 1, 0, MPI_COMM_WORLD
); // Process 0 receives from the last process
MPI_Recv(message, MAX_MESSAGE_LENGTH, MPI_CHAR, size - 1, 0, MPI_COMM_WORLD, &status);
printf("Process %d received: %s\n", rank
, message
); } else if (rank == size - 1) {
MPI_Recv(message, MAX_MESSAGE_LENGTH, MPI_CHAR, rank - 1, 0, MPI_COMM_WORLD, &status);
printf("Process %d received: %s\n", rank
, message
); MPI_Send
(messages
[1], strlen(messages
[1]) + 1, MPI_CHAR
, 0, 0, MPI_COMM_WORLD
); } else {
MPI_Recv(message, MAX_MESSAGE_LENGTH, MPI_CHAR, rank - 1, 0, MPI_COMM_WORLD, &status);
printf("Process %d received: %s\n", rank
, message
); MPI_Send
(messages
[2], strlen(messages
[2]) + 1, MPI_CHAR
, rank
+ 1, 0, MPI_COMM_WORLD
); }
MPI_Finalize(); // Finalize MPI environment
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPG1waS5oPgoKI2RlZmluZSBNQVhfTUVTU0FHRV9MRU5HVEggMjAKCmludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgewogICAgaW50IHJhbmssIHNpemU7CiAgICBjaGFyIG1lc3NhZ2VbTUFYX01FU1NBR0VfTEVOR1RIXTsKICAgIE1QSV9TdGF0dXMgc3RhdHVzOwoKICAgIAogICAgTVBJX0luaXQoJmFyZ2MsICZhcmd2KTsKICAgIE1QSV9Db21tX3JhbmsoTVBJX0NPTU1fV09STEQsICZyYW5rKTsKICAgIE1QSV9Db21tX3NpemUoTVBJX0NPTU1fV09STEQsICZzaXplKTsKICAgIGNoYXIqIG1lc3NhZ2VzW10gPSB7Im1lcGNvIiwgInNjaGxlbmsiLCAiZW5naW5lZXJpbmcifTsKCiAgICBpZiAocmFuayA9PSAwKSB7CiAgICAgICAgLy8gUHJvY2VzcyAwIHNlbmRzICJtZXBjbyIgdG8gcHJvY2VzcyAxCiAgICAgICAgTVBJX1NlbmQobWVzc2FnZXNbMF0sIHN0cmxlbihtZXNzYWdlc1swXSkgKyAxLCBNUElfQ0hBUiwgMSwgMCwgTVBJX0NPTU1fV09STEQpOwogICAgICAgIC8vIFByb2Nlc3MgMCByZWNlaXZlcyBmcm9tIHRoZSBsYXN0IHByb2Nlc3MKICAgICAgICBNUElfUmVjdihtZXNzYWdlLCBNQVhfTUVTU0FHRV9MRU5HVEgsIE1QSV9DSEFSLCBzaXplIC0gMSwgMCwgTVBJX0NPTU1fV09STEQsICZzdGF0dXMpOwogICAgICAgIHByaW50ZigiUHJvY2VzcyAlZCByZWNlaXZlZDogJXNcbiIsIHJhbmssIG1lc3NhZ2UpOwogICAgfSBlbHNlIGlmIChyYW5rID09IHNpemUgLSAxKSB7CiAgICAgICAgTVBJX1JlY3YobWVzc2FnZSwgTUFYX01FU1NBR0VfTEVOR1RILCBNUElfQ0hBUiwgcmFuayAtIDEsIDAsIE1QSV9DT01NX1dPUkxELCAmc3RhdHVzKTsKICAgICAgICBwcmludGYoIlByb2Nlc3MgJWQgcmVjZWl2ZWQ6ICVzXG4iLCByYW5rLCBtZXNzYWdlKTsKICAgICAgICBNUElfU2VuZChtZXNzYWdlc1sxXSwgc3RybGVuKG1lc3NhZ2VzWzFdKSArIDEsIE1QSV9DSEFSLCAwLCAwLCBNUElfQ09NTV9XT1JMRCk7CiAgICB9IGVsc2UgewogICAgICAgIE1QSV9SZWN2KG1lc3NhZ2UsIE1BWF9NRVNTQUdFX0xFTkdUSCwgTVBJX0NIQVIsIHJhbmsgLSAxLCAwLCBNUElfQ09NTV9XT1JMRCwgJnN0YXR1cyk7CiAgICAgICAgcHJpbnRmKCJQcm9jZXNzICVkIHJlY2VpdmVkOiAlc1xuIiwgcmFuaywgbWVzc2FnZSk7CiAgICAgICAgTVBJX1NlbmQobWVzc2FnZXNbMl0sIHN0cmxlbihtZXNzYWdlc1syXSkgKyAxLCBNUElfQ0hBUiwgcmFuayArIDEsIDAsIE1QSV9DT01NX1dPUkxEKTsKICAgIH0KICAgIE1QSV9GaW5hbGl6ZSgpOyAgICAvLyBGaW5hbGl6ZSBNUEkgZW52aXJvbm1lbnQKcmV0dXJuIDA7Cn0KCg==