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?
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 the MPI_recv()
. The status struct contains the actual source of the message.
int buf[32]; MPI_Status status; // receive message from any source MPI_recv(buf, 32, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status); int replybuf[]; // send reply back to sender of the message received above MPI_send(buf, 32, MPI_INT, status.MPI_SOURCE, tag, MPI_COMM_WORLD);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With