我最近遇到了一个问题,尝试使用 mpi4py 库中的“发送”命令在多个处理器之间共享大数据。即使是 1000x3 的 numpy 浮点数组也太大而无法发送。任何想法如何克服这个问题?
提前谢谢。
我找到了一个简单的解决方案。将数据分成足够小的块......
我遇到了同样的问题Isend
(不是Send
)。看来问题是由于发送过程在接收方收到数据之前终止。我通过comm.barrier()
在每个进程结束时包含一个调用来解决这个问题。
大数据的点对点发送/接收工作:
#!/usr/bin/env python
from mpi4py import MPI
import numpy
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
if rank == 0:
data = numpy.arange(300*100000, dtype='f')
comm.Send([data, MPI.FLOAT], dest=1, tag=77)
elif rank == 1:
data = numpy.empty(300*100000, dtype='f')
comm.Recv([data, MPI.FLOAT], source=0, tag=77)
print data
使用两个处理器运行它:
% ~/work/soft/mpich/bin/mpiexec -np 2 ./send-numpy.py
[ 0.00000000e+00 1.00000000e+00 2.00000000e+00 ..., 2.99999960e+07
2.99999980e+07 3.00000000e+07]