一种面向tage分支预测器的新表项分配方法

文档序号:1888770 发布日期:2021-11-26 浏览:22次 >En<

阅读说明:本技术 一种面向tage分支预测器的新表项分配方法 (Novel entry allocation method for TAGE branch predictor ) 是由 虞致国 郭俊 顾晓峰 于 2021-08-30 设计创作,主要内容包括:本发明公开了一种面向TAGE分支预测器的新表项分配方法,属于处理器的分支预测器设计领域。所述方法包括:根据TAGE分支预测器预测结果的正误产生新表项的分配使能信号;根据Provider内命中表项的信息更新分配使能信号;根据分配使能信号的状态判断是否需为TAGE分支预测器分配新表项。所述方法利用TAGE分支预测器的预测信息,动态调整TAGE分支预测器误预测时新表项的分配概率,以降低冷计数器问题出现的概率,进一步提升传统TAGE分支预测器对那些难以预测的分支指令的预测准确度;且本发明不需设计额外的分支预测表,存储资源占用较低,更适合应用于低功耗低面积的处理器中。(The invention discloses a new entry allocation method for a TAGE branch predictor, and belongs to the field of design of branch predictors of processors. The method comprises the following steps: generating an allocation enabling signal of a new table entry according to the positive error of the prediction result of the TAGE branch predictor; updating and distributing an enabling signal according to the information of the hit table entry in the Provider; and judging whether a new table entry needs to be allocated to the TAGE branch predictor or not according to the state of the allocation enable signal. The method dynamically adjusts the distribution probability of a new table entry when the TAGE branch predictor mispredicts by utilizing the prediction information of the TAGE branch predictor so as to reduce the probability of the occurrence of cold counter problems and further improve the prediction accuracy of the traditional TAGE branch predictor on branch instructions which are difficult to predict; in addition, the invention does not need to design an additional branch prediction table, occupies lower storage resources and is more suitable for being applied to a processor with low power consumption and low area.)

一种面向TAGE分支预测器的新表项分配方法

技术领域

本发明涉及一种面向TAGE分支预测器的新表项分配方法,属于处理器的分支预测器设计领域。

背景技术

为了提升处理器的性能,现代处理器大都采用超标量体系结构的思路展开设计。对于超标量处理器来说,在流水线的取指阶段,除了要从指令缓存中取得多条指令,还要根据这些已取得指令的信息预测出下一个周期的取指情况,分支预测器就是一种能完成此预测任务的装置。但是当分支预测器对某条分支指令的预测发生错误时,就需要从流水线中抹除那些已经进入流水线且处在错误预测路径上的指令,并重新从正确的地址继续取出指令,这就浪费了处理器的功耗,并且影响了处理器的指令执行效率。

分支预测器是现代处理器的核心结构之一,预测准确度较高的分支预测器能够更有效地避免由于分支指令预测错误而导致清空流水线的情况发生,从而提高处理器的性能和降低处理器执行无效指令的功耗开销。

TAGE(TAgged GEometric History Length)分支预测器凭借其出色的预测准确度,已成为目前主流的分支预测器之一。然而,TAGE分支预测器也存在着一些问题,其中,冷计数器(cold-counter)问题严重影响着其预测准确度的进一步提升(可参考PierreMichaud.An alternative TAGE-like conditional branch predictor[J].ACM Trans,2018,15(3):1544-3566.)。

造成TAGE分支预测器冷计数器问题的主要原因是:在每次发生预测错误时,TAGE分支预测器都要为预测出错的分支指令分配新表项,表项的内容包含标签tag、饱和计数器ctr以及u位,tag用来确认表项与分支是否匹配,饱和计数器ctr用来确定分支跳转的方向,u位表示表项的有用程度。新表项在分配完成之后,需要根据所属分支指令的信息进行初始化,由于在初始化时无法准确预估出饱和计数器值,因而TAGE分支预测器会根据误预测的分支指令的实际方向将新表项的饱和计数器初始化为一个弱属性的状态(弱跳转或弱不跳转),这就导致新表项需要花费一定的时间去训练饱和计数器值,以提升自身的预测置信度,在训练期间内,TAGE分支预测器的预测准确度一般都很低,会导致很多错误预测。

