间接分支预测的制作方法

文档序号:11432084阅读:187来源:国知局
间接分支预测的制造方法与工艺

本申请是申请日为2014年3月13日并且申请号为201410092214.6的中国专利申请的分案申请。



背景技术:

许多处理器包括分支预测器,在已知的引起可能的流变化的指令(例如分支指令)的情况下,分支预测器预测程序流将采取哪个方向。分支预测是有用的,这是因为其使得处理器能够在获知分支指令的结果之前推测性地执行指令。

可以将分支指令分类为条件分支指令或间接分支指令。条件分支指令(基于常数值的分支指令)需要对采取分支还是不采取分支进行二元决策。间接分支指令(基于变量的分支指令)需要对目标地址进行n元决策,其中n是可能的目标地址的数目。相应地,与条件分支相比,间接分支更难以预测。因此,许多分支预测器不能精确地预测间接分支指令。

这一问题的一个解决方案是改善分支预测器所使用的间接分支预测算法。然而,这通常是相当困难的且费时的。

下文描述的实施例并不限于解决已知处理器的任意或全部缺点的实现方式。



技术实现要素:

提供该发明内容部分以便以简化的形式介绍构思的精华,在下文中在具体实施方式中将一步描述这些构思。该发明内容部分并不旨在标识要求保护的主题的关键特征或必要特征,也不旨在用作辅助确定要求保护的主题的范围。

本文描述了用于预测间接分支指令的目标地址的方法和间接分支预测器逻辑单元。所述方法包括:将间接分支指令的预测的目标地址存储在一表中,所述预测的目标地址是由之前的间接分支指令目标的间接路径历史和之前的条件分支指令的被采用/不被采用历史的组合进行索引的。当接收到新的间接分支指令进行预测时,所述间接路径历史和所述被采用/不被采用历史被组合以产生该间接分支指令的索引。所产生的索引随后用于识别所述表中的预测的目标地址。如果所识别的预测的目标地址是有效的,那么所述间接分支指令的目标地址被预测为是所述预测的目标地址。

第一方案提供了一种用于预测处理器所执行的程序中的间接分支指令的目标地址的方法,所述方法包括:将间接分支指令的多个预测的目标地址存储在间接分支预测目标表中,每个预测的目标地址是由间接路径历史与被采用和不被采用历史的组合进行索引的;在索引产生器处,接收标识间接分支指令的信息;在所述索引产生器处,获取间接路径历史以及被采用和不被采用历史;在所述索引产生器处,对所述间接路径历史与所述被采用和不被采用历史进行组合,以产生所标识的间接分支指令的索引;使用所标识的间接分支指令的索引来识别所述间接分支预测目标表中的预测的目标地址;如果所识别的预测的目标地址是有效的,则预测所标识的间接分支指令的目标地址是所识别的预测的目标地址。

第二方案提供了一种用于预测处理器所执行的程序中的间接分支指令的目标地址的间接分支预测器逻辑单元,所述间接分支预测器逻辑单元包括:间接分支预测目标表,其被配置为存储间接分支指令的多个预测的目标地址,每个预测的目标地址是由间接路径历史与被采用和不被采用历史的组合进行索引的;与所述间接分支预测目标表进行通信的索引产生器,所述索引产生器被配置为:接收标识间接分支指令的信息;获取间接路径历史以及被采用和不被采用历史;将所述间接路径历史与所述被采用和不被采用历史进行组合,以产生所标识的间接分支指令的索引;以及与所述间接分支预测目标表进行通信的决策逻辑单元,所述决策逻辑单元被配置为:使用所标识的间接分支的索引来识别所述间接分支预测目标表中的预测的目标地址;如果所识别的预测的目标地址是有效的,则预测所标识的间接分支指令的目标地址为所识别的预测的目标地址。

第三方案提供了一种处理器,其包括第二方案的间接分支预测器逻辑单元。

第四方案提供了一种计算机可读存储介质,其上编码有计算机可读程序代码,用于产生包括第二方案的间接分支预测器逻辑单元的处理器。

第五方案提供了一种计算机可读存储介质,其上编码有计算机可读程序代码,用于产生被配置为执行第一方案的方法的处理器。

第六方案提供了一种基本上如参考图3所描述的那样的处理器。

第七方案提供了基本上如参考图4所描述的那样的间接分支预测器逻辑单元。

第八方案提供了一种基本上如参考图9所描述的那样的用于预测间接分支指令的目标地址的方法。

第九方案提供了一种基本上如参考图10所描述的那样的用于更新间接分支预测表的方法。

第十方案提供了一种基本上如参考图11所描述的那样的多线程处理器。

本文中所描述的方法可以被有形存储介质上的机器可读形式的软件执行,例如计算机程序的形式,所述计算机程序包括:当该程序在计算机上运行时以及在该计算机程序可以实现在计算机可读存储介质上时适合于执行本文描述的任意方法的所有步骤的计算机可读程序代码模块。有形(或非暂时性)存储介质的例子包括磁盘、拇指驱动器、存储卡等,但不包括传播信号。软件可以适合于在并行处理器或串行处理器上执行,使得可以以任意合适的顺序或同时地执行方法步骤。

本文中所描述的硬件组件可以由其上编码有计算机可读程序代码的计算机可读存储介质产生。

本申请承认固件和软件可以是有价值的、可单独交易的商品。本申请旨在涵盖在“哑”或标准硬件上运行或对其进行控制的、用于执行期望功能的软件。本申请还旨在涵盖“描述”或定义硬件配置的、用于设计硅芯片或用于配置通用可编程芯片以执行期望功能的软件,例如hdl(硬件描述语言)软件。

优选的特征可以适当地组合(这对于技术人员将是显而易见的),并且可以与本发明的任意方案进行组合。

附图说明

将参考以下附图通过例子的方式来描述本发明的实施例,在附图中:

图1是示例性的已知分支目标缓冲器表的示意图;

图2是示例性的已知两级分支预测表的示意图;

图3是示例性的单线程处理器的示意图;

图4是图3中的示例性的间接分支预测逻辑单元的示意图;

