MPI_REDUCE_SCATTER(sendbuf, recvbuf, recvcounts, datatype, op, comm)
INsendbuf发送消息缓冲区的起始地址(可选数据类型)
OUT recvbuf接收消息缓冲区的起始地址(可选数据类型)
INrecvcounts 接收数据个数(整型数组)
INdatatype 发送缓冲区中的数据类型(句柄)
INop 操作(句柄)
INcomm 通信域(句柄)
int MPI_Reduce_scatter(void* sendbuf, void* recvbuf, int *recvcounts
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
MPI_REDUCE_SCATTER(SENDBUF, RECVBUF, RECVCOUNTS, DATATYPE,
OP, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER RECVCOUNTS(*), DATATYPE, OP, COMM, IERROR


MPI_REDUCE_SCATTER操作可以认为是MPI对每个归约操作的变形,它将归约结果分散到组内的所有进程中去,而不是仅仅归约到ROOT进程。
MPI_REDUCE_SCATTER对由sendbuf、count和datatype定义的发送缓冲区数组的元素逐个进行归约操作,发送缓冲区数组的长度count= ∑irecvcount[i]。然后,将结果数组的前recvcounts[0]个元素送给进程0的接收缓冲区,再将接下来的recvcounts[1]个元素送给进程1的接收缓冲区,依次类推,最后将最后的recvcounts[N-1]个元素送给进程N-1的接收缓冲区。

图12-11 归约并散发操作