如何 运行 一个基本的 mpi4py 代码

how to run a basic mpi4py code

我是 mpi4py 的新手。 calculate pi example from the Tutorial 是这样的:

主(或parent,或客户端)端:

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

comm = MPI.COMM_SELF.Spawn(sys.executable,
                           args=['cpi.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()

工人(或child,或服务器)端:

#!/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()

抱歉这个愚蠢的问题:我如何 运行 这个?如果我从命令行执行 mpi运行,看起来它正在创建 4 个 parent 代码实例,而不仅仅是 child 代码。 (我得到 4 个输出到 STDOUT。)如果我尝试通过导入或 execfile 在 python 内 运行,它不会 运行。给出错误 "error parsing parameters"。另外,我假设 child 代码被命名为 "cpi,py"?谢谢。我知道这是一个非常基本的问题。如果我能找到答案,我就不会打扰你们了。

好吧,这是一件简单到很难的事情。我从命令行 运行 使用 mpi运行,只有一个进程。父代码本身生成其他代码:

mpirun -np 1 python parent_code.py