当开始MPI作业mpirun
或mpiexec
,我能理解一个会如何开始每一道工序。 然而,没有任何神奇的编译器,如何做这些包装可执行沟通的安排(MPI通信)到MPI进程?
我感兴趣的细节,或者在哪里找的指针。
当开始MPI作业mpirun
或mpiexec
,我能理解一个会如何开始每一道工序。 然而,没有任何神奇的编译器,如何做这些包装可执行沟通的安排(MPI通信)到MPI进程?
我感兴趣的细节,或者在哪里找的指针。
对个别进程如何建立MPI宇宙细节是实现特定的。 你应该考虑的具体库的源代码,以了解它是如何工作的。 有两个几乎是普遍的做法,但:
MPI_Init()
用argc
和argv
用C -这样的图书馆可以访问到命令行,并提取意味着它的所有参数; 例如开放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实现以类似的方式工作。