【问题标题】:How are MPI processes started?MPI 进程是如何启动的?
【发布时间】:2012-06-10 09:14:12
【问题描述】:

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

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

【问题讨论】:

    标签: mpi


    【解决方案1】:

    有关各个流程如何建立 MPI 领域的详细信息是特定于实现的。您应该查看特定库的源代码以了解其工作原理。不过,有两种几乎通用的方法:

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

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

    $ 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 就会启动并读取这些环境变量。然后它使用“home”mpirun/mpiexec 进程连接回指定的网络地址,然后协调所有衍生的进程以建立 MPI 世界。

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

    【讨论】:

    • 很好的回应,谢谢!我认为环境变量是一种可能性,但找不到确认。
    猜你喜欢
    • 2013-06-22
    • 2015-02-20
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 2015-02-17
    相关资源
    最近更新 更多