用于操作发出队列的装置和方法与流程

文档序号:24056744发布日期:2021-02-26 11:41阅读:102来源:国知局
用于操作发出队列的装置和方法与流程

[0001]
本技术涉及用于操作发出队列的装置和方法。


背景技术:

[0002]
从存储器取得以供处理单元执行的指令被解码以便识别处理单元为了执行这些指令而要执行的操作。有时操作被分解成一个或多个微操作(也称为微op)。这里,操作和微操作在下文中将被统称为操作。
[0003]
发出队列通常用于在通过对指令解码而识别的操作被发出到处理单元内的相关执行单元之前临时缓冲这些操作。执行单元将不能够执行操作,直到该操作所要求的源操作对象可用为止,并且因此操作可被临时缓冲在发出队列内,直到源操作对象可用为止。
[0004]
为了改善性能,许多现代处理器支持指令的乱序(out-of-order,ooo)执行,其中指令相对于原始程序顺序被乱序执行,以便争取增大处理单元的吞吐量,而指令的引退随后按序发生。在这种系统中,发出队列是可用于支持ooo执行的数据结构之一。
[0005]
然而,现代ooo处理器的性能受到可从其中提取指令级并行性(instruction-level parallelism,ilp)和存储器级并行性(memory-level parallelism,mlp)的指令窗口的深度的约束。经常的情况是指令窗口大小受到发出队列的大小的约束,因为发出队列中的条目的数目越大,在确定是否可执行操作的重排序以便争取改善吞吐量时可考虑的操作的池就越大。
[0006]
然而,发出队列体系结构通常是处理器设计中的一个关键速度路径,并且因此,增大发出队列的大小可导致处理器可被操作的频率的减小,这本身将影响性能,并且这通常限制发出队列容量可被增大的程度。因此,将希望提供一种改善的机制来操作发出队列,其目标在于进一步改善处理器的性能。


技术实现要素:

