第4讲-并行算法设计的关键技术分析.ppt

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4讲-并行算法设计的关键技术分析

* 一种可能的办法是数据分解 把客户名单分成10个相等大小的部分,然后使用上面描述的串行算法来在每个小名单中各选出一个高价值客户。 这个算法有没有什么问题?如果某些小名单中根本没有高价值客户怎么办? 一个弥补措施是采用对每个小名单,都找出(最多)10个高价值客户(不够十个的,能找出多少算多少),这样至少可以保证算法最后能得到10个高价值客户的名单。 * 一个更好的分解方法如下:首先把数据库划分为相等的部分(划分数与我们需要找出的客户数量无关),然后对每个部分的纪录进行随机排列,然后对每个子数据库进行并行扫描,每次找到一个高价值客户,把它记录下来,并用一个全局计数器对目前找到的高价值客户数目进行记录。当全局计数器到10时,所有的搜索过程结束。 这个例子中给出的方法被称为搜索分解。 * 虽然看起来搜索分解方式与数据分解看起来一样(搜索空间可以被看作被划分的数据),但我们可以找到下面的不同点: 数据分解得到的任务分解是独立的,每个任务所进行的任务都是确定的,每个任务所进行的计算都会对最后的结果有所贡献; 而对搜索分解来说,所有的子任务合作完成工作,只要最后答案找到了,所有没有完成的任务也就终结了。因此,和串行算法相比,并行搜索算法所搜索的空间非常不同。 * 任务分解-混合分解 对问题进行任务分解需要灵活的应用上面的方法。递归分解,数据分解和搜索分解虽然有不同,但它们之间却不一定相互排斥,因此,在实际的应用中,为了得到更高的并行度,可以将这些分解方法组合使用。 如快速排序可同时采用输入数据分解和递归分解来开发并行性。 * 任务分配:任务映射与负载平衡 任务分解算法可以用来识别出问题中可以提供的并行性,并且把计算分解为可以并行执行的子任务。 下一步是将这些子任务分配给可用的处理器来执行。给出一个子任务集和一个可用处理器集,有很多种可能的方法在它们之间建立某种映射关系。 为了判断哪种映射更好,我们需要使用下面的评价标准:   ☆ 分配给每个处理器的计算任务应该均衡,这样才能减少处理器因为等待其他处理器完成计算任务而造成的空闲;   ☆ 不同处理器之间的交互应该最少,这样处理器可以用更多的时间去完成有效的工作。 * 由于这种冲突的存在,使得任务的分配变的更像一种艺术,而不是技术。通常采用的一种策略是在任务分配中,先集中目标使负载尽量均衡,然后再对任务分配进行调整,使得交互尽量少。 并行算法设计中使用的负载平衡技术可以分为两类:静态负载平衡与动态负载平衡。 静态负载平衡技术在算法的实际执行前将计算任务分配给处理器; 动态负载平衡技术在算法的实际执行过程中将计算任务分配给处理器。 * 在算法中究竟采用静态负载平衡方法还是动态负载平衡方法可以从下面的两点来考虑:   ☆ 计算中的任务是在算法执行过程中动态生成的,还是在算法设计的时候就已经给出的。比如对矩阵乘法来说,计算任务在算法执行前就可以静态的确定下来并分配给处理器;而快速排序算法中的子任务在程序执行的过程中才能完全的确定(下层的子任务由上层的子任务生成)。   ☆ 另外的一个判断依据是任务规模,即解决任务所需要的时间。如果所有任务的规模都是已知的,那么可以用这个知识来有效的指导任务的分配,这时静态的方法就足够了。但有些问题的任务的计算规模是无法事先精确知道的,比如很多的搜索问题就需要采用动态负载平衡的方法。 * 动态与静态负载平衡 * 静态分配 一个并行程序中存在的并行性和子任务之间的依赖关系可以完全由这个并行程序的任务图来表示。如果任务图是静态的,并且任务的计算规模可以确定,那么就有可能为这个并行程序找到一种最优的任务分配策略,使得负载不平衡度最低,并且处理器之间的交互最少。 当采用数据分解的方法来开发并行性时,恰当的分解本身也可以用来平衡负载并最小化处理器间的交互。 下面介绍常用的两类数据结构上的数据分解策略:数组和图。 * 数组分布策略:块分布 当数组的每个元素相关的计算是均衡的时候,我们可以采用简单的块分布策略:为每个处理器分配相同数量的数组元素。 在这种分布策略下,一个d维的数组按块分布到每个处理器上,每个处理器上的数组在某些特定的维上是连续的块。 * * 同样的,我们也可以选择多个维进行块划分 * 数组分布策略:块转轮分布 当矩阵的每个元素所需的计算量不相同时,块分布有可能会导致负载的不均衡。块轮转分布是块分布的一种变形,它可以用于这种情形。    * 对二维数组进行行块轮转分布的例子 对二维数组进行二维块轮转分布的例子 * 图的分割策略 面向数组的分布策略用于那些对稠密矩阵进行运算,交互模式十分规则的数据并行算法非常有效。 但很多的算法中的数据结构是稀疏矩阵,而且数据元素之间的交互模式十分不规则。 实际的应用中,物理现象的数值模拟有很多都是这类的算法。

文档评论(0)

wbjsn + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档