284 lines
10 KiB
Groff
284 lines
10 KiB
Groff
.\" Man page generated from reStructuredText.
|
|
.
|
|
.TH "MPI_RPUT" "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
|
|
..
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.sp
|
|
\fI\%MPI_Put\fP, \fI\%MPI_Rput\fP \- Copies data from the origin memory to the
|
|
target.
|
|
.SH SYNTAX
|
|
.SS C Syntax
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
#include <mpi.h>
|
|
|
|
MPI_Put(const void *origin_addr, int origin_count, MPI_Datatype
|
|
origin_datatype, int target_rank, MPI_Aint target_disp,
|
|
int target_count, MPI_Datatype target_datatype, MPI_Win win)
|
|
|
|
MPI_Rput(const void *origin_addr, int origin_count, MPI_Datatype
|
|
origin_datatype, int target_rank, MPI_Aint target_disp,
|
|
int target_count, MPI_Datatype target_datatype, MPI_Win win,
|
|
MPI_Request *request)
|
|
.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_PUT(ORIGIN_ADDR, ORIGIN_COUNT, ORIGIN_DATATYPE, TARGET_RANK,
|
|
TARGET_DISP, TARGET_COUNT, TARGET_DATATYPE, WIN, IERROR)
|
|
<type> ORIGIN_ADDR(*)
|
|
INTEGER(KIND=MPI_ADDRESS_KIND) TARGET_DISP
|
|
INTEGER ORIGIN_COUNT, ORIGIN_DATATYPE, TARGET_RANK, TARGET_COUNT,
|
|
TARGET_DATATYPE, WIN, IERROR
|
|
|
|
MPI_RPUT(ORIGIN_ADDR, ORIGIN_COUNT, ORIGIN_DATATYPE, TARGET_RANK,
|
|
TARGET_DISP, TARGET_COUNT, TARGET_DATATYPE, WIN, REQUEST, IERROR)
|
|
<type> ORIGIN_ADDR(*)
|
|
INTEGER(KIND=MPI_ADDRESS_KIND) TARGET_DISP
|
|
INTEGER ORIGIN_COUNT, ORIGIN_DATATYPE, TARGET_RANK, TARGET_COUNT,
|
|
TARGET_DATATYPE, WIN, REQUEST, IERROR
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SS Fortran 2008 Syntax
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
USE mpi_f08
|
|
MPI_Put(origin_addr, origin_count, origin_datatype, target_rank,
|
|
target_disp, target_count, target_datatype, win, ierror)
|
|
TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: origin_addr
|
|
INTEGER, INTENT(IN) :: origin_count, target_rank, target_count
|
|
TYPE(MPI_Datatype), INTENT(IN) :: origin_datatype, target_datatype
|
|
INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(IN) :: target_disp
|
|
TYPE(MPI_Win), INTENT(IN) :: win
|
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
|
|
|
MPI_Rput(origin_addr, origin_count, origin_datatype, target_rank,
|
|
target_disp, target_count, target_datatype, win, request,
|
|
ierror)
|
|
TYPE(*), DIMENSION(..), INTENT(IN), ASYNCHRONOUS :: origin_addr
|
|
INTEGER, INTENT(IN) :: origin_count, target_rank, target_count
|
|
TYPE(MPI_Datatype), INTENT(IN) :: origin_datatype, target_datatype
|
|
INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(IN) :: target_disp
|
|
TYPE(MPI_Win), INTENT(IN) :: win
|
|
TYPE(MPI_Request), INTENT(OUT) :: request
|
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SH INPUT PARAMETERS
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fBorigin_addr\fP: Initial address of origin buffer (choice).
|
|
.IP \(bu 2
|
|
\fBorigin_count\fP: Number of entries in origin buffer (nonnegative integer).
|
|
.IP \(bu 2
|
|
\fBorigin_datatype\fP: Data type of each entry in origin buffer (handle).
|
|
.IP \(bu 2
|
|
\fBtarget_rank\fP: Rank of target (nonnegative integer).
|
|
.IP \(bu 2
|
|
\fBtarget_disp\fP: Displacement from start of window to target buffer (nonnegative integer).
|
|
.IP \(bu 2
|
|
\fBtarget_count\fP: Number of entries in target buffer (nonnegative integer).
|
|
.IP \(bu 2
|
|
\fBtarget_datatype\fP: Data type of each entry in target buffer (handle).
|
|
.IP \(bu 2
|
|
\fBwin\fP: Window object used for communication (handle).
|
|
.UNINDENT
|
|
.SH OUTPUT PARAMETER
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fBrequest\fP: MPI_Rput: RMA request
|
|
.IP \(bu 2
|
|
\fBierror\fP: Fortran only: Error status (integer).
|
|
.UNINDENT
|
|
.SH DESCRIPTION
|
|
.sp
|
|
\fI\%MPI_Put\fP transfers \fIorigin_count\fP successive entries of the type
|
|
specified by \fIorigin_datatype\fP, starting at address \fIorigin_addr\fP on the
|
|
origin node to the target node specified by the \fIwin\fP, \fItarget_rank\fP
|
|
.sp
|
|
pair. The data are written in the target buffer at address \fItarget_addr\fP
|
|
^ \fIwindow_base\fP + \fItarget_disp\fP x \fIdisp_unit\fP, where \fIwindow_base\fP and
|
|
\fIdisp_unit\fP are the base address and window displacement unit specified
|
|
at window initialization, by the target process.
|
|
.sp
|
|
The target buffer is specified by the arguments \fItarget_count\fP and
|
|
\fItarget_datatype\fP\&.
|
|
.sp
|
|
The data transfer is the same as that which would occur if the origin
|
|
process executed a send operation with arguments \fIorigin_addr\fP,
|
|
\fIorigin_count\fP, \fIorigin_datatype\fP, \fItarget_rank\fP, \fItag\fP, \fIcomm\fP, and the
|
|
target process executed a receive operation with arguments
|
|
\fItarget_addr\fP, \fItarget_count\fP, \fItarget_datatype\fP, \fIsource\fP, \fItag\fP,
|
|
\fIcomm\fP, where \fItarget_addr\fP is the target buffer address computed as
|
|
explained above, and \fIcomm\fP is a communicator for the group of \fIwin\fP\&.
|
|
.sp
|
|
The communication must satisfy the same constraints as for a similar
|
|
message\-passing communication. The \fItarget_datatype\fP may not specify
|
|
overlapping entries in the target buffer. The message sent must fit,
|
|
without truncation, in the target buffer. Furthermore, the target buffer
|
|
must fit in the target window. In addition, only processes within the
|
|
same buffer can access the target window.
|
|
.sp
|
|
The \fItarget_datatype\fP argument is a handle to a datatype object defined
|
|
at the origin process. However, this object is interpreted at the target
|
|
process: The outcome is as if the target datatype object were defined at
|
|
the target process, by the same sequence of calls used to define it at
|
|
the origin process. The target data type must contain only relative
|
|
displacements, not absolute addresses. The same holds for get and
|
|
accumulate.
|
|
.sp
|
|
\fI\%MPI_Rput\fP is similar to \fI\%MPI_Put\fP, except that it allocates a
|
|
communication request object and associates it with the request handle
|
|
(the argument \fIrequest\fP). The completion of an \fI\%MPI_Rput\fP operation (i.e.,
|
|
after the corresponding test or wait) indicates that the sender is now
|
|
free to update the locations in the \fIorigin_addr\fP buffer. It does not
|
|
indicate that the data is available at the target window. If remote
|
|
completion is required, \fI\%MPI_Win_flush\fP, \fI\%MPI_Win_flush_all\fP,
|
|
\fI\%MPI_Win_unlock\fP, or \fI\%MPI_Win_unlock_all\fP can be used.
|
|
.SH NOTES
|
|
.sp
|
|
The \fItarget_datatype\fP argument is a handle to a datatype object that is
|
|
defined at the origin process, even though it defines a data layout in
|
|
the target process memory. This does not cause problems in a homogeneous
|
|
or heterogeneous environment, as long as only portable data types are
|
|
used (portable data types are defined in Section 2.4 of the MPI\-2
|
|
Standard).
|
|
.sp
|
|
The performance of a put transfer can be significantly affected, on some
|
|
systems, from the choice of window location and the shape and location
|
|
of the origin and target buffer: Transfers to a target window in memory
|
|
allocated by \fI\%MPI_Alloc_mem\fP may be much faster on shared memory systems;
|
|
transfers from contiguous buffers will be faster on most, if not all,
|
|
systems; the alignment of the communication buffers may also impact
|
|
performance.
|
|
.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_Get\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Rget\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Accumulate\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Win_flush\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Win_flush_all\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Win_unlock\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Win_unlock_all\fP
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SH COPYRIGHT
|
|
2003-2025, The Open MPI Community
|
|
.\" Generated by docutils manpage writer.
|
|
.
|