MPI-reduce 运算中的求和顺序

pac*_*der 1 c++ parallel-processing hpc mpi

我们知道,不同的浮点数求和顺序会导致不同的结果。

\n\n

考虑使用 MPI_SUM 操作调用的 MPI 函数 MPI_reduce。

\n\n
#include <mpi.h>\nint MPI_Reduce(const void *sendbuf, void *recvbuf, int count,\n               MPI_Datatype datatype, MPI_Op op, int root,\n               MPI_Comm comm)\n
Run Code Online (Sandbox Code Playgroud)\n\n

MPI 标准或 MPI 实现是否保证每次我们使用相同的输入和输出数据运行该函数时,结果都会相同?

\n\n

这就是我在文档中找到的

\n\n
\n

归约的 \xe2\x80\x98\xe2\x80\x98canonical\xe2\x80\x99\xe2\x80\x99 评估顺序由组中进程的排名决定。但是,实现可以利用关联性或关联性和交换性来更改计算顺序。

\n
\n\n

但这并没有提供任何关于可重复性的见解。

\n

Zul*_*lan 5

实际标准给出了一些进一步的见解:

给实施者的建议。 强烈建议这样MPI_REDUCE实现,以便每当将函数应用于相同的参数(以相同的顺序出现)时都能获得相同的结果。请注意,这可能会阻止利用排名物理位置的优化。(对实施者的建议结束。)

因此,虽然不能保证,但我希望实施遵循此建议并确实产生可重复的结果。

  • 谢谢 !fwiw,Open MPI 遵循此建议。 (2认同)