MPI_Put(3) Open MPI MPI_Put(3)
NAME
MPI_Put, MPI_Rput - Copies data from the origin memory to the target.
SYNTAX
C Syntax
#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)
Fortran Syntax (see FORTRAN 77 NOTES)
USE MPI
! or the older form: INCLUDE 'mpif.h'
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
Fortran 2008 Syntax
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
C++ Syntax
#include <mpi.h>
void MPI::Win::Put(const void* origin_addr, int origin_count, const
MPI::Datatype& origin_datatype, int target_rank, MPI::Aint
target_disp, int target_count, const MPI::Datatype&
target_datatype) const
INPUT PARAMETERS
origin_addr
Initial address of origin buffer (choice).
origin_count
Number of entries in origin buffer (nonnegative integer).
origin_datatype
Data type of each entry in origin buffer (handle).
target_rank
Rank of target (nonnegative integer).
target_disp
Displacement from start of window to target buffer (nonnega-
tive integer).
target_count
Number of entries in target buffer (nonnegative integer).
target_datatype
Data type of each entry in target buffer (handle).
win Window object used for communication (handle).
OUTPUT PARAMETER
request MPI_Rput: RMA request
IERROR Fortran only: Error status (integer).
DESCRIPTION
MPI_Put transfers origin_count successive entries of the type specified
by origin_datatype, starting at address origin_addr on the origin node
to the target node specified by the win, target_rank pair. The data are
written in the target buffer at address target_addr = window_base +
target_disp x disp_unit, where window_base and disp_unit are the base
address and window displacement unit specified at window initializa-
tion, by the target process.
The target buffer is specified by the arguments target_count and tar-
get_datatype.
The data transfer is the same as that which would occur if the origin
process executed a send operation with arguments origin_addr, ori-
gin_count, origin_datatype, target_rank, tag, comm, and the target
process executed a receive operation with arguments target_addr, tar-
get_count, target_datatype, source, tag, comm, where target_addr is the
target buffer address computed as explained above, and comm is a commu-
nicator for the group of win.
The communication must satisfy the same constraints as for a similar
message-passing communication. The target_datatype may not specify
overlapping entries in the target buffer. The message sent must fit,
without truncation, in the target buffer. Furthermore, the target buf-
fer must fit in the target window. In addition, only processes within
the same buffer can access the target window.
The target_datatype argument is a handle to a datatype object defined
at the origin process. However, this object is interpreted at the tar-
get process: The outcome is as if the target datatype object were de-
fined at the target process, by the same sequence of calls used to de-
fine it at the origin process. The target data type must contain only
relative displacements, not absolute addresses. The same holds for get
and accumulate.
MPI_Rput is similar to MPI_Put, except that it allocates a communica-
tion request object and associates it with the request handle (the ar-
gument request). The completion of an MPI_Rput operation (i.e., after
the corresponding test or wait) indicates that the sender is now free
to update the locations in the origin_addr buffer. It does not indicate
that the data is available at the target window. If remote completion
is required, MPI_Win_flush, MPI_Win_flush_all, MPI_Win_unlock, or
MPI_Win_unlock_all can be used.
NOTES
The target_datatype 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 homoge-
neous 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).
The performance of a put transfer can be significantly affected, on
some systems, from the choice of window location and the shape and lo-
cation of the origin and target buffer: Transfers to a target window in
memory allocated by MPI_Alloc_mem 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.
FORTRAN 77 NOTES
The MPI standard prescribes portable Fortran syntax for the TARGET_DISP
argument only for Fortran 90. FORTRAN 77 users may use the non-portable
syntax
INTEGER*MPI_ADDRESS_KIND TARGET_DISP
where MPI_ADDRESS_KIND is a constant defined in mpif.h and gives the
length of the declared integer in bytes.
ERRORS
Almost all MPI routines return an error value; C routines as the value
of the function and Fortran routines in the last argument. C++ func-
tions 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.
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.
SEE ALSO
MPI_Get MPI_Rget
MPI_Accumulate MPI_Win_flush MPI_Win_flush_all MPI_Win_unlock
MPI_Win_unlock_all
4.1.2 Nov 24, 2021 MPI_Put(3)
Generated by dwww version 1.14 on Sat Jun 13 11:05:26 CEST 2026.