a9511779a6
code and man pages. cmr:v1.4:reviewer=jsquyres and cmr:v1.5:reviewer=jsquyres This commit was SVN r25781.
196 строки
5.2 KiB
Plaintext
196 строки
5.2 KiB
Plaintext
. -*- nroff -*-
|
|
.\" Copyright 2006-2008 Sun Microsystems, Inc.
|
|
.\" Copyright (c) 1996 Thinking Machines Corporation
|
|
.\" Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
|
.TH MPI_Init_thread 3 "#OMPI_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
|
|
.
|
|
.SH NAME
|
|
\fBMPI_Init_thread\fP \- Initializes the MPI execution environment
|
|
.
|
|
.SH SYNTAX
|
|
.ft R
|
|
.
|
|
.SH C Syntax
|
|
.nf
|
|
#include <mpi.h>
|
|
int MPI_Init_thread(int *\fIargc\fP, char ***\fIargv\fP,
|
|
int \fIrequired\fP, int *\fIprovided\fP)
|
|
|
|
.fi
|
|
.SH Fortran Syntax
|
|
.nf
|
|
INCLUDE 'mpif.h'
|
|
MPI_INIT_THREAD(\fIREQUIRED, PROVIDED, IERROR\fP)
|
|
INTEGER \fIREQUIRED, PROVIDED, IERROR\fP
|
|
|
|
.fi
|
|
.SH C++ Syntax
|
|
.nf
|
|
#include <mpi.h>
|
|
int MPI::Init_thread(int& \fIargc\fP, char**& \fIargv\fP, int \fIrequired\fP)
|
|
int MPI::Init_thread(int \fIrequired\fP)
|
|
|
|
.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 any other MPI routine
|
|
(apart from MPI_Initialized) is called. 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:
|
|
.sp
|
|
.nf
|
|
{
|
|
/* declare variables */
|
|
MPI_Init_thread(&argc, &argv, req, &prov);
|
|
/* parse arguments */
|
|
/* main program */
|
|
MPI_Finalize();
|
|
}
|
|
.fi
|
|
.
|
|
.SH NOTES
|
|
.ft R
|
|
The Fortran version does not have provisions for \fIargc\fP and
|
|
\fIargv\fP and takes only IERROR.
|
|
.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.
|
|
.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.
|
|
.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
|
|
|