0

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

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

非常感谢!

tl; dr MPI 节点是否可从 MPI_COMM_WORLD 热交换?

4

1 回答 1

3

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

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

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

于 2012-05-24T16:57:14.187 回答