为了降低冷计数器问题对TAGE分支预测器的影响,提高预测准确度,国内外的专家和学者对此进行了大量的研究。法国国家信息及自动化研究院的AndréSeznec(可参考AndréSeznec.A case for(partially)TAgged GEometric history length branchprediction[J].Journal of Instruction-Level Parallelism,2006.)提出了一种使用元预测器USE_ALT_ON_NA动态监控预测的方法,可实现从Alternator和Provider中选择出预测准确度更高的那个部件的预测结果作为最终的预测输出,当预测错误时,不需要每次都给分支指令分配新表项,因此减少了新表项的分配和训练的次数,有效地改善了TAGE分支预测器存在的冷计数器问题;从2006年起,元预测器USE_ALT_ON_NA被业界公认为TAGE分支预测器中不可或缺的一部分,本申请记载的所有的传统TAGE分支预测器也都是指有元预测器的TAGE分支预测器。然而该方法虽然提升了预测准确度,降低了TAGE分支预测器的冷计数器问题的影响,但是之后的研究表明,在改善TAGE分支预测器冷计数器问题上,还有很大的提升空间。

为了进一步降低冷计数器问题对TAGE分支预测器的影响,AndréSeznec(可参考AndréSeznec.A new case for the TAGE branch predictor[C].In InternationalSymposium on Microarchitecture,2011:117-127.)还提出了一种在上述TAGE分支预测器的构成基础上增加统计偏差矫正器SC(Statistical Corrector)的方法,该方法能够矫正那些TAGE分支预测器难以预测(具有弱偏向性且没有全局历史相关性)的分支指令的预测结果,该方法可以进一步减少新表项的分配和训练过程,从而减少了冷计数器问题出现的概率,提高了预测准确度,但该方法需要设计额外的分支预测表以存储统计偏差矫正器的预测信息,不适用于那些对面积和功耗有严格限制的处理器,比如可穿戴设备、航空航天设备中的处理器。

发明内容

为了降低冷计数器问题对TAGE分支预测器的影响,提升TAGE分支预测器的预测准确度,同时使TAGE分支预测器具有更好地适用性,本发明在传统TAGE分支预测器的基础上,提供了一种面向TAGE分支预测器的新表项分配方法,其特征在于,所述方法包括:

在处理器更新TAGE分支预测器时,TAGE分支预测器根据其上次预测结果的正误产生新表项的分配使能信号ALLOC;

TAGE分支预测器根据Provider内命中表项的饱和计数器值、Provider的预测结果、部件Ti内索引表项的饱和计数器值、部件Ti内索引表项的u位,更新分配使能信号ALLOC;

TAGE分支预测器根据分配使能信号ALLOC的状态判断是否需为当前预测错误的分支指令分配新表项;

其中,所述Ti为tagged部件,i为tagged部件位置编号,P<i≤M,M为tagged部件总数,P为Provider所在的部件位置编号。

可选的,所述TAGE分支预测器根据其预测结果的正误产生新表项的分配使能信号ALLOC,包括:若预测结果为正确,则将分配使能信号ALLOC赋值为0;若预测结果为错误,则将分配使能信号ALLOC赋值为1;

可选的,所述分配使能信号ALLOC的更新步骤包括:

S1:将Provider内命中表项的饱和计数器值记为ctrP,若|2×ctrP+1|≤1且Provider的预测结果为正确,则将分配使能信号ALLOC更新为0,否则不执行任何操作;跳转至S2;

S2:若所述TAGE分支预测器的预测结果为错误,则生成一个取值范围为0~(MINAP-1)的随机数rand,其中MINAP是一个随M增大而增大的常数;

TAGE分支预测器判断随机数rand是否不小于分配节流函数值,若不成立,则将分配使能信号ALLOC更新为0;若成立,不执行任何操作;

可选的,所述分配节流函数为:

f(tage_cat[INDCAT])=(tage_cat[INDCAT]×MINAP)/(CATMAX+1)

其中,若Alternator的预测结果正确,则INDCAT为1,若不正确,则INDCAT为0;NUM_taggedk为各tagged部件(T1~TM)内的表项数;

可选的,所述分配节流函数的自变量tage_cat[INDCAT]的更新过程包括:

步骤一:将部件Ti内命中表项的饱和计数器值记为ctri,并初始化变量NUM_MLConf_ctr和state_u为0;

步骤二:TAGE分支预测器从部件TP+1开始循环遍历部件Ti内的索引表项,若索引表项的u位为0,则将变量state_u记为1;若|2×ctri+1|等于3,则将变量NUM_MLConf_ctr自加1;若|2×ctri+1|等于1,则立即退出此循环遍历,并跳转至步骤三;

步骤三:利用步骤二得到的NUM_MLConf_ctr和state_u的值计算tage_cat[INDCAT],更新公式为:

tage_cat[INDCAT]=tage_cat[INDCAT]+3-3×NUM_MLConf_ctr-state_u

