[英]mpi4py returning rank differences
我想从 python 脚本(并且,为了测试,交互,但不是从 ipython)启动并行进程,跨越两个不同版本的 python,并且已经开始使用mpi4py
。 这两个版本分别是(分别用于 2 核和 8 核):
Python 2.7.2 |EPD 7.2-2 (64-bit)| (default, Sep 7 2011, 16:31:15)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
和
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
在第一个(学习绳索)上,我交互式地得到:
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))
我得到
Hello, World! I am process 0 of 5 on localhost.
Hello, World! I am process 1 of 5 on localhost.
Hello, World! I am process 2 of 5 on localhost.
Hello, World! I am process 3 of 5 on localhost.
Hello, World! I am process 4 of 5 on localhost.
以交互方式启动python时如何获得size
> 0?
顺便说一句,做./helloworld.py
而不是python helloworld.py
不起作用:
localhost:demo jtlz2$ mpiexec -n 5 ./helloworld.py
--------------------------------------------------------------------------
Failed to find or execute the following executable:
Host: localhost
Executable: ./helloworld.py
Cannot continue.
--------------------------------------------------------------------------
任何想法为什么? 谢谢!
如果不是从mpirun
/ mpiexec
启动,MPI 可执行文件会形成单例,这就是为什么MPI_COMM_WORLD
总是大小为 1 的原因。
至于mpiexec
未能找到可执行文件,后者必须设置其“可执行”位,例如通过
$ chmod +x helloworld.py
交互式运行 MPI 作业很棘手。 大多数 MPI 实现对所有进程执行输出重定向,这就是为什么您可以看到组合输出的原因,但对于输入重定向则不然。 只有等级 0 能够接收交互式输入。 不过,您可以做几件事:
以交互方式运行 rank 0 并让其他 rank 执行脚本。 这将允许你探索与其他队伍的交流:
$ 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 派生的实现.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.