On Sun, 10 Sep 2017, Michael Povolotskyi wrote:

I checked that there is no infinite loop.
Both ranks pass this->send (dest_processor_id, sendvec, type1, req, send_tag);
and hang on  this->receive (source_processor_id, recv, type2, recv_tag);

Both processes are sending zero elements, is this correct?

Not necessarily, but it definitely *could* be correct; there are a
number of places in the code where one processor has nothing to send
*except* for the fact that it has nothing to send.

Could you, please, suggest a simple MPI test to mimic this situation? Then I can check the MPI implementation.

I haven't checked if this even compiles, but I *believe* what we're
doing is:

// On 2 procs:
const unsigned int other = (rank+1)%2;

MPI_Request req;
MPI_ISend(NULL, 0, MPI_INT, other, 0, comm, &req);

MPI_Status stat;
MPI_Probe (other, MPI_ANY_TAG, comm, &stat);
MPI_Status stat2 = stat;
MPI_Recv(NULL, 0, MPI_INT, other, MPI_ANY_TAG, comm, &stat2);

MPI_Status stat3;
MPI_Wait(&req, &stat3);

That should do it, I think; if the same behavior happens then you'll
hang in MPI_Recv.
---
Roy

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Libmesh-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to