用于寄存器重命名的可用寄存器控制的制作方法

文档序号:11828779阅读:165来源:国知局
用于寄存器重命名的可用寄存器控制的制作方法与工艺

本公开涉及数据处理领域,尤其涉及寄存器重命名。



背景技术:

数据处理装置可以支持寄存器重命名,其中,响应于指令,由该指令指定的架构寄存器区分符(architectural register specifier)被映射至所要访问的物理寄存器。



技术实现要素:

至少一些示例可以提供数据处理装置,该装置包括:寄存器重命名电路,被配置为:响应于指令,将由所述指令指定的架构寄存器区分符映射至将被访问的物理寄存器;可用寄存器控制电路,被配置为控制哪些物理寄存器可用于由所述寄存器重命名电路映射至架构寄存器区分符;其中,针对至少一个具有两个或更多个物理寄存器的组,所述可用寄存器控制电路被配置为根据组追踪指示信息来控制所述组的物理寄存器是否可用,所述组追踪指示信息指示是否存在对所述组中的任意物理寄存器的至少一个待决访问。

至少一些示例可以提供数据处理装置,该装置包括:用于映射的装置,该装置响应于指令,将由所述指令指定的架构寄存器区分符映射至将被访问的物理寄存器;用于控制的装置,该装置控制哪些物理寄存器可用于由所述用于映射的装置映射至架构寄存器区分符;其中,针对至少一个具有两个或更多物理寄存器的组,所述用于控制的装置被配置为根据组追踪指示信息来控制所述组的物理寄存器是否可用,所述组追踪指示信息指示是否存在对所述组中的任意物理寄存器的至少一个待决访问。

至少一些示例可以提供数据处理方法,该方法包括:响应于指令,将 由所述指令指定的架构寄存器区分符映射至将被访问的物理寄存器。该方法还包括,对于物理寄存器的至少一个组:维护组追踪指示信息,该信息表示是否存在对所述组中的任意物理寄存器的至少一个待决访问;根据所述组追踪指示信息,控制所述组的物理寄存器是否在映射步骤中可用于映射至架构寄存器区分符。

附图说明

从以下对于示例的描述中,结合附图而理解,本技术的更多方面、特征和优势将变得明显,在附图中:

图1示意地表述了包括寄存器重命名电路的数据处理装置的一部分;

图2示出了用于控制哪些寄存器电路可用于重命名的可用寄存器控制电路的示例;

图3示出了发布队列的示例,用于对等待发布用于执行的指令进行排队;

图4示出了解码逻辑的示例,用于对物理寄存器区分符进行解码以生成用于使计数器递增或递减的信号;

图5示出了用于追踪通过待决指令仍在被读取的物理寄存器的另一示例;

图6和图7示出了使用组计数器追踪对一组物理寄存器的待决引用的方法;

图8示出了使用组计数器以控制寄存器组是否可用于重命名的方法;

图9示出了在架构寄存器区分符和物理寄存器之间生成新的寄存器映射的方法;

图10示出了追踪完成未完结(outstanding)寄存器写入的方法;

图11示出了追踪在取消投机(speculative)指令之后为了恢复此前的状态仍然可能需要哪些物理寄存器的方法;

图12示出了控制哪些寄存器可用于重命名的方法;

图13示出了具有用于待决指令的间隙(slot)的发布队列的示例;

图14和图15示出了追踪指示信息的其它示例,该信息用于追踪对寄 存器的对应组的待决访问。

具体实施方式

现在,本技术的一些示例将在以下被描述。

数据处理装置可以具有寄存器重命名电路,用于响应于指令,将由该指令指定的架构寄存器区分符映射至被访问的物理寄存器。尽管从程序员视角,该指令可能能够指定某数量的架构寄存器区分符,但该装置实际上可能具有更大量的物理寄存器。在没有寄存器重命名时,对同一架构寄存器进行写入的两个指令将不得不按顺序执行以确保随后的指令使用该架构寄存器的正确值。然而,通过使用寄存器重命名以将同一架构寄存器映射至用于两个指令的不同物理寄存器,这可以允许两个指令被同时执行或乱序执行,这将有助于提高性能。

一旦物理寄存器已被映射至架构寄存器区分符,在需要该物理寄存器的当前映射的指令已访问该寄存器之前(在一些情况下还包括此后一段时间),可能希望避免该物理寄存器被重映射至另一架构寄存器区分符。因此,可以提供可用寄存器控制电路,以控制哪些物理寄存器可用于由寄存器重命名电路映射至架构寄存器区分符。

对哪些物理寄存器可用于重命名进行的控制可能较为复杂。可能存在一些与控制电路相关的开销,该控制电路用于监视某些物理寄存器是仍然被需要还是应当被设为可用于重映射至其它架构寄存器区分符。更为精确的方法可能能够以更高的准确度追踪哪些已分配的物理寄存器仍然被需要,以使物理寄存器能更快地被重新请求,这将有助于提高性能,但是这可能有代价:实施更为精确的控制逻辑需要更大的电路面积和更大的泄漏。在另一方面,实施较不精确的技术在电路面积和能耗(泄漏)方面而言代价可能较低,但是如果它在使已分配的物理寄存器可用于再次重命名上更为保守,那么这可能需要更大量的物理寄存器以维持给定水平的性能,或者,对于给定数目的寄存器,如果物理寄存器不能在重命名后足够快地可用,并且没有足够的物理寄存器来处理特定的一组指令,则可能限制性能。因此,在性能和能量效率之间需要实现平衡。

当确定寄存器重命名电路是否要使物理寄存器可用于映射至架构寄存器区分符时,存在可以考虑的各种因素。一个示例可以是:是否存在对物理寄存器的任何待决访问。例如,待决访问可以是响应于指令而从物理寄存器读取数据值的读取操作。

