【发布时间】:2013-05-12 19:39:52
【问题描述】:
我编写了一个 Python 脚本,它既可以独立启动,也可以通过 mpi 支持启动。
python myscript.py
对
mpirun -np 2 python myscript.py
如何在脚本内部知道脚本以何种方式启动以执行某些条件操作?
【问题讨论】:
标签: python conditional mpi
我编写了一个 Python 脚本,它既可以独立启动,也可以通过 mpi 支持启动。
python myscript.py
对
mpirun -np 2 python myscript.py
如何在脚本内部知道脚本以何种方式启动以执行某些条件操作?
【问题讨论】:
标签: python conditional mpi
您是否关心它是使用 MPI 运行还是在一个 MPI 等级上运行?对于已编译的 MPI 代码,仅运行程序仍会在 MPI 下启动它,但只有一级;所以你可能只是初始化 MPI 并检查MPI_COMM_WORLD 的大小。但是,如果您在没有 MPI 的情况下运行,则可能是您试图避免初始化 MPI(或者甚至需要有可用的 MPI 实现)。如果是这样,您可能需要检查特定的环境变量,这些变量似乎是特定于实现的。对于 Open MPI,列表位于 http://www.open-mpi.org/faq/?category=running#mpi-environmental-variables。对于 MPICH,各种消息来源都提到了 PMI_RANK 和 PMI_SIZE 作为常用设置; Microsoft MPI 记录了它设置的那些。它们可能特定于特定的 MPICH 版本或配置。 http://www.roguewave.com/portals/0/products/threadspotter/docs/2012.1/linux/manual_html/apas03.html 有一个变量列表可供检查,这也可能有用。
【讨论】:
如果你在 Unix 上,你可以分析以下输出:
import os
print os.popen("ps -p %d -oargs=" % os.getpid()).read().strip()
与getpid() 和getppid()(针对父母)一起玩。对于可移植的解决方案,您需要像 psutil 这样的外部库:
import psutil, os
p = psutil.Process(os.getppid())
print p.name
【讨论】: