串行程序的并行化处理【精品】.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
串行程序的并行化处理【精品】.doc

串行程序的并行化处理======================================================================  论文关键词:并行计算 DAG 数据依赖 串行程序 并行划分模型 等价关系   论文摘要: 目前在并行计算研究领域中很大一部分工作是将串行程序并行化,本文根据题目的要求,在合理的假设下,首先发掘串行程序中存在的并行性,一个好的方法就是构造其对应的并行任务(DAG)图,论文分析了串行程序中存在的数据依赖关系,并以此为根据,提出了一种由现有的串行程序构造对应的并行任务(DAG)图的算法,然后再对剩下的串行程序分段,提出并行划分模型,基于这种模型提出了一种并行划分算法PDMA;并根据程序段的相关程度提出了一种对PDMA进行改进的并行划分算法RPDMA。然后再通过一个串性程序的实例,运用此方案对其进行运算,最后对串行程序运算下的时间复杂度和进行此方案运算下的时间复杂度进行比较,得出此方案的优越。  1.问题的重述  并行计算是将一个计算任务分摊到多个处理器上并同时运行的计算方法。由于单个CPU的运行速度难以显著提高,所以计算机制造商试图将多个CPU联合起来使用。在计算机上早已采用专用的多处理器设计,台式机和笔记本电脑现在也已广泛地采用了双核或多核CPU。双核CPU从外部看起来是一个CPU,但是内部有两个运算核心,它们可以独立进行计算工作。在同时处理多个任务的时候,多核处理器可以自然地将不同的任务分配给不同的核心。最容易被并行化的计算任务称为“易并行”的,它可以直观地立即分解成为多个独立的部分,并同时执行计算问题。  要求:  (1)运行一个以常规的串行代码写成的程序时,如何将计算任务拆分成多个部分并分解到多个核心上同时运行。  (2)建立合理有效的模型,并依据模型对现成的串行算法进行处理。将能够使用双核心并行处理的部分分解开,并分配到两个核心上同时运行。以期达到比单核CPU处理更快速的目的。  2.模型的假设  1.忽略硬件及环境因素,假设每次执行时硬件条件和环境条件是完全一致的。  2.对算法的时间复杂度并不考虑其精确度量,而只是关心其量级  3.双核及多核CPU在运算时,互不干扰.  4.设文中的算法最终得到的DAG图中消除了原有的反依赖和输出依赖.  3.问题分析  由于单个CPU的运行速度难以显著提高,所以现在广泛采用了双核或多核CPU,如何将一个常规的串行程序分解成两部分,使之能够同时采用了双核或多核CPU,双核CUP内部的两个运算核心可以独立进行工作,并且希望能够充分发挥双核心的计算能力。首先我们根据任务之间存在的数据依赖以及控制依赖关系,将先发掘串行程序中存在的并行性,从而减少了直接将串行程序并行化的复杂度,也提高了效率。然后再针对剩下的串行程序进行并行化处理,从而使它的效率达到更理想的状态.  现在的问题是:  (1)如何找到一个好的方法去发掘串行程序中的存在的并行性;  (2)设计一种将串行程序并行划分的模型,再基于这个模型提出一种并行划分算法.  4.建模前的准备  4.1对于一个输入的串行程序, 我们首先发掘串行程序中存在的并行性构造其对应的并行任务DAG图. 构造DAG图的时候, 主要的一个问题就是发现任务之间的依赖关系. 本文首先对任务之间存在的一种依赖关系作一个简单的介绍.  1.任务之间的数据依赖关系  所谓数据依赖, 也就是在运行的多个执行过程同时访问相同的数据, 结合相关知识给出了下面的数据相关的形式化定义:  在上面所列出的依赖中,流依赖也称为真数据相关是真实的数据流之间的流通过程,因此如果两个任务间存在流依赖是没有办法将这两个任务进行并行或改变两个任务的执行顺序的。反依赖和输出依赖也称作名字相关或冲突,他们实际上并没有任何真实的数据流的关系,只是在要使用一个存储资源的过程中,由于被别的任务使用而造成的,他实际上也是资源依赖。通过重复设置资源或者使用其它的资源,便可以解决这些依赖,而不影响并行性的开发。  4.2算法时间复杂度定义  定义:如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),它是n的某一函数 T(n)称为这一算法的“时间复杂性”。  例:Temp=I;  i=j;  j=temp;??????????????????   以上三条单个语句的频度均为1,该程序段的执行时间是一个与问题规模n无关的常数。算法的时间复杂度为常数阶,记作T(n)=O(1)。如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。  在实际应用中,我们一般

文档评论(0)

aiwendang + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档