论文部分内容阅读
高速缓存是弥补处理器和内存之间的性能差距的重要方式。改善数据的局部性,可以更有效地利用高速缓存,进一步提升处理器的性能。运行时刻从堆中分配的数据的布局对程序性能有很大影响。目前,针对堆中数据的布局优化技术仍处于研究阶段,还没有在实际编译器中得到广泛应用。 运行时刻的数据布局优化主要是指在运行时刻对二进制程序进行分析并通过数据重排以改善数据的时间和空间局部性。该优化无需程序源代码或者对程序重新编译,可在遗产代码和商用软件上直接使用。但是,由于缺乏源代码中蕴含的高层信息,如何开展安全和高效的动态优化是研究的难点。大型程序广泛使用结构体数据,如何改善结构体数据的局部性是数据排布优化的重点任务之一。 本文面向UniCore-2处理器,针对结构体的数据布局,采用访存指令分析技术和运行时刻的代码生成技术,在运行时刻重新分配结构体内存空间,通过改变堆中结构体字段的数据布局,改善数据的空间和时间局部性。 本文设计了一种访存指令分析算法和一种运行时刻代码生成算法,可分析程序的访存指令在运行时刻对结构体字段重新排布,并生成新的程序代码访问重新排布后的字段。进而针对基于UniCore-2处理器的计算机系统,实现了上述可完成运行时刻的结构体拆分算法。通过对潜在拆分对象的原始内存空间设置读写保护,在读写原始内存空间时触发例外处理;通过分析对应访存指令,得到潜在拆分对象的字段信息,进而完成拆分并生成新的代码段;上述策略可在保证程序能够正确访问拆分后的结构体字段的前提下,改进结构体字段的时间和空间局部性。 论文采用使用SPEC2000和SPEC2006基准程序,在真实计算机环境上对运行时刻的结构体拆分优化效果进行了评测。实验结果表明部分测试程序的运行性能可改进15.1%。本文通过性能监视器获得测试程序在真机上的缓存信息,分析出性能提升的原因是大幅增强了数据局部性,但是较大的分析代价抵消了部分性能提升,如果能够与剖视分析和静态分析相结合,可以进一步提升优化效果。