图5是示例性的间接路径历史的示意图;

图6是示例性的被采用/不被采用历史的示意图;

图7是图4中的第一示例性的索引产生器的示意图;

图8是图4中的第二示例性的索引产生器的示意图;

图9是用于预测间接分支指令的目标地址的示例性方法的流程图;

图10是用于更新间接分支预测目标表的示例性方法的流程图;以及

图11是示例性的多线程处理器的示意图。

贯穿附图使用共同的参考数字来表示类似的特征。

具体实施方式

下文中仅仅通过例子的方式来描述本发明的实施例。这些例子表示申请人当前已知的将本发明付诸实践的最佳方式,虽然这些最佳方式并不是可以实现本发明的仅有的方式。本描述给出例子的功能以及用于构造并操作例子的步骤序列。然而,不同的例子可以完成相同的或等价的功能或序列。

如上面描述的,间接分支(例如,基于变量而不是基于常数值的分支)是难于预测的,这是因为分支预测器必须预测目标将在哪里。目标尤其难于预测,这是因为其通常是基于定期改变的寄存器值的。

预测间接分支的最常用方式是使用分支目标缓冲器(btb),其存储间接分支指令的最近的目标地址。现在参考图1,图1示出了示例性的btb100。btb100是存储间接分支指令的预测的目标地址102的表。该表是由间接分支指令的地址(例如,程序计数器(pc))进行索引的。通常,间接分支指令的地址(例如,或其一部分)104用于产生指向btb表100中的一项的索引。随后输出在该项处存储的预测的目标地址。如果预测的目标地址是有效的,则处理器从预测的目标地址取出下一指令。如果预测的目标地址不是有效的,则暂停取出级,直到流水线确定出实际的目标地址为止。

在一些情况中,在每次执行间接分支指令之后,对预测的目标地址进行更新。例如,在流水线已经执行了间接分支指令之后,流水线可以向分支预测器提供该间接分支指令之后的指令的程序计数器。随后,分支预测器可以用接收到的程序计数器来替代btb100中的预测的目标值。

在其它情况中,btb100可以针对每个间接分支指令包括一个两比特的计数器,所述计数器跟踪该间接分支指令的误预测的数目。在这些情况中,仅仅在两个连续的误预测之后才更新预测的目标地址。这种标准btb的变型有时被称为btb-2bc(分支目标缓冲器—两比特计数器)。

预测间接分支的另一方式是使用两级预测器,在两级预测器中,预测表中的目标地址是由间接分支指令的地址(例如程序计数器)与之前的分支指令的历史信息两者的组合(例如,散列)进行索引的。历史信息提供程序如何到达间接分支指令的路径。历史信息可以是间接路径历史或被采用/不被采用历史。两级预测器的目的是将分支执行模式映射到分支目标,以允许预测使用过去的行为来增强预测。

间接路径历史是之前的间接分支指令目标的历史。具体地,间接路径历史包括n个在先的间接分支指令的目标地址(或其一部分),其中n是路径长度。例如,间接路径历史可以包括四个在先的间接分支指令的目标地址(例如,pc)的后四个位。最左面的位可以表示历史中的最老的间接分支指令的目标地址,而最右面的位可以表示历史中的最年轻的间接分支指令的目标地址。

被采用/不被采用历史(其也可以被称为“被采用和不被采用历史”)是之前的条件分支的结果的历史。具体地,被采用/不被采用历史包括m个在先的条件分支的结果(被采用/不被采用),其中m是路径长度。例如,被采用/不被采用历史可以具有路径长度12,并且12个位中的每一个指示条件分支是被采用还是不被采用。零(“0”)可以指示条件分支不被采用,并且一(“1”)可以指示条件分支被采用。最左面的位可以表示历史中的最老的被采用/不被采用决策,而最右面的位可以表示历史中的最年轻的被采用/不被采用决策。

现在看到图2,图2示出了示例性的两级分支预测表200。与图1中的btb100类似,两级分支预测表200是存储间接分支指令的预测的目标地址202的表。然而,表200不是由间接分支指令的地址(例如pc)单独进行索引的,而是由间接分支指令的地址(例如pc)与间接路径历史的组合进行索引的。通常,间接分支指令的地址(或其一部分)204与间接路径历史206进行组合(例如,进行异或),以产生指向两级分支预测表200中的项的索引。随后输出存储在该项处的预测的目标地址。如果预测的目标地址是有效的,则处理器从预测的目标地址取出下一条指令。如果预测的目标地址不是有效的,那么可以暂停取出级,直到流水线确定出实际的目标地址为止。

然而,已经识别出:与btb、btb-2bc和两级分支预测相比,通过使用间接路径历史和被采用/不被采用历史的组合来索引预测表中的目标地址,可以实现更好的间接分支预测。具体地,已经识别出:间接分支指令的目标地址不仅取决于在先的间接分支指令,而且还取决于在先的条件分支指令。这是因为是间接历史和条件历史一起指示所采用的到达该间接分支指令的完整路径。相应地,仅仅依赖于一个或另一个将不会提供所采取路径的全景图。

随后,人们可能会想到将间接路径历史、被采用/不被采用历史和分支指令的地址组合起来将是有益的。然而,这种三元组合易于丧失其关联,这是因为在组合过程中丧失了重要的信息。为了解决这一问题,与当前想法相反,已经出别出:间接分支指令的目标地址并不是高度地取决于该间接分支指令的地址,因而在不使用该间接分支指令的地址或仅仅使用其一部分的情况下,可以精确地预测该间接分支指令的目标地址。

相应地,在本文中描述的实施例所涉及的方法和分支预测器中,间接分支指令的目标地址是基于间接路径历史和被采用/不被采用历史的组合进行预测的。

现在参考图3,图3示出了使用间接路径历史和被采用/不被采用历史来预测间接分支指令的目标地址的单线程处理器300。处理器300包括:取出级302,其被配置为从程序中(以程序顺序)取出由程序计数器(pc)指示的指令;以及解码和重命名级304,其被布置为对指令进行解释并执行寄存器重命名。