步骤四:若tage_cat[INDCAT]的值小于0,则将tage_cat[INDCAT]赋值为0;若tage_cat[INDCAT]的值大于CATMAX,则将tage_cat[INDCAT]赋值为CATMAX;否则,保持原值不变。

可选的,所述TAGE分支预测器根据分配使能信号ALLOC的状态判断是否需为TAGE分支预测器分配新表项包括:

若ALLOC等于1,则TAGE分支预测器进行新表项的分配;若ALLOC等于0,则不进行新表项的分配,等待下一次的分支预测。

可选的,所述新表项的分配包括:TAGE分支预测器从部件TP+1开始循环遍历部件Ti内的索引表项,选择出一组部件编号最小且满足分配条件的索引表项进行分配;对于不满足分配条件的索引表项,则衰退其饱和计数器值。

可选的,所述分配条件为:u位为0且|2×ctri+1|≤3。

可选的,所述衰退饱和计数器值的方法包括:若ctri大于0,则将ctri自减1,若ctri小于0,则将ctri自加1。

可选的,所述MINAP的取值范围为4~8。

本发明有益效果是:

本发明提供了一种面向TAGE分支预测器的新表项分配方法,相较于传统TAGE分支预测器的新表项分配方法,该方法能够充分利用TAGE分支预测器的预测信息,如饱和计数器值、u位以及预测结果等,动态地调整TAGE分支预测器误预测时新表项的分配概率,以降低冷计数器问题出现的概率,从而进一步提升TAGE分支预测器预测准确度;而且所述新表项分配方法不需要像统计偏差矫正器SC那样设计额外的分支预测表,存储资源占用较低,更适合应用于低功耗低面积的处理器中。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是TAGE分支预测器的结构示意图。

图2是本发明提供的TAGE分支预测器的新表项分配方法的流程图。

图3是57KB存储空间下应用本发明方法的TAGE分支预测器与传统TAGE分支预测器的APPA对照仿真图。

图4是57KB存储空间下应用本发明方法的TAGE分支预测器与传统TAGE分支预测器的MPKI对照仿真图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

首先对本申请涉及的基础理论知识介绍如下:

TAGE分支预测器的结构如图1所示,由一个非tagged部件(T0)、M个tagged部件(T1~TM)和一个历史寄存器(H)构成。其中,部件T0是由饱和计数器ctr组成的基础预测表,采用指令PC地址进行索引;部件(T1~TM)是由分支指令的标签tag、饱和计数器ctr以及标记此表项是否有用的u位组成的标签预测表,采用指令PC地址与长度为Li的历史的散列结果进行索引,其中LM>LM-1>…>L1>0。

当TAGE分支预测器对分支指令进行预测时,对于部件T0,会直接根据索引表项的饱和计数器给出预测结果,对于部件T1~TM,需要先根据索引表项内的标签tag与散列计算2得到的Tag是否匹配判断本部件是否命中,只有命中时才会根据索引表项的饱和计数器给出预测结果。在得到各个部件的预测情况后,TAGE分支预测器会综合考虑各个部件的预测优先级(部件编号越大优先级越高)和元预测器USE_ALT_ON_NA的信息,选择合适部件的预测结果作为最终预测进行输出。

本申请涉及的TAGE分支预测器的一些常用定义介绍如下:

(1)M:tagged部件的总数;

(2)T0:非tagged部件;

(3)T1~TM:tagged部件;

(4)Index:tagged部件的索引地址;

(5)Provider:标签tag匹配(即命中)且具有最长历史长度的tagged部件,若所有tagged部件的tag均未匹配上,则不存在该部件;

(6)Alternator:标签tag匹配(即命中)且具有次长历史长度的tagged部件,若所有tagged部件的tag均未匹配上,则该部件为非tagged部件T0

实施例一:

本实施例提供一种面向TAGE分支预测器的新表项分配方法,所述方法包括:

在处理器更新TAGE分支预测器时,TAGE分支预测器根据其预测结果的正误产生新表项的分配使能信号ALLOC;

TAGE分支预测器根据Provider内命中表项的饱和计数器值、Provider的预测结果、部件Ti内索引表项的饱和计数器值、部件Ti内索引表项的u位,更新分配使能信号ALLOC;

TAGE分支预测器根据分配使能信号ALLOC的状态判断是否需为当前预测错误的分支指令分配新表项;

其中,所述Ti为tagged部件,i为部件位置编号,P<i≤M,M为tagged部件总数,P为Provider所在的部件位置编号。

