python – mpi4py返回排名差异

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

Python 2.7.2 | EPD 7.2-2(64位)| (默认,2011年9月7日,16:31:15)
darwin上的[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步,共5步.

你好,世界!我是本地主机上的第5个过程.

你好,世界!我是本地主机上的第3步(共5步).

你好,世界!我是本地主机上的第4个过程.

我怎样才能获得尺寸>交互式启动python时为0?

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

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

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

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

无法继续.

有什么想法吗?谢谢!

解决方法:

如果没有从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派生的实现.

上一篇:从c代码发送mpi消息到fortran 90代码


下一篇:自动化发送邮件的三种方式