我对使用 MPI 例程相对较新,我很困惑为什么在下面的代码中我会根据我使用的节点数得到不同的结果。
编码:
import numpy as np
from mpi4py import MPI
def MPI_sum(comm,x):
xsum = np.sum(x)
vals = comm.gather(xsum,root=0)
if rank == 0:
s = np.sum(vals)
s = comm.bcast(s,root=0)
return s
comm = MPI.COMM_WORLD
size = comm.Get_size()
datalen = 80000/size
x = np.zeros(datalen) + 1. + 1e-5
xsum = MPI_sum(comm,x)
if rank == 0:
print xsum - np.floor(xsum)
我用 1 个节点和 2 个节点运行此代码。我从 1 个节点得到的答案是:0.800000153016 我从 2 个节点得到的答案是:0.800000035219
是什么导致了这种差异?
(作为补充说明,我确实尝试将 MPI_sum 中的所有 x 数组数据传递给 root=0,然后在 root=0 上求和,这给了我正确的答案;无论节点数量如何,输出都相同。但是传递所有一个节点的数据对于我将在其中实现的代码是不实用的。)
感谢您的任何帮助!