论文部分内容阅读
高速缓存(cache)在现代微处理器中被广泛使用,以弥补处理器和存储器之间的性能差距。软件数据预取是改善cache性能的重要技术之一。作为基于编译指导的优化策略,软件数据预取将未来会被访问的数据块预先从主存取到cache中,期望将来处理器会访问到这块数据以降低cache失效率及失效代价。合理地运用软件数据预取可有效改进处理器性能,目前许多主流指令系统体系结构中已设计了支持软件数据预取的专用指令,并且主流编译器也大都在一定程度上实现了数据预取优化策略。 GCC是GNU开发的功能丰富且使用广泛的编译器。目前面向北京大学微处理器研究开发中心研制的UniCore-3处理器所移植的C编译器为GCC-4.4.2,其对软件数据预取技术的支持尚不完善,具有优化提升空间。本文工作目标是针对UniCore-3处理器的GCC,开展软件数据预取的探索和实践。主要工作包括: 1.实现GCC进行软件数据预取优化所需的体系结构相关支持。实验结果表明,采用GCC原有基于数组访存的数据预取算法优化后,UniCore-3运行SPEC2000基准程序的性能可改进0.29%; 2.分析和优化GCC原有数据预取算法,针对UniCore-3的结构特征,改进后端参数的传值机制,并通过调整后端参数,使UniCore-3运行SPEC2000基准程序的性能平均改进1.31%; 3.在GCC上实现了基于指针访存的数据预取算法,并将其以优化遍的形式添加到编译器优化组织结构中,使数据预取技术能够应用到指针访存类场景上。在UniCore-3上运行SPEC CINT2000中指针访存导致cache失效最明显的mcf程序的性能可改进16.54%,运行Olden benchmark suite的性能平均改进7.12%。 实验数据表明,针对UniCore-3处理器体系结构的软件数据预取技术能够改善整个系统的性能,改进后的GCC数据预取算法能够取得更好的优化效果,基于指针访存的数据预取算法能在特定程序上取得明显的性能提升。