#include <mpi.h>
#include <string>
#include <iostream>
int main( int argc, char *argv[] )
{
// declare rank and the size of the process
int rank, size;
MPI_Init( &argc, &argv );
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
int number = -1;
double startT = 0.0, endT = 0.0;
//MPI_Request ireq,ireq1;
//MPI_Status istatus,istatus2;
if (rank != 0) {
MPI_Recv(&number, 1, MPI_INT, rank-1, 0, MPI_COMM_WORLD,MPI_STATUS_IGNORE); //
std::cout<<"Process "<< rank <<"recieved number "<< number << "from process "<< rank-1 << std::endl;
MPI_Send(&number, 1, MPI_INT, (rank+1)%size, 0, MPI_COMM_WORLD); // 0 sending to 1
std::cout<<"Process "<< rank <<"sent number "<< number << "to process "<< rank+1 << std::endl;
} else
{
number = 23;
startT = MPI_Wtime();
MPI_Send(&number, 1, MPI_INT, (rank+1)%size, 0, MPI_COMM_WORLD); // 0 sending to 1
//std::cout<<"Process "<< rank <<"sent number "<< number << "to process "<< rank+1 << std::endl;
}
if (rank == 0) {
MPI_Recv(&number, 1, MPI_INT, size-1, 0, MPI_COMM_WORLD,MPI_STATUS_IGNORE); //
std::cout<<"Process "<< rank <<"recieved number "<< number << "from process "<< size-1 << std::endl;
endT= MPI_Wtime();
std::cout << "Duration =" << endT-startT << std::endl;
}
MPI_Finalize();
return 0;
}
I2luY2x1ZGUgPG1waS5oPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8aW9zdHJlYW0+CgppbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCgp7CgovLyBkZWNsYXJlIHJhbmsgYW5kIHRoZSBzaXplIG9mIHRoZSBwcm9jZXNzCmludCByYW5rLCBzaXplOwoKTVBJX0luaXQoICZhcmdjLCAmYXJndiApOwoKTVBJX0NvbW1fcmFuayhNUElfQ09NTV9XT1JMRCwgJnJhbmspOwoKTVBJX0NvbW1fc2l6ZShNUElfQ09NTV9XT1JMRCwgJnNpemUpOwoKaW50IG51bWJlciA9IC0xOwoKZG91YmxlIHN0YXJ0VCA9IDAuMCwgZW5kVCA9IDAuMDsKCi8vTVBJX1JlcXVlc3QgaXJlcSxpcmVxMTsKCi8vTVBJX1N0YXR1cyBpc3RhdHVzLGlzdGF0dXMyOwoKaWYgKHJhbmsgIT0gMCkgewoKCU1QSV9SZWN2KCZudW1iZXIsIDEsIE1QSV9JTlQsIHJhbmstMSwgMCwgTVBJX0NPTU1fV09STEQsTVBJX1NUQVRVU19JR05PUkUpOyAvLyAJCglzdGQ6OmNvdXQ8PCJQcm9jZXNzICI8PCByYW5rIDw8InJlY2lldmVkIG51bWJlciAiPDwgbnVtYmVyIDw8ICJmcm9tIHByb2Nlc3MgIjw8IHJhbmstMSA8PCBzdGQ6OmVuZGw7CgoJTVBJX1NlbmQoJm51bWJlciwgMSwgTVBJX0lOVCwgKHJhbmsrMSklc2l6ZSwgMCwgTVBJX0NPTU1fV09STEQpOyAvLyAwIHNlbmRpbmcgdG8gMSAKCXN0ZDo6Y291dDw8IlByb2Nlc3MgIjw8IHJhbmsgPDwic2VudCBudW1iZXIgIjw8IG51bWJlciA8PCAidG8gcHJvY2VzcyAiPDwgcmFuaysxIDw8IHN0ZDo6ZW5kbDsKCgp9IGVsc2UgCnsKCW51bWJlciA9IDIzOwoJc3RhcnRUID0gTVBJX1d0aW1lKCk7CglNUElfU2VuZCgmbnVtYmVyLCAxLCBNUElfSU5ULCAocmFuaysxKSVzaXplLCAwLCBNUElfQ09NTV9XT1JMRCk7IC8vIDAgc2VuZGluZyB0byAxIAoJLy9zdGQ6OmNvdXQ8PCJQcm9jZXNzICI8PCByYW5rIDw8InNlbnQgbnVtYmVyICI8PCBudW1iZXIgPDwgInRvIHByb2Nlc3MgIjw8IHJhbmsrMSA8PCBzdGQ6OmVuZGw7CgoJfQoKCglpZiAocmFuayA9PSAwKSB7CgoKCU1QSV9SZWN2KCZudW1iZXIsIDEsIE1QSV9JTlQsIHNpemUtMSwgMCwgTVBJX0NPTU1fV09STEQsTVBJX1NUQVRVU19JR05PUkUpOyAvLyAJCglzdGQ6OmNvdXQ8PCJQcm9jZXNzICI8PCByYW5rIDw8InJlY2lldmVkIG51bWJlciAiPDwgbnVtYmVyIDw8ICJmcm9tIHByb2Nlc3MgIjw8IHNpemUtMSA8PCBzdGQ6OmVuZGw7CgllbmRUPSBNUElfV3RpbWUoKTsKCXN0ZDo6Y291dCA8PCAiRHVyYXRpb24gPSIgPDwgZW5kVC1zdGFydFQgPDwgc3RkOjplbmRsOwoKCn0KCk1QSV9GaW5hbGl6ZSgpOwpyZXR1cm4gMDsKCn0K