mpi4py返回排名差异

时间:2013-03-29 15:03:14

标签: python linux macos mpi

我想从两个不同版本的python中的python脚本(以及交互式测试,而不是ipython)中启动并行进程,并且已经开始使用mpi4py。这两个版本(分别为2和8个核心):

Python 2.7.2 | EPD 7.2-2(64位)| (默认,2011年9月7日,16:31:15) [dclwin上的[GCC 4.0.1(Apple Inc. build 5493)]

Python 2.6.5(r265:79063,2010年4月16日,13:57:41) linux2上的[GCC 4.4.3]

在第一个(学习绳索),交互式地得到:

from mpi4py import MPI
import sys
size = MPI.COMM_WORLD.Get_size()
print size

1

rank = MPI.COMM_WORLD.Get_rank()
print rank

0

这不是我想要的(并且做mpirun / mpiexec python似乎挂起/什么都不做)。但如果我这样做:

mpiexec -n 5 python helloworld.py

#!/usr/bin/env python

from mpi4py import MPI
import sys

size = MPI.COMM_WORLD.Get_size()
rank = MPI.COMM_WORLD.Get_rank()
name = MPI.Get_processor_name()

sys.stdout.write(
    "Hello, World! I am process %d of %d on %s.\n"
    % (rank, size, name))

我得到了

你好,世界!我是localhost上的第0个过程。

你好,世界!我是localhost上的第1个过程。

你好,世界!我是本地主机的第2步,共5步。

你好,世界!我是localhost上的第3步(共5步)。

你好,世界!我是localhost上的第4个过程。

我如何获得尺寸>交互式启动python时为0?

顺便说一句,执行./helloworld.py而不是python helloworld.py不起作用:

localhost:demo jtlz2 $ mpiexec -n 5 ./helloworld.py

无法找到或执行以下可执行文件:

主持人:localhost 可执行文件:./ helloworld.py

无法继续。

任何想法为什么?谢谢!

1 个答案:

答案 0 :(得分:6)

如果未从mpirun / mpiexec启动,则MPI可执行文件形成singletons,这就是MPI_COMM_WORLD始终为1的原因。

至于mpiexec未能找到可执行文件,后者必须设置其“可执行”位,例如通过

$ chmod +x helloworld.py

交互式运行MPI作业非常棘手。大多数MPI实现为所有进程执行输出重定向,这就是您可以看到组合输出的原因,但对于输入重定向则不然。只有等级0才能接收交互式输入。但是你可以做几件事:

  • 以交互方式运行排名0,让其他排名执行脚本。这将允许您探索与其他等级的通信:

    $ mpiexec -np 1 python : -np 4 python script.py

    这将以交互模式启动一个解释器副本作为等级0然后四个副本script.py的排名为1到4。

  • 在其自己的图形终端仿真器中以每个等级交互运行,例如: xterm
    $ mpiexec -np 5 xterm -e python

    这将在所有这些内容中启动5个xterms和一个单独的Python解释器副本。这种方法要求每个xterm能够与您的X11显示服务器通信,这意味着您可能必须明确传递DISPLAY环境变量的值,例如:使用-x DISPLAY用于Open MPI或-genv DISPLAY用于MPICH派生的实现。