我编写了一个 python 脚本,它可以以独立方式启动,也可以在 mpi 支持下启动。
python myscript.py
对比
mpirun -np 2 python myscript.py
我如何在脚本内部知道脚本以何种方式启动以执行某些条件操作?
我编写了一个 python 脚本,它可以以独立方式启动,也可以在 mpi 支持下启动。
python myscript.py
对比
mpirun -np 2 python myscript.py
我如何在脚本内部知道脚本以何种方式启动以执行某些条件操作?
您是否关心它是使用 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