#include <iostream>
#include <mpi.h>
#include <cstdlib>
int main(int argc, char **argv) {
MPI_Init(&argc, &argv);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
// Read the local value of the process
// local_value will hold a specific int for process 0, and another for process 1
int local_value;
local_value
= atoi(argv
[1]);
int other_value;
if (rank == 0) {
// Code for the first process:
// 1- Send the value to process 1
// 2- Receive the value from process 1 (in other_value)
// 3- Print the sum of the two values on stdout
MPI_Send(&local_value, 1, MPI_INT, 1, 0, MPI_COMM_WORLD);
MPI_Recv(&other_value, 1, MPI_INT, 1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
std::cout << "SUM IS: " << (local_value + other_value) << std::endl;
}
else {
// Code for the second process:
// 1- Receive the value from process 0 (in other_value)
// 2- Send the value to process 0
// 3- Print the product of the two values on stdout
MPI_Recv(&other_value, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
MPI_Send(&local_value, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
std::cout << "PRODUCT IS: " << (local_value * other_value) << std::endl;
}
MPI_Finalize();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bXBpLmg+CiNpbmNsdWRlIDxjc3RkbGliPgoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CiAgICBNUElfSW5pdCgmYXJnYywgJmFyZ3YpOwoKICAgIGludCByYW5rOwogICAgTVBJX0NvbW1fcmFuayhNUElfQ09NTV9XT1JMRCwgJnJhbmspOwoKICAgIC8vIFJlYWQgdGhlIGxvY2FsIHZhbHVlIG9mIHRoZSBwcm9jZXNzCiAgICAvLyBsb2NhbF92YWx1ZSB3aWxsIGhvbGQgYSBzcGVjaWZpYyBpbnQgZm9yIHByb2Nlc3MgMCwgYW5kIGFub3RoZXIgZm9yIHByb2Nlc3MgMQogICAgaW50IGxvY2FsX3ZhbHVlOwogICAgbG9jYWxfdmFsdWUgPSBhdG9pKGFyZ3ZbMV0pOwoKICAgIGludCBvdGhlcl92YWx1ZTsKICAgIGlmIChyYW5rID09IDApIHsKICAgICAgICAvLyBDb2RlIGZvciB0aGUgZmlyc3QgcHJvY2VzczoKICAgICAgICAvLyAxLSBTZW5kIHRoZSB2YWx1ZSB0byBwcm9jZXNzIDEKICAgICAgICAvLyAyLSBSZWNlaXZlIHRoZSB2YWx1ZSBmcm9tIHByb2Nlc3MgMSAoaW4gb3RoZXJfdmFsdWUpCiAgICAgICAgLy8gMy0gUHJpbnQgdGhlIHN1bSBvZiB0aGUgdHdvIHZhbHVlcyBvbiBzdGRvdXQKICAgICAgICBNUElfU2VuZCgmbG9jYWxfdmFsdWUsIDEsIE1QSV9JTlQsIDEsIDAsIE1QSV9DT01NX1dPUkxEKTsKICAgICAgICBNUElfUmVjdigmb3RoZXJfdmFsdWUsIDEsIE1QSV9JTlQsIDEsIDAsIE1QSV9DT01NX1dPUkxELCBNUElfU1RBVFVTX0lHTk9SRSk7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJTVU0gSVM6ICIgPDwgKGxvY2FsX3ZhbHVlICsgb3RoZXJfdmFsdWUpIDw8IHN0ZDo6ZW5kbDsKICAgIH0KICAgIGVsc2UgewogICAgICAgIC8vIENvZGUgZm9yIHRoZSBzZWNvbmQgcHJvY2VzczoKICAgICAgICAvLyAxLSBSZWNlaXZlIHRoZSB2YWx1ZSBmcm9tIHByb2Nlc3MgMCAoaW4gb3RoZXJfdmFsdWUpCiAgICAgICAgLy8gMi0gU2VuZCB0aGUgdmFsdWUgdG8gcHJvY2VzcyAwCiAgICAgICAgLy8gMy0gUHJpbnQgdGhlIHByb2R1Y3Qgb2YgdGhlIHR3byB2YWx1ZXMgb24gc3Rkb3V0CiAgICAgICAgTVBJX1JlY3YoJm90aGVyX3ZhbHVlLCAxLCBNUElfSU5ULCAwLCAwLCBNUElfQ09NTV9XT1JMRCwgTVBJX1NUQVRVU19JR05PUkUpOwogICAgICAgIE1QSV9TZW5kKCZsb2NhbF92YWx1ZSwgMSwgTVBJX0lOVCwgMCwgMCwgTVBJX0NPTU1fV09STEQpOwogICAgICAgIHN0ZDo6Y291dCA8PCAiUFJPRFVDVCBJUzogIiA8PCAobG9jYWxfdmFsdWUgKiBvdGhlcl92YWx1ZSkgPDwgc3RkOjplbmRsOwogICAgfQoKICAgIE1QSV9GaW5hbGl6ZSgpOwoKICAgIHJldHVybiAwOwp9Cg==