在指令通过解码和重命名级304之后,其(a)被插入到重排序缓冲器306(rob)以及(b)被分发到流水线308以便执行。

重排序缓冲器306是使得指令能够被乱序执行但是被按序提交的缓冲器。重排序缓冲器306以程序顺序保存被插入到它中的指令,但是rob306中的指令可以被多个流水线308乱序地执行。在一些例子中,可以将乱序缓冲器306形成为环形缓冲器,其具有指向rob306中的最老指令的头部以及指向rob306中的最年轻指令的尾部。按程序顺序从重排序缓冲器306输出指令。换句话说,当流水线308已经执行完一条指令时,从rob306的头部输出该指令,并且将头部递增到rob306中的下一条指令。将从重排序缓冲器306输出的指令提供给提交级310,提交级310将指令的结果提交给寄存器/存储器。

处理器300还包括分支预测器312,其被配置为:在已知引起可能流变化的指令(例如分支指令)的情况下,预测程序流将采用哪个方向。分支预测是有用的,这是因为其使得处理器300在获知分支指令的结果之前能够推测性地执行指令。分支预测器312可以与取出级302和/或流水线308进行通信。例如,取出级202可以向分支预测器312提供指示哪些指令是分支指令的信息,并且可以使用来自分支预测器312的信息来确定下次要取出哪条指令;并且流水线308可以向分支预测器312提供指示对程序计数器的更新的信息。

当分支预测器312正确地预测了程序流时,其改善了处理器300的性能。然而,如果分支预测器312没有正确地预测分支方向,那么将发生误预测,在程序可以继续之前需要对误预测进行校正。为了校正误预测,丢弃被发送到rob306的推测性指令,并且取出级302开始从正确的程序分支取出指令。

分支预测器312包括用于预测间接分支(基于变量的分支指令)的间接分支预测器逻辑单元314和用于预测条件分支(基于常量的分支指令)的条件分支预测器逻辑单元316。

间接分支预测器逻辑单元314使用之前的间接分支指令的间接分支历史与之前的条件分支指令的被采用/不被采用历史的组合来预测间接分支指令的目标地址。参考图4描述示例性的间接分支预测器逻辑单元314。

条件分支预测器逻辑单元316使用任意已知的方法来预测条件分支将被采用还是不被采用。

现在参考图4,图4示出了图3中的示例性间接分支预测器逻辑单元314。间接分支预测器逻辑单元314使用间接分支历史和被采用/不被采用历史(条件分支结果历史)的组合来预测间接分支指令的目标地址。

图4中的示例性间接分支预测逻辑单元314包括:间接分支预测目标表402,用于存储由间接分支历史和被采用/不被采用历史的组合进行索引的预测的目标地址;与间接分支预测目标表402进行通信的索引产生器404,用于产生间接分支指令的索引;以及与间接分支预测目标表402进行通信的决策逻辑单元406,用于基于由索引产生器404产生的索引所识别的预测的目标地址来预测下一指令的地址(例如,目标地址);以及与决策逻辑单元406和间接分支预测目标表402进行通信的更新逻辑单元408,用于更新间接分支历史和/或间接分支预测目标表402。

与图1中的btb100和图2中的两级分支预测表200类似,间接分支预测目标表402是存储间接分支指令的预测的目标地址410的表。然而,预测的目标地址410并不是由间接分支指令的地址(例如pc)单独地或者由间接分支指令的地址(例如pc)与间接路径历史的组合进行索引的,而是由间接路径历史414与被采用/不被采用历史416的组合进行索引的。

间接路径历史414是之前的间接分支指令的目标地址(或其一部分)的记录。存储在间接路径历史中的目标地址(或其一部分)的数目被称为路径长度。例如,如果间接路径历史414的路径长度为3,那么间接路径历史记录了三个在先的间接分支指令的目标地址(或其一部分)。路径长度可以是基于间接分支预测目标表402的大小进行选择的。例如,如果间接分支预测目标表402中存在1024个项,那么间接路径历史可以包括10(210=1024)位。参考图5描述示例性的间接路径历史414。

在一些情况中,如图4中所示的,间接分支预测器逻辑单元314产生并存储间接路径历史的两个版本—现行的或预测性的间接路径历史414和提交的间接路径历史418。现行的或预测性的间接路径历史414存储最近预测的间接分支指令的预测的目标地址(或其一部分)。在决策逻辑单元406已经预测出了间接分支指令的目标地址之后,对现行或预测性的间接路径历史414进行更新。相反,提交的间接路径历史418存储最近提交的间接分支指令的实际目标地址(或其一部分)。在更新逻辑单元408从流水线308接收到指示间接分支指令的实际目标地址的信息之后(例如,在已经解析了分支指令之后),对提交的间接路径历史418进行更新。下文参考更新逻辑单元408来进一步详细地描述更新间接路径历史414和418的过程。

现行的或预测性的间接路径历史414用于预测间接分支指令的目标地址。这允许间接分支预测器逻辑单元314在指令集中看得比被执行的指令更远。使用提交的间接路径历史418来产生用于更新间接分支预测目标表402的索引。当存在误预测时,提交的间接路径历史418还可以用于修复(例如,覆盖)现行的间接路径历史414。

在一些情况中,间接路径历史414和418可以被实现成移位寄存器。

在本文描述的例子中,间接路径历史414和418是全局的,这意味着对于所有的间接分支指令而言,仅仅存在一组间接路径历史414和418。具体地,将所有间接分支指令的目标地址(预测的或实际的)都存储在相同的间接路径历史中。然而,在其它例子中,间接路径历史414和418可以专用于特定的间接分支指令或者专用于一组间接分支指令。例如,如果间接路径历史专用于特定的间接分支指令,那么它仅仅包括该特定间接分支指令的目标地址(预测的或实际的)。在这些例子中,存在几组间接路径历史414和418(例如,每个特定的间接分支指令有一个间接路径历史,或者每组分支指令有一个间接路径历史),并且存在几个间接分支预测目标表(例如,每个特定的间接分支指令有一个表,或者每组分支指令有一个表)。

