贾 迅,胡向东,尹 飞
(上海高性能集成电路设计中心,上海201204)
预取技术根据实现方式可分为软件预取和硬件预取。软件预取由程序员或编译器在程序中插入预取指令实现预取;硬件预取则需要在处理器的微结构中增加预取引擎,引擎根据程序执行时的访存行为,发出硬件预取请求实现预取功能。硬件预取对程序员透明,没有兼容性问题,能利用程序的动态访问特征。目前,国产处理器如申威、龙芯[3]等仅支持软件预取。
硬件预取技术的实现面临两个方面的挑战:一是实现复杂度与硬件开销的降低;二是与处理器具体结构特点的结合。申威处理器硬件数据预取技术的突破不仅可以直接提升申威处理器的性能,拓宽其在高性能计算、安全平台以及服务器领域的应用;同时也可以为硬件预取技术在其它国产处理器中的应用提供参考。
程序访存行为的特征是硬件预取的基础,预取引擎利用访存特征生成预取请求的方法称为预取机制。学术界在研究过程中,针对规则的存储访问提出了多种硬件预取机制,包括顺序预取、流预取[4]和跨步预取[5],同时也研究了针对不规则存储访问的预取机制,例如关联预取。
(1)顺序预取是最简单的预取机制,预取引擎总是预取当前访问Cache行的下一个Cache行,硬件实现开销小,但对访存带宽的需求较高。
(2)跨步预取利用同一条访存指令在不同循环迭代过程中,访问地址中存在的固定步长进行预取,因而适用于矩阵或数组结构较为密集的高性能计算应用。硬件实现需要使用访问预测表。如图1a所示,记录访问的地址、步长以及访存指令的PC值。预取引擎检测到固定步长的访问时,发出预取请求,预取的地址为当前访问地址加步长。
(3)流预取对流访问特征进行预取,流访问特征是指一段时间内,程序访问的Cache行地址呈现递增或递减的规律。这种访问规律在科学计算和工程应用中广泛存在。硬件实现时,需要使用流识别缓冲(如图1b所示)记录一段时间内访存的Cache行地址。预取引擎识别到流访问,则进行预取。
(4)关联预取利用访存地址之间存在的关联性进行预取。Markov预取[6]机制属于典型的关联预取,它利用Markov模型对访存缺失地址建模。硬件上使用关联预测表(如图1c所示)记录与缺失地址相关联的访存地址。当访问缺失时,预取与缺失地址相关联的所有地址。指针预取[7]也是关联预取的一种,它利用load指令和将这条访存指令的结果作为访问地址的load指令之间存在的“生产-消费”关系进行预取,硬件上同样采用关联信息表保存这种依赖关系。
Figure 1 Structures of various prefetching mechanisms图1 不同预取机制的硬件结构
表1从“访存模式”“设计复杂性”“典型应用”三个方面对上述介绍的不同硬件预取机制进行了总结。可以看出,为了降低硬件实现的复杂度和开销,商用处理器大多采用了较为简单的流预取和跨步预取。
首先将边u11u12,um(2n-1)um(2n)染为k+2色,把边u0(2n+2)u1(2n+1)染为k+1色,边u(m-1)2um1染为色,其次把边us(2n+1)us(2n+2)(s=1,3,…,m-2)染为色,把边us1us2(s=3,5,…,m-2)染为色。
Table 1 Summary of various prefetching mechanisms表1 不同预取机制的总结
新一代申威处理器核心采用超标量架构,支持乱序发射、推测执行和双访存流水线技术。核心内部一级指令Cache和数据Cache分离,两者共享二级Cache,核外配置有大容量三级Cache。由于硬件数据预取技术主要与存储访问相关,因而申威处理器的访存数据通路(如图2所示)是预取技术实现的研究重点。
访存指令由指令发射部件发往整数执行部件执行后,首先要进入数据Cache控制部件中的仲裁单元。仲裁成功后的请求发往双访存流水线访问数据Cache。若访问命中,对于load类请求,数据从Cache装入寄存器文件,供处理器计算使用;对于store类请求,数据从寄存器文件写入Cache。若访问缺失,则请求信息登记在缺失地址队列MAF(Miss Address File)中,并发往二级Cache进行后续处理。访存请求在执行过程中可能发生冲突,普通的访存请求发生冲突时进入重试缓冲,软件预取请求发生冲突则进入专门设置的预取缓冲。重试缓冲与预取缓冲中的请求会在流水线空闲时,以重试的方式仲裁上流水线执行。
Figure 2 Memory access pipeline of Shenwei microprocessor图2 申威处理器的访存流水线
硬件预取的实现需要在数据Cache控制部件中增加预取引擎。预取引擎通过记录双访存流水线上请求执行的信息,在对应预取机制的指导下生成硬件预取请求。为了降低硬件预取实现的逻辑复杂度与硬件开销,本文将引擎生成的硬件预取请求也放入预取缓冲,从而数据Cache控制部件对硬件预取请求的处理可以复用软件预取请求仲裁上流水线,请求访问一级数据Cache,二级、三级Cache对访问缺失的请求进行处理的整个数据通路,如图3所示。
Figure 3 Implementation framework of hardware prefetching图3 硬件预取的实现框架
为了复用流水线处理软件预取的数据通路,硬件预取请求的格式与软件预取请求必须完全兼容。数据Cache控制部件中,软件预取请求的定义包括:请求的有效位、请求的类型以及请求访问的Cache行地址,硬件预取请求的定义见表2。
Table 2 Definition of hardware prefetching requests表2 硬件预取请求的定义
由于申威处理器采用双访存流水线,预取引擎在一个时钟周期内需要同时处理两条访存指令的访问信息。本文以流水线A为例介绍预取引擎(PFHEngine)与其它模块,如请求处理流水线(PIPELINE)、预取缓冲(PREQUEUE)、指令重排序缓冲(ROB)、数据Cache标记管理单元(DTAG)和页表管理单元(DTBM)的接口信号,如图4 所示。
Figure 4 Interface between a prefetching engine and other modules图4 预取引擎与其它模块的接口
预取引擎记录的访问信息包括:访存指令的PC值、请求的类型、地址、请求访问Cache是否命中等。具体实现时,引擎内部可以灵活采用不同的硬件预取机制。下文以流预取例,验证预取引擎实现框架的正确性。
流预取机制的实现需要在硬件上设置流识别缓冲以检测一段时间内的流访问。流识别缓冲条目记录的信息包括访问的Cache行地址、条目的状态以及访问缺失的次数。具体的信号及含义如表3所示。
Table 3 Information recorded in the stream detection buffer表3 流识别缓冲记录的信息
流识别缓冲中所有条目初始化时均置为无效态INV,后续的状态转换见图5。其中,“淘汰”是指一段时间内,处理器未访问条目对应的流。“向前/向后访问缺失”是指访问缺失的地址等于条目记录的Cache行地址加1 或减1。当访问缺失的次数大于流识别阈值时,条目进入预取状态。此时,处理器访问流中一个新的Cache行,会触发对下一个Cache行的预取。
本文的实验环境由处理器模型、基准测试程序和硬件仿真加速器三部分构成。为了真实测试硬件数据预取技术对申威处理器访存性能的提升,本文采用申威处理器某芯片完整的逻辑设计作为处理器模型,芯片中各存储层次的容量和访问延迟如表4所示。本文采用Verilog硬件描述语言实现了硬件预取功能,其中流识别缓冲条目数为8,流识别阈值为2。
Figure 5 State transitions in the stream detection buffer图5 流识别缓冲条目的状态转换
Table 4 Memory hierarchy parameters表4 各存储层次的参数
本文采用SPEC CPU2000基准测试程序集,其广泛应用于桌面系统和单处理器服务器的性能测试。SPEC CPU2000 由12 道整数测试程序和14道浮点测试程序组成,这些程序都从真实的用户程序演变而来,因而可以真实反映不同程序的访存特征。
为了进一步提高实验结果的准确性,本文以Cadence公司的Palladium XP GXL系列[8]硬件仿真加速器作为实验平台,其提供了微处理器模型的仿真环境,并可以准确反映处理器仿真运行过程中的相关性能参数。本文以SPEC CPU2000测试程序在硬件仿真加速器上运行完成所需周期数作为预取机制性能评价的标准。本文测试了单独使用软件预取、硬件预取和软硬件混合预取的性能,整数、浮点测试程序的结果分别如图6和图7所示。
Figure 6 Integer performance improved by stream prefetching in Shenwei microprocessor图6 流预取对申威处理器整数性能的提升
Figure 7 Float performance improved by stream prefetching in Shenwei microprocessor图7 流预取对申威处理器浮点性能的提升
可以看出,对于整数程序,单独使用软件预取、硬件预取对申威处理器的性能提升效果分别为2.99%和7.79%,混合预取的性能提升为8.16%。对于浮点程序,单独使用软件预取、硬件预取对性能的提升效果分别为8.52%和11.20%,混合预取的性能提升为14.91%。硬件预取技术的使用可以将目前申威处理器的整数性能平均提升5.17%,最高提升28.88%(181.mcf);浮点性能平均提升6.39%,最高提升30.11%(173.applu)。另外,对于课题178.galgel、191.fma3d,硬件预取的使用可以有效解决编译器插入软件预取因预取时机不合适而导致性能下降的问题。
对于硬件开销和时序的评估,本文采用Synopsys公司的Design Compiler工具在1.6GHz、40nm 工艺下对数据Cache控制部件进行逻辑综合,以综合的面积作为评价预取机制硬件开销的标准,同时对时序结果进行检查,综合过程中的参数配置见表5。
Table 5 Parameters used for logic synthesis表5 逻辑综合的参数设置
硬件开销的评估结果如表6所示,实现流预取所需的硬件开销仅为申威处理器核心面积的0.14%。另外,根据综合的时序报告,本文硬件预取的设计完全满足1.6GHz下的时序要求。
Table 6 Implementation cost of hardware prefetching表6 数据预取技术实现所需的硬件开销
硬件数据预取技术是缓解“存储墙”问题的有效手段之一,在商用处理器中广泛应用。本文结合申威处理器“双访存流水线”“支持软件预取”“集成多级Cache”的结构特点,以降低逻辑设计的复杂度和硬件开销为目标,提出了预取引擎实现的整体框架,并通过流预取机制的实现验证了其可行性。本文对硬件数据预取技术在国产处理器中的实现方式和应用价值进行了有益探索。
[1] Intel Corporation.Intel 64and IA-32architecture optimization reference manual[EB/OL].[2014-12-05].http://www.intel.com/content//www /us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf.
[2] Tendler J M,Dodson J S,Fields J S,et al.POWER4system microarchitecture[J].IBM Journal of Research and Development,2002,46(1):5-25.
[3] LOONGSON Technology Corporation Limited.User mannual for Loongson 3B1500microprocessor[EB/OL].[2014-12-05].https://www.loongsin.cn.(in Chinese)
[4] Jouppi N P.Improving direct-mapped Cache performance by the addition of small fully-associative cache and prefetching buffers[C]∥Proc of the 17th Annual International Symposium on Computer Architecture,1990:364-373.
[5] Chen T F,Baer J L.Effective hardware-based data prefetching for high-performance processors[J].IEEE Transactions on Computers,1995,44(5):609-623.
[6] Joseph D,Grunwald D.Prefetching using Markov predictors[J].IEEE Transactions on Computer,1999,48(2):121-133.
[7] Roth A,Moshovos A,Sohi G S.Dependence based prefetching for linked data structures[C]∥Proc of the 8th International Conference on Architectural Support for Programming Language and Operating Systems,1998:115-126.
[8] Cadence Design Systems,Inc.Cadence Palladium XP verification computing platform[EB/OL].[2014-12-05].www.cadence.com/rl/resource/technical_briefs/palladium_xp_tb.pdf.
附中文参考文献:
[3] 龙芯中科.龙芯3B1500处理器用户手册[EB/OL].[2014-12-05].https://www.loongson.cn.