MPI学习2--------集合通信

集合通信

1.MPI_Reduce

将所进程的值归约到 root 进程, 得到一个结果
int MPI_Reduce(void sendbuf, void * recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)*
void * sendbuf:发送数据的首地址
void * recvbuf:接受数据的首地址
int count:数据的大小
MPI_Datatype datatype:数据的类型
MPI_Op op:要进行的操作。MPI_SUM,MPI_MAX,…
int root:要归约到的进程。
MPI_Comm comm:通信域。在那些进程上进行该操作。MPI_COMM_WORLD表示在所有进程上进行该操作。

MPI学习2--------集合通信
图1:MPI_OP op为MPI_SUM时MPI_Reduce的示意图,实际仅需要知道该图的第一层和最后一层即可,

2.MPI_Allreduce

归约所有进程的计算结果, 并将最终的结果传递给所有其它的进程, 相当于每一个进程都执行了一次MPI_Reduce 调用。
int MPI_Allreduce(void sendbuf, void * recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)*
void * sendbuf:发送数据的首地址
void * recvbuf:接受数据的首地址
int count:数据的大小
MPI_Datatype datatype:数据的类型
MPI_Op op:要进行的操作。MPI_SUM,MPI_MAX,…
MPI_Comm comm:通信域。在那些进程上进行该操作。MPI_COMM_WORLD表示在所有进程上进行该操作。
MPI学习2--------集合通信
图2:MPI_OP op为MPI_SUM时MPI_Allreduce的示意图,实际仅需要知道该图的第一层和最后一层即可,