#include <mpi.h> //For MPI_functions, etc
#include <stdio.h>
#include <string.h> // For string functions
const int MAX_STRING = 100;
int main( ) {
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
, "Hello from process %d of %d!", my_rank
, comm_sz
); MPI_Send
(greeting
, strlen(greeting
)+1, MPI_CHAR
, 0, 0, MPI_COMM_WORLD
); } else {
printf("Hello 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
CiNpbmNsdWRlIDxtcGkuaD4gLy9Gb3IgTVBJX2Z1bmN0aW9ucywgZXRjCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RyaW5nLmg+IC8vIEZvciBzdHJpbmcgZnVuY3Rpb25zCmNvbnN0IGludCBNQVhfU1RSSU5HID0gMTAwOwoKaW50IG1haW4oICkgewogICAgY2hhciBncmVldGluZ1tNQVhfU1RSSU5HXTsKICAgIGludCBjb21tX3N6OyAvL051bWJlciBvZiBwcm9jZXNzZXMKICAgIGludCBteV9yYW5rOyAvL015IHByb2Nlc3MgcmFuawogICAgTVBJX0luaXQoTlVMTCwgTlVMTCk7CiAgICBNUElfQ29tbV9zaXplKE1QSV9DT01NX1dPUkxELCAmY29tbV9zeik7CiAgICBNUElfQ29tbV9yYW5rKE1QSV9DT01NX1dPUkxELCAmbXlfcmFuayk7CiAgICBpZiAobXlfcmFuayAhPSAwKSB7CiAgICAgICAgc3ByaW50ZihncmVldGluZywgIkhlbGxvIGZyb20gcHJvY2VzcyAlZCBvZiAlZCEiLCBteV9yYW5rLCBjb21tX3N6KTsKICAgICAgICBNUElfU2VuZChncmVldGluZywgc3RybGVuKGdyZWV0aW5nKSsxLCBNUElfQ0hBUiwgMCwgMCwgTVBJX0NPTU1fV09STEQpOwogICAgfSBlbHNlIHsKICAgICAgICBwcmludGYoIkhlbGxvIGZyb20gcHJvY2VzcyAlZCBvZiAlZCEgXG4iLCBteV9yYW5rLCBjb21tX3N6KTsKICAgICAgICBmb3IgKGludCBxPTE7IHE8Y29tbV9zejsgcSsrKSB7CiAgICAgICAgICAgIE1QSV9SZWN2KGdyZWV0aW5nLCBNQVhfU1RSSU5HLCBNUElfQ0hBUiwgcSwgMCwgTVBJX0NPTU1fV09STEQsIE1QSV9TVEFUVVNfSUdOT1JFKTsKICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgZ3JlZXRpbmcpOwogICAgICAgIH0KICAgIH0KICAgIE1QSV9GaW5hbGl6ZSgpOwogICAgcmV0dXJuIDA7Cn0gLy9tYWluCgo=