The receive call does not specify the size of an
incoming message, but only an upper bound. The
source or tag of a received message may not be known if
wildcard values were used in a receive operation.
Also, if multiple requests
are completed by a single MPI function (see
Section ), a distinct error code may be
error code
returned for each request. (Usually, the error code is returned as
the value of the function in C, and as the value of the
IERROR argument in Fortran.)
This information is returned by the status argument of MPI_RECV. The type of status is defined by MPI. Status variables need to be explicitly allocated by the user, that is, they are not system objects.
In C, status is a structure of type MPI_Status that contains three fields named MPI_SOURCE, MPI_TAG, and MPI_ERROR; the structure may contain additional fields. Thus, status.MPI_SOURCE, status.MPI_TAG and status.MPI_ERROR contain the source, tag and error code, respectively, of the received message.
In Fortran, status is an array of INTEGERs of length MPI_STATUS_SIZE. The three constants MPI_SOURCE, MPI_STATUS_SIZE MPI_TAG and MPI_ERROR MPI_SOURCE MPI_TAG MPI_ERROR are the indices of the entries that store the source, tag and error fields. Thus status(MPI_SOURCE), status(MPI_TAG) and status(MPI_ERROR) contain, respectively, the source, the tag and the error code of the received message.
The status argument also returns information on the length of the message received. However, this information is not directly available as a field of the status variable and a call to MPI_GET_COUNT is required to ``decode'' this information.
MPI_GET_COUNT(status, datatype, count) IN status return status of receive operation IN datatype datatype of each receive buffer entry OUT count number of received entriesMPI_Get_count(MPI_Status *status, MPI_Datatype datatype, int *count)
MPI_GET_COUNT(STATUS, DATATYPE, COUNT, IERROR)INTEGER STATUS(MPI_STATUS_SIZE), DATATYPE, COUNT, IERROR
MPI_GET_COUNT takes as input the status set
by MPI_RECV and computes
the number of entries received. The number of entries
is returned in count.
The datatype argument should match the argument
provided to the receive call that set status.
(Section explains that
MPI_GET_COUNT may return, in certain situations, the value
MPI_UNDEFINED.)
MPI_UNDEFINED