Parallel Architecture Lecture5
Parallel Architecture Lecture5
PCAM设计方法学
设计并行算法的四个阶段
划分(Partitioning);通信(Communication);组合(Agglomeration);映射(Mapping)
设计过程
划分
方法描述
目的
充分开拓算法的并发性和可扩放性。
分类
域分解(domain decomposition)/数据分解;
功能分解(functional decomposition)
原则
先进行数据分解(称域分解),再进行计算功能的分解(称功能分解);
i
这个先后关系是有说法的。这样能够更有效地优化资源利用、减少通信开销、以及提高整体系统的效率。具体为什么暂时不知道。
使数据集和计算集互不相交(如果任务之间有较强的依赖关系,处理器就需要频繁地交换信息,导致性能下降。因此,设计时尽量让数据集和计算集中在各自的处理器上,减少交互);
划分阶段忽略处理器数目和目标机器的体系结构(可以使算法设计具有更大的通用性,便于在不同硬件平台间移植)。
域分解 (数据分解)
概述
划分的对象是数据,可以是算法的输入数据、中间处理数据和输出数据;
将数据分解成大致相等的小数据片;
划分时考虑数据上的相应操作;
如果一个任务需要别的任务中的数据,则会产生任务间的通信。
示例
三维网格
假设要算的数据结构组成三维网格,各格点上计算都是重复的。则可以按片、按列、按点分。
不规则区域
比如渲染一个模型,那就有很多分法了。
功能分解
概述
划分的对象是计算,将计算划分为不同的任务,其出发点不同于域分解;
划分后,研究不同任务所需的数据。如果这些数据不相交的,则划分是成功的;如果数据有相当的重叠, 意味着要重新进行域分解和功能分解。
i
从这里其实可以看出来,如果你先进行域分解,那这一步数据就不可能相交。
功能分解是一种更深层次的分解。
示例
搜索树
搜索树算法通常涉及对树的各个节点进行遍历。在并行算法中,我们可以将不同子树的搜索任务分配给不同的处理器,从而实现功能分解。这样数据也不会重复。
气候模型
气候模型通常包括多个相互关联的子模块,如大气模型、海洋模型、陆地表面模型和水文模型等。功能分解则是将这些相对独立的功能模块分配到不同的处理器上。各模块独立进行特定的计算,例如大气模型模拟气流变化,海洋模型计算海洋温度和流动等。在需要交换数据时,例如大气模型与海洋模型的交互,才进行处理器间的通信。
它们可能会用到each other的数据,产生交流,但是计算自己模块内的数据时,是不会用到模块外的数据的。
划分是否合适的判据
划分是否具有灵活性?
任务数至少高于目标机上处理器数的一个量级。就像上一个Lecture说到的,任务太少会拉低性能,而且如果任务太少,如果后期放在有更多处理器的电脑上运行,就会浪费资源。
划分是否避免了冗余计算和存储?
如果不能避免,可扩放性就不能保证,因为随着处理器增加,冗余计算的增速会越来越大。
划分任务尺寸是否大致相当?
这样才能保证各处理器工作量平衡。
任务数与问题尺寸是否成比例?
理想情况下,问题尺寸的增加应引起任务数的增加而不是任务尺寸的增加。
功能分解是一种更深层次的分解,是否合理?
是否采取了几种不同的划分方法?
多考虑几种选择可提高灵活性,同时既考虑域分解,又要考虑功能分解
通信
方法描述
目的
划分产生的诸任务,一般不能完全独立执行,需要在任务间进行数据交流; 从而产生了通信。
功能分解确定了诸任务之间的数据流;
诸任务是并发执行的,通信则限制了这种并发性。
四种模式
局部/全局通信(Local/Global communication)
结构化/非结构化通信( Structure/Unstructured communication)
静态/动态通信(Static/Dynamic communication)
同步/异步通信(Synchronous/Asynchronous communication)
局部通信
通信限制在一个邻域内,只与较少的几个近邻的通信:
全局通信
许多任务参与,非局部的,所有节点间均有通信。
All to all:
Master-Worker:
结构化通信
结构化通信是指在并行计算中,通信模式是预先规划好且固定的(广播、汇聚(reduce)、散播(scatter)、收集(gather)和全对称交换(all-to-all)等),通常应用在规则性强、模式清晰的计算过程中。
非结构化通信
通信模式随着程序的执行实时变化,通常由算法逻辑或数据状态决定,通信的时间和开销难以提前估计。
比如一个无结构化的网络。
其他
静态通信
通信伙伴的身份不随时间改变,双方一旦建立连接就一直用这一条信道。
动态通信
通信伙伴的身份可能由运行时所计算的数据决定且是可变的。
同步通信
双方知道何时进行通信,发送方显式的发给接收方。
异步通信
不确定,接收的方明确地从发送者处请求数据。
通信是否合适的判据
所有任务是否执行大致同样多的通信?(可扩放性)
这用来保证可扩放性,处理器增加时只增加任务数,而不增加单个任务的任务量。
每个任务是否只与少许近邻通信?(尽可能局部通信)
若否,则可能导致全局通信。应设法将全局通信结构化为局部通信结构。
诸通信操作是否能并行执行?
不同任务的计算能否并行执行?
组合
方法描述
组合是由抽象到具体的过程,是使得组合的任务能在一类并行机上有效的执行。
合并小尺寸任务,减少任务数。如果任务数恰好等于处理器数,则也完成了映射过程。
通过增加任务的粒度(划分更粗)和重复计算,可以减少通信成本。
保持映射和扩展的灵活性,降低软件工程成本。
例
(a) 将分解维度从3->2,子任务的 规模变大
(b) 将相邻的子任务合并,形成高粒度的分解
(c) 合并分治结构下的子树
(d) 合并树算法中的节点
表面-容积效应
通信量与任务子集的表面成正比,计算量与任务子集的体积成正比。
表面,指任务子集的边界区域,即与其他子集进行数据交换或通信的区域;
体积,指任务子集内部的区域,代表需要处理的实际数据量或计算量。
在一个被放大的任务子集中,带箭头的外围圈就是需要和其他任务子集通信的表面部分,而内部则都是自己的计算任务,不受外部子集直接影响。
表面越大,通信开销越高。这种开销影响了计算的效率。
重复计算
例如二叉树上N个处理器求N个数的全和,要求每个处理器均保持全和。
也就是说最后求完,要求所有N个处理器上全都有答案。
传统二叉树需要
如果使用蝶式结构,每一轮都把答案同步到所有参与计算的处理器上,最后算完所有处理器自然会有答案:
重复计算减少通信量,但增加了计算量(要算两次,两个参与计算的处理器都要有现阶段答案),应保持恰当的平衡,重复计算的目标应减少算法的总运算时间。
组合是否合适的判据
增加粒度是否减少了通信成本?
重复计算是否已权衡了其得益?
是否保持了灵活性和可扩展性?
组合的任务数是否与问题尺寸成比例?
是否保持了类似的计算和通信?
有没有减少并行执行的机会?
映射
方法描述
每个任务要映射到具体的处理器,定位到运行机器上(就是每个任务到底要谁来做);
任务数大于处理器数时,存在负载平衡和任务调度问题;
映射的目标:减少算法的执行时间。
尽量把并发任务给不同处理器,对通信要求较高的放在同一个处理器。
映射实际是一种权衡,属于NP完全问题。
i
NP完全问题或者叫多项式复杂程度的非确定性问题,是世界七大数学难题之一。
完全多项式非确定问题指,一问题的所有可能答案,都是可以在多项式时间内(即复杂度在多项式范围内。
可以用穷举法得到答案,一个个检验下去,最终便能得到结果。但是这样算法的复杂程度,是指数关系,因此计算的时间随问题的复杂程度成指数的增长,很快便变得不可计算了。
人们发现,所有的完全多项式非确定性问题,都可以转换为一类叫做满足性问题的逻辑运算问题。既然这类问题的所有可能答案,都可以在多项式时间内计算,人们于是就猜想,是否这类问题存在一个确定性算法,可以在多项式时间内直接算出或是搜寻出正确的答案呢?这就是著名的NP=P? 的猜想。
也就是说,最优的映射策略并不能直接解出来,只能靠验证。
映射策略
映射的两种策略:
使得任务可以被不同的处理器并发地执行,增强并发性;
将通信频繁的任务放到同一个处理器上,增强局部性。
负载平衡算法
静态的:事先确定;
概率的:随机确定;
动态的:执行期间动态负载;
基于域分解的:
递归对剖
局部算法
概率方法
循环映射
i
这些是否需要知道具体是干啥的?
任务调度算法
任务放在集中的或分散的任务池中,使用任务调度算法将池中的任务分配给 特定的处理器。下面是两种常用调度模式,
集中模式
比如经理-员工模式:
任务池由经理掌控并把其中的任务分配给员工。
非集中模式
分布式调度,每个处理器维持一个任务池。
映射是否合适的判据
采用集中式负载平衡方案,是否存在通信瓶颈?
采用动态负载平衡方案,调度策略的成本如何?