我有一个MPI程序(Fortran,MPICH),我需要将其从一个脚本中解脱出来,然后脚本启动它自己的MPI程序(使用mpirun
)。到目前为止,我已将shell(system
)命令包装在if(system_num .eq. root_system_num)
内,因此只有一个MPI进程运行该脚本。但是,这会导致一系列HYDU_create_process
错误。
我考虑使用MPI_Comm_spawn
,但是有一些警告,例如“如果您启动的程序是一个shell脚本并且该shell脚本启动一个调用MPI_INIT
的程序,那么MPI不会说会发生什么”,所以这个似乎也不太理想。
有些观点:
有办法做到这一点吗?
答案 0 :(得分:1)
对于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
显然,Open MPI或不同版本的MPICH2 / MPICH需要对不同的变量进行调整。