20100428第三章 并行计算模型和任务分解策略
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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模型
Postal【67】模型主要用来描述具有下面3个方面特点的消息传递的通信系统:完全连通、同时I/O和通信延迟。
一个带有n个处理机和通信延迟的消息传递系统有下面3个属性:
(1)完全的连通性。
系统中的每一个处理机能够向系统中的任何其他处理机发送点对点消息;
(2)同时的I/O。
一个处理机p可以在给处理机q发送消息的同时接收处理机r发送来的消息;
(3)通信延迟。
如果在t时刻处理机P向处理机q发送我消息M.则P在时间间隔内忙
于发送消息M,而且q在时间间隔内忙于接收消息M。
上面是从处理机的观点来分析一个消息传递系统。
在这样的一个系统中,处理机之间靠通过一个通信网络互相发送和接收消息来通信,这样就产生了一个抽象的全连通的系统。
而在很多系统中,通过不同的输人输出端口,处理机确实可以同时发送和接收消息。
在Postal模型中,message被用来表示一个在处理机之间进行通信的不可分割的数据单元,一个message在发送的时候、传输的时候和接收的时候都不能被分成更小的快。
一个原子message 被定义为一个数据大小的单元,而发送或者接收一个message的时间被定义为一个时间单元。
发送大块数据的时候,这些数据会首先被分成多个message,每个message都被单独地发送和接收,这在许多报文交换系统(packet switching)中都是一种标准的实现。
上面所说的通信延迟中包括各方面的系统开销,具体来说包括消息准备时间、输出缓冲拷贝时间、输出端口提交延迟、网络传输延迟、输人端口延迟、输人缓冲拷贝时间和消息中断时间。
这里的通信延迟还包括所有的软件开销和硬件开销。
从形式上来说,的值为消息M的发送方开始发送消息到接收方完全接收完消息所用的时间。
尽管从形式上来说是这样,可实际^
的精确值可能取决于实际的发送接收组和宴际通信网络的负载;通常,的值应该是相对固定不变的,不同的处理机之间不能有很大的浮动。
3.3.2 BSP 模型
根据BSP (bulk synchronous parallel)[66]模型,一个并行计算机由下面3部分组成:第一,若干个存储器或者处理机组件;第二,这些组件之间的点对点通信;第三,这些组件之间的同步机制。
为简单起见,可以认为每个组件中包含一个处理机和本地存储器;在模型中,不要求关于通信系统、互连网络和同步系统的额外信息。
在BSP模型中,一个并行系统由下面3个参数来表示:
(1)P,系统中处理机的数目;
(2)g,把通信开销转换为计算开销的因子;
(3)L,两个同步之间的最短时间。
连续的两个同步之间的周期被定义为超步(superstep)。
在一个超步中一个处理机可以进行3个操作:首先各处理机处理本地存储器中的数据,可以是本地计算;然后各处理机向别的处理机提出远程内存读写请求,而通信实际发生在超步中的时间是不可预知的;最后,所有处理机进行障栅同步,本次超步的数据通信仅当同步以后有效。
在BSP模型中,计算操作的总量用处理机在计算过程中所做的基本操作的数目来表示,通信量则用字数来表示。
假设在同一次计算和通信中数据项的大小是一样的,而且假设在一个超步中的通信总量是被发送或者接受的最大字数。
通过因子g,通信开销被转换成计算开销,其中g 是系统中计算带宽与通信带宽的比值。
具体地说,就是每个处理机发送或者接收至多h个字的开销与在相同的时间内进行加次计算操作。
L表示连续的两次同步之间所能执行的操作的次数,它的具体值由同步操作的实现和上层算法来决定。
同步操作使得超步之间相互无关,根据BSP模型实现的算法的总开销就是所有超步开销的总和,而每一个超步的开销由该超步中计算开销和通信开销所决定。
BSP模型的一个不足之处在于处理器的同步只在superstep之间。
一个消息在一个superstep开始时发送只能被用于下一个superstep,即使superstep的长度比网络延时还要长;另一个缺点就是这个模型不能统计消息注入网络的时间。
这些不足可由以下模型弥补。
3.3.3 LogP 模型
LogP【68】是一个能很好地符合并行计算机系统中这种分布式存储、多处理器网络通信机制的计算模型。
利用LogP模型,通过4个重要参数就可以设计良好的适应不同处理器的算法。
这4个参数及含义如下:
(1)P(处理器/存储模块的个数)设处理器进行本地操作的单位时间为一个周期;
(2)L(最大通信延迟) 即从源模块到目的模块传输包含一个字或几个字的信息所用的时间;
(3)o(通信开销)即一个处理器发送一个信息所用的时间长度,在此时间段中处理器不能执行其它操作;
(4)g(通信间距) 即一个处理器连续进行信息收发的最小时间间隔,g的倒数对应于通信带宽。
在LogP模型中,通信网络被认为有有限的能力,因此在某一个时刻至多只有[L/g]消息从任何处理机到任何别的处理机。
如果某个处理机尝试传输消息时超过这个限制,这个超出的消息将被延迟,直到网络中别的消息已经传送完毕后再传输。
性能参数L、o和g都用处理机操作的周期数来表示。
LogP模型是异步的,延迟也只有一个上限,按一定的顺序发出的消息到达时的顺序可能不一致。
并且假设所有的消息都是短消息。
这些参数的选择是在忠实地获得实际机器的执行特点、提供一个有效的算法设计和分析的框架之问取一个折衷。
参数取得太少,不能很好地描述系统的特点;但参数取得太多,又会使算法的设计变得异常困难。
在不同的情况下,LogP模型中的各个参数也可以适当地化简来降低系统的复杂性。
这是因为在不同的情况下,各个参数的重要性也是不一样的,在某些情况下可以忽略一个或者更多参数,使模型变得更简单。
比如说,在不常进行通信的算法中,可以忽略带宽和网络能力有限带来的影响;在某些算法中,消息是由长的数据流以流水线的方式通过网络,这可以认为消息的传输时间主要受g的限制,而不用考虑通信延迟L;而在某些机器中,系统的瓶颈是o,则可以认为g=o,这样就可以不考虑g对算法的影响。
LogP模型通过抽象出来的4个参数来评价一个互连通信网络的性能,使得算法设计者不需要关心具体的网络信息,可以更容易地设计符合这种模型的算法。
3.3.4 LogGP[69]模型
LogGP模型是LogP模型的扩展,它发送长消息的理想模型[65]。
长消息由一个新参数gap表示:G:对于长消息每个字的间隔,对于长消息来说定义为每个字所需要的时间。
对于长消息来说G标识每个处理器的有效通信带宽。
g:消息的间隔,定义为在一个处理器消息的连续发送或接收之间的最小时间间隔,g表示每个处理器处理短消息的有效通信带宽。
在LogP模型中,并不对长消息做特别的处理,但是现在许多并行计算机对长消息都提供了特别的支持,比如IBM的SP2等。
与发送短消息相比,许多并行机采用处理长消息的方法来达到更高的带宽。
因此,在LogGP模型中引入了对长消息的支持,它比LogP多一个参数G,代表长消息每字节间距,即发送长消息每字节所需要的时间,它的倒数对应于处理机发送长消息时的带宽。
在新的LogGP模型中发送一具有k个字的消息需要花费周期。
发送和接收的处理器仅在第o个周期比较忙,其它时间周期它们都能把通信和计算重叠进行。
如果一个处理器需要在一行中发送两个长消息,那么在第一个消息发出之后和在第二个消息的首个字节传送到网络之前它必须等待g周期。
3.3.5 改进的模型
LogP模型是一个应用广泛的模型,但不太适合发送长消息。
LogGP模型又比较复杂,因为它引入两个通信间距参数。
我们的目标在于定性而不是定量的估计动态负载平衡算法的开销。
例如我们将部分使用O标记说明结果负载,对于这个结果如果只关注短消息和长消息之间的差别就太学究味
了。
为了简化计算我们假定长消息和短消息之间的间隔相等,即有g=G。
这时发送具有k个字的消息的花费为。
和LogGP模型相比我们假定发送和接收处理器在周期都很忙。
这是合理的,因为设置一个长消息的花费要比短消息长。
LogGP模型不包括发送消息的开始时间,因为它的目的仅测量通信开销,后续部分我们将以此分析一个并行算法的整个开销,当采用长消息通信时整个开销的确很大。
本文中的计算程序均设计为异步通信SPMD风格的程序。
仅有少量的全局通信的同步点,在这些点之间所有处理器都处于动态平衡负载的处理状态。
该程序的延迟几乎被计算过程重叠或略掉。
这
样我们将忽略这个延迟,这样我们的理论的开销为:
3.4 任务分解策略
我们定义一些指标如负载均衡和网络半径等以此来研究图分解问题的主要特性。
首先概述文献中对解决图分解问题所提到的策略,并将之归纳为一般类型和空间映射图类型。
本文主要侧重于后者,因为真实感光照渲染算法可以很方便的描述成空间映射图形式。
3.4.1图嵌入问题
在并行处理器上部署一个并行算法,首先要解决图嵌入问题[42]。
假定H代表计算节点间通信网络拓扑图,以此描述处理器的节点和通信链路。
一个任务图G表示应用的各子进程之间的通信需求。
把图G嵌入到并行体系结构H中就产生一个并行算法,使得应用的各子进程能较均匀的分配到每个处理节点上。
衡量把G嵌入到H中后等到的并行算法的性能主要有负载均衡性,可扩展性和阻塞等。
下面介绍几个关键概念:
负载(load):每个处理器具有相同的负载是图嵌入问题的最重要的目标,一个应用的总的运行时间取决于具有最大负载的处理器的运行时间。
膨胀(dilation):描述了一个时间周期(或称之为路径长度)即G中两个直连节点之间的通信消息在H中遍历所需要的时间。
阻塞(congestion): 测量路由通过H中任一条链路的G中边的最大数量。
阻塞从实践的观点看很重要,目前的映射技术的研究工作很少考虑到阻塞这个因素。
3.4.2 图分解问题
图分解法是图嵌入问题的一个可能的近似解决方案,分解就是把计算任务均衡的分配到各子进程中,并得到最小网络半径的过程。
这里没有考虑任务簇映射到处理器的过程,扩展的开销比较小,完全或略阻塞的影响。
Bokhari曾把图分解问题(他称之为映射问题[43])简化为图的同构问题,他定义的G的进程数量小于H的节点数量,尽管很多研究人员都研究过这个问题,但其多项式时间还是未知的。
实践中经常使用启发式方法计算一个网络半径尽可能低的已经非常平衡的任务分解问题。
如果G是动态变化的则问题变得较复杂,这样我们必须动态产生一个初始的分解方法。
图
分解问题的一个完整定义如下。
设G=(V,E),它代表一个由顶点V= 和间接边
组成的图。
每个顶点v的顶点权重为。
每个边
有一个独一无二的边权重,顶点/边的M的权重定义为所包含的边/顶点的权重之和。
图G被分解为p个部分,定义为:。
衡量分解算法的主要性能指标即该图的平衡性和网络半径。
分解的负载均衡性是一个关于h的元组:
如果则这个分解结果称之为负载均衡。
分解的网络半径即横截面所包括的所有边的权重,例如:
任务分解的过程就是找到一个具有最小网络半径且负载均衡的分解方法。
一般情况下一个完美的任务分解是不会存在的,我们要做的就是寻找一个尽可能平衡的分解方案。
3.4.3 通信和阻塞
一旦一个应用被分解,根据 3.3部分的代价模型可以找到两个处理器之间的高效的通信方法,主要遵循以下几个原则:
(a)尽可能的使用本地存储
(b)尽可能使得计算和通信重叠(延迟隐藏)
(c)尽量使用长消息而避免使用较多的短消息。
网络带宽参数对于一个处理器由于本地带宽有限而很少发消息的情况下影响很有限。
如果一个处理器能了解整个网络情况那么在全局网络阻塞严重的情况下就可以决定不发送消息,既然处理器不了解全局的通信情况,可以执行这样一个策略即消息被异步且独立发送的地方发生消息阻塞的概率比较低。
然而,一个同步通信策略在不同阶段可以使用高效的集合通信方法如
如果通信量需求比较大时即使使用异步消息传递也会发生阻塞。
显然,在一个每对处理器
间直接相连的通信网络中,任何两个消息和可以相互独立发送且没有相互干扰。
然而,在一个稀疏网络中也存在真实的相互干扰可能。
由于我们关注与可移植性算法,所以并不打算专注于特定的网络拓扑。
而且我们希望这个算法在整个网络上同时只有很小一部分的链接。
为此,我们还要增加一个原则:
(d)在同一时刻仅使用少量的网络连接
对于一般的应用很难满足这个要求,幸运的是很多应用并不是总体上都是非规则通信要求。
例如,区域分解计算如计算流体动力学或有限元定义位于空间的各任务间的局部依赖。
多尺度配置真实感光照渲染算法可以被定义成只需要局部通信的并行计算(参考4.3)。
3.5 一般解决方案
首先介绍一些图分解问题的一半解决方案。
3.5.1 易并行
最简单的类型即易并行计算应用,在子问题之间很少或几乎没有相互的依赖[45,46,44]。
这种情况下过载处理器的任务就被随机发送到其它未过载的处理器。
目标处理器的选择不会影响任何子任务间的独立关系。
但基于物理的真实感渲染显然不是易并行计算应用,各子问题之间存在大量的依存关系。
3.5.2 多用途的图分解
已有很多的文献在阐述图分解问题的研究成果,这些涵盖了从基础性的理论工作[53,54]到包括。