我在教自己MPI。我正在阅读有关reduce和scan的Python文档: http://documen.tician.de/boostmpi/reference.html#boostmpi.scan
reduce和scan似乎都采用了某些函数(op)并使用它将从各个进程获得的值减少为单个值。
缩小和扫描有何不同?
答案 0 :(得分:8)
减少意味着所有处理器获得相同的值,而扫描返回每个处理器上的部分操作结果。例如,如果你有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
在除root之外的所有处理器上都有未定义的数据。