MPI_REDUCE(sendbuf,recvbuf,count,datatype,op,root,comm)
INsendbuf发送消息缓冲区的起始地址(可选数据类型)
OUT recvbuf接收消息缓冲区中的地址(可选数据类型)
INcount发送消息缓冲区中的数据个数(整型)
INdatatype 发送消息缓冲区的元素类型(句柄)
INop 归约操作符(句柄)
INroot 根进程序列号(整型)
INcomm 通信域(句柄)
int MPI_Reduce(void* sendbuf, void* recvbuf, int count, PI_Datatype datatype,
MPI_Op op, int root, MPI_Comm comm)
MPI_REDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER COUNT, DATATYPE, OP, ROOT, COMM, IERROR

MPI_REDUCE将组内每个进程输入缓冲区中的数据按给定的操作op进行运算,并将其结果返回到序列号为root的进程的输出缓冲区中。输入缓冲区由参数sendbuf、count和datatype定义,输出缓冲区由参数recvbuf、count和datatype定义,要求两者的元素数目和类型都必须相同。因为所有组成员都用同样的参数count、datatype、op、root和comm来调用此进程,故而所有进程都提供长度相同、元素类型相同的输入和输出缓冲区。每个进程可能提供一个元素或一系列元素,组合操作依次针对每个元素进行。
操作op始终被认为是可结合的,并且所有MPI定义的操作被认为是可交换的。用户自定义的操作被认为是可结合的,但可以不是可交换的。

 

图12-10 MPI归约操作图示