缩略图
Mobile Science

基于 RISC-V 的全局历史 TAGE 预测器设计

作者

张帅 李艳 王子健 陈佳

武汉第二船舶设计研究所 武汉晴川学院 中国地质大学 湖北武汉

1 基于 RISC-V 的 TAGE 总体结构

TAGE 分支方向预测器主要包括基础预测表 T0 和 个表示带标签匹配的 tagged 预测表Ti(1⩽i⩽M) ,在预测时利用不同长度的分支历史信息访问不同的预测表以得到最佳的预测结果,本文所设计的TAGE 结构如图1 所示。

图 1 TAGE 总体结构

2 TAGE 各预测表参数分配

本文所设计的 TAGE 具有一个基础预测器 T0 以及 4 个 tagged 预测表,分别为 ΔT1 、 T2. 、ΔT3 以及 T4 ,其中 T0 为基础预测器 Bimodal,仅由饱和计数器构成。 Ti ( Π1⩽Πi⩽Π4) )为tagged 预测表,每个表项由用于表项匹配的标签 tag、饱和计数器 ctr 以及表示该表项有用程度的有用度计数器u 组成,TAGE 各预测表参数如表1 所示。

表1 TAGE 各预测表参数分配

hist 为分支指令的全局历史信息,表示已执行的分支指令在全局历史上的分支行为。各个预测表所使用的历史长度 Li 计算公式如下,其中 MinHist 和 MaxHist 分别代表最小和最大历史长度,(int)表示取整运算。

3 算法分析

为避免多个分支指令索引到同一个表项,tagged 预测表的索引地址 index 利用几何长度的历史信息与 PC 进行哈希操作,索引 Ti 预测表中的表项,index 计算的伪代码如算法 1所示。

在上述伪代码中,bank 为当前 tagged 预测表的编号,m[bank] 中记录着 bank 预测表能利用的历史长度,logg[bank] 为 bank 预测表的深度,F 表示对路径历史的预处理,abs表示取绝对值操作,ch_i 为经过历史折叠后的方向历史。F 的具体计算过程如算法 2 所示,

其中A 表示路径历史,size 表示路径历史的长度:

在 TAGE 的预测过程中, ΔT0 预测表仅采用 PC 地址索引表项中的饱和计数器,利用其符号位产生预测方向。对于 Ti 预测表,首先判断 PC 与 Li 长度的 hist 进行 hash 运算后的 tag 值是否与Ti 预测表中的Tag ) 相同,如果相同则表示该预测表命中,只有命中时给出的预测结果才有效。tag 的计算仅采用 PC 与折叠后的全局历史进行异或运算。在计算完所有的 tagged 预测表的命中情况后,根据各预测表使用全局历史的长度来进行最终预测结果的选择,历史长度越长的预测表具有越高的优先权。借鉴 TAGE 作者定义的 provider 和alt-pred,分别代表历史最长的 tagged 匹配预测表以及次长的 tagged 匹配预测表的预测结果,即 provider 代表最终提供预测的预测表,为简化设计,本文 alt-pred 一般采用 T0 的预测结果。如果 Ti 均未命中则 provider 以及 alt-pred 均为基础预测器 T0 的预测结果。

TAGE 预测器的更新主要是针对表项的内容以及全局历史信息进行更新,具体的更新操作取决于实际的预测情况。

对于 u 的更新:仅当 provider 与 alt-pred 提供的预测结果不同时才进行更新,若provider 预测正确则代表使用较长的全局历史进行预测是有必要的,provider 中对应表项的u 自增1。若provider 预测错误,但是alt-pred 预测正确,代表不必使用更长的全局历史,对应表项的u 自减1。同时u 位会周期性地复位以确保预测器能够始终保持较新的历史信息。

对于 ctr 的更新:当 Ti 均未命中时,即 ΔT0 提供预测结果,则只更新 T0 的 ctr,实际结果为跳转则自加 1,错误自减 1 ;当 Ti 命中时,判断 provider 提供的预测结果是否正确,若正确且实际跳转结果为跳转,使对应的饱和计数器自增 1,否则自减 1。此时若 alt-pred预测错误,则按照实际跳转结果对其进行更新,实际跳转则ctr 自增1,否则自减1。

对于 tag 位的更新:主要出现在新表项分配时,当最终预测错误并且 provider 不是具有最长历史长度的预测表时,则会尝试在比 provider 具有更长历史的预测表中分配一个新项,每次仅分配一个表项,靠近 provider 的预测表具有更高的优先权。分配时,主要寻找对应表项 u 位为 0 的预测表,写入新的 tag 位,将 u 复位为强有用状态。同时根据实际的跳转结果对 ctr 进行复位,实际为跳转则复位为弱跳转,反之复位为弱不跳。若不存在 u 为 0的表项,则不分配新的表项,使历史长度比provider 长的所有预测表中对应的u 均自减1。

对于 hist 的更新:将分支指令的实际跳转方向写入全局历史寄存器 hist 的低位,并将最高位舍弃。

相较于其它分支方向预测器,TAGE 具有出色的预测准确率,主要在于其使用部分标签匹配的策略,减少了分支别名的情况。同时多个 tagged 的预测表使用不同长度的全局历史信息,能应对不同的分支环境。但是面对与局部历史更加相关的分支指令时,其预测准确率略有不足。

作者简介:

张帅(1987-),男,内蒙古巴彦淖尔人,博士研究生,2010 年于武汉大学获得学士学位,2015 年于武汉大学获得博士学位,同年于任职工作,主要从事高速模拟电路设计、RISC-V、数据传输、信号完整性和通信方面的研究。