使用依赖性消除的多阶段寄存器重命名的制作方法

文档序号:6506934阅读:349来源:国知局
使用依赖性消除的多阶段寄存器重命名的制作方法
【专利摘要】描述了使用依赖性消除的多阶段寄存器重命名。在实施例中,在两个阶段中对寄存器进行重命名阶段。第一阶段涉及消除正被一起重命名的一组指令中的所有的依赖性。随后,最终阶段使用重命名映射并行地对所有寄存器进行重命名。在各个实施例中,在第一阶段中,使用固定映射对每个指令中的目标寄存器进行重命名,以消除依赖性,并且在一些实施例中,固定映射基于所述一组指令中的目标寄存器的位置。在第一阶段中还对依赖寄存器进行重命名,依赖寄存器是在一条指令中被读取但已经在所述一组指令中的之前指令中被写入的那些寄存器。在最终阶段中,除了执行重命名以外,还更新重命名映射。
【专利说明】使用依赖性消除的多阶段寄存器重命名
【背景技术】
[0001]乱序处理器可以通过以下方式提供改进的计算性能:以与程序中的顺序不同的次序来执行指令,使得在指令的输入数据可用时执行指令,而不是等待程序中的之前的指令被执行。为了允许指令在处理器上乱序运行,能够对指令所使用的寄存器进行重命名是非常有用的。这使得能够从指令中消除“读后写”(WAR)依赖性,这是因为这些并不是真正的依赖性。通过使用寄存器重命名以及消除这些依赖性,可以不按程序次序执行更多的指令,并且进一步提高了性能。通过保持关于在指令中命名的哪些寄存器(称作结构寄存器)被映射到处理器的物理寄存器上的映射,来执行寄存器重命名。该映射可以被称作“重命名映射”、“寄存器映射”、“寄存器重命名映射”、“寄存器别名表”(RAT)或其它类似的术语。
[0002]通常在每个周期中在多个指令上执行重命名,但是在一个周期中被重命名的一组指令中的数据依赖性意味着不能完全并行地进行操作。每次对目标寄存器进行重命名(即在用当前可用的物理寄存器替换结构寄存器的情况下),就对重命名映射(即重命名映射中的数据)进行更新。(所述一组中的)将来的读取随后必须使用更新的映射,而不是该周期起始时存在的映射。为了解决这一问题,可以使用从每个目标寄存器重命名操作的结果到每个将来的源寄存器读取的转发路径。然而,这会迅速地变得十分复杂,并且不能很好的扩展(例如在一组中处理的指令的数量增加的情况中)。
[0003]已经提出了一种使用两条流水线重命名块的两阶段重命名方法。该方法在两个周期上操作,并且采用的是在中间点处而不是在时钟边沿处使用锁存的更异步的方式。在第一个周期执行写入而在第二个周期执行读取,这导致了复杂性的增加,这是因为除了一组当中的依赖性以外,现在在当前的一组指令与时间上的下一组指令之间存在额外的依赖性,原因在于这两个组在单个周期内更新重命名映射/从重命名映射进行读取。
[0004]如下描述的实施例不局限于解决用于寄存器重命名的已知方法和装置的任何或全部缺点的实现。

【发明内容】

