一种tage分支预测算法针对超大循环次数指令流优化的方法

文档序号:1815558 发布日期:2021-11-09 浏览:3次 >En<

阅读说明:本技术 一种tage分支预测算法针对超大循环次数指令流优化的方法 (Method for optimizing instruction stream of extra-large cycle number by TAGE branch prediction algorithm ) 是由 张然 王飞 于 2021-09-03 设计创作,主要内容包括:本发明公开了一种TAGE分支预测算法针对超大循环次数指令流优化的方法,涉及处理器分支预测领域。本发明的优点是引入循环预测表和循环预测器(loop predictor),记录现有分支预测算法无法预测的退出循环时的分支指令,筛选出因分支历史信息过长导致TAGE预测失败的分支指令,以及用来实现循环指令流的分支指令,利用循环预测器记录循环跳转的次数,通过TAGE主预测器进行仲裁,最终针对超大循环主体提供有效的分支预测结果;充分利用有限的存储开销,减轻分支预测失败,减少访问冲突,优化分支预测的正确率,提高分支预测精度。(The invention discloses a method for optimizing a TAGE branch prediction algorithm aiming at an instruction stream with ultra-large cycle number, and relates to the field of processor branch prediction. The loop prediction method has the advantages that a loop prediction table and a loop predictor (loop predictor) are introduced, the branch instructions which cannot be predicted by the existing branch prediction algorithm and exit the loop are recorded, the branch instructions which cause TAGE prediction failure due to overlong branch historical information are screened out, the branch instructions which are used for realizing the loop instruction stream are selected, the loop predictor is used for recording the number of loop jumps, arbitration is carried out through a TAGE main predictor, and finally an effective branch prediction result is provided for a super-large loop main body; the limited storage overhead is fully utilized, the failure of branch prediction is reduced, access conflict is reduced, the accuracy of branch prediction is optimized, and the branch prediction precision is improved.)

一种TAGE分支预测算法针对超大循环次数指令流优化的方法

技术领域

本发明涉及处理器分支预测领域,具体涉及一种基于现有的TAGE分支预测算法针对超大循环次数指令流的算法优化的方法。

背景技术

现代处理器通过流水线的级数增加,处理器的工作细化以提升处理器的主频,并广泛采用了超流水,超标量、分支预测、乱序执行、前瞻执行等技术。分支预测技术是提高处理器性能的关键支撑技术,TAGE预测器的实现是通过一个UHT(untagged history table)和N(N>=2)个THT(tagged history table)实现的,每个THT表中每个表项都会包含一个partial tag(部分位)。UHT的索引是通过分支指令的地址直接索引。THT是通过分支指令的地址和GHR(global history register)进行hash(是把任意长度的输入通过特定的算法变换成固定长度的输出,输出的值就是哈希值)后的结果进行索引,并用读出的partial tag和当前分支指令地址生成的partial tag进行比对,如果两个tag值相同表示该THT表命中,从而确定使用哪个表提供的预测结果。不同的THT会使用不同长度的GHR和分支指令的地址进行索引。TAGE预测器的访问会同时访问UHT和THTs(THT_1,THT_2,…THT_N),当所有THTs都没有命中时(THT表项中存储的partial tag和指令计算出的partial tag不相同)预测器会使用UHT提供的预测结果。如果只有1个THT命中,就使用命中的THT提供的结果。如果有多个THT命中,比如THT_i,和THT_j同时命中,如果j>i,会选择THT_j的结果。TAGE预测器的建立是一个从UHT逐步升级到THT_1,THT_2最终到THT_N的过程。THT_1,THT_2,…,THT_N所使用的GHR长度会递增。这样的设计思想是基于如果某个THT无法提供正确的预测,那么说明该分支需要依赖于更长的历史信息,故而将该分支的预测升级到更高的THT_N表项中。比如当UHT不能提供一个正确的预测结果,那么就会在THT_1中建立一个预测项。相似的如果THT_1提供了一个错误的预测,那么就会在THT_2中建立一个预测项。

已有技术的缺点在于:基于TAGE预测器的建立的分支预测系统,如果级别最高的THT(THT_N)依然无法提供正确的结果,那么说明该分支所依赖的历史信息位已经超过了TAGE所能提供的最大历史信息位,无法提供正确的分支预测结果。

发明内容

本发明涉及到一种TAGE分支预测算法针对超大循环次数指令流优化的方法,其特征在于:TAGE条件分支预测器中引入循环预测表和循环预测器,取指后经过predecode后对分支指令进行筛选,

a).如果是因分支历史信息过长导致TAGE预测失败,则直接使用TAGE主预测器的结果;

b).如果是分支历史信息正常,则筛选出用来实现循环指令流的分支指令;

c).记录循环分支实际发生的跳转的次数作为可信度进行判断;

