我已经阅读了这些术语的定义,我的解释是群体和传播者之间存在一对一的关系。组是一组希望相互通信的进程,而通信器是组的实现。
它是否正确?如果是这样,为什么有两个不同的术语?
我已经阅读了这些术语的定义,我的解释是群体和传播者之间存在一对一的关系。组是一组希望相互通信的进程,而通信器是组的实现。
它是否正确?如果是这样,为什么有两个不同的术语?
组是一组有序的进程标识符(MPI 2.2 规范,第 6.2.1 节)。排序是通过将每个进程标识符与从 0 到 group.size - 1的唯一等级相关联来给出的。
通信器封装了一组进程之间的所有通信。内部通信器与组以及用于点对点和集体通信的通信上下文以及可能的其他上下文信息相关联,例如虚拟拓扑(规范,6.1.2)。一个内部通信器与两个不重叠的组相关联。
我(可能非常松散地)将通信者组视为其符号表。
一个组可能包含来自多个通信器的进程标识符。
最后,组的构造和操作是进程本地的,不涉及进程间通信。一般来说,这对于传播者来说并非如此(就其本质而言)。
正如我在阅读 MPI 规范后发现的那样,传播者和组之间存在很多差异。
编辑:组是代表进程组的对象。
Communicator 是一组可以相互通信的进程,可以由来自单个组或多个组的进程组成。
因此,它们是完全不同的实体。他们不应该相互混淆。
通信器包含组,而组只是进程的集合。
如果一个通信器只包含一个组,则称为内部通信器(通信器 MPI_COMM_WORLD 就是这样一种,它指的是一个包含所有等级的组)。
如果它包含两个组,则在 intercommunicator 中调用它(默认情况下没有为您创建)。
看看https://computing.llnl.gov/tutorials/mpi_advanced/DavidCronkSlides.pdf,他在其中给出了一个非常好的图解解释,说明传播者如何成为一个或两个群体的容器。
MPI 中的组对应于数学概念“集合”,在 MPI 中引入该概念以促进组织流程和创建新的通信。例如,您可以使用集合上的并集和交集操作来创建新集合,以便您可以使用它们来创建新的通信器。
组与通信无关,尽管组可用于创建通信器(通信器是组加上上下文)。
组也可以用作在不同进程之间分配任务/数据的 ID。例如,我们可以测试一个进程是否在一个组中,以确定它是否应该做某事。
通信器是描述一组进程的对象。在许多应用程序中,所有进程紧密耦合在一起工作,您需要的唯一通信器是 MPI_COMM_WORLD 。
描述您的工作开始的所有流程的组。