There are times in which it would be convenient to have actions happen
when an MPI process finishes. For example, a routine may do
initializations that are useful until the MPI job (or that part
of the job that being terminated in the case of dynamically created
processes) is finished. This can be accomplished in MPI by
attaching an attribute to MPI_COMM_SELF with a callback
function. When
MPI_FINALIZEis 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 the reverse order that they were set on MPI_COMM_SELF. If no key has been
attached to MPI_COMM_SELF, then no callback is invoked.
The ``freeing'' of MPI_COMM_SELF occurs before any other parts
of MPI are affected. Thus, for example, calling
MPI_FINALIZED will return false in any of these
callback functions. Once done with MPI_COMM_SELF, the
order and rest of the actions taken by MPI_FINALIZE
is not specified.
Since attributes can be added from any supported language, the MPI
implementation needs to remember the creating language so the correct
callback is made.
Implementations that use the attribute delete callback on MPI_COMM_SELF
internally should register their internal callbacks before returning from
MPI_INIT / MPI_INIT_THREAD, so that libraries
or applications will not have portions of the MPI implementation shut
down before the application-level callbacks are made.
( End of advice to implementors.)
Advice
to implementors.
Up: Startup
Next: Determining Whether MPI Has Finished
Previous: Startup
Return to MPI-2.2 Standard Index
Return to MPI Forum Home Page
(Unofficial) MPI-2.2 of September 4, 2009
HTML Generated on September 10, 2009