我想从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派生的实现.