调用从MPI进程调用MPI进程的脚本

时间:2013-04-10 13:55:03

标签: mpi openmp mpich

我有一个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不会说会发生什么”,所以这个似乎也不太理想。

有些观点:

  • 在shell脚本中调用的程序根本不需要与调用程序进行交互。调用程序只需要等到该过程完成。
  • 没有一种简单的方法可以将shell脚本转换为单独的可执行文件(许多环境变量设置,等等)。
  • 理想情况下,这应适用于MPICH和Open MPI

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:1)

对于MPICH,遗憾的是,使用MPI_Comm_spawn可能最有效。您唯一的另一个选择是在调用嵌套MPI程序之前找出所有依赖于实现的,依赖于版本的环境变量,这些变量在shell脚本中需要unset。一些示例变量(对于MPICH)将包括PMI_RANKPMI_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需要对不同的变量进行调整。