Boost C++ Libraries: Ticket #12829: Documentation of nonblocking limitations comparaed to MPI standard https://svn.boost.org/trac10/ticket/12829 <p> There is a inconspicuous note in the point-to-point documentation: </p> <blockquote> <p> Moreover, the MPI standard does not guarantee that the receive makes any progress before a call to "wait" or "test", although most implementations of the C MPI do allow receives to progress before the call to "wait" or "test". Boost.MPI, on the other hand, generally requires "test" or "wait" calls to make progress. </p> </blockquote> <p> That sounds like MPI makes no additional restrictions compared to the MPI standard, but is more strict than other MPI implementations. That is not correct. The MPI standard explicitly requires a correct MPI implementation to complete a send after the other process "posts the matching (nonblocking) receive even if process one has not yet reached the completing wait call." (Section 3.7.4). The provided Example </p> <p> The MPI standard gives an example that should not deadlock, translating it to boost.mpi with serialized datatypes (see attachment), it hangs. This is due to the two-phase transfer, where the matching receive is actually only posted on request::wait. </p> <p> Unfortunately I don't see any way around that limitation. However, the documentation should be improved. It should clearly state that this is a limitation compared to the MPI standard progress guarantee. I believe the wording should also be more clear, i.e. "A synchronous send may not complete until the matching (nonblocking) receive has reached the completing wait call." </p> en-us Boost C++ Libraries /htdocs/site/boost.png https://svn.boost.org/trac10/ticket/12829 Trac 1.4.3 anonymous Fri, 10 Feb 2017 16:24:32 GMT attachment set https://svn.boost.org/trac10/ticket/12829 https://svn.boost.org/trac10/ticket/12829 <ul> <li><strong>attachment</strong> → <span class="trac-field-new">ihang.cpp</span> </li> </ul> Ticket