MPI进程是如何启动的?

14

在使用 mpirunmpiexec 启动MPI作业时,我能理解如何启动每个单独的进程。但是,在没有编译器魔法的情况下,这些包装运行文件如何将排列(MPI通信器)传达给MPI进程呢?

我对细节感兴趣,或者想知道在哪里寻找相关信息。

1个回答

25

关于各个进程如何建立MPI宇宙的细节是与具体实现相关的。为了理解其工作原理,您应该查看特定库的源代码。但是有两种几乎普遍存在的方法:

  • 命令行参数:MPI启动器可以向生成的进程传递参数,指示如何在哪里连接以建立宇宙。这就是为什么MPI必须通过使用C中的MPI_Init()调用并提供argcargv来进行初始化的原因-因此库可以访问命令行并提取所有用于它的参数;
  • 环境变量:MPI启动器可以设置特定的环境变量,其内容可以指示如何连接以及连接何处。

例如,Open MPI设置环境变量,并将一些宇宙状态写入已知由所有运行在同一节点上的进程共享的磁盘位置。您可以轻松地查看其运行时组件ORTE(OpenMPI Run-Time Environment)使用的特殊变量,方法是执行类似于mpirun -np 1 printenv 的命令:

$ mpiexec -np 1 printenv | grep OMPI
... <many more> ...
OMPI_MCA_orte_hnp_uri=1660944384.0;tcp://x.y.z.t:43276;tcp://p.q.r.f:43276
OMPI_MCA_orte_local_daemon_uri=1660944384.1;tcp://x.y.z.t:36541
... <many more> ...

(出于安全原因已更改IP)

一旦远程启动子进程并调用MPI_Init()MPI_Init_thread(),ORTE将会读取这些环境变量。然后,它会连接回指定的网络地址,并与“主”mpirun/mpiexec进程建立联系,该进程随后协调所有生成的进程以建立MPI宇宙。

其他MPI实现方式类似。


非常感谢您的回复!我想到了环境变量作为可能性,但找不到确认。 - Bojan B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接