20100428第三章 并行计算模型和任务分解策略

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第三章并行计算模型和任务分解策略

首先,我们将研究不同类型的并行计算机,为了不严格限定于某个指定机型,我们通过模型把并行计算机抽象为几个特定属性。为了说明并行程序中处理器之间的通信概念模型我们讨论了不同的程序模型,另外为了分析和评估我们算法的性能,我们讨论了多计算机架构下评估并行算法复杂度的代价模型。在介绍并分析的各种代价模型的基础上给出了改进型的代价模型。

其次我们定义这样几个指标如负载均衡和网络半径等用来研究图分解问题的主要特性。并把图分解问题归纳为一般类型和空间映射图类型。我们重点研究的是后者,因为多尺度配置真实感光照渲染算法可以很方便的描述成空间映射图形式。

3.1 并行计算机模型

以下给出并行计算机的模型的概述,根据其结构并行计算机大致可分为以下几类。

多计算机(Multicomputer):一个von Neumann计算机由一个中央处理器(CPU)和一个存储单元组成。一个多计算机则由很多von Neumann计算机通过互联网络连接而成的计算机系统。见图3.1。每个计算机(节点)执行自己的计算并只能访问本地的存储。通过消息实现各计算机之间的互相通讯。在理想的网络中,两个计算节点之间的信息传送代价与本地的计算节点和它的网络阻塞无关,只和消息的长度相关。以上多计算机和分布式存储的MIMD机器之间的主要区别在于后者的两个节点间的信息传输不依赖于本地计算和其它网络阻塞。

分布式存储的MIMD类型的机器主要有IBM的SP, Intel的Paragon, 曙光4000系列, Cray 的T3E, Meiko的CS-2, NEC的Cenju 3, 和nCUBE等。通过本地网络的连接的集群系统可以认为是分布式存储的MIMD型计算机。

多处理器(Multiprocessor):一个多处理器型并行计算机(共享存储的MIMD计算机)由大量处理器组成,所有的处理器都访问一个共同的存储。理论上理想的模型就是PRAM模型(并行的随机访问系统),即任何一个处理器访问任一存储单元都是等效的(见图3.2)。并发存储访问是否允许取决于所使用的真正的模型【34】。

混合模型:分布式共享存储(DMS)计算机,提供了一个统一的存储访问地址空间但是分布式物理存储模块。编译器和运行时系统负责具体的并行化应用。这种系统软件比较复杂。

图3.1 多计算机模型图3.2 PRAM 模型

SIMD计算机:在一个SIMD(单指令流多数据流)计算机中在不同数据流阶段所有的处理器执行同样的指令流。典型的机型有MasPar的MP, 和联想机器CM2。

多计算机系统具有良好的可扩展性,价格低廉的集群式并行计算机就属于这种模型,本文中的算法主要基于多计算机体系结构。

3.2 程序模型

并行程序的编程语言如C或Fortan。并行结构以某种类库的形式直接整合进这些编程语言中。编程模型确定了并行程序的风格。一般可分为数据并行、共享存储和消息传递等模型[35]。

数据并行编程:数据并行模型开始于编写同步SIMD并行计算机程序。程序员需要在每个处理器上独立执行一个程序,每个处理器均有其自己的存储器。程序员需要定义数据如何分配到每个局部存储中。实际应用中大量的条件分支的需要使得其很难高效的运行在SIMD型的机器上。

共享存储编程:共享存储模型是一个简单的模型,因为程序员写并行程序就像写串行程序一样。一个程序的执行与几个处理器独立,也不需要同步。一个处理器的执行状态独立于其它处理器的运

行状态。由于所有运行程序均访问统一的全局存储器,这就需要小心处理任何一个处理器需要访问的数据都必须和其它处理器的访问之间没有任何冲突。

消息传递模型:我们把消息传递模型和SPMD(单一程序多数据)应用技术结合使用。每个程序独立在几个处理器上执行,不需要同步(MIMD系统)。每个程序均立即访问本地存储,通过消息传递实现远程的存储访问。通信方式主要有一下几个不同类型:

