论文部分内容阅读
随着计算机技术的发展和进步,应用程序所使用的内存空间越来越大。程序所使用的数据不可避免地要存放在速度较慢的大容量存储设备中,而大容量存储设备的访问速度与处理器的执行速度之间有很大差距。程序的访存时间无法被计算时间所完全掩盖,程序的运行速度难免会受到处理器访存性能的影响,因此难以简单地使用时间复杂度或空间复杂度来分析程序的性能。 本文结合应用程序,通过建立访存复杂度模型,分析访存通路的设计对大规模科学计算程序的影响。在此基础上,本文提出一系列访存部件优化方案,降低了程序的访存复杂度,并在国产龙芯3号处理器平台上进行了实验。主要贡献和创新点如下: 通过分析应用程序的执行过程,结合访存通路上各级存储层次之间的关系,提出了程序的访存复杂度模型,并以大规模稠密矩阵乘法程序为例进行了深入研究。访存复杂度模型根据程序进行访存的规律,结合参数化的访存延迟、片上高速缓存容量、TLB容量等信息,定量地计算程序在处理器上运行时所需时间。该模型可以用于分析访存部件的行为,并指导处理器的访存通路优化工作。在龙芯3A1000处理器上的验证结果显示,该模型的平均误差小于10%。 针对访存指令发生Cache失效时延迟较大的问题,基于程序的访存复杂度模型,提出了一套软硬件结合的多层次预取机制。该机制通过预取指令和硬件自动预取的方式,将数据提前搬运至处理器核或片上末级Cache中,使得程序所需数据在被使用时可以位于更快的存储层次中。在龙芯3A2000处理器上的实测结果显示,该机制可以提升矩阵乘法约8.4%的性能。 针对大规模程序中的TLB失效问题,基于程序的访存复杂度模型,提出了降低TLB失效开销的解决方案。该方案提供了软硬件结合重填TLB的机制,并实现一个大容量的二级TLB,大幅降低TLB失效对程序性能的影响。在龙芯3A2000处理器上的实测结果表示,该方案可以提升矩阵乘法约8.2%的性能。 针对程序中常见的数据拷贝操作耗时较多的问题,基于程序的访存复杂度模型,提出一个用户态可以使用的后台数据搬运机制,使得数据拷贝工作可以与计算并行地进行。该机制提供了DMA引擎到二级TLB的查询通路,使得DMA引擎可以直接使用虚拟地址作为操作参数。在龙芯3A2000处理器RTL模拟平台上的实验显示,DMA的配置开销可以降低71.6%。 上述访存优化方法已成功应用于龙芯3A2000处理器中。该处理器与龙芯3A1000处理器相比,实测性能有明显提升:流式访问性能提升约20倍,SPECCPU2000性能提升2-3倍,Linpack效率提高1倍,其中本文提出的方法起到了极为重要的作用。