在Windows 7上,进程之间的mpi4py生成通信失败

时间:2015-03-19 08:14:26

标签: python mpi mpi4py

我的目标是让python脚本能够在不同进程上启动其他python脚本,即我想将脚本分布在n个进程上。为了实现这一目标,我尝试运行文档中给出的mpi4py spawn示例(请参阅http://mpi4py.scipy.org/docs/usrman/tutorial.html)。但是这个例子失败并显示消息:

  

至少有一对MPI进程无法相互联系   MPI通讯。这意味着......有时这个错误   忘记指定' self' BTL。 ......你的MPI工作   现在要中止了。

我的安装在带有openMPI 1.6.1和最新mpi4py安装的Windows 7机器上。

代码,在我的情况下是: master.py:

#!/usr/bin/env python
from mpi4py import MPI
import numpy
import sys

comm = MPI.COMM_SELF.Spawn(sys.executable,
                           args=['worker.py'],
                           maxprocs=5)

N = numpy.array(100, 'i')
comm.Bcast([N, MPI.INT], root=MPI.ROOT)
PI = numpy.array(0.0, 'd')
comm.Reduce(None, [PI, MPI.DOUBLE],
            op=MPI.SUM, root=MPI.ROOT)
print(PI)

comm.Disconnect()

worker.py:

#!/usr/bin/env python
from mpi4py import MPI
import numpy

comm = MPI.Comm.Get_parent()
size = comm.Get_size()
rank = comm.Get_rank()

N = numpy.array(0, dtype='i')
comm.Bcast([N, MPI.INT], root=0)
h = 1.0 / N; s = 0.0
for i in range(rank, N, size):
    x = h * (i + 0.5)
    s += 4.0 / (1.0 + x**2)
PI = numpy.array(s * h, dtype='d')
comm.Reduce([PI, MPI.DOUBLE], None,
            op=MPI.SUM, root=0)

comm.Disconnect()

产生错误的行是:

comm = MPI.COMM_SELF.Spawn(sys.executable,
                           args=['worker.py'],
                           maxprocs=5)

运行脚本的命令位于cmd提示符下:

mpirun -n 1 python.exe master.py

0 个答案:

没有答案