被采用/不被采用历史416是之前的条件分支指令是被采用还是不被采用的记录。存储在被采用/不被采用历史416中的条件分支结果(被采用/不被采用)的数目被称为路径长度。例如,如果被采用/不被采用历史416的路径长度为10,那么被采用/不被采用历史416记录了10个之前的条件分支指令的结果。被采用/不被采用历史416的路径长度可以是基于间接分支预测目标表402的大小进行选择的。例如,如果在间接分支预测目标表402中存在1024个项,那么被采用/不被采用历史416中的位的数目可以是10(210=1024)位。参考图6来描述示例性的被采用/不被采用历史。

被采用/不被采用历史416通常是由条件分支预测器逻辑单元316产生的。与间接路径历史类似,条件分支预测器逻辑单元316可以产生并存储被采用/不被采用历史的两个版本—现行的或预测性的被采用/不被采用历史416和提交的被采用/不被采用历史420。现行的或预测性的被采用/不被采用历史416存储最近预测的条件分支指令的预测结果(被采用/不被采用)。现行的或预测性的被采用/不被采用历史416是在条件分支指令逻辑单元316已经预测出分支将被采用还是不被采用之后进行更新的。相反,提交的被采用/不被采用历史420存储了最近提交的条件分支指令的实际结果(被采用/不被采用)。提交的间接路径历史420是在条件分支预测逻辑单元316从流水线308接收到指示条件分支实际上被采用还是不被采用的信息之后进行更新的。

现行的或预测性的被采用/不被采用历史416用于预测间接分支指令的目标地址。这允许间接分支预测器逻辑单元314在指令集中看得比被执行的指令更远。提交的被采用/不被采用历史420用于更新间接分支预测目标表402。当存在误预测时,提交的被采用/不被采用历史420还可以用于修复现行的被采用/不被采用历史416(例如,覆盖其一部分)。

在一些情况中,被采用/不被采用历史416和420可以被实现为移位寄存器。

在本文描述的例子中,被采用/不被采用历史416和420是全局的,这意味着对于所有的条件接分支指令而言,仅仅存在一组被采用/不被采用历史416和420。具体地,将所有条件分支指令的结果都存储在相同的被采用/不被采用历史中。然而,在其它例子中,被采用/不被采用历史416和420可以专用于特定的条件分支指令或者专用于一组条件分支指令。在这些例子中,存在几组被采用/不被采用历史,每个特定的条件分支指令有一个被采用/不被采用历史,或者每组条件分支指令有一个被采用/不被采用历史。在每个特定的条件分支指令存在一个被采用/不被采用历史或者每组条件分支指令存在一个被采用/不被采用历史的情况下,间接分支指令的地址(或其一部分)可以用于选择使用哪些被采用/不被采用历史来产生索引。

间接路径历史414或418与被采用/不被采用历史416或420可以以任意适当的方式进行组合以产生索引。在一些情况中,在间接路径历史414或418的多个位和被采用/不被采用历史416或420的多个位上执行散列函数。例如,可以在间接路径历史414或418和被采用/不被采用历史416或418上执行逐位异或(xor)函数,其中,间接路径历史414或418的每个位与被采用/不被采用历史416或420的相应位进行xor。

对于本领域技术人员而言显而易见的是,也可以使用其它组合和/或散列函数。例如,散列函数可以从一个历史中选择一些位,从另一个历史中选择一些位,并在所选的位上执行xor运算;或者散列函数可以以不同的顺序对历史的位进行xor。

索引产生器404负责产生从取出级302接收到的间接分支指令的索引。例如,索引产生器404可以从取出级302接收标识程序中的间接分支指令的信息。在一些情况中,标识间接分支指令的信息是间接分支指令的地址(程序计数器)。索引产生器404随后获得现行的间接路径历史414和现行的被采用/不被采用历史416,并将它们组合以产生间接分支指令的索引。如上面所描述的,现行的间接路径历史414和现行的被采用/不被采用历史416可以以任意适当的方式(例如,逐位xor)进行组合。

在一些情况中,索引产生器404可以在将现行的间接路径历史414和现行的被采用/不被采用历史416组合以产生索引之前将这些历史中的一个修改为包括间接分支指令的地址(或其一部分)。例如,索引产生器404可以将间接分支指令的地址的后四位附到现行的被采用/不被采用历史416,之后将其与现行的间接路径历史414进行组合。在另一个例子中,索引产生器404可以用间接分支指令的地址的后四位替代现行的被采用/不被采用历史416的前四位,之后将其与现行的间接路径历史414进行组合。

一旦索引产生器404已经产生了间接分支指令的索引,其就可以用于识别间接分支预测目标表402中的特定项。在一些情况中,该索引将仅仅识别间接分支预测目标表402中的一项。例如,在间接分支预测目标表402中存在2x个项(例如行)并且在索引中存在x位的情况下,可以发生这种情况。

在其它情况中,索引可以识别表中的多于一个的项。例如,在间接分支预测目标表402中存在2x个项(例如行)并且在索引中存在少于x个的位的情况下,可以发生这种情况。在这些情况中,间接分支预测目标表402可以包括额外的标签列(未示出),其用于唯一地识别特定项。标签可以是间接分支指令的地址(或其一部分)。在这些情况中,当索引识别了间接分支预测目标表402中的多于一个的项时,可以将每一个所识别的项的标签与间接分支指令的地址(或其一部分)进行比较,以确定是否存在匹配。如果存在匹配,那么选择匹配的项。如果不存在匹配,那么可以认为对于该索引不存在有效的预测的目标地址。

将索引所识别的项中的预测的目标地址提供给决策逻辑单元406,决策逻辑单元406确定接收到的预测的目标地址是否是有效的。如果对于特定的索引尚未产生预测的目标地址(例如,对于该项尚未发生更新),或者在使用标签列并且并不存在具有匹配标签的项的情况下,那么特定的预测的目标地址可能不是有效的。如果决策逻辑单元406确定预测的目标地址是有效的,那么决策逻辑单元406预测间接分支指令的目标地址是该预测的目标地址。决策逻辑单元406随后向取出级302发送取出级应当从预测的目标地址取出下一指令的指示。然而,如果决策逻辑单元406确定预测的目标地址不是有效的,那么其可以向取出级302发送暂停直到流水线308已经确定出实际目标地址为止的指示。

