>
>
> >if (myrank == 0)
> > MPI_Send(&buff, count, MPI_BYTE, 1, 0, comm);
> >else if (myrank == 1)
> > MPI_Irecv(&buff, count, MPI_BYTE, 0, 0, comm, &status);
> >
> >This is a correct (albeit somewhat useless) MPI program: there is no
> >requirement to test or wait for each nonblocking call. The MPI standard says
> >quite explicitly that the blocking send call must complete, even if the
> >receiver never executes a wait or test call.
>
> Where does it say that? In the progress guarantee? As I said earlier,
> this is anything but explicit and we interpret it differently. Somewhere else?
>
pg 42, l37.
"... 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."
Replace "MPI_Send" by "MPI_ISend; MPI_Wait" in my example.
> The blocking send call could complete when the receiver calls any other
> MPI routine.
>
> The only crack I see is whether or not you believe a correct program
> must eventually call MPI_Finalize(). If you do not believe so, then
> the only danger for the above sender to not complete is for the
> the receiver to effectively code while(1); after MPI_Irecv().
> This seems like a useless example to force "off-line polling" on
> implementations.
>
> --
> Greg
-------------------
Marc Snir
IBM T.J. Watson Research Center
P.O. Box 218, Yorktown Heights, NY 10598
email: snir@watson.ibm.com
phone: 914-945-3204
fax: 914-945-4425