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 Mon Jan 27 09:16:31 CET 2025.