Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MPI recv from an unknown source

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?

like image 591
shkk Avatar asked Dec 03 '10 18:12

shkk


1 Answers

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); 
like image 144
KeithB Avatar answered Sep 22 '22 19:09

KeithB