决策逻辑单元406还向更新逻辑单元408提供任意有效的预测的目标地址。更新逻辑单元408随后更新现行的间接路径历史414,以指示最近预测的目标地址是从决策逻辑单元406接收到的预测的目标地址。在现行的间接路径历史414被实现成移位寄存器的情况下,这可以包括将寄存器中的位移位预定数量的位,以及将接收到的预测的地址(或其一部分)插入空闲位中。

更新逻辑单元408还被配置为:当已经执行了并提交了间接分支预测时,从流水线308接收信息。该信息可以包括间接分支指令的地址(例如,程序计数器)和实际目标地址(例如,对程序计数器的更新)。在从流水线308接收到关于特定间接分支指令的信息之后,更新逻辑单元408可以被配置为:(a)更新间接分支预测目标地址表402,以反映实际目标地址;(b)更新提交的间接路径历史418;和/或(c)如果接收到的信息指示存在误预测,则校正现行的间接路径历史414。

更新间接分支预测目标表402可以包括:以与索引产生器404相同的方式来根据提交的间接路径历史418和提交的被采用/不被采用历史420产生索引。如上面所描述的,可以以任何适当的方式组合这些历史,以产生索引。在一些情况中,在提交的间接路径历史418的多个位和提交的被采用/不被采用历史420的多个位上执行散列函数。例如,可以在提交的间接路径历史418和提交的被采用/不被采用历史420上执行逐位异或(xor)函数,其中提交的间接路径历史418的每个位与提交的被采用/不被采用历史420的相应位进行xor。

一旦产生了索引,就可以使用索引来识别间接分支预测目标地址表402中的项(即行)。在一些情况中,随后用从流水线308接收到的实际目标地址来替换所识别的项中的预测的目标地址。在其它情况中,仅仅在所识别的项已经引起了预定数量的误预测之后,才用实际目标地址替换该项中的预测的目标地址。例如,间接分支预测目标表402可以针对每个项包括一个两位的计数器(未示出),其跟踪该项所引起的误预测的数目。只有在两位的计数器指示该项例如已经引起了两个连续的误预测时,更新逻辑单元408随后才可以用实际目标地址替换预测的目标地址。

参考图10描述用于更新间接分支预测目标表402的示例性方法,该方法可以由更新逻辑单元408来执行。

更新提交的间接路径历史418可以包括更新历史418以指示最近执行的间接分支指令的目标地址是从流水线308接收到的实际目标地址。在提交的间接路径历史418被实现为移位寄存器的情况下,这可以包括将寄存器中的位移位预定数量的位,以及将实际的目标地址(或其一部分)插入寄存器的空闲位。

校正现行的间接路径历史可以包括:首先确定从流水线308接收到的信息是否指示存在误预测。确定从流水线308接收到的信息是否指示存在误预测可以包括:将从流水线308接收到的实际目标地址与流水线308所识别的记录在指令表422中的间接分支指令的预测的目标地址进行比较。如果预测的目标地址和实际目标地址不匹配,那么存在误预测。如果存在误预测,那么更新逻辑单元408用提交的间接路径历史418替换现行的间接路径历史414。虽然提交的间接路径历史418在现行的间接路径历史416“之后”(即,它不包括间接分支指令的已经被预测的但是未被提交的目标地址(或其一部分)),但是误预测引起指令回绕到误预测的指令,从而在误预测之后进行的预测变得无意义,并且被丢弃。

可以使用任意适当的硬件来实现间接分支预测目标表402、索引产生器404、决策逻辑单元406、更新逻辑单元408、现行的间接路径历史414和提交的间接路径历史418。

现在参考图5,图5示出了示例性的现行的间接路径历史414。如上面所描述的,现行的间接路径历史414是之前预测的间接分支指令的n个目标地址(或其一部分)的记录,其中n是路径长度。例如,如果n是5,那么间接路径历史记录了5个最近预测的间接分支指令的目标地址(或其一部分)。

图5中的示例性的现行的间接路径历史414的为12位长,并且路径历史n为3。相应地,现行的间接路径历史414记录了三个最近预测的间接分支指令的目标地址的四位。在一些情况中,存储的是目标地址的后四位。在其它情况中,存储的可以是目标地址的其它位。对本领域技术人员将显而易见的是,间接路径历史可以包括更多或更少的位,可以具有更高或更低的路径长度(n),并且可以存储目标地址的更多或更少的位。

在该例子中,将现行的间接路径历史414划分成三个块502、504和506。第一块502与最高有效的四位(位8到11)相对应,并且用于存储第三最近预测的间接分支指令的目标地址的后四位。第二块504与中间的四位(位4-7)相对应,并且用于存储第二最近预测的间接分支指令的目标地址的后四位。第三块506与最低有效的四位(位0到3)相对应,并且用于存储最近预测的间接分支指令的目标地址的后四位。

在一些情况中,现行的间接路径历史414最初被设置成全零,如图5a中所示的,并且当决策逻辑单元406预测出新的目标地址时,更新逻辑单元408分别将块504和506中的数据向左移位四位到达块502和504,并且将新执行的间接分支指令的目标地址的后四位插入到块506中。

例如,如果更新逻辑单元408从决策逻辑单元406接收到决策逻辑单元已经预测出新间接分支指令的目标地址是“011000001010”的信息,那么更新逻辑单元408可以分别将块504和506中的数据“0000”和“0000”移位到块502和504,并将目标地址的后四位“1010”插入到块506中,使得现行的间接路径历史414包含数据“000000001010”,如图5b中所示的。

如果更新逻辑单元408随后从决策逻辑单元406接收到指示决策逻辑单元已经预测出新间接分支指令的目标地址是“010100001101”的信息,那么更新逻辑单元408可以分别将块504和506中的数据“0000”和“1010”移位到块502和504,并且将目标地址的后四位“1101”插入块506中,使得现行的间接路径历史414包含数据“000010101101”,如图5c中所示的。

