一种处理器分支指令执行结果预测方法及系统

文档序号:36255856发布日期:2023-12-03 17:12阅读:65来源:国知局
一种处理器分支指令执行结果预测方法及系统

本发明涉及分支预测,并特别涉及一种处理器分支指令执行结果预测方法及系统。


背景技术:

1、分支预测是处理器前端取指的关键技术,它对分支指令的执行结果进行预测,取指部件据此对推测(speculative)执行流进行取指,并送往后端执行部件进行执行。用于分支预测的分支预测器的核心部件是记录分支预测信息的缓存btb,以指令为单位记录分支指令的信息。

2、某些处理器会中采用一种ftb(fetchtargetbuffer)设计,以指令块为单位,记录其中存在的分支指令信息,以及块的结束地址。指令块代表一次预测覆盖的范围/单位,同一指令块内的分支指令会一起进行预测。

3、fetchtargetbuffer,其代表一种以块为单位存储分支指令信息的btb(branchtargetbuffer)设计,它和传统btb的主要区别在于:

4、传统btb每一项对应一条分支指令信息,通过分支指令本身的地址(或程序计数器pc)寻址存储表;而ftb以指令块为单位进行预测,以指令块起始地址寻址存储表,查到的项内包含该指令块内的分支指令信息,以及该指令块的结束地址。如果块内没有分支指令跳转,则下一次以结束地址作为起始地址,做下一次预测。ftb架构的预测流程:用块的起始地址查ftb,得到块的范围(起始地址-结束地址)和块内的分支信息;同时从其他预测器(例如条件分支方向预测器tage)得到块内分支的预测结果,如果跳转,则从ftb或其他预测器(主要是间接跳转预测器和ras(返回地址栈))得到跳转目标地址,下次预测从目标地址开始;反之,从ftb记录的结束地址开始预测;如果ftb未命中,则认为块内没有分支指令,直接把起始地址加上一个设定的宽度(例如32字节),作为新的起始地址,进行下一次预测。

5、如图1所示,tage是一种目前较优的分支预测算法,它使用不同长度的分支历史和当前pc(程序计数器/地址)寻址多个计数器表(即图1中t0到t4所示意的表,“计数器”指pred:饱和计数器,用来得到预测的跳转方向),得到的各个表项都会进行各自的tag匹配,从命中的表项中,选取在寻址和tag计算中用到的分支历史最长的那个表,从其表项内容(主要是pred字段)中获取最终的预测结果。在预测时,对于每张表,会用pc和一种长度的分支历史进行哈希,计算出地址访问存储表;同时用pc和同一份分支历史做另一种哈希,计算出标签(tag),与查出的表项中存储的标签做比较,如果相同,则认为此表预测命中。原则上会选取命中的最长历史的表作为最终预测结果,结果由其中饱和计数器的方向给出,最长的预测比较准,逻辑上是因为考虑了更多的分支历史信息,因为程序内部的分支行为间存在关联,所以可以用历史分支执行结果预测目前的分支行为。此设计只针对一次进行一条分支指令的预测,在以ftb为基础的架构中,会对tage进行扩展,以支持同时对多条分支指令的预测。具体做法是,在每个tage表项中存储多条分支的饱和计数器,预测过程和原设计类似。对tage每张使用分支历史的表来说,使用的分支历史原长度固定,计算索引(寻址)时一般把分支历史按寻址宽度分段,并全部异或运算到一起后,再与pc异或,得到访问表项的索引;而计算tag使用相同的分支历史,而改变折叠宽度,从而得到不同的折叠结果,再和pc异或,计算出tag。

6、另外,现有分支预测器一般采用流水线设计,为解决多周期延迟带来的带宽缩减问题,常用的设计是覆盖预测(overriding):同时实现一个低延迟、低准确率的预测器和高延迟、高准确率的预测器。默认使用前者做快速预测,提供高速的预测取指流,而后者对前者的预测结果进行检查,若发现错误,则刷新流水线,重新以后者的预测结果进行后续预测取指。由于程序中有很多容易预测的分支指令,此方法可以在大部分情况下,表现得如同一个高准确率、低延迟的预测器,而仅在前者预测效果不佳时,暴露准确预测器的延迟。在ftb为基础的架构中,ftb需要记录所有分支的信息,其存储开销大,访问延迟高,所以需要一个更小的存储结构,提供快速的预测,本发明中为一个全相联的uftb(microftb)。在uftb提供的分支信息基础上,还需要预测条件分支的方向,本发明中采取在uftb项中附带两位饱和计数器的做法,在得到uftb项的同时,获得对应条件分支(如有)的跳转方向。