d).如果可信度不满足,则直接使用TAGE主预测器的结果;

e).如果可信度满足,则通过循环预测器与TAGE主预测器进行仲裁,提供有效的分支预测结果。

如以上所述的算法优化的方法,其特征在于所述的步骤a)中所述的分支历史信息过长导致TAGE预测失败的筛选方法具体为,判断TAGE中的THT是否可以提供正确的结果,如果TAGE中级别最高的THT依然无法提供正确的结果,那么说明该分支所依赖的历史信息位已经超过了TAGE所能提供的最大历史信息位,则判定根据TAGE中的THT无法提供正确的分支预测。

如以上所述的算法优化的方法,其特征在于步骤b)中所述的筛选出用来实现循环指令流的分支指令是通过判断向前跳转和向后跳转来实现的,条件分支可以向前跳转(branch target<branch VA,中文意思是目标分支小于可用分支);向后跳转(branchtarget>branch VA,中文意思是目标分支大于可用分支),如果某条指令向前跳转,那么说明此类分支有可能是分支指令。

如以上所述的算法优化的方法,其特征在于步骤c)中所述的记录循环分支实际发生的跳转的次数是通过在循环预测项目中额外加入一个提交跳转次数的计数器(cmt)来实现的,每个循环预测器有三个计数器,一个记录推测跳转的次数(specCnt),一个记录提交跳转的次数(cmtCnt),一个记录循环的次数(termCnt),循环预测器在每个循环预测项目中额外加入一个记录提交跳转次数的计数器(cmtCnt),该计数器在指令提交阶段在更新,当该分支退出该循环时,(cmtCnt)计数器记录循环跳转的次数。

如以上所述的算法优化的方法,其特征在于所述的步骤e)中循环预测器与TAGE主预测器的仲裁方法是包括以下步骤:

1)TAGE中的级别最高的THT通过分支指令的地址和GHR(global historyregister)进行hash后的结果进行索引,并读出的partial tag和当前分支指令地址生成的partialtag来进行比对,如果两个tag值相同则该级别最高的THT表命中;

2)级别最高的THT预测某个分支发生跳转;循环预测器命中;

3)循环预测器提供的可信度很高,本专利在循环预测器中引入3-bit的提交跳转计数器(cmtCnt)作为该预测项的预测可信度,当预测成功时该计数器+1,只有该计数器饱和时才认为该预测项可信,如果某次循环预测器预测失败时,则该预测项无效,后续该预测项便没有机会干预预测;

4)当循环预测器中预测可信度的计数器饱和时,则仲裁TAGE主预测器中提供的预测结果无效,采用循环预测器提供的预测结果为分支预测器的最终结果。

本发明的优点是引入循环预测表和循环预测器(loop predictor),记录现有分支预测算法无法预测的退出循环时的分支指令,筛选出因分支历史信息过长导致TAGE预测失败的分支指令,以及用来实现循环指令流的分支指令,利用循环预测器记录循环跳转的次数,通过TAGE主预测器进行仲裁,最终针对超大循环主体提供有效的分支预测结果;充分利用有限的存储开销,减轻分支预测失败,减少访问冲突,优化分支预测的正确率,提高分支预测精度。

附图说明

下面结合附图和实施例对本发明作进一步的详细说明

图1是本发明的Loop Predictor的系统流程图;

图2和图3是本发明的Loop Predictor与tage predictor的仲裁过程和真值表;

图注:

Tage:TAGE主预测器;

Tage's Result:TAGE主预测器结果;

Loop Predictor's Result:循环预测器结果;

Final Result:循环预测器结果和Tage预测器仲裁后生成的最终结果;

图4是本发明的Loop Predictor的硬件实现;

具体实施方式

本发明是在现有TAGE分支预测算法中针对超大循环次数指令流的算法优化的方法,下面将通过具体实施例说明本发明的优化方法。

图1是本发明的Loop Predictor的系统流程图,如图1中所示,

1.对分支进行predecode(001),并且同时访问Tage预测器(003);

2.根据001的结果,判断是否属于LoopTerm Eligible(002)(branch target<branch VA);

3.如果不满足LoopTerm Eligible(002),那么不开启Loop Predictor.直接使用Tage predictor的结果(008);

4.如果满足LoopTerm Eligible(002),继续访问Loop Predictor(004),使用LoopPredictor(004)和Tage预测器(003)仲裁后生成的预测结果(007),如果可信度不满足直接使用Tage predictor的结果(008);

5.Loop Predictor命中(005)判断访问的loop predictor是否命中,也就是用当前指令的地址和Loop predictor中存放的tag比较的过程,如果相同就是命中。

6.Loop Predictor可信度足够高(006)在Loop Predictor命中(005)命中的前提下,通过loop predictor中conf的内容判断该entry的可信度是否足够高。

