使用mpirun或启动MPI作业时mpiexec,我可以理解如何开始每个单独的过程.但是,如果没有任何编译器魔法,这些包装器可执行文件如何将安排(MPI通信器)传达给MPI进程?
我对细节很感兴趣,或者对指向何处的指针感兴趣.
Hri*_*iev 24
有关各个进程如何建立MPI Universe的详细信息是特定于实现的.您应该查看特定库的源代码,以了解它的工作原理.有两种几乎普遍的方法:
MPI_Init()与argc和argv用C -这样的图书馆可以访问到命令行,并提取意味着它的所有参数;例如,打开MPI设置环境变量,并将某些Universe状态写入在同一节点上运行的所有进程都知道的磁盘位置.您可以通过执行以下命令轻松查看其运行时组件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> ...
Run Code Online (Sandbox Code Playgroud)
(出于安全原因,IP已更改)
一旦子进程远程启动MPI_Init()或被MPI_Init_thread()调用,ORTE就会启动并读取这些环境变量.然后它使用"home" mpirun/ mpiexecprocess 连接回指定的网络地址,然后协调所有生成的进程以建立MPI Universe.
其他MPI实现以类似的方式工作.