7、如图2所示,是一个当前架构中,uftb和ftb、tage等预测器的流水线关系示意图(ubtb即为uftb)。

8、常见的分支预测部件往往因实现复杂度而对能力有所限制。例如:一个时钟周期内只能预测出一个跳转的分支(预测执行结果),在下一个时钟周期才能对跳转的目标地址进行预测。在分支跳转密度高的程序中,此特征往往会限制预测带宽,进而限制前端整体供指带宽。若要把现有架构扩展到支持并行预测连续的两个跳转分支,会遇到的关键问题在于,跳转分支间存在依赖关系。分支预测的一般做法是通过分支指令或预测块起始地址的pc,以及记录历史跳转情况的分支历史,来共同寻址分支信息的存储表,从而得出预测结果。在此前提下,第二个跳转分支的pc和所要用到的分支历史,依赖于第一个跳转分支的预测结果。因此,若不读出第一个跳转分支的预测信息,难以获得寻址存储表的第二个跳转分支的信息。从而很难简单地做到对两个连续跳转分支的并行预测。


技术实现思路

1、本发明针对已有的预测器架构,进行低开销的改造,以支持在一个时钟周期内对连续的跳转做并行预测。以提高预测带宽,提高处理器的执行效率。

2、具体来说本发明提出了一种处理器分支指令执行结果预测方法,包括:

3、步骤1、根据第一指令块的起始地址查询分支预测器内部记录有连续预测能力的指令块的连续预测缓存nbb,并进行标签tag匹配,若存在匹配的标签tag则执行步骤2,否则根据该分支预测器的预测流程,输出当前该第一指令块的预测结果;

4、步骤2、在该分支预测器的快速预测流水级,根据该匹配的标签tag得到nbb中记录的该第一指令块的预测偏向;同时从快速预测器得到对该第一指令块的快速预测结果,并比较其和该预测偏向是否一致,若是,则使用nbb中记载的对第二指令块的默认预测结果得到第三指令块的起始地址,以在下一个时钟周期对该第三指令块进行预测;

5、nbb中首先记载了对块1的预测偏向,它的预测结果是块2的起始地址,同时nbb也记载了一种对块2的简单预测,作为对块2的第一预测,从而得到块3的起始地址

6、步骤3、在该分支预测器的后续流水级,该分支预测器根据该第一指令块的起始地址得到该第一指令块的准确预测结果,并比较其和该预测偏向是否一致,若是,则输出该第一指令块的准确预测结果和该第二指令块的预测结果;否则,仅输出该第一指令块的准确预测结果。

7、所述的处理器分支指令执行结果预测方法,该步骤3包括:在该第一指令块的该准确预测结果和连续预测缓存nbb偏向不一致时,若该快速预测流水级曾根据该第一指令块的快速预测结果,使用该第二指令块的预测结果,则进行流水线冲刷,从该第一指令块的准确预测结果对应的该第二指令块的起始地址开始,进行预测;由于它和nbb记载的块1的偏向不同,所以它不支持使用nbb内的信息进行块2的预测,于是接下来等同于正常预测流程中,块1的第二预测否决第一预测,冲刷流水线,重新开始预测新的块2,也就是说此时没有带宽提升

8、其中流水线冲刷指的是当第s个流水级发出的冲刷,会将n<s的所有请求冲刷掉,并把s级认为接下来应该预测的地址,送到预测器流水线的开头,下一个时钟周期开始重新预测;

9、用该连续预测缓存nbb中记载的该第一指令块的跳转目标作为该第二指令块的起始地址,通过预设分支预测算法得到第二指令块的预测需要的标签tag,执行tage预测逻辑,从而得到该分支预测器对该第二指令块的分支指令结果的预测,并结合nbb中得到的ftb项,得到该第二指令块的准确预测结果,从而检查该第二指令块的预测结果,如果不符,则进行流水线冲刷,根据该第二指令块的准确预测结果,重定向至该第三指令块的起始地址。