一种方法可以是:针对每个单独的物理寄存器检测访问是否待决,并根据访问是否待决来控制该物理寄存器的可用性。然而,一些系统可能具有较大数目的物理寄存器(例如,128个寄存器)且可以支持较大数目的未完结寄存器访问,因此,检验每一个寄存器是否具有待决访问在逻辑、范围和能耗方面而言可能成本非常高。

替代地,可用寄存器控制电路可以具有至少一个组追踪指示信息,该信息指示了是否存在对相应一组两个或更多个寄存器中任一者的至少一个待决访问。因此,对该组中的任意一个物理寄存器的访问被利用公共的组指示信息来追踪,与给每个寄存器提供单独的追踪相比,这在电路面积和能耗方面成本可以较低,因为不必辨别该组中的哪个特定寄存器具有该待决访问。

例如,当用于一组物理寄存器(包括不可用的物理寄存器)的组追踪指示信息表明存在对该组中的至少一个物理寄存器的至少一个待决访问时,可用寄存器控制电路可以阻止不可用的物理寄存器变得可用。即使该待决访问针对的是与该不可用的物理寄存器相同组中的另一寄存器,也可以防止使不可用的寄存器变得可用。

如果存在对同一组中任何寄存器的待决访问,就阻止物理寄存器变得可用,这可能看来是反直觉的,因为看起来好像会限制性能——它可能不必要地阻止寄存器被重新请求(即使不存在对该寄存器的待决访问)。然而,发明人发现,在实际中,对寄存器的待决访问的追踪进行分组实际上不会显著限制性能。虽然如果组追踪指示信息的表明表示存在对该组中的一个寄存器的待决访问,则组追踪指示信息可以阻止不可用的寄存器变得可用,但是这不阻止同一组中已经可用的寄存器被寄存器重命名电路选择来重命名和映射至新的架构寄存器区分符。因此,实际上,只有在对该组中的任意寄存器的最后待决访问完成之前该组中的所有寄存器都变得不可 用(这在实际中通常不会发生),才会出现对性能的影响。在许多情形下,对已分配的寄存器的待决读取可以在同一组中的另一寄存器被重命名电路分配之前完成,因此在一组寄存器之间有效地共享单个计数器可以是更为有效的,所以对每个寄存器的待决访问进行计数的额外开销可能并不合理。

可以有多种方法追踪对组中寄存器的待决访问。一种可能性可以是提供追踪值,如果存在对相应组中的任一寄存器的待决访问,该追踪值取第一值,而如果不存在待决访问,该追踪值取第二值。在这种情形下,追踪指示信息可以仅仅表示二进制的是/否,表明是否存在对相应组寄存器的至少一个待决访问,并且除了指出是否存在至少一个待决访问以外,不需要辨别多少访问是待决的。

然而,其它示例可以提供组计数器,用于计算对组中的任一物理寄存器组的待决访问的总数。实施这一方法在实际中可能更为有效,因为它可以不需要解码电路来解码由每一个待决访问指定的寄存器区分符。

例如,组追踪指示信息可以追踪处理流水线的某部分中待决的寄存器访问。在一些情形下,该装置可以包括寄存器读取单元,对于至少一些指令,对寄存器的读取访问发生在该单元中。组计数器可以被提供,以表示寄存器读取单元中的待决指令对相应的寄存器组中任一物理寄存器的引用的数目。当组计数器表示寄存器读取单元中有待决指令引用该组中的寄存器之一时,可用寄存器控制电路可以阻止该组寄存器变得可用于重命名。例如,在一些系统中,数据值可以从寄存器读取,而指令在发布队列中待决,该队列用于对等待执行的指令进行排队。在这种情形下,寄存器读取单元可以是该发布队列。在其它系统中,寄存器读取可以直到流水线的执行阶段才发生,因此寄存器读取单元可以是用于执行指令的执行单元。

用于追踪未完结访问的数目的一种方法可以是对寄存器读取单元内待决的每个指令内的物理寄存器的引用进行解码。然而,在实际中,寄存器读取单元可能支持较大数目的待决指令,并且每个指令可能引用多个寄存器,因此这可能导致较大量的解码逻辑,这可能增大电路面积和能耗。

在组追踪指示信息是组计数器的情况下,更为有效的方法可以是检测 由进入或离开寄存器读取单元的待决指令对物理寄存器的引用,这可以在每个周期需要解码更少的寄存器引用。例如,当引用给定组的任一寄存器的指令被提供给寄存器读取单元时,针对该组的对应的组计数器可以被递增。当引用该物理寄存器组之一的指令被从该寄存器读取单元移除或者在该寄存器读取单元中完成处理时,对应的组计数器可以被递减。因为指令成功地在寄存器读取单元中完成处理,或者因为指令已被取消(例如,由于错误预测分支、错误投机载入、对载入/存储的取消、或意味着该指令不应当被执行的其它事件),指令可以从寄存器读取单元移除。一些指令可以指定多个寄存器,因此该指令在被提供给寄存器读取单元或者从寄存器读取单元移除时,可以使几个组计时器被递增或递减。当在寄存器读取单元中不存在待决指令(这些指令需要相应一组物理寄存器之一)时,组计数器可以被初始化为预定值。例如,该预定值可以为零(尽管也可以使用其它值)。当用于一组物理寄存器(包括不可用的物理寄存器)的组计数器具有不同于该预定值的任意值时,可用寄存器控制电路可以阻止该不可用的物理寄存器变得可用于重映射至另一架构寄存器区分符。

术语“递增”和“递减”在本申请中表示把组计数值调整预定的量,“递增”和“递减”之一对应于将该预定的量加到该计数值,另一者对应于从该计数值减去该预定的量。通常,该预定的量可以是1,“递增”可以对应于将1加到计数值,且“递减”可以对应于从计数值减1。然而,其它值也可以用作该预定的量,或者,在一些情形下,计数器可以起始于较高的值,且“递增”对应于减法,“递减”对应于加法。