类似地,如果更新逻辑单元408随后从决策逻辑单元306接收到指示决策逻辑单元已经预测出新间接分支指令的目标地址是“101011100010”的信息,那么更新逻辑单元408可以分别将块504和506中的数据“1010”和“1101”移位到块502和504,并将目标地址的后四位“0010“插入块506中,使得现行的间接路径历史414包含数据“101011010010”,如图5d中所示的。

虽然图5示出了示例性的现行的间接路径历史414,但是提交的间接路径历史418可以具有类似的结构,并且可以以与现行的间接路径历史414类似的方式进行更新。然而,提交的间接路径历史418并不是在预测出新间接分支指令的目标地址时进行更新的,而是在更新逻辑单元408从流水线308接收到已经执行了新间接分支指令的信息之后进行更新的。

现在参考图6,图6示出了示例性的现行的被采用/不被采用历史416。如上面所描述的,现行的被采用/不被采用历史416是m个最近预测的条件分支指令的预测结果(被采用/不被采用)的记录,其中m是路径长度。例如,如果m为5,那么现行的被采用/不被采用历史416记录了5个最近预测的条件分支指令的预测结果。

图6中的示例性的现行的被采用/不被采用历史416为12位长,路径长度m为12。相应地,现行的被采用/不被采用历史416使用一个位来记录12个最近预测的条件分支指令中的每一个的结果(被采用/不被采用)。在一些情况中,一(“1”)用于指示分支被采用,零(“0”)用于指示分支不被采用。对于本领域技术人员而言将显而易见的是,间接路径历史可以包括更多或更少的位,并且可以具有更高或更低的路径长度(m)。

在这个例子中,现行的被采用/不被采用历史416可以被划分成12个块602-624,其中每个块是表示最近预测的条件分支的结果的单个位。这些块按照相应的条件分支的预测顺序进行排列,其中最左面的块(块602)表示历史416中的最老预测的条件分支指令的结果,最右面的块(块624)表示历史416中的最年轻(或最近)预测的条件分支指令的结果。

在一些情况中,现行的被采用/不被采用历史416初始被设置成全零,如图6a中所示,并且当条件分支预测器逻辑单元316预测出条件分支指令的结果时,条件分支预测器逻辑单元316分别将块604-624中的数据向左移位一位到达块602-622,并且将新条件分支指令的预测结果插入块624中。

例如,如果条件分支预测器逻辑单元316预测出条件分支将被采用(例如,条件为“1”),那么条件分支预测器逻辑单元316可以分别将块604-624中的数据“00000000000”移位到块602-622,并将预测的结果(“1”)插入到块624中,使得现行的被采用/不被采用历史416包含数据“000000000001”,如图6b中所示的。

如果条件分支预测器逻辑单元316随后预测出下一条件分支将不被采用(例如,条件为“0”),那么条件分支预测器逻辑单元316可以分别将块604-624中的数据“00000000001”移位到块602-624,并将预测的结果(“0”)插入到块624中,使得现行的被采用/不被采用历史416包含数据“000000000010”,如图6c中所示的。

类似地,如果条件分支预测器逻辑单元316随后预测出下一条件分支将被采用(例如,条件为“1”),那么条件分支预测器逻辑单元316可以分别将块604-624中的数据“00000000010”移位到块602-622,并将预测的结果(“1”)插入到块624中,使得现行的被采用/不被采用历史416包含数据“000000000101”,如图6d中所示的,

虽然图6示出了示例性的现行的被采用/不被采用历史416,但是提交的被采用/不被采用历史420可以具有类似的结构,并且可以以与现行的被采用/不被采用历史416类似的方式进行更新。然而,如上面所描述的,提交的被采用/不被采用历史420不是在预测出条件分支时进行更新的,而是在条件分支预测器逻辑单元316从流水线308接收到已经执行了条件分支指令的信息之后进行更新的。

现在参考图7,图7示出了图4中的第一示例性索引产生器404。如上面参考图4所描述的,索引产生器404从取出级302接收标识程序中的间接分支指令的信息。在一些情况中,标识间接分支指令的信息是间接分支指令的地址(例如,程序计数器)。索引产生器404随后获得现行的间接路径历史414和现行的被采用/不被采用历史416,并将它们组合以产生间接分支指令的索引702。

在图7中所示的例子中,索引产生器404在现行的间接路径历史414和现行的被采用/不被采用历史416上执行逐位异或(xor)运算,以产生索引702。如本领域技术人员已知的,如果两个相应位(例如,现行的间接路径历史414中的位5和现行的被采用/不被采用历史416中的位5)相同,那么逐位xor产生“0”,如果两个相应位不同则产生“1”。例如,如图7中所示的,在现行的间接路径历史414是“011010101001”而现行的被采用/不被采用历史416是“110110011001”的情况下,所产生的索引702是“101100110000”。

现在参考图8,图8示出了图4中的第二示例性索引产生器404。如上面参考图4所描述的,索引产生器404从取出级302接收标识程序中的间接分支指令的信息。在一些情况中,标识间接分支指令的信息是间接分支指令的地址(例如,程序计数器)。在图8中所示的例子中,间接分支指令的地址是“00001111”。

索引产生器404随后获得现行的间接路径历史414和现行的被采用/不被采用历史416。索引产生器404随后将分支指令的地址的后四位附接到现行的被采用/不被采用历史416以产生修改的被采用/不被采用历史802。例如,如图8中所示的,在现行的被采用/不被采用历史416是“110110011001”而间接分支指令的地址是“00001111”的情况下,修改的被采用/不被采用历史802变成“1101100110011111”。

索引产生器404随后将修改的被采用/不被采用历史802的后12位(位0到11)与现行的间接路径历史414进行组合,以产生间接分支指令的索引804。在图8中所示的例子中,索引产生器404在修改的被采用/不被采用历史802的后12位(位0到11)和现行的间接路径历史414上执行逐位异或(xor)运算,以产生索引804。如本领域技术人员已知的,如果两个相应位(例如,现行的间接路径历史414中的位5和修改的被采用/不被采用历史802中的位5)是相同的,那么逐位xor产生“0”,如果这两个相应位是不同的,则产生“1”。例如,如图8中所示的,在现行的间接路径历史414是“011010101001”而修改后的被采用/不被采用历史802的后12位(位0到11)是“100110011111”的情况下,所产生的索引804是“111100110110”。

