- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于循环分块流水粒度优化算法
基于循环分块流水粒度优化算法
摘 要:当计算划分层迭代数目较大,或是循环体单次迭代工作量较大,但可用的并行线程数目较小时,传统的基于循环分块的流水粒度优化方法无法进行处理。为此,提出一种基于循环分块减小流水粒度的方法,并根据流水并行循环的代价模型实现最优流水粒度的求解,设计实现了一个流水计算粒度的优化算法。对有限差分松弛法(FDR)的波前循环和时域有限差分法(FDTD)中典型循环的测试表明,与传统的流水粒度选择方法相比,所提算法能够得到更优的循环分块大小。
关键词:自动并行化;流水并行;流水粒度;循环分块;代价模型
中图分类号: TP314
文献标志码:A
0 引言
随着主频的提高,处理器功耗以指数速度急剧上升,使得以提高主频来提升处理器性能的方法不再有效[1]。多核处理器已成为处理器体系结构发展的一个主要方向[2]。尽管多核处理器能够提升多线程程序的性能,但早已存在的诸多单线程程序无法从中获益,程序员也习惯于编写单线程程序。自动并行化技术[3]是将单线程程序移植到多核上的重要手段,通过对单线程程序中蕴含并行性的分析与发掘,采用程序变换技术自动生成适合多核处理器运行的多线程程序。根据Amdahl定律[4],应用程序通过并行获得的性能提升受限于程序中串行执行部分所占的比例。因此,充分发掘程序的并行性是提升程序并行性能的有效手段。计算机科学中的二八法则表明,程序中20%的代码占据了程序80%的执行时间,这些花费大量时间开销的代码往往是程序中的循环。因此,循环是发掘程序并行性的主要对象。
根据蕴含并行性的不同,Cytron[5]将循环分为串行循环、能够完全并行的DOALL循环和DOACROSS循环。DOACROSS循环因为携带跨迭代的依赖关系,并行性介于DOALL循环和串行循环之间。Chen等[6]通过测试表明,将程序中的DOACROSS循环串行执行会带来程序并行性的巨大损失。因此,发掘DOACROSS循环中蕴含的并行性,选择合适的策略将其并行执行对提升程序的并行性能非常重要。通过判定循环携带依赖的依赖距离是可精确确定的常量还是变量,DOACROSS循环可分为规则DAOCROSS循环和不规则DAOCROSS循环[7]。与不规则DOACROSS循环相比,规则的DOACROSS循环因为携带依赖关系的规则性,更适合通过编译器实现自动并行。流水并行是指将循环的各次迭代分配给不同的线程,线程间流水执行来获得并行性,迭代间的依赖通过某种方式的同步得到维持。流水并行是规则DOACROSS循环并行的重要方式。本课题在前期工作中以多核处理器为目标平台,在Open64[8]编译器后端实现了基于OpenMP[9-10]的规则DOACROSS循环流水并行代码的自动生成,并通过测试对其有效性进行了验证。
在循环流水并行过程中,线程间的同步能够维持循环携带依赖,保证循环执行的正确性,但同时也会带来额外的开销。同一线程两次同步之间的计算工作量大小称为流水计算粒度,简称流水粒度。流水粒度的大小与同步开销在循环执行总开销中所占的比例有直接关系,影响着流水并行循环的性能。根据流水粒度的大小,流水并行可分为细粒度流水和粗粒度流水。细粒度流水时,线程两次同步之间的计算量较小,下一线程能够较快获得所需数据进行计算,减少了线程的空闲等待时间;但因为粒度较小,会引起较多次数的同步,从而导致较高的同步代价和较低的流水并行性能。粗粒度流水增大了同步之间的计算量和同步数据量,因此减少了同步次数,同步代价相对较小,但后续的计算节点在开始计算之前需要更多的等待时间,降低了循环的并行性。
为平衡并行性和同步代价两者之间的关系,使得流水循环获得趋近于最优的并行性能,本课题前期实现的自动并行化算法中使用传统的流水粒度优化方法,从循环的各层(除计算划分层)中选择一层实施循环分块[11]来调节流水的粒度。然而,当计算划分层包含的迭代数目很大,或是循环体单次迭代的工作量很大,或是这两种情况同时存在,但可用的并行线程数目较小时,线程的两次同步之间的工作量很大,同步开销对并行性能的影响变得很弱。但因为流水粒度过大,对循环的并行性造成了极大的损失。传统的循环分块方法无法处理上述情况。
针对传统流水粒度选择方法的不足,本文提出一种流水粒度优化算法来进一步提升自动生成的流水并行代码的性能。首先给出了基于循环分块减小流水粒度的方法,从而避免出现线程的两次同步之间的工作量过大,给循环并行性带来损失的情况;然后基于循环流水执行时的代价模型综合考虑流水粒度过大和过小的情况,实现最优流水粒度的求解;最后设计实现了流水粒度的优化算法。对有限差分松弛法(Finite Difference Relaxation,FDR)的波前(Wavefront)循环[11
文档评论(0)