在另一示例中,寄存器读取单元可以具有若干间隙用于存储待决寄存器读取的指示信息,并且该组追踪指示信息可以是哪些间隙保持待决寄存器读取(这些读取指定来自相应组的寄存器)的指示信息。当组追踪指示信息表示有寄存器读取单元的至少一个间隙存储了对相应的组中的任一物理寄存器的待决寄存器读取的指示信息时,能够阻止不可用的寄存器变得可用于重命名。

每一组中的寄存器的数目可以被选择来在性能与电路面积或能量效率之间平衡。可以选择较大或较小的组,取决于特定实施的需求。

在一种极端情形下,寄存器的组可以包括所有物理寄存器,使得仅一组寄存器被提供,并且单组追踪指示信息追踪对该组中的任何寄存器的待决访问。在这种情形下,如果确实存在对任何物理寄存器的待决访问,可以避免释放此前分配的物理寄存器。这一点可能看起来反直觉,但是如以上所提到的,这仍然可以允许分配可用的物理寄存器,并且仅当所有的寄存器变为不可用时,组追踪指示信息才会阻止释放寄存器(如果存在任何未完结待决访问),而这不可能经常发生(如果分配所有的寄存器需要一些时间的话)。由于这一方法中与组追踪指示信息以及相关逻辑有关的面积和泄漏开销是最小的,所以在一些实施方式中,在开始再次重新分配寄存器之前有偶尔的延迟以清除积压的未完成的寄存器访问可能是值得的。

然而,在其它实施方式中,可以存在两个或更多个寄存器组,每个组具有对应的组追踪指示信息和可用寄存器控制电路,该电路根据对应的组计数器来控制该组的物理寄存器是否可用。

例如,对于组计数器的示例,如果存在Z个物理寄存器,每一组包括G个物理寄存器,其中2≤G≤Z,并且寄存器读取单元能够处理多达M个待决寄存器读取,那么可以提供Z/G个组计数器,并且每个组计数器可以具有至少N位,其中N是大于或等于log2(M×G+1)的最小整数。N位计数器足以对对物理寄存器组的待决寄存器读取进行计数,即使寄存器读取单元中的每个待决寄存器读取都指定同一组内的寄存器。相比而言,如果每个寄存器具有单独的计数器,那么这将需要Z个或更多个log2(M+1)位的计数器,这将需要更多能耗高的电路,不仅由于具有更多计数器,而且由于具有更复杂的逻辑以解码指令内的寄存器区分符并将它们映射至对应的控制信号(以递增或递减这些计数器)。

追踪对组内寄存器的访问的一个优势在于,当更新该至少一个组追踪指示信息时,需要考虑的寄存器区分符的比特可以更少。例如,如果用R位寄存器区分符来标识物理寄存器,其中R为整数,则响应于检测到特定的寄存器引用,基于寄存器区分符的少于R位,可用寄存器控制电路即可以选择哪个组追踪指示信息要被升级。这可以降低用于对寄存器区分符进行解码和对组追踪指示信息进行更新所需的解码电路的量。例如,如果寄 存器被分组为8个一组,那么可以无需考虑寄存器区分符的最低3位。

当确定哪些寄存器可用于由寄存器重命名电路选择时,除了考虑是否存在对各组物理寄存器的任何待决访问以外,可用寄存器控制电路还可以考虑其它因素。因此,当确定可以使哪些寄存器可用于重命名时,组追踪指示信息可以不是被考虑的唯一信息。因此,尽管如果相应的组追踪指示信息表示存在对相应的组中的寄存器的待决访问,则可以阻止寄存器变得可用时,但反过来不一定成立——即使组追踪指示信息表示不存在对寄存器的对应组的待决访问,这也不一定意味着可以使该寄存器可用。可以存在其它原因用于保留寄存器以保护它们不被重分配。

例如,当确定是否可以使寄存器可用于重命名时,除(一个或多个)组追踪指示信息以外,也可以考虑以下参数中的任一个:

●物理寄存器当前是否被映射至架构寄存器区分符的指示信息;

如果物理寄存器当前被映射至架构寄存器区分符,则该物理寄存器中存储的数据值代表当前的架构状态,如果允许后续指令写入同一寄存器,则该架构状态可能丢失。通过指示出当前被映射至架构寄存器区分符的物理寄存器为不可用于重命名,可以避免这种情况。

●是否存在对物理寄存器的未完成写入的指示信息;

在写入物理寄存器的任何待决被完成之前都阻止该寄存器变得可用于重命名,这可以保护免受写入之后写入(write-after-write)的风险,在该风险中,两个写入操作以错误顺序完成可能导致其它指令访问错误的值。

●表示是否存在未解决的投机指令的指示信息,该投机指令指定此前被映射至该物理寄存器的架构寄存器区分符。

一些系统可以支持一些指令的投机执行。例如,可以用分支预测器预测分支的输出结果,并且取决于该分支被预测采用或不采用,一些指令可以在该分支之后被投机地执行。其它投机指令可以包括载入/存储指令,这些指令可以被投机地执行(例如,假定不存在由于访问权限不足而造成的异常)。指令如果跟随在另一投机性指令之后,则也可以被认为是投机性的。如果对给定指令的投机结果是正确的,则性能得以提升,因为确定该指令是否应当被执行所需的延迟并未延迟该指令的实际执行。然而,如果 确定该投机结果是错误的,该指令不应当执行或者指令的结果是不正确的,则该指令的执行可以被取消,并可能需要恢复此前的寄存器状态。因此,当针对由投机指令指定的架构寄存器生成新的寄存器映射时,此前被映射至同一架构寄存器的物理寄存器的指示信息可以被保持,并且可以使该物理寄存器不可用于被寄存器重命名电路选择,从而,如果该投机指令必须被取消,物理寄存器内的数据值也可以用于恢复此前的寄存器状态。

