我目前正在建设一个小型实用程序库,作为一个更大项目的一部分。
OpenMPI有一个文档丰富的API库,但是当涉及到节点之间的低级通信时,我有点困惑。
我知道,在编写算法时,您将它分布在所有节点上,每个节点都要进行计算,并与其他节点通信,根据它们的“全局”MPI秩(如算法中定义的)执行算法的一部分,所有节点来回同步。但是,我将global放在引号中的原因是,openMPI是否在ip级别上通信,因此我已经有了一个很长的执行算法,但是有一个节点正在空闲,没有运行任何MPI进程,如果我在它上执行MPI算法,它会加入MPI-COMM-u世界并成为整个网络拓扑的一部分吗?还是我需要做一些“伏都教”来让这个节点成为MPI-COMM-u世界的一部分。
此外,如果节点可以成为特定算法的MPI通信世界的一部分,我如何注册/标识这个新节点?
任何阅读参考资料也有帮助。
非常感谢!
tl;dr是否可以从MPI通信世界热交换MPI节点?
最佳答案
一旦创建了通信器,就不能将节点联接到它。这也适用于MPI_COMM_WORLD
这只是一个预处理的通信器。只有作为初始SPMD启动的一部分启动的进程才成为MPI_COMM_WORLD
的一部分。但您可以使用MPI-2进程管理工具生成其他进程,如当前MPI标准版本2.2的Chapter 10中所述。
新生成的进程有自己的MPI_COMM_WORLD
进程,初始组的进程只能通过生成操作返回的特殊内部通信程序(MPI_COMM_WORLD
是内部通信程序)与它们通信。由于进程生成是一个集合操作,MPI_COMM_WORLD
中的所有进程都将获得该内部通信程序的句柄。
MPI 3.0(迟早会发布)将带来容错,允许从MPI_COMM_WORLD
(或任何其他通信器)中排除/删除错误进程,mpi3.1最终将带来允许替换错误进程的功能。
关于c - OpenMPI节点和网络拓扑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10741647/