10、所述的处理器分支指令执行结果预测方法,还包括:步骤4,对于每个指令块的更新请求,连续预测缓存nbb的标签tag使用该第一指令块的起始地址计算,更新时用该第一指令块的起始地址查询连续预测缓存nbb:

11、如果命中,则判断该第一指令块的真实分支结果是否和nbb项内记录的相符,若是则增加该第一指令块的偏向置信度biasconf,否则降低该第一指令块的偏向置信度biasconf;

12、如果不命中,则新建nbb中表项,biasconf从初始值起步。

13、本发明还提出了一种处理器分支指令执行结果预测装置,其中包括:

14、模块1、用于根据第一指令块的起始地址查询分支预测器内部记录有连续预测能力的指令块的连续预测缓存nbb,并进行标签tag匹配,若存在匹配的标签tag则执行步骤2,否则根据该分支预测器的预测流程,输出当前该第一指令块的预测结果;

15、模块2、用于在该分支预测器的快速预测流水级,根据该匹配的标签tag得到nbb中记录的该第一指令块的预测偏向;同时从快速预测器得到对该第一指令块的快速预测结果,并比较其和该预测偏向是否一致,若是,则使用nbb中记载的对第二指令块的默认预测结果得到第三指令块的起始地址,以在下一个时钟周期对该第三指令块进行预测;

16、模块3、用于在该分支预测器的后续流水级,该分支预测器根据该第一指令块的起始地址得到该第一指令块的准确预测结果,并比较其和该预测偏向是否一致,若是,则输出该第一指令块的准确预测结果和该第二指令块的预测结果;否则,仅输出该第一指令块的准确预测结果。

17、所述的处理器分支指令执行结果预测装置,其中该模块3用于:在该第一指令块的该准确预测结果和连续预测缓存nbb偏向不一致时,若该快速预测流水级曾根据该第一指令块的快速预测结果,使用该第二指令块的预测结果,则进行流水线冲刷,从该第一指令块的准确预测结果对应的该第二指令块的起始地址开始,进行预测;

18、用该连续预测缓存nbb中记载的该第一指令块的跳转目标作为该第二指令块的起始地址,通过预设分支预测算法得到第二指令块的预测需要的标签tag,执行tage预测逻辑,从而得到该分支预测器对该第二指令块的分支指令结果的预测,并结合nbb中得到的ftb项,得到该第二指令块的准确预测结果,从而检查该第二指令块的预测结果,如果不符,则进行流水线冲刷,根据该第二指令块的准确预测结果,重定向至该第三指令块的起始地址。

19、所述的处理器分支指令执行结果预测装置,其中还包括:模块4,用于对于每个指令块的更新请求,连续预测缓存nbb的标签tag使用该第一指令块的起始地址计算,更新时用该第一指令块的起始地址查询连续预测缓存nbb:

20、如果命中,则判断该第一指令块的真实分支结果是否和nbb项内记录的相符,若是则增加该第一指令块的偏向置信度biasconf,否则降低该第一指令块的偏向置信度biasconf;

21、如果不命中,则新建nbb中表项,biasconf从初始值起步。

22、本发明还提出了一种服务器,其中包括所述的任意一种处理器分支指令执行结果预测装置。

23、本发明还提出了一种存储介质,用于存储执行所述的任意一种处理器分支指令执行结果预测方法的计算机程序。

24、本发明相比于现有技术的技术进步包括:

25、本发明做到对连续跳转分支的并行预测,可以在一个时钟周期内同时得到两个需要取指执行的指令块,在密集跳转导致取指带宽受限,从而造成后端执行单元饥饿的程序段中,可以有效增加指令预测和取指的效率,缓解执行单元饥饿,提高整体性能。

26、具体来说,三个指令块b1,b2,b3,原有的预测架构中,b1和b2各自需要1个时钟周期进行预测,在本发明中,如果b1命中nbb,则在第1个时钟周期可以得到b1和b2的预测结果,第2个时钟周期就可以开始b3的预测,节省了一半时间。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1