【问题标题】:OpenMPI node & network topologyOpenMPI 节点和网络拓扑
【发布时间】:2012-05-31 06:46:48
【问题描述】:

我目前正在构建一个小型实用程序库,作为大型项目的一部分。 OpenMPI 有一个有据可查的 API 库,但是当涉及到节点之间的较低级别的通信时,我有点困惑。 我知道在编写你的算法时,你将它分布在所有预计进行计算的节点上,每个节点都与其余节点进行通信,根据它们的“全局”MPI 等级(如算法中定义)执行算法的一部分,以及所有节点来回同步。但是,我将 global 放在引号中的原因是,openMPI 是否在 ip 级别进行通信,因此说我已经有一个长时间执行的算法,但是如果我执行我的 MPI,有一个节点处于空闲状态,没有运行任何 MPI 进程算法,它会加入 MPI_COMM_WORLD 并成为整个网络拓扑的一部分,还是我需要做一些“巫术”来使该节点成为 MPI_COMM_WORLD 的一部分。 另外,如果节点可以成为该特定算法的 MPI_COMM_WORLD 的一部分,我如何注册/识别这个新节点?

任何阅读参考资料也很有帮助。

非常感谢!

tl;dr 是否可以从 MPI_COMM_WORLD 热插拔 MPI 节点?

【问题讨论】:

    标签: c networking mpi openmpi topology


    【解决方案1】:

    一旦创建了通讯器,您就无法将节点加入通讯器。 MPI_COMM_WORLD 也是如此,它只是一个预先创建的通信器。只有作为初始 SPMD 启动的一部分启动的进程才会成为 MPI_COMM_WORLD 的一部分。但您可以使用 MPI-2 进程管理工具生成其他进程,如当前 MPI 标准 2.2 版的Chapter 10 中所述。

    新生成的进程有自己的MPI_COMM_WORLD,初始组的进程只能通过一个特殊的intercommunicator与它们通信(MPI_COMM_WORLDintracommunicator)由 spawn 操作返回。由于进程生成是一项集体操作,MPI_COMM_WORLD 中的所有进程都将获得该交互器的句柄。

    MPI 3.0(迟早会推出)将带来故障容错,允许从MPI_COMM_WORLD(或任何其他通信器)中排除/删除错误进程,而 MPI 3.1 最终将带来一些允许有问题的进程要更换。

    【讨论】:

    • 谢谢快速回复;顺便说一句,我也来自保加利亚,我的名字是 Georgi :)
    • 我还有一个关于通信方案的快速问题;如果我在特定进程中从 MPI_COMM_WORLD 创建选定节点的组通信器,该进程是唯一拥有该 MPI_Group 句柄的进程,还是跨属于该组的所有节点创建的?
    • 请记住,关于 MPI-3 的前瞻性陈述并不是确定的事情。例如,容错部分目前高度有争议,并且不能保证是 MPI-3 的一部分。
    • 根据您的评论问题,MPI 对节点一无所知——它只了解 进程。也没有所谓的“群体传播者”——传播者拥有一个群体,但它们并不完全相同。组是一组进程。沟通者是具有独特沟通背景的群体。示例:您可以在通信器上发送和接收;您不能在群组中发送和接收。所以如果我理解你的问题,MPI_Group 句柄是本地的,但一些构造函数本质上是集体的(这意味着所有进程都必须调用它们)。
    猜你喜欢
    • 1970-01-01
    • 2014-10-14
    • 2011-03-31
    • 2011-05-08
    • 2013-06-30
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 2012-03-01
    相关资源
    最近更新 更多