[0007]
在一个示例布置中,提供了一种装置,包括:包括第一区段和第二区段的发出队列,第一区段和第二区段的每一者包括若干个条目,并且每个条目被用于存储识别要被处理单元执行的操作的操作信息;分配电路,为多个操作接收操作信息,并且应用分配标准来为每个操作确定要将该操作的操作信息分配到第一区段中的条目还是第二区段中的条目,操作信息被布置为识别关联的操作所要求的每个源操作对象和每个源操作对象的可用性;选择电路,在给定选择迭代期间从发出队列选择要被发出到处理单元的操作,选择电路被布置为从要求的源操作对象可用的那些操作之中选择该操作;可用性更新电路,为每个如下条目更新源操作对象可用性:该条目的操作信息将给定选择迭代中的选中操作的目标操作对象识别为源操作对象;以及推迟机制,在给定选择迭代之后的至少下一个选择迭代期间禁止选择电路选择与第二区段中的条目相关联的任何如下操作:该操作的要求源操作对象现在由于该操作以给定选择迭代中的选中操作的目标操作对象作为源操作对象而是可用的。
[0008]
在另一个示例布置中,提供了一种操作发出队列的方法,包括:将发出队列布置为具有第一区段和第二区段,第一区段和第二区段的每一者包括若干个条目,并且每个条目被用于存储识别要被处理单元执行的操作的操作信息;为多个操作接收操作信息,并且应用分配标准来为每个操作确定要将该操作的操作信息分配到第一区段中的条目还是第二区段中的条目,操作信息被布置为识别关联的操作所要求的每个源操作对象和每个源操作对象的可用性;在给定选择迭代期间从发出队列选择要被发出到处理单元的操作,选中操作是从要求的源操作对象可用的那些操作之中挑选的;为每个如下条目更新源操作对象可用性:该条目的操作信息将给定选择迭代中的选中操作的目标操作对象识别为源操作对象;并且采用推迟机制来在给定选择迭代之后的至少下一个选择迭代期间禁止选择与第二区段中的条目相关联的任何如下操作:该操作的要求源操作对象现在由于该操作以给定选择迭代中的选中操作的目标操作对象作为源操作对象而是可用的。
[0009]
在另外一个示例布置中,提供了一种装置,包括:包括第一区段和第二区段的发出队列装置,第一区段和第二区段的每一者包括若干个条目,并且每个条目用于存储识别要被处理单元执行的操作的操作信息;分配装置,用于为多个操作接收操作信息,并且用于应用分配标准来为每个操作确定要将该操作的操作信息分配到第一区段中的条目还是第二区段中的条目,操作信息被布置为识别关联的操作所要求的每个源操作对象和每个源操作对象的可用性;选择装置,用于在给定选择迭代期间从发出队列装置选择要被发出到处理单元的操作,选择装置用于从要求的源操作对象可用的那些操作之中选择该操作;可用性更新装置,用于为每个如下条目更新源操作对象可用性:该条目的操作信息将给定选择迭代中的选中操作的目标操作对象识别为源操作对象;以及推迟装置,用于在给定选择迭代之后的至少下一个选择迭代期间禁止选择装置选择与第二区段中的条目相关联的任何如下操作:该操作的要求源操作对象现在由于该操作以给定选择迭代中的选中操作的目标操作对象作为源操作对象而是可用的。
附图说明
[0010]
将参考在附图中图示的本技术的示例来仅作为说明进一步描述本技术,附图中:
[0011]
图1示意性图示了根据一个示例的数据处理装置;
[0012]
图2是图示出在一个示例实现方式中使用的发出队列的布置的框图;
[0013]
图3是图示出在一个示例实现方式中图2的分配电路的操作的流程图;
[0014]
图4是根据一个示例实现方式图示出操作信息可如何被从第二区段中的条目迁移到发出队列的第一区段中的条目的流程图;
[0015]
图5是根据一个示例布置图示出图2的选择电路内的拣选器的操作的流程图;
[0016]
图6图示了其中拣选器电路对于第一和第二区段包括单独的拣选器的一种实现方式,以及在一个这种实现方式中可使用的目标操作对象确定电路的布置;
[0017]
图7根据一个示例布置图示了在存在时延关键指示事件的情况下可如何更改发出队列的利用;并且
[0018]
图8根据一个示例实现方式示意性图示了在发出队列的条目内存储的操作信息的每个项目内可提供的字段。
具体实施方式
[0019]
用于从发出队列选择和发出操作的逻辑功能形成了调度器循环,其定时可随着发出队列的大小增大而受到影响。具体地,调度器循环包括以下功能:
[0020]
a)从发出队列内的被识别为准备好发出的所有操作中拣选要发出的操作;
[0021]
b)将拣选的操作复用出;
[0022]
c)将选中操作发出到执行管线;
[0023]
d)对于发出的操作的(一个或多个)依从操作更新源可用性信息(依从操作是具有与选中操作的目标操作对象相对应的源操作对象的操作),并且重复。
[0024]
调度器循环从定时角度来看通常形成关键循环,并且发出队列的大小可影响以上步骤(a)、(b)、(d)的性能并且从而对于调度器功能的整体频率能力是关键的。发出队列的时延和带宽对于性能也是关键的,因此调度器循环能够被迅速地执行、通常在单个时钟周期内执行,是重要的。因此,虽然如前所述希望增大发出队列的容量以便增大指令窗口大小,但增大发出队列的大小的能力通常受到高效地执行上述调度器循环的要求的约束。如本文将更详细论述的,本文描述的技术使得发出队列的有效容量能够被增大,而不会不利地影响上述调度器循环的性能。
[0025]
具体地,在一个示例布置中,提供了一种装置,其具有包括第一区段和第二区段的发出队列。第一区段和第二区段的每一者包括若干个条目,并且每个条目被采用来存储识别处理单元要执行的操作的操作信息。分配电路被布置为为多个操作接收操作信息,并且应用分配标准来为每个操作确定要将该操作的操作信息分配到第一区段中的条目还是第二区段中的条目。操作信息被布置为识别关联操作所要求的每个源操作对象和每个源操作对象的可用性。
[0026]
选择电路随后被用于在给定的选择迭代期间从发出队列选择要被发出到处理单元的操作,选择电路被布置为从要求的源操作对象可用的那些操作之中选择该操作。
[0027]
可用性更新电路随后被用于为每个如下条目更新源操作对象可用性:该条目的操作信息将给定选择迭代中的选中操作的目标操作对象识别为源操作对象。有若干种方式可用来识别源操作对象和目标操作对象,但通常可参考用于存储数据值的物理寄存器值来识别它们。因此,如果目标操作对象由特定的物理寄存器识别,并且该同一物理寄存器被识别为发出队列的条目之一中的操作的源操作对象,则该源操作对象的源操作对象可用性指示可被更新来识别出该源操作对象现在可用,因为已知选中操作将生成要求的值。
[0028]
另外,根据本文描述的技术,一种推迟机制被用于在给定选择迭代之后的至少下一个选择迭代期间禁止选择电路选择与第二区段中的条目相关联的任何如下操作:该操作的要求源操作对象现在由于该操作以给定选择迭代中的选中操作的目标操作对象作为源操作对象而是可用的。
[0029]
通过这种方案,通过除了第一区段以外还提供第二区段而扩展了发出队列的容量,但由于推迟机制的使用,第二区段中的条目被从关键定时路径中去除。这可增大可用来针对第二区段中的条目执行调度器循环内的一个或多个功能的时间。因此,这使得第一区段的大小被设置成使得选择电路和可用性更新电路可针对第一区段中的条目足够迅速地操作以维持上述调度器循环的要求定时。然而,由于通过推迟机制的使用从关键路径中去除了第二区段中的条目,所以选择电路和可用性更新电路在处理第二区段中的条目时有更
宽松的定时可用。因此,发出队列的容量可被增大以便增大有效指令窗口大小,但对于发出队列内的调度操作可被执行的频率没有不利影响。
[0030]
有若干种方式可用来实现推迟机制。然而,在一个示例布置中,推迟机制被布置为推迟向选择电路提供由可用性更新电路为与第二区段中的条目相关联的任何如下操作确定的更新后源操作对象可用性:该操作的要求源操作对象现在由于该操作以给定选择迭代中的选中操作的目标操作对象作为源操作对象而是可用的。这种方案放松了对可用性更新电路在处理第二区段中的条目时的定时约束,因为它不需要及时为第二区段中的条目更新源操作对象可用性信息以便它们在同一选择迭代中被选择电路所考虑。此外,在将使得更新后的源操作对象可用性信息可用的后续选择迭代中,可以在该选择迭代中更早使其对选择电路可用,因为其已经被可用性更新电路在先前选择迭代期间确定了。
[0031]
推迟机制可采取多种形式,但在一个示例实现方式中包括缓冲器存储。缓冲器存储可采取多种形式,并且可例如由锁存电路形成,这些锁存电路在每个时钟周期结束时锁存某些信号路径上的值,并且因此例如可锁存在可用性更新电路和选择电路之间的路径上传播的信号,使得选择电路接收这些信号的时间比它们被可用性更新电路产生的时间晚一个时钟周期。
[0032]
分配电路为了确定接收到的操作信息的项目是被分配到第一区段的条目中还是第二区段的条目中而应用的分配标准可采取多种形式。然而,在一个示例实现方式中,分配电路被布置为应用如下标准作为分配标准:该标准确保操作信息被存储在第一区段的条目中的操作和操作信息被存储在第二区段的条目中的操作之间的年龄排序,使得操作信息被存储在第一区段的条目中的所有操作比操作信息被存储在第二区段的条目中的所有操作更老旧。具体地,取得的指令通常将按原始程序顺序被解码,并且因此操作信息将被分配电路按原始程序顺序接收。一旦操作信息已被分配到发出队列中,则操作就可被乱序发出到处理单元的执行单元以支持ooo执行。因此,分配电路将对于接收到的操作信息的项目的相对年龄有隐式理解,因为这些项目将按年龄顺序被接收。通过应用确保操作信息被存储在第一区段的条目中的所有操作都比操作信息被存储在第二区段的条目中的所有操作更老旧的标准,这可辅助由选择电路采取的步骤。具体地,选择电路可被布置为优先选择其源操作对象可用的更老旧操作,并且因此在这种情况中可被布置为优先从第一区段而不是第二区段中选择操作。
[0033]
当采用以上形式的分配标准时,分配电路可被布置为当在第二区段中没有占用的条目时将操作信息分配到第一区段中,但一旦第一区段中的条目已满并且变得有必要开始将操作信息分配到第二区段的条目中,分配电路在分配接收到的操作信息的更多项目时就需要将该事实考虑在内以便确保第一区段中的所有操作信息都比第二区段中的所有操作信息更老旧。
[0034]
在一个示例布置中,分配电路还被布置为将操作信息从第二区段中的条目迁移到第一区段中的条目以便维持年龄排序。从而,分配电路可被布置为在第一区段具有可用条目时将操作信息从第二区段中的条目迁移到第一区段中的条目。具体地,一旦第二区段中有至少一个条目被占用,新接收到的操作信息的项目就将不能够被直接提供到第一区段的条目,直到第二区段中的条目已被迁移到第一区段中的条目为止。
[0035]
在一个示例实现方式中,分配电路被布置为在应用分配标准时在第二区段没有活
跃条目时将接收到的操作信息分配到第一区段的可用条目中,其中活跃条目是为等待发出到处理单元的操作存储操作信息的条目。因此,当在第二区段中没有活跃条目时,接收到的操作信息的项目可被直接分配到第一区段的条目中,假定可用条目存在的话。然而,分配电路还被布置为当应用分配标准时在第二区段具有至少一个活跃条目时将接收到的操作信息分配到第二区段中的可用条目中。通过这种方案,这维持了第一区段的条目和第二区段的条目之间的整体年龄排序。
[0036]
虽然在上述实现方式中,在第一区段的条目中存储的操作信息和第二区段的条目中存储的操作信息之间维持了年龄排序,但在任何特定区段的个体条目之间可以应用或者不应用年龄排序约束。因此,在一个示例实现方式中,可以提供年龄排序约束,但这可要求在特定区段内的条目之间的操作信息的大量移动。从而,根据替换实现方式,第一区段和第二区段的至少一者能够将分配的操作信息存储到任何可用条目中,而不受该区段中的条目之间的年龄排序的约束,并且该装置被布置为提供年龄排序存储来为该区段的条目中存储的操作信息识别年龄顺序。因此,可以在特定区段的条目内自由分配信息并且可以使用单独的结构来保持跟踪任何特定条目内维护的操作信息的项目的相对年龄。
[0037]
在一个示例布置中,选择电路被布置为在从要求的源操作对象可用的那些操作之中选择操作时应用年龄排序标准,以便优先从要求的源操作对象可用的那些操作之中选择最老旧的操作。将会明白,虽然选择电路可能主要基于年龄排序来做出其决定,但选择电路在决定要选择哪个操作时也可考虑到一个或多个其他因素,例如处理单元内的相关功能单元的可用性,用于传播由功能单元执行的操作所生成的结果的结果总线的可用性,等等。
[0038]
当选择电路应用上述年龄排序标准时,将会明白在分配标准确保第一区段的条目中存储的所有操作比第二区段的条目中存储的所有操作更老旧的实现方式中,这将意味着选择电路被布置为从要求的源操作对象可用的那些操作之中优先选择操作信息被存储在第一区段的条目中的操作。
[0039]
可按多种方式来布置选择电路。例如,单个选择机制可被布置为对于要求的源操作对象可用的所有操作审查操作信息,无论该操作信息是被存储在第一区段还是第二区段中,并且随后应用上述的年龄排序标准来确定要选择哪一个。然而,在一个特定的示例实现方式中,选择电路包括与第一区段和第二区段相关联的单独的拣选器电路。具体地,在这种布置中,选择电路可包括第一拣选器,用来从操作信息被存储在第一区段的条目中并且要求的源操作对象可用的操作之中选择第一候选操作,以及第二拣选器,用来从操作信息被存储在第二区段的条目中并且要求的源操作对象可用的操作之中选择第二候选操作。最终选择电路随后被用于挑选第一候选操作作为选中操作,除非没有有效的第一候选操作可用,在此情况下最终选择电路被布置为挑选第二候选操作作为选中操作。
[0040]
通过如上所述采用分开的第一和第二拣选器,这可带来某些实现益处。例如,如早前所述,由于推迟机制可推迟向选择电路提供由可用性更新电路为与第二区段中的条目相关联的某些操作确定的更新后源操作对象可用性,这意味着该更新后源操作对象可用性信息是在第二拣选器接收被其用来选择第二候选操作的操作信息的选择迭代之前的选择迭代中确定的。因此,在任何给定的选择迭代期间,第二拣选器不需要等待由可用性更新电路执行的操作的结果。
[0041]
因此,在一个示例布置中,第二拣选器被布置为在可用性更新电路产生了更新后
源操作对象可用性之前执行下一选择迭代中的第二候选操作的选择,而第一拣选器被布置为在执行下一选择迭代中的第一候选操作的选择之前为第一区段中的任何条目等待来自可用性更新电路的更新后源操作对象可用性。因此,第二拣选器输出可被更早地产生,并且最终选择电路于是能够一旦第一拣选器选择了第一候选操作就挑选选中操作。
[0042]
来自第二拣选器的输出的提早可用也可导致装置的其他组件内的其他性能改善。例如,装置还可包括目标确定电路以确定每个选择迭代中的选中操作的目标操作对象。目标确定电路可包括初始评估电路来为第二候选操作确定目标操作对象并从而为操作信息被存储在第二区段的条目中的任何其他操作排除目标操作对象,并且包括最终评估电路来在最终选择电路已挑选了选中操作时为选中操作确定目标操作对象,最终评估电路忽略被初始评估电路排除的任何目标操作对象。因此,到最终评估电路操作时,若干个可能的目标操作对象已经被排除,因此改善了最终评估电路的性能。
[0043]
可按多种方式形成初始和最终评估电路。然而,在一个示例实现方式中,初始评估电路可被形成为第一级复用电路来从第二区段中的条目的可能目标操作对象之中为第二候选操作选择目标操作对象。类似地,最终评估电路可被形成为第二级复用电路来从第一区段中的条目的可能目标操作对象和由第一级复用电路输出的第二候选操作的目标操作对象之中为选中操作选择目标操作对象。虽然复用电路可按多种方式来布置,但在一个示例实现方式中,每个复用电路被硬连线,使得其从相关区段中的每个条目接收目标操作对象信息,无论这些条目是否存储有效信息,并且无论这些条目中的操作是否仍可拣选,因此也无论其要求的源操作对象是否可用。这意味着复用电路不需要在每个选择迭代期间被重配置,并且选择电路的操作确保了选中操作是准备好被发出的操作。由于初始评估电路可在最终评估电路能够执行其复用功能之前执行其复用功能,所以可以看出目标确定电路的整体性能可得以改善,因为初始评估电路的使用减小了要求的最终评估电路的大小。具体地,与没有使用初始评估电路的情况相比,实现最终评估电路的第二级复用电路将具有更少的输入。
[0044]
在一个示例实现方式中,发出队列包括若干个初始条目,在分配电路确定要将接收到的操作信息分配到第一区段的条目还是第二区段的条目中之前,接收到的操作信息最初被存储到这些初始条目中。这允许了接收到的操作信息的项目在分配电路确定该信息应当被存储在第一区段的条目还是第二区段的条目中之前被缓冲,并且因此一定数目的初始条目的使用可减小否则将会在分配操作上施加的定时约束。初始条目的数目是设计选择的事,例如取决于提供到发出队列中的写入端口的数目。例如,如果向发出队列中提供了两个写入端口,则可认为提供两个初始条目是适当的,在单个周期中可接收的操作信息的项目可被存储在这两个初始条目中。
[0045]
在一个示例实现方式中,选择电路在某些情况中也能够从初始条目中选择。具体地,选择电路可被布置为在以下情况发生时从初始条目中选择操作:该操作的要求的源操作对象可用并且第一和第二区段中没有条目为要求的源操作对象可用的操作存储操作信息。
[0046]
如果希望,可以使第一和第二区段的使用是可配置的。例如,响应于至少一个时延关键指示事件,发出队列可被布置为禁止对第二区段的使用。具体地,在确定操作的时延关键的情形中,可能认为将条目分配到第二区段中是不适当的,因为知道于是当这些操作被
可用性更新电路的动作唤醒时将有至少一个周期的延迟(假设这些操作在该阶段仍在第二区段的条目中)。相反,可能认为在这种情况中以大小减小的发出队列操作是更好的。
[0047]
作为为什么可能希望使得对第一和第二区段的使用可配置的另一示例,对第二区段的使用的选择性禁止可被布置为在检测到在执行操作时只有很少或者没有并行性可用时发生。在有更多并行性的情况下,更深的队列具有益处并且从而使能更慢的第二区段具有益处。然而,在只有很少或者没有并行性的情况下,消耗在将操作移入和移出更慢的区段时涉及的功率可能是不适当的,因为它们有可能直到后来它们移动到更快的第一区段之后都不会被拣选。当取而代之可以就只是暂缓调谴时,操作的移动因此可不必要地消耗功率。因此,可识别指令流的不会受益于更深队列的部分,并且于是在执行这些部分时可禁用较慢的区段以便节省功率。
[0048]
现在将参考附图描述具体示例。
[0049]
图1示意性图示了具有包括若干个管线阶段的处理管线的数据处理装置2的示例。管线包括用于预测分支指令的结果并且生成要取得的指令的一系列取得地址的分支预测器4。取得阶段6从指令缓存8取得由取得地址识别的指令。解码阶段10对取得的指令解码以生成用于控制管线的后续阶段的控制信息。在下一阶段提供了乱序处理组件12来处理指令的乱序执行。这些组件可采取多种形式,例如包括重排序缓冲器(reorder buffer,rob)和重命名电路。rob被用于保持跟踪指令的进度并且确保指令被按序提交,尽管它们是被乱序执行的。重命名阶段12执行寄存器重命名以将由指令识别的体系结构寄存器指定符映射到识别在硬件中提供的寄存器14的物理寄存器指定符。寄存器重命名对于支持乱序执行可能是有用的,因为这可允许通过将指定相同体系结构寄存器的指令映射到硬件寄存器文件中的不同物理寄存器来消除这些指令之间的危害,以增大指令可被以与其被从缓存8取得的其程序顺序不同的顺序执行的可能性,这可通过允许较晚的指令在较早指令正等待操作对象变得可用的同时执行而改善性能。将体系结构寄存器映射到不同的物理寄存器的能力也可促进在分支误预测的情况下的体系结构状态的回滚。发出阶段16将等待执行的指令排队,直到处理这些指令所要求的操作对象在寄存器14中可用为止。执行阶段18执行指令以实现相应的处理操作。写回阶段20将执行的指令的结果写回到寄存器14。
[0050]
执行阶段18可包括若干个执行单元,例如用于评估分支指令是否已被正确预测的分支单元21,用于执行算术或逻辑操作的alu(算术逻辑单元)22,用于利用浮点操作对象执行操作的浮点单元24,以及用于执行加载操作以将数据从存储器系统加载到寄存器14或者执行存储操作以将数据从寄存器14存储到存储器系统的加载/存储单元26。在此示例中,存储器系统包括第一级指令缓存8,第一级数据缓存30,在数据和指令之间共享的第二级缓存32,以及主存储器34,但将会明白这只是可能的存储器层次体系的一个示例,并且其他实现方式可具有更多级的缓存或者不同的布置。加载/存储单元26可使用转化后备缓冲器36并且取得单元6可使用转化后备缓冲器37来将管线生成的虚拟地址映射到识别存储器系统内的位置的物理地址。将会明白,图1中所示的管线只是一个示例,并且其他示例可具有管线阶段或执行单元的不同集合。
[0051]
如前文所述,本文描述的技术具体而言涉及发出队列的操作,并且尤其是提供了一种机制,该机制使得发出队列的有效大小能够被增大,而不需要降低操作频率,同时仍使得调度器循环能够按期望的速度被执行,通常是在单个时钟周期内(即,使得选择迭代能够
在每个时钟周期发生,如果希望的话)。通过增大发出队列的有效大小,这可增大指令窗口大小,从而改善处理器的性能。然而,应当注意,增大发出队列中的条目的数目不是必要的。例如,对于构成发出队列的特定数目的条目,那么通过采用本文描述的技术,将可能增大操作频率,因为调度器循环可被更迅速地执行,并且这进而也将改善性能。作为另一示例,本文描述的技术可用于通过具有更少的快的(并且因此消耗更多功率的)条目来降低功率消耗。因此,本文描述的技术可用于获得频率、性能或者功率益处,或者这些的组合。
[0052]
图2是更详细图示出与图1的发出阶段16中提供的发出队列相关联地提供的组件的图。如图2中所示,发出队列100包括第一区段112和第二区段108,其中在一个示例实现方式中,每个区段包括多个条目,并且其中每个条目可用于为要被执行阶段18内的执行单元21、22、24、26之一执行的操作存储操作信息。在一些实现方式中,可以为执行单元21、22、24、26的每一者提供的单独的发出队列100,但在替换实现方式中,可以为执行单元21、22、24、26中的多个提供单个发出队列100。
[0053]
这里,第一区段112内的条目将被称为快条目,而第二区段108内的条目将被称为慢条目。从接下来的论述将会清楚,针对这些条目对于快和慢的称呼是从性能角度来看对于该条目针对唤醒事件的行为的描述。具体地,当特定条目中存储的操作的所有要求的源操作对象变得可用时,则该条目被视为被唤醒,因为它于是变为候选条目,选择电路130可从该候选条目选择要被发出到执行阶段18的操作。从这里的论述将会清楚,在关于第二区段中的条目的这种唤醒事件之后,在关联的操作变得可用来供选择电路130选择为发出的操作方面,存在延迟。
[0054]
发出队列可包括若干个写入端口,并且在图2中被示为具有两个写入端口,使得两个操作的操作信息能够被同时接收到发出队列中。分配电路120被用于确定要将新接收到的操作信息的项目分配到第一区段的条目中还是第二区段的条目中,并且稍后将参考图3论述在一个示例实现方式中分配电路采用的过程的细节。假设分配电路可足够迅速地执行其分配分析,则接收到的操作信息的项目可被立即指引到第一区段112或第二区段108中的相关条目中。然而,如图2中所示,在一个示例中,发出队列100包括若干个初始条目106,在此特定示例中提供了两个初始条目102、104,即对于每个写入端口有一初始条目。因此,操作信息的每个新项目最初被缓冲在初始条目102、104之一内,并且从那里被路由到第一区段112或者第二区段108,这取决于分配电路120执行的分析。
[0055]
在一个示例实现方式中,分配电路120被布置为应用分配标准以确保操作信息被存储在第一区段112的条目中的操作和操作信息被存储在第二区段108的条目中的操作之间的年龄排序。结果,确保了操作信息被存储在第一区段的条目中的所有操作比操作信息被存储在第二区段的条目中的所有操作更老旧。稍后将参考图3论述在一个特定实现方式中为了实现这个年龄排序而执行的分配过程。
[0056]
然而,在图2中所示的示例实现方式中,对于在特定区段的各种条目之间采用严格的年龄排序没有要求,并且因此任何新接收到的操作信息的项目可被存储到分配电路决定将该操作信息的项目路由到的区段内的任何可用条目中。于是可使用单独的年龄排序存储来保持跟踪各个区段内的活跃条目的相对年龄,活跃条目是当前为等待发出到执行阶段的未决操作存储操作信息的条目。在一个特定示例中,这个年龄排序存储可由与每个区段相关联地提供的年龄矩阵125、127来实现。每个年龄矩阵中存储的信息可采取多种形式,其实
质上识别关联的区段内的每个活跃条目的相对年龄,该信息在选择电路130确定要被发出到执行阶段的下一操作时是可用的。
[0057]
操作信息由发出队列100从重命名阶段12接收,并且将识别要执行的操作,以及该操作要求的源操作对象。其通常也将识别目标操作对象,例如结果应当被写入到的物理寄存器。虽然一些源操作对象可以是立即值,但经常的情况是源操作对象中的一个或多个是参考物理寄存器之一来指定的,并且逻辑115可被用于执行对这种源操作对象的可用性的初始确定,并且将该信息作为被发出队列接收的操作信息的一部分提供。因此,在初始分配之时,可能源操作对象中的一个或多个对于关联的操作已经是可用的了,并且该可用性信息可被捕捉在操作信息内。然而,可能有一个或多个源操作对象尚未可用,并且因此与这种源操作对象相关联的可用性信息将指示出该事实。
[0058]
如前所述,操作仅在其源操作对象被认为可用时才可变成供选择电路130选择的候选,并且对于被分配到发出队列中的最初其所有源操作对象不是全都可用的任何操作,则关联的条目的源操作对象可用性将需要被更新来考虑到选择电路后续发出的操作。此功能可由图2中所示的可用性更新电路155利用下面将更详细论述的过程来执行。
[0059]
图8示意性图示了与发出队列100的条目内存储的操作信息180的每个项目相关联地可提供的字段。第一字段182被用于识别与该条目相关联的操作,而字段184被用于识别各种源操作对象。在提供立即值作为源操作对象之一的情况下,可在此字段内提供该立即值,并且对于参考寄存器指定的操作对象值,则在此字段中可使用寄存器识别符来识别那些源操作对象。字段184可被视为由若干个子字段组成,对于每个源操作对象有一个子字段。
[0060]
字段186提供源操作对象可用性信息,来识别要求的源操作对象是否可用。在一个示例实现方式中,源操作对象可用性字段186可被认为包括若干个子字段,其中每个子字段为关联的源操作对象提供状态标志。仅当状态标志指示出所有的源操作对象可用时,由操作信息180识别的操作才将被认为是供选择电路130选择的候选。
[0061]
如图8中还示出的,目标操作对象字段188被用于提供与该操作相关联的目标操作对象的指示。此信息由目标操作对象确定电路145为选中操作提取,从而其可被转发到可用性更新电路来使得发出队列中存储的依从操作的源操作对象可用性信息能够被更新。
[0062]
如前所述,有一系列逻辑功能要被执行来为发出队列实现调度器循环,并且这些功能形成关键循环。这个调度器循环在图2中由从选择电路130通过目标操作对象确定电路145并且经由锁存器150到进而将其输出提供到选择电路130的可用性更新电路155的路径示出。在图2中所示的示例中,在当前选择迭代(即,调度器循环的当前迭代)结束时,被选择来发出的操作的目标操作对象被锁存在寄存器150内。在下一选择迭代中,该值被输出到可用性更新电路155,以便使得发出队列内的活跃条目的源操作对象可用性信息能够被更新,该更新的信息被转发到选择电路130以使得下一操作能够被选择和发出,并且目标操作对象确定电路145随后确定该选中操作的目标以使得其可在该下一选择迭代结束时被存储在寄存器150内。通常,希望循环的该整个迭代在单个周期内发生,并且已发现这个调度器循环在规定装置可操作的整体频率时变成关键循环,以便使得所有要求的功能能够在单个时钟周期内被执行。
[0063]
如图2中所示,这个单周期调度仍针对快条目,即第一区段112内的条目执行,但推
迟机制170可用于将慢条目与调度器循环的关键路径解除耦合。因此,在当前选择迭代(即,调度器循环的迭代)开始时,寄存器150中锁存的目标操作对象(即,在先前选择迭代中发出的操作的目标)被广播到形成可用性更新电路155的组件。在图2中,此目标操作被称为ptag值。具体地,在示例实现方式中,在装置的阶段12内使用重命名来将指令指定的体系结构寄存器映射到寄存器集合14内的物理寄存器,并且这些物理寄存器由ptag值来识别。
[0064]
如图2中所示,可用性更新电路155包括用于快条目(即用于第一区段112中的条目)的查找/更新电路160和用于慢条目(即第二区段108中的条目)的查找/更新电路165。快条目更新过程在关键路径上,并且因此用于快条目的查找/更新电路160需要针对第一区段112中的条目执行查找操作以便为任何依从条目(即,为将使用从寄存器150广播的目标操作对象作为源操作对象的操作存储操作信息的任何条目)更新源操作对象可用性,并随后将该更新的信息传递到选择电路以使得调度器循环的剩余部分能够在同一时钟周期中被执行。可按多种方式来布置查找/更新电路,但在一个示例实现方式中使用内容可寻址存储器(content addressable memory,cam)查找过程以便访问和更新第一区段中的各种条目。更新的可用性信息随后被转发到选择电路130,并且具体地转发到选择电路内的准备就绪确定电路135。
[0065]
然而,如图2中所示,用于慢条目的查找/更新电路165不在关键路径上,因为其不需要及时产生其输出以便它在同一选择迭代期间对于选择电路130可用。取而代之,来自用于慢条目的查找/更新电路165的经更新的可用性信息被传递到推迟机制170,推迟机制170在一个示例中采取缓冲器电路的形式。具体地,缓冲器电路可用于将该更新的可用性信息到选择电路130的提供向前推迟至少一个时钟周期。在一个特定的实现方式中,锁存器被用于实现缓冲器电路,导致更新的可用性信息到选择电路的提供中的单个周期延迟。这意味着对于用于慢条目的查找/更新电路165的操作,有宽松得多的定时。同样,可以使用cam查找过程以便访问第二区段108中的条目,并且所要求的只是及时执行这一点以便更新的可用性信息在当前选择迭代结束时被缓冲在缓冲器170内。
[0066]
因此,通过此过程,将会理解提供给准备就绪确定电路135的信息相对于第二区段108中的条目延迟了一个周期,并且因此提供了对在选择电路130正在考虑的当前选择迭代之前一个周期中存在的第二区段中的条目所识别的操作的源可用性的指示。
[0067]
准备就绪确定电路135分析从可用性更新电路155提供的源操作对象可用性信息,尤其是由用于快条目的查找/更新电路160提供的信息和从缓冲器170转发来的关于慢条目的信息,并且确定哪些条目识别了作为在当前选择迭代期间供选择的候选的操作。如前所述,操作若要作为供选择的候选,其所有源操作对象必须都可用。此外,准备就绪确定电路可考虑某些其他标准,例如任何其他共享资源的可用性,以及任何其他先决条件。
[0068]
基于由准备就绪确定电路135执行的分析,拣选器电路140被提供以对可用于选择的任何操作的指示,然后应用选择标准以便选择这些操作之一作为要发出的下一个操作。例如,拣选器电路可应用年龄排序标准以便争取从准备就绪确定电路135指示为可用于选择的那些操作之中选择最老旧的操作。
[0069]
除了操作被拣选器电路140发出到执行阶段18以外,对选中操作的指示也被提供到目标操作对象确定电路145,目标操作对象确定电路145随后为选中操作确定目标操作对象。具体地,从先前论述的图8将会清楚,操作信息180将包括提供对目标操作对象的指示的
字段188,并且目标操作对象确定电路145被布置为捕捉该字段中的信息并且使得其在当前选择迭代结束时被锁存在寄存器150内。上述过程随后可在下一选择迭代中被重复,以便选择要发出的下一操作。
[0070]
如早前提及的,可以为执行阶段18中的所有执行单元提供单个发出队列,或者可以为每个这种执行单元提供单独的发出队列。在使用单个发出队列的情况下,可以修改调度器循环中的组件,以使得在每个选择迭代中可发出多于一个指令,例如可将一个操作发出到一个执行单元,可将另一操作发出到另一执行单元,等等。在对于每个执行单元维护单独的发出队列的实现方式中,那么在一个示例实现方式中,可对每个发出队列复制图2的电路,其中选择电路130在任何特定选择迭代期间只挑选至多单个操作来发出,并且该选中操作被路由到执行阶段18内的关联执行单元。
[0071]
图3是图示出在一个示例实现方式中图2的分配电路120的操作的流程图。具体地,分配电路120监视被接收到发出队列100的初始条目102、104中的信息。当在步骤200确定已接收到新的操作信息时,在步骤205确定在第二区段中是否存在任何活跃条目,即第二区段是否包含等待发出的任何未决操作。如果否,则在步骤210确定在第一区段中是否有可用条目,即是否存在当前没有存储关于未决操作的信息的空闲条目。如果是,则在步骤215,操作信息可被分配到第一区段中的可用条目。
[0072]
然而,如果在步骤205确定在第二区段中有至少一个活跃条目,则过程前进到步骤220,在该步骤中确定在第二区段中是否有可用条目,即第二区段是否尚未满。假设有可用条目,则过程前进到步骤225,在该步骤中操作被分配到第二区段中的可用条目中。如果在步骤210确定在第一区段中没有可用条目,即第一区段当前已满,则过程也前进到步骤225。
[0073]
另外,如果在步骤220确定在第二区段中没有可用条目,则过程返回到步骤225,并且特别是在这个时点,新的操作信息保持在初始条目中,直到其可被移动到第一区段或第二区段的时间为止。这可例如意味着发出队列在下一周期期间不能够接受新的操作信息,直到初始条目中的至少一者可用为止。
[0074]
通过采用图3中所示的方案,将会明白在第一区段中的条目和第二区段中的条目之间维持年龄排序,并且事实上是在如下意义上对于初始区段106中的条目维持:操作信息需要被保持在其中,而不是立即被移动到第一区段或第二区段中。
[0075]
当操作信息被分配到第一区段或第二区段中的条目中时,则关联的年龄矩阵127、125将被更新以保持跟踪存储在关联的区段的各种条目内的操作的相对年龄。此信息可被提供到选择电路130以使得拣选器电路140在选择要发出的操作时能够应用年龄排序标准。
[0076]
在一个示例实现方式中,分配电路120也被用于控制操作信息从第二区段的条目移动到第一区段的条目中。具体地,从图3将会明白操作信息只是由于在第二区段的活跃条目中已经有操作信息或者由于第一区段已满,才被分配到第二区段中。随着在第一区段内空间变得可用,分配电路争取将操作信息从第二区段迁移到第一区段,以便维持区段之间的年龄排序,并且腾出空间来使得操作信息的新项目能够被从初始条目移出到第一或第二区段中。
[0077]
图4示出了可用来控制操作信息从第二区段108到第一区段112的移动的过程。在步骤250,确定在第二区段中是否有任何活跃条目,如果否则不要求动作。然而,每当在第二区段中有至少一个活跃条目时,则在步骤255确定在第一区段中是否有至少一个可用条目。
假设在第一区段中有至少一个可用条目,则在步骤260至少第二区段的活跃条目中的最老旧操作信息被移动到第一区段中的可用条目。
[0078]
取决于提供的写入端口的数目,以及第一区段中的可用条目的数目,在特定时钟周期中有可能移动操作信息的多于一个项目。在图2中所示的示例中,有两个写入端口,并且因此来自第二区段的两个信息项目可在单个周期中被移动到第一区段中。
[0079]
通过使用上文参考图3和图4论述的过程,将会明白被放置在慢条目内的操作将随着可用性允许而下移到快条目中,除非它们被拣选器140拣选并且被预先解除分配。还应当注意,在描述的实现方式中可优化第二区段和第一区段之间的移动,以及从初始区段106到第一区段和第二区段的相关者中的移动,以使得要求的移动达到最低限度。具体地,在第二区段中不存在活跃条目的情况下,操作信息将被直接从初始条目移动到第一区段中。由于多个条目可在单个周期中移动,因此将会明白可以优化各种移动以争取使要求的移动达到最低限度,同时仍然确保年龄排序。因此,作为一个非常具体的示例,如果操作信息的两个新项目被接收到初始条目102、104中,并且在第二区段108中有一个现有活跃条目,则第二区段108中的操作信息可被移动到第一区段中的快条目,初始条目中的更老旧操作可被直接移动到第一区段的快条目中,并且初始条目中的两个条目中更年轻的那个可被移动到第二区段108的慢条目中。
[0080]
图5是图示出在一个示例实现方式中图2的拣选器电路140的操作的流程图。在步骤300,确定在第一区段中是否有识别源操作对象可用的操作的至少一个活跃条目。如果是,则在步骤305,拣选器电路140从第一区段中选择操作来发出。如前所述,在第一区段中有多于一个这种条目的情况下,则来自年龄矩阵127的年龄排序信息可被拣选器考虑到以便选择这些操作中最老旧的那个来发出。
[0081]
如果从第一区段没有可用操作选择,则过程前进到步骤310,在该步骤中确定在第二区段中是否有识别源操作对象可用的操作的至少一个活跃条目。如前所述,由于推迟机制170,在为第二区段108中的条目向拣选器140提供更新的源可用性信息时有至少一个周期的延迟,并且因此在当前选择迭代期间,拣选器在考虑的是在先前选择迭代期间关于第二区段条目存在的可用性。
[0082]
如果在第二区段中有源操作对象可用的至少一个条目,则过程前进到步骤315,在该步骤中从第二区段108中选择操作来发出到执行单元。同样,如果在第二区段中有多于一个可用操作,则来自年龄矩阵125的年龄排序信息可被拣选器考虑到以便争取选择这些操作中最老旧的那个来发出。
[0083]
如果在步骤310确定在第二区段中没有可用条目供选择,则在步骤320确定是否有识别源操作对象可用的操作的至少一个初始条目,并且如果是则在步骤325从初始区段106中选择操作。在初始区段106中的两个条目都包含可拣选操作的情况下,则在步骤325将选择这些操作中最老旧的那个。如果在步骤320确定在初始区段106中没有可选择的操作,则在步骤330确定在当前选择迭代期间不选择操作。
[0084]
图6图示了一个示例实现方式,其中拣选器电路140实际上是由若干个单独的拣选器电路形成的,至少包括第一拣选器400和第二拣选器410,并且在此情况下包括第三拣选器412。第一拣选器400在由第一区段中的条目识别的任何就绪操作之间挑选,而第二拣选器410在由第二区段中的条目识别的任何就绪操作之间挑选。如果第一拣选器400能够选择
第一候选操作,则这将优先于由第二拣选器挑选的第二候选操作,并且此功能由最终选择电路425实现,最终选择电路425在一个实现方式中可采取复用器的形式,该复用器在有效第一候选操作被选择的情况下挑选第一候选操作,否则在有效第二候选操作被第二拣选器选择的情况下挑选第二候选操作。第三拣选器412可用于从初始区段中选择操作,如果初始条目中的至少一者识别源操作对象可用的操作的话。在参考图2描述的示例中,有两个被年龄排序的初始条目(即,一者的内容始终比另一者的内容更老旧),因此如果更老旧的操作准备就绪则其被拣选,否则如果更年轻的操作准备就绪则其被拣选。如果第一拣选器400和第二拣选器410都没有指示出准备好被选择的有效操作,则复用器425可选择由第三拣选器412指示的操作。
[0085]
通过采用单独的第二拣选器,这可带来某些实现益处。具体地,从图2将会清楚,关于第二区段中的条目的源操作对象可用性的信息在给定的选择迭代期间是直接从缓冲器170可用的,而不需要等待由可用性更新电路执行的操作的结果,并且因此这个第二拣选器410可在第一拣选器400之前被激活,因为第一拣选器需要等待来自用于快条目的查找/更新电路160的更新的可用性信息。第二拣选器410也可在第三拣选器412之前被激活。
[0086]
这也可在目标操作对象确定电路145的操作中产生下游性能改善,如图6中的具体示例实现方式所示。具体地,在此实现方式中,目标操作对象确定电路包括初始复用器415来基于由第二拣选器产生的第二候选操作在慢条目的各种目标操作对象识别符之间进行选择。这导致输出单个信号作为到最终复用器420的输入,并且最终复用器也为所有快条目和初始条目接收目标操作对象识别符。因此,到来自最终选择电路425的输出可用之时,最终复用器420可被该输出信号直接驱动来输出目标操作对象识别符。从而,与最终复用器必须为第一区段和第二区段两者中的每个条目接收输入的情况相比,可以使最终复用器更小。
[0087]
具体地,在图6中所示的示例中,到最终复用器420的输入的总数目可被设置为等于第一区段中的条目的数目,加上初始区段106中的条目的数目,加上用于第二区段中的所有条目的一个输入,因为初始复用器415将会已针对这些第二区段条目完成了初始过滤以只产生关于第二区段的条目的单个目标操作对象识别符。由于从而减小了最终复用器的大小,这可提高目标操作对象确定电路145的操作的速度。
[0088]
在一个示例实现方式中,可以使对第一和第二区段的使用是可配置的。具体地,在正常使用场景中,第一和第二区段两者都将被使用,并且发出队列将以早前所述的方式操作。然而,在一个或多个识别的事件发生时,可以决定禁用第二区段,从而减小发出队列的有效大小。这可例如被用在某些时延关键场景中。图7是图示出为了实现这种功能而可采用的过程的流程图。因此,在步骤500,确定是否发生了时延关键指示事件,并且当检测到这种事件时,过程前进到步骤505,在该步骤中随着第一区段中的空间变得可用,第二区段中的任何活跃条目被迁移到第一区段,并且同时防止向第二区段中的任何进一步分配。
[0089]
如早前提及的,取代使对第二区段的选择性禁用基于检测到时延关键事件,对第二区段的使用的选择性禁用可被布置为在检测到在执行操作时只有很少或者没有并行性可用时发生,并且因此步骤500在该情况下将是对低程度的并行性可用的检测。
[0090]
在步骤505之后,于是在步骤510,当第二区段中不再有任何活跃条目时,第二区段被禁用。然后,将会明白,操作信息的新项目仍可被接收到初始条目106中,但一旦第一区段
中有空间可用,它们就将被直接向下迁移到第一区段112中。用于慢条目的查找/更新电路165当在这个大小减小的操作模式中时于是不再是必需的,但主定时关键调度器路径继续以与早前参考快条目论述的相同的方式操作。
[0091]
在步骤515,确定是否存在时延关键结束事件,并且当确定这种事件已出现时,则在步骤520可重启用第二区段。
[0092]
根据上述示例实现方式,将会明白本文描述的技术使得发出队列的有效容量能够被增大,从而增大了指令窗口大小,并且使能了ooo处理器的性能的增大。另外,大小的这个增大可在不会不利地影响调度器循环的定时的情况下实现,调度器循环是处理器内的定时关键功能。作为对于增大发出队列的大小的一个替换,发出队列的大小可保持相同,但调度器功能将能够被以更高的频率执行,并且因此如果希望的话性能的增大可按该方式实现,而不是增大发出队列的整体大小。
[0093]
如本文所述,发出队列的第二和第一区段之间的移动可被管理以便维持期望的年龄排序,并且该移动可独立于对操作的任何拣选和解除分配而执行。
[0094]
在本申请中,词语“被配置为”被用于意指装置的元素具有能够执行定义的操作的配置。在这个上下文中,“配置”指的是硬件或软件的布置或者互连方式。例如,装置可具有提供定义的操作的专用硬件,或者处理器或其他处理设备可被编程为执行该功能。“被配置为”并不意味着为了提供定义的操作,装置元素需要被以任何方式改变。
[0095]
虽然本文已参考附图详细描述了本发明的说明性实施例,但要理解本发明不限于这些确切的实施例,并且在不脱离如所附权利要求限定的本发明的范围和精神的情况下,本领域技术人员可在其中实现各种改变、添加和修改。例如,在不脱离本发明的范围的情况下,从属权利要求的特征可与独立权利要求的特征进行各种组合。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1