我正在尝试编写两个脚本,一个是主脚本,另一个是工作脚本。主脚本将会生成多个工作脚本进程,并将一个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()
mpi4py
而不是 Python 自带的multiprocessing
模块? - hpaulj