在一些情形下,可用性寄存器可以被提供,该寄存器包括若干位,每一位表示对应的物理寄存器是可用还是不可用。(一个或多个)上述组追踪指示信息和参数可以用于控制可用寄存器中针对给定物理寄存器的位是否可以从第一值改变至第二值,该第一值表示该寄存器不可用,该第二值表示该寄存器可用。因此,如果组追踪指示信息(该信息针对包括相应寄存器的组)表示不存在对该组中的任意寄存器的待决访问,并且如果其它参数也表示不存在保留该物理寄存器的其它原因,则可用寄存器的位可以被改变至第二值。当选择物理寄存器映射至架构寄存器时,寄存器重命名电路可以选择这些寄存器之一,可用寄存器中针对该寄存器的相应比特具有该第二值。

图1示意性地图示了数据处理装置2中的处理流水线的一部分。该流水线包括若干阶段(stage),包括获取(fetch)阶段4、解码阶段6、重命名阶段8、发布阶段10、执行阶段12和写回阶段14。要处理的指令从一阶段移到另一阶段,并且一个指令可以在流水线的一个阶段待决,同时另一指令在另一阶段待决。应当理解,这只是可能的流水线的一个示例,其它示例可以具有其它阶段或安排。

获取阶段4从指令缓存或存储器获取程序指令。解码阶段6解码所获取的指令以生成被解码的指令,该指令被传递至流水线的其余阶段用于处理。对于一些指令,从存储器获取的单个指令可以被解码成沿着流水线被传递的单个被解码指令。然而,对于其他更复杂的指令,单个被获取的指令可以被解码成被称为“微操作”的多个被解码指令。例如,用于触发要被执行的一系列操作(例如“载入多个”(load multiple)指令)的指令可以被解码成各个微操作,每个微操作对应于这些操作之一。因此,流水线 的以后阶段8、10、12、14看到的“指令”可以不同于从存储器获取的指令,且术语“指令”应当被解释为涵盖了微操作。

装置2具有若干可用于存储数据值的物理寄存器20。寄存器重命名阶段8针对经解码指令(或微操作)施行寄存器重命名,以将由这些指令指定的架构寄存器区分符映射到标识物理寄存器20之一的物理寄存器区分符。该指令集结构可以支持某个数目的对程序员可见的架构寄存器。例如,指令编码中的4或5位的寄存器字段可以指定16个或32个不同的架构寄存器区分符之一。然而,为了能够解决指定同一架构寄存器区分符的指令之间的风险或允许指令的乱序或并行处理,可以提供更大数目的物理寄存器,且寄存器重命名阶段8可以将经解码指令中的架构寄存器区分符映射至相应的物理寄存器。

现在指定物理寄存器区分符的经重命名的指令被传递至发布队列10,它们在该队列中被排队,同时等待执行。指令保持在发布队列中,直到它们的运算对象可用,此时该指令被发布到执行阶段12以执行。指令可以按不同于原始程序顺序(指令以该顺序被获取阶段4获取)的顺序被发布以执行。例如,尽管一个指令因为它的运算对象还不可用而被搁置,但后面的指令(该指令的运算对象可用)可以被提前发布。

执行阶段12可以包括各种处理单元,用于响应于指令而执行处理操作。例如,处理单元可以包括用于执行算术或逻辑操作的算术/逻辑单元(ALU)、用于执行从存储器载入数据值并将其置于物理寄存器中的载入操作或用于执行将当前存储于物理寄存器中的数据值存储到存储器中的存储操作的载入/存储单元、用于对包括多个数据元素的数据值执行向量操作的向量处理单元、用于对浮点值执行操作的浮点电路、或任何其它类型的处理电路。在一些情形下,执行阶段12可以包括若干用于处理不同种类指令的并行执行流水线。

在执行阶段12中,当指令的执行被完成时,指令被传递至写回阶段14,该写回阶段将指令的结果写入物理寄存器20。

在图1所示的示例中,对于经重命名的指令(这些指令指定一个或多个物理寄存器,数据值将从该物理寄存器被读取),在该指令在该发布队 列10中待决的同时,该物理寄存器的读取发生。然而,替代地,其它实施例可以在执行阶段12读取物理寄存器20,如图1中的虚线所示。

可用寄存器控制电路30被提供,用于控制哪一个物理寄存器可以被重命名阶段8选择以映射至架构寄存器区分符。下文会更详细描述可用寄存器控制逻辑30,但是一般地,可用寄存器控制电路30可以向重命名阶段8提供指示哪些物理寄存器可用或不可用于选择的指示信息。当向寄存器进行写入的指令从解码阶段6被接收时,重命名阶段8针对被指定为该指令的目的地寄存器的架构寄存器生成新的寄存器映射。重命名阶段8选择被可用寄存器控制电路30表示为可用的物理寄存器,并更新重命名表32以包括将目的地架构区分符映射至所选的物理寄存器的重命名条目。

流水线2支持指令的投机执行。在知道指令是否应当被执行之前,或者在确定指令的结果有效之前,一些指令可以被投机地执行。例如,在分支指令之后,基于对该分支被采用还是不被采用的预测,一些指令可以在知道实际的分支输出结果之前被投机地执行。当投机正确时,投机执行可以通过消除下述延迟来提高性能:如果直到知道指令应当被执行或其结果会有效之后才执行该指令,则会出现该延迟。然而,如果投机结果不正确,则指令的执行可能需要被取消,且架构状态可能需要被恢复为最后的有效状态。

