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.
participants (1)
-
Shipman, Galen M.