mpirun
当使用or开始 MPI 作业时mpiexec
,我可以理解如何开始每个单独的进程。但是,如果没有任何编译器魔法,这些包装器可执行文件如何将安排(MPI 通信器)传达给 MPI 进程?
我对细节感兴趣,或者在哪里看的指针。
mpirun
当使用or开始 MPI 作业时mpiexec
,我可以理解如何开始每个单独的进程。但是,如果没有任何编译器魔法,这些包装器可执行文件如何将安排(MPI 通信器)传达给 MPI 进程?
我对细节感兴趣,或者在哪里看的指针。
有关各个流程如何建立 MPI 领域的详细信息是特定于实现的。您应该查看特定库的源代码以了解其工作原理。不过,有两种几乎通用的方法:
MPI_Init()
调用来初始化 MPI - 因此库可以访问命令行并提取所有用于它的参数;argc
argv
例如,Open 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> ...
(出于安全原因更改了 IP)
一旦远程启动MPI_Init()
或MPI_Init_thread()
调用子进程,ORTE 就会启动并读取这些环境变量。mpirun
然后它使用“home” /进程连接回指定的网络地址mpiexec
,然后协调所有产生的进程以建立 MPI 世界。
其他 MPI 实现以类似的方式工作。