Every call to MPI_RECV includes a status argument, wherein
the system can return details about the message received.
There are also a number of other MPI calls
where status is returned.
An object of type
MPI_STATUS is not an MPI opaque object; its structure is declared
in mpi.h and mpif.h, and it exists in the user's program. In many
cases, application programs are constructed so that it is unnecessary for them
to examine the status fields. In these cases, it is a waste for the user
to allocate a status object, and it is particularly wasteful for the MPI
implementation to fill in fields in this object.
To cope with this problem, there are two predefined constants,
MPI_STATUS_IGNORE and MPI_STATUSES_IGNORE, which when
passed to a receive, wait, or test function, inform the implementation that
the status fields are not to be filled in. Note that
MPI_STATUS_IGNORE is not a special type of MPI_STATUS
object; rather, it is a special value for the argument. In C one would expect
it to be NULL, not the address of a special MPI_STATUS.
MPI_STATUS_IGNORE, and the array version
MPI_STATUSES_IGNORE, can be used everywhere a status argument is
passed to a receive, wait, or test function. MPI_STATUS_IGNORE
cannot be used when status is an IN argument.
Note that in Fortran MPI_STATUS_IGNORE and MPI_STATUSES_IGNORE are
objects like MPI_BOTTOM (not usable for initialization or
assignment). See Section Named Constants
.
In general, this optimization can apply to all functions for which
status or an array of statuses is an OUT argument.
Note that this converts status into an INOUT argument.
The functions that can be passed MPI_STATUS_IGNORE are all the various forms of
MPI_RECV, MPI_TEST, and MPI_WAIT, as well as
MPI_REQUEST_GET_STATUS.
When an array is passed, as in the
MPI_{TEST|WAIT}{ALL|SOME}
functions, a separate constant, MPI_STATUSES_IGNORE, is passed for
the array argument.
It is possible for an MPI function to return MPI_ERR_IN_STATUS
even when MPI_STATUS_IGNORE or MPI_STATUSES_IGNORE has
been passed to that function.
MPI_STATUS_IGNORE and MPI_STATUSES_IGNORE are not
required to have the same values in C and Fortran.
It is not allowed to have some of the statuses in an array of statuses for
MPI_{TEST|WAIT}{ALL|SOME}
functions set to
MPI_STATUS_IGNORE; one either specifies ignoring all of
the statuses in such a call with MPI_STATUSES_IGNORE, or
none of them by passing normal statuses in all positions in the array
of statuses.
There are no C++ bindings for
MPI_STATUS_IGNORE or MPI_STATUSES_IGNORE.
To allow an OUT or INOUT MPI::Status argument to be ignored,
all MPI C++ bindings that have OUT or INOUT MPI::Status
parameters are overloaded with a second version that omits the OUT or INOUT MPI::Status parameter.
void MPI::Comm::Probe(int source, int tag, MPI::Status& status)
const
void MPI::Comm::Probe(int source, int tag) const
ExampleThe C++ bindings for MPI_PROBE are:
![]()
![]()
![]()
Up: Blocking Send and Receive Operations
Next: Data Type Matching and Data Conversion
Previous: Return Status
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