7.如果可信度满足Loop Predictor可信度足够高(006),那么使用LoopPredictor和Tage仲裁后的结果(007,009)。

图2,3是本发明的Loop Predictor与tage predictor的仲裁过程和真值表,如图2,3中所示,并结合图1,当图1的006判断为真时,会使用Loop Predictor和Tage仲裁后的结果(007,009),其中,图2提供了仲裁的框架图,图3提供了仲裁过程的真值表。

图4是本发明的Loop Predictor的硬件实现,如图4中所示,

specCnt用于推测更新,通过比较specCnt和termCnt从而确定是否需要终结循环,当specCnt==termCnt是,Loop Predictor提供‘1’,反之提供‘0’;

cmtCnt在commit阶段更新,记录某个分支实际发生的跳转次数,引入cmtCnt的目的用于恢复在错误路径上的speCnt的更新,比如,如果某个命中Loop Predictor的分支在错误的路径上更新了n次,那么speCnt就会比termCnt大n,当这个分支发现在错误的path后那么就用termCnt恢复其speCnt。跳转次数的计数器(cmtCnt)在指令提交阶段在更新,当该分支退出该循环时,跳转次数的计数器(cmtCnt)记录循环跳转的次数;

age用于Loop Predictor的建立,age用于阻拦有效的entry(条目)被替换,只有age为0的Loop Predictor entry才可以被替换掉,每当某个entry的Age阻挡LoopPredictor建立一次,他的值会相应-1;

conf表示该entry提供预测的可信度,只有可信度为高时,该预测才会认为有效。结合图4,conf由一个3-bit饱和计数器实现,当conf的数值达到饱和时,我们认为可信度足够高。

表1列举了Loop predictor可能出现的具体操作,用于更新Loop Predictor,按表1所示Lp Eligible,LoopTermHit,Trained,pred Result以及LoopTerm是分支预测器在推测阶段提供的结果,Determined Result,是指令提交时得到的结果,当分支指令提交时,可以确定是何种操作,从而更新Loop Predictor,表项的最后一列例举了具体的更新行为。

表1

Current Detemined Branch:当前确定的分支;

On flushed path:进行更新路径

Est:初始化分支;

Trained:进行训练;

TrainedCfp:训练更新跳转次数;

Enhance:提高命中;

EnhanceCfp:提高跳转次数;

Disc:无效操作;

Upd:记录实际跳转次数;

UpdCfp:更新实际跳转次数;

Cfplp:实际循环次数;

Lp Eligible的条件:Conditional Branch+Branch Target;smaller than VA;

LoopTermHit的条件:(PC==Tag)&(Vld==1)&();

Trained的条件:初始化为0,在Trained操作后改为1;

LoopTerm:Loop predicotr给出的预测结果;

Pred Resut:分支的最终预测结果;

Determined Result:分支实际的结果。

根据分支预测器(包括TAGE和Loop Predictor)的预测结果以及分支实际的跳转结果,Loop Predictor会有表中提供的9种操作(Est,trained,trainedCfp,Enhance,EnhanceCfp,Disc,Upd,UpdCfp,CfpLp),表中最后一列描述了三个计数器更新在不同操作下的更新情况。

Est操作的条件是,首先这个分支没有被建立,也就是Loop Predictor Miss,并且循环次数超出了ghr的覆盖范围也就是之前提到的:1.THT_N hit;2.THT_N预测跳转;3.分支实际不跳转,满足上述1-3,那么就会建立一个loop predictor entry,建立后的entry并不能提供预测,因为尚未捕捉到该分支循环的次数,无法更新termCnt,Est后的分支主要任务是根据分支实际跳转情况更新cmtCnt,也就是表1中的Upd操作;

Trained/TrainedCfp:当一个命中Loop Predictor的分支实际不跳转时(Determined not taken),此时就捕捉到了该分支loop的次数,将termCnt的值更新为cmtCnt的值,同时将该entry中的Trained位拉高,表示该entry已经训练完成,可以提供预测;

Enhance/EnhanceCfp:操作发生在LpTerm提供正确预测的时候,Enhance用于更新Loop Predictor中的conf,尽管Loop Predictor可以提供预测(命中,并且终止loop)但该预测并不会被采用,直到conf计数器达到饱和后才会被使用;

Di sCard操作用于无效掉某个提供错误结果的Loop Predictor Entry,上述操作都发生在当前指令提交的时候;

Upd/UpdCfp操作的主要目的在于记录分支实际发生的跳转次数(更新specCnt),当某个分支命中Loop predictor后,需要记录该分支实际的跳转次数,当specCnt==termCnt那么Loop Predictor的最终预测结果为‘1’反之为‘0’。

9页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种基于全志A40i处理器的工业HMI终端

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!