#include <stdio.h>
#include <string.h>
#include <mpi.h>
#define MASTER 0
#define TAG 0
#define MESSAGE_SIZE 13 // Size of "Hello World!"
int main(int argc, char *argv[]) {
int rank, size;
char message[MESSAGE_SIZE];
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if (rank == MASTER) {
// Master process
strcpy(message
, "Hello World!");
// Send message to all workers
for (int i = 1; i < size; i++) {
MPI_Send(message, MESSAGE_SIZE, MPI_CHAR, i, TAG, MPI_COMM_WORLD);
}
} else {
// Worker processes
MPI_Recv(message, MESSAGE_SIZE, MPI_CHAR, MASTER, TAG, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
printf("Worker %d received message: %s\n", rank
, message
); }
MPI_Finalize();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPG1waS5oPgoKI2RlZmluZSBNQVNURVIgMAojZGVmaW5lIFRBRyAwCiNkZWZpbmUgTUVTU0FHRV9TSVpFIDEzIC8vIFNpemUgb2YgIkhlbGxvIFdvcmxkISIKCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKICAgIGludCByYW5rLCBzaXplOwogICAgY2hhciBtZXNzYWdlW01FU1NBR0VfU0laRV07CgogICAgTVBJX0luaXQoJmFyZ2MsICZhcmd2KTsKICAgIE1QSV9Db21tX3JhbmsoTVBJX0NPTU1fV09STEQsICZyYW5rKTsKICAgIE1QSV9Db21tX3NpemUoTVBJX0NPTU1fV09STEQsICZzaXplKTsKCiAgICBpZiAocmFuayA9PSBNQVNURVIpIHsKICAgICAgICAvLyBNYXN0ZXIgcHJvY2VzcwogICAgICAgIHN0cmNweShtZXNzYWdlLCAiSGVsbG8gV29ybGQhIik7CgogICAgICAgIC8vIFNlbmQgbWVzc2FnZSB0byBhbGwgd29ya2VycwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgICAgIE1QSV9TZW5kKG1lc3NhZ2UsIE1FU1NBR0VfU0laRSwgTVBJX0NIQVIsIGksIFRBRywgTVBJX0NPTU1fV09STEQpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgLy8gV29ya2VyIHByb2Nlc3NlcwogICAgICAgIE1QSV9SZWN2KG1lc3NhZ2UsIE1FU1NBR0VfU0laRSwgTVBJX0NIQVIsIE1BU1RFUiwgVEFHLCBNUElfQ09NTV9XT1JMRCwgTVBJX1NUQVRVU19JR05PUkUpOwogICAgICAgIHByaW50ZigiV29ya2VyICVkIHJlY2VpdmVkIG1lc3NhZ2U6ICVzXG4iLCByYW5rLCBtZXNzYWdlKTsKICAgIH0KCiAgICBNUElfRmluYWxpemUoKTsKICAgIHJldHVybiAwOwp9Cg==