本实施例设计提供了一种面向TAGE分支预测器的新表项分配方法,相较于传统TAGE分支预测器的新表项分配方法,该方法能够充分利用TAGE分支预测器的预测信息,如饱和计数器值、u位以及预测结果等,动态地调整TAGE分支预测器误预测时新表项的分配概率,以降低冷计数器问题出现的概率,从而提升TAGE分支预测器对那些难以预测的分支指令的预测准确度;而且本实施例的新表项分配方法不需要像统计偏差矫正器SC那样设计额外的分支预测表,存储资源占用较低,更适合应用于低功耗低面积的处理器中。

实施例二:

本实施例提供一种面向TAGE分支预测器的新表项分配方法,参见图2,所述方法包括:

首先在处理器更新TAGE分支预测器时,TAGE分支预测器根据其预测结果的正误产生新表项的分配使能信号ALLOC;

然后TAGE分支预测器根据Provider内命中表项的饱和计数器值、Provider的预测结果、部件Ti内索引表项的饱和计数器值、部件Ti内索引表项的u位,更新分配使能信号ALLOC;其中,所述Ti为tagged部件,i为tagged部件位置编号,P<i≤M,M为tagged部件总数,P为Provider所在的部件位置编号;

最后TAGE分支预测器根据分配使能信号ALLOC的状态判断是否需为当前预测错误的分支指令分配新表项,若不需要,则等待下一次的分支预测,若需要,则根据部件Ti内索引表项的饱和计数器值及部件Ti内索引表项的u位选择出一组合适的表项进行分配。

如图2所示,本申请提供的面向TAGE分支预测器的新表项分配方法的具体过程为:

步骤一:TAGE分支预测器根据其预测结果的正误产生新表项的分配使能信号ALLOC,若预测结果为正确,则将分配使能信号ALLOC赋值为0;若预测结果为错误,则将分配使能信号ALLOC赋值为1;跳转至步骤二;

步骤二:将Provider内命中表项的饱和计数器值记为ctrP,若|2×ctrP+1|≤1且Provider的预测结果为正确,则将分配使能信号ALLOC更新为0,否则不执行任何操作;跳转至步骤三;

步骤三:若所述TAGE分支预测器的预测结果为错误,则生成一个取值范围为0~(MINAP-1)的随机数rand,其中MINAP是一个随M增大而增大的常数,MINAP的取值范围为4~8;

然后判断随机数rand分配节流函数f(tage_cat[INDCAT])的大小关系:若随机数rand小于分配节流函数f(tage_cat[INDCAT]),则将分配使能信号ALLOC更新为0;若随机数rand不小于分配节流函数f(tage_cat[INDCAT]),不执行任何操作;跳转至步骤四;

所述分配节流函数f(tage_cat[INDCAT])为:

f(tage_cat[INDCAT])=(tage_cat[INDCAT]×MINAP)/(CATMAX+1);

其中,若Alternator的预测结果正确,则INDCAT为1,若不正确,则INDCAT为0;CATMAX为NUM_taggedk为各tagged部件(T1~TM)内的表项数。

步骤四:首先将部件Ti内命中表项的饱和计数器值记为ctri,并初始化变量NUM_MLConf_ctr和state_u为0;然后从部件TP+1开始循环遍历部件Ti内的索引表项,若索引表项的u位为0,则将变量state_u记为1;若|2×ctri+1|等于3,则将变量NUM_MLConf_ctr自加1;若|2×ctri+1|等于1,则立即退出此循环遍历,并跳转至步骤五;

步骤五:利用步骤四得到的变量NUM_MLConf_ctr和state_u更新分配节流函数f(tage_cat[INDCAT])的自变量tage_cat[INDCAT]的值:

tage_cat[INDCAT]=tage_cat[INDCAT]+3-3×NUM_MLConf_ctr-state_u

跳转至步骤六。

步骤六:若经过步骤五得到的分配节流函数f(tage_cat[INDCAT])的自变量tage_cat[INDCAT]小于0,则将tage_cat[INDCAT]赋值为0,否则若tage_cat[INDCAT]大于CATMAX,则将tage_cat[INDCAT]赋值为CATMAX,其中CATMAX为NUM_taggedk为各tagged部件(T1~TM)内的表项数;跳转至步骤七;

步骤七:TAGE分支预测器根据当前分配使能信号ALLOC的状态判断是否需要为当前预测错误的分支指令进行新表项的分配,若ALLOC等于1,则跳转至步骤八进行新表项的分配;若ALLOC等于0,则跳转至步骤一以等待下一次的分支预测;