[0005]提供本
【发明内容】
以便以简化形式介绍构思的精粹,下文在【具体实施方式】中进一步对这些构思进行描述。本
【发明内容】
并不旨在标识要求保护的主题的关键特征或必要特征,也不旨在用作协助确定要求保护的主题的范围。
[0006]描述了使用依赖性消除的多阶段寄存器重命名。在实施例中,在两阶段中对寄存器进行重命名的。第一阶段涉及消除一组指令中的全部依赖性,其中,所述一组指令正被一起重命名。随后最终阶段使用重命名映射并行地对所有寄存器进行重命名。在各个实施例中,通过使用固定的映射对每个指令中的目标寄存器进行重命名,来在第一阶段中消除依赖性,并且在一些实施例中,固定的映射基于所述一组指令中的目标寄存器的位置。依赖寄存器也是在第一阶段中被重名命的,所述依赖寄存器是在一条指令中被读取但已经在所述一组指令中的之前指令中被写入的寄存器阶段。在最终阶段中,除了执行重命名以外,还更新重命名映射。[0007]第一方案提供了一种乱序处理器中寄存器重命名的方法,包括:在第一阶段中,使用在硬件逻辑中定义的固定映射来消除一组指令中的依赖性;以及在最终阶段中,使用重命名映射并行地对所述一组指令中的全部寄存器进行重命名。
[0008]使用在硬件逻辑中定义的固定映射来消除一组指令中的依赖性可以包括:使用所述固定映射,用一组额外的寄存器中的一个来对所述一组指令中的全部目标寄存器和任意依赖寄存器进行重命名;并且将使用了哪一个额外寄存器来对每一个目标寄存器进行重命名的细节传递到所述最终阶段。
[0009]目标寄存器与额外寄存器之间的固定映射可以基于所述一组指令中的每一个目标寄存器的物理位置。
[0010]所述最终阶段可以进一步包括:更新所述重命名映射。
[0011]所述重命名映射可以包括与每一个额外寄存器相关联的条目。
[0012]更新所述重命名映射可以包括:基于从第一阶段传递的细节更新所述重命名映射中的与每一个目标寄存器相关联的条目;以及更新所述重命名映射中的与每一个额外寄存器相关联的条目,以将每一个额外寄存器映射到未分配的物理寄存器。
[0013]该方法可以进一步包括:存取未分配的物理寄存器的列表。
[0014]所述固定映射可以独立于任何之前的状态。
[0015]该方法可以进一步包括:在第一阶段和最终阶段之间执行优化操作。
[0016]所述一组指令可以包括N条指令,并且所述一组额外寄存器可以包括N个额外寄存器,其中N为整数。
[0017]所述一组指令中的每一条指令可以包括不超过Y个的目标寄存器,并且每一条指令可以具有一组Y个相关联的有效位,每一个有效位指示在该指令中是否使用了 Y个目标寄存器中的一个。这一组指令可以包括N条指令,并且所述一组额外寄存器可以包括NXY个额外寄存器,其中N和Y都为整数。
[0018]所述一组指令中的每一个指令可以包括不超过X个的源寄存器,并且每一个指令可以具有一组X个相关联的有效位,每一个有效位指示在该指令中是否使用了 X个源寄存器中的一个。
[0019]第二方案提供了一种乱序处理器,包括:重命名映射;定义寄存器之间的固定映射的硬件逻辑;依赖性消除逻辑,用于使用所述固定映射消除一组指令中的依赖性;重命名逻辑,用于使用所述重命名映射并行地对所述一组指令中的全部寄存器进行重命名;以及多个物理寄存器。
[0020]依赖性消除逻辑可以包括多个依赖性消除逻辑实例,并且其中,每一个依赖性消除逻辑实例用于消除所述一组指令中的单独的、非重叠的子集中的依赖性。
[0021]依赖性消除逻辑可以用于通过以下方式来消除所述一组指令中的依赖性:使用所述固定映射,用一组额外寄存器中的一个对一组指令中的全部目标寄存器和任意依赖寄存器进行重命名;并且将使用了哪一个额外寄存器对每一个目标寄存器进行重命名的细节传递到重命名逻辑。
[0022]重命名映射可以包括与每一个额外寄存器相关联的条目。
[0023]多个物理寄存器可以包括多个未分配的物理寄存器。
[0024]重命名逻辑可以进一步用于更新重命名映射。[0025]乱序处理器可以进一步包括依赖性消除逻辑与重命名逻辑之间的循环缓冲器,其中,所述循环缓冲器用于在依赖性消除逻辑消除了依赖性之后存储位于循环之中的指令;以及一旦存储了所述循环中的全部指令,就将所述指令释放到重命名逻辑。
[0026]乱序处理器可以进一步包括依赖性消除逻辑与重命名逻辑之间的优化逻辑。
[0027]第三方案提供了基本上参考附图中的图1、图5和图6中的任何一个所描述的一种乱序处理器。
[0028]第四方案提供了基本上参考附图中的图2-图5中的任何一个所描述的一种乱序处理器中寄存器重命名的方法。
[0029]本文描述的方法由有形存储介质上的机器可读形式的软件来执行,例如,计算机程序的形式,计算机程序包括计算机程序代码模块,所述计算机程序代码模块在所述程序运行在计算机上时适于执行本文描述的任意方法的所有步骤,并且其中,计算机程序可以体现在计算机可读介质上。有形(或非暂时性)存储介质的实例包括磁盘、拇指驱动器、存储卡等等,并且不包括传播信号。软件可以适于在并行处理器上或者串行处理器上执行,使得方法步骤可以以任意合适顺序或者同时地执行。
[0030]本申请承认固件和软件可以是有价值的、可单独交易的商品。旨在涵盖在“哑”或标准硬件上运行或对“哑”或标准硬件进行控制以执行期望功能的软件。还旨在涵盖“描述”或定义硬件的配置的软件,例如HDL (硬件描述语言)软件,如用于设计硅芯片,或用于配置通用编程芯片,以执行期望功能。
[0031]优选特征可以适当地组合,这对于技术人员将是显而易见的,并且可以与本发明的任意方面进行组合。
【专利附图】

