MPI Forum Meetings logo

MPI Forum: mpi3-rma Mailing List Archives

all MPI Forum: mpi3-rma mailing list

Subject: [Mpi3-rma] MPI RMW operations
From: Shipman, Galen M. (gshipman_at_[hidden])
Date: 2008-03-24 23:09:52


Howard and I have been working on the RMW operations listed below for
consideration.

- Galen Shipman - ORNL

Single operand RMW operations

MPI_Rmw(void *operand_addr,
                     int count,
                    MPI_Datatype datatype,
                    void *result_addr,
                    int target_rank,
                    MPI_Aint target_disp,
                    int assert,
                    MPI_RMW_Op op,
                     MPI_Win win)

Two operand RMW operations
        
MPI_Rmw2(void *operand_addr,
                       int count,
                       MPI_Datatype datatype,
                      void *operand2_addr,
                      void *result_addr,
                      int target_rank,
                      MPI_Aint target_disp,
                       int assert,
                      MPI_RMW_2_Op op,
                       MPI_Win win)

MPI_RMW_Op Predefined RMW single operand operations
The following predefined operations are supplied for MPI_RMW and related
functions. These operations are invoked by placing the following in op.

Name Meaning

MPI_RMW_INC increment
MPI_RMW_PROD product
MPI_RMW_SUM sum
MPI_RMW_LAND logical and
MPI_RMW_LOR logical or
MPI_RMW_LXOR logical xor
MPI_RMW_BAND binary and
MPI_RMW_BOR binary or
MPI_RMW_BXOR binary xor
MPI_RMW_SWAP swap value

MPI_RMW_2_Op Predefined RMW two operand operations

Name Meaning

MPI_RMW2_MASK_SWAP swap masked bits
MPI_RMW2_COMP_SWAP compare and swap

Note: MPI_RMW2_COMP_SWAP is an equality comparison, we may wish to
consider multiple comparison operations such as >, >=, <, <=, ==, <>.

Both MPI_Rmw and MPI_Rmw2 take an assert argument.
When assert == MPI_MODE_PASSIVE_EPOCH_IMPLICIT MPI_Rmw/2 is
equivalent to:

MPI_Win_lock(target_rank,0,win);
MPI_Rmw(.....);
MPI_Win_unlock(target_rank,0,win);

When assert == MPI_MODE_PASSIVE_EPOCH_IMPLICIT | MPI_MODE_NOCHECK
the MPI library knows that the window lock at the target need not be
acquired.