195 lines
6.8 KiB
Groff
195 lines
6.8 KiB
Groff
.\" Man page generated from reStructuredText.
|
|
.
|
|
.TH "MPI_FINALIZE" "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_Finalize\fP — Terminates MPI execution environment.
|
|
.SH SYNTAX
|
|
.SS C Syntax
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
#include <mpi.h>
|
|
|
|
int MPI_Finalize()
|
|
.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_FINALIZE(IERROR)
|
|
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_Finalize(ierror)
|
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SH OUTPUT PARAMETER
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fBierror\fP : Fortran only: Error status (integer).
|
|
.UNINDENT
|
|
.SH DESCRIPTION
|
|
.sp
|
|
This routine cleans up all MPI states. Once this routine is called, no
|
|
MPI routine (not even MPI_Init) may be called, except for
|
|
\fI\%MPI_Get_version\fP, \fI\%MPI_Initialized\fP, and \fI\%MPI_Finalized\fP\&. Unless there has
|
|
been a call to \fI\%MPI_Abort\fP, you must ensure that all pending
|
|
communications involving a process are complete before the process calls
|
|
\fI\%MPI_Finalize\fP\&. If the call returns, each process may either continue
|
|
local computations or exit without participating in further
|
|
communication with other processes. At the moment when the last process
|
|
calls \fI\%MPI_Finalize\fP, all pending sends must be matched by a receive, and
|
|
all pending receives must be matched by a send.
|
|
.sp
|
|
\fI\%MPI_Finalize\fP is collective over all connected processes. If no processes
|
|
were spawned, accepted, or connected, then this means it is collective
|
|
over MPI_COMM_WORLD. Otherwise, it is collective over the union of all
|
|
processes that have been and continue to be connected.
|
|
.SH NOTES
|
|
.sp
|
|
All processes must call this routine before exiting. All processes will
|
|
still exist but may not make any further MPI calls. \fI\%MPI_Finalize\fP
|
|
guarantees that all local actions required by communications the user
|
|
has completed will, in fact, occur before it returns. However,
|
|
\fI\%MPI_Finalize\fP guarantees nothing about pending communications that have
|
|
not been completed; completion is ensured only by \fI\%MPI_Wait\fP, \fI\%MPI_Test\fP, or
|
|
\fI\%MPI_Request_free\fP combined with some other verification of completion.
|
|
.sp
|
|
For example, a successful return from a blocking communication operation
|
|
or from \fI\%MPI_Wait\fP or \fI\%MPI_Test\fP means that the communication is completed
|
|
by the user and the buffer can be reused, but does not guarantee that
|
|
the local process has no more work to do. Similarly, a successful return
|
|
from \fI\%MPI_Request_free\fP with a request handle generated by an \fI\%MPI_Isend\fP
|
|
nullifies the handle but does not guarantee that the operation has
|
|
completed. The \fI\%MPI_Isend\fP is complete only when a matching receive has
|
|
completed.
|
|
.sp
|
|
If you would like to cause actions to happen when a process finishes,
|
|
attach an attribute to MPI_COMM_SELF with a callback function. Then,
|
|
when \fI\%MPI_Finalize\fP is called, it will first execute the equivalent of an
|
|
\fI\%MPI_Comm_free\fP on MPI_COMM_SELF. This will cause the delete callback
|
|
function to be executed on all keys associated with MPI_COMM_SELF in an
|
|
arbitrary order. If no key has been attached to MPI_COMM_SELF, then no
|
|
callback is invoked. This freeing of MPI_COMM_SELF happens before any
|
|
other parts of MPI are affected. Calling \fI\%MPI_Finalized\fP will thus return
|
|
“false” in any of these callback functions. Once you have done this with
|
|
MPI_COMM_SELF, the results of \fI\%MPI_Finalize\fP are not specified.
|
|
.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
|
|
\fBSEE ALSO:\fP
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
\fI\%MPI_Init\fP
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SH COPYRIGHT
|
|
2003-2025, The Open MPI Community
|
|
.\" Generated by docutils manpage writer.
|
|
.
|