点对点通信(point-to-point communication):一个处理器发送一个数据包到另一个处理器,使用发送操作,目标处理器必须调用一个接受操作获得这些数据。我们假定一个处理器可以同时和其它处理器通信,我们还假定一个处理器在同一时间只能和一个处理器通信。且通信为异步,也就是说接收处理器可以在发送操作完成后的任意时间调用接收命令。

集合通信(collective communication):集合通信涉及到多处理器之间的通信。

投射(cast):一个处理器同时拷贝同样的信息到其它多个处理器的过程。

聚合(combine):组内每个处理器只负责发送整个数据段的一部分,由一个主处理器接受所有结果,这个过程需要一个额外的数据统计数据项的个数。

M个处理器之间的集合通信可以通过大量的点对点通信以树形方式在时间内完成,这里假定每个处理器之间的通信物理链路均是独立的。

对于并行语言的实现方面,很多的研究工作在对现有的串行程序语言的基础上进行扩展以实现并行化计算方面作出了大量有益的尝试,如H PC++[36]或HPF [37]等试图在C++或Fortran语言中应用不同的程序模型。现在把并行性能整合到现有的编成语言中的一个可行方案就是给对语言提供能实现并行处理和通信的运行库。这其中关键的挑战在于扩展已有语言中新的语言元素和关键字。

目前对现有语言进行并行化扩展的工作还处于比较初级的阶段。建立一个标准去规范这方面的应用是必要的,基于这样标准可以整合大量不同的计算模型,因此,使用消息传递作为编程模型可以使得程序保持一定的灵活性,随着将来并行语言的不断扩充和发展而已有的并行应用方案在不需要修改。

本文采用的编程模型是消息传递模型。这在过去的若干年里业界已形成了消息传递模型的一个标准—MP I【38,39】。当前很多超级计算机实现了大量高效的MPI应用。采用免费、高效、可移植性好的称之为MPICH的并行编程语言构建适用于集群系统的并行计算的应用,可以使得我们基于MPI的应用可以很容易的移植到其它很多并行计算环境中。

3.3 代价模型

确定了基于消息传递模型进行并行算法的设计,接着就需要分析该算法的算法复杂度。对于算法复杂度问题,由于大量不同类型的超级计算机的存在使得统一且能准确预测一个算法的特性几乎不可能。因此我们必须指定一个代价模型作为我们的分析依据。显然这个模型应该尽可能模拟当前的超级计算机的性能结构。前人已在该领域做了大量的工作来定义一般的代价模型,使得我们可以通过该模型准确预测并行算法的复杂性,而不用考虑编程模型或使用哪种硬件。首先介绍目前比较常见的几种并行计算代价模型,接着在同步性、通信方式和参数等3个方面对它们作一简单分析比较。详细的概述文章见【40】。

本文采用的机器模型是多计算机,该模型包括了p个独立的处理器,每个只能访问其本地的存储。处理器间异步工作且通过一个由处理器对之间的双向通信链路连接而成的网络进行通信。以点对点方式通信,例如,一个处理器发送数据包到另一个处理器,就是用send操作。目标处理器调用receive 操作接收数据。衡量点对点通信的代价的方法很多,下面介绍一些主要方法。

真正具有大规模处理器的超级计算机不会给每对处理器之间提供独立的物理的通信链路。而是采用处理器之间的通道共享方式。如果两处理器对之间需要同时占用该通道进行通信时就会发生消息阻塞。由于这种阻塞和特定的网络拓扑结构有关,所以以下一般代价模型没有考虑这些问题。但我们将在第3.4.3中讨论如何避免或减少阻塞的一般方法。这还考虑了在分布式存储模型上整合其它的作为原子操作的通信类如涉及到群组处理器之间的集合通信。显然这些通信可以通过大量的点对点通信方式得到。我们只使用点对点的通信模式,使得我们的算法不需要依赖那些需要更高效的专门的硬件支持集合通信。

3.3.1 Postal模型

相关文档
最新文档