使用mpi4py Bcast发送大矩阵时,断言失败错误

时间:2014-02-17 17:54:51

标签: python mpi mpi4py

我使用python和mpi4py在计算集群上运行并行代码。我收到以下错误:

Assertion failed in file src/mpid/ch3/channels/mrail/src/rdma/ch3_rndvtransfer.$
[cli_15]: aborting job:
internal ABORT - process 15

我输入了打印语句来查看它发生的位置,当我尝试将一个大型矩阵(14x14x217)从一个进程广播到另外一个32个进程时,就会发生这种情况。当我运行测试得到更小的矩阵14x14x61时,代码工作得很好。以下是代码的相关部分(comm.Bcast期间发生错误):

comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()

...

recv_buffer=numpy.zeros((g.numbands,g.numbands,g.gridsize),'complex')
senddata=numpy.zeros((g.numbands,g.numbands,g.gridsize+6),'complex')
if rank==size-1:
    g.updateVHF(rank,size)  #perform calculation on part of data
    for i in range(size-1):
        comm.Recv(recv_buffer,source=i,tag=0)
        g.VHartree=g.VHartree+recv_buffer[:]

        comm.Recv(recv_buffer,source=i,tag=1)
        g.VFock=g.VFock+recv_buffer[:]

        g.updateBasis()
        senddata[:,:,0:g.gridsize]=g.wf
        senddata[:,:,g.gridsize::]=g.wf0

else:
    g.updateVHF(rank,size)  # perform calculation on part of data
    comm.Send(g.VHartree,dest=size-1,tag=0)
    comm.Send(g.VFock,dest=size-1,tag=1)

comm.Bcast(senddata,root=size-1)  # broadcast to everyone else
if rank != size-1:  # rank==size-1 already has updated values
    g.wf=senddata[:,:,0:g.gridsize]
    g.wf0=senddata[:,:,g.gridsize::]

我找到了以下内容:http://listarc.com/showthread.php?4387119-Assertion+failurempi4py hangs when trying to send large data,这表明可以在进程之间发送的数据存在一些大小限制。我是否认为我的错误是由于达到了数据传输大小的限制?如果是这样,为什么它只在Bcast而不是其他Send / Recv通信期间发生,因为所涉及的矩阵大小几乎相同?

0 个答案:

没有答案