First, I recall to people the text we accepted about nonblocking
operaions:
The word complete is used with respect to operations, requests, and
communications. An {\bf operation completes} when the user is allowed
to re-use resources, and any output buffers have been updated; i.e. a
call to \mpifunc{MPI\_TEST} will return
\mpiarg{flag}~=~\consti{true}. A {\bf request is completed} by a call
to wait, which returns, or a test or get status call which returns
\mpiarg{flag}~=~\consti{true}. This completing call has two effects:
the status is extracted from the request; in the case of test and
wait, if the request was nonpersistent, it is {\bf freed}. A {\bf
communication completes} when all participating operations complete.
The subtle point here is "completes" vs "completed".
Based on this I changed p. 2, line 13 from:
therefore the application must notify \MPI/ when the operation is
complete.
to:
therefore the application must notify \MPI/ when the operation
completes.
and p. 3, lines 27-28 from:
Note that \mpifunc{query\_fn} is invoked only after the request was
marked complete by a call to \mpifunc{MPI\_GREQUEST\_COMPLETE};
to:
Note that \mpifunc{query\_fn} is invoked only after
\mpifunc{MPI\_GREQUEST\_COMPLETE} is called on the request;
and p. 4, lines 20-22 from:
\MPI/ passes to the callback function \mpiarg{complete=true} if the
request is complete when the callback is invoked,
\mpiarg{complete=false}, otherwise.
to:
\MPI/ passes to the callback function \mpiarg{complete=true} if
\mpifunc{MPI\_GREQUEST\_COMPLETE} was already called on the request,
and \mpiarg{complete=false}, otherwise.
and p. 5, lines 1-4 from:
The call informs \MPI/ that generalized request \mpiarg{request} is
complete (see definitions in Section~\ref{terms}). A call to
\mpifunc{MPI\_WAIT(request)} will return and a call to
\mpifunc{MPI\_TEST(request, flag)} will return \mpiarg{flag=true} only
after the request was marked complete by a call to
\mpifunc{MPI\_GREQUEST\_COMPLETE}.
to:
The call informs \MPI/ that the generalized request \mpiarg{request}
completes (see definitions in Section~\ref{terms}). A call to
\mpifunc{MPI\_WAIT(request)} will return and a call to
\mpifunc{MPI\_TEST(request, flag)} will return \mpiarg{flag=true} only
after the generalized request completes by a call to
\mpifunc{MPI\_GREQUEST\_COMPLETE}.
These are subtle changes. Do people think it fixes up the problem? I
have not changed the name of MPI_GREQUEST_COMPLETE. I would consider
MPI_GREQUEST_COMPLETES if people really want it. Given the changes I
made in the text I am not currently planning to do this.
Steve