Opened 6 years ago

#12829 new Bugs

Documentation of nonblocking limitations comparaed to MPI standard

Reported by: thomas.ilsche@… Owned by: Matthias Troyer
Milestone: To Be Determined Component: mpi
Version: Boost 1.61.0 Severity: Not Applicable
Keywords: Cc:

Description

There is a inconspicuous note in the point-to-point documentation:

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.

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

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.

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."

Attachments (1)

ihang.cpp (574 bytes ) - added by anonymous 6 years ago.

Download all attachments as: .zip

Change History (1)

by anonymous, 6 years ago

Attachment: ihang.cpp added
Note: See TracTickets for help on using tickets.