异常存储器34被提供用于追踪此前的寄存器状态,该寄存器状态可以在错误投机的事件中被恢复。在由重命名阶段8为给定的架构寄存器区分符生成新的寄存器映射时,此前的映射被写到异常存储器34中。例如,在图1的示例中,当架构寄存器A1到物理寄存器P102的新映射在重命名表32中被生成时,此前被映射到架构寄存器A1的物理寄存器P48被写到异常FIFO中。此前的物理寄存器P48继续存储在即将执行指令的时间点与架构寄存器A1相关的数据值。因此,如果对于指定了架构寄存器A1的指令存在错误投机,则重命名表32中针对架构寄存器A1的当前映射被基于异常存储器34中的对应映射而更新,使得架构寄存器A1现在再次映射至物理寄存器P48。在寄存器之间传送数据以恢复架构状态不是必要的,因为仅仅在重命名表32中更新寄存器映射就足以使读取架构寄存 器A1的后续指令访问被恢复的物理寄存器P48中此前的数据。

一旦对应的指令已被解决,条目可以从异常存储器34移除。当投机指令被提交(即,知道该指令应当已执行,且该投机指令的结果会有效)时,对应条目可以从异常存储器34移除,因为它不再被需要用于恢复重命名表32中的映射。类似地,当投机指令被取消时,一旦重命名表32已被基于异常存储器34中的对应条目中所指示的映射而更新,那么该对应条目可以被移除。特定的投机指令应当被提交还是取消将取决于一个或多个更早指令的输出结果,且这可以在该投机指令的实际执行之前或之后被解决。异常存储器34可以作为先入先出(FIFO)存储器来管理,以使得条目以与它们被分配到该寄存器的相同顺序移除。因此,即使指令已被提交或取消,它的对应条目也可能直到任何更早的指令已被解决才被从异常FIFO 34移除。

图2示出了可用寄存器控制电路30的一部分。保留寄存器50指示哪些物理寄存器20当前可用于被重命名阶段8选择或不可用(被保留)。保留寄存器50包括多个位字段52,每个对应于物理寄存器20之一。当位字段具有1的值时,那么对应的寄存器被保留且不可用于重命名,而如果针对特定寄存器的位字段具有0的值,那么该寄存器可用于重命名。当重命名阶段8需要生成新的寄存器映射时,读取阶段8选择寄存器20之一,该寄存器在保留寄存器50中的位字段52等于0。当存在多个可用于重命名的物理寄存器20时,各种技术可被用于控制哪个物理寄存器被选择。例如,随机或循环(round robin)选择策略可以被使用。

当重命名阶段8选择用于重命名的物理寄存器时,保留寄存器中的对应位字段52被设置为1以指示该寄存器被保留。该物理寄存器然后维持不可用于重命名,直到保留寄存器中的对应位字段52被清除。基于多个状态寄存器62、64、66、68,寄存器释放控制逻辑60控制特定的寄存器何时可以再次可用。状态寄存器62、64、66、68的每一个对应于可以阻止已分配的物理寄存器被释放的特定条件。

在该示例中,状态寄存器包括已分配的寄存器62、无效寄存器64、异常FIFO状态寄存器66和未读寄存器68,寄存器62指示物理寄存器当 前是否在重命名表32中被分配给架构寄存器区分符;寄存器64指示寄存器是否仍然要在流水线中的写回阶段14被尚未完成的待决指令写入;寄存器66指示物理寄存器当前是否在异常FIFO 34的某一条目中被指示;寄存器68指示任何寄存器是否可能是未完结读取操作的主体。

状态寄存器的每一个包括若干位字段,每一个位字段对应于相应的物理寄存器20。当在状态寄存器62、64、66、68的任一个中,针对给定物理寄存器的位字段为1时,保留寄存器50的相应位字段不能被清除为0。如果状态寄存器62、64、66、68的每一个中对应的位字段均为0,则寄存器释放控制逻辑60清除保留寄存器50中的位字段。例如,逻辑或(OR)操作可以通过逻辑OR操作将状态寄存器62、64、66、68的对应位字段组合,并且如果OR操作的结果为零,则保留寄存器50中的对应位字段52可以被清除。因此,对于已分配的物理寄存器,如果它当前在重命名表32中没有被分配、如无效寄存器64所示不存在对该寄存器的待决写入、如异常FIFO寄存器66所示当前未在异常FIFO中被表示、且如未读寄存器68所示不存在可能的未完结读取,则它可以仅被释放以使得它可用于再次重命名。

未读寄存器68与若干寄存器组计数器70相关,每个寄存器组计数器对应于一组物理寄存器20。在图2的示例中,每一组包括4个寄存器,使得一个计数器70被提供用于寄存器0至3,另一计数器被提供用于寄存器4至7,以此类推。每一个计数器70的计数值指示了发布队列10中多少个待决的寄存器读取指定一个对应组的寄存器。如果对相应组寄存器中的任一者都没有待决读取,则计数器70的计数值为零。如果计数值具有零的值,那么取决于其它状态寄存器62、64、66的内容,未读寄存器68中针对相应组寄存器的位字段均被设置为0,使得这些寄存器可能被释放用于重命名。如果计数值具有除零以外的任意值,那么未读寄存器68中针对该相应组的每个寄存器的位字段被设置为1,以防止这些寄存器被释放用于重命名。因此,即使对该组中的仅一个寄存器存在待决的未完结读取,这仍会阻止相应组的所有寄存器被释放用于重命名。然而,当针对一组寄存器的未读取位被设为1时,虽然这阻止了已经不可用的寄存器(例如, 它在保留寄存器50中具有为1的保留位)被释放,但是它不阻止该组内可用的寄存器(该寄存器在保留寄存器50中具有为0的保留位)被选择用于重命名。

例如,在图2中,如保留寄存器50中的对应位字段所示,物理寄存器126当前不可用。针对该组寄存器127-124的计数器70为1,所以对这些寄存器之一的待决读取还在发布队列10中未完结。这意味着未读寄存器68中针对寄存器127-124的对应位字段被设为1。因此,直到未读寄存器68中的对应位被清除(直到当该未完结读取已被完成时,针对寄存器组127-124的组计数器70再次变为0,这才会发生),物理寄存器126才能被重新要求并可用于重命名。然而,物理寄存器124、125和127仍然在保留寄存器50中被指示为可用,且因此可以被选择用于由重命名阶段8重命名,但是一旦被选择就不能被释放,直到对应的组计数器70再次变为零。