【附图说明】
[0032]将通过例子的方式参考以下附图来描述本发明的实施例,其中:
[0033]图1为示例性乱序处理器的示意图;
[0034]图2为可以使用图1中所示的乱序处理器来实现的示例性寄存器重命名方法的流程图。
[0035]图3示出了寄存器重命名的示例;
[0036]图4示出了四个周期上的流水线重命名操作的示意图;
[0037]图5示出了五个周期上的流水线重命名操作的示意图,其中依赖性消除被划分为两阶段,并且示出了乱序处理器另一个示例的示意图;以及
[0038]图6为示出了两个其它的示例性乱序处理器的示意图。
[0039]全部图中使用共同的参考数字来表示类似的特征。
【具体实施方式】
[0040]下面仅仅是通过例子的方式来描述本发明的实施例。这些例子代表了 申请人:当前已知的将本发明付诸于实践的最佳方式,虽然这些最佳方式并不是能够实现本发明的仅有的方式。描述给出了例子的功能以及用于构造和操作例子的步骤的序列。然而,可以通过不同的例子来实现相同的或等同的功能和序列。
[0041]在乱序处理器中寄存器重命名的使用可以参考如下示例来描述,本示例包括两条指令(标记为Il和12):
[0042]Il:R3=Rl+2
[0043]I2:R1=R2
[0044]因为Rl是12的目标寄存器,所以12不能在Il (在Il中,Rl为源寄存器)之前进行求值,否则的话,在对Il求值时存储在Rl中的值就不正确了。然而,在这些指令之间并不存在“真正的”依赖性,并且这意味着可以使用寄存器重命名来消除依赖性。例如,12可以使其目标寄存器被重命名为如下:
[0045]I2:R4=R2
[0046]因为目标寄存器已经更改成R4,所以现在在Il和12之间没有依赖性,并且这两条指令可以被乱序执行。这个示例示出了读后写(WAR)依赖性的消除。在其它示例中,还可能存在写后写(WAW)依赖性,例如,如果指令集进一步包括第三指令(标记为13):
[0047]I3:Rl=R5+4
[0048]这条指令(13)向与之前的指令(12)相同的寄存器(Rl)进行写入,这意味着第一次写入可以被忽略,除非此操作有一些其它副作用。
[0049]图1示出了乱序处理器100的示意图,乱序处理器100包括提取阶段102、解码阶段104、重命名阶段106和多个物理寄存器107。应当清楚的是:乱序处理器还可以包括在图1中没有示出的其它元件(例如重新排序缓冲器、执行流水线等)。提取阶段102被安排用于提取程序计数器所指示的来自程序的指令(按程序顺序)。解码阶段104被安排用于在重命名阶段106执行寄存器重命名之前解释指令。如上所述,一组(或一批)指令可以同时被重命名。寄存器重命名可以由重命名阶段106通过使用结构寄存器与处理器上的物理寄存器107之间的映射来执行,并且在图1中示出了示例性寄存器重命名映射108。寄存器重命名映射108由重命名阶段106保持(即更新),它是一种存储的数据结构,显示了每一个结构寄存器与最近分配给该结构寄存器的物理寄存器之间的映射。结构寄存器为在指令中使用的寄存器的名称/标识符,并且为了下面的解释,这些结构寄存器被标记为A*(其中*表示寄存器的编号,例如A0、A1...)。物理寄存器107为处理器中存在的实际的存储单元,并且这些物理寄存器被标记为P* (例如P0、PL...)。存在比结构寄存器更多的物理寄存器107,并且多个物理寄存器110包括多个未分配的物理寄存器109 (如图1中阴影所指示的)。在图1的示例中,寄存器重命名映射108包括四个条目,这些条目指示由结构寄存器标识符(A*)索引的物理寄存器标识符(P*)。例如,结构寄存器O (AO)当前映射到物理寄存器6 (P6),结构寄存器I (Al)当前映射到物理寄存器5 (P5)等等。重命名映射108可以存储在处理器硬件逻辑中的触发器中。
[0050]如图1中所示,重命名阶段106被分成两个阶段:依赖性消除阶段110和重命名112,尽管如下更详细地描述的,可能存在超过两个的阶段(例如,依赖性消除阶段110可以被划分成两个或更多个子阶段)。这些阶段中的第一阶段,即依赖性消除阶段110,消除被并行重命名的一组(或一批)指令中的依赖性。通过使用固定映射在这一阶段中为所述一组指令中的指令消除RAW和WAW依赖性,其中固定映射是完全可预测的,并且独立于任何之前的状态并被实现在硬件逻辑114中。如下文更详细地描述的,固定映射将所述一组指令中的目标寄存器和依赖寄存器映射到中间寄存器(标记为N*)。通过使用这样的固定映射,仅需要极少量的逻辑(例如硬件逻辑)来实现这一阶段,其中所述映射链接到一组中的指令的物理单元。第一阶段不使用重命名映射(重命名映射不是固定映射,而是存储了可以随着每个周期更改的动态的映射),也不需要执行任何查找(例如在固定的数据结构中进行查找)。
[0051]这些阶段中的第二阶段,即重命名112 (其也可被称为最终阶段),然后使用(例如,从中间寄存器到物理寄存器的)重命名映射108并行地重命名所有的寄存器。这样,重命名阶段并行地执行对重命名映射的所有读取和更新(即,在执行所有的读取的同时建立所有的更新,但是直到时钟边沿这些更新才生效,使得读取看不到当前更新的效果),这使得这一最终阶段非常易于扩展(例如扩展到同一周期内的大量指令)。所使用的重命名映射包括额外的寄存器映射,如图3中所示并在下文描述。
[0052]虽然方法示出了(在方框208中)在每一个周期中更新重命名映射,但是应当清楚的是:可能存在不需要更改的情形,并且在这种情况下,更新重命名映射的步骤将使得映射不变。
[0053]以这种方式将重命名阶段106划分成两个阶段具有这样的效果:重命名操作花费两个周期,与单周期单阶段操作相比,这增加了等待时间,但是并没有减小吞吐量,这是因为两个阶段容易被流水线化(如参考图4更详细地描述的)。通过使用此方法,(通过增加一组指令中的指令的数量)增加吞吐量和/或增加最大时钟速度是可能的。
[0054]依赖性消除阶段和重命名阶段110和112都可以完全地用处理器的硬件逻辑来实现。或者,这些方法步骤中的一些或全部可以用软件来实现。处理器可以是单线程处理器或多线程处理器。在处理器是多线程处理器的情况下,可以为每个线程重复图1中所示的元件,使得每一个线程具有局部的一组结构寄存器和重命名阶段106。可替换的多线程处理器可以共享硬件逻辑(方框106)的一些或全部来进行实际的重命名,其中可以结合寄存器编号来使用线程编号,以对重命名映射108进行索引(即,在重命名映射与超过一个的线程相关的情况下)。例如,重命名映射可以具有将用于线程O的结构寄存器O (AO)映射到物理寄存器6 (P6)的条目以及将用于线程I的相同的结构寄存器(AO)映射到物理寄存器26 (P26)的不同的条目。
[0055]图2示出了重命名阶段106的示例性操作方法的流程图。在由图1中所示的依赖性消除阶段110执行的第一阶段21中,使用固定映射将所有的目标寄存器和依赖寄存器重命名成额外的寄存器(方框202)。本文中使用术语“依赖寄存器”来表示在一条指令中被读取并且还被一组指令中的之前的指令写入的那些寄存器(即,在一组指令中的之前的指令中是目标寄存器的任何源寄存器)。为了进行下面的解释,目标寄存器可以被标记为0P*,其中*代表了指令的编号。
[0056]所使用的额外寄存器的数量(例如N个额外寄存器)与一组指令中的目标寄存器的最大数量相等。在许多的示例中,每一个指令仅向一个目标进行写入,并且在这样的示例中,所使用的额外寄存器的数量与在一起被重命名的一组指令中的指令的数量(例如,一组指令中的N条指令)相等。例如,在一组指令包括:
[0057]Il:R3=Rl+2
[0058]I2:R1=R2
[0059]I3:R5=Rl+4
[0060]的情况下,将存在三个使用的额外寄存器(N=3 )。一个额外寄存器将用于第一条指令(Il)的目标寄存器(R3),另一个额外寄存器将用于第二条指令(12)的目标寄存器(R1),并且第三个额外寄存器将用于第三条指令(I3)的目标寄存器(R5)。在这个示例当中,存在一个依赖寄存器,其是第三条指令(13)中的源寄存器R1,这是因为这个寄存器已经在所述一组指令中的之前的指令中(即,在第二条指令中)被写入。然而,在其它的示例中,指令可能具有超过一个的目标寄存器,并且因此所使用的额外寄存器的数量可能超过所述一组指令中的指令的数量。
[0061]在第一阶段(方框201)以及在这个示例中所使用的固定映射可以如下表所示,其中使用符号N*。
[0062]
【权利要求】
1.一种乱序处理器中寄存器重命名的方法,包括: 在第一阶段中,使用在硬件逻辑中定义的固定映射来消除一组指令中的依赖性(21);以及 在最终阶段中,使用重命名映射并行地对所述一组指令中的所有寄存器进行重命名(22、206)。
2.根据权利要求1所述的方法,其中,使用在硬件逻辑中定义的固定映射来消除一组指令中的依赖性包括: 使用所述固定映射,用一组额外寄存器中的一个额外寄存器来对所述一组指令中的所有目标寄存器和任意依赖寄存器进行重命名(202);以及 将关于使用了哪个额外寄存器来对每一个目标寄存器进行重命名的细节传递到所述最终阶段(204)。
3.根据权利要求2所述的方法,其中,目标寄存器和额外寄存器之间的所述固定映射基于所述一组指令中的每一个目标寄存器的物理位置。
4.根据权利要求1所述的方法,其中,所述最终阶段进一步包括: 更新所述重命名映射(208 )。
5.根据权利要求4所述的方法,其中,所述重命名映射包括与每一个额外寄存器相关联的条目。
6.根据权利要求5所述的方法,其中,更新所述重命名映射包括: 基于从所述第一阶段传递的细节,更新所述重命名映射中与每一个目标寄存器相关联的条目(210);以及 更新所述重命名映射中与每一个额外寄存器相关联的条目,以将每一个额外寄存器映射到未分配的物理寄存器(212)。
7.根据权利要求6所述的方法,进一步包括: 存取未分配的物理寄存器的列表。
8.根据权利要求1所述的方法,其中,所述固定映射独立于任何之前的状态。
9.根据权利要求1所述的方法,进一步包括: 在所述第一阶段和所述最终阶段之间执行优化操作。
10.根据权利要求2所述的方法,其中,所述一组指令包括N条指令,并且所述一组额外寄存器包括N个额外寄存器,其中,N为整数。
11.根据权利要求1所述的方法,其中,所述一组指令中的每一条指令包括不超过Y个的目标寄存器,并且其中,每一条指令具有一组Y个相关联的有效位,每一个有效位指示在该指令中是否使用了所述Y个目标寄存器中的一个目标寄存器。
12.根据权利要求11所述的方法,其中,所述一组指令包括N条指令,并且所述一组额外寄存器包括NXY个额外寄存器,其中,N和Y为整数。
13.根据前述权利要求中的任何一个所述的方法,其中,所述一组指令中的每一条指令包括不超过X个的源寄存器,并且其中,每一条指令具有一组X个相关联的有效位,每一个有效位指示在该指令中是否使用了所述X个源寄存器中的一个源寄存器。
14.一种乱序处理器(100、500、606),包括: 重命名映射(108);定义寄存器之间的固定映射的硬件逻辑(114); 依赖性消除逻辑(110),用于使用所述固定映射来消除一组指令中的依赖性; 重命名逻辑(112),用于使用所述重命名映射并行地对所述一组指令中的所有寄存器进行重命名;以及 多个物理寄存器(107)。
15.根据权利要求14所述的乱序处理器,其中,所述依赖性消除逻辑包括多个依赖性消除逻辑实例(110),并且其中,每一个依赖性消除逻辑实例用于消除所述一组指令中的单独的、非重叠的子集中的依赖性。
16.根据权利要求14所述的乱序处理器,其中,所述依赖性消除逻辑用于通过以下方式消除一组指令中的依赖性:使用所述固定映射,用一组额外寄存器中的一个额外寄存器来对所述一组指令中的所有目标寄存器和任意依赖寄存器进行重命名;并且将关于使用了哪个额外寄存器来对每一个目标寄存器进行重命名的细节传递到所述重命名逻辑。
17.根据权利要求14所述的乱序处理器,其中,所述重命名映射包括与每一个额外寄存器相关联的条目。
18.根据权利要求14所述的乱序处理器,其中,所述多个物理寄存器包括多个未分配的物理寄存器(109)。
19.根据权利要求14所述的乱序处理器,其中,所述重命名逻辑进一步用于更新所述重命名映射。
20.根据权利要求14-19中的任何一个所述的乱序处理器,进一步包括所述依赖性消除逻辑和所述重命名逻辑之间的循环缓冲器(602),其中,所述循环缓冲器用于:在所述依赖性消除逻辑进行了依赖性消除之后存储位于循环中的指令;以及一旦所述循环中的所有指令都被存储,就将所述指令释放到所述重命名逻辑。
【文档编号】G06F9/38GK103577159SQ201310333130
【公开日】2014年2月12日 申请日期:2013年8月2日 优先权日:2012年8月7日
【发明者】H·杰克逊 申请人:想象力科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1