对窗口数据进行运算

MPI_ACCUMULATE(origin_addr, origin_count, origin_datatype, target_rank, target_disp,target_count, target_datatype, op, win)
INorigin_addr本地缓冲区起始地址
INorigin_count 指定数据个数
INorigin_datatype数据类型
INtarget_rank累计窗口所在的进程标识
INtarget_disp累计数据起始位置相对于窗口开始位置的偏移
INtarget_count 窗口中累计数据个数
INtarget_datatype累计数据的数据类型
INop 具体的累计操作
INwin窗口对象
int MPI_Accumulate(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_Op op, MPI_Win win)
MPI_ACCUMULATE(ORIGIN_ADDR, ORIGIN_COUNT, ORIGIN_DATATYPE,
TARGET_RANK, TARGET_DISP, TARGET_COUNT, TARGET_DATATYPE,
OP, WIN, IERROR)
<type> ORIGIN_ADDR(*)
INTEGER (KIND=MPI_ADDRESS_KIND) TARGET_DISP
INTEGER ORIGIN_ADDR, ORIGIN_DATATYPE, TARGET_RANK,
TARGET_COUNT, TARGET_DATATYPE, OP, WIN, IERROR

MPI_ACCUMULATE相对于窗口读或窗口写来说更复杂一些,其基本含义是

图16-3 对窗口数据的运算操作图示

其中窗口待修改数据的个数和类型必须和本地缓冲区中的数据个数和类型相一致,具体的运算操作可以是预定义的各种归约操作
窗口数据运算的具体含义是:将本地缓冲区中从origin_addr开始的origin_count个数据类型为origin_datatype的数据,和目标进程target_rank的窗口内,从target_disp个偏移开始的个数为target_count,数据类型为target_datatype的数据,进行op运算,然后将运算结果存入窗口数据原来的位置。

图16-4 MPI_ACCUMULATE操作图示