mpirun、mpiexec和mpiexec.hydra有什么区别和关系?

What is the difference and relationship between mpirun, mpiexec and mpiexec.hydra?

我对 3 件事感到困惑:mpirun、mpiexec 和 mpiexec.hydra

在我的集群上,它们都存在,并且都属于intel。

它们之间有什么区别和关系?尤其是mpiexec.hydra到底是什么东西?为什么mpiexec和hydra中间有个点,是什么意思?

mpirunmpiexec 基本相同——许多 MPI 实现中进程启动器的名称。 MPI 标准没有说明应该如何启动和控制行列,但它建议(但不要求)如果有任何类型的启动器,则应将其命名为 mpiexec。一些 MPI 实现以 mpirun 开头,然后采用 mpiexec 以实现兼容性。其他实现则相反。最后,大多数实现都以这两个名称提供它们的启动器。实际上,mpirunmpiexec 的作用应该没有区别。

不同的 MPI 实现具有不同的启动和控制进程的方法。 MPICH 从称为 MPD(Multi-Purpose Daemon 之类)的基础设施开始。然后它切换到更新的 Hydra 进程管理器。由于 Hydra 做事的方式与 MPD 不同,基于 Hydra 的 mpiexec 采用与基于 MPD 的命令行参数不同的命令行参数,并使用户可以明确地 select 基于 Hydra 的命令行参数,它以 mpiexec.hydra 的形式提供。旧的叫mpiexec.mpd。有可能有一个基于 MPICH 的 MPI 库只提供 Hydra 启动器,然后 mpiexecmpiexec.hydra 将是相同的可执行文件。 Intel MPI 基于 MPICH,其更新版本使用 Hydra 进程管理器。

Open MPI 建立在 Open 运行-Time Environment (ORTE) 之上,它自己的进程启动器称为 orterun。为了兼容性,orterun 也被符号链接为 mpirunmpiexec.

总结一下:

  • mpiexec.something 是给定实现的 MPI 进程启动器的特定版本
  • mpiexecmpirun 是通用名称,通常是实际启动器的副本或符号链接
  • mpiexecmpirun 应该做同样的事情
  • 有些实现将其启动器命名为 mpiexec,有些将其命名为 mpirun,有些将两者都命名,当系统中同时存在多个 MPI 实现时,这通常是混淆的根源路径(例如,从发行包安装时)