首页 / 专利库 / 电脑零配件 / 微指令翻译器 / 分支预测器 / 同时进行分支地址的预测和寄存器内容的更新

同时进行分支地址的预测和寄存器内容的更新

阅读:695发布:2020-05-11

专利汇可以提供同时进行分支地址的预测和寄存器内容的更新专利检索,专利查询,专利分析的服务。并且预测将在寄存器间接分支中使用的值,且将其同时存储在一个或多个指令可存取的所选择 位置 中。所述值可以是由间接分支使用的目标地址,并且所选择位置可以是 硬件 寄存器,提供分支地址的预测和寄存器内容的更新的同时进行。,下面是同时进行分支地址的预测和寄存器内容的更新专利的具体信息内容。

1.一种用于促进计算环境内的处理的计算机程序产品,所述计算机程序产品包括:
一种计算机可读存储介质,其可由处理电路读取并且存储用于执行方法的指令,所述方法包括:
使用所述计算环境的处理器预测将在寄存器间接分支中使用的预测值;
将所述预测值存储在所述计算环境的一个或多个指令可访问的所选择位置中,所述存储与寄存器间接分支的处理同时执行,并且所述所选择位置是除了用于存储指令地址的另一位置之外的位置;以及
在包括所述寄存器间接分支的推测处理中使用所述预测值。
2.根据权利要求1所述的计算机程序产品,其中所述预测值包括将由指令提取使用的目标地址。
3.根据权利要求2所述的计算机程序产品,其中所述使用包括将所述指令提取重定向到所述目标地址。
4.根据权利要求1所述的计算机程序产品,其中所述所选择位置包括硬件寄存器。
5.根据权利要求1所述的计算机程序产品,其中所述方法进一步包括:
确定所述预测值是否准确;以及
基于确定所述预测值不准确,执行恢复。
6.根据权利要求5所述的计算机程序产品,其中所述恢复包括:
清洗在所述使用之后执行的一个或多个指令;以及
用非预测值替换所述预测值。
7.根据权利要求6所述的计算机程序产品,其中所述替换包括使用一个或多个重命名寄存器来提供所述非预测值。
8.根据权利要求1所述的计算机程序产品,其中所述存储包括:
分配寄存器以保存所述预测值;以及
将所述预测值复制到被分配为保存所述预测值的所述寄存器。
9.根据权利要求8所述的计算机程序产品,其中所述寄存器是为被指派以保存所述预测值的逻辑寄存器分配的重命名寄存器。
10.根据权利要求9所述的计算机程序产品,其中所述方法还包括将所述重命名寄存器标记为可用。
11.一种用于促进计算环境内的处理的计算机系统,所述计算机系统包括:
存储器;以及
与所述存储器通信的处理器,其中所述计算机系统被配置为执行方法,所述方法包括:
预测将在寄存器间接分支中使用的预测值;
将所述预测值存储在所述计算环境的一个或多个指令可访问的所选择位置中,所述存储与寄存器间接分支的处理同时执行,并且所述所选择位置是除了用于存储指令地址的另一位置之外的位置;以及
在包括所述寄存器间接分支的推测处理中使用所述预测值。
12.根据权利要求11所述的计算机系统,其中所述预测值包括将由指令提取使用的目标地址。
13.根据权利要求11所述的计算机系统,其中所述所选择位置包括硬件寄存器。
14.根据权利要求11所述的计算机系统,其中所述方法进一步包括:
确定所述预测值是否准确;以及
基于确定所述预测值不准确,执行恢复。
15.根据权利要求11所述的计算机系统,其中所述存储包括:
分配寄存器以保存所述预测值;以及
将所述预测值复制到被分配为保存所述预测值的所述寄存器。
16.一种促进计算环境内的处理的计算机实现的方法,所述计算机实现的方法包括:
使用所述计算环境的处理器预测将在寄存器间接分支中使用的预测值;
将所述预测值存储在所述计算环境的一个或多个指令可访问的所选择位置中,所述存储与寄存器间接分支的处理同时执行,并且所述所选择位置是除了用于存储指令地址的另一位置之外的位置;以及
在包括所述寄存器间接分支的推测处理中使用所述预测值。
17.根据权利要求16所述的计算机实施的方法,其中所述预测值包括将由指令提取使用的目标地址。
18.根据权利要求17所述的计算机实施的方法,其中所述使用包括将所述指令提取重定向到所述目标地址。
19.根据权利要求16所述的计算机实现的方法,其中,所述所选择位置包括硬件寄存器。
20.根据权利要求16所述的计算机实现的方法,还包括:
确定所述预测值是否准确;以及
基于确定所述预测值不准确,执行恢复。
21.根据权利要求20所述的计算机实现的方法,其中所述恢复包括:
清洗在所述使用之后执行的一个或多个指令;以及
用非预测值替换所述预测值。
22.根据权利要求21所述的计算机实现的方法,其中所述替换包括使用一个或多个重命名寄存器来提供所述非预测值。
23.根据权利要求16所述的计算机实现的方法,其中所述存储包括:
分配寄存器以保存所述预测值;以及
将所述预测值复制到被分配为保存所述预测值的所述寄存器。
24.根据权利要求23所述的计算机实现的方法,其中所述寄存器是为被指派以保存所述预测值的逻辑寄存器分配的重命名寄存器。
25.根据权利要求24所述的计算机实现的方法,其中所述方法还包括将所述重命名寄存器标记为可用。

说明书全文

同时进行分支地址的预测和寄存器内容的更新

背景技术

[0001] 一个或多个方面一般涉及计算环境内的处理,尤其涉及促进这样的处理。
[0002] 许多计算系统使用寄存器间接分支,其中在分支指令中指定下一个要执行的指令的地址的位置,而不是地址本身。例如,指定包括该地址的寄存器的位置。
[0003] 此外,根据通用的应用二进制接口(ABI),分支地址首先被加载到通用寄存器(GPR),然后在实现寄存器间接分支之前被传送到专用控制寄存器(SPR)。例如,在纽约阿芒克的国际商业机器公司提供的Power指令集架构(ISA)中,分支指令分支到计数器(CTR)专用寄存器。然而,专用寄存器不是直接加载的,而是经由通用寄存器加载的。
[0004] 计数器寄存器的读出往往是昂贵的。因此,当执行到子例程的分支(BCTR)时,至少一个ABI指示CTR的值要存储在另一寄存器、例如R12中,使得另一寄存器能够由被调用的函数用作基址寄存器。然而,当进行分支预测时,会在已加载R12值之前预测分支地址,从而使所调用的子例程响应于数据访问而停止,且限制性能。发明内容
[0005] 通过提供一种用于促进计算环境内的处理的计算机程序产品,克服了现有技术的缺点,并提供了附加的优点。该计算机程序产品包括可由处理电路读取并且存储用于执行方法的指令的存储介质。该方法包括例如使用计算环境的处理器来预测要在寄存器间接分支中使用的预测值。预测值被存储在计算环境的一个或多个指令可访问的所选择位置中,并且该存储与处理寄存器间接分支同时地执行。该所选择位置是除了用于存储指令地址的另一位置之外的位置。预测值被用在包括寄存器间接分支的推测(speculative)处理中。
[0006] 通过同时地处理寄存器间接分支且将从所述处理产生的预测值存储在其他指令可访问的位置中(除程序计数器之外),促进处理且可增强性能,尤其是在预测值正确的情况下。
[0007] 作为一个或多个示例,所述预测值包含将由指令提取使用的目标地址,且所述所选择位置包含硬件寄存器。此外,在一个示例中,所述使用包含将指令提取重定向到目标地址。
[0008] 在另一方面,作出关于预测值是否准确的确定。基于确定预测值不准确,执行恢复。
[0009] 恢复包括例如清洗(flush)在使用之后执行的一个或多个指令,以及用非预测值替换预测值。在一个示例中,替换包括使用一个或多个重命名寄存器来提供非预测值。
[0010] 在一个实施例中,存储包括分配寄存器以保存预测值,以及将预测值复制到被分配以保存预测值的寄存器。
[0011] 作为一个示例,寄存器是为被指派以保存预测值的逻辑寄存器分配的重命名寄存器。此外,在一个实施例中,重命名寄存器被标记为可用。
[0012] 本文还描述并要求保护与一个或多个方面相关的计算机实现的方法和系统。此外,本文还描述并要求保护与一个或多个方面相关的服务。
[0013] 根据一个方面,提供了一种用于促进计算环境内的处理的计算机程序产品,所述计算机程序产品包括:一种计算机可读存储介质,其可由处理电路读取并且存储用于执行方法的指令,所述方法包括:使用所述计算环境的处理器预测将在寄存器间接分支中使用的预测值;将所述预测值存储在所述计算环境的一个或多个指令可访问的所选择位置中,所述存储与寄存器间接分支的处理同时执行,并且所述所选择位置是除了用于存储指令地址的另一位置之外的位置;以及在包括寄存器间接分支的推测处理中使用预测值。
[0014] 根据另一方面,提供了一种用于促进计算环境内的处理的计算机系统,所述计算机系统包括:存储器;以及与所述存储器通信的处理器,其中所述计算机系统被配置为执行一种方法,所述方法包括:预测将在寄存器间接分支中使用的预测值;将所述预测值存储在所述计算环境的一个或多个指令可访问的所选择位置中,所述存储与寄存器间接分支的处理同时执行,并且所述所选择位置是除了用于存储指令地址的另一位置之外的位置;以及在包括寄存器间接分支的推测处理中使用预测值。
[0015] 根据另一方面,提供了一种促进计算环境内的处理的计算机实现的方法,所述计算机实现的方法包括:使用所述计算环境的处理器预测将在寄存器间接分支中使用的预测值;将所述预测值存储在所述计算环境的一个或多个指令可访问的所选择位置中,所述存储与寄存器间接分支的处理同时执行,并且所述所选择位置是除了用于存储指令地址的另一位置之外的位置;以及在包括寄存器间接分支的推测处理中使用预测值。
[0016] 通过本文所述的技术实现了额外的特征和优点。其他实施例和方面在本文中详细描述,且被视为权利要求所要求保护方面的一部分。附图说明
[0017] 在说明书的结尾处的权利要求中作为示例特别指出并清楚地要求保护一个或多个方面。从结合附图的以下详细描述中,一个或多个方面的前述内容和特征以及优点是显而易见的,在附图中:
[0018] 图1A示出了用于结合和使用本发明的一个或多个方面的计算环境的一个示例;
[0019] 图1B示出了根据本发明的一个或多个方面的图1A的处理器的进一步细节;
[0020] 图1C示出了根据本发明的一个或多个方面使用的指令执行流线的一个示例的进一步细节;
[0021] 图1D示出了根据本发明的一个方面的图1A的处理器的一个示例的进一步细节;
[0022] 图2示出了根据本发明的一个方面的与寄存器间接分支的预测相关的处理的一个示例;
[0023] 图3示出了根据本发明的一个方面的检查预测正确性的一个示例;
[0024] 图4示出了根据本发明的一个方面的检查预测正确性的另一示例;
[0025] 图5示出了根据本发明的一个方面的与对寄存器间接分支和关联寄存器(affiliated register)的预测相关的处理的一个示例;
[0026] 图6示出了根据本发明的一个方面的检查预测正确性的另一示例;
[0027] 图7示出了根据本发明的一个方面的检查关联寄存器的预测正确性的示例;
[0028] 图8示出了根据本发明的一个方面的与外部指示的关联寄存器预测(EIARP)相关的处理的一个示例;
[0029] 图9示出了根据本发明的一个方面的与上下文切换和外部指示的关联寄存器预测相关的处理的一个示例;
[0030] 图10示出了根据本发明的一个方面的与进入硬件异常/中断处理相关的处理的一个示例;
[0031] 图11示出了根据本发明的一个方面的与退出硬件异常/中断处理相关的处理的一个示例;
[0032] 图12示出了根据本发明的一个方面的与寄存器间接分支的预测和外部指示的关联寄存器预测的使用相关的处理的一个示例;
[0033] 图13示出了根据本发明的一个方面的与寄存器间接分支的预测相关的以及用于预测是否可以预测关联寄存器的处理的一个示例;
[0034] 图14示出了根据本发明的一个方面的检查预测正确性的另一示例;
[0035] 图15示出了根据本发明的一个方面的检查关联寄存器的预测正确性的另一示例;
[0036] 图16示出了根据本发明的一个方面的检查关联寄存器的预测正确性的又一示例;
[0037] 图17示出了根据本发明的一个方面的与寄存器间接分支预测相关的以及用于动态地选择可以预测的关联寄存器的处理的一个示例;
[0038] 图18示出了根据本发明的一个方面的检查关联寄存器的预测正确性并更新预测器的一个示例;
[0039] 图19示出了根据本发明的一个方面的与识别融合序列相关的处理的一个示例;
[0040] 图20示出了根据本发明的一个方面的与外部指示的关联寄存器预测和基于融合的关联序列相关的处理的一个示例;
[0041] 图21示出了根据本发明的一个方面的与利用基于融合的关联序列执行分支预测相关的处理的一个示例;
[0042] 图22示出了根据本发明的一个方面的与确定指令是关联创建还是破坏相关的处理的一个示例;
[0043] 图23示出了根据本发明的一个方面的与预测关联派生寄存器相关的处理的一个示例;
[0044] 图24示出了根据本发明的一个方面的检查关联派生寄存器的预测正确性的一个示例;
[0045] 图25示出了根据本发明的一个方面的与分支预测和基于融合的关联派生序列相关的处理的一个示例;
[0046] 图26A-26B示出了根据本发明的一个方面的促进计算环境内的处理的一个实施例;
[0047] 图27A示出了用于结合和使用本发明的一个或多个方面的计算环境的另一示例;
[0048] 图27B示出了图27A的存储器的进一步细节;
[0049] 图28示出了计算环境的一个实施例;以及
[0050] 图29示出了抽象模型层的一个示例。