相比而言,对于图2的示例中的物理寄存器2,该寄存器当前在保留寄存器50被指示为不可用,但是现在状态寄存器62、64、66、68的每一个中的对应位字段为零(因为针对寄存器3至0的对应组计数器70为零),因此寄存器释放控制逻辑60可以通过清除保留寄存器50中针对物理寄存器2的位字段52来释放该寄存器。另一方面,即使针对寄存器3至0的组计数器70具有0的值,物理寄存器3也不可用且不能被释放,因为如异常FIFO状态寄存器66中的对应比特所示,它仍然在异常FIFO 34中被指定。

图3和图4示出了基于被提供给发布队列10以及从发布队列10移除的指令来更新组计数器的示例。如图3中所示,发布队列10每个周期可以接收某个数目的指令,并且每个周期可以有某个数目的指令向执行单元12发布。在图3中,每个周期有两个指令被发布队列10接收,并且每个周期有两个指令向执行单元发布,但是其它的示例可以具有其他的数目,并且应当理解,每个周期被发布用于执行的指令不一定需要与每个周期被提供给发布队列的指令的数目相等。每一个指令可以指定多个要被读取的寄存器。例如,在图3中,每一个指令可以包含多达4个对要被读取的物 理寄存器的引用,使得在每一个周期中,多达8个寄存器引用可以被添加到发布队列中,且多达8个寄存器引用可以从该发布队列移除。这些寄存器引用中的每一个可以被依次解码以递增或递减对应的组计数器70。

图4示出了用于解码特定寄存器引用的解码逻辑80的示例。解码逻辑80包括二进制到独热码(onehot)的解码逻辑,用于把被指定为二进制数的寄存器引用解码成包括一组比特84的独热码信号82,其中,在任何时刻,多个位84中仅一个可以为1,而其他位为0。哪个信号被设为1取决于二进制寄存器区分符的值。独热码82的每一位84对应于组计数器70之一,且如果二进制寄存器区分符R具有对应于对应寄存器组内的任意寄存器的值,该位84将被设为1。例如,如果如图2所示,寄存器被分组为4个寄存器一组,如果寄存器区分符R指示寄存器0至3之一,则最低位84可以被设置;如果寄存器区分符R指示寄存器4至7之一,则下一位84可以被设置;以此类推。

对进入发布队列10的每一个寄存器引用,解码逻辑80被提供以将该寄存器引用转换成独热码信号82,每个组计数器70响应于独热码信号82的对应位84而被递增。对于离开发布队列的每一个寄存器引用,解码逻辑80被提供以将寄存器引用转换成独热码信号82,每个组计数器70响应于独热码信号82的对应位84而被递减。

尽管所需解码逻辑80的数量与每个周期进入或离开发布队列10的寄存器引用的数目有关,但与对发布队列10中待决的每个寄存器引用都追踪相比,这通常会需要少得多的电路。例如,如果发布队列10包括用于16个待决指令的条目,这些指令的每一个可以指定多达4个寄存器,那么每个周期将需要对64个寄存器引用进行编码,而非如图3和4的示例中的16个寄存器引用。

解码逻辑80的数量还取决于所提供的计数器70的数目。因此,每一组中寄存器的数目越大,所需的解码逻辑80越少。通过追踪各组中待决的寄存器读取的数目,而非单独追踪对每个寄存器的读取,独热码解码逻辑80的复杂度可以被显著降低,读取计数器值和控制未读寄存器68的对应位所需要的逻辑和计数器70都更少。

图5示出了未读寄存器68的替代性示例。在该示例中,不是对于每一个物理寄存器20具有单独的位字段,而是可以给未读寄存器68包括对于每一组寄存器的位字段,使得同一组中的所有寄存器由单个位代表,如果对相应组的寄存器存在至少一个待决访问,则该单个位具有第一值;如果不存在对该组的任何寄存器的待决访问,则该单个位具有第二值。该寄存器释放控制逻辑60可以针对每一个对应组的寄存器,基于未读寄存器68中针对该组的单个位字段,控制保留寄存器50中对应的位字段52是否被清除。在图5的示例中,每一组寄存器包括8个寄存器,而非如图2中的4个。

更一般地,如果有Z个可寻址的物理寄存器20,并且发布队列10中待决寄存器引用的最大值为M个(对应于:每个指令中被指定的寄存器的数目乘以发布条目的最大值),那么如果寄存器被分组为G个寄存器一组(其中G为2或更大值),那么所有的寄存器引用可以使用N位的Z/G个计数器70而被追踪,其中N为大于或等于log2(M×G+1)的最小整数。相比而言,如果针对单独的寄存器(即,G=1)追踪寄存器引用,那么将需要Z个log2(M+1)位的计数器。

将这一点应用到具有16条目的发布队列大小的实际示例中,每个指令4个读取寄存器,128个可寻址的物理寄存器,即,M=64,Z=128:

如果每一个寄存器被单独地计数(G=1),那么N=upper(log2(65))=7位,并且128个7位的计数器的每一个将需要大量的解码逻辑80和其它的控制电路。

相比而言,对G=8,可接受的较不精确的解决方案可以具有N=upper(log2(64*8+1))=10位以及128/8=16个计数器。16个10位的计数器的每一个需要少得多的电路面积,不仅减少了计数器位的数目(160位而非896位),还大为减少了对应的解码逻辑。

在极端情形下只有一个组(G=128),则N=upper(log2(64*128+1))=14位,所以仅存在1个14位的计数器,对于以上给出的特定示例,该计数器提供最小的电路面积和泄漏开销。

因此,组大小G可以取决于针对特定实施的需求而选择,以在性能与 电能消耗和电路面积之间获得平衡。

