MPI 中 All-to-All Reduce 和 All-Reduce 的区别

Difference between All-to-All Reduction and All-Reduce in MPI

试图找出开放 MPI 中 All-to-All Reduce 和 All-Reduce 之间的区别。根据我的理解,All-to-One Reduction 从所有进程中取出一块m(整数、数组等),并将所有部分与运算符(最小值、最大值、总和等)组合在一起,然后将其存储在选定的进程中。由此我假设 All-to-All Reduction 是相同的,但产品存储在所有流程中,而不仅仅是一个。从 this 文档看来,All-Reduce 基本上与 All-to-All Reduction 相同,这是对的还是我理解错了?

all-reduce (MPI_Allreduce) 是 reductionbroadcast[=29] 的组合=](MPI_ReduceMPI_Bcast)。他们可能称之为 MPI_Reduce_Bcast。请务必注意,MPI 减少不会进行任何全局减少。因此,如果在 5 个进程中每个进程有 10 个数字,那么在 MPI_Reduce 之后,一个进程有 10 个数字。在MPI_Allreduce之后,所有5个进程都有相同的10个数字。

相比之下,all-to-all reduction执行reductionscatter ,因此称为 MPI_Reduce_scatter[_block]。因此,如果您在 5 个进程上各有 10 个数字,在 MPI_Reduce_scatter_block 之后,这 5 个进程各有 2 个数字。请注意,MPI 本身并不使用术语 all-to-all reduction,这可能是由于误导性歧义。