我目前正在构建一个小型实用程序库,作为更大项目的一部分。 OpenMPI有一个记录良好的API库,但是当涉及到节点之间的低级通信时,我有点困惑。 我知道在编写算法时,将它分布在预期进行计算的所有节点上,每个节点与其余节点进行通信,根据其“全局”MPI等级(在算法中定义)执行算法部分,以及所有节点来回同步。但是,我在引号中放置全局的原因是,openMPI是否在ip级别进行通信,因此说我已经有一个执行时长的算法,但是如果我执行了我的MPI,则有一个空闲的节点,没有运行任何MPI进程算法就可以了,它会加入MPI_COMM_WORLD并成为整个网络拓扑的一部分,还是需要做一些“伏都教”来使该节点成为MPI_COMM_WORLD的一部分。 此外,如果节点可以成为该特定算法的MPI_COMM_WORLD的一部分,我如何注册/识别这个新节点?
任何阅读参考也都有帮助。
非常感谢!tl; dr是可从MPI_COMM_WORLD热插拔的MPI节点吗?
答案 0 :(得分:3)
创建后,您无法将节点连接到通信器。 MPI_COMM_WORLD
也是如此,它只是一个预先创建的沟通者。只有作为初始SPMD启动的一部分启动的进程才会成为MPI_COMM_WORLD
的一部分。但是,您可以使用MPI-2流程管理工具生成其他流程,如当前MPI标准版本2.2的Chapter 10中所述。
新生成的进程有自己的MPI_COMM_WORLD
,初始组的进程只能通过特殊的 intercommunicator 与他们通信(MPI_COMM_WORLD
是 intracommunicator < / strong>)由spawn操作返回的。由于进程生成是一个集合操作,MPI_COMM_WORLD
中的所有进程都将获得该对话者的句柄。
MPI 3.0(迟早会出局)将带来直通容错,允许从MPI_COMM_WORLD
(或任何其他通信器)排除/删除错误进程,MPI 3.1最终会带来一些将允许更换错误的过程。