248 lines
8.2 KiB
Groff
248 lines
8.2 KiB
Groff
.\" Man page generated from reStructuredText.
|
|
.
|
|
.TH "MPI_WIN_CREATE" "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_Win_create\fP — One\-sided MPI call that returns a window object for
|
|
RMA operations.
|
|
.SH SYNTAX
|
|
.SS C Syntax
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
#include <mpi.h>
|
|
|
|
MPI_Win_create(void *base, MPI_Aint size, int disp_unit,
|
|
MPI_Info info, MPI_Comm comm, MPI_Win *win)
|
|
.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_WIN_CREATE(BASE, SIZE, DISP_UNIT, INFO, COMM, WIN, IERROR)
|
|
<type> BASE(*)
|
|
INTEGER(KIND=MPI_ADDRESS_KIND) SIZE
|
|
INTEGER DISP_UNIT, INFO, COMM, WIN, IERROR
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SS Fortran 2008 Syntax
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
USE mpi_f08
|
|
MPI_Win_create(base, size, disp_unit, info, comm, win, ierror)
|
|
TYPE(*), DIMENSION(..), ASYNCHRONOUS :: base
|
|
INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(IN) :: size
|
|
INTEGER, INTENT(IN) :: disp_unit
|
|
TYPE(MPI_Info), INTENT(IN) :: info
|
|
TYPE(MPI_Comm), INTENT(IN) :: comm
|
|
TYPE(MPI_Win), INTENT(OUT) :: win
|
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SH INPUT PARAMETERS
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fBbase\fP: Initial address of window (choice).
|
|
.IP \(bu 2
|
|
\fBsize\fP: Size of window in bytes (nonnegative integer).
|
|
.IP \(bu 2
|
|
\fBdisp_unit\fP: Local unit size for displacements, in bytes (positive integer).
|
|
.IP \(bu 2
|
|
\fBinfo\fP: Info argument (handle).
|
|
.IP \(bu 2
|
|
\fBcomm\fP: Communicator (handle).
|
|
.UNINDENT
|
|
.SH OUTPUT PARAMETERS
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fBwin\fP: Window object returned by the call (handle).
|
|
.IP \(bu 2
|
|
\fBierror\fP: Fortran only: Error status (integer).
|
|
.UNINDENT
|
|
.SH DESCRIPTION
|
|
.sp
|
|
\fI\%MPI_Win_create\fP is a one\-sided MPI communication collective call executed
|
|
by all processes in the group of \fIcomm\fP\&. It returns a window object that
|
|
can be used by these processes to perform RMA operations. Each process
|
|
specifies a window of existing memory that it exposes to RMA accesses by
|
|
the processes in the group of \fIcomm\fP\&. The window consists of \fIsize\fP
|
|
bytes, starting at address \fIbase\fP\&. A process may elect to expose no
|
|
memory by specifying \fIsize\fP = 0.
|
|
.sp
|
|
If the \fIbase\fP value used by \fI\%MPI_Win_create\fP was allocated by
|
|
\fI\%MPI_Alloc_mem\fP, the size of the window can be no larger than the value
|
|
set by the \fI\%MPI_Alloc_mem\fP function.
|
|
.sp
|
|
The displacement unit argument is provided to facilitate address
|
|
arithmetic in RMA operations: the target displacement argument of an RMA
|
|
operation is scaled by the factor \fIdisp_unit\fP specified by the target
|
|
process, at window creation.
|
|
.sp
|
|
The following info keys are supported:
|
|
.INDENT 0.0
|
|
.TP
|
|
.B no_locks
|
|
If set to \fItrue\fP, then the implementation may assume that the local
|
|
window is never locked (by a call to \fI\%MPI_Win_lock\fP or
|
|
MPI_Win_lock_all). Setting this value if only active synchronization
|
|
may allow the implementation to enable certain optimizations.
|
|
.TP
|
|
.B accumulate_ordering
|
|
By default, accumulate operations from one initiator to one target on
|
|
the same window memory location are strictly ordered. If the info key
|
|
accumulate_ordering is set to \fInone\fP, no ordering of accumulate
|
|
operations guaranteed. They key can also be a comma\-separated list of
|
|
required orderings consisting of \fIrar\fP, \fIwar\fP, \fIraw\fP, and \fIwaw\fP for
|
|
read\-after\-read, write\-after\-read, read\-after\-write, and
|
|
write\-after\-write, respectively. Looser ordering constraints are
|
|
likely to result in improved performance.
|
|
.TP
|
|
.B accumulate_ops
|
|
If set to \fIsame_op\fP, the implementation will assume that all
|
|
concurrent accumulate calls to the same target address will use the
|
|
same operation. If set to \fIsame_op_no_op\fP, then the implementation
|
|
will assume that all concurrent accumulate calls to the same target
|
|
address will use the same operation or MPI_NO_OP. The default is
|
|
\fIsame_op_no_op\fP\&.
|
|
.TP
|
|
.B same_size
|
|
If set to \fItrue\fP, then the implementation may assume that the
|
|
argument \fIsize\fP is identical on all processes, and that all processes
|
|
have provided this info key with the same value.
|
|
.TP
|
|
.B same_disp_unit
|
|
If set to \fItrue\fP, then the implementation may assume that the
|
|
argument \fIdisp_unit\fP is identical on all processes, and that all
|
|
processes have provided this info key with the same value.
|
|
.UNINDENT
|
|
.SH NOTES
|
|
.sp
|
|
Common choices for \fIdisp_unit\fP are 1 (no scaling), and (in C syntax)
|
|
\fIsizeof(type)\fP, for a window that consists of an array of elements of
|
|
type \fItype\fP\&. The later choice will allow one to use array indices in RMA
|
|
calls, and have those scaled correctly to byte displacements, even in a
|
|
heterogeneous environment.
|
|
.sp
|
|
Use memory allocated by \fI\%MPI_Alloc_mem\fP to guarantee properly aligned
|
|
window boundaries (such as word, double\-word, cache line, page frame,
|
|
and so on).
|
|
.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_Alloc_mem\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Free_mem\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Win_allocate\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Win_allocate_shared\fP
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SH COPYRIGHT
|
|
2003-2025, The Open MPI Community
|
|
.\" Generated by docutils manpage writer.
|
|
.
|