步骤八:TAGE分支预测器从部件TP+1开始循环遍历部件Ti(P<i≤M)内的索引表项,选择出一组部件编号最小且满足分配条件的索引表项进行分配,分配条件为:u位为0且|2×ctri+1|≤3;

对于那些不满足分配条件的索引表项,衰退它们的饱和计数器值,衰退方法为:若ctri大于0,则将ctri自减1,若ctri小于0,则将ctri自加1;然后跳转至步骤一以等待下一次的分支预测。

为了验证本实施例的新表项分配方法对TAGE分支预测器的预测准确度的提升情况,本发明在第五届分支预测锦标赛(The 5th Championship Branch Prediction,https://jilp.org/cbp2016/)提供的仿真模型上进行了算法仿真实验,该仿真模型的测试激励包含4种类别(LONG_SERVER、LONG_MOBILE、SHORT_SERVER、SHORT_MOBILE),共440条应用程序,平均每条应用程序约有上亿条微指令。

本实施例的对照实验采用的是第五届分支预测锦标赛的64KB存储预算组的冠军分支预测器TAGE-SC-L(可参考https://jilp.org/cbp2016/program.html),只使能它的TAGE分支预测器(包含元预测器USE_ALT_ON_NA),未使能它的辅助预测器(统计偏差矫正器SC和循环预测器L),其中,冠军分支预测器TAGE-SC-L的TAGE分支预测器共占用463917-bit(约57KB)的存储空间,以下简称为传统TAGE分支预测器。

传统TAGE分支预测器的参数配置信息如表1所示。

表1传统TAGE分支预测器的参数配置

本实施例在传统TAGE分支预测器的构成基础上设计了本发明提供的面向TAGE分支预测器的新表项分配方法,其中,所述新表项分配方法的实验参数M取值为36、MINAP取值为8、CATMAX取值为147455。

图3展示了在57KB的存储空间限制下,应用本发明方法的TAGE分支预测器与传统TAGE分支预测器的APPA(Allocation Probability Per Application)对照仿真图;APPA为每条应用程序的平均新表项分配概率,能够体现出TAGE分支预测器的新表项分配概率的动态调整情况。图3中横坐标为第五届分支预测锦标赛的440条应用程序(排序后),纵坐标为APPATAGE*-APPATAGE的结果,其中TAGE*表示应用本发明方法的TAGE分支预测器,TAGE表示传统TAGE分支预测器;从图3中的实验结果可以看出,应用本发明方法后,新表项分配概率进行了动态调整,以寻找较为合适的分配概率。

图4展示了在57KB的存储空间限制下,应用本发明方法的TAGE分支预测器与传统TAGE分支预测器的MPKI(Mispredictions Per Thousand Instructions)对照仿真图;MPKI为每1000条指令中被误预测的分支指令数,能够体现出TAGE分支预测器对分支指令的预测准确度。图4中横坐标为第五届分支预测锦标赛的440条应用程序(排序后),纵坐标为MPKITAGE*-MPKITAGE的结果,其中TAGE*表示应用本发明方法的TAGE分支预测器,TAGE表示传统TAGE分支预测器;从图4中的实验结果可以看出,本实施例相对于传统TAGE分支预测器,预测准确度有了进一步的提升。

表2展示了预测第五届分支预测锦标赛的440条应用程序时,各分支预测器的MPKI平均值。

表2各分支预测器的MPKI平均值

分支预测器 TAGE TAGE* TAGE+SC
存储空间 57KB 57KB 60KB
MPKI 3.684 3.557 3.475

从表2中可以看出,虽然统计偏差矫正器SC将传统TAGE分支预测器的平均MPKI降低了0.209,但是它也额外需要3KB的存储空间开销;本发明方法将传统TAGE分支预测器的平均MPKI降低了0.127,基本不需要额外的存储空间开销。

综上所述,本发明可以动态调整TAGE分支预测器的新表项分配概率,在传统TAGE分支预测器的基础上减少了冷计数器问题出现的次数,从而可以提高传统TAGE分支预测器的预测准确度;相比于设置统计偏差矫正器SC的方法,本发明虽然在提升预测准确度的方面性能稍微逊色,却可以节省额外的存储空间开销,因此本发明在提升预测准确度的同时,可以达到节省开销的目的,对于在面积和功耗有严格限制的处理器上有更好的适用性,比如可穿戴设备、航空航天设备中的处理器等。

本发明实施例中的部分步骤,可以利用软件实现,相应的软件程序可以存储在可读取的存储介质中,如光盘或硬盘等。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

14页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种BMC固件启动方法及电路

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!