《间接分支预测.pdf》由会员分享,可在线阅读,更多相关《间接分支预测.pdf(29页珍藏版)》请在专利查询网上搜索。
1、10申请公布号CN104049938A43申请公布日20140917CN104049938A21申请号201410092214622申请日201403131304504220130313GBG06F9/30200601G06F9/3220060171申请人想象力科技有限公司地址英国赫特福德郡72发明人MV马努基安74专利代理机构永新专利商标代理有限公司72002代理人刘瑜王英54发明名称间接分支预测57摘要用于预测间接分支指令的目标地址的方法和间接分支预测器逻辑单元。所述方法包括在表中存储间接分支指令的预测的目标地址,所述预测的目标地址是由之前的间接分支指令的间接路径历史与之前的条件分支指令的。
2、被采用/不被采用历史的组合进行索引的。当接收到新间接分支指令进行预测时,间接路径历史和被采用/不被采用历史进行组合以产生间接分支指令的索引。随后使用所产生的索引来识别表中的预测的目标地址。如果所识别的预测的目标地址是有效的,则预测间接分支指令的目标地址是预测的目标地址。30优先权数据51INTCL权利要求书2页说明书15页附图11页19中华人民共和国国家知识产权局12发明专利申请权利要求书2页说明书15页附图11页10申请公布号CN104049938ACN104049938A1/2页21一种用于预测处理器所执行的程序中的间接分支指令的目标地址的方法(900),所述方法包括在间接分支预测目标表中。
3、存储间接分支指令的多个预测的目标地址,每个预测的目标地址是由间接路径历史与被采用和不被采用历史的组合进行索引的,所述间接路径历史包括多个之前的间接分支指令的目标地址的至少一部分,所述被采用和不被采用历史包括多个之前的条件分支指令的结果;在索引产生器处,接收标识间接分支指令的信息,所述标识间接分支指令的信息包括所述间接分支指令的地址(902);在所述索引产生器处,获得现行的间接路径历史和现行的被采用和不被采用历史,所述现行的间接路径历史包括多个之前预测的间接分支指令的预测的目标地址的至少一部分,所述现行的被采用和不被采用历史包括多个之前预测的条件分支指令的结果(904,906);在所述索引产生器。
4、处,将所述现行的间接路径历史与所述现行的被采用和不被采用历史进行组合,以产生所标识的间接分支指令的索引,其中,将所述现行的被采用和不被采用历史与所述现行的间接路径历史进行组合包括将所述现行的间接路径历史与所述现行的被采用和不被采用历史中的一个修改为包括所述间接分支指令的地址的至少一部分(908);使用所标识的间接分支指令的索引来识别所述间接分支预测目标表中的预测的目标地址(910);如果所识别的预测的目标地址是有效的,则预测所标识的间接分支指令的目标地址是所识别的预测的目标地址(912、914)。2根据权利要求1所述的方法(900),其中,将所述现行的间接路径历史与所述现行的被采用和不被采用历。
5、史进行组合包括在所述现行的间接路径历史的至少一部分与所述现行的被采用和不被采用历史的至少一部分上执行散列函数。3根据权利要求2所述的方法(900),其中,所述散列函数是异或函数。4根据权利要求1所述的方法(900),还包括在更新逻辑单元处,接收与已执行的间接分支指令有关的信息(1002),所述与已执行的间接分支指令有关的信息包括所述已执行的间接分支指令的实际目标地址;以及在所述更新逻辑单元处,基于所述实际目标地址更新所述间接分支预测目标表(1010)。5根据权利要求4所述的方法(900),其中,更新所述间接分支预测目标表包括在所述更新逻辑单元处,获得提交的间接路径历史与提交的被采用和不被采用历。
6、史(1004、1006);在所述更新逻辑单元处,将所述提交的间接路径历史与所述提交的被采用和不被采用历史进行组合(1008),以产生所述已执行的间接分支指令的索引;使用所述已执行的间接分支指令的索引来识别所述间接分支预测目标表中的预测的目标地址;以及用所述已执行的间接分支指令的实际目标地址来替换所述已执行的间接分支指令的索引所识别的预测的目标地址(1010)。权利要求书CN104049938A2/2页36根据权利要求5所述的方法(900),其中,所述提交的间接路径历史包括多个之前执行的间接分支指令的实际目标地址的至少一部分。7根据权利要求5或6所述的方法(900),其中,所述提交的被采用和不被。
7、采用历史包括多个之前执行的条件分支指令的结果。8根据权利要求1到6中的任意一项所述的方法(900),还包括如果所识别的预测的目标地址不是有效的,则暂停所述处理器的取出级。9根据权利要求1到6中的任意一项所述的方法(900),其中,产生所标识的间接分支指令的索引包括仅将所述现行的间接路径历史与所述现行的被采用和不被采用历史进行组合。10一种用于预测处理器(300)所执行的程序中的间接分支指令的目标地址的间接分支预测器逻辑单元(314),所述间接分支预测器逻辑单元(314)包括间接分支预测目标表(402),其被配置为存储间接分支指令的多个预测的目标地址(410),每个预测的目标地址是由间接路径历史。
8、与被采用和不被采用历史的组合进行索引的,所述间接路径历史包括多个之前的间接分支指令的目标地址的至少一部分,所述被采用和不被采用历史包括多个之前的条件分支指令的结果;与所述间接分支预测目标表(402)进行通信的索引产生器(404),所述索引产生器(404)被配置为接收标识间接分支指令的信息,所述标识间接分支指令的信息包括所述间接分支指令的地址;获得现行的间接路径历史(414)与现行的被采用和不被采用历史(416),所述现行的间接路径历史(414)包括多个之前预测的间接分支指令的预测的目标地址的至少一部分(502、504、506),所述现行的被采用和不被采用历史(416)包括多个之前预测的条件分支。
9、指令的结果(602、604);将所述现行的间接路径历史(414)与所述现行的被采用和不被采用历史(416)进行组合,以产生所标识的间接分支指令的索引(702、804),其中,将所述现行的被采用和不被采用历史与所述现行的间接路径历史进行组合包括将所述现行的间接路径历史与所述现行的被采用和不被采用历史中的一个修改为包括所述间接分支指令的地址的至少一部分;以及与所述间接分支预测目标表(402)进行通信的决策逻辑单元(406),所述决策逻辑单元(406)被配置为使用所标识的间接分支的索引(702、802)来识别所述间接分支预测目标表(402)中的预测的目标地址;如果所识别的预测的目标地址是有效的,则预。
10、测所标识的间接分支指令的目标地址是所识别的预测的目标地址。11一种处理器(300),其包括权利要求10所述的间接分支预测器逻辑单元(314)。权利要求书CN104049938A1/15页4间接分支预测背景技术0001许多处理器包括分支预测器,在已知的引起可能的流变化的指令(例如分支指令)的情况下,分支预测器预测程序流将采取哪个方向。分支预测是有用的,这是因为其使得处理器能够在获知分支指令的结果之前推测性地执行指令。0002可以将分支指令分类为条件分支指令或间接分支指令。条件分支指令(基于常数值的分支指令)需要对采取分支还是不采取分支进行二元决策。间接分支指令(基于变量的分支指令)需要对目标地址。
11、进行N元决策,其中N是可能的目标地址的数目。相应地,与条件分支相比,间接分支更难以预测。因此,许多分支预测器不能精确地预测间接分支指令。0003这一问题的一个解决方案是改善分支预测器所使用的间接分支预测算法。然而,这通常是相当困难的且费时的。0004下文描述的实施例并不限于解决已知处理器的任意或全部缺点的实现方式。发明内容0005提供该发明内容部分以便以简化的形式介绍构思的精华,在下文中在具体实施方式中将一步描述这些构思。该发明内容部分并不旨在标识要求保护的主题的关键特征或必要特征,也不旨在用作辅助确定要求保护的主题的范围。0006本文描述了用于预测间接分支指令的目标地址的方法和间接分支预测器。
12、逻辑单元。所述方法包括将间接分支指令的预测的目标地址存储在一表中,所述预测的目标地址是由之前的间接分支指令目标的间接路径历史和之前的条件分支指令的被采用/不被采用历史的组合进行索引的。当接收到新的间接分支指令进行预测时,所述间接路径历史和所述被采用/不被采用历史被组合以产生该间接分支指令的索引。所产生的索引随后用于识别所述表中的预测的目标地址。如果所识别的预测的目标地址是有效的,那么所述间接分支指令的目标地址被预测为是所述预测的目标地址。0007第一方案提供了一种用于预测处理器所执行的程序中的间接分支指令的目标地址的方法,所述方法包括将间接分支指令的多个预测的目标地址存储在间接分支预测目标表中。
13、,每个预测的目标地址是由间接路径历史与被采用和不被采用历史的组合进行索引的;在索引产生器处,接收标识间接分支指令的信息;在所述索引产生器处,获取间接路径历史以及被采用和不被采用历史;在所述索引产生器处,对所述间接路径历史与所述被采用和不被采用历史进行组合,以产生所标识的间接分支指令的索引;使用所标识的间接分支指令的索引来识别所述间接分支预测目标表中的预测的目标地址;如果所识别的预测的目标地址是有效的,则预测所标识的间接分支指令的目标地址是所识别的预测的目标地址。0008第二方案提供了一种用于预测处理器所执行的程序中的间接分支指令的目标地址的间接分支预测器逻辑单元,所述间接分支预测器逻辑单元包括。
14、间接分支预测目标表,其被配置为存储间接分支指令的多个预测的目标地址,每个预测的目标地址是由间接路径历史与被采用和不被采用历史的组合进行索引的;与所述间接分支预测目标表进行通信的说明书CN104049938A2/15页5索引产生器,所述索引产生器被配置为接收标识间接分支指令的信息;获取间接路径历史以及被采用和不被采用历史;将所述间接路径历史与所述被采用和不被采用历史进行组合,以产生所标识的间接分支指令的索引;以及与所述间接分支预测目标表进行通信的决策逻辑单元,所述决策逻辑单元被配置为使用所标识的间接分支的索引来识别所述间接分支预测目标表中的预测的目标地址;如果所识别的预测的目标地址是有效的,则预。
15、测所标识的间接分支指令的目标地址为所识别的预测的目标地址。0009第三方案提供了一种处理器,其包括第二方案的间接分支预测器逻辑单元。0010第四方案提供了一种计算机可读存储介质,其上编码有计算机可读程序代码,用于产生包括第二方案的间接分支预测器逻辑单元的处理器。0011第五方案提供了一种计算机可读存储介质,其上编码有计算机可读程序代码,用于产生被配置为执行第一方案的方法的处理器。0012第六方案提供了一种基本上如参考图3所描述的那样的处理器。0013第七方案提供了基本上如参考图4所描述的那样的间接分支预测器逻辑单元。0014第八方案提供了一种基本上如参考图9所描述的那样的用于预测间接分支指令的。
16、目标地址的方法。0015第九方案提供了一种基本上如参考图10所描述的那样的用于更新间接分支预测表的方法。0016第十方案提供了一种基本上如参考图11所描述的那样的多线程处理器。0017本文中所描述的方法可以被有形存储介质上的机器可读形式的软件执行,例如计算机程序的形式,所述计算机程序包括当该程序在计算机上运行时以及在该计算机程序可以实现在计算机可读存储介质上时适合于执行本文描述的任意方法的所有步骤的计算机可读程序代码模块。有形(或非暂时性)存储介质的例子包括磁盘、拇指驱动器、存储卡等,但不包括传播信号。软件可以适合于在并行处理器或串行处理器上执行,使得可以以任意合适的顺序或同时地执行方法步骤。。
17、0018本文中所描述的硬件组件可以由其上编码有计算机可读程序代码的计算机可读存储介质产生。0019本申请承认固件和软件可以是有价值的、可单独交易的商品。本申请旨在涵盖在“哑”或标准硬件上运行或对其进行控制的、用于执行期望功能的软件。本申请还旨在涵盖“描述”或定义硬件配置的、用于设计硅芯片或用于配置通用可编程芯片以执行期望功能的软件,例如HDL(硬件描述语言)软件。0020优选的特征可以适当地组合(这对于技术人员将是显而易见的),并且可以与本发明的任意方案进行组合。附图说明0021将参考以下附图通过例子的方式来描述本发明的实施例,在附图中0022图1是示例性的已知分支目标缓冲器表的示意图;002。
18、3图2是示例性的已知两级分支预测表的示意图;0024图3是示例性的单线程处理器的示意图;0025图4是图3中的示例性的间接分支预测逻辑单元的示意图;说明书CN104049938A3/15页60026图5是示例性的间接路径历史的示意图;0027图6是示例性的被采用/不被采用历史的示意图;0028图7是图4中的第一示例性的索引产生器的示意图;0029图8是图4中的第二示例性的索引产生器的示意图;0030图9是用于预测间接分支指令的目标地址的示例性方法的流程图;0031图10是用于更新间接分支预测目标表的示例性方法的流程图;以及0032图11是示例性的多线程处理器的示意图。0033贯穿附图使用共同的。
19、参考数字来表示类似的特征。具体实施方式0034下文中仅仅通过例子的方式来描述本发明的实施例。这些例子表示申请人当前已知的将本发明付诸实践的最佳方式,虽然这些最佳方式并不是可以实现本发明的仅有的方式。本描述给出例子的功能以及用于构造并操作例子的步骤序列。然而,不同的例子可以完成相同的或等价的功能或序列。0035如上面描述的,间接分支(例如,基于变量而不是基于常数值的分支)是难于预测的,这是因为分支预测器必须预测目标将在哪里。目标尤其难于预测,这是因为其通常是基于定期改变的寄存器值的。0036预测间接分支的最常用方式是使用分支目标缓冲器(BTB),其存储间接分支指令的最近的目标地址。现在参考图1,。
20、图1示出了示例性的BTB100。BTB100是存储间接分支指令的预测的目标地址102的表。该表是由间接分支指令的地址(例如,程序计数器(PC)进行索引的。通常,间接分支指令的地址(例如,或其一部分)104用于产生指向BTB表100中的一项的索引。随后输出在该项处存储的预测的目标地址。如果预测的目标地址是有效的,则处理器从预测的目标地址取出下一指令。如果预测的目标地址不是有效的,则暂停取出级,直到流水线确定出实际的目标地址为止。0037在一些情况中,在每次执行间接分支指令之后,对预测的目标地址进行更新。例如,在流水线已经执行了间接分支指令之后,流水线可以向分支预测器提供该间接分支指令之后的指令的。
21、程序计数器。随后,分支预测器可以用接收到的程序计数器来替代BTB100中的预测的目标值。0038在其它情况中,BTB100可以针对每个间接分支指令包括一个两比特的计数器,所述计数器跟踪该间接分支指令的误预测的数目。在这些情况中,仅仅在两个连续的误预测之后才更新预测的目标地址。这种标准BTB的变型有时被称为BTB2BC(分支目标缓冲器两比特计数器)。0039预测间接分支的另一方式是使用两级预测器,在两级预测器中,预测表中的目标地址是由间接分支指令的地址(例如程序计数器)与之前的分支指令的历史信息两者的组合(例如,散列)进行索引的。历史信息提供程序如何到达间接分支指令的路径。历史信息可以是间接路径。
22、历史或被采用/不被采用历史。两级预测器的目的是将分支执行模式映射到分支目标,以允许预测使用过去的行为来增强预测。0040间接路径历史是之前的间接分支指令目标的历史。具体地,间接路径历史包括N个在先的间接分支指令的目标地址(或其一部分),其中N是路径长度。例如,间接路径历史说明书CN104049938A4/15页7可以包括四个在先的间接分支指令的目标地址(例如,PC)的后四个位。最左面的位可以表示历史中的最老的间接分支指令的目标地址,而最右面的位可以表示历史中的最年轻的间接分支指令的目标地址。0041被采用/不被采用历史(其也可以被称为“被采用和不被采用历史”)是之前的条件分支的结果的历史。具体。
23、地,被采用/不被采用历史包括M个在先的条件分支的结果(被采用/不被采用),其中M是路径长度。例如,被采用/不被采用历史可以具有路径长度12,并且12个位中的每一个指示条件分支是被采用还是不被采用。零(“0”)可以指示条件分支不被采用,并且一(“1”)可以指示条件分支被采用。最左面的位可以表示历史中的最老的被采用/不被采用决策,而最右面的位可以表示历史中的最年轻的被采用/不被采用决策。0042现在看到图2,图2示出了示例性的两级分支预测表200。与图1中的BTB100类似,两级分支预测表200是存储间接分支指令的预测的目标地址202的表。然而,表200不是由间接分支指令的地址(例如PC)单独进行。
24、索引的,而是由间接分支指令的地址(例如PC)与间接路径历史的组合进行索引的。通常,间接分支指令的地址(或其一部分)204与间接路径历史206进行组合(例如,进行异或),以产生指向两级分支预测表200中的项的索引。随后输出存储在该项处的预测的目标地址。如果预测的目标地址是有效的,则处理器从预测的目标地址取出下一条指令。如果预测的目标地址不是有效的,那么可以暂停取出级,直到流水线确定出实际的目标地址为止。0043然而,已经识别出与BTB、BTB2BC和两级分支预测相比,通过使用间接路径历史和被采用/不被采用历史的组合来索引预测表中的目标地址,可以实现更好的间接分支预测。具体地,已经识别出间接分支指。
25、令的目标地址不仅取决于在先的间接分支指令,而且还取决于在先的条件分支指令。这是因为是间接历史和条件历史一起指示所采用的到达该间接分支指令的完整路径。相应地,仅仅依赖于一个或另一个将不会提供所采取路径的全景图。0044随后,人们可能会想到将间接路径历史、被采用/不被采用历史和分支指令的地址组合起来将是有益的。然而,这种三元组合易于丧失其关联,这是因为在组合过程中丧失了重要的信息。为了解决这一问题,与当前想法相反,已经出别出间接分支指令的目标地址并不是高度地取决于该间接分支指令的地址,因而在不使用该间接分支指令的地址或仅仅使用其一部分的情况下,可以精确地预测该间接分支指令的目标地址。0045相应地。
26、,在本文中描述的实施例所涉及的方法和分支预测器中,间接分支指令的目标地址是基于间接路径历史和被采用/不被采用历史的组合进行预测的。0046现在参考图3,图3示出了使用间接路径历史和被采用/不被采用历史来预测间接分支指令的目标地址的单线程处理器300。处理器300包括取出级302,其被配置为从程序中(以程序顺序)取出由程序计数器(PC)指示的指令;以及解码和重命名级304,其被布置为对指令进行解释并执行寄存器重命名。0047在指令通过解码和重命名级304之后,其(A)被插入到重排序缓冲器306(ROB)以及(B)被分发到流水线308以便执行。0048重排序缓冲器306是使得指令能够被乱序执行但是。
27、被按序提交的缓冲器。重排序缓冲器306以程序顺序保存被插入到它中的指令,但是ROB306中的指令可以被多个流水说明书CN104049938A5/15页8线308乱序地执行。在一些例子中,可以将乱序缓冲器306形成为环形缓冲器,其具有指向ROB306中的最老指令的头部以及指向ROB306中的最年轻指令的尾部。按程序顺序从重排序缓冲器306输出指令。换句话说,当流水线308已经执行完一条指令时,从ROB306的头部输出该指令,并且将头部递增到ROB306中的下一条指令。将从重排序缓冲器306输出的指令提供给提交级310,提交级310将指令的结果提交给寄存器/存储器。0049处理器300还包括分支预。
28、测器312,其被配置为在已知引起可能流变化的指令(例如分支指令)的情况下,预测程序流将采用哪个方向。分支预测是有用的,这是因为其使得处理器300在获知分支指令的结果之前能够推测性地执行指令。分支预测器312可以与取出级302和/或流水线308进行通信。例如,取出级202可以向分支预测器312提供指示哪些指令是分支指令的信息,并且可以使用来自分支预测器312的信息来确定下次要取出哪条指令;并且流水线308可以向分支预测器312提供指示对程序计数器的更新的信息。0050当分支预测器312正确地预测了程序流时,其改善了处理器300的性能。然而,如果分支预测器312没有正确地预测分支方向,那么将发生误。
29、预测,在程序可以继续之前需要对误预测进行校正。为了校正误预测,丢弃被发送到ROB306的推测性指令,并且取出级302开始从正确的程序分支取出指令。0051分支预测器312包括用于预测间接分支(基于变量的分支指令)的间接分支预测器逻辑单元314和用于预测条件分支(基于常量的分支指令)的条件分支预测器逻辑单元316。0052间接分支预测器逻辑单元314使用之前的间接分支指令的间接分支历史与之前的条件分支指令的被采用/不被采用历史的组合来预测间接分支指令的目标地址。参考图4描述示例性的间接分支预测器逻辑单元314。0053条件分支预测器逻辑单元316使用任意已知的方法来预测条件分支将被采用还是不被采。
30、用。0054现在参考图4,图4示出了图3中的示例性间接分支预测器逻辑单元314。间接分支预测器逻辑单元314使用间接分支历史和被采用/不被采用历史(条件分支结果历史)的组合来预测间接分支指令的目标地址。0055图4中的示例性间接分支预测逻辑单元314包括间接分支预测目标表402,用于存储由间接分支历史和被采用/不被采用历史的组合进行索引的预测的目标地址;与间接分支预测目标表402进行通信的索引产生器404,用于产生间接分支指令的索引;以及与间接分支预测目标表402进行通信的决策逻辑单元406,用于基于由索引产生器404产生的索引所识别的预测的目标地址来预测下一指令的地址(例如,目标地址);以及。
31、与决策逻辑单元406和间接分支预测目标表402进行通信的更新逻辑单元408,用于更新间接分支历史和/或间接分支预测目标表402。0056与图1中的BTB100和图2中的两级分支预测表200类似,间接分支预测目标表402是存储间接分支指令的预测的目标地址410的表。然而,预测的目标地址410并不是由间接分支指令的地址(例如PC)单独地或者由间接分支指令的地址(例如PC)与间接路径历史的组合进行索引的,而是由间接路径历史414与被采用/不被采用历史416的组合进行索引的。0057间接路径历史414是之前的间接分支指令的目标地址(或其一部分)的记录。存储说明书CN104049938A6/15页9在间。
32、接路径历史中的目标地址(或其一部分)的数目被称为路径长度。例如,如果间接路径历史414的路径长度为3,那么间接路径历史记录了三个在先的间接分支指令的目标地址(或其一部分)。路径长度可以是基于间接分支预测目标表402的大小进行选择的。例如,如果间接分支预测目标表402中存在1024个项,那么间接路径历史可以包括10(2101024)位。参考图5描述示例性的间接路径历史414。0058在一些情况中,如图4中所示的,间接分支预测器逻辑单元314产生并存储间接路径历史的两个版本现行的或预测性的间接路径历史414和提交的间接路径历史418。现行的或预测性的间接路径历史414存储最近预测的间接分支指令的预。
33、测的目标地址(或其一部分)。在决策逻辑单元406已经预测出了间接分支指令的目标地址之后,对现行或预测性的间接路径历史414进行更新。相反,提交的间接路径历史418存储最近提交的间接分支指令的实际目标地址(或其一部分)。在更新逻辑单元408从流水线308接收到指示间接分支指令的实际目标地址的信息之后(例如,在已经解析了分支指令之后),对提交的间接路径历史418进行更新。下文参考更新逻辑单元408来进一步详细地描述更新间接路径历史414和418的过程。0059现行的或预测性的间接路径历史414用于预测间接分支指令的目标地址。这允许间接分支预测器逻辑单元314在指令集中看得比被执行的指令更远。使用提。
34、交的间接路径历史418来产生用于更新间接分支预测目标表402的索引。当存在误预测时,提交的间接路径历史418还可以用于修复(例如,覆盖)现行的间接路径历史414。0060在一些情况中,间接路径历史414和418可以被实现成移位寄存器。0061在本文描述的例子中,间接路径历史414和418是全局的,这意味着对于所有的间接分支指令而言,仅仅存在一组间接路径历史414和418。具体地,将所有间接分支指令的目标地址(预测的或实际的)都存储在相同的间接路径历史中。然而,在其它例子中,间接路径历史414和418可以专用于特定的间接分支指令或者专用于一组间接分支指令。例如,如果间接路径历史专用于特定的间接分。
35、支指令,那么它仅仅包括该特定间接分支指令的目标地址(预测的或实际的)。在这些例子中,存在几组间接路径历史414和418(例如,每个特定的间接分支指令有一个间接路径历史,或者每组分支指令有一个间接路径历史),并且存在几个间接分支预测目标表(例如,每个特定的间接分支指令有一个表,或者每组分支指令有一个表)。0062被采用/不被采用历史416是之前的条件分支指令是被采用还是不被采用的记录。存储在被采用/不被采用历史416中的条件分支结果(被采用/不被采用)的数目被称为路径长度。例如,如果被采用/不被采用历史416的路径长度为10,那么被采用/不被采用历史416记录了10个之前的条件分支指令的结果。被。
36、采用/不被采用历史416的路径长度可以是基于间接分支预测目标表402的大小进行选择的。例如,如果在间接分支预测目标表402中存在1024个项,那么被采用/不被采用历史416中的位的数目可以是10(2101024)位。参考图6来描述示例性的被采用/不被采用历史。0063被采用/不被采用历史416通常是由条件分支预测器逻辑单元316产生的。与间接路径历史类似,条件分支预测器逻辑单元316可以产生并存储被采用/不被采用历史的两个版本现行的或预测性的被采用/不被采用历史416和提交的被采用/不被采用历史420。现行的或预测性的被采用/不被采用历史416存储最近预测的条件分支指令的预测说明书CN1040。
37、49938A7/15页10结果(被采用/不被采用)。现行的或预测性的被采用/不被采用历史416是在条件分支指令逻辑单元316已经预测出分支将被采用还是不被采用之后进行更新的。相反,提交的被采用/不被采用历史420存储了最近提交的条件分支指令的实际结果(被采用/不被采用)。提交的间接路径历史420是在条件分支预测逻辑单元316从流水线308接收到指示条件分支实际上被采用还是不被采用的信息之后进行更新的。0064现行的或预测性的被采用/不被采用历史416用于预测间接分支指令的目标地址。这允许间接分支预测器逻辑单元314在指令集中看得比被执行的指令更远。提交的被采用/不被采用历史420用于更新间接分。
38、支预测目标表402。当存在误预测时,提交的被采用/不被采用历史420还可以用于修复现行的被采用/不被采用历史416(例如,覆盖其一部分)。0065在一些情况中,被采用/不被采用历史416和420可以被实现为移位寄存器。0066在本文描述的例子中,被采用/不被采用历史416和420是全局的,这意味着对于所有的条件接分支指令而言,仅仅存在一组被采用/不被采用历史416和420。具体地,将所有条件分支指令的结果都存储在相同的被采用/不被采用历史中。然而,在其它例子中,被采用/不被采用历史416和420可以专用于特定的条件分支指令或者专用于一组条件分支指令。在这些例子中,存在几组被采用/不被采用历史,。
39、每个特定的条件分支指令有一个被采用/不被采用历史,或者每组条件分支指令有一个被采用/不被采用历史。在每个特定的条件分支指令存在一个被采用/不被采用历史或者每组条件分支指令存在一个被采用/不被采用历史的情况下,间接分支指令的地址(或其一部分)可以用于选择使用哪些被采用/不被采用历史来产生索引。0067间接路径历史414或418与被采用/不被采用历史416或420可以以任意适当的方式进行组合以产生索引。在一些情况中,在间接路径历史414或418的多个位和被采用/不被采用历史416或420的多个位上执行散列函数。例如,可以在间接路径历史414或418和被采用/不被采用历史416或418上执行逐位异或。
40、(XOR)函数,其中,间接路径历史414或418的每个位与被采用/不被采用历史416或420的相应位进行XOR。0068对于本领域技术人员而言显而易见的是,也可以使用其它组合和/或散列函数。例如,散列函数可以从一个历史中选择一些位,从另一个历史中选择一些位,并在所选的位上执行XOR运算;或者散列函数可以以不同的顺序对历史的位进行XOR。0069索引产生器404负责产生从取出级302接收到的间接分支指令的索引。例如,索引产生器404可以从取出级302接收标识程序中的间接分支指令的信息。在一些情况中,标识间接分支指令的信息是间接分支指令的地址(程序计数器)。索引产生器404随后获得现行的间接路径历。
41、史414和现行的被采用/不被采用历史416,并将它们组合以产生间接分支指令的索引。如上面所描述的,现行的间接路径历史414和现行的被采用/不被采用历史416可以以任意适当的方式(例如,逐位XOR)进行组合。0070在一些情况中,索引产生器404可以在将现行的间接路径历史414和现行的被采用/不被采用历史416组合以产生索引之前将这些历史中的一个修改为包括间接分支指令的地址(或其一部分)。例如,索引产生器404可以将间接分支指令的地址的后四位附到现行的被采用/不被采用历史416,之后将其与现行的间接路径历史414进行组合。在另一个例子中,索引产生器404可以用间接分支指令的地址的后四位替代现行的。
42、被采用/不被采说明书CN104049938A108/15页11用历史416的前四位,之后将其与现行的间接路径历史414进行组合。0071一旦索引产生器404已经产生了间接分支指令的索引,其就可以用于识别间接分支预测目标表402中的特定项。在一些情况中,该索引将仅仅识别间接分支预测目标表402中的一项。例如,在间接分支预测目标表402中存在2X个项(例如行)并且在索引中存在X位的情况下,可以发生这种情况。0072在其它情况中,索引可以识别表中的多于一个的项。例如,在间接分支预测目标表402中存在2X个项(例如行)并且在索引中存在少于X个的位的情况下,可以发生这种情况。在这些情况中,间接分支预测目。
43、标表402可以包括额外的标签列(未示出),其用于唯一地识别特定项。标签可以是间接分支指令的地址(或其一部分)。在这些情况中,当索引识别了间接分支预测目标表402中的多于一个的项时,可以将每一个所识别的项的标签与间接分支指令的地址(或其一部分)进行比较,以确定是否存在匹配。如果存在匹配,那么选择匹配的项。如果不存在匹配,那么可以认为对于该索引不存在有效的预测的目标地址。0073将索引所识别的项中的预测的目标地址提供给决策逻辑单元406,决策逻辑单元406确定接收到的预测的目标地址是否是有效的。如果对于特定的索引尚未产生预测的目标地址(例如,对于该项尚未发生更新),或者在使用标签列并且并不存在具有。
44、匹配标签的项的情况下,那么特定的预测的目标地址可能不是有效的。如果决策逻辑单元406确定预测的目标地址是有效的,那么决策逻辑单元406预测间接分支指令的目标地址是该预测的目标地址。决策逻辑单元406随后向取出级302发送取出级应当从预测的目标地址取出下一指令的指示。然而,如果决策逻辑单元406确定预测的目标地址不是有效的,那么其可以向取出级302发送暂停直到流水线308已经确定出实际目标地址为止的指示。0074决策逻辑单元406还向更新逻辑单元408提供任意有效的预测的目标地址。更新逻辑单元408随后更新现行的间接路径历史414,以指示最近预测的目标地址是从决策逻辑单元406接收到的预测的目标。
45、地址。在现行的间接路径历史414被实现成移位寄存器的情况下,这可以包括将寄存器中的位移位预定数量的位,以及将接收到的预测的地址(或其一部分)插入空闲位中。0075更新逻辑单元408还被配置为当已经执行了并提交了间接分支预测时,从流水线308接收信息。该信息可以包括间接分支指令的地址(例如,程序计数器)和实际目标地址(例如,对程序计数器的更新)。在从流水线308接收到关于特定间接分支指令的信息之后,更新逻辑单元408可以被配置为(A)更新间接分支预测目标地址表402,以反映实际目标地址;(B)更新提交的间接路径历史418;和/或(C)如果接收到的信息指示存在误预测,则校正现行的间接路径历史414。
46、。0076更新间接分支预测目标表402可以包括以与索引产生器404相同的方式来根据提交的间接路径历史418和提交的被采用/不被采用历史420产生索引。如上面所描述的,可以以任何适当的方式组合这些历史,以产生索引。在一些情况中,在提交的间接路径历史418的多个位和提交的被采用/不被采用历史420的多个位上执行散列函数。例如,可以在提交的间接路径历史418和提交的被采用/不被采用历史420上执行逐位异或(XOR)函数,其中提交的间接路径历史418的每个位与提交的被采用/不被采用历史420的相应位进行XOR。0077一旦产生了索引,就可以使用索引来识别间接分支预测目标地址表402中的项说明书CN10。
47、4049938A119/15页12(即行)。在一些情况中,随后用从流水线308接收到的实际目标地址来替换所识别的项中的预测的目标地址。在其它情况中,仅仅在所识别的项已经引起了预定数量的误预测之后,才用实际目标地址替换该项中的预测的目标地址。例如,间接分支预测目标表402可以针对每个项包括一个两位的计数器(未示出),其跟踪该项所引起的误预测的数目。只有在两位的计数器指示该项例如已经引起了两个连续的误预测时,更新逻辑单元408随后才可以用实际目标地址替换预测的目标地址。0078参考图10描述用于更新间接分支预测目标表402的示例性方法,该方法可以由更新逻辑单元408来执行。0079更新提交的间接路。
48、径历史418可以包括更新历史418以指示最近执行的间接分支指令的目标地址是从流水线308接收到的实际目标地址。在提交的间接路径历史418被实现为移位寄存器的情况下,这可以包括将寄存器中的位移位预定数量的位,以及将实际的目标地址(或其一部分)插入寄存器的空闲位。0080校正现行的间接路径历史可以包括首先确定从流水线308接收到的信息是否指示存在误预测。确定从流水线308接收到的信息是否指示存在误预测可以包括将从流水线308接收到的实际目标地址与流水线308所识别的记录在指令表422中的间接分支指令的预测的目标地址进行比较。如果预测的目标地址和实际目标地址不匹配,那么存在误预测。如果存在误预测,那。
49、么更新逻辑单元408用提交的间接路径历史418替换现行的间接路径历史414。虽然提交的间接路径历史418在现行的间接路径历史416“之后”(即,它不包括间接分支指令的已经被预测的但是未被提交的目标地址(或其一部分),但是误预测引起指令回绕到误预测的指令,从而在误预测之后进行的预测变得无意义,并且被丢弃。0081可以使用任意适当的硬件来实现间接分支预测目标表402、索引产生器404、决策逻辑单元406、更新逻辑单元408、现行的间接路径历史414和提交的间接路径历史418。0082现在参考图5,图5示出了示例性的现行的间接路径历史414。如上面所描述的,现行的间接路径历史414是之前预测的间接分支指令的N个目标地址(或其一部分)的记录,其中N是路径长度。例如,如果N是5,那么间接路径历史记录了5个最近预测的间接分支指令的目标地址(或其一部分)。0083图5中的示例性的现行的间接路径历史414的为12位长,并且路径历史N为3。相应地,现行的间接路径历史414记录了三个最近预测的间接分支指令的目标地址的四位。在一些情况中,存储的是目标地址的后四位。在其它情况中,存储的可以是目标地址的其它位。对本领域技术人员将显而易见的是,间接路径历史可以包括更多或更少的位,可以具有更高或更低的路径长度(N),并且可以存储目标地址的更多或更少的位。0084在该例子中,将现行的间接路径历史414划分成三。