当前位置: 首页 > news >正文

TAGE-SC分支预测器

此文为学习昆明湖SC分支预测器的整理版本;

SC分支预测器

SC(Statistics counter)分支预测器是一种基于历史统计信息的分支预测器。

  • 与TAGE类似,在SC中通常有多个表Tn,他们对应了不同历史长度的跳转统计;
  • 同点在于,在预测按PC检索时,每个表Tn都会命中,然后SC把每个命中的表项进行求和
  • 然后计算总的“饱和计数器”跳转信息,最后根据总的跳转信息判断是否跳转
    • 一般情况下,SC采用“有符号饱和计数器”。
    • 计数器值大于0时表示跳转,小于0时表示不跳转。
    • 计数器的绝对值越大,表示其预测置信度越高。

在SC预测器中,SC也由多个表组成(例如T1,T2,T3,T4),但相对TAGE预测器少了基础预测表T0。SC中Tn表有6 bit的有符号饱和计数器。

上述的流程,可以总结成如下两个步骤:

SC分支预测流程

1. 获取对应的entry内容

         SC表的索引方式如下:

        

2. 得到总的统计结果

        

    其中:

  • ctr_sc表示每个表的有符号饱和计数器。
  • 对其进行左移加一是进行权重调整
  • 累加后的scCtrSum就是SC的最终预测结果。

3. 根据统计结果,决定是否跳转

        如果scCtrSum大于零,则预测跳转,小于零则预测不跳转。其绝对值越大,表示预测置信度越高;

        典型数据转换结果如下(在计算时为了不溢出,扩展到了9位):

  1. 均为 6b100000(强不跳转) ,求得 9b100000100,值为 -252
  2. 均为 6b011111(强跳转),求得 9b011111100,值为 252
  3. 均为 6b000000(弱跳转),求得 9b000000100,值为 4
  4. 均为 6b111111(弱不跳转),求得 9b111111100,值为 -4

SC训练过程

在update阶段进行饱和计数器的更新。

  1. 如果PC对应的真实指令跳转,这所有表中对应的饱和计数器+1
  2. 如果PC对应的真实指令不跳转,这所有表中对应的饱和计数器-1

TAGE-SC分支预测器

有了TAGE为何还需要SC

        一些应用上,一些分支行为与分支历史或路径相关性较弱,表现出一个统计上的预测偏向性。对于这些分支,相比基于历史的分支预测,使用计数器捕捉统计偏向的方法更为有效。

        TAGE在预测与历史非常相关的分支时非常有效,但对有统计偏向的分支则支持不佳。例如只对一个方向有小偏差,但与历史路径没有强相关性的分支。

        为了避免该问题,可以在传统TAGE预测器上增加SC预测器。

TAGE-SC功能介绍

        在昆明湖 TAGE-SC 预测器中,会同时得到 TAGE 和 SC 的预测结果 P1 和 P2,然后对他们的结果进行累加 P = P1+P2

  • 如果 P 的绝对值大于 8bit 的阈值 sc_bank_thres,则采用预测器结果 P;
  • 否则则采用 P1 作为最终预测结果。

        为了进行动态自适应,阈值sc_thres是需要是动态变化的。为此在实现上TAGE-SC使用了一个5bit的sc_bank_ctr计数器对阈值sc_bank_thres进行调整。

        另外,由于昆明湖支持同时预测2条分支指令,因此阈值寄存器和对应的控制计数器也是两份。

预测过程

