MPI减少操作中的求和顺序

时间:2017-08-28 09:49:17

标签: c++ parallel-processing mpi hpc

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

考虑使用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

中找到的内容
  

减少的“规范”评估顺序由   组中的进程排名。但是,实施可以   利用相关性,或相关性和可交换性,   为了改变评价的顺序。

但这并未对可重复性提供任何见解。

2 个答案:

答案 0 :(得分:3)

actual standard提供了一些进一步的见解:

  

对实施者的建议。强烈建议MPI_REDUCE   实施,以便每当获得相同的结果   函数应用于相同的参数,出现在同一个参数中   订购。请注意,这可能会阻止利用优化   排名的实际位置。 (对实施者的建议结束。)

所以,虽然没有保证,但我希望这些实施遵循这一建议并确实产生可重复的结果。

答案 1 :(得分:3)

如果您在每次运行时在节点和核心之间具有相同的物理位置,则每次运行时可能会得到相同的结果(但如上所述,标准并不能保证这一点)。

实际上,在共享使用HPC系统上,您通常不会获得完全相同的位置,因此减少顺序通常会有所不同,并且由于减少操作的顺序不同,您会看到很小的差异。

我还应该说:即使您始终复制物理布局,由于共享基础架构(互连或磁盘,甚至节点,如果它们的使用是非独占的)的不同条件,操作顺序仍可能会有所不同。如果其他用户以不同的方式加载系统,它可以改变到达每个等级的数据的顺序,从而改变操作的顺序(取决于并行缩减算法)。