MPI进程是如何开始的?(How are MPI processes started?)

2019-07-29 18:32发布

当开始MPI作业mpirunmpiexec ,我能理解一个会如何开始每一道工序。 然而,没有任何神奇的编译器,如何做这些包装可执行沟通的安排(MPI通信)到MPI进程?

我感兴趣的细节,或者在哪里找的指针。

Answer 1:

对个别进程如何建立MPI宇宙细节是实现特定的。 你应该考虑的具体库的源代码,以了解它是如何工作的。 有两个几乎是普遍的做法,但:

  • 命令行参数:所述MPI启动器可以将参数传递给产生的进程指示如何以及在哪里,以便建立宇宙连接。 这就是为什么MPI必须通过调用初始化MPI_Init()argcargv用C -这样的图书馆可以访问到命令行,并提取意味着它的所有参数;
  • 环境变量:MPI发射器可以设置特定的环境变量,其内容可以指示在何处以及如何连接。

例如开放MPI设置环境变量,也已知于同一节点上运行的所有进程磁盘位置写入一些宇宙状态。 你可以很容易地看到特殊的变量,它的运行时组件ORTE(的openmpi运行时环境)使用通过执行这样的命令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> ...

(IPS改变出于安全原因)

一旦孩子的过程是远程启动和MPI_Init()MPI_Init_thread()被调用时,ORTE踢并读取这些环境变量。 然后,它连接回指定的网络地址与“家” mpirun / mpiexec过程,从而协调所有的子进程到建立MPI宇宙。

其他MPI实现以类似的方式工作。



文章来源: How are MPI processes started?
标签: mpi