我们知道浮点数的不同求和顺序可能导致不同的结果。
考虑使用MPI_SUM操作调用的MPI函数MPI_reduce。
#include <mpi.h>
int MPI_Reduce(const void *sendbuf, void *recvbuf, int count,
MPI_Datatype datatype, MPI_Op op, int root,
MPI_Comm comm)
MPI标准或MPI实现是否保证每次运行具有相同输入和输出数据的函数时,结果都是相同的?
这就是我在documentation
中找到的内容减少的“规范”评估顺序由 组中的进程排名。但是,实施可以 利用相关性,或相关性和可交换性, 为了改变评价的顺序。
但这并未对可重复性提供任何见解。
答案 0 :(得分:3)
actual standard提供了一些进一步的见解:
对实施者的建议。强烈建议
MPI_REDUCE
实施,以便每当获得相同的结果 函数应用于相同的参数,出现在同一个参数中 订购。请注意,这可能会阻止利用优化 排名的实际位置。 (对实施者的建议结束。)
所以,虽然没有保证,但我希望这些实施遵循这一建议并确实产生可重复的结果。
答案 1 :(得分:3)
如果您在每次运行时在节点和核心之间具有相同的物理位置,则每次运行时可能会得到相同的结果(但如上所述,标准并不能保证这一点)。
实际上,在共享使用HPC系统上,您通常不会获得完全相同的位置,因此减少顺序通常会有所不同,并且由于减少操作的顺序不同,您会看到很小的差异。
我还应该说:即使您始终复制物理布局,由于共享基础架构(互连或磁盘,甚至节点,如果它们的使用是非独占的)的不同条件,操作顺序仍可能会有所不同。如果其他用户以不同的方式加载系统,它可以改变到达每个等级的数据的顺序,从而改变操作的顺序(取决于并行缩减算法)。