繁体   English   中英

mpi4py 返回排名差异

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM