OpenMPI 节点和网络拓扑

Posted

技术标签:

【中文标题】OpenMPI 节点和网络拓扑【英文标题】:OpenMPI node & network topology 【发布时间】: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 节点?

【问题讨论】:

【参考方案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 句柄是本地的,但一些构造函数本质上是集体的(这意味着所有进程都必须调用它们)。

以上是关于OpenMPI 节点和网络拓扑的主要内容,如果未能解决你的问题,请参考以下文章

常用网络拓扑结构都有哪些?各有啥特点

常见的网络拓扑结构主要有哪几种,各有啥特点

Qt之基于Graphics View实现Mesh网络拓扑图

Qt之基于Graphics View实现Mesh网络拓扑图

拓扑结构是啥?

关于zigbee 网络拓扑节点