第五章 组,上下文及通信子

5.1 简介 BACKWARD FORWARD


本章介绍MPI中支持并行库开发一些特征。我们可利用并行库将关键算法并行实现时所遇到的一些固有的令人烦恼的复杂性封装起来。它们有助于保证这种过程的一致正确性 并能提供比MPI本身更高层次的便利。另外,库还防止程序员重复定义一致性数据结构, 数据布局,及用于实现关键算法的方法等工作(诸如矩阵操作〕。因为最好的库往往是并行系统的一些变种(不同的数据布局,依据系统或问题的规模制定不同的策略,浮点类型〕, 这一点也需对用户隐藏。 读者在使用本章描述的MPI特征写库时可参照[26]和[3]获取进一步信息。

5.1.1 支持库的特征

支持创建稳定的并行库所需的关键特征如下所示:

另外,需要一个统一的机制或对象来方便地指示通信上下文,通信进程的组,嵌入抽象进程命名,存储装饰。

5.1.2 MPI对库的支持

MPI所提供的专用于支持稳定库的相应概念如下所示:

通信子 (见[16,24,27])将所有这些观点都封装起来以便为MPI中的所有操作提供适当的机会。通信子可分为两种:组内通信子~用于一组进程内的操作;组间通信子~用于 两组进程间的点对点通信。

缓冲区 通信子(见下面)提供了一个缓冲机制允许人们将与MPI固有特征等价的新的属性联系到通信子上.高级用户可利用这一机制进一步修饰通信子并通过MPI实现一些通信子函数。例如,第六章描述的虚拟拓扑函数就可能以这种方式得到支持.

组定义了一个进程的有序集合,每一进程具有一个序列号,而且为组间进程通信定义低级名字也是由组完成的(序列号用于发送和接收)。这样,组在点对点通信中为进程名字定义了一个范围.另外,组还定义了集合操作的范围.在MPI中可从通信子中对组进行分别维护,但是只有通信子才能用于通信操作.

组内通信子 MPI中消息传送的最普通方式就是利用组内通信子.组内通信子包含以下几方面:一个组的实例,点对点和集合通信的通信上下文,以及包括虚拟拓扑和其它属 性的能力.这些特征表现为如下形式:

对用户的建议:

当前许多通信库的惯例是这样的:当并行程序被初始化时,有一个唯一的预定义的空间来包含可获得的所有进程;这些进程被赋予连续的序列号。点对点通信中的成员通过它们的等级来相互区分;集合通信(例如广播〕 总是涉及所有进程。在MPI中通过使用预定义的通信子MPI_COMM_WORLD来遵循这一惯例。那些对这一惯例感到满意的用户可以将MPI_COMM_WORLD插入到任何一个要求通信子参数的地方,而且因此不必再关心本章的剩余部分。

组间通信子 迄今所讨论的都是组内通信:在一个组的内部进行通信。MPI也支持组间通信:在两个非重迭的组间进行通信。当一个应用是通过构造几个并行模块建立时,很方便地允许一个模块与第二个模块中的另一个使用局部序列号的进程进行通信。这一点在客户机与服务器模式中尤其方便,这种模式下的客户机与服务器是并行的。组间通信的支持也为MPI向动态模型的扩展了提供一种机制,在动态模型下不是所有的进程都在初始化时预分配的。在这种条件下,支持跨越空间的通信是很必要的。组间通信由名为组间通信子的对象支 持。这些对象用两组共享的通信上下文将两个组绑定在一起。对于组间通信,这些特征表现为如下形式:

MPI提供了创建和维护组间通信子的机制。它们以一种与组内通信子相关的方式被点 对点通信所使用。那些在他们的应用中不需要组间通信的用户可以很安全地忽略这一扩展。那些需要通过组间通信子进行集合操作的用户必须在MPI顶部指明它。那些要求在重迭组间进行组间通信的用户也必须在MPI顶部指明这一能力。


Copyright: NPACT BACKWARD FORWARD