Upgrade macos
This commit is contained in:
@@ -1,183 +1,259 @@
|
||||
.\" -*- nroff -*-
|
||||
.\" Copyright 2006-2008 Sun Microsystems, Inc.
|
||||
.\" Copyright (c) 1996 Thinking Machines Corporation
|
||||
.\" Copyright (c) 2010-2015 Cisco Systems, Inc. All rights reserved.
|
||||
.\" $COPYRIGHT$
|
||||
.TH MPI_Init_thread 3 "Mar 26, 2019" "4.0.1" "Open MPI"
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.SH NAME
|
||||
\fBMPI_Init_thread\fP \- Initializes the MPI execution environment
|
||||
.TH "MPI_INIT_THREAD" "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_Init_thread\fP — Initializes the MPI execution environment
|
||||
.SH SYNTAX
|
||||
.ft R
|
||||
.
|
||||
.SH C Syntax
|
||||
.SS C Syntax
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
.sp
|
||||
.nf
|
||||
.ft C
|
||||
#include <mpi.h>
|
||||
int MPI_Init_thread(int *\fIargc\fP, char ***\fIargv\fP,
|
||||
int \fIrequired\fP, int *\fIprovided\fP)
|
||||
|
||||
int MPI_Init_thread(int *argc, char ***argv,
|
||||
int required, int *provided)
|
||||
.ft P
|
||||
.fi
|
||||
.SH INPUT PARAMETERS
|
||||
.ft R
|
||||
.TP 1i
|
||||
argc
|
||||
C/C++ only: Pointer to the number of arguments.
|
||||
.TP 1i
|
||||
argv
|
||||
C/C++ only: Argument vector.
|
||||
.TP 1i
|
||||
required
|
||||
Desired level of thread support (integer).
|
||||
.
|
||||
.
|
||||
.SH OUTPUT PARAMETERS
|
||||
.ft R
|
||||
.TP 1i
|
||||
provided
|
||||
Available level of thread support (integer).
|
||||
.TP 1i
|
||||
IERROR
|
||||
Fortran only: Error status (integer).
|
||||
.
|
||||
.
|
||||
.SH DESCRIPTION
|
||||
.ft R
|
||||
This routine, or MPI_Init, must be called before most other MPI
|
||||
routines are called. There are a small number of exceptions, such as
|
||||
MPI_Initialized and MPI_Finalized. MPI can be initialized at most
|
||||
once; subsequent calls to MPI_Init or MPI_Init_thread are erroneous.
|
||||
.sp
|
||||
MPI_Init_thread, as compared to MPI_Init, has a provision to request a
|
||||
certain level of thread support in \fIrequired\fP:
|
||||
.TP 2.4i
|
||||
MPI_THREAD_SINGLE
|
||||
Only one thread will execute.
|
||||
.TP 2.4i
|
||||
MPI_THREAD_FUNNELED
|
||||
If the process is multithreaded, only the thread that called
|
||||
MPI_Init_thread will make MPI calls.
|
||||
.TP 2.4i
|
||||
MPI_THREAD_SERIALIZED
|
||||
If the process is multithreaded, only one thread will make MPI library
|
||||
calls at one time.
|
||||
.TP 2.4i
|
||||
MPI_THREAD_MULTIPLE
|
||||
If the process is multithreaded, multiple threads may call MPI at once
|
||||
with no restrictions.
|
||||
.
|
||||
.PP
|
||||
The level of thread support available to the program is set in
|
||||
\fIprovided\fP, except in C++, where it is the return value of the
|
||||
function. In Open MPI, the value is dependent on how the library was
|
||||
configured and built. Note that there is no guarantee that
|
||||
\fIprovided\fP will be greater than or equal to \fIrequired\fP.
|
||||
.sp
|
||||
Also note that calling MPI_Init_thread with a
|
||||
.I required
|
||||
value of
|
||||
.I MPI_THREAD_SINGLE
|
||||
is equivalent to calling MPI_Init.
|
||||
.sp
|
||||
All MPI programs must contain a call to MPI_Init or
|
||||
MPI_Init_thread. Open MPI accepts the C/C++ \fIargc\fP and \fIargv\fP
|
||||
arguments to main, but neither modifies, interprets, nor distributes
|
||||
them:
|
||||
.UNINDENT
|
||||
.UNINDENT
|
||||
.SS Fortran Syntax
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
.sp
|
||||
.nf
|
||||
{
|
||||
/* declare variables */
|
||||
MPI_Init_thread(&argc, &argv, req, &prov);
|
||||
/* parse arguments */
|
||||
/* main program */
|
||||
MPI_Finalize();
|
||||
}
|
||||
.ft C
|
||||
USE MPI
|
||||
! or the older form: INCLUDE \(aqmpif.h\(aq
|
||||
MPI_INIT_THREAD(REQUIRED, PROVIDED, IERROR)
|
||||
INTEGER REQUIRED, PROVIDED, IERROR
|
||||
.ft P
|
||||
.fi
|
||||
.
|
||||
.SH NOTES
|
||||
.ft R
|
||||
The Fortran version does not have provisions for \fIargc\fP and
|
||||
\fIargv\fP and takes only IERROR.
|
||||
.UNINDENT
|
||||
.UNINDENT
|
||||
.SS Fortran 2008 Syntax
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
.sp
|
||||
It is the caller's responsibility to check the value of \fIprovided\fP,
|
||||
as it may be less than what was requested in \fIrequired\fP.
|
||||
.nf
|
||||
.ft C
|
||||
USE mpi_f08
|
||||
MPI_Init_thread(required, provided, ierror)
|
||||
INTEGER, INTENT(IN) :: required
|
||||
INTEGER, INTENT(OUT) :: provided
|
||||
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
||||
.ft P
|
||||
.fi
|
||||
.UNINDENT
|
||||
.UNINDENT
|
||||
.SH INPUT PARAMETERS
|
||||
.INDENT 0.0
|
||||
.IP \(bu 2
|
||||
\fBargc\fP: C only: Pointer to the number of arguments.
|
||||
.IP \(bu 2
|
||||
\fBargv\fP: C only: Argument vector.
|
||||
.IP \(bu 2
|
||||
\fBrequired\fP: Desired level of thread support (integer).
|
||||
.UNINDENT
|
||||
.SH OUTPUT PARAMETERS
|
||||
.INDENT 0.0
|
||||
.IP \(bu 2
|
||||
\fBprovided\fP: Available level of thread support (integer).
|
||||
.IP \(bu 2
|
||||
\fBierror\fP: Fortran only: Error status (integer).
|
||||
.UNINDENT
|
||||
.SH DESCRIPTION
|
||||
.sp
|
||||
This routine, or \fI\%MPI_Init\fP, must be called before most other MPI routines
|
||||
are called. There are a small number of exceptions, such as
|
||||
\fI\%MPI_Initialized\fP and \fI\%MPI_Finalized\fP\&. MPI can be initialized at most once;
|
||||
subsequent calls to \fI\%MPI_Init\fP or \fI\%MPI_Init_thread\fP are erroneous.
|
||||
.sp
|
||||
\fI\%MPI_Init_thread\fP, as compared to \fI\%MPI_Init\fP, has a provision to request a
|
||||
certain level of thread support in \fIrequired\fP:
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B MPI_THREAD_SINGLE
|
||||
Only one thread will execute.
|
||||
.TP
|
||||
.B MPI_THREAD_FUNNELED
|
||||
If the process is multithreaded, only the thread that called
|
||||
\fI\%MPI_Init_thread\fP will make MPI calls.
|
||||
.TP
|
||||
.B MPI_THREAD_SERIALIZED
|
||||
If the process is multithreaded, only one thread will make MPI
|
||||
library calls at one time.
|
||||
.TP
|
||||
.B MPI_THREAD_MULTIPLE
|
||||
If the process is multithreaded, multiple threads may call MPI at
|
||||
once with no restrictions.
|
||||
.UNINDENT
|
||||
.sp
|
||||
The level of thread support available to the program is set in
|
||||
\fIprovided\fP\&. In Open MPI, the value is dependent on how the library was
|
||||
configured and built. Note that there is no guarantee that \fIprovided\fP
|
||||
will be greater than or equal to \fIrequired\fP\&.
|
||||
.sp
|
||||
Also note that calling \fI\%MPI_Init_thread\fP with a \fIrequired\fP value of
|
||||
MPI_THREAD_SINGLE is equivalent to calling \fI\%MPI_Init\fP\&.
|
||||
.sp
|
||||
All MPI programs must contain a call to \fI\%MPI_Init\fP or \fI\%MPI_Init_thread\fP\&.
|
||||
Open MPI accepts the C \fIargc\fP and \fIargv\fP arguments to main, but neither
|
||||
modifies, interprets, nor distributes them:
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
.sp
|
||||
.nf
|
||||
.ft C
|
||||
/* declare variables */
|
||||
MPI_Init_thread(&argc, &argv, req, &prov);
|
||||
/* parse arguments */
|
||||
/* main program */
|
||||
MPI_Finalize();
|
||||
.ft P
|
||||
.fi
|
||||
.UNINDENT
|
||||
.UNINDENT
|
||||
.SH NOTES
|
||||
.sp
|
||||
The Fortran version does not have provisions for \fBargc\fP and \fBargv\fP and
|
||||
takes only \fBIERROR\fP\&.
|
||||
.sp
|
||||
It is the caller’s responsibility to check the value of \fBprovided\fP, as
|
||||
it may be less than what was requested in \fBrequired\fP\&.
|
||||
.sp
|
||||
The MPI Standard does not say what a program can do before an
|
||||
MPI_Init_thread or after an MPI_Finalize. In the Open MPI
|
||||
implementation, it should do as little as possible. In particular,
|
||||
avoid anything that changes the external state of the program, such as
|
||||
opening files, reading standard input, or writing to standard output.
|
||||
.
|
||||
.
|
||||
.SH MPI_THREAD_MULTIPLE Support
|
||||
.
|
||||
MPI_THREAD_MULTIPLE support is included if Open MPI was configured
|
||||
with the --enable-mpi-thread-multiple configure switch. You can check the
|
||||
output of
|
||||
.BR ompi_info (1)
|
||||
to see if Open MPI has MPI_THREAD_MULTIPLE support:
|
||||
.
|
||||
.PP
|
||||
.nf
|
||||
shell$ ompi_info | grep -i thread
|
||||
Thread support: posix (mpi: yes, progress: no)
|
||||
shell$
|
||||
.fi
|
||||
.
|
||||
.PP
|
||||
The "mpi: yes" portion of the above output indicates that Open MPI was
|
||||
compiled with MPI_THREAD_MULTIPLE support.
|
||||
.
|
||||
.PP
|
||||
Note that MPI_THREAD_MULTIPLE support is only lightly tested. It
|
||||
likely does not work for thread-intensive applications. Also note
|
||||
that
|
||||
.I only
|
||||
the MPI point-to-point communication functions for the BTL's listed
|
||||
below are considered thread safe. Other support functions (e.g., MPI
|
||||
attributes) have not been certified as safe when simultaneously used
|
||||
by multiple threads.
|
||||
.
|
||||
.PP
|
||||
.nf
|
||||
tcp
|
||||
sm
|
||||
mx
|
||||
elan
|
||||
self
|
||||
.fi
|
||||
.
|
||||
.PP
|
||||
Note that Open MPI's thread support is in a fairly early stage; the
|
||||
above devices are likely to
|
||||
.IR work ,
|
||||
but the latency is likely to be fairly high. Specifically, efforts so
|
||||
far have concentrated on
|
||||
.IR correctness ,
|
||||
not
|
||||
.I performance
|
||||
(yet).
|
||||
.
|
||||
.
|
||||
.SH ERRORS
|
||||
.ft R
|
||||
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.
|
||||
\fI\%MPI_Init_thread\fP or after an \fI\%MPI_Finalize\fP\&. In the Open MPI
|
||||
implementation, it should do as little as possible. In particular, avoid
|
||||
anything that changes the external state of the program, such as opening
|
||||
files, reading standard input, or writing to standard output.
|
||||
.SS MPI_THREAD_MULTIPLE Support
|
||||
.sp
|
||||
\fBMPI_THREAD_MULTIPLE\fP support is included if the environment in which
|
||||
Open MPI was built supports threading. You can check the output of
|
||||
\fI\%ompi_info(1)\fP to see if Open MPI has
|
||||
\fBMPI_THREAD_MULTIPLE\fP support:
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
.sp
|
||||
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.
|
||||
.
|
||||
.SH SEE ALSO
|
||||
.ft R
|
||||
.nf
|
||||
MPI_Init
|
||||
MPI_Initialized
|
||||
MPI_Finalize
|
||||
MPI_Finalized
|
||||
.ft C
|
||||
shell$ ompi_info | grep "Thread support"
|
||||
Thread support: posix (MPI_THREAD_MULTIPLE: yes, OPAL support: yes, OMPI progress: no, Event lib: yes)
|
||||
shell$
|
||||
.ft P
|
||||
.fi
|
||||
.UNINDENT
|
||||
.UNINDENT
|
||||
.sp
|
||||
The \fBMPI_THREAD_MULTIPLE: yes\fP portion of the above output indicates
|
||||
that Open MPI was compiled with \fBMPI_THREAD_MULTIPLE\fP support.
|
||||
.sp
|
||||
Note that there is a small performance penalty for using
|
||||
\fBMPI_THREAD_MULTIPLE\fP support; latencies for short messages will be higher
|
||||
as compared to when using \fBMPI_THREAD_SINGLE\fP, for example.
|
||||
.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
|
||||
.INDENT 0.0
|
||||
.IP \(bu 2
|
||||
\fI\%MPI_Init\fP
|
||||
.IP \(bu 2
|
||||
\fI\%MPI_Initialized\fP
|
||||
.IP \(bu 2
|
||||
\fI\%MPI_Finalize\fP
|
||||
.IP \(bu 2
|
||||
\fI\%MPI_Finalized\fP
|
||||
.UNINDENT
|
||||
.UNINDENT
|
||||
.UNINDENT
|
||||
.SH COPYRIGHT
|
||||
2003-2025, The Open MPI Community
|
||||
.\" Generated by docutils manpage writer.
|
||||
.
|
||||
|
||||
Reference in New Issue
Block a user