MPI中的全对全约简和全约简的区别

3
尝试弄清楚open MPI中All-to-All Reduction和All-Reduce的区别。据我理解,All-to-One Reduction从所有进程中获取一个片段m(整数、数组等),使用操作符(min、max、sum等)将所有片段组合在一起,并将其存储在选择的进程中。因此,我认为All-to-All Reduction相同,但该产品存储在所有进程而不是仅一个进程中。从这个文档中可以看出,All-Reduce基本上与All-to-All Reduction执行的是相同的操作,这样说对吗,还是我弄错了?
1个回答

4
MPI_Allreduce是一个结合了reductionbroadcastMPI_ReduceMPI_Bcast)的操作。他们可能本该将它命名为MPI_Reduce_Bcast。需要注意的是MPI reduction并不做全局归约,所以如果在5个进程上每个进程有10个数字,在经过一个MPI_Reduce后,只剩下一个进程有这10个数字。而在经过一个MPI_Allreduce后,所有5个进程都会拥有同样的10个数字。
相比之下,all-to-all reduction则执行了reductionscatter,因此称之为MPI_Reduce_scatter[_block]。如果在5个进程上每个进程有10个数字,在经过一个MPI_Reduce_scatter_block后,每个进程只剩下2个数字。需要注意的是,MPI没有使用术语all-to-all reduction,这种术语会产生误导。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接