Nick Collier
I running into an issue where an irecv followed by a send results in deadlock. A simple test case, [snip] int other = world.rank() == 0 ? 1 : 0; cout << world.rank() << " irecv from " << other << endl; receipt.request = world.irecv(other, 0, receipt.items); cout << world.rank() << " sending to " << other << endl; world.send(other, 0, msg); [snip]
Does this even work with non-boost MPI? My reading (skimming) of the MPI spec does not generate the implication that synchronous sends can be asynchronously received. See: http://www.mpi-forum.org/docs/mpi21-report/node58.htm#Node58 Note the emphasized part in: The fields in a status object returned by a call to MPI_WAIT, MPI_TEST, or any of the other derived functions *( MPI_{TEST|WAIT}{ALL|SOME|ANY}), where the request corresponds to a send call, are undefined, with two exceptions: The error status field will contain valid information if the wait or test call returned with MPI_ERR_IN_STATUS; and the returned status can be queried by the call MPI_TEST_CANCELLED.* _Wait and _Test not working *does* imply, to me, that synchronous and asynchronous communication may not be mixed for the same communication. -tom