[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Generalized Request Progress
Hi,
when I remember correctly, the Forum let this discussion open,
i.e., there was no decision to force a strong progress rule.
And this discussion was related to the rules about MPI_Finalize.
Marc Snir's program is probably incorrect, because process rank 1
does not call MPI_Finalize and the clarification in MPI 1.2 states:
"Each process must call MPI_Finalize before it exits".
(MPI-2, 3.2.2, page 22, line 18)
Additionally, one can look at
line 44-45:
"MPI_FINALIZE guarantees that all local actions required by
communications the user has completed will, in fact,
occur before it returns."
In Marc's example, process 1 does not give the MPI library the chance
to do "all local actions required by communications" because
MPI_FINALIZE is not called.
Or very simple: The MPI standard does not require an MPI call to
finish a non-blocking call (MPI 1.1, 3.7.4), but it requires
MPI_Finalize on all processes (MPI-2, 3.2.2).
Rolf
On Tue, 04 Sep 2007 17:27:51 +0200
Joachim Worringen <joachim@xxxxxxxxxxxxxx> wrote:
>Hubert Ritzdorf wrote:
>> Thus, the behaviour of the MPI implementations which wait for the
>> "separate receive complete call"
>> (or other MPI communication calls such as MPI_Iprobe or MPI_Test)
>> in order to complete the 1st send operation correspond to the MPI
>> standard and don't need a fix.
>
>An old topic coming up again and again... To me, it's an indication of an ambiguity in the standard. Hubert is right with the interpretation of the part of the standard he has quoted, but there is another part that is of interest here, namely the progress rule (MPI 1.1, 3.7.4):
>"
>Progress A call to MPI_WAIT that completes a receive will eventually terminate and return if a matching send has been started, unless the send is satisfied by another receive. In particular, if the matching send is nonblocking, then the receive should complete even if no call is executed by the sender to complete the send. Similarly, a call to MPI_WAIT that completes a send will eventually return if a matching receive has been started, unless the receive is satisfied by another send, and even if no call is executed to complete the receive.
>"
>
>It's necessary to differentiate between (1)"message data completely placed in user-provided buffer" and (2)"data written into/taken of the network to avoid blocking". To assert (1), the condition quoted by Hubert needs to be fulfilled. To assert (2), the progress rule describes that *starting* the related send/recv operation is sufficient. And a nonblocking send/recv actually *does* start the operation once it's matched. Here, Marc is right.
>
>IMHO, the standard needs clarification.
>
> Joachim
>
>--
>Joachim Worringen, Software Architect, Dolphin Interconnect Solutions
>phone ++49/(0)228/324 08 17 - http://www.dolphinics.com
>
Dr. Rolf Rabenseifner . . . . . . . . . .. email rabenseifner@xxxxxxx
High Performance Computing Center (HLRS) . phone ++49(0)711/685-65530
University of Stuttgart . . . . . . . . .. fax ++49(0)711 / 685-65832
Head of Dpmt Parallel Computing . . . www.hlrs.de/people/rabenseifner
Nobelstr. 19, D-70550 Stuttgart, Germany . (Office: Allmandring 30)