具体实施方式

[0051] 根据一个或多个方面,基于预测将用于寄存器间接分支的寄存器的内容的值(例如,目标地址寄存器的目标地址),将预测值存储在寄存器(例如,目标地址寄存器,本文还称为预测寄存器)中。然后该寄存器可供将来使用。例如,结合预测性指令提取来更新目标地址寄存器的内容并使其可用。当预测目标地址时,同时使其可用于指令提取以及存储在寄存器或其他(例如,其他指令或操作)可访问的其他所选择位置中。这允许其他人使用预测值。
[0052] 作为示例,预测寄存器或位置是除了基于预测自动更新的程序计数器之外的寄存器或位置。例如,它是除程序计数器、诸如计数器(CTR)寄存器之外的寄存器或位置或其他所选择寄存器/位置。当预测目标地址时,同时使目标地址对预测寄存器可用,即一个设备处理寄存器间接分支并存储所预测目标地址。例如,它在一个架构指令的界限内(例如,在硬件/软件接口处)。不需要另一架构指令来将值复制或移动到预测寄存器/位置。
[0053] 在另一方面中,除了预测寄存器的内容的值且将预测值存储于预测寄存器中之外,还将预测值存储于另一位置中,例如用以促进处理的另一寄存器。此另一位置或寄存器在本文中被称为存储由其他指令使用的预测值的关联位置或关联寄存器。关联寄存器是与预测寄存器相关的寄存器。例如,关联寄存器与另一寄存器(例如,预测寄存器)具有已知关系,诸如被称为另一寄存器的副本。在一个特定实例中,这两个寄存器都可由一个指令参考。作为一个例子,MTCTR R12指令将R12的内容移动到CTR寄存器。因此,R12关联于CTR。存在其他这样的示例。
[0054] 在又一方面,提供了一种控制,用于指定是否要在预测中使用关联寄存器。如果要预测关联寄存器,则控制还提供关联寄存器的指示(例如寄存器号)。该控制例如是代码特定的,并且可以针对每个代码单元(例如应用、进程、功能、模或动态共享对象(例如库))被启用/禁用。
[0055] 在又一方面,预测值可用于预测将存储在关联派生寄存器(或其他位置)中的值以进一步促进处理。关联派生寄存器是其内容是从关联寄存器的内容派生的寄存器。例如,R12的内容可与偏移一起使用,以获得要存储在所选择寄存器、例如R2中的值。因此,在该示例中,R2是关联派生寄存器。还存在其他示例。
[0056] 另外,在一个或多个方面中,可识别寄存器间接分支中所使用的且指定一个或多个可被预测的寄存器的特定指令序列,且基于此,融合执行所述特定指令序列的操作的操作序列以促进处理。
[0057] 即,执行融合过程以将一个或多个指令组合成单个复合操作过程。也就是说,该指令序列将作为整体来对待。
[0058] 本文描述了各个方面。此外,在不背离本发明的各方面的精神的情况下,许多变化是可能的。应当注意,本文描述了各个方面和特征,并且除非不一致,否则每个方面或特征可以与任何其他方面或特征组合。
[0059] 参见图1A描述了结合和使用本发明的一个或多个方面的计算环境的实施例。在一个示例中,计算环境基于由纽约州阿蒙克市的国际商业机器公司(International Business Machines Corporation)提供的z/架构(z/Architecture)。z/架构的一个实施例在IBM公开案第SA22-7832-10号(2015年3月)“z/架构工作原理(z/Architecture Principles of Operation)”中进行描述,其通过全文引用的方式并入本文。Z/ARCHITECTURE是美国纽约州阿蒙克市国际商业机器公司的注册商标。
[0060] 在另一示例中,计算环境基于由纽约州阿蒙克市国际商业机器公司提供的Power架构(Power Architecture)。Power架构的一个实施例在国际商业机器公司2015年4月9日的“Power ISATM版本2.07B”中进行描述,其通过全文引用的方式并入本文。POWER ARCHITECTURE是美国纽约州阿蒙克市国际商业机器公司的注册商标。
[0061] 计算环境还可基于其他架构,包括但不限于英特尔x86架构。也存在其他示例。
[0062] 如在图1A中所示,计算环境100包括例如计算机系统102,计算机系统102以通用计算设备的形式示出。计算机系统102可包括但不限于经由一个或多个总线和/或其他连接110彼此耦接的一个或多个处理器或处理单元104(例如,中央处理单元(CPU))、存储器106(作为示例,被称作为主存储或存储装置)、以及一个或多个输入/输出(I/O)接口108。
[0063] 总线110表示若干类型的总线结构中的任何一种的一个或多个,包括存储器总线或存储器控制器、外围总线、加速图形端口、以及使用各种总线架构中的任何一种的处理器或本地总线。作为示例而非限制,这些架构包括工业标准架构(ISA)、微通道架构(MCA)、增强型ISA(EISA)、视频电子标准协会(VESA)本地总线和外围组件互连(PCI)。
[0064] 存储器106可包括例如高速缓存120,诸如共享高速缓存,该高速缓存可被耦接到处理器104的本地高速缓存122。此外,存储器106可包括一个或多个程序或应用130、操作系统132、以及一个或多个计算机可读程序指令134。计算机可读程序指令134可被配置为执行本发明的方面的实施例的功能。
[0065] 计算机系统102还可以经由例如I/O接口108与一个或多个外部设备140、一个或多个网络接口142和/或一个或多个数据存储设备144通信。示例外部设备包括用户终端、磁带驱动器、指示设备、显示器等。网络接口142使计算机系统102能够与一个或多个网络通信,诸如局域网(LAN)、通用广域网(WAN)和/或公共网络(例如,因特网),从而提供与其他计算设备或系统的通信。
[0066] 数据存储设备144可存储一个或多个程序146、一个或多个计算机可读程序指令148和/或数据等。计算机可读程序指令可被配置为执行本发明的方面的实施例的功能。
[0067] 计算机系统102可以包括和/或耦合到可移动/不可移动、易失性/非易失性计算机系统存储介质。例如,它可以包括和/或耦合到不可移动的、非易失性磁介质(通常称为"硬盘驱动器")、用于从可移动的、非易失性磁盘(例如,"软盘")读取和向其写入的磁盘驱动器、和/或用于从可移动的、非易失性光盘(诸如CD-ROM、DVD-ROM或其他光学介质)读取或向其写入的光盘驱动器。应当理解,其他硬件和/或软件组件可以与计算机系统102结合使用。示例包括但不限于:微代码、设备驱动、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动和数据档案存储系统等。
[0068] 计算机系统102可以与许多其他通用或专用计算系统环境或配置一起操作。适合与计算机系统102一起使用的公知的计算系统、环境和/或配置的示例包括但不限于个人计算机(PC)系统、服务器计算机系统、瘦客户端、胖客户端、手持式或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、小型计算机系统、大型计算机系统、以及包括任何上述系统或设备的分布式云计算环境等。
[0069] 参见图1B描述关于处理器104的一个示例的进一步细节。处理器104包括用于执行指令的多个功能组件。这些功能组件包括例如用于提取要执行的指令的指令提取组件150、用于对所提取的指令进行解码并获得被解码的指令的操作数的指令解码单元152、用于执行被解码的指令的指令执行组件154、用于访问存储器以便视需要而进行指令执行的存储器存取组件156、以及用于提供所执行的指令的结果的写回组件160。根据本发明的一个或多个方面,这些组件中的一个或多个可用于执行与预测指令提取和/或处理166相关的一个或多个指令和/或操作。
[0070] 在一个实施例中,处理器104还包括一个或多个寄存器168,以由一个或多个功能组件使用。处理器104可以包括比本文提供的示例更多、更少和/或其他的组件。
[0071] 关于处理器104的执行流水线的进一步细节将参考图1C来描述。尽管在此描绘和描述了流水线的各个处理阶段,但是应当理解,在不脱离本发明的各方面的精神的情况下,可以使用附加的、更少的和/或其他阶段。
[0072] 参考图1C,在一个实施例中,从指令队列中提取170指令,并且可以执行该指令的分支预测172和/或解码174。可将经解码的指令添加到指令组176以一起处理。分组的指令被提供给映射器178,该映射器确定任何依赖性、指派资源并将指令/操作组分派到适当的发布队列。对于不同类型的执行单元,存在一个或多个发布队列,包括例如分支、加载/存储、浮点、定点、向量等。在发布阶段180期间,指令/操作被发布到适当的执行单元。读取182任何寄存器以检索其源,且在执行阶段184期间执行指令/操作。如所指出的,作为示例,执行可以是针对分支、加载(LD)或存储(ST)、定点操作(FX)、浮点操作(FP)或向量操作(VX)。在写回阶段186期间,将任何结果写入到适当的寄存器。随后,指令完成188。如果存在中断或清洗190,则处理可返回到指令提取170。
[0073] 此外,在一个示例中,耦合到解码单元的是寄存器重命名单元192,其可用于保存/恢复寄存器。
[0074] 关于处理器的附加细节参考图1D来描述。在一个示例中,诸如处理器104之类的处理器是流水线处理器,其可以包括例如预测硬件、寄存器、高速缓存、解码器、指令定序单元和指令执行单元。预测硬件包括例如本地分支历史表(BHT)105a、全局分支历史表(BHT)105b和全局选择器105c。通过指令提取地址寄存器(IFAR)107访问预测硬件,该寄存器具有下一个指令提取的地址。
[0075] 还将同一地址提供到指令高速缓存109,其可提取被称为"提取群组"的多个指令。与指令高速缓存109相关的是目录111。
[0076] 高速缓存和预测硬件在大致相同的时间以相同的地址被访问。如果预测硬件具有可用于提取群组中的指令的预测信息,则将该预测转发到指令定序单元(ISU)113,其随即将指令发布到执行单元以供执行。该预测可用于结合分支目标计算115和分支目标预测硬件(例如链接寄存器预测栈117a和计数寄存器栈117b)来更新IFAR 107。如果没有预测信息可用,但一个或多个指令解码器119在提取群组中发现分支指令,那么针对所述提取群组创建预测。所预测分支被存储在预测硬件中,例如存储在分支信息队列(BIQ)125中,并且被转发到ISU 113。
[0077] 分支执行单元(BRU)121响应于由ISU 113向其发布的指令而操作。BRU 121对条件寄存器(CR)文件123具有读访问。分支执行单元121进一步访问分支扫描逻辑存储在分支信息队列125中的信息,以确定分支预测的成功,并且可操作地耦合到与微处理器支持的一个或多个线程相对应的指令提取地址寄存器(IFAR)107。根据至少一个实施例,BIQ入口与标识符相关,并由标识符标识,例如由分支标签BTAG标识。当完成与BIQ入口相关的分支时,它被这样标记。BIQ入口被保持在队列中,并且当最旧的队列入口被标记为包含与已完成分支相关的信息时,顺序地解除分配最旧的队列入口。BRU121还可操作地连接,以便当BRU121发现分支误预测时引起预测器更新。
[0078] 当执行指令时,BRU121检测预测是否错误。如果是,则更新预测。为此目的,处理器还包括预测器更新逻辑127。预测器更新逻辑127响应于来自分支执行单元121的更新指示且经配置以更新本地BHT105a、全局BHT105b和全局选择器105c中的一个或多个中的阵列入口。预测器硬件105a、105b和105c可具有与指令提取和预测操作所使用的读端口不同的写端口,或者可共享单个读/写端口。预测器更新逻辑127可进一步操作地耦合到链接栈117a和计数寄存器栈117b。
[0079] 现在参考条件寄存器文件(CRF)123,CRF123可由BRU121读访问,并且可以由执行单元写入,所述执行单元包括但不限于定点单元(FXU)141、浮点单元(FPU)143和向量多媒体扩展单元(VMXU)145。条件寄存器逻辑执行单元(CRL执行)147(也称为CRU)和专用寄存器(SPR)处理逻辑149对条件寄存器文件(CRF)123具有读和写访问。CRU147会对储存于CRF文件123中的条件寄存器执行逻辑运算。FXU141能够对CRF123执行写更新。
[0080] 处理器104还包括加载/存储单元151、各种复用器153和缓冲器155、以及地址转换表157和其他电路。
[0081] 处理器104执行使用硬件寄存器来存储信息的程序(也称为应用程序)。调用例程(例如函数、子例程或其他类型的例程)的程序负责保存由调用者(即调用例程的程序)使用的寄存器且负责在从被调用者(被调用的例程)返回时恢复那些寄存器。同样,被调用者负责保存/恢复它使用的寄存器,如在下面提供的代码示例中所示。
[0082] 此外,许多计算系统使用基址寄存器来寻址数据和/或代码。例如,由国际商业机器公司提供的System/360(System z)使用分支和链接寄存器(BALR)指令以及USING指令来创建用于寻址数据和代码的索引。作为另一示例,Power Systems使用具有偏移的分支与链接(BL)指令(例如,BL.+4)来在寄存器中产生程序计数器(PC)地址以用于位置独立代码(PIC)中的数据寻址。其他系统类似地使用基址寄存器来寻址数据和代码。
[0083] 如所指出的,不同的序列已经被用于建立可寻址性。例如,已经使用了其中程序计数器(PC)值被加载到被调用者函数中或者使用所提供的函数调用地址的序列。这提供了提供由当前指令地址表示的已知值的能,但是会使用昂贵的序列。相反,使用指定函数入口地址导致更简单的序列,但是依赖于潜在的长依赖链来建立入口点地址。以下实施例描述了先前用于建立可寻址性的序列。
[0084] 下面描述了用于System/360(System z)的代码的一个示例:以下System/360汇编代码示出了基于System/360架构的大型机系统中通常用于调用子例程的子例程调用的结构:
[0085]
[0086] 以下System/360(System z)汇编代码示出了基于System/360架构的大型机系统中调用的子例程调用的结构:
[0087]
[0088]
[0089] 此外,下面描述了基于Power架构的系统的代码的一个示例。以下Power架构汇编代码示出了基于Power架构的Power系统中通常用于调用子例程的子例程调用的结构:
[0090]
[0091] 以下Power架构汇编代码示出了基于Power架构的Power系统中被调用的子例程调用的结构:
[0092]
[0093]
[0094] 如以上示例中那样,加载程序计数器作为基址导致开销。例如,对于System/360,代码包括额外的balr r12,0指令,并且在Power Systems上,存在额外的指令集,包括mflr/bl.+4/mflr/mtlr。因此,在一个代码转换中,函数入口点也被用作基址,如下所示。
[0095] 包括函数入口点作为基址的System/360代码的一个示例如下:
[0096]
[0097]
[0098] 基于Power架构的代码的一个例子如下:
[0099]
[0100] 虽然上述转换允许目标地址可用于执行分支以进入子例程,但在分支预测之后的推测执行期间,地址可能不可用,直到目标地址变得可用以验证预测时为止。例如,在预测的时候,在其他指令或操作可访问的寄存器或其他所选择位置(不同于程序计数器)中,地址不可用。因此,根据本发明的一个方面,基于预测寄存器间接分支地址的分支预测器,也使预测值可用作例如架构寄存器中的推测值。然后,如果预测正确,则执行进行得更快。如果预测不正确,则进行恢复,如基于误预测所具有的那样。
[0101] 关于寄存器间接分支的预测技术的进一步细节参考图2描述,在一个示例中,处理器正执行此处理。最初,预测寄存器间接分支的目标地址,步骤200,且将指令提取重定向到所预测目标地址(本文中还称为所预测地址),步骤202。此外,在一个示例中,为保存目标地址的逻辑寄存器分配新的重命名寄存器,步骤204。也就是说,在一个实施例中,寄存器重命名用于恢复。利用寄存器重命名,在分支上分配新的重命名寄存器,并且用预测值加载新的重命名寄存器。检查预测,如果预测不正确,则通过返回到先前命名的寄存器来执行恢复。
[0102] 如所指示的,将所预测地址复制到分配的重命名寄存器,步骤206。保存目标地址的重命名寄存器被标记为可用,步骤208。此外,执行预测检查以确定预测是否正确,步骤210。存在多种方式来使得预测检查发生,包括启动状态机,当提供给分支指令的目标寄存器值变得可用时,该状态机将执行检查;插入内部操作(iop)以进行检查;或者使得分支操作被发布到检查流水线等。
[0103] 如果存在误预测,则执行恢复。存在许多可以使用的恢复实现选项,包括将正确的值从旧寄存器复制到新寄存器;或者使用重命名实现,其中丢弃新分配的重命名寄存器,并且重命名映射指向保存正确加载的值的先前物理寄存器。参考图3-4描述关于例如由处理器执行的示例恢复实现的进一步细节。
[0104] 首先参考图3,在一个实施例中,执行分支预测正确性的检查,步骤300。这包括取得所预测地址,并将其与当分支指令变得可用时作为分支指令的输入而计算的实际地址进行比较。如果预测正确,询问301,则完成预测检查,步骤302,并且不需要恢复。
[0105] 然而,如果预测不正确,询问301,那么清洗被错误预测的分支之后的指令,步骤304。此外,指令提取被重定向到所计算的地址,步骤306。另外,将正确的非推测值写入保存目标地址的寄存器,步骤308。可以有多种方式来实现这一点,包括在非重命名设计中,写入到活动寄存器。此外,在重命名设计中,写入现有的重命名寄存器或分配新的重命名寄存器。将保存目标地址的寄存器标记为可用,步骤310。这完成了预测检查的一个示例。
[0106] 在另一个实施例中,参考图4,提供了用于寄存器间接分支的预测检查技术,其明确地使用寄存器重命名。在此示例中,检查分支预测正确性,步骤400。如果预测正确,询问401,则完成检查,步骤402,且不执行恢复。然而,如果预测不正确,询问401,则清洗被错误预测的分支之后的指令,步骤404,且解除分配在预测期间分配的重命名寄存器,从而使具有非推测目标地址的先前重命名寄存器可见,步骤406。然后,指令提取被重定向到所计算的地址,步骤408。这完成了预测检查的一个示例。
[0107] 有利的是,图4的技术对应于当前在许多无序处理器中实现的分支处理,其中在分支指令之后分配的寄存器被自动解除分配,只要结合分支指令的处理而分配的寄存器被作为在分支指令的执行之后分配的寄存器对待。在一实施例中,其中结合分支指令所分配的目标寄存器不被作为在分支指令之后分配的寄存器对待且不被解除分配,根据图3的实现可适于用正确的非推测值来更新已被分配以保存推测值的重命名寄存器。
[0108] 在另一实施例中,可以使用非重命名注释,其中例如提供了该基础的两个副本。然后,在预测时,切换到第二或新的副本。该预测将预测值复制到新副本中,并且将来的指令使用新启用的副本。检查预测,如果存在误预测,则使用旧的副本。在一个这样的实现中,通过更新目标寄存器的活动副本,来执行误预测恢复,即,指向旧(非预测)副本并且使第二副本是活动的,作为下一预测的下一新的基值。进一步的实现也是可能的。
[0109] 如本文所描述,基于预测将用于寄存器间接分支的寄存器的内容(例如,值;目标地址),还将用于该预测的所预测内容存储(例如,同时地)在将用于寄存器间接分支的寄存器中,使得其可由其他指令使用。这便于处理。
[0110] 在另一方面中,写入到目标地址寄存器(以及例如程序计数器)中的预测值也写入到关联寄存器中。例如,如果预测值将被写入计数器寄存器CTR,CTR是目标地址寄存器,它也被写入另一个所选择寄存器,例如与CTR寄存器有关的R12、R15或其他寄存器。
[0111] 对于某些处理,例如对于通常使用的ABI,分支地址首先被加载到通用寄存器(GPR),然后在实现寄存器间接分支之前被传送到专用控制寄存器(SPR)。根据分支架构的一个这样的例子,Power ISA分支到计数器(CTR)专用寄存器。然而,专用寄存器(例如,计数器寄存器CTR)不是直接加载的,而是经由通用寄存器加载的。
[0112] 由于计数器寄存器读出可能是昂贵的,所以一个示例ABI进一步指示,当执行到子例程的分支(BCTR)时,CTR的值将被存储在所选择寄存器中,例如R12、R15或其他寄存器。这使得所选择寄存器能够被所调用的函数用作基址寄存器。然而,当进行分支预测时,可在已加载所选择寄存器的值之前预测分支地址,从而使所调用的子例程响应于数据存取而停止。
[0113] 先前,为了在所选择寄存器、例如在这个例子中的R12中提供值,执行从CTR到R12的移动(MFCTR),其读取CTR寄存器并将结果写入R12。然而,根据ABI的一个定义,例如Power ELF v2ABI,如果在CTR中得到一个值,则在R12中也得到该值。因此,不需要从CTR移至R12,因为软件已经指示出,CTR寄存器中的任何内容也将被写入R12,从而消除了副本。然而,根据本发明的一个方面,如果预测了寄存器,则使该寄存器的预测值在该寄存器中可用。因此,如果预测寄存器是CTR,则CTR被同时更新。然而,应用程序想要读取还没有被更新的R12,并且因为没有副本,所以没有软件路径来将CTR中的预测值放入R12中。R12为关联寄存器;它是相关的,但它不是在代码中必然看到的副本。因此,根据本发明的一个方面,为CTR预测的并写入CTR的相同值也被写入R12(或另一所选择寄存器或位置)。
[0114] 因此,根据本发明的一个方面,结合一种或多种类型的子例程分支的分支预测来预测关联寄存器。这将在下面进一步详细描述。
[0115] 参考图5描述了用于寄存器间接分支的预测技术的一个示例,该预测技术也预测关联寄存器。最初,预测寄存器间接分支的目标地址,步骤500,且将指令提取重定向到所预测目标地址,步骤502。此外,在一个示例中,为保存目标地址的逻辑寄存器分配新的重命名寄存器,步骤504,并且将所预测地址复制到分配的重命名寄存器,步骤506。将保存目标地址的重命名寄存器标记为可用,步骤508。
[0116] 另外,根据本发明的一个方面,还为关联寄存器分配新的重命名寄存器,步骤510。将所预测地址复制到为关联寄存器分配的重命名寄存器,步骤512,并且将关联寄存器的重命名寄存器标记为可用,步骤514。
[0117] 执行预测检查以确定分支预测是否正确,步骤516,这里描述了其一个示例。另外,对关联寄存器执行预测检查,步骤518。此检查包括例如将响应于其而正在预测关联寄存器的正在处理的当前指令之前的架构化值的值与由该当前指令预测的值进行比较。可以通过启动状态机、插入用于检查的IOP、或使得向检查流水线发布具有检查关联值的指示的分支操作来启动检查。许多变化是可能的。
[0118] 参考图6描述与分支预测检查相关的进一步细节,并且参考图7描述检查关联寄存器的预测的预测检查的进一步细节。然而,在不使用寄存器重命名的情况下,其他实现是可能的。在一个示例中,处理器执行该处理。
[0119] 首先参考图6,在一个示例中,检查分支预测的正确性,步骤600。如果分支预测正确,询问601,则检查完成,步骤602,并且不执行恢复。然而,如果分支预测不正确,询问601,则执行恢复。例如,清洗被错误预测分支之后的指令,步骤604。这可以包括关联寄存器的检查。此外,解除分配在预测期间分配的重命名寄存器(例如,目标地址寄存器和关联寄存器),使得具有非推测目标地址和关联寄存器中的原始值的先前重命名寄存器可见,步骤606。然后,将指令提取重定向到所计算的地址,步骤608。这完成了分支预测检查的一个实现。
[0120] 在一个示例中,可以与分支预测的检查分开地检查关联寄存器的预测。因此,参考图7描述关于由例如处理器检查关联寄存器的预测的进一步细节。在一个示例中,检查关联寄存器的预测的正确性,步骤700。如果关联寄存器预测正确,询问701,则检查完成,步骤702,并且不执行恢复。然而,如果关联寄存器预测不正确,询问701,则执行恢复。例如,清洗在被错误预测的关联寄存器之后的指令(或者被错误预测的关联寄存器的第一用户),步骤
704,并且解除分配在预测期间为关联寄存器分配的重命名寄存器,使得包括非预测的正确关联值的先前重命名寄存器可见,步骤706。然后在清洗点重新开始执行,步骤708。这完成了关联寄存器预测检查的一个示例。
[0121] 在检查预测的一个方面中,所述检查将所述关联寄存器的预测值与在触发所述关联寄存器的预测的指令之前计算的所述关联寄存器的最近值进行比较。在至少一个实施例中,该值存储在重命名寄存器中。
[0122] 在另一实施例中,通过在触发关联寄存器的预测的指令之前将关联寄存器的值复制到被分配为保存关联寄存器的预测值的重命名寄存器,来执行误预测的恢复。在至少一个实施例中,当重新分配重命名寄存器比将正确值复制到分配的重命名寄存器更昂贵时,使用通过恢复一个值的恢复。
[0123] 如本文所描述,基于预测将用于寄存器间接分支的寄存器的内容(例如,值;目标地址),还将用于预测的所预测内容存储(例如,同时地)在将用于寄存器间接分支的寄存器中(除程序计数器之外)以及关联寄存器中,使得所述值可由其它指令使用。这便于处理。
[0124] 在另一方面,提供了一种控制,以指定是否要在预测中使用关联寄存器。此外,如果指示要使用关联寄存器,则控制可以包括要使用的关联寄存器的指示(例如,寄存器号)。该控制例如是代码特定的,并且可以针对每个代码单元(例如应用、进程、模块、函数或动态共享对象(例如库))被启用/禁用。
[0125] 在一个方面,提供了用于预测关联寄存器的一个或多个控制,其中第一代码单元集合受益于关联寄存器值的预测,而第二代码单元集合不受益于关联寄存器值的预测。许多变化是可能的。
[0126] 作为一个示例,在机器状态寄存器(MSR)中提供控制。操作系统为一个代码单元设置MSR控制,而为另一个代码单元禁用MSR控制。在另一实施例中,可以提供页表入口(PTE)控制。例如,PTE中的位控制分支所位于的页面上的分支的关联寄存器的预测或不预测,该页面对应于其地址由PTE转换的页面。在另一实施例中,PTE中的位基于分支的目标地址的页面的位的设置来控制分支的关联寄存器的预测或不预测,分支目标的地址由PTE转换。在又一实施例中,支持混合形式,其中MSR位允许例如考虑PTE中的位集合。许多其它示例是可能的。
[0127] 在PTE控制的一个例子中,PTE中的位由动态加载程序基于程序模块的模块或页面级指示来设置,例如描述模块的特性,诸如用于特定代码段的ABI级。
[0128] 在至少一个实施例中,静态链接器链接模块,以便当功能使用公共ABI级别时将功能分组到公共页面中,而当它们不使用公共ABI级别时将功能分离到单独页面中。
[0129] 在另一个实施例中,模块共享ABI级别,即,单个模块中的代码对应于相同的ABI级别,并且例如通过诸如ELF(可执行可链接格式)幻数(magic number)的模块头部来提供用于该控制的级别和隐含设置。许多示例和变化是可能的。本文描述的示例控制仅是示例。
[0130] 为了方便起见,使用控制来指示是否将关联寄存器预测用于代码单元在本文中被称为外部指示的关联寄存器预测(EIARP)。参考图8描述使用外部指示的关联寄存器预测用于代码单元的一个实施例。在一个示例中,该处理由在计算环境的处理器上执行的操作系统来执行。
[0131] 参考图8,最初,操作系统加载代码单元,诸如应用、进程、模块、函数或动态共享对象等,步骤800。作出关于代码单元(在此称为加载的代码或代码)是否是代码特定的外部指示的关联寄存器预测的候选的确定,步骤802。这可以通过例如检查在代码的头部或幻数中提供的代码的ABI版本或EIARP指示符来确定。
[0132] 如果代码不是外部指示的关联寄存器预测的候选,询问804,则处理完成,步骤810。否则,关联寄存器的指示(例如,寄存器号)被加载到控制寄存器中,步骤806。示例性控制寄存器包括机器状态寄存器(MSR)、程序状态字(PSW)、专用寄存器(SPR)、基于页的页表入口(PTE)、或段表入口(STE),这仅是几个示例。
[0133] 另外,可以设置控制(例如,标志或其他指示符),其启用针对加载的代码的EIARP,步骤808。在一个示例中,在控制寄存器或其他控制字段、诸如在MSR、PSW、SPR、PTE或STE中设置标志或其他指示符。这降低了过度误预测和恢复惩罚的险。
[0134] 在另一实施例中,当询问804基于代码特性(例如,ABI级别)确定代码不是关联寄存器预测的候选时,设置控制以指示代码单元不经受EIARP。
[0135] 在其他实施例中,代码由程序加载器、动态程序加载器、共享库加载器、动态库加载器或适于加载代码的另一系统组件之一加载。
[0136] 在一个实施例中,当存在操作系统的上下文切换时,更新配置(例如,由操作系统),包括代码特定的EIARP。例如,当控制位于不特定地绑定到代码单元的寄存器中、诸如在MSR、SPR或PSW中时,执行由于上下文切换而引起的代码特定的EIARP的更新。在一个示例中,由于PTE被绑定到代码,所以EIARP配置不需要被更新。参考图9描述与代码特定的EIARP相关的上下文切换逻辑的一个实施例。
[0137] 参考图9,基于上下文切换,获得来自被切换出的上下文的控制寄存器的值,步骤900,并将其存储在上下文切换结构中,步骤902。可以执行其他处理,步骤904。另外,获得被切换入的上下文的新值,步骤906,并将其存储到被切换入的上下文的控制寄存器中,步骤
908。
[0138] 在其他实施例中,当最初建立控制寄存器的值时,例如结合图8的技术的处理,将该值存储在应用的上下文结构中,并且在上下文切换处理期间省略了保存代码设置的步骤900和902。其它变化也是可能的。
[0139] 在处理期间,程序可能发生硬件异常(例如,页面错误、浮点异常等),并且经由中断处理切换到操作系统。在一个实施例中,当存在到操作系统的切换时,可以(例如,通过操作系统)禁用配置设置,如参考图10所描述的。
[0140] 在一个例子中,获得被切换出的上下文的控制寄存器的值,步骤1000,并将其存储到异常上下文中,步骤1002。示例性异常上下文例如包括用于System z的低存储器或用于Power Systems的选择寄存器,例如,SRR0/SRR1…或HSRR0/HSRR1…。异常上下文可以包括代码特定的EIARP和/或其它配置信息。在步骤1004,可以执行其他处理。此外,可选地,可将监督员初始化值存储在控制寄存器中,例如存储在MSR、SPR等中,步骤1006。也可执行附加的和/或其它的处理。
[0141] 在处理异常之后,退出硬件异常/中断处理。参考图11描述例如由处理器执行的该处理的一个示例。在一个示例中,从异常上下文获得要恢复的代码特定EIARP和/或其它配置信息,步骤1100,并且将其存储在所选择的控制寄存器(例如,MSR、SPR、PSW等)中,步骤1102。
[0142] 参考图12描述使用具有分支预测的代码特定EIARP的进一步细节。在一个示例中,处理器正在执行该处理。在一个实施例中,预测寄存器间接分支的目标地址,步骤1200,且将指令提取重定向到所预测目标地址,步骤1202。此外,在一个示例中,为保存目标地址的逻辑寄存器分配新的重命名寄存器,步骤1204。将所预测地址复制到分配的重命名寄存器,步骤1206,并且将保存目标地址的重命名寄存器标记为可用,步骤1208。
[0143] 此外,根据本发明的一个方面,作出关于是否针对代码启用EIARP的确定,询问1210。这例如通过检查指示是否要针对代码预测关联寄存器的控制来确定。如果对于该代码未启用EIARP,则处理继续,使得发生分支预测的检查,步骤1220。否则,还为关联寄存器分配新的重命名寄存器,步骤1212。关联寄存器的寄存器号由例如EIARP配置信息确定。此外,将所预测地址复制到为关联寄存器分配的重命名寄存器,步骤1214,并且将关联寄存器的重命名寄存器标记为可用,步骤1216。
[0144] 执行对关联寄存器的预测的检查,以确定关联寄存器预测是否正确,步骤1218。这包括例如将在响应于其而预测关联寄存器的被处理的当前指令之前的架构化值的值与由该当前指令预测的值进行比较。
[0145] 另外,执行分支预测的检查,步骤1220。这里描述检查预测正确性逻辑的示例。还参考下面描述的图14-15描述示例。其它示例也是可能的。
[0146] 在又一方面,作出关于是否可以预测关联注册器的预测。该预测例如基于关联寄存器候选(例如分支指令)的关联状态的动态预测确定。在一个例子中,处理器为可能具有关联寄存器的每个候选分支子例程指令确定关联寄存器的范围。分支指令、特定关联寄存器候选和动态关联确定的启用可以由各种控制寄存器控制,包括MSR位、PTE位、其它控制寄存器或其组合。其还可以包括指定关联或位掩码的候选者的控制寄存器,确定关联的多个候选者。
[0147] 根据一个或多个方面,候选被预测为关联的,并且基于预测器进行预测。在处理器中执行预测的检查。如果预测不正确,则因为关联寄存器不是关联的,所以更新动态的预测器以抑制未来的关联预测。
[0148] 存在多种可用于发现新的动态关联关系的技术。一种这样的技术包括例如当预测器指示非关联(以足够低的比率)时对关联的随机猜测,以识别实际改变的行为或由于另一分支变得占优势的混叠而导致的改变的行为。另一种技术包括例如训练周期,在该训练周期中,操作系统确定强制以固定间隔或响应于所规定的改变来预测新的关联,例如,所规定的改变如利用各种动态运行时监视和指纹获取技术所确定的。其它技术也是可能的。
[0149] 在一个方面,作出关于定义的寄存器(作为示例,静态定义的或在EIARP配置中定义的)是否关联于特定实例(例如,特定分支)的预测。在这个方面,加载代码单元(例如,分支指令),并且定义的寄存器号(例如,R12)在硬件中硬连线或者加载在配置或控制寄存器(例如,MSR、PSW、SPR、PTE、STE等)中。可选地,还设置用于启用对代码单元的预测的标志。
[0150] 如果寄存器号被加载到配置或控制寄存器中,并且不是硬连线的,则基于上下文切换来执行处理,因为每个代码单元可以具有不同的配置信息。参考图9描述该处理的示例。
[0151] 类似地,如果发生硬件异常并且寄存器号不是硬连线的,则可以执行异常处理,如在一个实施例中参考图10和11所述。
[0152] 参考图13描述用于寄存器间接分支的预测技术的一个示例,其还预测定义的寄存器是否是关联的。在一个示例中,处理器正在执行该处理。在一个示例中,最初,预测寄存器间接分支的目标地址,步骤1300,且将指令提取重定向到所预测目标地址,步骤1302。此外,在一个示例中,为保存目标地址的逻辑寄存器分配新的重命名寄存器,步骤1304。将所预测地址复制到分配的重命名寄存器,步骤1306,并且将保存目标地址的重命名寄存器标记为可用,步骤1308。
[0153] 此外,作出关于是否可以预测关联值的确定,询问1310。例如,可以预测关联寄存器吗?如果否,则处理继续,使得分支预测检查发生,步骤1320。否则,在一个实施例中,为被预测的关联寄存器分配新的重命名寄存器,步骤1312。作为示例,关联寄存器的寄存器号可以是硬连线的或者由EIARP配置信息确定。
[0154] 将所预测地址复制到为关联寄存器分配的重命名寄存器,步骤1314,并且将关联寄存器的重命名寄存器标记为可用,步骤1316。
[0155] 执行对关联寄存器的预测的检查以确定预测是否正确,步骤1318,以及执行对分支预测的检查,步骤1320,如这里所述。如果存在误预测,则执行恢复,如参考图14-15所述。在一个示例中,处理器正在执行该处理。
[0156] 在一个或多个实施例中,询问1310可以经受控制覆盖(override)以发现新的关联寄存器。在一个实施例中,询问1310被强制指示训练阶段期间的关联寄存器。训练阶段可以对应于例如在应用程序被加载之后的固定或可配置数目的周期。在另一示例中,训练阶段可以对应于例如在开始训练阶段的指示之后的固定或可配置数目的周期。在一个示例中,训练开始指示可以对应于以固定或可配置的概率随机生成的信号中的一个。在另一示例中,训练开始指示可以对应于自从上一次训练阶段以来经过了指定间隔,例如固定或可配置数目的周期、或者固定或可配置数目的纳秒、微秒、或另一时间单位。在另一实施例中,询问1310指示分支的第一数目的执行的关联寄存器的存在;第一数目是固定的或可配置的。其他实施例可以采用其他已知或未来的技术来训练关联寄存器预测器。
[0157] 现在参考图14,在此示例中,根据定义,如果存在分支误预测,那么也错误预测关联值的预测或与关联值相关的预测。检查包括例如确定分支预测的正确性,步骤1400。如果分支预测正确,询问1401,则检查完成,步骤1402,并且不执行恢复。然而,如果分支预测不正确,询问1401,则执行恢复。举例来说,清洗被错误预测分支之后的指令,步骤1404。这可以包括清洗关联寄存器检查。此外,解除分配在预测期间分配的重命名寄存器,使得先前重命名寄存器可见,步骤1406。这可以包括解除分配目标地址寄存器以及关联寄存器(如果EIARP被启用的话),使得具有非推测目标地址和关联寄存器中的原始值的先前重命名寄存器可见。然后,将指令提取重定向到所计算的地址,步骤1408。这完成了预测检查的一个实现。
[0158] 另外,在一个实施例中,如果EIARP被启用,则可以调用检查以用于关联寄存器预测的正确性,如参考图15所描述的。在一个实施例中,检查关联寄存器预测正确性,步骤1500。如果关联寄存器的预测是正确的,询问1501,则检查完成,步骤1502,并且不执行恢复。然而,如果关联寄存器的预测不正确,询问1501,则执行恢复。举例来说,清洗被错误预测的关联寄存器之后的指令,步骤1504。在另一示例中,在步骤1504处清洗被错误预测的关联寄存器的第一用户。另外,解除分配在预测期间为关联寄存器分配的重命名寄存器,使得包括未预测的正确关联值的先前重命名寄存器可见,步骤1506。然后在清洗点重新开始执行,步骤1508。这完成了关联寄存器预测检查的一个示例。
[0159] 在又一实施例中,如果使用预测器来预测是否可以预测关联值(例如,关联寄存器),则还可以执行与该预测相关的预测器更新,如参照图16所描述的。在一个示例中,处理器正在执行该处理。
[0160] 参考图16,在一个实施例中,检查关联寄存器预测正确性,步骤1600。如果对是否可以预测关联寄存器的预测是正确的,询问1601,则可以更新关联预测器以指示正确的预测,步骤1602,并且不执行恢复。在另一示例中,不需要执行更新。
[0161] 然而,如果对是否可以预测关联寄存器的预测是不正确的,询问1601,则执行恢复。举例来说,清洗被错误预测的关联寄存器之后的指令,步骤1604。在另一实施例中,在步骤1604处清洗被错误预测的关联寄存器的第一用户。另外,解除分配在预测期间为关联寄存器分配的重命名寄存器,使得包括未预测的正确关联值的先前重命名寄存器可见,步骤1606。此外,在一个示例中,更新关联预测器以指示不正确的预测,步骤1608。然后在清洗点重新开始执行,步骤1610。这完成了预测检查的一个实现。
[0162] 在一个替换实施例中,存储在不正确预测的关联寄存器中的值被复制到重命名寄存器中,而不是重新分配重命名寄存器。其它变化是可能的。
[0163] 在另一方面,作出关于寄存器是否关联于特定实例的预测,并且作出关于寄存器号或其他标识的进一步预测。参考图17描述了该处理的一个示例。在一个示例中,处理器正在执行该处理。
[0164] 参看图17,最初,预测寄存器间接分支的目标地址,步骤1700,且将指令获取重定向到所预测目标地址,步骤1702。此外,在一个示例中,为保存目标地址的逻辑寄存器分配新的重命名寄存器,步骤1704。将所预测地址复制到分配的重命名寄存器,步骤1706,并且将保存目标地址的重命名寄存器标记为可用,步骤1708。
[0165] 此外,根据一个方面,作出关于是否可以预测关联值的确定,询问1710。如果不是,则处理继续,使得分支预测检查发生,步骤1726。否则,作出关于是否要选择新的寄存器标识(例如,号码)作为所预测的关联寄存器的确定,询问1712。如果不是,则由例如预测器指示的所预测关联寄存器的指示被选择为关联寄存器,步骤1714;否则,选择另一寄存器(例如,其它寄存器号),步骤1716。此后,为所选择的关联寄存器(例如,具有所选择的寄存器号)分配新的重命名寄存器,步骤1718。
[0166] 将所预测地址复制到所分配的关联寄存器的重命名寄存器,步骤1720,并且将关联寄存器的重命名寄存器标记为可用,步骤1722。
[0167] 执行对关联寄存器的预测的检查以确定与关联寄存器相关的预测是否正确,步骤1724,以及分支预测的检查,步骤1726,如本文所述。
[0168] 在至少一个实施例中,询问1712对应于预测置信度是否超过阈值的测试。预测置信度可以对应于例如1或更多比特的已知置信度值。阈值可以是固定的或软件配置的。
[0169] 还可以执行预测检查以确定所选择关联寄存器是否正确,如参考图18所描述的。在一个示例中,处理器正在执行该处理。在一个实施例中,检查关联寄存器预测正确性,步骤1800。如果所选择关联寄存器的预测是正确的,询问1801,则可以更新关联预测器以指示对被用作关联寄存器的寄存器的正确预测,步骤1802,并且不执行恢复。在另一实施例中,不更新预测器。
[0170] 然而,如果对所选择关联寄存器的预测不正确,询问1801,则执行恢复。举例来说,清洗被错误预测的关联寄存器之后的指令,步骤1804。在另一实施例中,在步骤1804处清洗被错误预测的关联寄存器的第一用户。另外,解除分配在预测期间为关联寄存器分配的重命名寄存器,使得包括未预测的正确关联值的先前重命名寄存器可见,步骤1806。此外,在一个示例中,更新关联预测器以指示将被用作关联寄存器的特定寄存器的不正确预测,步骤1808。然后在清洗点重新开始执行,步骤1810。这完成了关联寄存器预测检查的一个实现。
[0171] 根据另一方面,通过识别指令序列来识别关联寄存器。在一个示例中,该序列包括适于创建关联关系的第一指令和适于执行子例程分支的第二指令。在一个示例中,序列包括:
[0172] mtctr         R12
[0173] bctrl
[0174] 该序列被识别为执行关联创建移动和子例程调用。在一个实施例中,关联创建序列被转换成执行移动的操作的融合序列,并且创建具有关联预测的分支。
[0175] 基于识别上述序列(或类似序列),生成执行移动和分支的操作的融合序列。作为示例,可以例如利用R12硬连线或利用EIARP生成简化序列;或者可以产生包括对预测分支地址的检查的增强融合序列,从而完全消除MTCTR指令的成本。参考图19描述增强序列的一个例子。在一个实施例中,该处理由解码器执行。
[0176] 最初,作出关于是否已经识别融合序列机会的确定,询问1900。例如,作为一个例子,解码器识别出MTCTRL之后是BCTRL吗?如果融合序列机会未被识别,则融合生成处理完成。否则,进行融合生成处理。预测分支目标地址,步骤1902。将目标地址加载到程序计数器(PC)中,使得处理可在目标地址处开始执行,步骤1904。此外,将所预测目标地址加载到CTR寄存器中,步骤1906,以及,将其加载到关联寄存器(例如,R12)中,步骤1908。由于这是子例程调用,因此将返回地址加载到链接寄存器(LR)中,步骤1910。另外,执行对所预测目标地址的检查,步骤1912。在一个例子中,这种检查是针对MTCTR的来源,其是R12的值。
[0177] 在一个示例中,关联寄存器号(例如,R12)被硬连线为关联寄存器。在另一示例中,关联寄存器在控制中、诸如在所选择控制寄存器中指示。在又一示例中,它是基于指令序列(例如,MTCTR之后指定的寄存器号)来动态地确定的。其它示例也是可能的。在一个示例中,利用上述序列,由于预测盖写该值,并且同时检查关联寄存器和预测目标地址,因此不需要执行MTCTR。其它变化是可能的。
[0178] 在一个示例实施例中,图19的技术的操作可以通过生成示例iop序列来表达,诸如:
[0179] mtctr R12
[0180] old ctr=ctr
[0181] update_lr_from_instruction_address+
[0182] predict_indirect_ctr+
[0183] update_pc_from_prediction+
[0184] update_ctr_from_prediction+
[0185] update_affiliated_reg_from_prediction(R12)
[0186] check_target_address(old_ctr)
[0187] 在另一个实施例中,抑制R12的拷贝,产生简化的iop序列:
[0188] old_affiliated=R12+
[0189] update_lr_from_instruction_address+
[0190] predict_indirect_ctr+
[0191] update_pc_from_prediction+
[0192] update_ctr_from_prediction+
[0193] update_affiliated_reg_from_prediciton(R12)
[0194] check_target_address(old_affiliated)
[0195] 在各种实施例中,预测iop生成单个预测,该单个预测可以用于更新程序计数器(即PC-从其提取指令的地址)、分支目标寄存器(在该示例中为ctr)和关联寄存器(在该示例中为R12)。在此特定实施例中,预测iop还适于在用预测进行更新之前捕获PC,以便捕获例如链接寄存器(LR)中的子例程返回地址。在另一个实施例中,在链接寄存器(LR)中捕获PC可以由单独的iop来执行。
[0196] 在这些示例中,+用于指示在单个iop中多个操作的执行,描述性组件由+标记连接。例如,update_pc_from_prediction用预测器预测的地址更新程序计数器(PC)。
[0197] 在具有外部指示的关联寄存器的一个实施例中,融合序列的识别是基于识别包括配置寄存器中指示的寄存器的序列。在检测基于融合的关联序列之前,使用控制寄存器来指示相关寄存器,以便从外部指示要识别的关联寄存器序列。参考图20描述例如由处理器执行的该处理的一个示例。在另一实施例中,建立关联寄存器关系并包括关联寄存器号的序列在处理器逻辑中是固定的(或"硬连线的"),并且在这样的实施例中不执行图20的技术。
[0198] 参考图20,最初,加载代码(例如包含建立关联寄存器关系的一个或多个可融合序列的代码),步骤2000。此外,加载对应于可能出现在要识别的关联生成序列中的寄存器的寄存器号,步骤2010。此外,可选地,设置标志以启用EIARP,步骤2020。由于仅转换被识别为建立关联寄存器关系的序列,所以不存在过度误预测的风险,因此在一个或多个实施例中可以不存在启用或禁用关关联寄存器预测的设施。在其他实施例中,例如在关联寄存器预测逻辑的不正确实现的情况下,可以提供用于启用或禁用关联寄存器的值的预测的标志作为安全特征。其它变化也是可能的。其它变化也是可能的。
[0199] 如果要用作关联寄存器的寄存器不是硬连线的,而是在控制中指示的,则存储包括关联寄存器的指示的配置信息,以便以后基于上下文切换来恢复。以上参考图9描述了该处理的一个实施例。类似地,如果发生硬件异常,则执行处理,如参考图10-11所述。然而,如果寄存器号是硬连线的,则该处理是可选的。
[0200] 参考图21描述具有基于融合的关联序列的分支预测的一个实施例。在一个示例中,处理器正在执行该处理。
[0201] 参照图21,执行融合机会检测步骤,步骤2100。例如,解码器检查MTCTR Rx/BCTRL的序列,其中Rx对应于可以检测到与分支目标地址的关联关系的寄存器。在一个示例序列中,寄存器Rx可对应于寄存器R12。基于对可被融合的关联创建序列执行检测步骤,作出关于是否检测到这样的融合序列机会的确定,询问2102。也就是说,在该码流中存在MTCTR Rx和BCTRL的序列吗?并且MTCTR的Rx是否与预期的寄存器号匹配,例如硬连线的关联寄存器号,或者在一个控制、例如EIARP控制中提供的号码?如果没有检测到融合序列机会,则执行常规处理,步骤2104。否则,处理继续,预测寄存器间接分支的目标地址,步骤2106,且将指令提取重定向到所预测的目标地址,步骤2108。此外,在一个示例中,为保存目标地址的逻辑寄存器分配新的重命名寄存器,步骤2110。将所预测地址复制到分配的重命名寄存器,步骤2112,并且将保存目标地址的重命名寄存器标记为可用,步骤2114。
[0202] 另外,为关联寄存器(例如,在关联创建融合序列中指定的寄存器Rx)分配新的重命名寄存器,步骤2116。将所预测地址复制到为该关联寄存器分配的重命名寄存器,步骤2118,并且将该关联寄存器的重命名寄存器标记为可用,步骤2120。
[0203] 执行对所预测地址的预测的检查以确定预测是否正确,步骤2122。这包括例如将目标地址与融合序列之前关联寄存器(Rx)的值进行比较(例如使用其先前重命名寄存器)。如果预测不正确,则执行恢复,如本文所述。参考图14描述这种恢复的一个示例。
[0204] 在进一步的实施例中,关联寄存器号由序列本身确定(例如,在MTCTR之后指定的寄存器号),而不是硬连线的或由控制(即,EIARP)提供。在一个这样的示例实施例中,询问2102检查在码流中是否存在MTCTR RX和BCTRL的序列。如果序列存在,则序列中指定的特定寄存器RX用作关联寄存器。在一个这样的实施例中,诸如图8或图20的代码加载和EIARP配置技术不是必需的,并且关联寄存器预测可以结合传统的代码加载技术来操作。此外,在至少一个实施例中,不需要保存关于上下文切换的关联寄存器信息和/或执行硬件异常处理,并且关联寄存器预测可以结合传统的上下文切换序列和硬件异常处理来操作。
[0205] 在上述指令序列的例子中,MTCTR和BCTRL指令是按顺序次序的。然而,根据另一方面,即使指令不是按顺序次序,也预测关联关系。例如,假设以下代码:
[0206] mtctr                 R12
[0207]
[0208] Bctrl
[0209] 上述代码被识别为执行关联创建移动和子例程调用。因此,基于识别创建关联的指令(例如,MTCTR),设置指示符。指示符还可以指定关联寄存器的号码(或其他指示)。然后,当识别出破坏该关联的操作时(例如,改变CTR的内容,或者作为MTCTR源的寄存器),重置该指示符。当遇到BCTRL时,如果关联指示是活动的,则将其指示为具有关联寄存器的分支,进一步可选地指示所关联的寄存器号。
[0210] 参照图22描述与基于动态运行时控制分析确定关联相关的处理的一个实施例。在一个示例中,处理器正在执行该处理。对指令流序列的每个指令执行图22的技术,以识别寄存器到分支的分支目标寄存器的关联,识别应当为其预测关联寄存器的分支,以及关联寄存器的寄存器号。将所检测的关联关系从针对一个指令执行图22的技术传递到针对下一指令执行此技术,直到取消关联或检测到寄存器间接分支为止,其中将结合所述寄存器间接分支来执行关联寄存器的值的预测。在一个示例中,该处理由指令解码器执行。
[0211] 参考图22,在一个实施例中接收指令,步骤2200,并且对指令进行解码,步骤2202。作出关于该指令是否是关联创建指令、诸如MTCTR的确定,询问2204。如果是关联创建指令,则取消任何先前关联,并记录新的关联(例如设置指示符),步骤2206。然而,如果该指令不是关联创建指令,则进一步作出关于该指令是否是关联破坏指令(例如,分别盖写关联关系的源或目标的指令,例如,建立关联的MTCTR的源寄存器或计数寄存器CTR)的确定,询问
2208。如果是关联破坏指令,则取消关联(例如,重置指示符),步骤2210。
[0212] 如果指令不是关联创建或关联破坏指令,则该处理继续到询问2212,其测试当前指令是否是寄存器间接分支指令,以及关联当前是否活动。如果询问2212是肯定的,则已经检测到具有关联寄存器的寄存器间接分支指令,并且控制传递到步骤2214。否则,对于当前指令,该技术结束。
[0213] 在步骤2214,当寄存器间接分支目标寄存器(诸如计数器寄存器,ctr)和另一寄存器之间的关联关系是活动的时,检测到寄存器间接分支指令。为了有助于所检测出的关联寄存器的值的预测,与分支指令联动地指示关联寄存器的存在,并记录关联寄存器的寄存器号,从而有助于与当前分支的分支处理联动地预测关联寄存器的值。图22的技术对于当前指令终止。
[0214] 当图22的技术对于处理器正在处理的一个指令完成时(例如,在步骤2206、2210、2212或2214之后),对下一个取出的指令执行处理。记录的关联信息从图22的技术的一次执行传递到指令流中的下一指令的下一次执行。
[0215] 基于根据步骤2214确定关联创建移动和随后分支的序列,即使它们可能被一个或多个其他指令分开,如上所述,基于关联创建移动和分支生成融合序列。作为示例,除了如参考图14所描述的恢复之外,还可以执行图19以及图20-21的处理。在一个或多个实施例中,也可以执行与融合和/或预测分支一起描述的其他处理。
[0216] 如本文所述,在一个实施例中,为了避免执行从计数器指令移动MFCTR(其将值从CTR移动到所选择寄存器(例如,R12))的成本,当预测CTR值时,ABI可指定CTR的值存在于通用寄存器(例如,寄存器R12,根据Power架构的已知ELFv2 ABI)中,且当根据本发明的一方面检测到对应于ABI函数调用序列的序列时,由处理器将预测值写入CTR和所选择寄存器(例如,R12),其中所述ABI函数调用序列使用关联寄存器(例如,R12)将被调用函数的地址传送到被调用函数。
[0217] 此所选择寄存器在这里称为关联寄存器。在一个示例中,根据公知的ABI规范,例如Power架构的ELF v2 ABI,使用所选择寄存器的值来确定另一个值,例如指向内容表(TOC)或全局偏移表(GOT)的指针。该另一值存储在另一所选择寄存器、例如R2中。例如,通过将偏移加到所选择寄存器(例如,R12)中的值来获得另一个所选择寄存器R2的值。然后,使用该另一个所选择寄存器(例如R2)的值,例如作为指向TOC或GOT的指针,这提供了对变量的访问。特别地,编译器从源代码生成目标代码,而不知道代码/数据的最终地址或位移。具体地,编译器生成目标代码,该目标代码将访问变量地址参考数据结构(例如,全局偏移表或内容表(TOC))以得到变量值,而不知道数据结构的最终大小或各种数据段的偏移/地址。用于该信息的占位符被留在目标代码中并由链接器更新。
[0218] 由于关联寄存器(例如,R12)的值正在被预测,并且偏移是已知的或可确定的,因此根据一个方面,另一所选择寄存器的值被预测为关联派生值。
[0219] 在一个实现中,关联派生值的配置和处理类似于关联值的配置和处理。例如,关联派生值的指示(例如,寄存器号,诸如R2)可以被硬连线或者存储在控制寄存器或者其他控制字段中,诸如MSR、SPR、PSW、PTE、STE等。此外,如果代码是EIARP的候选,则可以加载关联派生寄存器的寄存器号(例如,图8的步骤806)。作为进一步的示例,该值可以如参考图9的一个示例中所描述的那样在上下文切换中存储和恢复,并且如参考图10-11的一个示例中所描述的那样被包括在异常处理中。它也可以包括在本文描述的其他关联寄存器和/或寄存器间接分支预测处理中。
[0220] 参考图23描述用于寄存器间接分支的预测技术的一个示例,该寄存器间接分支还预测关联派生寄存器。在一个示例中,处理器正在执行该处理。最初,执行与寄存器间接分支和关联值预测相关的处理,步骤2300。这可以包括多个操作,包括例如:预测寄存器间接分支的目标地址;将所述指令提取重定向到所预测目标地址;为保持目标地址的逻辑寄存器分配新的重命名寄存器;将所预测地址复制到分配的重命名寄存器;将保存目标地址的重命名寄存器标记为可用;为关联寄存器分配新的重命名寄存器;将所预测地址复制到为关联寄存器分配的重命名寄存器;将关联寄存器的重命名寄存器标记为可用;以及执行一个或多个预测检查,如在一个示例中参考图5所描述的。
[0221] 除了其中执行上述操作中的一个或多个的上述处理之外,作出关于预测器是否预测关联派生寄存器的确定,询问2302。在一个例子中,这是基于识别表示GOT的使用的指令序列。在进一步的示例中,控制寄存器中的一个或多个控制可以用于预测是否要预测派生关联寄存器的值。其他示例也是可能的。
[0222] 如果预测器没有预测关联派生寄存器,则该处理完成。在一个示例中,当代码分支到计算派生值的序列时,在执行期间执行动态习语识别。例如在代码执行期间动态地识别计算派生值的序列,并且更新预测器以指示这一点。
[0223] 否则,如果预测器预测了关联派生值,则在一个示例中,获得派生值的偏移,步骤2304。该偏移可以使用各种技术来获得,包括使用查找表、访问指令流或使用预测器,作为示例。许多技术是可能的。此外,例如通过将偏移与在步骤2300中获得的关联寄存器的预测值相加,来计算关联派生寄存器的值,步骤2306。
[0224] 为关联派生寄存器分配新的重命名寄存器,步骤2308。将所计算的值复制到关联派生寄存器的所分配的重命名寄存器,步骤2310,并且将关联派生寄存器的重命名寄存器标记为可用,步骤2312。
[0225] 可以执行关联派生寄存器的预测的检查,以确定预测是否正确,步骤2314。参考图24描述与包括检查关联派生寄存器的预测检查相关的进一步细节。这可以在例如分支预测检查和/或关联寄存器预测检查之外执行。在一个示例中,处理器正在执行该处理。
[0226] 参考图24,在一个示例中,检查关联派生预测的正确性,步骤2400。如果预测正确,询问2401,则检查完成,步骤2402,并且不执行恢复。然而,如果预测不正确,询问2401,则执行恢复。例如,清洗函数入口之后的指令,步骤2404。此外,解除分配在预测期间分配的重命名寄存器,包括用于关联派生值的重命名寄存器,步骤2406。另外,指令提取然后被重定向以重新执行关联派生寄存器(例如,R2)和后续指令的计算,步骤2408。这完成了预测检查的一个实现。
[0227] 在其他实现方式中,可以预测关联派生寄存器的指示(例如寄存器号)。因此,如本文所述,针对关联寄存器执行处理,以预测指示、使用预测、检查正确性,例如通过将关联派生寄存器的预测值与由指令流中非预测性地计算值的指令序列所计算的值进行比较和/或从其恢复。许多变化是可能的。
[0228] 在另一方面中,可响应于检测到一个或多个指令序列而确定关联派生寄存器的存在及所述寄存器的特定寄存器号。例如,解码逻辑识别出以下代码序列:
[0229]
[0230] 在上述代码中,addis是例如根据一个示例实施例中的Power架构的定义的加立即移位(add immediate shift);addi是例如根据一个示例实施例中的Power架构的定义的立即加(add immediate);Rx是关联寄存器(例如,R12);以及Ry是关联派生寄存器(例如,R2)。
[0231] 基于识别上述序列(或类似序列;根据各种示例实施例,不同的序列是可能的,并且硬件实现可以识别可能的序列中的一个或多个),生成执行移动、分支和计算派生值的融合序列。作为示例,可以例如利用在控制寄存器中硬连线或指定的关联寄存器(例如,R12)和关联派生寄存器(例如,R2)来生成简化的融合序列;或者可以生成增强的融合序列,其包括对照原始关联寄存器检查所预测的分支地址,完全消除MTCTR的成本。在一个实施例中,该处理由解码器执行,并且包括例如:
[0232] predict target address(预测目标地址)
[0233] PC<=predicted target address(PC<=所预测目标地址)
[0234] CTR<=predicted target address(CTR<=所预测目标地址)
[0235] Rx<=predicted target address(Rx<=所预测目标地址)
[0236] Ry<=predicted target address+offset(Ry<=所预测目标地址+偏移)[0237] return address(返回地址)
[0238] check predicted target address against Rx(对照Rx检查所预测目标地址)[0239] 在一个示例中,关联寄存器号(例如,R12)和/或关联派生寄存器号(例如,R2)分别被硬连线为关联寄存器和关联派生寄存器。在另一示例中,在控制中,诸如在所选择控制寄存器中,指示关联寄存器和/或关联派生寄存器号。在又一示例中,它们是基于指令序列来动态地确定的(例如,MTCTR之后指定的寄存器号或在addis或addi中提供的寄存器号)。其他示例也是可能的。
[0240] 参考图25描述了关于具有基于融合的关联派生序列的寄存器间接分支的预测技术的进一步细节。在一个示例中,处理器正在执行该处理。在一个实施例中,执行融合机会检测步骤,步骤2500。例如,解码器对MTCTR Rx/BCTRL./ADDIS/ADDI序列进行检查。基于执行检测步骤,作出关于是否检测到这种融合序列机会的确定,询问2502。也就是说,在该码流中存在MTCTR、BCTRL、ADDIS和ADDI的序列吗?MTCTR的Rx与预期的寄存器号、例如硬连线的关联寄存器号或者在控制中提供的号码匹配吗?如果未检测到融合序列机会,则执行常规处理,步骤2504。否则,在一个示例中,处理继续,预测寄存器间接分支的目标地址,步骤2506,且将指令提取重定向到所预测的目标地址,步骤2508。此外,在一个示例中,为保存目标地址的逻辑寄存器分配新的重命名寄存器,步骤2510。将所预测地址复制到分配的重命名寄存器,步骤2512,并且将保存目标地址的重命名寄存器标记为可用,步骤2514。
[0241] 此外,还为关联寄存器(例如Rx,诸如R12)分配新的重命名寄存器,步骤2516。将所预测地址复制到为关联寄存器分配的重命名寄存器,步骤2518,并且将关联寄存器的重命名寄存器标记为可用,步骤2520。
[0242] 另外,还为关联派生寄存器(例如,Ry,诸如R2)分配新的重命名寄存器,步骤2522。将偏移添加到所预测地址,并且将结果存储在为关联派生寄存器分配的重命名寄存器中,步骤2524。关联派生寄存器的重命名寄存器被标记为可用,步骤2526。
[0243] 执行对所预测地址的预测的检查以确定预测是否正确,步骤2528。这包括例如将目标地址与融合序列之前关联寄存器(Rx)的值进行比较(例如使用其先前重命名寄存器)。在一个示例中,如本文所述,如果预测不正确,则执行恢复。这完成了该处理的一个实施例。
[0244] 在其他实施例中,如本文所述,也可以执行其他预测检查。
[0245] 本发明的一个或多个方面不可分地依赖于计算机技术,并便于计算机内的处理,从而提高其性能。参考图26A-26B描述了与本发明的一个或多个方面相关的便于计算环境内的处理的一个实施例的进一步细节。
[0246] 参考图26A,在一个实施例中,使用计算环境的处理器来预测要在寄存器间接分支中使用的预测值(2600)。将预测值存储在计算环境的一个或多个指令可访问的所选择位置(例如,硬件寄存器)中(2602)。该存储与寄存器间接分支的处理同时执行(2604)。此外,所选择位置是除了用于存储指令地址的另一位置(例如,PC)之外的位置(2605)。将预测值用在包括寄存器间接分支的推测处理中(2606)。作为示例,预测值包括要由指令提取使用的目标地址(2608),并且该使用包括将指令提取重定向到目标地址(2610)。
[0247] 在另一方面,作出关于预测值是否准确的确定(2612)。基于确定预测值是不准确的,执行恢复(2614)。恢复可以以多种方式执行。在一个示例中,恢复包括例如清洗在该使用之后执行的一个或多个指令(2616),以及用非预测值替换预测值(2618)。作为一个示例,该替换包括使用一个或多个重命名寄存器来提供非预测值(2620)。
[0248] 此外,在一个示例中,参考图26B,存储包括分配寄存器以保存预测值(2622),以及将预测值复制到被分配以保存预测值的寄存器(2624)。
[0249] 在一个特定示例中,所述寄存器是为被指派以保存所述预测值的逻辑寄存器分配的重命名寄存器(2626)。另外,在一个示例中,重命名寄存器被标记为可用(2628)。
[0250] 本发明的一个或多个方面有利地用于加速指令序列。根据Power架构的一个实施例,下面提供的序列可被有效地执行,其中当经由计数器间接分支进入函数时,计数器寄存器被用于初始化GOT基址。
[0251] 因此,如下所示,当执行寄存器间接或模块外部调用时,以及当计数器(CTR)寄存器已经用要调用的函数的目标寄存器初始化时,调用者可以调用子例程:
[0252] bctrl
[0253] 根据一个实施例,ABI定义了具有两个入口点的函数,一个入口点用于计数寄存器(ctr)-当GOT指针要被初始化时来自模块外部调用者和寄存器-间接调用的间接调用,一个入口点用于当GOT指针不被初始化时来自本地调用者:
[0254]
[0255] 有利地,加载计数寄存器的值的MFCTR指令可以立即提供CTR的预测推测值,使得随后的addis和addi序列能够计算GOT指针作为访问全局变量的寄存器,并且使得全局变量访问能够继续进行,否则这将延迟子例程主体的处理。
[0256] 在另一实施例中,例如,根据System/360指令集,可使用寄存器间接调用来执行子例程调用,且可仅存在单个入口点。
[0257] 其他类型的计算环境也可以结合并使用本发明的一个或多个方面,包括但不限于仿真环境,其示例参考图27A进行描述。在此示例中,计算环境20包括:例如,本机中央处理单元(CPU)22、存储器24,以及经由例如一个或多个总线28和/或其他连接而彼此耦接的一个或多个输入/输出设备和/或接口26。作为示例,计算环境20可包括:由纽约阿蒙克市的国际商业机器公司提供的PowerPC处理器或Power服务器,和/或基于由国际商业机器公司、因特尔或其他公司提供的架构的其他机器。
[0258] 本机中央处理单元22包括一个或多个本机寄存器30,诸如,在环境内的处理期间使用的一个或多个通用寄存器和/或一个或多个专用寄存器。这些寄存器包括表示在任何特定时间点的环境状态的信息。
[0259] 此外,本机中央处理单元22执行存储在存储器24中的指令和代码。在一个特定示例中,中央处理单元执行存储在存储器24中的仿真器代码32。该代码使得在一个架构中配置的计算环境能够仿真另一种架构。例如,仿真器代码32允许基于不同于z/架构的架构的机器(诸如,PowerPC处理器、pSeries服务器或其他服务器或处理器)仿真z/架构并执行基于z/架构开发的软件和指令。
[0260] 参考图27B描述与仿真器代码32有关的进一步细节。存储在存储器24中的访客指令40包括被开发为在不同于本机CPU 22的架构的架构中执行的软件指令(例如,与机器指令相关)。例如,访客指令40可能已经被设计为在z/架构处理器上执行,但是相反地,其在可以是例如英特尔处理器的本机CPU 22上进行仿真。在一个示例中,仿真器代码32包括指令提取例程42,以从存储器24获得一个或多个访客指令40,并且可选地为所获得的指令提供本地缓冲。它还包括指令转换例程44,以确定所获得的访客指令的类型,并将访客指令转换成一个或多个对应的本机指令46。该转换包括:例如,识别将要由访客指令执行的功能,并选择执行该功能的本机指令。
[0261] 另外,仿真器代码32包括仿真控制例程48以使本机指令被执行。仿真控制例程48可使本机CPU 22执行仿真一个或多个先前所获得的访客指令的本机指令的例程,并且在这种执行结束时,将控制返回到指令提取例程以仿真下一个访客指令或访客指令组的获得。本机指令46的执行可包括:将数据从存储器24加载到寄存器中;将数据从寄存器存储回存储器;或者执行如由转换例程确定的某种类型的算术或逻辑运算。
[0262] 每个例程例如以软件实现,该软件存储在存储器中并由本机中央处理单元22执行。在其他示例中,一个或多个例程或操作以固件、硬件、软件或它们的一些组合实现。所仿真处理器的寄存器可使用本机CPU的寄存器30或通过使用存储器24中的位置来仿真。在实施例中,访客指令40、本机指令46和仿真器代码32可驻留在同一存储器中或可分配在不同的存储器设备中。
[0263] 如本文中所使用的,固件包括例如处理器的微代码或毫代码(millicode)。例如,其包括用于实现更高级机器代码的硬件级指令和/或数据结构。在一个实施例中,固件可包括例如通常作为微代码传送的专有代码,其包括特定于底层硬件的可信软件或微代码,并控制对系统硬件的操作系统访问。
[0264] 已获得、转换并执行的访客指令40例如是本文中描述的指令中的一个或多个指令。将具有一种架构(例如,z/架构)的指令从存储器中提取、转换并表示为一系列的具有另一种架构(例如,PowerPC、pSeries、Intel等)的本机指令46。然后可执行这些本机指令。
[0265] 一个或多个方面可涉及云计算。
[0266] 首先应当理解,尽管本公开包括关于云计算的详细描述,但其中记载的技术方案的实现却不限于云计算环境,而是能够结合现在已知或以后开发的任何其他类型的计算环境而实现。
[0267] 云计算是一种服务交付模式,用于对共享的可配置计算资源池进行方便、按需的网络访问。可配置计算资源是能够以最小的管理成本或与服务提供者进行最少的交互就能快速部署和释放的资源,例如可以是网络、网络带宽、服务器、处理、内存、存储、应用、虚拟机和服务。这种云模式可以包括至少五个特征、至少三个服务模型和至少四个部署模型。
[0268] 特征包括:
[0269] 按需自助式服务:云的消费者在无需与服务提供者进行人为交互的情况下能够单方面自动地按需部署诸如服务器时间和网络存储等的计算能力。
[0270] 广泛的网络接入:计算能力可以通过标准机制在网络上获取,这种标准机制促进了通过不同种类的瘦客户机平台或厚客户机平台(例如移动电话、膝上型电脑、个人数字助理PDA)对云的使用。
[0271] 资源池:提供者的计算资源被归入资源池并通过多租户(multi-tenant)模式服务于多重消费者,其中按需将不同的实体资源和虚拟资源动态地分配和再分配。一般情况下,消费者不能控制或甚至并不知晓所提供的资源的确切位置,但可以在较高抽象程度上指定位置(例如国家、州或数据中心),因此具有位置无关性。
[0272] 迅速弹性:能够迅速、有弹性地(有时是自动地)部署计算能力,以实现快速扩展,并且能迅速释放来快速缩小。在消费者看来,用于部署的可用计算能力往往显得是无限的,并能在任意时候都能获取任意数量的计算能力。
[0273] 可测量的服务:云系统通过利用适于服务类型(例如存储、处理、带宽和活跃用户帐号)的某种抽象程度的计量能力,自动地控制和优化资源效用。可以监测、控制和报告资源使用情况,为服务提供者和消费者双方提供透明度。
[0274] 服务模型如下:
[0275] 软件即服务(SaaS):向消费者提供的能力是使用提供者在云基础架构上运行的应用。可以通过诸如网络浏览器的瘦客户机接口(例如基于网络的电子邮件)从各种客户机设备访问应用。除了有限的特定于用户的应用配置设置外,消费者既不管理也不控制包括网络、服务器、操作系统、存储、乃至单个应用能力等的底层云基础架构。
[0276] 平台即服务(PaaS):向消费者提供的能力是在云基础架构上部署消费者创建或获得的应用,这些应用利用提供者支持的程序设计语言和工具创建。消费者既不管理也不控制包括网络、服务器、操作系统或存储的底层云基础架构,但对其部署的应用具有控制权,对应用托管环境配置可能也具有控制权。
[0277] 基础架构即服务(IaaS):向消费者提供的能力是消费者能够在其中部署并运行包括操作系统和应用的任意软件的处理、存储、网络和其他基础计算资源。消费者既不管理也不控制底层的云基础架构,但是对操作系统、存储和其部署的应用具有控制权,对选择的网络组件(例如主机防火墙)可能具有有限的控制权。
[0278] 部署模型如下:
[0279] 私有云:云基础架构单独为某个组织运行。云基础架构可以由该组织或第三方管理并且可以存在于该组织内部或外部。
[0280] 共同体云:云基础架构被若干组织共享并支持有共同利害关系(例如任务使命、安全要求、政策和合规考虑)的特定共同体。共同体云可以由共同体内的多个组织或第三方管理并且可以存在于该共同体内部或外部。
[0281] 公共云:云基础架构向公众或大型产业群提供并由出售云服务的组织拥有。
[0282] 混合云:云基础架构由两个或更多部署模型的云(私有云、共同体云或公共云)组成,这些云依然是独特的实体,但是通过使数据和应用能够移植的标准化技术或私有技术(例如用于云之间的负载平衡的云突发流量分担技术)绑定在一起。
[0283] 云计算环境是面向服务的,特点集中在无状态性、低耦合性、模块性和语意的互操作性。云计算的核心是包含互连节点网络的基础架构。
[0284] 现在参考图28,描绘了示意性的云计算环境50。如图所示,云计算环境50包括云的消费者使用本地计算设备可以与其通信的一个或多个计算节点10,本地计算设备例如是个人数字助理(PDA)或蜂窝电话54A、台式计算机54B、膝上型计算机54C和/或汽车计算机系统54N。节点10可以彼此通信。它们可以在一个或多个网络中物理地或虚拟地分组(未示出),例如如上所述的私有云、共同体云、公共云或混合云、或其组合。这样,云的消费者无需维护本地计算设备上的资源就能够允许云计算环境50提供基础架构即服务、平台即服务和/或软件即服务。应该理解,图28中所示的计算设备54A-N的类型仅仅是示意性的,而计算节点
10和云计算环境50可以(例如,使用网络浏览器)通过任何类型的网络和/或网络可寻址连接与任何类型的计算设备通信。现在参考图29,示出了由云计算环境50(图28)提供的一组功能抽象层。应该事先理解图29中所示的组件、层和功能仅仅是示意性的,并且本发明的实施例不限于此。如图所示,提供了以下层和相应的功能:
[0285] 硬件和软件层60包括硬件和软件组件。硬件组件的示例包括主机61;基于RISC(精简指令集计算机)架构的服务器62;服务器63;刀片服务器64;存储设备65;网络和网络组件66。在一些实施例中,软件组件包括网络应用服务器软件67和数据库软件68。
[0286] 虚拟层70提供抽象层,从该抽象层可以提供以下虚拟实体的示例:虚拟服务器71;虚拟存储72;虚拟网络73(包括虚拟私有网络);虚拟应用和操作系统74;和虚拟客户端75。
[0287] 在一个示例中,管理层80可以提供下面描述的功能。资源供应功能81提供用于在云计算环境内执行任务的计算资源和其他资源的动态获取。计量和定价功能82在云计算环境内对资源的使用进行成本跟踪,并且提供用于消费这些资源的帐单或发票。在一个示例中,这些资源可以包括应用软件许可。安全功能为云的消费者和任务提供身份认证,以及为数据和其他资源提供保护。用户户功能83为消费者和系统管理员提供对云计算环境的访问。服务水平管理功能84提供云计算资源的分配和管理,以满足所需的服务水平。服务水平协议(SLA)计划和履行功能85为根据SLA预测的对云计算资源未来需求提供预先安排和供应。
[0288] 工作负载层90提供可以利用云计算环境的功能的示例。可以从该层提供的工作负载和功能的示例包括:地图绘制与导航91;软件开发和生命周期管理92;虚拟教室的教学提供93;数据分析处理94;交易处理95;和寄存器处理96。
[0289] 本发明可以是任何可能的技术细节集成级别的系统、方法和/或计算机程序产品。该计算机程序产品可以包括一个计算机可读存储介质(或多个计算机可读存储介质),其上具有计算机可读程序指令,用于使处理器执行本发明的各方面。
[0290] 计算机可读存储介质可以是有形设备,其可以保留和存储指令以供指令执行设备使用。计算机可读存储介质可以是例如但不限于电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或前述的任何合适组合。计算机可读存储介质的更具体示例的非详尽列表包括以下内容:便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式光盘只读存储器(CD-ROM)、数字通用光盘(DVD)、记忆棒、软盘、诸如在其上记录有指令的打孔卡或凹槽内凸起结构的机械编码装置、以及前述的任何合适的组合。这里使用的计算机可读存储介质不应被解释为瞬时信号本身,诸如无线电波或其他自由传播的电磁波、通过波导或其他传输介质传播的电磁波(例如,通过光纤电缆传递的光脉冲)或通过电线传输的电信号
[0291] 本文描述的计算机可读程序指令可以从计算机可读存储介质下载到相应的计算/处理设备,或者经由网络(例如,因特网,局域网,广域网和/或无线网络)下载到外部计算机或外部存储设备。网络可以包括传输电缆、光传输光纤、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口从网络接收计算机可读程序指令,并转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。
[0292] 用于执行本发明的操作的计算机可读程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、集成电路配置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括诸如Smalltalk,C++等的面向对象的编程语言,以及诸如“C”编程语言或类似编程语言的过程编程语言。计算机可读程序指令可以完全在用户的计算机上执行、部分地在用户计算机上执行、作为独立的软件包执行、部分地在用户计算机上并且部分地在远程计算机上执行、或完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可以通过任何类型的网络(包括局域网(LAN)或广域网(WAN))连接到用户的计算机,或者,可以连接到外部计算机(例如,利用互联网服务提供商来通过互联网连接)。在一些实施例中,包括例如可编程逻辑电路现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA)的电子电路可以通过利用计算机可读程序指令的状态信息来个性化定制电子电路,该电子电路执行计算机可读程序指令,以便执行本发明的各方面。
[0293] 本文参考根据本发明的实施例的方法、装置(系统)和计算机程序产品的流程图图示和/或框图来描述本发明的各方面。将理解,流程图图示和/或框图中的每个框以及流程图图示和/或框图中的框的组合可以由计算机可读程序指令实现。
[0294] 这些计算机可读程序指令可以被提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器来生产出机器,以使得通过计算机的处理器或其他可编程数据处理装置执行的指令创建用于实现流程图和/或一个框图块或多个框图块中所指定的功能/动作的装置。这些计算机可读程序指令还可以存储在计算机可读存储介质中,这些计算机可读程序指令可以使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,以使得具有存储在其中的指令的计算机可读存储介质包括制品,该制品包括实现流程图和/或一个框图块或多个框图块中指定的功能/动作的各方面的指令。
[0295] 计算机可读程序指令还可以被加载到计算机,其他可编程数据处理装置或其他设备上,以使得在计算机、其他可编程装置或其他设备上执行一系列操作步骤,以产生计算机实现的过程,这样在计算机、其他可编程装置或其他设备上执行的指令实现在流程图和/或一个框图块或多个框图块中指定的功能/动作。
[0296] 附图中的流程图和框图示出根据本发明的各种实施例的系统,方法和计算机程序产品的可能实施方式的体系结构,功能和操作。在这方面,流程图或框图中的每个框可以表示模块、程序段或指令的一部分,其包括用于实现指定的逻辑功能的一个或多个可执行指令。在一些替代实施方式中,框中所标注的功能可以不按图中所示的顺序发生。例如,连续示出的两个框实际上可以基本上并行地执行,或者这些框有时可以以相反的顺序执行,这取决于所涉及的功能。还应注意,框图和/或流程图图示中的每个框以及框图和/或流程图图示中的框的组合可以由执行特定功能或动作,或执行专用硬件和计算机指令的组合的专用的基于硬件的系统来实现。
[0297] 除了上述之外,可以由提供客户环境管理的服务提供商提供、给予、部署、管理、服务一个或多个方面。例如,服务提供商可以创建、维护、支持计算机代码和/或为一个或多个客户执行一个或多个方面的计算机基础设施。作为回报,服务提供商可以例如根据订阅和/或费用协议从客户接收付款。附加地或替代地,服务提供商可以从向一个或多个第三方销售广告内容来接收付款。
[0298] 在一方面中,可以部署应用以执行一个或多个实施例。作为一个示例,应用的部署包括提供可操作以执行一个或多个实施例的计算机基础结构。
[0299] 作为另一方面,可以部署计算基础设施,包括将计算机可读代码集成到计算系统中,其中与计算系统结合的代码能够执行一个或多个实施例。
[0300] 作为又一方面,可以提供一种用于集成计算基础设施的过程,包括将计算机可读代码集成到计算机系统中。该计算机系统包括计算机可读介质,其中该计算机介质包括一个或多个实施例。与计算机系统结合的代码能够执行一个或多个实施例。
[0301] 尽管以上描述了各种实施例,但这些仅是示例。例如,具有其他架构的计算环境可用于合并和使用一个或多个实施例。此外,可以使用不同的指令或操作。另外,可以使用不同的寄存器和/或可以指定其他类型的指示(除寄存器号之外)。多个变化是可能的。
[0302] 此外,其他类型的计算环境可以受益并被使用。作为示例,适用于存储和/或执行程序代码的数据处理系统是可用的,其包括直接或通过系统总线间接耦接到存储器元件的至少两个处理器。存储器元件包括例如在程序代码的实际执行期间使用的本地存储器、大容量存储和高速缓存存储器,该高速缓存存储器提供至少一些程序代码的临时存储,以便减少执行期间必须从大容量存储重新取回代码的次数。
[0303] 输入/输出或I/O设备(包括但不限于键盘、显示器、指示设备、DASD、磁带,CD、DVD、拇指驱动器和其他存储介质等)可以直接耦接到系统或通过介入I/O控制器而耦接到系统。网络适配器还可以耦接到系统,以使数据处理系统能够通过介入私有或公共网络而耦接到其他数据处理系统或远程打印机或存储设备。调制解调器、电缆调制解调器和以太网卡只是可用类型的网络适配器中的一小部分。
[0304] 本文使用的术语仅出于描述特定实施例的目的,并不意图限制本发明。如这里所使用的,单数形式“一”,“一个”和“该”旨在也包括复数形式,除非上下文另有明确说明。将进一步理解,当在本说明书中使用时,术语“包括”和/或“包含”指定所述特征、整数、步骤、操作、元素和/或组件的存在,但不排除存在或者添加一个或多个其他特征、整数、步骤、操作、元素、组件和/或它们的组合。
[0305] 以下权利要求中的所有装置或步骤加功能元件的相应结构、材料、动作和等同物(如果有的话)旨在包括如所具体要求保护的用于结合其他要求保护的元件来执行功能的任何结构、材料或动作。已经出于说明和描述的目的给出了对一个或多个实施例的描述,但是并不旨在穷举或限制于所公开的形式。许多修改和变化对于本领域普通技术人员来说是显而易见的。选择和描述实施例是为了最好地解释各个方面和实际应用,并且使本领域普通技术人员能够理解具有各种修改的各种实施例适合于预期的特定用途。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