I am implementing in MPI a program in which the main process (with rank=0) should be able to receive requests from the other processes who ask for values of variables that are only known by the root. If I make MPI_Recv(...) by the rank 0, I have to specify the rank of the process which sends request to the root, but i cannot control that since the processes don't run in the order 1,2,3,.... How can I receive the request from any rank and use the number of the emitting process to send it the necessary information?
MPI recv from an unknown source
33.6k Views Asked by shkk At
2
There are 2 best solutions below
0

MPI_ANY_SOURCE is the obvious answer.
However, if all the ranks will be sending a request to rank 0, then MPI_Irecv combined with MPI_Testall might also work as a pattern. This will allow the MPI_Send calls to be executed in any order, and the information can be received and processed in the order that the MPI_Irecv calls are matched.
This assumes you are using C. There are similar concepts in C++ and Fortran. You would just specify
MPI_ANY_SOURCE
as the source in theMPI_recv()
. The status struct contains the actual source of the message.