2

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

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

减少和扫描有何不同?

4

1 回答 1

9

减少意味着所有处理器获得相同的值,而扫描返回每个处理器上的部分操作结果。例如,如果您有 10 个处理器并且您正在计算它们的排名之和,MPI_Reduce那么只会在根进程上为您提供标量 45 (0+1+2+3+4+5+6+7+8+9) whileMPI_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将在除根以外的所有处理器上包含未定义的数据。

于 2012-10-19T02:37:41.787 回答