MPI supports several different types of requests besides those for
point-to-point operations.
These range from
MPI calls for I/O to generalized requests. It is desirable to allow
these calls use the same request mechanism. This allows one to
wait or test on different types of requests. However,
MPI_{TEST|WAIT}{ANY|SOME|ALL} returns a status
with information about the request. With the generalization of
requests, one needs to define what information will be returned in the
status object.
Each MPI
call fills in the appropriate fields in the status object.
Any unused fields will
have undefined values. A call to
MPI_{TEST|WAIT}{ANY|SOME|ALL} can modify any of
the fields in the status object. Specifically, it can modify fields
that are undefined. The fields with meaningful value for a given
request are defined in the sections with the new request.
Generalized requests raise additional considerations. Here, the user
provides the functions to deal with the request. Unlike other MPI
calls, the user needs to provide the information to be returned in
status. The status argument is provided directly to the callback
function where the status needs to be set. Users can directly set the
values in 3 of the 5 status values. The count and cancel fields are
opaque. To overcome this,
these calls
are provided:
int MPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype, int count)
MPI_STATUS_SET_ELEMENTS(STATUS, DATATYPE, COUNT, IERROR)
void MPI::Status::Set_elements(const MPI::Datatype& datatype, int count)
This call modifies the opaque part of status so that a call
to MPI_GET_ELEMENTS will return count.
MPI_GET_COUNT will return a compatible value.
The number of elements is set instead of the count because the former
can deal with
a
nonintegral number of datatypes.
( End of rationale.)
This is similar to the restriction that holds
when
count is set by a
receive operation: in that case, the calls to
MPI_GET_COUNT and MPI_GET_ELEMENTS must use a
datatype with the same signature as the datatype used in the
receive call.
( End of rationale.)
int MPI_Status_set_cancelled(MPI_Status *status, int flag)
MPI_STATUS_SET_CANCELLED(STATUS, FLAG, IERROR)
void MPI::Status::Set_cancelled(bool flag)
If flag is set to true then a subsequent call to
MPI_TEST_CANCELLED(status, flag) will also return flag = true,
otherwise it will return
false.
Users are advised not to reuse the status fields for values other than
those for which they were intended. Doing so may lead to unexpected
results when using the status object. For example, calling
MPI_GET_ELEMENTS may cause an error if the value is
out of range or it may be impossible to detect such an error. The
extra_state argument provided with a generalized request can
be used to return information that does not logically belong in
status.
Furthermore, modifying the values in a status set internally by MPI,
e.g., MPI_RECV, may lead to unpredictable results and is
strongly discouraged.
( End of advice to users.)
MPI_STATUS_SET_ELEMENTS(status, datatype, count) INOUT status status
with which to associate count
(Status) IN datatype datatype associated with count (handle) IN count number of elements to associate with status (integer)
INTEGER STATUS(MPI_STATUS_SIZE), DATATYPE, COUNT, IERROR
Rationale.
A subsequent call to MPI_GET_COUNT(status, datatype, count) or to
MPI_GET_ELEMENTS(status, datatype, count) must use a
datatype argument that has the same type signature as the
datatype argument that was used in the call to
MPI_STATUS_SET_ELEMENTS.
Rationale.
MPI_STATUS_SET_CANCELLED(status, flag) INOUT status status
with which to associate cancel flag
(Status) IN flag if true indicates request was cancelled (logical)
INTEGER STATUS(MPI_STATUS_SIZE), IERROR
LOGICAL FLAG
Advice to users.
![]()
![]()
![]()
Up: Contents
Next: MPI and Threads
Previous: Examples
Return to MPI-2.1 Standard Index
Return to MPI Forum Home Page
MPI-2.0 of July 1, 2008
HTML Generated on July 6, 2008