mpi4py Allgatherv无法传输某些数据

2024-06-18 11:13:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我在mpi4上遇到了一个奇怪的错误py.MPI.Comm通信阿列夫。以下是所有来自不同等级的farray拷贝在farray中串联的结果。你知道吗

n = farray.size
total = comm.allreduce(n)
ns = np.empty(size, dtype=int)
comm.Allgather(np.array(n), ns)
displs = np.zeros(size + 1, dtype=int);
displs[1:] = ns
displs = np.cumsum(displs)
displs = tuple(displs[:-1])
farrays = np.zeros(total, dtype=array.dtype)
recvbuf = [farrays, tuple(ns), displs, dtype]
sendbuf = [farray, n]
logGATHER('sendbuf', sendbuf)
logGATHER('recvbuf', recvbuf)
logGATHER('len(farrays)', len(farrays))
comm.Allgatherv(sendbuf, recvbuf)
logGATHER('farrays', farrays)

logGATHER调用将它们的参数和进程等级一起打印到stdout,这样我就可以看到它是否工作了。它们还表明,nnsdispls具有所需的值,869445(436665, 432780)(0, 436665)。你知道吗

这是我用了一年多没有问题的老代码。但我刚刚试着在我们的HPC系统上使用它,我得到了一个错误。通常,但不是100%的时间,一些数据没有传输。例如,仅在两个进程上运行,我可能会发现在秩1进程中,秩1数据出现在farrays的第二部分,但是第一部分(应该包含秩0的数据)似乎包含随机内存dreck。值得指出的是,因为我用零初始化了farrays,这意味着整个数组都被覆盖了,只是没有用正确的东西。你知道吗

知道发生了什么事吗?我怎么解决?你知道吗

我使用的是两天前从源代码处安装的mpi4py/3.0.1,没有明显的安装困难。你知道吗

谢谢你的帮助。你知道吗


Tags: 数据size进程错误nptotalcommns