TAGE-SC-L分支预测

本文介绍了TAGE-SC-L预测器,一种结合了TAGE、统计校正器和循环预测器的分支预测方法。它针对弱偏向分支和循环分支设计,通过统计校正器修正预测误差,循环预测器处理常规循环。IUM组件进一步优化延迟更新问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TAGE-SC-L分支预测

1. 什么是TAGE-SC-L

   TAGE预测器被认为是最有效的基于全局分支历史的预测器之一。
   然而对于那些具有弱偏向属性或者与全局历史相关性不强的分支指令,TAGE 预测器无法达到很好的预测效果。
   对于如for、while等循环分支指令,若循环体内部的控制流指令具有一定的规律性,则 TAGE 预测器能够很好地利用全局历史预测这些循环;但是,当循环体中的控制流不稳定时,TAGE 预测器可能就无法正确地预测循环的退出。
   针对这两种情况,使用统计校正器(Statistical Corrector Predictor)和循环预测器(Loop Predictor)等小型辅助预测器来提升预测性能,这种组合被称为TAGE-SC-L预测器。

2. 面向弱偏向分支的统计校正器

   统计校正预测器基于TAGE的预测,旨在检测并恢复可能的错误。由于大多数情况下TAGE预测的结果是正确的,因此统计校正预测器在多数情况下与TAGE预测器保持一致,这样即使统计校正预测器的容量相对较小,也具有接近容量无限大小的统计预测器的性能(统计校正预测器需要校正结果的概率不大,小容量即可达到最佳性能。)
   统计校正预测器的结构如图所示,局部历史表(Local History Table)与推测性局部历史管理器(Speculative Local History Manager)与TAGE预测器并行访问。当局部历史表中具有相同索引的分支已经在流水线中时,推测性局部历史管理器提供推测的局部历史。
   推测性局部历史与TAGE预测相关联以索引局部统计相关预测器(Local Statistical Correlator Predictor)。预测计算结合TAGE的预测计数器值,即统计校正表的预测值(2 x ctr1 + 1)加上TAGE预测计数器的值(2 x ctr2 +1)的8倍。
   如果统计校正预测器的预测结果与TAGE的预测结果不一致,且预测计算总和的绝对值高于动态阈值,则恢复预测。动态阈值在运行时进行调整,以确保使用统计校正预测器是有益的。

在这里插入图片描述
推测性局部历史管理器:在这里插入图片描述

3. 面向循环分支的LOOP预测器

   循环预测器可以简单地识别具有恒定迭代次数的常规循环,当循环预测器将分支识别为具有恒定迭代次数的循环并且当此识别达到高置信度时(即当循环已以相同的迭代次数执行多次时),循环预测器将提供全局预测。在实践中,设置7次执行整个循环之后达到较高的置信度水平,似乎是一个比较好的选择。
   原文中给出了一个4way偏移关联64个entry的循环预测器设计, 循环预测器表中的每个entry组成为:

  • 10bit的过去迭代计数(Past Iteration Count)
  • 10bit的退出迭代计数(Retire Iteration Count)
  • 10bit的部分标签(Partial Tag)
  • 3bit的置信度计数器(Confidence Counter)
  • 3bit的老化计数器(Age Counter)
  • 方向位

   替换策略基于老化计数器,仅当老化计数器为空时可以替换entry。在分配时,Age首先设置为7,只要entry是可能替换的目标,Age就会递减,只在条目被使用并提供有效预测时递增。当分支被确定为非常规循环时,对应的entry的Age会重置为0。

   循环预测器的整体硬件复杂性不在于循环预测表本身,而在于迭代次数的推测管理,一种实现方案为推测性循环迭代管理器(Speculative Loop Iteration Manager,SLIM)。

   为什么需要对迭代次数进行推测管理:
   可能出现上次循环分支还未更新迭代次数,该循环的另一个分支实例已经开始预测,则此时获取到的当前迭代次数是实际迭代次数-1,对于循环内的分支并不会有影响,但对于跳出循环的分支,将会做出错误预测。因此,需要在当前循环分支预测时(下个分支实例预测前)就对当前迭代次数进行更新,最简单的方法是立即更新表中的当前迭代计数器,即每次预测时就更新(而非执行结果出来后)。
   上述立即更新带来的问题是,当该分支预测错误时,需要对循环预测表进行恢复,不止恢复该循环所对应的项,甚至包括其他循环所对应的项。因为在该分支结果出来之前,可能已经对其他循环分支进行了预测,并立即更新了循环预测表的表项。但这种恢复并不容易。

   论文里提出的这种SLIM推测管理方法可以则有效地降低预测错误时恢复的难度。
   SLIM为每个识别为循环的分支分配一个新项,每项中记录着分支PC和推测的当前迭代次数。在预测时,会检查循环预测器,如果命中的条目具有高置信度,则在预测器上读取当前迭代次数(非推测性)循环总迭代次数。同时SLIM是并行读取的,如果分支也在SLIM中命中,则由最近命中的表项提供推测性迭代次数。推测性迭代次数会递增并对照循环的总迭代次数进行比较,提供预测分支跳转结果,同时把SLIM 中该项移动到队首。在预测错误时,错误的SLIM条目将被清除;在循环退出时,相关的SLIM条目被清除。
