论文部分内容阅读
近几年,GPU在通用计算领域得到了广泛的应用,成为当前高性能计算系统的重要组成部分。然而,GPU采用SIMT的工作方式,使其执行效率受到程序中不一致分支行为(Branch Divergence)的严重影响;为了节约内存带宽并减小访存延迟,GPU引入了访存合并机制。虽然这一机制可以提高内存访问效率,但不规则访存仍然会严重影响程序性能。针对这两个问题,本文分析了它们产生的原因,提出了相应的优化方法,利用GPGPU-Sim模拟器进行测试,并分析提出的优化方法对性能(程序运行时间)、功耗和能耗(功耗时间积)的影响。本文的主要工作可以分为以下几个方面:1)分析了分支问题产生的原因,研究了现有线程交换算法对功耗的影响,并对Reduction和Bitonic Sort程序进一步优化。对于Reduction程序,现有线程交换算法增加了功耗,针对这一问题,通过改变线程交换算法,减少了共享存储器体冲突,从而减小了程序功耗,结果表明在性能平均损失5%的情况下,功耗平均降低了5%;对于Bitonic Sort程序,通过分析线程交换算法,在此基础上减少了一些不必要的交换,结果表明在未引起功耗增加的情况下,性能最多提高了6%。2)研究了线程交换范围对程序性能的影响。使用线程交换算法进行优化时,交换范围是一个重要的优化参数。研究发现,交换范围越大,交换地越充分,减少Branch Divergence的可能性越大,但是带来的额外访存开销也越大。因此,如何选择合适的线程交换范围,需要具体问题具体分析。3)分析了不规则访存问题产生的原因,提出了一种针对矩阵运算程序的不规则访存优化方法,选取PolyBench/GPU这一基准程序包中的部分程序进行优化,结果表明本文提出的方法能够有效减少不规则访存,显著提高程序性能。在给定条件下,kernel加速比最高达到78.9x,平均为35.9x,功耗平均增加了106.2%,能耗平均减少了86.2%。4)分析了功耗变化的原因。研究发现,程序运行时产生的功耗是各个功能部件的功耗之和,而各个功能部件产生的功耗依赖于与之对应的性能计数器和程序执行时间。此外,研究了共享存储器大小对Polybench/GPU中程序优化效果的影响,结果表明,共享存储器越大,获得的加速比越高,功耗变化则较小,因而优化效果越好。