« Return to documentation listing
NAME
MPI_Waitsome - Waits for some given communications to complete.
SYNTAX
C Syntax
#include <mpi.h>
int MPI_Waitsome(int incount, MPI_Request *array_of_requests,
int *outcount, int *array_of_indices,
MPI_Status *array_of_statuses)
Fortran Syntax
INCLUDE 'mpif.h'
MPI_WAITSOME(INCOUNT, ARRAY_OF_REQUESTS, OUTCOUNT,
ARRAY_OF_INDICES, ARRAY_OF_STATUSES, IERROR)
INTEGER INCOUNT, ARRAY_OF_REQUESTS(*), OUTCOUNT
INTEGER ARRAY_OF_INDICES(*)
INTEGER ARRAY_OF_STATUSES(MPI_STATUS_SIZE*)
INTEGER IERROR
C++ Syntax
#include <mpi.h>
static int Request::Waitsome(int incount, Request
array_of_requests[], int array_of_indices[], Status array_of_statuses[])
static int Request::Waitsome(int incount, Request
array_of_requests[], int array_of_indices[])
INPUT PARAMETERS
incount Length of array_of_requests (integer).
array_of_requests
Array of requests (array of handles).
OUTPUT PARAMETERS
outcount Number of completed requests (integer).
array_of_indices
Array of indices of operations that completed (array of inte-
gers).
array_of_statuses
Array of status objects for operations that completed (array
of status).
IERROR Fortran only: Error status (integer).
DESCRIPTION
Waits until at least one of the operations associated with active han-
dles in the list have completed. Returns in outcount the number of
requests from the list array_of_requests that have completed. Returns
in the first outcount locations of the array array_of_indices the
indices of these operations (index within the array array_of_requests;
When one or more of the communications completed by MPI_Waitsome fails,
then it is desirable to return specific information on each communica-
tion. The arguments outcount, array_of_indices, and array_of_statuses
will be adjusted to indicate completion of all communications that have
succeeded or failed. The call will return the error code
MPI_ERR_IN_STATUS and the error field of each status returned will be
set to indicate success or to indicate the specific error that
occurred. The call will return MPI_SUCCESS if no request resulted in an
error, and will return another error code if it failed for other rea-
sons (such as invalid arguments). In such cases, it will not update the
error fields of the statuses.
If your application does not need to examine the array_of_statuses
field, you can save resources by using the predefined constant MPI_STA-
TUSES_IGNORE can be used as a special value for the array_of_statuses
argument.
Example: Same code as the example in the MPI_Waitany man page, but
using MPI_Waitsome.
CALL MPI_COMM_SIZE(comm, size, ierr)
CALL MPI_COMM_RANK(comm, rank, ierr)
IF(rank .GT. 0) THEN ! client code
DO WHILE(.TRUE.)
CALL MPI_ISEND(a, n, MPI_REAL, 0, tag, comm, request, ierr)
CALL MPI_WAIT(request, status, ierr)
END DO
ELSE ! rank=0 -- server code
DO i=1, size-1
CALL MPI_IRECV(a(1,i), n, MPI_REAL, i, tag,
comm, requests(i), ierr)
END DO
DO WHILE(.TRUE.)
CALL MPI_WAITSOME(size, request_list, numdone,
indices, statuses, ierr)
DO i=1, numdone
CALL DO_SERVICE(a(1, indices(i)))
CALL MPI_IRECV(a(1, indices(i)), n, MPI_REAL, 0, tag,
comm, requests(indices(i)), ierr)
END DO
END DO
END IF
NOTES
The array of indices are in the range 0 to incount-1 for C and in the
range 1 to incount for Fortran.
ERRORS
For each invocation of MPI_Waitsome, if one or more requests generate
an MPI exception, only the first MPI request that caused an exception
will be passed to its corresponding error handler. No other error han-
dlers will be invoked (even if multiple requests generated exceptions).
However, all requests that generate an exception will have a relevant
error code set in the corresponding status.MPI_ERROR field (unless
MPI_IGNORE_STATUSES was used).
If the invoked error handler allows MPI_Waitsome to return to the
caller, the value MPI_ERR_IN_STATUS will be returned in the C and For-
tran bindings. In C++, if the predefined error handler
MPI::ERRORS_THROW_EXCEPTIONS is used, the value MPI::ERR_IN_STATUS will
be contained in the MPI::Exception object. The MPI_ERROR field can
then be examined in the array of returned statuses to determine exactly
which request(s) generated an exception.
SEE ALSO
MPI_Comm_set_errhandler
MPI_File_set_errhandler
MPI_Test
MPI_Testall
MPI_Testany
MPI_Testsome
MPI_Wait
MPI_Waitall
MPI_Waitany
MPI_Win_set_errhandler
1.3.4 Nov 11, 2009 MPI_Waitsome(3)
« Return to documentation listing
|