Provided by: openmpi-doc_4.1.6-7ubuntu2_all bug

NAME

       MPI_Finalize  - Terminates MPI execution environment.

SYNTAX

C Syntax

       #include <mpi.h>
       int MPI_Finalize()

Fortran Syntax

       USE MPI
       ! or the older form: INCLUDE 'mpif.h'
       MPI_FINALIZE(IERROR)
            INTEGER   IERROR

Fortran 2008 Syntax

       USE mpi_f08
       MPI_Finalize(ierror)
            INTEGER, OPTIONAL, INTENT(OUT) :: ierror

C++ Syntax

       #include <mpi.h>
       void Finalize()

OUTPUT PARAMETER

       IERROR    Fortran only: Error status (integer).

DESCRIPTION

       This  routine  cleans  up all MPI states. Once this routine is called, no MPI routine (not even MPI_Init)
       may be called, except for MPI_Get_version, MPI_Initialized, and MPI_Finalized. Unless there  has  been  a
       call  to  MPI_Abort,  you  must  ensure  that all pending communications involving a process are complete
       before the process calls MPI_Finalize. 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 MPI_Finalize, all pending sends must be matched by a receive, and all pending
       receives must be matched by a send.

       MPI_Finalize 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.

NOTES

       All processes must call this routine before exiting. All processes will still exist but may not make  any
       further MPI calls. MPI_Finalize guarantees that all local actions required by communications the user has
       completed  will, in fact, occur before it returns. However, MPI_Finalize guarantees nothing about pending
       communications that have not been completed;  completion  is  ensured  only  by  MPI_Wait,  MPI_Test,  or
       MPI_Request_free combined with some other verification of completion.

       For  example,  a  successful  return from a blocking communication operation or from MPI_Wait or MPI_Test
       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
       MPI_Request_free with a request handle generated by an  MPI_Isend  nullifies  the  handle  but  does  not
       guarantee  that  the  operation has completed. The MPI_Isend is complete only when a matching receive has
       completed.

       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 MPI_Finalize is called, it will first execute the
       equivalent of an MPI_Comm_free 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 MPI_Finalized will thus return "false" in any of these callback functions.
       Once you have done this with MPI_COMM_SELF, the results of MPI_Finalize are not specified.

ERRORS

       Almost all MPI routines return an error value; C routines as  the  value  of  the  function  and  Fortran
       routines in the last argument. C++ functions do not return errors. If the default error handler is set to
       MPI::ERRORS_THROW_EXCEPTIONS,  then  on  error  the  C++  exception  mechanism  will  be used to throw an
       MPI::Exception object.

       Before the error value is returned, the current MPI error handler  is  called.  By  default,  this  error
       handler  aborts  the  MPI  job,  except  for  I/O  function errors. The error handler may be changed with
       MPI_Comm_set_errhandler; the predefined error handler MPI_ERRORS_RETURN may be used to cause error values
       to be returned. Note that MPI does not guarantee that an MPI program can continue past an error.

SEE ALSO

       MPI_Init
       MPI_Init_thread
       MPI_Initialized
       MPI_Finalized

4.1.6                                             Sep 30, 2023                                   MPI_Finalize(3)