Python:使用mpi4py将数组播放到带有spawn的其他脚本

时间:2013-12-17 19:52:57

标签: python numpy parallel-processing mpi spawn

我正在尝试编写两个脚本,一个是主服务器,另一个是工作服务器,其中主脚本将生成工作程序的多个进程,然后将numpy数组播放到工作程序生成器。从在线查看mpi4py的(模糊)教程的数量,我觉得我理解这个概念,但我写的任何测试代码都不能成功地将数组发送给工作者。我没有得到错误,但他们从未收到过数组。

有人可以给我一个明确的例子,说明如何使用mpi4py,spawn和bcast将数组广播到一些衍生的工作脚本吗?谢谢!

更新:示例:

主脚本:

#! /usr/bin/env python
# master test

import sys,time
from mpi4py import MPI
import numpy as np

comm2    = MPI.COMM_WORLD
rank     = comm2.Get_rank()
mpisize  = comm2.Get_size()

initcomm = MPI.COMM_SELF.Spawn(sys.executable, \
                           args=['test2.py'], \
                           maxprocs=5)

# Initialise the programs
test = np.array([1,2,3], 'i')
print("About to broadcast {0} from rank {1}".format(test, rank))
initcomm.Bcast([test, MPI.INT], root=0)
initcomm.Disconnect()

工人脚本:

#! /usr/bin/env python
# child test

import sys,time
from mpi4py import MPI
import numpy as np

comm2    = MPI.COMM_WORLD
rank     = comm2.Get_rank()
mpisize  = comm2.Get_size()

initcomm = MPI.Comm.Get_parent()

test = np.zeros(3, 'i')
print("Bcast coming to rank {0}".format(rank))
initcomm.Bcast([test, MPI.INT], root=0)
print("Received {0}".format(test))
initcomm.Disconnect()

1 个答案:

答案 0 :(得分:1)

您需要将主脚本中的Bcast更改为:

initcomm.Bcast([test, MPI.INT], root=MPI.ROOT)

如果它设置为0,主设备会认为根目录在远程/工作组中排名0,程序将挂起。