0

我有一个 MPI 程序(Fortran,MPICH),我需要将它转换成一个脚本,然后启动它自己的 MPI 程序(使用mpirun)。到目前为止,我已经将 shell out ( system) 命令封装在一个if(system_num .eq. root_system_num)东西中,因此只有一个 MPI 进程运行该脚本。但是,这会导致一系列HYDU_create_process错误。

我考虑过使用MPI_Comm_spawn,但有类似“MPI 没有说明如果您启动的程序是一个 shell 脚本并且那个 shell 脚本启动一个调用的程序会发生什么”的警告MPI_INIT,所以这似乎也不理想。

几点:

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

有没有办法做到这一点?

4

1 回答 1

1

对于 MPICH MPI_Comm_spawn,不幸的是,您最好使用 . 您唯一的其他选择是在调用嵌套 MPI 程序之前找出所有依赖于实现、依赖于版本的环境变量,这些环境变量需要unset在您的 shell 脚本中。一些示例变量(对于 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,需要调整不同的变量。

于 2013-04-11T13:03:29.743 回答