在TAGE-SC预测时,TAGE的预测结果P1用tage_ctr表示,SC的预测结果P2用scCtrSum表示。在预测时,分为如下四步。

  1. 执行SC预测器,得到预测结果scCtrSum

  2. 并行得到TAGE预测器的预测结果 tage_ctr。

    1. 由于TAGE的预测结果是无符号饱和计数器,而SC的预测结果是有符号饱和计数器,如果对他们进行相加,需要进行数据转换

    2. 昆明湖在实现上,采用了对TAGE的结果进行转换。转换后的结果用 tageCtrCentered 表示,具体转换过程如下:

    3. 比特的无符号饱和计数器转换为8比特的有符号饱和计数器结果举例如下所示:

  3. 对TAGE和SC的预测结果进行相加得到最终预测结果P,在实现上用totalSum进行表示。

  4. 根据 totalSum 以及 sc_bank_thres 决定最终预测方向:

    1. totalSum > 0 且绝对值超过阈值则跳转: 如果 scCtrSum > sc_bank_thres - tageCtrCentered 也可以理解成 totalSum > sc_bank_thres 上面的写法可以降低最大位宽(把保证不溢出需要10bit变成9bit);

    2. totalSum < 0 且绝对值超过阈值则不跳转: 如果 scCtrSum < -sc_bank_thres - tageCtrCentered 也可以理解成 |totalSum> sc_bank_thres;

训练过程

在对 TAGE 和 SC 进行组合后,TAGE-SC 添加了 sc_bank_ctr 计数器用来控制阈值sc_bank_thres。因此在训练时,除了 TAGE 和 SC 本身的训练外,还需要对新增加的计数器进行更新。

在update阶段,其具体更新流程如下:

  1. TAGE-SC采用了预测结果P(即TAGE+SC后的预测结果),如果 |totalSum| 在 [sc_bank_thres -4, sc_bank_thres -2] 的范围内,则对阈值相关寄存器组进行更新
    1. 更新 sc_bank_ctr,饱和计数 
      1. 若预测正确,则 sc_bank_ctr +=1 
      2. 若预测错误,则 sc_bank_ctr -=1
    2. 更新 sc_bank_thres ,受限制的饱和运算, 
      1. 若 sc_bank_ctr 更新后的值已达 0b11111 且 sc_bank_thres <= 31,则 sc_bank_thres +=2 
      2. 若 sc_bank_ctr 更新后的值为 0 且 sc_bank_thres >=6,则 sc_bank_thres -=2 其余情况thres不变。
    3. sc_bank_thres 更新判断结束后,会对 sc_bank_ctr 再做一次判断 若更新后的sc_bank_ctr若为0b11111或0,则thres_ctr会被置回初始值0b10000。
  2. TAGE-SC采用了预测结果P1(即TAGE的预测结果)不进行任何操作;


http://www.mrgr.cn/news/47403.html

相关文章:

  • 西电-神经网络基础与应用-复习笔记
  • seleniun 自动化程序,python编程 我监控 chrome debug数据后 ,怎么获取控制台的信息呢
  • 移远BC28_opencpu方案_pin脚分配
  • 易于上手难于精通---关于游戏性的一点思考
  • C++语言的文件操作
  • 【并发篇】CompletableFuture学习
  • COMPILER_ABSTRACTION头文件的关键字
  • 东方博宜 1176. 素数问题
  • LangChain
  • 电商序列推荐算法
  • 基于springboot的大学生体质测试管理系统(含源码+sql+视频导入教程)
  • 【云原生】利用 docker api 管理容器
  • HWS赛题 入门 MIPS Pwn-Mplogin(MIPS_shellcode)
  • 二分法(Bisection Method)求解方程 f(x)=0近似解(MATLAB)
  • 基于java的零食销售系统(源码+定制+开发)
  • 前端_001_html扫盲
  • 逼近理论及应用精解【14】
  • HT8312 内置高效率自适应电荷泵升压,防削顶失真功能,DIAB切换的5.2W单声道高保真音频功率放大器
  • Vue3 ECharts看板
  • 全网最详细k8s搭建部署
  • IPguard与Ping32敏感内容防护能力对比,两款知名防泄密软件对比
  • Qt和c++面试集合
  • 10.10 Qt定时器和Tcp通信
  • (八)Proteus仿真STM32单片机GPIO驱动数码管
  • LLM - 配置 ModelScope SWIFT 环境与 Qwen2-VL 模型推理 教程 (1)
  • Shell编程-什么是shell