#include <iostream>
#include <mpi.h>
int main() {
MPI_Init(NULL, NULL);
int rank, size;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if (size != 2) {
std::cout << "This program requires exactly 2 processes.\n";
MPI_Finalize();
return 1;
}
int x = 12345; // Sample data to be sent
if (rank == 0) {
double T1 = MPI_Wtime();
MPI_Send(&x, 1, MPI_INT, 1, 0, MPI_COMM_WORLD); // Sending data to process 1
double T2 = MPI_Wtime();
double TP0 = T2 - T1;
double TP1;
MPI_Recv(&TP1, 1, MPI_DOUBLE, 1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); // Receiving data from process 1
std::cout << "TP0: " << TP0 << std::endl;
std::cout << "TP1: " << TP1 << std::endl;
}
else {
double T1 = MPI_Wtime();
MPI_Recv(&x, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); // Receiving data from process 0
double T2 = MPI_Wtime();
double TP1 = T2 - T1;
MPI_Send(&TP1, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD); // Sending data to process 0
}
MPI_Finalize();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bXBpLmg+CgppbnQgbWFpbigpIHsKICAgIE1QSV9Jbml0KE5VTEwsIE5VTEwpOwoKICAgIGludCByYW5rLCBzaXplOwogICAgTVBJX0NvbW1fcmFuayhNUElfQ09NTV9XT1JMRCwgJnJhbmspOwogICAgTVBJX0NvbW1fc2l6ZShNUElfQ09NTV9XT1JMRCwgJnNpemUpOwoKICAgIGlmIChzaXplICE9IDIpIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIlRoaXMgcHJvZ3JhbSByZXF1aXJlcyBleGFjdGx5IDIgcHJvY2Vzc2VzLlxuIjsKICAgICAgICBNUElfRmluYWxpemUoKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICBpbnQgeCA9IDEyMzQ1OyAgLy8gU2FtcGxlIGRhdGEgdG8gYmUgc2VudAoKICAgIGlmIChyYW5rID09IDApIHsKICAgICAgICBkb3VibGUgVDEgPSBNUElfV3RpbWUoKTsKICAgICAgICBNUElfU2VuZCgmeCwgMSwgTVBJX0lOVCwgMSwgMCwgTVBJX0NPTU1fV09STEQpOyAgLy8gU2VuZGluZyBkYXRhIHRvIHByb2Nlc3MgMQogICAgICAgIGRvdWJsZSBUMiA9IE1QSV9XdGltZSgpOwogICAgICAgIGRvdWJsZSBUUDAgPSBUMiAtIFQxOwogICAgICAgIGRvdWJsZSBUUDE7CiAgICAgICAgTVBJX1JlY3YoJlRQMSwgMSwgTVBJX0RPVUJMRSwgMSwgMCwgTVBJX0NPTU1fV09STEQsIE1QSV9TVEFUVVNfSUdOT1JFKTsgIC8vIFJlY2VpdmluZyBkYXRhIGZyb20gcHJvY2VzcyAxCiAgICAgICAgc3RkOjpjb3V0IDw8ICJUUDA6ICIgPDwgVFAwIDw8IHN0ZDo6ZW5kbDsKICAgICAgICBzdGQ6OmNvdXQgPDwgIlRQMTogIiA8PCBUUDEgPDwgc3RkOjplbmRsOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgZG91YmxlIFQxID0gTVBJX1d0aW1lKCk7CiAgICAgICAgTVBJX1JlY3YoJngsIDEsIE1QSV9JTlQsIDAsIDAsIE1QSV9DT01NX1dPUkxELCBNUElfU1RBVFVTX0lHTk9SRSk7ICAvLyBSZWNlaXZpbmcgZGF0YSBmcm9tIHByb2Nlc3MgMAogICAgICAgIGRvdWJsZSBUMiA9IE1QSV9XdGltZSgpOwogICAgICAgIGRvdWJsZSBUUDEgPSBUMiAtIFQxOwogICAgICAgIE1QSV9TZW5kKCZUUDEsIDEsIE1QSV9ET1VCTEUsIDAsIDAsIE1QSV9DT01NX1dPUkxEKTsgIC8vIFNlbmRpbmcgZGF0YSB0byBwcm9jZXNzIDAKICAgIH0KCiAgICBNUElfRmluYWxpemUoKTsKICAgIHJldHVybiAwOwp9