Your observation is correct - Open MPI will only make progress on a passive target communication if the target enters the MPI library in some meaningful way (tests on a request which hasn't completed, makes a one-sided call, starts communication, etc.).
I'm the author of the onesided code in Open MPI and believe that it's behavior is likely outside the parameters intended in the standard with regards to progress. The intent of the code was to leverage the existing progress thread options in the lowest level of the interface to asynchronously progress the one-sided messages. However, the community has been slow to properly support threaded progress, so my plan was thwarted.
Asynchronous progress of passive target communication over a variety of networks without lower-level asynchronous progress is a difficult task. Unfortunately, I've since moved on to other projects and certainly don't have the time to work on such an implementation.
On Feb 4, 2010, at 10:57 AM, Dorian Krause wrote:
> Hi Dave,
> thanks for your answer.
> The question to me is: Is an MPI process supposed to eventually exit or
> can it be a server process running for eternity?
> In the later case, no progress will be made ...
> I think it might be helpful to users to give a clarification in the
> standard (e.g. in an "advice to users."), especially because obviously
> the target in passive target communication is not allowed to be quite so
> passive ...
>> For the finalize requirement, see MPI-2.2 page 291, lines 36-38:
>> This routine cleans up all MPI state. Each process must call
>> MPI_FINALIZE before it exits. Unless there has been a call to
>> MPI_ABORT, each process must ensure that all pending nonblocking
>> communications are (locally) complete before calling MPI_FINALIZE.
>> MPI is intentionally vague on progress issues and leaves lots of room
>> for implementation choices.
>> I'll let the Open MPI folks answer the questions about their
>> users mailing list
> users mailing list