MPI 归约操作中的求和顺序



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

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

#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 实现是否保证每次使用相同的输入和输出数据运行函数时,结果都是相同的?

这就是我在文档中发现的

减少的"规范"评估顺序由 组中进程的排名。但是,实现可以 利用结合性,或结合性和交换性, 为了改变评估的顺序。

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

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

给实施者的建议。强烈建议MPI_REDUCE实现,以便在 函数应用于相同的参数,出现在相同的参数中 次序。请注意,这可能会阻止利用的优化 等级的物理位置。(对实施者的建议结束。

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

如果每次运行时在节点和内核之间具有相同数量的列和相同的物理位置,那么您可能每次都期望相同的结果(尽管,正如您在上面看到的,标准并不能保证这一点(。

实际上,在共享使用的 HPC 系统上,您通常不会实现完全相同的放置,因此缩减顺序通常不同,并且由于缩减操作的顺序不同,您会看到细微的差异。

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

最新更新