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?
相关问题
- About MPI_Reduce
- Boost MPI doesn't free resources when listenin
- Kill an mpi process
- Detecting not using MPI when running with mpirun/m
- CMake: set path to MPI headers and binaries manual
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.