调用从MPI进程调用MPI进程的脚本
问题描述:
我有一个MPI程序(Fortran,MPICH),我需要将其从shell脚本中提取出来,该脚本依次启动自己的MPI程序(使用mpirun
)。到目前为止,我已经将shell(system
)命令包装在if(system_num .eq. root_system_num)
事件中,所以只有一个MPI进程运行脚本。但是,这会导致一系列HYDU_create_process
错误。调用从MPI进程调用MPI进程的脚本
我认为使用MPI_Comm_spawn
但也有像“MPI不说,如果你启动的程序是一个shell脚本和shell脚本启动调用MPI_INIT
程序会发生什么”,所以这似乎不太理想,以及警告。
几点:
- 称为shell脚本并不需要在所有调用程序进行交互的程序。调用程序只需等待该过程完成即可。
- 将shell脚本转换为单独的可执行文件(很多环境变量设置,等等)并不容易。
- 理想情况下,这应该适用于MPICH和Open MPI。
有没有办法做到这一点?
答
对于MPICH,不幸的是,您最好使用MPI_Comm_spawn
。你唯一的选择是在调用嵌套的MPI程序之前,找出所有依赖于实现的依赖于版本的环境变量,这些变量在shell脚本中需要为unset
。 (对于MPICH)一些示例变量将包括PMI_RANK
和PMI_PORT
:
% mpiexec -n 1 env | egrep '^PMI|^HYD'
HYDI_CONTROL_FD=8
PMI_RANK=0
PMI_FD=7
PMI_SIZE=1
显然,不同的变量将需要重组后开放MPI或不同版本MPICH2/MPICH的。
是的,我倾向于MPI_Comm_spawn。但是现在我需要解析各种文件来解析代码本身解析文件之前应该提取哪些环境变量。设计为由Fortran读取的文件,现在我必须制作一个shell脚本来完成它。 – 2013-04-11 13:43:17