论文部分内容阅读
由于存储器和处理器速度差距的日益增大,访存延迟已经成为限制程序性能的主要瓶颈.数据预取通过提前将数据取入缓存,可以掩盖访存延迟,对于提高程序性能有很大的帮助.本文以Open64编译器为平台,研究了数据预取在安腾体系结构上对浮点程序性能的影响.
通过分析SPEC CPU2000 FP程序,以及与Intel产品编译器进行对比,我们发现了Open64中现有数据预取的问题,并对之加以改正.我们还发现了一些程序中潜在的数据预取机会,通过增强现有编译器,数据预取可以为这些程序带来较大的性能提升.
文中讨论了数据预取的一些参数,如预取距离和预取数量,对于优化效果的影响,并对这些参数的选取提出改进.论文还实现了利用旋转寄存器进行数据预取的算法,可以在保证预取效果的同时减少预取指令带来的开销,对部分程序能够带来进一步的性能提升.
最后,我们还讨论了循环局部性优化,主要是循环分块,对于数据预取效果的影响.本文指出循环分块和数据预取的结合使用或者单独使用需要视具体程序的特征而定.
经过本文的改进工作,Open64的数据预取对CPU2000 FP平均性能的提升从最初的6﹪增加到了21.5﹪,部分程序的性能提升甚至达到100﹪.可见在安腾2处理器上,数据预取能够极大的改善浮点程序,尤其是那些包含规则的循环和规则的数组访问的程序性能.