我正在使用 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
通信期间,因为所涉及的矩阵几乎相同大小?