274 lines
8.8 KiB
Groff
274 lines
8.8 KiB
Groff
.\" Man page generated from reStructuredText.
|
|
.
|
|
.TH "MPI_WAITSOME" "3" "Feb 14, 2025" "" "Open MPI"
|
|
.
|
|
.nr rst2man-indent-level 0
|
|
.
|
|
.de1 rstReportMargin
|
|
\\$1 \\n[an-margin]
|
|
level \\n[rst2man-indent-level]
|
|
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|
-
|
|
\\n[rst2man-indent0]
|
|
\\n[rst2man-indent1]
|
|
\\n[rst2man-indent2]
|
|
..
|
|
.de1 INDENT
|
|
.\" .rstReportMargin pre:
|
|
. RS \\$1
|
|
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
|
|
. nr rst2man-indent-level +1
|
|
.\" .rstReportMargin post:
|
|
..
|
|
.de UNINDENT
|
|
. RE
|
|
.\" indent \\n[an-margin]
|
|
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|
.nr rst2man-indent-level -1
|
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
|
..
|
|
.sp
|
|
\fI\%MPI_Waitsome\fP — Waits for some given communications to complete.
|
|
.SH SYNTAX
|
|
.SS C Syntax
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
#include <mpi.h>
|
|
|
|
int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
|
|
int *outcount, int array_of_indices[],
|
|
MPI_Status array_of_statuses[])
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SS Fortran Syntax
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
USE MPI
|
|
! or the older form: INCLUDE \(aqmpif.h\(aq
|
|
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
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SS Fortran 2008 Syntax
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
USE mpi_f08
|
|
MPI_Waitsome(incount, array_of_requests, outcount, array_of_indices,
|
|
array_of_statuses, ierror)
|
|
INTEGER, INTENT(IN) :: incount
|
|
TYPE(MPI_Request), INTENT(INOUT) :: array_of_requests(incount)
|
|
INTEGER, INTENT(OUT) :: outcount, array_of_indices(*)
|
|
TYPE(MPI_Status) :: array_of_statuses(*)
|
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SH INPUT PARAMETERS
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fBincount\fP: Length of array_of_requests (integer).
|
|
.IP \(bu 2
|
|
\fBarray_of_requests\fP: Array of requests (array of handles).
|
|
.UNINDENT
|
|
.SH OUTPUT PARAMETERS
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fBoutcount\fP: Number of completed requests (integer).
|
|
.IP \(bu 2
|
|
\fBarray_of_indices\fP: Array of indices of operations that completed (array of integers).
|
|
.IP \(bu 2
|
|
\fBarray_of_statuses\fP: Array of status objects for operations that completed (array of status).
|
|
.IP \(bu 2
|
|
\fBierror\fP: Fortran only: Error status (integer).
|
|
.UNINDENT
|
|
.SH DESCRIPTION
|
|
.sp
|
|
Waits until at least one of the operations associated with active
|
|
handles 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; the array
|
|
is indexed from 0 in C and from 1 in Fortran). Returns in the first
|
|
outcount locations of the array array_of_status the status for these
|
|
completed operations. If a request that completed was allocated by a
|
|
nonblocking communication call, then it is deallocated, and the
|
|
associated handle is set to MPI_REQUEST_NULL.
|
|
.sp
|
|
If the list contains no active handles, then the call returns
|
|
immediately with outcount = MPI_UNDEFINED.
|
|
.sp
|
|
When one or more of the communications completed by \fI\%MPI_Waitsome\fP fails,
|
|
then it is desirable to return specific information on each
|
|
communication. 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 reasons
|
|
(such as invalid arguments). In such cases, it will not update the error
|
|
fields of the statuses.
|
|
.sp
|
|
If your application does not need to examine the \fIarray_of_statuses\fP
|
|
field, you can save resources by using the predefined constant
|
|
MPI_STATUSES_IGNORE can be used as a special value for the
|
|
\fIarray_of_statuses\fP argument.
|
|
.sp
|
|
\fBExample:\fP Same code as the example in the \fI\%MPI_Waitany\fP man page, but
|
|
using \fI\%MPI_Waitsome\fP\&.
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
CALL MPI_COMM_SIZE(comm, size, ierr)
|
|
CALL MPI_COMM_RANK(comm, rank, ierr)
|
|
IF(rank > 0) THEN ! client code
|
|
DO
|
|
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
|
|
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, i, tag, &
|
|
comm, requests(indices(i)), ierr)
|
|
END DO
|
|
END DO
|
|
END IF
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SH NOTES
|
|
.sp
|
|
The array of indices are in the range 0 to incount\-1 for C and in the
|
|
range 1 to incount for Fortran.
|
|
.SH ERRORS
|
|
.sp
|
|
Almost all MPI routines return an error value; C routines as the return result
|
|
of the function and Fortran routines in the last argument.
|
|
.sp
|
|
Before the error value is returned, the current MPI error handler associated
|
|
with the communication object (e.g., communicator, window, file) is called.
|
|
If no communication object is associated with the MPI call, then the call is
|
|
considered attached to MPI_COMM_SELF and will call the associated MPI error
|
|
handler. When MPI_COMM_SELF is not initialized (i.e., before
|
|
\fI\%MPI_Init\fP/\fI\%MPI_Init_thread\fP, after \fI\%MPI_Finalize\fP, or when using the Sessions
|
|
Model exclusively) the error raises the initial error handler. The initial
|
|
error handler can be changed by calling \fI\%MPI_Comm_set_errhandler\fP on
|
|
MPI_COMM_SELF when using the World model, or the mpi_initial_errhandler CLI
|
|
argument to mpiexec or info key to \fI\%MPI_Comm_spawn\fP/\fI\%MPI_Comm_spawn_multiple\fP\&.
|
|
If no other appropriate error handler has been set, then the MPI_ERRORS_RETURN
|
|
error handler is called for MPI I/O functions and the MPI_ERRORS_ABORT error
|
|
handler is called for all other MPI functions.
|
|
.sp
|
|
Open MPI includes three predefined error handlers that can be used:
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fBMPI_ERRORS_ARE_FATAL\fP
|
|
Causes the program to abort all connected MPI processes.
|
|
.IP \(bu 2
|
|
\fBMPI_ERRORS_ABORT\fP
|
|
An error handler that can be invoked on a communicator,
|
|
window, file, or session. When called on a communicator, it
|
|
acts as if \fI\%MPI_Abort\fP was called on that communicator. If
|
|
called on a window or file, acts as if \fI\%MPI_Abort\fP was called
|
|
on a communicator containing the group of processes in the
|
|
corresponding window or file. If called on a session,
|
|
aborts only the local process.
|
|
.IP \(bu 2
|
|
\fBMPI_ERRORS_RETURN\fP
|
|
Returns an error code to the application.
|
|
.UNINDENT
|
|
.sp
|
|
MPI applications can also implement their own error handlers by calling:
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fI\%MPI_Comm_create_errhandler\fP then \fI\%MPI_Comm_set_errhandler\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_File_create_errhandler\fP then \fI\%MPI_File_set_errhandler\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Session_create_errhandler\fP then \fI\%MPI_Session_set_errhandler\fP or at \fI\%MPI_Session_init\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Win_create_errhandler\fP then \fI\%MPI_Win_set_errhandler\fP
|
|
.UNINDENT
|
|
.sp
|
|
Note that MPI does not guarantee that an MPI program can continue past
|
|
an error.
|
|
.sp
|
|
See the \fI\%MPI man page\fP for a full list of \fI\%MPI error codes\fP\&.
|
|
.sp
|
|
See the Error Handling section of the MPI\-3.1 standard for
|
|
more information.
|
|
.sp
|
|
For each invocation of \fI\%MPI_Waitsome\fP, if one or more requests
|
|
generate an MPI error, only the \fIfirst\fP MPI request that caused an
|
|
error will be passed to its corresponding error handler. No other
|
|
error handlers will be invoked (even if multiple requests generated
|
|
errors). However, \fIall\fP requests that generate an error will have a
|
|
relevant error code set in the corresponding \fBstatus.MPI_ERROR\fP
|
|
field (unless \fBMPI_STATUSES_IGNORE\fP was used).
|
|
.sp
|
|
If the invoked error handler allows \fI\%MPI_Waitsome\fP to return to
|
|
the caller, the value \fBMPI_ERR_IN_STATUS\fP will be returned in the C
|
|
and Fortran bindings.
|
|
.sp
|
|
\fBSEE ALSO:\fP
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fI\%MPI_Comm_set_errhandler\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_File_set_errhandler\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Test\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Testall\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Testany\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Testsome\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Wait\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Waitall\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Waitany\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Win_set_errhandler\fP
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SH COPYRIGHT
|
|
2003-2025, The Open MPI Community
|
|
.\" Generated by docutils manpage writer.
|
|
.
|