mpi4py 返回排名差异

Posted

技术标签:

【中文标题】mpi4py 返回排名差异【英文标题】:mpi4py returning rank differences 【发布时间】:2013-03-20 07:24:49 【问题描述】:

我想跨两个不同版本的 python 从 python 脚本(并且,为了测试,以交互方式,但不是从 ipython)启动并行进程,并从 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.
--------------------------------------------------------------------------

任何想法为什么?谢谢!

【问题讨论】:

【参考方案1】:

如果不是从 mpirun/mpiexec 启动,MPI 可执行文件会形成 singletons,这就是为什么 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 派生的实现。

【讨论】:

以上是关于mpi4py 返回排名差异的主要内容,如果未能解决你的问题,请参考以下文章

文件内容排名算法,输入排名函数,返回排名后的文件名

按降序排序并返回用于排名的记录号

MYSQL 仅在询问第一个排名时不会在 PHP 中返回结果

ROW_NUMBER 和 PARTITION 查询返回所有排名为 1 的行

尚大HQL-1_查询订单明细表(order_detail)中销量(下单件数)排名第二的商品id,如果不存在返回null,如果存在多个排名第二的商品则需要全部返回。

Solr/Lucene 有没有办法返回所选文档的排名而不是完整结果?