MPI流程是如何开始的?

时间:2012-06-06 10:54:06

标签: mpi

使用mpirunmpiexec启动MPI作业时,我可以理解如何启动每个单独的流程。但是,如果没有任何编译器魔法,这些包装器可执行文件如何将安排(MPI通信器)传达给MPI进程?

我对细节感兴趣,或者对指向何处的指针感兴趣。

1 个答案:

答案 0 :(得分:24)

有关各个进程如何建立MPI Universe的详细信息是特定于实现的。您应该查看特定库的源代码,以了解它的工作原理。有两种几乎普遍的方法:

  • 命令行参数:MPI启动程序可以将参数传递给生成的进程,指示如何以及在何处连接以建立Universe。这就是为什么必须通过在C中调用带有MPI_Init()argc的{​​{1}}来初始化MPI的原因 - 因此库可以访问命令行并提取所有适用于它的参数; < / LI>
  • 环境变量:MPI启动器可以设置特定的环境变量,其内容可以指示连接的位置和方式。

打开MPI例如设置环境变量,并将某些Universe状态写入在同一节点上运行的所有进程都知道的磁盘位置。您可以通过执行argv之类的命令轻松查看其运行时组件ORTE(OpenMPI运行环境)使用的特殊变量:

mpirun -np 1 printenv

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

远程启动子进程并调用$ 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> ... MPI_Init()后,ORTE将启动并读取这些环境变量。然后它使用“home”MPI_Init_thread() / mpirun进程连接回指定的网络地址,然后协调所有生成的进程以建立MPI Universe。

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