mpi - 在 MPI 中,reduce 和 scan 有何不同?

标签 mpi

我正在自学 MPI。我正在阅读关于减少和扫描的 Python 文档: http://documen.tician.de/boostmpi/reference.html#boostmpi.scan

reduce 和 scan 似乎都采用一些函数 (op) 并使用它将从单个进程获得的值减少为单个值。

reduce 和 scan 有何不同?

最佳答案

归约意味着所有处理器都获得相同的值,而扫描返回每个处理器上的部分操作结果。例如,如果您有 10 个处理器并且您要计算它们等级的总和,MPI_Reduce 将为您提供标量 45 (0+1+2+3+4+5+6+7+8 +9) 仅在根进程上,而 MPI_scan 将为您提供减少到每个处理器上处理器级别的标量。所以处理器 0 会得到 0,处理器 1 会得到 1,处理器 2 会得到 3,依此类推。处理器 9 将获得 45。

换句话说,如果您要列出从 MPI_Scan 中找到的所有处理器值,它将是:

[0, 1, 3, 6, 10, 15, 21, 28, 36, 45]

扫描结果来自[0, 0+1, 0+1+2, 0+1+2+3, ..., 0+1+2+3+4+5+6 +7+8+9]

在 Python 中,MPI_Reduce 的结果列表将是(假设处理器 0 是根):

[45, None, None, None, None, None, None, None, None, None]

而在其他语言中,recvbuf 在除根以外的所有处理器上都会有未定义的数据。

关于mpi - 在 MPI 中,reduce 和 scan 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12966446/

相关文章:

c++ - 是否可以忽略/丢弃 MPI_Allgather 中接收到的数据?

algorithm - 如何生成信号以停止分布式模型中其他进程的执行

c - 使用 Cygwin 的 MPICH2 编译问题

python - 无法在 Beowulf 集群上正确运行个人作业。示例工作工作正常

c - 如何检查消息在 MPI 中是否可用?

C++,mpi : easiest way to create random data

c - 在一条消息中发送具有恒定 header 的可变长度 vector

c - 使用 MPI 在后台收听和回复

c++ - MPI C++ 矩阵加法、函数参数和函数返回

c - MPI_Scatter 动态二维数组行导致段错误