在此前的实施方式中,对单独寄存器计数已被认为对于实际系统过于昂贵,因此用于保护仍然将被读取而不由重命名阶段8重分配的物理寄存器的其它技术已被使用。例如,一些技术阻止异常FIFO 34的条目被移除,直到对应指令已被执行(而不是当指令被提交时就能从异常FIFO 34移除条目,这可能在该指令的实际执行之前发生)。然而,阻止从异常FIFO 34弹出条目可能导致异常FIFO 34更早填满,这可能导致流水线的额外搁置和降低性能。替代地,通过对寄存器的组中待决的寄存器读取计数,可以使得计数器70和解码逻辑80的控制开销较低,因此直到读取完成之前都不必阻止异常FIFO,这可以达到性能和能耗之间更好的平衡。

图6至12示出了用于追踪哪些寄存器可用于重命名的方法。这些方法的每一个可以被并行执行。

图6示出了针对给定的寄存器组递增组计数器70的方法。在步骤100,引用特定寄存器X的指令被分配到发布队列10。解码逻辑80解码寄存器引用,并在步骤102中对于包括寄存器X的寄存器组触发组计数器70的递增。

图7示出了针对给定的寄存器组递减组计数器的方法。在步骤104,引用寄存器X的指令离开发布队列10,表明对寄存器X的待决读取已完成。解码逻辑80解码该寄存器引用,并在步骤106对于包括寄存器X的寄存器组触发组计数器70的递减。

图8示出了控制未读状态寄存器68的方法。在步骤110,检测针对寄存器组Y的组计数器70是否为0。如果是,那么在步骤112,对于寄存器组Y中的每个物理寄存器,未读位被清除(设为0)。如果组计数器70不为0,那么在步骤114,对于寄存器组Y中的每一个物理寄存器,未读位被设置(为1)。当未读位被设置时,如果保留寄存器50表明它们当前不可用,则将阻止对应的寄存器变为可用于重命名,但是它们不会阻止已经可用的寄存器被重命名阶段8选择。

图9示出了重命名阶段8选择用于重命名的物理寄存器的方法。在步骤120,重命名阶段8遇到将架构寄存器区分符指定为目的地寄存器的指 令,因此物理寄存器将被选择以映射至该架构寄存器区分符。在步骤122,重命名阶段8向异常FIFO 34添加条目(该条目指定了重命名表32中针对被指定的架构寄存器区分符的当前映射),选择物理寄存器20(保留寄存器50中针对该物理寄存器的保留位字段52被清除(=0)),并更新重命名表32以使得被指定的架构寄存器区分符现在被映射至所选的物理寄存器20。在步骤124,保留寄存器50中针对所选的寄存器的保留位52被设为1,以指示该寄存器现在不可用于重命名。在步骤126,已分配寄存器62中对应于所选的物理寄存器的已分配位被设为1。在步骤128,已分配寄存器62中针对此前被映射至同一架构寄存器的物理寄存器的已分配位被清除,并且异常FIFO寄存器66中针对该寄存器的异常FIFO位被设置,以表明该物理寄存器现在在该异常FIFO 34中(而不是在重命名表32中)被指示。在步骤130,在无效寄存器64中针对在步骤122所选择的物理寄存器设置无效位,以表明存在针对该物理寄存器未完结的待决写入。

图10示出了控制无效寄存器64的方法。在步骤140,在写回阶段14,对物理寄存器i的写入被完成。在步骤142,在无效寄存器64中,针对寄存器i的无效位被清除。通过保持无效位被设置(直到对寄存器i的写入完成),避免了写入之后写入的风险。

图11示出了控制异常FIFO状态寄存器66的方法。在步骤154,在异常FIFO 34中,条目被无效化,这可以发生在对应的投机指令被解决(被提交或取消)时。当投机指令被提交时,得知对应的异常FIFO中的物理寄存器将不再被需要,因为在重命名表32中指示的寄存器映射现在将代表被指定的架构寄存器的有效内容。当该指令被取消时,在异常FIFO映射被恢复到重命名表之后,异常FIFO条目不再被需要。为了追踪哪个指令对应于哪个异常FIFO条目,异常FIFO条目可以利用对应指令的指示信息而被标记,或者,流水线2中的指令可以利用对应的异常FIFO条目的指示信息被标记。响应于异常FIFO 34中的条目在步骤154被无效化,在步骤156,与被无效条目中指定的物理寄存器相对应的异常FIFO状态寄存器66的位被清除,以指示该物理寄存器不再被异常FIFO 34所需要。

图12示出了将此前已分配的物理寄存器释放的控制方法。在步骤160,在已分配的寄存器62、无效寄存器64、异常FIFO寄存器66和未读寄存器68的每一个中,寄存器释放控制逻辑60确定针对特定寄存器j的控制位是否清除(=0)。如果不是,则保留寄存器50中的对应位52保持不变,所以如果寄存器j已被保留,那么它将维持被保留。如果在状态寄存器62、64、66、68中,针对寄存器j的所有位被清除,那么在步骤162,寄存器释放控制逻辑60清除保留寄存器50中的对应位,以指示该寄存器现在可以再次被重命名阶段8选择。通过这种方式,寄存器在以下情形之前不能被重映射至另一架构寄存器区分符:它不再被重命名表32中的当前映射需要、不存在对该寄存器的未完结写入,在投机指令被取消的情形下不需要保留该寄存器、不存在对该寄存器或同一组内的其它寄存器的待决读取。

虽然在图2示出的示例中,保留寄存器利用位字段值1来指示,可用的寄存器利用位字段0来指示,但其它示例可以使用相反的对应关系。在该情形下,保留寄存器50可以替代地被解释为“可用寄存器”,其中,用位字段1指示的寄存器是可用的,而用位字段0指示的寄存器是不可用的。状态寄存器62、64、66、68也可以使用相反的对应关系,用值0指示寄存器应当保持不可用。在该情形下,寄存器释放控制逻辑60可以包括与(AND)门,与门使用AND操作来组合针对给定寄存器的各个状态位,使得仅当状态寄存器62、64、66、68中每一者都指示可以使该寄存器可用时,可用位才被设为1。