现在参考图9,图9示出了用于预测间接分支指令的目标地址的方法900,该方法可以由图3和图4中的间接分支预测器逻辑单元314来执行。在步骤902,间接分支预测器逻辑单元314(例如,索引产生器404)从取出级302接收标识间接分支指令的信息。如上面所描述的,该信息可以包括间接分支指令的地址(例如pc)。一旦接收到了标识间接分支指令的信息,方法900就进行到步骤904。

在步骤904,间接分支预测器逻辑单元314(例如,索引产生器404)获得现行的间接路径历史414。如上面所描述的,现行的间接路径历史414是之前预测的间接分支指令的预测的目标地址的历史。一旦已经获得了现行的间接路径历史414,方法900就进行到步骤906。

在步骤906,间接分支预测器逻辑单元314(例如,索引产生器404)从条件分支预测器逻辑单元316获得现行的被采用/不被采用历史416。如上面所描述的,现行的被采用/不被采用历史416是之前预测的条件分支指令的预测结果(被采用/不被采用)的历史。一旦获得了现行的被采用/不被采用历史416,方法900就进行到步骤908。

在步骤908,间接分支预测器逻辑单元314(例如索引产生器404)将分别在步骤904和906中获得的现行的间接路径历史414和现行的被采用/不被采用历史416进行组合,以产生在步骤902中所标识的间接分支指令的索引。如上面所描述的,现行的间接路径历史414和现行的被采用/不被采用历史416可以以任意适当的方式进行组合以产生索引。在一些情况中,在现行的间接路径历史414的多个位和现行的被采用/不被采用历史416的多个位上执行散列函数。例如,可以在现行的间接路径历史414和现行的被采用/不被采用历史416上执行逐位异或(xor)函数,其中,现行的间接路径历史414的每个位与现行的被采用/不被采用历史416的相应位进行xor。对于本领域技术人员而言显而易见的是,也可以使用其它组合和/或散列函数。

在一些情况中,间接分支预测器逻辑单元314(例如,索引产生器404)可以修改在步骤904中获得的现行的间接路径历史414或者在步骤906中获得的现行的被采用/不被采用历史416,以包括间接分支指令的地址(或其一部分),之后将这些历史组合。例如,间接分支预测器逻辑单元314可以将间接分支指令的地址的一部分附接到现行的间接路径历史414或现行的被采用/不被采用历史416;或者用间接分支指令的地址的一部分来替换现行的间接路径历史414或现行的被采用/不被采用历史416的一部分。

一旦已经产生了索引,方法900就进行到步骤910,。

在步骤910,间接分支预测器逻辑单元314识别间接分支预测目标表402中的与在步骤908中产生的索引相关联的预测的目标地址。一旦已经识别了预测的目标地址,方法900就进行到步骤912。

在步骤912,间接分支预测器逻辑单元314(例如,决策逻辑单元406)确定在步骤910中识别的预测的目标地址是否是有效的。如果预测的目标地址是有效的,那么方法进行到步骤914。然而,如果预测的目标地址不是有效的,则方法900进行到步骤916。

在步骤914,间接分支预测器逻辑单元314(例如决策逻辑单元406)预测下一指令的地址是间接分支预测目标表402中的与在步骤908中产生的索引相关联的预测的目标地址。一旦已经预测出间接分支指令的目标地址,方法900就进行到步骤918。

在步骤916,间接分支预测器逻辑单元314(例如,决策逻辑单元406)使得取出级302暂停直到流水线308确定出实际目标地址为止。

在步骤918,间接分支预测器逻辑单元314(例如,决策逻辑单元406)将下一指令的预测的地址提供给取出级302,取出级302从所提供的地址中取出下一指令。取出级302还可以在指令表422中(与间接分支指令的地址相关联地)存储接收到的地址,如上面所描述的,以用于确定是否存在误预测。

间接分支预测器逻辑单元314(决策逻辑单元406)还可以将下一指令的预测的地址提供给更新逻辑单元408,更新逻辑单元408使用接收到的地址来更新现行的间接路径历史414,如上面所描述的。

一旦已经将下一指令的预测的地址提供给取出级302,方法900就结束了。

现在参考图10,图10示出了用于更新间接分支预测目标表402的方法1000,其可以由图3和图4中的间接分支预测器逻辑单元314来执行。在步骤1002,间接分支预测器逻辑单元314(例如,更新逻辑单元408)从流水线308接收与已经被执行并被提交的间接分支指令有关的信息。该信息可以包括间接分支指令的地址和间接分支指令的实际目标地址。一旦间接分支预测器逻辑单元314接收到与被执行的且被提交的间接分支指令有关的信息,方法1000就进行到步骤1004。

在步骤1004,间接分支预测器逻辑单元314(例如,更新逻辑单元408)获得提交的间接路径历史418。如上面所描述的,提交的间接路径历史418是之前执行的间接分支指令的目标地址的列表。一旦已经获得了提交的间接路径历史418,方法100就进行到步骤1006。

在步骤1006,间接分支预测器逻辑单元314(例如,更新逻辑单元408)从条件分支预测器逻辑单元316获得提交的被采用/不被采用历史420。如上面所描述的,提交的被采用/不被采用历史420是之前执行的条件分支指令的结果(被采用/不被采用)的历史。一旦获得了提交的被采用/不被采用历史420,方法1000就进行到步骤1008。

在步骤1008,间接分支预测器逻辑单元314(例如,更新逻辑单元408)将分别在步骤1004和1006中获得的提交的间接路径历史418和提交的被采用/不被采用历史420进行组合,以产生在步骤1002中标识的间接分支指令的索引。如上面所描述的,提交的间接路径历史418和提交的被采用/不被采用历史420可以以任意适当的方式进行组合以产生索引。在一些情况中,在提交的间接路径历史418的多个位和提交的被采用/不被采用历史420的多个位上执行散列函数。例如,可以在提交的间接路径历史418和提交的被采用/不被采用历史420上执行逐位异或(xor)函数,其中,提交的间接路径历史418的每个位与提交的被采用/不被采用历史420的相应位进行xor。对于本领域技术人员将显而易见的是,也可以使用其它组合和/或散列函数。

