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
) 是 reduction 和 broadcast[=29] 的组合=](MPI_Reduce
、MPI_Bcast
)。他们可能称之为 MPI_Reduce_Bcast
。请务必注意,MPI 减少不会进行任何全局减少。因此,如果在 5 个进程中每个进程有 10 个数字,那么在 MPI_Reduce
之后,一个进程有 10 个数字。在MPI_Allreduce
之后,所有5个进程都有相同的10个数字。
相比之下,all-to-all reduction执行reduction和scatter ,因此称为 MPI_Reduce_scatter[_block]
。因此,如果您在 5 个进程上各有 10 个数字,在 MPI_Reduce_scatter_block
之后,这 5 个进程各有 2 个数字。请注意,MPI 本身并不使用术语 all-to-all reduction,这可能是由于误导性歧义。
试图找出开放 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
) 是 reduction 和 broadcast[=29] 的组合=](MPI_Reduce
、MPI_Bcast
)。他们可能称之为 MPI_Reduce_Bcast
。请务必注意,MPI 减少不会进行任何全局减少。因此,如果在 5 个进程中每个进程有 10 个数字,那么在 MPI_Reduce
之后,一个进程有 10 个数字。在MPI_Allreduce
之后,所有5个进程都有相同的10个数字。
相比之下,all-to-all reduction执行reduction和scatter ,因此称为 MPI_Reduce_scatter[_block]
。因此,如果您在 5 个进程上各有 10 个数字,在 MPI_Reduce_scatter_block
之后,这 5 个进程各有 2 个数字。请注意,MPI 本身并不使用术语 all-to-all reduction,这可能是由于误导性歧义。