同样,尽管图3示出了对进入和离开发布队列10的寄存器引用进行计数的示例,但如果另一单元(例如执行单元12)执行寄存器读取,则进入和离开该单元的寄存器引用可以采用类似的方式被计数。

除了控制释放已分配寄存器用于重命名以外,由组计数器70提供的信息还可以在一些示例中被用于其它目的。例如,它们可以被用来追踪经过流水线2的某些指令的进度。例如,在包括多于一个流水线2的装置中,第一流水线2中的组计数器70可以提供访问一组寄存器的指令的进度的指示信息,该指示信息可以被其它流水线2使用以将它对指令的执行 与第一流水线2的指令执行相联系。例如,一些系统可以具有用于执行一个或多个具体类型指令的数据引擎流水线,和用于执行其它类型指令的通用流水线,组计数器70允许对其它流水线中的进度进行某些追踪。

图13示出了发布队列10的示例,该发布队列包括多个发布间隙180,用于保持等待发布的待决指令的指示信息。每个间隙180包括指令类型的指示信息(例如操作码)182,以及零个、一个或多个对物理寄存器(在重命名阶段8后被重命名)进行标识的寄存器区分符184,这些物理寄存器将响应于该指令而被读取。在图13的示例中,每个发布间隙180可以指定多达4个物理寄存器区分符。也可以指定该指令的目的地寄存器以及与该指令相关的任何其它控制信息(为了简洁,这些在图13中未被示出)。

图14和15示出了由可用寄存器控制电路30提供的组追踪指示信息的进一步示例,这些指示信息用于追踪发布队列10中对相应一组物理寄存器中任一者的待决处理器访问。可以提供这些信息来代替组计数器70,而寄存器50、62、64、66、68以类似于以上所讨论的示例的方式被使用。

在图14和15中,组追踪指示信息指示了哪个发布间隙180保持着需要对相应组寄存器中的任一寄存器进行访问的指令。在图14的示例中,提供了多个发布间隙状态寄存器200。每个发布间隙状态寄存器200对应于发布队列的间隙180之一,并包括多个位字段202,每个位字段202对应于相应一组两个或更多个物理寄存器。例如,在该示例中,每个组包括8个寄存器,所以存在针对寄存器0至7的一个位字段202、针对寄存器8至15的另一个位字段202、以此类推。如果相应的发布间隙180中的指令引用相应组寄存器中的寄存器,则各个位字段202取第一值(例如1),否则取第二值(例如0)。例如,在图13中,间隙0中的指令指定了寄存器R7、R12、R54,因此该间隙的状态寄存器200-0中针对寄存器组0-7、8-15和49-55的位字段202被设为1,寄存器200-0中的其它位字段202被设为0。如果在任一间隙状态寄存器200中,与包括给定寄存器的一组寄存器相对应的任一位字段202被设为1,则可用寄存器控制电路30可以阻止给定寄存器变得可用于重命名(即,阻止清除保留状态寄存器50中的 对应位字段)。虽然图14示出了每个发布间隙180对应一个间隙状态寄存器200的示例,但是在其它示例中,可以给发布队列中指定的每个寄存器引用提供一个状态寄存器200。在实践中,解码逻辑的数量可以类似,因为为了给每个间隙180确定位字段202,可能需要对该间隙中的每个寄存器区分符184进行解码。

图15示出了另一示例,其中,每个寄存器组具有对应的状态寄存器204,且每个状态寄存器204具有多个位字段206,每个位字段对应于一个发布间隙180,以指示对应的发布间隙180是否包含对于与该状态寄存器204相对应的组中任何寄存器的寄存器引用。如果对应于特定一组寄存器的状态寄存器204内的位字段206都为设为0,表明在任一个发布间隙206都不存在对该组寄存器的待决引用,则可以使该组寄存器的不可用寄存器可用。注意,图15中所显示的信息事实上是图14中所显示的同一信息,但是位字段206按寄存器组分组,而不是按发布间隙180分组。在其他示例中,可以给发布队列中的每个寄存器区分符184(而不是每个发布间隙180)设置位字段206。

因此,图14或图15中所显示的组追踪指示信息200、204可以用于设置或清除图2或图5中所示的未读状态寄存器68的对应位字段,未读状态寄存器68可以通过与以上所讨论类似的方式来影响对保留状态寄存器50的清除。

计数器70的实施例在许多情形下可能更有效,因为如图3所示,只有进入和离开发布队列的寄存器引用需要被解码,而不是需要对每个发布间隙中的引用进行解码。然而,在具有较少的待决寄存器引用的较小发布队列10的示例中,图14和15的示例可能是优选的。在任何情形下,与追踪对每个单独的寄存器的访问(而不是如图14和15所示追踪对寄存器组的访问)相比,图14和15中所示的方法所需的解码逻辑仍然可以少得多。一个原因在于,当以组来追踪寄存器(而不是单独地追踪)时,只需考虑寄存器区分符的较少位来确定更新哪个追踪指示信息。

在本申请中,短语“被配置为…”表示装置的元素具有能够执行所限定的操作的配置。在这一上下文中,“配置”表示硬件或软件的互连的结 构或方式。例如,该装置可以具有专门的硬件,该硬件提供该所限定的操作,或者可以对处理器或其它处理设备编程以执行该功能。“被配置为”并不暗示该装置要素需要以任何方式改变以提供所限定的操作。

虽然本申请已经参考附图详细描述了本发明的示例性实施例,但应当理解,本发明不限于这些确切的实施例,本领域的技术人员可以在不脱离如所附权利要求所限定的本发明的范围和主旨的情况下实施各种改变和修改。

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