论文部分内容阅读
处理器和内存之间性能差距的不断增大,使得访存成为制约计算机系统性能提高的重要瓶颈之一。改善程序中数据的局部性,提高缓存利用效率,是缓解处理器和内存性能差距的有效手段。结构体数据布局优化通过对结构体数据进行重新布局,改善结构体数据的局部性,提高程序性能。
结构体数据布局主要包括基于域访问亲和性的、基于域访问频度的和基于最大化划分的结构体数据布局算法。已有的研究工作表明,基于域访问亲和性的结构体数据布局算法能够获得比后两者更好的优化效果。在这种算法中,域访问亲和性信息计算是否精确,直接影响了结构体数据布局变换效果的优劣。因此,本文围绕域访问亲和性信息计算及后续优化开展了一系列研究工作。
本文的三个主要贡献如下:
1、设计了一种精确获取域访问亲和性的方法。
使用插桩的方式,实现和扩展了已有的域访问亲和性的获取。该方法收集的信息能够更加真实地反映运行时的情况,尤其在条件分支、过程间调用和存在大量无关访存的程序中,计算结果更加精确。并扩展了域亲和关系图,使其可以表示实例内和实例间的域访问亲和性。
2、利用相似性模糊聚类分析域访问亲和性信息,指导结构体数据布局变换。
在域访问亲和性信息分析中引入相似性模糊聚类方法,对结构体进行域分组,并根据域分组对结构体数据布局变换进行指导。使其从所有原始数据开始聚类,解决了传统分析方法中需要根据经验选取先验性数值的不足。
3、在龙芯编译器中实现基于域访问亲和性的结构体数据布局变换。
详细介绍了域访问亲和性获取和结构体数据布局变换在龙芯编译器中的实现方法,包括安全性分析和域访问亲和性计算函数的插桩,以及新结构体类型的生成、Very High Whirl中间表示的变换等。并通过实验表明,该方法在结构体数据所占访存时间较长、布局效率不高的CPU2006程序上可以获得性能提升,其中个别程序性能提升可达一倍,提高了龙芯编译器的性能。