#include <mpi.h>
#include <iostream>
int main(int argc, char** argv) {
MPI_Init(&argc, &argv);
// Your MPI code goes here
MPI_Finalize();
return 0;
}
int numProcesses, rank;
MPI_Comm_size(MPI_COMM_WORLD, &numProcesses);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
std::cout << "Total processes: " << numProcesses << ", My rank: " << rank << std::endl;
int data = 100;
if (rank == 0) {
MPI_Send(&data, 1, MPI_INT, 1, 0, MPI_COMM_WORLD);
} else if (rank == 1) {
MPI_Recv(&data, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
std::cout << "Received data: " << data << std::endl;
}
int sendData = 100;
int recvData;
MPI_Bcast(&sendData, 1, MPI_INT, 0, MPI_COMM_WORLD); // Broadcast data from rank 0 to all other ranks
MPI_Reduce(&sendData, &recvData, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); // Reduce data from all ranks to rank 0
MPI_Request request;
MPI_Isend(&data, 1, MPI_INT, 1, 0, MPI_COMM_WORLD, &request);
// Perform other computation
MPI_Wait(&request, MPI_STATUS_IGNORE); // Wait for the send operation to complete
CiNpbmNsdWRlIDxtcGkuaD4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CiAgICBNUElfSW5pdCgmYXJnYywgJmFyZ3YpOwoKICAgIC8vIFlvdXIgTVBJIGNvZGUgZ29lcyBoZXJlCgogICAgTVBJX0ZpbmFsaXplKCk7CiAgICByZXR1cm4gMDsKfQoKaW50IG51bVByb2Nlc3NlcywgcmFuazsKTVBJX0NvbW1fc2l6ZShNUElfQ09NTV9XT1JMRCwgJm51bVByb2Nlc3Nlcyk7Ck1QSV9Db21tX3JhbmsoTVBJX0NPTU1fV09STEQsICZyYW5rKTsKCnN0ZDo6Y291dCA8PCAiVG90YWwgcHJvY2Vzc2VzOiAiIDw8IG51bVByb2Nlc3NlcyA8PCAiLCBNeSByYW5rOiAiIDw8IHJhbmsgPDwgc3RkOjplbmRsOwoKaW50IGRhdGEgPSAxMDA7CmlmIChyYW5rID09IDApIHsKICAgIE1QSV9TZW5kKCZkYXRhLCAxLCBNUElfSU5ULCAxLCAwLCBNUElfQ09NTV9XT1JMRCk7Cn0gZWxzZSBpZiAocmFuayA9PSAxKSB7CiAgICBNUElfUmVjdigmZGF0YSwgMSwgTVBJX0lOVCwgMCwgMCwgTVBJX0NPTU1fV09STEQsIE1QSV9TVEFUVVNfSUdOT1JFKTsKICAgIHN0ZDo6Y291dCA8PCAiUmVjZWl2ZWQgZGF0YTogIiA8PCBkYXRhIDw8IHN0ZDo6ZW5kbDsKfQoKaW50IHNlbmREYXRhID0gMTAwOwppbnQgcmVjdkRhdGE7Ck1QSV9CY2FzdCgmc2VuZERhdGEsIDEsIE1QSV9JTlQsIDAsIE1QSV9DT01NX1dPUkxEKTsgLy8gQnJvYWRjYXN0IGRhdGEgZnJvbSByYW5rIDAgdG8gYWxsIG90aGVyIHJhbmtzCk1QSV9SZWR1Y2UoJnNlbmREYXRhLCAmcmVjdkRhdGEsIDEsIE1QSV9JTlQsIE1QSV9TVU0sIDAsIE1QSV9DT01NX1dPUkxEKTsgLy8gUmVkdWNlIGRhdGEgZnJvbSBhbGwgcmFua3MgdG8gcmFuayAwCgpNUElfUmVxdWVzdCByZXF1ZXN0OwpNUElfSXNlbmQoJmRhdGEsIDEsIE1QSV9JTlQsIDEsIDAsIE1QSV9DT01NX1dPUkxELCAmcmVxdWVzdCk7Ci8vIFBlcmZvcm0gb3RoZXIgY29tcHV0YXRpb24KTVBJX1dhaXQoJnJlcXVlc3QsIE1QSV9TVEFUVVNfSUdOT1JFKTsgLy8gV2FpdCBmb3IgdGhlIHNlbmQgb3BlcmF0aW9uIHRvIGNvbXBsZXRlCg==