论文部分内容阅读
随着计算机技术的不断发展,高端计算已经从追求单一的高性能转向追求综合的高效能,以求解决当前高性能计算领域所面临的实用性能、可编程性与低成本、可移植性、鲁棒性等方面的问题,另外,浮点舍入误差对大规模数值模拟等安全关键领域的精度影响越来越严重,64位的双精度浮点运算已经不能满足需求,必须将超64位的高精度浮点运算的研究也作为这些领域的高效能计算的目标之一。高效能计算的这五个目标相互影响,例如,高精度在提高程序置信度的同时,对性能优化和功耗优化提出了更高的要求。编译技术为实现高效能计算的各个目标提供基础支持,论文选取了高精度编译、针对高精度的编译优化、低功耗编译优化三个方面展开研究,取得了如下创新性成果:1、基于硬件对扩展双精度浮点运算的支持,设计并实现了支持扩展双精度浮点运算的FORTRAN编译器——CCRG编译器。该编译器的研制弥补了商用编译器不支持FORTRAN语言的扩展双精度浮点运算的不足,有效保证了科学计算中要求的高精度。采用精度敏感的圆周率计算BBP算法验证了CCRG编译器在扩展双精度浮点运算上的正确性。2、提出了把表驱动算法与多项式并行计算相结合的指数函数内联算法,该算法也可用于其它超越函数的内联。设计并实现了扩展双精度数学库中的乘幂、除法、方根、指数函数的内联,在有效降低函数调用开销的同时,为指令调度等其它编译优化提供了优化空间。测试表明,数学库函数内联使扩展双精度浮点运算的性能提高了17.8%。3、结合编译前端提供的数组访问信息,提出了分裂递归链的仿射数组下标依赖关系分析算法,同时,还改进了非仿射数组下标的依赖关系分析算法,增强了针对线性化数组访问的依赖关系分析能力,使CCRG编译器能够有效地进行循环变换,改善数据访问的局部性。4、从提高指令级并行的角度出发,设计并实现了别名分析、自动函数内联、数据预取、存取地址后增指令优化等多种编译优化算法,有效缓解了高精度计算中的“存储墙”问题。测试表明,这些编译优化算法使CCRG编译器的扩展双精度浮点运算性能提升了42.0%,对比GCC编译器,性能提升66.7%,达到了Intel商用编译器双精度浮点运算(不支持扩展双精度)性能的70.7%,是Intel商用编译器四倍精度浮点运算性能的15.8倍。5、针对扩展双精度浮点运算的MPI实现中的功耗问题,提出了基于MPI_Barrier的低功耗优化技术以及面向能量优化的MPI_Reduce与MPI_Bcast算法。测试表明,采用扩展双精度的NPB3.2-MPI程序在C级规模下,利用MPI_Barrier操作进行电压调节最大可获得19.2%的能量节约,平均能量节约也达到5.2%。采用面向能量优化的MPI_Reduce和MPI_Bcast算法,MG3D程序分别可获得17.7%和14.2%的能量节约。