2

我正在使用 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+failure和mpi4py 在尝试发送大数据时挂起,这表明可以在进程之间发送的数据存在一定的大小限制。我是否正确地认为我的错误是由于数据传输的大小达到了某些限制?如果是这样,为什么它只发生在 theBcast而不是 other Send/Recv通信期间,因为所涉及的矩阵几乎相同大小?

4

0 回答 0