#include <mpi.h>
#include <stdio.h>
#include <string.h>
const int MAX_STRING = 100;
int main(void) {
char greeting[MAX_STRING];
int comm_sz; /* Number of processes */
int my_rank; /* My process rank */
MPI_Init(NULL, NULL);
MPI_Comm_size(MPI_COMM_WORLD, &comm_sz);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
if (my_rank != 0) {
sprintf(greeting
, "Greetings from process %d of %d!", my_rank
, comm_sz
); MPI_Send
(greeting
, strlen(greeting
)+1, MPI_CHAR
, 0, 0, MPI_COMM_WORLD
); } else {
printf("Greetings from process %d of %d!\n", my_rank
, comm_sz
); for (int q = 1; q < comm_sz; q++) {
MPI_Recv(greeting, MAX_STRING, MPI_CHAR, q, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
}
}
MPI_Finalize();
return 0;
} /* main */
I2luY2x1ZGUgPG1waS5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKY29uc3QgaW50IE1BWF9TVFJJTkcgPSAxMDA7CgppbnQgbWFpbih2b2lkKSB7CiAgICBjaGFyIGdyZWV0aW5nW01BWF9TVFJJTkddOwogICAgaW50IGNvbW1fc3o7ICAgIC8qIE51bWJlciBvZiBwcm9jZXNzZXMgKi8KICAgIGludCBteV9yYW5rOyAgICAvKiBNeSBwcm9jZXNzIHJhbmsgKi8KCiAgICBNUElfSW5pdChOVUxMLCBOVUxMKTsKICAgIE1QSV9Db21tX3NpemUoTVBJX0NPTU1fV09STEQsICZjb21tX3N6KTsKICAgIE1QSV9Db21tX3JhbmsoTVBJX0NPTU1fV09STEQsICZteV9yYW5rKTsKCiAgICBpZiAobXlfcmFuayAhPSAwKSB7CiAgICAgICAgc3ByaW50ZihncmVldGluZywgIkdyZWV0aW5ncyBmcm9tIHByb2Nlc3MgJWQgb2YgJWQhIiwgbXlfcmFuaywgY29tbV9zeik7CiAgICAgICAgTVBJX1NlbmQoZ3JlZXRpbmcsIHN0cmxlbihncmVldGluZykrMSwgTVBJX0NIQVIsIDAsIDAsIE1QSV9DT01NX1dPUkxEKTsKICAgIH0gZWxzZSB7CiAgICAgICAgcHJpbnRmKCJHcmVldGluZ3MgZnJvbSBwcm9jZXNzICVkIG9mICVkIVxuIiwgbXlfcmFuaywgY29tbV9zeik7CiAgICAgICAgZm9yIChpbnQgcSA9IDE7IHEgPCBjb21tX3N6OyBxKyspIHsKICAgICAgICAgICAgTVBJX1JlY3YoZ3JlZXRpbmcsIE1BWF9TVFJJTkcsIE1QSV9DSEFSLCBxLCAwLCBNUElfQ09NTV9XT1JMRCwgTVBJX1NUQVRVU19JR05PUkUpOwogICAgICAgICAgICBwcmludGYoIiVzXG4iLCBncmVldGluZyk7CiAgICAgICAgfQogICAgfQoKICAgIE1QSV9GaW5hbGl6ZSgpOwogICAgcmV0dXJuIDA7Cn0gLyogbWFpbiAqLwoK