【发布时间】:2013-11-16 20:53:09
【问题描述】:
我正在运行一个具有 mpirun 和 2 个内核的进程,当我在两个进程之间混合值时,它会被杀死。两个进程都使用了大约 15% 的机器内存,即使混合时内存会增加,但仍然应该有足够的内存。所以我假设用于在进程之间传递消息的内存量是有限制的。 我如何知道这个限制是什么以及如何删除它?
当 mpirun 死机时我收到的错误消息是:
File "Comm.pyx", line 864, in mpi4py.MPI.Comm.bcast (src/mpi4py.MPI.c:67787)
File "pickled.pxi", line 564, in mpi4py.MPI.PyMPI_bcast (src/mpi4py.MPI.c:31462)
File "pickled.pxi", line 93, in mpi4py.MPI._p_Pickle.alloc (src/mpi4py.MPI.c:26327)
SystemError: Negative size passed to PyBytes_FromStringAndSize
这是导致错误的代码:
sum_updates_j_k = numpy.zeros((self.col.J_total, self.K), dtype=numpy.float64))
comm.Reduce(self.updates_j_k, sum_updates_j_k, op=MPI.SUM)
sum_updates_j_k = comm.bcast(sum_updates_j_k, root=0)
代码通常可以工作,它只会遇到大量数据的问题,这使得我在进程之间交换的矩阵的大小增加了
【问题讨论】:
-
这似乎不是内存问题。广播调用的参数是什么?
-
嗨,我已经更新了我上面的帖子。每个进程写入自己的矩阵,然后我将它们相加并将它们广播回每个进程。
-
矩阵有多大?
-
在这种特殊情况下,矩阵的大小为 7659561*50,因此它应该占用 ~1.5 GB。
-
我猜矩阵对象的腌制大小超过 2 GiB,这会导致 32 位整数溢出。至少它应该解释负尺寸错误。
标签: python pickle openmpi mpi4py