论文部分内容阅读
现代处理器通常采用动态指令调度超标量流水线来发掘程序中的指令级并行。但是访存指令——尤其是装载指令——需要较长的执行延迟,从而阻塞了流水线中其他指令的动态执行,因此装载指令执行效率对现代处理器性能至关重要。针对装载指令执行延迟的优化技术主要分为延迟隐藏技术和延迟降低技术。其中延迟隐藏技术通过并行执行其他无关指令达到隐藏这些访存执行延迟的目标,这需要扩大超标量流水线中指令窗口的容量以及发射宽度。然而受到程序本身指令级并行度的限制,这些技术会降低超标量处理器自身的能效性。同时,随着现代处理器流水线中指令窗口容量的增加,相当一部分装载指令执行时所需要的访存数据已经存在于流水线内,但是还未写入高速缓存或内存中,使得装载指令需要更多的执行延迟来完成访存数据前递、访存相关处理以及访存违例检测等操作。因此,为了提高性能和能效性,如何进一步减少装载指令执行延迟成为现代处理器设计的研究重点。 访存延迟降低技术通过发掘访存局部性或者应用推测执行技术达到直接减少装载指令执行延迟的目标。其中装载指令推测执行技术通常采用支持全相联查找的访存指令队列。一方面受到全相联查找队列不可扩展且能效性差的限制,另一方面受到预测技术本身预测准确率的限制,这些技术所能够优化的装载指令占整体动态执行装载指令的比例并不高。本文研究在此基础上进一步优化装载指令推测执行过程,通过增加被优化的装载指令比例达到减少装载指令执行延迟的目标。同时,通过取消全相联查找队列以及避免不必要的访存操作来减少访存指令执行的能耗开销,从而提高处理器的能效性。本文研究的具体内容包括: 1)提出一种基于活跃存储指令窗口的推测式访存数据前递机制。传统装载指令推测执行技术性能受限的关键原因在于采用全相联查找访存指令队列来实现访存指令按序提交、存储指令按序访存、访存数据前递以及访存违例检测等诸多操作。复杂设计限制了访存指令队列的容量,进一步限制了被推测技术优化的装载指令数量。本文提出基于活跃存储指令窗口的推测式访存数据前递机制,该机制采用不同结构分别实现上述功能,其中采用先进先出的简单访存指令队列实现访存指令按序提交以及存储指令按序访存,采用活跃存储指令窗口实现访存数据前递,采用装载指令重执行机制实现访存违例检测。分离的结构避免了全相联查找的必要。同时高效的活跃存储指令窗口结构能够大量存储最近得到的存储数据,并尽可能延长这些数据在流水线内停留的时间,从而提高被数据前递的装载指令数量。实现表明,针对SPEC2000及SPEC2006测试程序,在4发射128表项重排序缓冲区的超标量流水线中,该机制相对于传统访存执行流水线有8.51%的性能提升。 2)提出一种基于地址标识的快速访存相关检测机制。为了进一步减少访存数据前递的执行延迟,本文提出利用访存地址基址和偏移的快速哈希计算结果来代替准确访存地址进行推测式的访存相关检测,这种快速哈希计算结果被称为地址标识。由于地址标识的计算延迟几乎可以忽略不计,因此可以将访存数据前递提前到地址计算阶段。这样不仅减少了访存数据前递的执行延迟,同时当访存数据前递命中时,避免了不必要的高速缓存访问能耗开销。实验表明,采用了地址标识机制的活跃存储指令窗口设计,相较于原有设计,在性能上有平均3%的提升,同时在访存执行能耗开销上有平均25.71%的下降。 3)提出一种基于虚拟过滤缓存的装载指令重执行优化技术。一级高速数据缓存的能耗开销是处理器整体能耗开销的重要组成部分。然而为了保证低命中延迟,一级高速数据缓存通常采用能效性很差的访问方式。过滤高速缓存通过缓存最近被访问的高速缓存行来避免不必要的一级高速数据缓存访问,然而这种降低能耗的方法会导致访存性能的下降。本文提出基于虚拟过滤缓存的装载指令重执行优化技术,利用装载指令重执行流水线中存在的冗余执行过程和冗余存储来缓存最近被访问的高速缓存行,在避免不必要的一级高速数据缓存访问从而降低能耗开销的同时,还尽可能减少一定的装载指令执行延迟。实现表明,经过虚拟过滤缓存优化的装载指令重执行流水线,相较于原有设计,在性能上有5%左右的提升,同时降低了约27%的访存执行能耗开销。 4)提出一种基于装载指令推测执行的访存执行流水线结构设计并进行一定设计空间探索。本文综合前述三种优化技术,针对实际UniCore-3处理器提出完整的访存执行流水线设计方案,并分析实际设计中需要考虑的问题并给出解决方案,主要包括:装载指令推测执行错误恢复机制、针对部分命中的装载指令重执行过滤、虚拟地址访问活跃存储指令窗口的影响、访问不可缓存地址的处理以及多核环境下的一些设计约束。最后本文针对该设计方案进行一定的设计空间探索。