在一些情况中,间接分支预测器逻辑单元314(例如,更新逻辑单元408)可以修改在步骤1004中获得的提交的间接路径历史418或在步骤1006中获得的提交的被采用/不被采用历史420,以包括间接分支指令的地址(或其一部分),之后将这些历史组合。例如,间接分支预测器逻辑单元314可以将间接分支指令的地址的一部分附接到提交的间接路径历史418或提交的被采用/不被采用历史420;或者用间接分支指令的地址的一部分来替换提交的间接路径历史418或提交的被采用/不被采用历史420的一部分。

一旦已经产生了索引,方法1000就进行到步骤1010。

在步骤1010,间接分支预测器逻辑单元314(例如,更新逻辑单元408)用从流水线308接收到的目标地址来替换与在步骤1008中产生的索引相关联的预测的目标地址。一旦已经更新了间接分支预测目标表402中的项,方法1000就结束了。

如上面所描述的,在一些情况中,间接分支预测器314(例如,更新逻辑单元408)还可以使用从流水线308接收到的信息来更新/校正现行的间接路径历史414。例如,间接分支预测器314(例如,更新逻辑单元408)可以使用接收到的间接分支指令地址来将间接分支指令的实际目标地址与预测的目标地址进行比较。如果它们匹配,那么预测是正确的,并且不需要对现行的间接路径历史414进行更新。然而,如果它们不匹配,那么存在误预测,并且现行的间接路径历史414被提交的间接路径历史418替换。

类似地,条件分支预测器316可以从流水线308接收指示执行的且提交的条件分支指令的地址以及分支是被采用还是不被采用(结果)的信息。条件分支预测器316可以使用该信息来更新/校正现行的被采用/不被采用历史416。例如,条件分支预测器316可以使用接收到的条件分支指令地址来将条件分支指令的实际结果与预测的结果进行比较。如果它们匹配,那么预测是正确的,并且不需要对现行的被采用/不被采用历史进行更新。然而,如果它们不匹配,那么存在误预测,并且用提交的被采用/不被采用历史420替换现行的被采用/不被采用历史416。

虽然本文描述的例子涉及单线程处理器,但是本文描述的原理和技术同样可以应用于多线程处理器。

现在参考图11,图11示出了多线程乱序处理器1100的示意图。处理器1100包括两个线程1102和1104,在本文中将被分别称为线程0和线程1。每个线程1102和1104包括取出级1106或1108、解码和重命名级1110或1112、重排序缓冲器1114或1116、提交级1118或1120以及分支预测器1122或1124,如上面参考图3所描述的。线程1102和1104共享流水线1126,如上面参考图3所描述的。每个分支预测器1122或1124包括:条件分支预测器逻辑单元1128或1130,其为特定的线程1102或1102产生并存储现行的被采用/不被采用历史和提交的被采用/不被采用历史;以及间接分支预测器逻辑单元1132或1134,其为特定的线程产生并存储现行的间接路径历史和提交的间接路径历史。每个间接分支预测器逻辑单元1132和1134随后使用间接路径历史和被采用/不被采用历史的组合来预测分支目标地址,如上面参考图4到图10所描述的。在一些情况中,分支预测器1122或1124可以维护并访问相同的间接分支预测目标表。在其它情况中,每个分支预测器1122或1124可以维护并访问单独的间接分支预测目标表。

本文给出的任意范围或设备值可以被延伸或改变,而不丧失要求保护的效果,这对于技术人员是明显的。

将理解的是,上面描述的益处和优点可以涉及一个实施例,或者可以涉及几个实施例。实施例并不限于解决任意或全部所陈述问题的实施例,也不限于具有任意或全部所陈述益处和优点的实施例。

对“一”项的任意提及是指这些项中的一个或多个。术语“包括”在本文用于表示包括所标识的方法块或元素,但是这样的块或元素并不包括排他列表,并且装置可以包含额外的块或元素,方法可以包含额外的块或操作。

对“逻辑”的特定提及是指执行一个功能或多个功能的结构。逻辑的例子包括被布置为执行那些功能的电路。例如,这样的电路可以包括在制造工艺中可获得的晶体管和/或其它硬件元件。这样的晶体管和/或其它元件可以用于形成电路或结构,举例来说,所述电路或结构实现和/或包含存储器(例如寄存器、触发器或锁存器)、逻辑运算器(例如,布尔运算)、算数运算器(例如加法器、乘法器或移位器)和互联。这样的元件可以作为定制电路或标准单元库、宏或以其它级别的抽象而被提供。这样的元件可以以特定的布置来互联。逻辑可以包括是固定功能的电路,并且电路可以被编程为执行一个功能或多个功能;这样的编程可以从固件或软件更新或控制机制来提供。所识别的执行一个功能的逻辑还可以包括实现组成功能或子过程的逻辑。在例子中,硬件逻辑具有实现固定功能操作、或多个操作、状态机或过程的电路。

本文描述的方法的步骤在适当的情况下可以以任意适当的顺序或同时地执行。另外,可以从任意方法中删除单独的块,而不偏离本文描述的主题的精神和范围。上面描述的任意例子的方案可以与所描述的任意其它例子的方案组合,以形成进一步的例子,而不丧失寻求保护的效果。在附图中的元件被示为由箭头连接的情况下,将清楚的是,这些箭头仅仅示出了元件之间的通信(包括数据和控制消息)的一个示例性流。元件之间的流可以在任意方向或在两个方向上。

将理解的是,对优选实施例进行的以上描述仅仅是通过例子的方式给出的,并且本领域技术人员可以进行各种修改。

虽然已经以某种具体度或参考一个或多个单独的实施例描述了各个实施例,但是本领域技术人员可以对所公开的实施例进行各种改变,而不脱离本发明的精神和范围。

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