注:

  • 这里所说的当前迭代次数和循环总的迭代次数,是和entry中的过去迭代计数及退出迭代计数项对应的吗?即当前迭代次数 <== > 退出迭代计数循环总的迭代次数 <==> 过去迭代计数
  • 这里如何检查得出分支跳转结果?参照硕士论文中提到的循环结束时上次迭代计数pCnt=当前迭代计数cCnt+1,推测这里判断循环结束的条件是:循环总的迭代次数=当前迭代次数+1。如果SLIM命中,则将SLIM中读取的推测性迭代次数作为当前迭代次数。如此理解相对合理)
    在这里插入图片描述

4. TAGE-SC-L预测器

   TAGE-SC-L预测器由三个组件组成:TAGE预测器、统计校正预测器和循环预测器。

  • TAGE预测器提供主要的预测;
  • 统计校正预测器确认(一般情况)或恢复预测(反转TAGE结果);
  • 循环预测器用于预测具有长循环体的常规循环。
    在这里插入图片描述
       在预测器中还使用了一个即时更新模仿器(Immediate Update Mimicker,IUM),其在TAGE预测器的衍生优化设计中属于一个锦上添花的组件。
       思想:使用正在执行的还未结束的分支的信息进行预测,以减少因更新延迟而带来的错误预测。(实验证明,IUM几乎可以恢复所有由于更新延迟导致的错误预测。)
       例如,如果为分支B提供预测的表和表项,与已经执行了但还没有退休的分支B’所用的表和表项相同,就直接使用B’的执行结果作为预测,而不使用预测表的预测。
       当提取指令为条件分支类型时,IUM记录TAGE预测器的预测信息,即提供预测的条目的标识(预测组件的编号及其索引)。当解析到错误预测(跳转方向)的分支指令后,IUM通过初始化使其头指针指向相关IUM条目并使用正确的跳转方向更新该条目(指的是IUM 中与该分支相关的条目)进行修复。
       当指令流在正确路径上获取时,与流水线中分支指令关联的 IUM 条目匹配预测器条目,该条目提供TAGE预测的有效结果(在错误预测的情况下更正)。如果在分支指令退休之前预测器中的条目出现新的命中,则预测器可以用 IUM 提供的跳转方向预测结果,而不是TAGE的预测结果(TAGE中的条目尚未更新)。
    在这里插入图片描述
    参考资料:
  1. 《A 64-Kbytes ITTAGE indirect branch predictor—2011》
  2. 《TAGE-SC-L Branch Predictors——2014》
  3. 基于 RISC-V 处理器的分支预测研究与设计—2022
  4. 《高性能超标量CPU:微架构剖析与设计》
  5. TAGE-SC-L预测器 “TAGE-SC-L Branch Predictors”(2016)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值