在乱序(OOO)处理器中提供早期指令执行,以及相关设备、方法和计算机可读媒体与流程

文档序号:11450217阅读:629来源:国知局
在乱序(OOO)处理器中提供早期指令执行,以及相关设备、方法和计算机可读媒体与流程

优先权申请案

本申请案主张2014年12月12日申请且标题为“在乱序(ooo)处理器中提供早期指令执行,以及相关设备、方法和计算机可读媒体”的第14/568,637号美国专利申请案的优先权,所述专利申请案以全文引用的方式并入本文中。

本发明的技术大体上涉及通过乱序(ooo)处理器来执行指令。



背景技术:

乱序(ooo)处理器是能够以由每一指令的输入操作数的可用性确定的次序执行计算机程序指令,而不管所述指令在计算机程序中的出现次序如何的计算机处理器。通过乱序执行指令,ooo处理器可能够充分利用在ooo处理器等待数据存取操作完成时,原本将变为废弃的处理器时钟循环。举例来说,代替于在为较旧的程序指令检索输入数据时必须“停止”(即,有意引入处理延迟),ooo处理器可继续执行能够立刻执行的最近取到的指令。以此方式,ooo处理器可较有成效地利用处理器时钟循环,从而产生ooo处理器每处理器时钟循环能够处理的指令的数目的增加。

然而,每时钟循环处理的指令的数目增加的程度可受指令之间的相依性的存在限制。举例来说,考虑以下指令序列:

i1:movr1,0x0000;将值0x0000加载到寄存器r1中。

i2:movtr1,0x1000;将值0x10000000加载到寄存器r1中。

i3:r3=r1+r1;将r1的值与其本身相加,并存储在寄存器r3中。

i4:r4=存储器[r3];将值存储在寄存器r4中的存储器地址r3处。

在上述指令序列中,归因于指令i3接收来自寄存器r1的值作为输入操作数的事实,指令i3与指令i1之间,以及指令i3与i2之间存在相依性。因此,指令i3无法执行,直到指令i1和i2两者均已完成为止。类似地,指令i4无法执行,直到已通过指令i3计算了寄存器r3的值之后为止。

一些常规计算机微架构尝试通过提供专用结构来高速缓存特定寄存器值而不等待指令产生寄存器值来执行,来解决指令相依性的问题。一种此类结构是常数高速缓冲存储器,其可维持最近已经加载有立即值的一组寄存器。类似地,其它微架构可提供所述因特尔堆栈引擎的结构,其可实现特定寄存器的早期执行(例如用于堆栈指针更新)。然而,在这两个实例中,高速缓存的寄存器值限于非常受限一组指令所产生的寄存器更新值。



技术实现要素:

详细描述中所揭示的方面包含在乱序(ooo)处理器中提供早期指令执行。还揭示相关设备、方法和计算机可读媒体。在这点上,在一个方面中,提供一种包括早期执行引擎的设备。所述早期执行引擎包含早期寄存器高速缓冲存储器,其在一些方面中是用于高速缓存存储在寄存器中的非推测性立即值的专用结构。在一些方面,所述早期执行引擎还包含早期执行单元,其可用于实施指令的早期执行。所述早期执行引擎接收来自ooo处理器的前端指令管线的传入指令,且确定所述传入指令的输入操作数是否存在于早期寄存器高速缓冲存储器中的条目中。如果是,那么所述早期执行引擎用高速缓存在早期寄存器高速缓冲存储器的条目中的非推测性立即值来取代传入指令的输入操作数。以此方式,可用高速缓存的立即值来代替输入操作数,从而允许执行所述传入指令,而不需要寄存器存取。在一些方面,所述早期执行引擎可进一步确定所述传入指令是否为有早期执行资格的指令(例如早期执行单元所支持的相对简单的算术、逻辑或移位运算)。如果传入指令是有早期执行资格的指令,那么早期执行引擎可使用早期执行单元来执行所述传入指令。所述早期执行引擎接着可将由传入指令的早期执行产生的输出值写入到早期寄存器高速缓冲存储器。在一些方面,接着可用提供到ooo处理器的后端指令管线的传出指令来代替所述传入指令。

在另一方面,提供一种包括早期执行引擎的设备。早期执行引擎以通信方式耦合到ooo处理器的前端指令管线和后端指令管线。早期执行引擎包括早期执行单元和早期寄存器高速缓冲存储器。早期执行引擎经配置以接收来自前端指令管线的传入指令。早期执行引擎进一步经配置以确定传入指令的一或多个输入操作数的输入操作数是否存在于早期寄存器高速缓冲存储器中的一或多个条目的对应条目中。所述早期执行引擎还经配置以响应于确定所述输入操作数存在于所述对应条目中,用存储在所述对应条目中的非推测性立即值来取代所述输入操作数。

在另一方面,提供一种包括ooo处理器的早期执行引擎的设备。早期执行引擎包括用于接收来自ooo处理器的前端指令管线的传入指令的装置。早期执行引擎进一步包括用于确定传入指令的一或多个输入操作数中的输入操作数是否存在于早期执行引擎的早期寄存器高速缓冲存储器中的一或多个条目的对应条目中。早期执行引擎还包括用于响应于确定所述输入操作数存在于对应条目中而用存储在所述对应条目中的非推测性立即值来取代所述输入操作数的装置。

在另一方面,提供一种提供早期指令执行的方法。所述方法包括通过ooo处理器的早期执行引擎,接收来自ooo处理器的前端指令管线的传入指令。所述方法进一步包括确定传入指令的一或多个输入操作数中的输入操作数是否存在于早期执行引擎的早期寄存器高速缓冲存储器中的一或多个条目的对应条目中。所述方法还包括响应于确定所述输入操作数存在于对应条目中,用存储在所述对应条目中的非推测性立即值来取代所述输入操作数。

在另一方面,提供一种上面存储有计算机可执行指令的非暂时性计算机可读媒体。在由处理器执行时,计算机可执行指令致使所述处理器接收来自处理器的前端指令管线的传入指令。所述计算机可执行指令进一步致使所述处理器确定传入指令的一或多个输入操作数中的输入操作数是否存在于早期执行引擎的早期寄存器高速缓冲存储器中的一或多个条目的对应条目中。所述计算机可执行指令还致使所述处理器响应于确定所述输入操作数存在于对应条目中,用存储在所述对应条目中的非推测性立即值来取代所述输入操作数。

附图说明

图1是包含用于提供早期指令执行的早期执行引擎的示范性乱序(ooo)处理器的框图;

图2是说明图1的早期执行引擎的示范性早期寄存器高速缓冲存储器的内容的框图;

图3a到3c是说明图1的早期执行引擎检测和替换输入操作数并提供传入有早期执行资格的指令的早期执行的示范性通信流的图;

图4a到4c是说明图1的早期执行引擎检测和替换对其不支持早期执行的传入指令的输入操作数,且接收对早期寄存器高速缓冲存储器的更新的示范性通信流的图;

图5a到5c是说明图1的早期执行引擎检测和处置操作数对其不可用的传入指令且接收对早期寄存器高速缓冲存储器的更新的示范性通信流的图;

图6是说明图1的早期执行引擎检测管线冲洗和从管线冲洗恢复的示范性通信流的图;

图7a到7b是说明图1的早期执行引擎提供早期指令执行的示范性过程的流程图;

图8是说明基于接收到的架构寄存器值来更新早期寄存器高速缓冲存储器的额外示范性操作的流程图;

图9是说明用于检测管线冲洗和从管线冲洗恢复的额外示范性操作的流程图;以及

图10是可包含图1的早期执行引擎的示范性基于处理器的系统的框图。

具体实施方式

现参考各图,描述本发明的若干示范性方面。词语“示范性”在本文中用于表示“充当实例、例子或说明”。本文中描述为“示例性”的任何方面未必理解为比其它方面优选或有利。

详细描述中所揭示的方面包含在乱序(ooo)处理器中提供早期指令执行。还揭示相关设备、方法和计算机可读媒体。在这点上,在一个方面中,提供一种包括早期执行引擎的设备。所述早期执行引擎包含早期寄存器高速缓冲存储器,其在一些方面中是用于高速缓存存储在寄存器中的非推测性立即值的专用结构。在一些方面,所述早期执行引擎还包含早期执行单元,其可用于实施指令的早期执行。所述早期执行引擎接收来自ooo处理器的前端指令管线的传入指令,且确定所述传入指令的输入操作数是否存在于早期寄存器高速缓冲存储器中的条目中。如果是,那么所述早期执行引擎用高速缓存在早期寄存器高速缓冲存储器的条目中的非推测性立即值来取代传入指令的输入操作数。以此方式,可用高速缓存的立即值来代替输入操作数,从而允许执行所述传入指令,而不需要寄存器存取。在一些方面,所述早期执行引擎可进一步确定所述传入指令是否为有早期执行资格的指令(例如早期执行单元所支持的相对简单的算术、逻辑或移位运算)。如果传入指令是有早期执行资格的指令,那么早期执行引擎可使用早期执行单元来执行所述传入指令。所述早期执行引擎接着可将由传入指令的早期执行产生的输出值写入到早期寄存器高速缓冲存储器。在一些方面,接着可用提供到ooo处理器的后端指令管线的传出指令来代替所述传入指令。

在这点上,图1是包含提供早期指令执行的早期执行引擎102的示范性ooo处理器100的框图,如本文所揭示。ooo处理器100包含输入/输出电路104、指令高速缓冲存储器106和数据高速缓冲存储器108。ooo处理器100可包含已知数字逻辑元件、半导体电路、处理核心和/或存储器结构,以及其它元件或其组合中的任一者。本文中所描述的各方面并不限于任何特定元件布置,且所揭示技术可容易地延伸到半导体裸片或封装上的各种结构和布局。

ooo处理器100进一步包括执行管线110,其可细分为前端指令管线112和后端指令管线114。如本文所使用,“前端指令管线112”可指按照惯例位于执行管线110的“开头”且提供获取、解码和/或指令队列功能性的管线级。在这点上,图1的前端指令管线112包含一或多个获取/解码管线级116和一或多个指令队列级118。作为非限制性实例,一或多个获取/解码管线级116可包含f1、f2和/或f3获取/解码级(未图示)。“后端指令管线114”在本文是指执行管线110的用于发出指令以供执行,用于实现指令的实际执行,和/或用于加载和/或存储指令执行所需或所产生的数据的后续管线级。在图1的实例中,后端指令管线114包括重命名级120、寄存器存取级122、保留级124、一或多个调度级126以及一或多个执行单元128。应理解,前端指令管线112的级116、118以及图1中示出的后端指令管线114的级120、122、124、126、128仅出于说明性目的而提供,且ooo处理器100的其它方面可含有额外的或比本文所说明的管线级少的管线级。

ooo处理器100另外包含寄存器堆130,其为多个寄存器132(0)到132(x)提供物理存储。在一些方面,寄存器132(0)到132(x)可包括一或多个通用寄存器(gpr)、程序计数器(未图示),和/或链接寄存器(未图示)。在ooo处理器100执行计算机程序期间,可使用寄存器映射表136将寄存器132(0)到132(x)映射到一或多个架构寄存器134。

在示范性操作中,执行管线110的前端指令管线112从指令高速缓冲存储器106获取指令(未图示),所述指令高速缓冲存储器在一些方面中可为芯片上1阶(l1)高速缓冲存储器,作为非限制性实例。前端指令管线112的一或多个获取/解码管线级116可进一步解码指令,并在向后端指令管线114发出之前,将其传递到一或多个指令队列级118。在向后端指令管线114发出所述指令之后,后端指令管线114的级(例如执行单元128)接着执行所发出的指令,并收回被执行的指令。

如上文所论述,ooo处理器100可提供指令的乱序(ooo)处理,以增加指令处理并行度。然而,如上所述,指令之间的相依性的存在可不利地影响ooo处理性能。举例来说,将先前指令所产生的值作为输入的指令的处理可由ooo处理器100延迟,直到所述先前指令已完成且输入值已产生为止。

在这点上,ooo处理器100包含早期执行引擎102来提供早期指令执行。虽然为清楚起见,将早期执行引擎102说明为与前端指令管线112和后端指令管线114不同的元件,但应理解,早期执行引擎102可集成到前端指令管线112的级116、118中的一或多者中。早期执行引擎102包括早期寄存器高速缓冲存储器138,其含有用于高速缓存所产生的并存储在对应于寄存器132(0)到132(x)的架构寄存器134中的立即值的一或多个条目(未图示)。早期执行引擎102还可包括早期执行单元140,其可使指令能够在到达后端指令管线114之前被执行。作为非限制性实例,早期执行单元140可包括一或多个算术逻辑单元(alu)或浮点单元(未图示)。以此方式,可在执行管线110内的早得多的级解决指令之间的相依性,从而产生改进的ooo处理性能。

在示范性操作中,早期执行引擎102接收来自前端指令管线112的传入指令(未图示),并检查所述传入指令的输入操作数(未图示),以确定所述指令的输入操作数是否存储在早期寄存器高速缓冲存储器138的条目中。如果在早期寄存器高速缓冲存储器138中找到对应于输入操作数的有效条目,那么早期执行引擎102用来自所述对应条目的高速缓存的非推测性立即值来取代所述传入指令的输入操作数。因此,如由早期执行引擎102修改的传入指令可包含立即值作为输入,而不需要一或多个寄存器存取操作来检索输入值。

在早期执行引擎102的一些方面中,可将指令的子集表示为具有早期执行资格(即,在到达执行管线110的后端指令管线114之前执行)。举例来说,具有相对较低等级的复杂性的指令(例如算术、逻辑或移位运算)可被指定为具早期执行资格的指令。具早期执行资格的指令可由早期执行引擎102的早期执行单元140执行,其中来自早期执行单元140的输出值(如果存在)写入到早期寄存器高速缓冲存储器138。下文相对于图3a到3c更详细地论述早期执行引擎102在处理具早期执行资格的指令中的示范性方面的操作。

如果早期执行引擎102所观察到传入指令无法处理(即,因为早期寄存器高速缓冲存储器138不含有所述指令的所有输入操作数的高速缓存的立即值,或因为指令不表示为有早期执行资格的指令),那么早期执行引擎102将对应于传入指令的输出操作数的任何条目在早期寄存器高速缓冲存储器138中标记为无效。接着将传入指令传递到后端指令管线114以进行常规处理。早期执行引擎102可随后接收来自ooo处理器100的传入指令的输出值和/或任何检索到的输入值,且可用所述接收到的值来更新早期寄存器高速缓冲存储器138。下文相对于图4a到4c以及图5a到5c更详细地论述早期执行引擎102处置早期执行单元140无法处理的指令的示范性方面的操作。

在一些方面,应理解,具早期执行资格的指令可包含可在早期执行引擎102中执行的分支指令。早期执行引擎102对分支指令的早期执行可导致对处理器性能和电力消耗的改进。分支指令的早期执行还可导致执行管线110的感知深度的降低,且可加速分支预测符训练。

早期执行引擎102的一些方面可通过仅支持窄宽度操作数(即,具有小于ooo处理器100所支持的最大大小的输入和/或输出操作数)来进一步改进性能。在此些方面中,早期执行引擎102的早期寄存器高速缓冲存储器138可经配置以仅在其中存储高速缓存的每一立即值的较低阶位。另外,早期执行单元140可经配置以仅对窄宽度操作数操作。

为了说明在一些方面可对应于图1的早期寄存器高速缓冲存储器138的示范性早期寄存器高速缓冲存储器200,提供图2。为描述图2的清楚起见,参考图1的元件。如图2中所见,早期寄存器高速缓冲存储器200包含多个条目202(0)到202(y),各自与一或多个架构寄存器134中对应于图1的寄存器132(0)到132(x)中的一者的一个架构寄存器相关联。每一条目202(0)到202(y)包含寄存器识别(id)字段204,其表示一或多个架构寄存器134中对应于条目202(0)到202(y)中的一者的一个架构寄存器的识别符。在一些方面,寄存器id字段204可存储相关联架构寄存器134的指数,而一些方面可提供存储相关联架构寄存器134的地址的寄存器id字段204。根据一些方面,寄存器id字段204可由ooo处理器100在计算机程序的执行期间动态地指派和/或修改。

条目202(0)到202(y)中的每一者还包含立即值字段206。立即值字段206可高速缓存先前已产生(例如通过图1的早期执行单元140和/或一或多个执行单元128执行指令)的非推测性立即值,以存储在对应于条目202(0)到202(y)的架构寄存器134中。在后续检测到具有对应于条目202(0)到202(y)的输入操作数的传入指令后,早期执行引擎102可即刻用立即值字段206的内容来取代所述输入操作数。在一些方面,立即值字段206可仅存储“窄”立即值(即,具有小于ooo处理器100所支持的立即值的最大大小的大小的立即值)。作为非限制性实例,ooo处理器100可支持32位立即值,而立即值字段206可仅存储较低16位的高速缓存立即值。一些方面可假定早期寄存器高速缓冲存储器200的立即值字段206可存储窄立即值或“宽”(即,全大小)立即值。

早期寄存器高速缓冲存储器200的条目202(0)到202(y)中的每一者还包含指示条目202(0)到202(y)的有效性的有效旗标字段208。在一些方面,早期执行引擎102可在更新条目202(0)到202(y)后,即刻设定条目202(0)到202(y)中的一者的有效旗标字段208。早期执行引擎102可清除条目202(0)到202(y)中的一或多者的有效旗标字段208,以指示条目202(0)到202(y)已失效(例如由于管线冲洗或不支持的指令)。

应理解,一些方面可假定除图2中所说明的字段204、206和208之外,早期寄存器高速缓冲存储器200的条目202(0)到202(y)可包含其它字段。将进一步理解,在一些方面中,早期寄存器高速缓冲存储器200可实施为根据此项技术中已知的关联性和替换策略来配置的高速缓冲存储器。在图2的实例中,将早期寄存器高速缓冲存储器200说明为单个数据结构。然而,在一些方面,早期寄存器高速缓冲存储器200还可包括多于一个数据结构或高速缓冲存储器。

早期执行引擎102的一些方面可使用多种机制来选择性地高速缓存立即值,以减少到早期寄存器高速缓冲存储器200中的带宽,和/或避免高速缓存和更新很少使用的寄存器。举例来说,早期执行引擎102的一些方面可经配置以仅将图1的一或多个架构寄存器134的子集高速缓存在早期寄存器高速缓冲存储器200中。作为非限制性实例,早期执行引擎102可仅高速缓存堆栈指针,和/或仅高速缓存用于传递程序调用参数的寄存器。在此些方面中,立即可为高速缓存的寄存器的选择可硬接线到早期执行引擎102,可由软件编程,和/或可由硬件动态地确定。

根据本文所揭示的一些方面,早期执行引擎102可经配置以基于传入指令来确定是否高速缓存立即值。举例来说,早期执行引擎102可仅高速缓存某些常用操作码的输入或输出操作数,和/或可仅基于所述指令的观察到的历史来高速缓存特定动态指令(未图示)的输入或输出操作数。一些方面可假定早期执行引擎102经配置以高速缓存循环感应变量(未图示)。在一些方面,早期执行引擎102可经配置以高速缓存馈送重要指令(例如常常误预测的分支指令,或常常导致高速缓冲存储器未中的加载指令)的计算的寄存器。

图3a到3c说明图1的早期执行引擎102检测和替换输入操作数并提供具早期执行资格的传入指令的早期执行的示范性通信流。在图3a到3c中,提供ooo处理器300,其可对应于图1的ooo处理器100的示范性方面。ooo处理器300包含前端指令管线302和后端指令管线304,其中的每一者可分别表示图1的前端指令管线112和后端指令管线114的方面。ooo处理器300还提供早期执行引擎306,其可对应于图1的早期执行引擎102的方面。早期执行引擎306包括早期执行单元308和早期寄存器高速缓冲存储器310。早期寄存器高速缓冲存储器310包含表示图1的一或多个架构寄存器134的架构寄存器r0到r3的条目312(0)到312(3)。条目312(0)到312(3)中的每一者包含寄存器id字段314、立即值字段316和有效旗标字段318,如上文相对于图2所描述。在图3的实例中,早期寄存器高速缓冲存储器310存储三个有效条目:条目312(0),其具有为寄存器r0高速缓存的立即值#x12;条目312(2),其具有为寄存器r2高速缓存的立即值#x2;以及条目312(3),其具有为寄存器r3高速缓存的立即值#xff。

在图3a中,早期执行引擎306接收传入指令320。在此实例中,传入指令320是既定求输入操作数322和324(分别对应于寄存器r0和r2)的值的总和并将结果存储在寄存器r1中的add指令。出于说明的目的,将假定add指令属于已经由ooo处理器300表示为具有早期执行资格的指令的子集内。

在接收到传入指令320后,早期执行引擎306确定输入操作数322、324中的任一者是否存在于早期寄存器高速缓冲存储器310的对应条目312(0)到312(3)中。如由箭头326和328指示,图3a中的早期执行引擎306成功地定位对应于输入操作数322、324的有效条目312(0)和312(2)。因此,早期执行引擎306能够用存储在条目312(0)和312(2)中的高速缓存的立即值来代替输入操作数322、324。

现参看图3b,早期执行引擎306用分别存储在条目312(0)和312(2)的立即值字段316中的非推测性立即值330和332取代图3a的输入操作数322和324,如由箭头334和336指示。现在可执行所得传入指令320',而不存取寄存器r0和r2以获得输入值。以此方式,可通过消除早期执行引擎306内的指令相依性来改进ooo处理器300的性能。

在一些方面,可通过早期执行引擎306对指令的早期执行来进一步改进ooo处理器300的性能。在这点上,在图3c中,早期执行引擎306评估传入指令320',以确定其是否为有早期执行资格的指令。在图3c的实例中,将传入指令320'确定为有早期执行资格的指令320',并将其传递到早期执行单元308以供执行,如由箭头338指示。在有早期执行资格的指令320'的执行完成之后,早期执行单元308接着用输出值341来更新早期寄存器高速缓冲存储器310的对应于输出操作数340的条目312(1),如由箭头342指示。还将条目312(1)的有效旗标字段318更新为值343一(1),以指示条目312(1)是有效的。

根据一些方面,在有早期执行资格的指令320'的成功执行后,早期执行引擎306可用再现后端指令管线304中的有早期执行资格的指令320'的执行的结果的传出指令来代替有早期执行资格的指令320'。在图3c的实例中,如果有早期执行资格的指令320'已经由后端指令管线304执行,那么结果已经将是存储在架构寄存器r1中的值#x14。因此,如由箭头344指示,早期执行引擎306可用传出指令346来代替有早期执行资格的指令320',所述传出指令在此实例中是将立即值#x14加载到寄存器r1中的mov指令。接着将传出指令346提供到后端指令管线304以供执行,如由箭头348指示。

图4a到4c是说明图3a到3c的早期执行引擎306检测和替换对其不支持早期执行的传入指令的输入操作数,且接收对早期寄存器高速缓冲存储器310的更新的示范性通信流的图。在描述图4a到4c时,为清晰起见,参考图3a到3c的元件。如图4a中所见,早期执行引擎306接收传入指令400。在此实例中,传入指令400是用于存取寄存器r1的值以及存储在寄存器r2中(由输入操作数402指示)的立即值偏移所指示的存储器位置的ldr指令。ldr指令接着将存储器存取的结果存储在寄存器r3中。出于说明的目的,假定可涉及相对复杂的存储器存取操作的ldr指令不具有供早期执行引擎306早期执行的资格。

早期执行引擎306首先咨询早期寄存器高速缓冲存储器310,以确定输入操作数402是否存在于早期寄存器高速缓冲存储器310的条目312(0)到312(3)的一者中,如由箭头404指示。在此实例中,输入操作数402对应于条目312(2)。因此,如图4b中所见,早期执行引擎306用存储在条目312(2)的立即值字段316中的非推测性立即值406来取代图4a的输入操作数402,从而产生传入指令400',如由箭头408指示。

早期执行引擎306接着确定图4b中的传入指令400'是否为有早期执行资格的指令。在确定传入指令400'的ldr操作不具有早期执行的资格后,早期执行引擎306使早期寄存器高速缓冲存储器310的对应于传入指令400'的输出操作数410的条目312(3)失效。在图4b的实例中,这是通过将条目312(3)的有效旗标字段318设定为值412零(0)来实现。

现参看图4c,早期执行引擎306将传入指令400'提供到后端指令管线304,作为传出指令414来执行,如由箭头416和418指示。在一些方面,提供到后端指令管线304的传出指令414可由ooo处理器300标记,以指示其输出将写入回到早期执行引擎306的早期寄存器高速缓冲存储器310。一些方面可假定ooo处理器300仅标记具有对应于早期寄存器高速缓冲存储器310的条目312(0)到312(3)的输出操作数410的传出指令414。

在图4c的实例中,在后端指令管线304执行传出指令414之后,早期执行引擎306经由反馈路径422从ooo处理器300接收所得立即值420。立即值420存储在对应于输出操作数410(即,寄存器r3)的条目312(3)中,且将条目312(3)的有效旗标字段318设定成值412'一(1),指示条目312(3)现在是有效的。一些方面可假定早期执行引擎306可经由ooo处理器300的常规恢复机制来接收立即值420,以将来自图1的寄存器堆130的内容复制到早期寄存器高速缓冲存储器310中。

图5a到5c是说明图3a到3c以及图4a到4c的早期执行引擎306检测和处置操作数对其不可用的传入指令,且接收对早期寄存器高速缓冲存储器310的更新的示范性通信流的图。在描述图5a到5c时,为清晰起见,参考图3a到3c的元件。在图5a的实例中,早期寄存器高速缓冲存储器310仅包含两个有效条目:条目312(0),其具有为寄存器r0高速缓存的立即值#x12;以及条目312(1),其具有为寄存器r1高速缓存的立即值#x14。

在图5a中,早期执行引擎306接收传入指令500。类似于图3a的传入指令320,传入指令500是对输入操作数502和504(分别对应于寄存器r0和r2)的值进行求和并将结果存储在寄存器r1中的add指令。在接收到传入指令500后,早期执行引擎306确定输入操作数502、504中的任一者是否存在于早期寄存器高速缓冲存储器310的对应条目312(0)到312(3)中。如由箭头506指示,图5a中的早期执行引擎306在早期寄存器高速缓冲存储器310中成功地定位对应于输入操作数502的有效条目312(0)。因此,早期执行引擎306能够用存储在条目312(0)中的高速缓存的立即值来代替输入操作数502。然而,发现早期寄存器高速缓冲存储器310中对应于输入操作数504的条目312(2)是无效的,如由箭头508指示。

现在转到图5b,早期执行引擎306用存储在条目312(0)的立即值字段316中的非推测性立即值509来取代图5a的输入操作数502,如由箭头510指示。因此,当执行所得传入指令500'时,将不需要存取寄存器r0来获得输入值。然而,因为图5a的输入操作数504不对应于早期寄存器高速缓冲存储器310中的有效条目312(0)到312(3),所以传入指令500不具有被早期执行引擎306处理的资格。因此且如图5b中示出,早期执行引擎306使早期寄存器高速缓冲存储器310的对应于传入指令500的输出操作数511(即,寄存器r1)的条目312(1)失效。如图5b中所见,在此实例中,这是通过将条目312(1)的有效旗标字段318设定为值512零(0)来实现。

现参看图5c,早期执行引擎306接着向后端指令管线304提供传入指令500',作为传出指令514来执行,如由箭头516指示。如上文相对于图4c所提到,向后端指令管线304提供的传出指令514可由ooo处理器300标记,来指示其输出将写入回到早期执行引擎306的早期寄存器高速缓冲存储器310。一些方面可假定ooo处理器300仅标记具有对应于早期寄存器高速缓冲存储器310的条目312(0)到312(3)的输出操作数511的传出指令514。

在图5c的实例中,在后端指令管线304执行传入指令500'之后,早期执行引擎306经由反馈路径520从ooo处理器300接收所得架构寄存器值518。架构寄存器值518存储在对应于输出操作数511的条目312(1)(即,寄存器r1)中,且将条目312(1)的有效旗标字段318设定成值512'一(1),指示条目312(1)现在是有效的。注意,作为执行传入指令500'的一部分,后端指令管线304还为寄存器r2检索架构寄存器值522,其对应于图5a的传入指令500的输入操作数504。因此,早期执行引擎306还可经由反馈路径524从ooo处理器300接收架构寄存器值522。架构寄存器值522存储在对应于输入操作数504的条目312(2)(即寄存器r2)中,且将条目312(2)的有效旗标字段318设定成值526一(1),指示条目312(2)现在是有效的。

在执行乱序处理时,ooo处理器300可推测地基于例如对条件性分支指令(未图示)将如何分解的预测来频繁执行指令。条件性分支指令所采取的实际路径可能不是已知的,直到条件性分支指令在后端指令管线304内被执行为止。ooo处理器300因此包含从前端指令管线302和/或后端指令管线304冲洗基于误预测分支指令不当获取的指令的机制。

在管线冲洗的情况下,在一些方面,早期执行引擎306必须更新早期寄存器高速缓冲存储器310的内容,来使任何推测地产生的立即值失效。在这点上,图6说明图3a到3c的早期执行引擎306检测管线冲洗和从管线冲洗恢复的示范性通信流。在图6中,早期执行引擎306接收来自ooo处理器300的管线冲洗的指示600。作为响应,早期执行引擎306可进行ooo处理器300所提供的若干恢复机制中的任一者,以从引起管线冲洗的误预测恢复。在一些方面,早期执行引擎306可简单地使所有的条目312(0)到312(3)失效。这在图6中说明,其中分别将零值602、604、606和608写入到条目312(0)、312(1)、312(2)和312(3)的有效旗标字段318。在一些方面,早期执行引擎306可基于ooo处理器300所恢复的寄存器映射表条目来选择性地使条目312(0)到312(3)失效。一些方面可通过在ooo处理器300恢复图1的寄存器映射表136时不进行对早期寄存器高速缓冲存储器310的更新,来采取更积极的方法。

为了最大化早期执行引擎306所提供的性能益处,早期执行引擎306的一些方面可致力于最小化不具有资格供早期执行引擎306处理的管线冲洗和/或指令的影响。早期执行引擎306和/或ooo处理器300可基于ooo处理器300所提供的特定架构来使用若干策略。举例来说,在将指令插入到保留级124中之前,可在提供图1的寄存器存取级122的微架构上实施早期执行引擎306的一些方面。在此些方面中,立即值可由早期执行引擎306接收,且在寄存器读取时间直接插入到早期寄存器高速缓冲存储器310中。

在一些方面,可发生其中ooo处理器300当前不在处理指令(即,归因于前端指令管线302中的管线暂停,或在处理管线冲洗之后)的情况。在此类情况下,ooo处理器300可能已知图1的寄存器堆130的内容是最新的,而无待决寄存器写入。因此,早期执行引擎306可经由简单的复制操作来重新加载早期寄存器高速缓冲存储器310的内容。

根据一些方面,早期执行引擎306可跟踪对架构寄存器的待决写入,以确定立即值何时可从图1的寄存器堆130安全地复制到早期寄存器高速缓冲存储器310。举例来说,早期执行引擎306可每架构寄存器维持一计数器(未图示),指示向每一架构寄存器的未完成写入的数目。所述计数器可初始化为零,且在早期执行引擎306观察到向架构寄存器写入的传入指令时递增。当后端指令管线304提交所述指令时,早期执行引擎306还可使所述计数器递减。当计数器值从一(1)转变为零(0)时,不存在向架构寄存器的待决写入,且因此早期执行引擎306可将立即值从架构寄存器安全地复制到早期寄存器高速缓冲存储器310。

在一些方面,传入指令的多个版本可同时在飞行中。为了跟踪架构寄存器的哪一版本应为对早期寄存器高速缓冲存储器310的更新提供其内容,早期执行引擎306可使用由ooo处理器300指派给每一飞行中指令的标记(未图示)。所述标记可向早期执行引擎306指示应用以更新早期寄存器高速缓冲存储器310的架构寄存器更新的版本。

为了说明图3a到3c的早期执行引擎306提供早期指令执行的示范性过程,提供图7a和7b。图7a说明用于确定早期执行引擎306是否高速缓存传入指令的输入操作数,且检测具早期执行资格的指令的示范性操作。图7b说明进行有早期执行资格的指令的早期执行的示范性操作。为清楚起见,在描述图7a和7b时引用图1和图3a到3c的元件。

操作在图7a中开始,ooo处理器300的早期执行引擎306接收来自ooo处理器300的前端指令管线302的传入指令320(框700)。早期执行引擎306接下来确定传入指令320的一或多个输入操作数322、324的输入操作数322或324是否存在于早期执行引擎306的早期寄存器高速缓冲存储器310中的一或多个条目312(0)到312(3)的对应条目312(0)、312(2)中(框702)。如果早期执行引擎306确定输入操作数322、324中的一或多者不存在于早期寄存器高速缓冲存储器310中,那么早期执行引擎306可使早期寄存器高速缓冲存储器310的对应于传入指令320的输出操作数340的条目312(1)失效(框704)。早期执行引擎306接着可将传入指令320作为传出指令346提供到ooo处理器300的后端指令管线304以供执行(框706)。

然而,如果早期执行引擎306在决策框702处确定输入操作数322、324中的每一者存在于早期寄存器高速缓冲存储器310中,那么早期执行引擎306用存储在对应条目312(0)、312(2)中的非推测性立即值330、332来取代输入操作数322或324(框708)。以此方式,可执行传入指令320,而不需要寄存器存取来检索其输入操作数322、324。

在一些方面,早期执行引擎306接下来确定传入指令320是否为有早期执行资格的指令320'(框710)。在一些方面,有早期执行资格的指令320'可为早期执行单元308所支持的相对简单的算术、逻辑或移位运算。一些方面可假定在由ooo处理器300解码期间标记有早期执行资格的指令320'以供早期执行引擎306检测。

如果早期执行引擎306在决策框710确定传入指令320不是有早期执行资格的指令320',那么处理可在框704处恢复,来以与传入指令320的输入操作数322、324中的一或多者不高速缓存在早期寄存器高速缓冲存储器310中的情况类似的方式处置传入指令320。然而,如果传入指令320是有早期执行资格的指令320',那么处理在图7b的框712处恢复。

现参看图7b,早期执行引擎306的早期执行单元308可执行有早期执行资格的指令320'(框712)。在执行之后,早期执行单元308可将有早期执行资格的指令320'的输出值341写入到早期寄存器高速缓冲存储器310的对应于有早期执行资格的指令320'的输出操作数340的条目312(1)(框714)。以此方式,可使执行有早期执行资格的指令320'的结果立刻可用于后续指令。

在有早期执行资格的指令320'的早期执行之后,早期执行引擎306可将传出指令346提供到ooo处理器300的后端指令管线304以供执行(框716)。在一些方面,传出指令346可再现结果(例如写入到寄存器),就像有早期执行资格的指令320'在后端指令管线304中执行一样。以此方式,寄存器132(0)到132(x)的实际内容可与早期寄存器高速缓冲存储器310的内容保持一致。

图8说明基于接收到的架构寄存器值来更新图1的早期寄存器高速缓冲存储器138的额外示范性操作。举例来说,在一些方面中,在后端指令管线114执行指令之后,早期寄存器高速缓冲存储器138可接收所述架构寄存器值。在描述图8时,为清楚起见,参考图5a到5c的元件。

在图8中,操作以早期执行引擎306接收一或多个架构寄存器值518、522开始,所述一或多个架构寄存器值518、522对应于早期寄存器高速缓冲存储器310的条目312(1)、312(2)中的一或多者(框800)。在一些方面,一或多个架构寄存器值518、522可表示早期执行引擎306所接收到的后端指令管线304所执行的非有早期执行资格的指令的结果。一些方面可假定一或多个架构寄存器值518、522可表示从寄存器132(0)到132(x)获取输入操作数504的结果。根据一些方面,经由反馈路径520、524从ooo处理器300接收一或多个架构寄存器值518、522。在接收到一或多个架构寄存器值518、522后,早期执行引擎306接着可更新早期寄存器高速缓冲存储器310的一或多个条目312(1)、312(2),以存储一或多个架构寄存器值518、522(框802)。

为了说明用于根据图1的早期执行引擎102的一些方面检测管线冲洗和从管线冲洗恢复的额外示范性操作,提供图9。为清楚起见,在描述图9时参考图6的元件。在图9中,操作以早期执行引擎306接收管线冲洗的指示600开始(框900)。在一些方面,响应于例如在后端指令管线304中检测到误预测分支等事件,可从ooo处理器300接收指示600。响应于接收到管线冲洗的指示600,早期执行引擎306使早期寄存器高速缓冲存储器310的一或多个条目312(0)到312(3)失效(框902)。在一些方面,可使早期寄存器高速缓冲存储器310的所有条目312(0)到312(3)失效,而一些方面可假定选择性地使条目312(0)到312(3)失效。

根据本文所揭示的各方面在ooo处理器中提供早期指令执行可提供于或集成到任何基于处理器的装置中。实例包含(但不限于)机顶盒、娱乐单元、导航装置、通信装置、固定位置数据单元、移动位置数据单元、移动电话、蜂窝式电话、计算机、便携式计算机、桌上型计算机、个人数字助理(pda)、监视器、计算机监视器、电视机、调谐器、无线电、卫星无线电、音乐播放器、数字音乐播放器、便携式音乐播放器、数字视频播放器、视频播放器、数字影音光盘(dvd)播放器和便携式数字视频播放器。

在这点上,图10说明可使用图1以及图3a到3c的早期执行引擎102、306的基于处理器的系统1000的实例。在本实例中,基于处理器的系统1000包含一或多个中央处理单元(cpu)1002,每一中央处理单元包含一或多个处理器1004。一或多个处理器1004可包含图1以及图3a到3c的早期执行引擎(eee)102、306。cpu1002可为主装置。cpu1002可具有耦合到处理器1004以用于快速存取临时存储的数据的高速缓冲存储器1006。cpu1002耦合到系统总线1008,且可将基于处理器的系统1000中所包含的主控装置与受控装置互相耦合。众所周知,cpu1002通过经由系统总线1008交换地址、控制和数据信息而与这些其它装置通信。举例来说,cpu1002可将总线事务请求传送到存储器控制器1010(作为受控装置的实例)。

其它主控装置和受控装置可连接到系统总线1008。如图10中所示,作为实例,这些装置可包含存储器系统1012、一或多个输入装置1014、一或多个输出装置1016、一或多个网络接口装置1018,以及一或多个显示器控制器1020。输入装置1014可包含任何类型的输入装置,包含但不限于输入按键、开关、语音处理器等。输出装置1016可包含任何类型的输出装置,包含但不限于音频、视频、其它视觉指示符等。网络接口装置1018可为经配置以允许将数据交换到网络1022以及从网络1022交换数据的任何装置。网络1022可为任何类型的网络,包含(但不限于)有线或无线网络、私用或公共网络、局域网(lan)、广域网(wlan)和因特网。网络接口装置1018可经配置以支持所要的任何类型的通信协议。存储器系统1012可包含存储器控制器1010以及一或多个存储器单元1024(0到n)。

cpu1002还可经配置以经由系统总线1008存取显示器控制器1020,以控制发送到一或多个显示器1026的信息。显示器控制器1020将信息发送到显示器1026以经由一或多个视频处理器1028显示,所述视频处理器将待显示的信息处理成适合于显示器1026的格式。显示器1026可包含任何类型的显示器,包含但不限于阴极射线管(crt)、液晶显示器(lcd)、等离子显示器等。

所属领域的技术人员将进一步了解,结合本文中所揭示的各方面所描述的各种说明性逻辑块、模块、电路和算法可被实施为电子硬件、存储于存储器中或另一计算机可读媒体中且由处理器或其它处理装置执行的指令,或此两者的组合。作为实例,本文中所描述的主控装置和受控装置可用于任何电路、硬件组件、集成电路(ic)或ic芯片中。本文所揭示的存储器可为任何类型和大小的存储器,并且可经配置以存储所要的任何类型的信息。为了清楚地说明这种可互换性,上文已大体上关于其功能性而描述了各种说明性组件、块、模块、电路和步骤。如何实施此功能性取决于特定应用、设计选项和/或强加于整个系统的设计约束。熟练的技术人员可针对每一特定应用以不同方式实施所描述的功能性,但此类实施决策不应被解释为引起偏离本发明的范围。

结合本文中所揭示的方面描述的各种说明性逻辑块、模块和电路可用以下各项来实施或执行:处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或其它可编程逻辑装置、离散门或晶体管逻辑、离散硬件组件,或经设计以执行本文中所描述的功能的其任何组合。处理器可为微处理器,但在替代方案中,处理器可为任何常规处理器、控制器、微控制器或状态机。处理器还可实施为计算装置的组合,例如dsp与微处理器的组合、多个微处理器的组合、一或多个微处理器结合dsp核心,或任何其它此类配置。

本文中所揭示的方面可以硬件和存储于硬件中的指令来体现,且可驻留于(例如)随机存取存储器(ram)、快闪存储器、只读存储器(rom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)、寄存器、硬盘、可装卸式磁盘、cd-rom或所属领域中已知的任何其它形式的计算机可读媒体中。示范性存储媒体耦合到处理器,使得处理器可从存储媒体读取信息并且将信息写入到存储媒体。在替代方案中,存储媒体可与处理器成一体式。处理器和存储媒体可驻留在asic中。asic可驻留在远程站中。在替代方案中,处理器和存储媒体可作为离散组件驻留在远程站、基站或服务器中。

还应注意,描述本文中的示范性方面中的任一者中所描述的操作步骤是为了提供实例和论述。可用除了所说明的序列之外的大量不同序列执行所描述的操作。另外,单个操作步骤中所描述的操作实际上可在许多不同步骤中执行。另外,可组合示范性方面中所论述的一或多个操作步骤。应理解,如所属领域的技术人员将容易显而易见,流程图中所说明的操作步骤可经受众多不同修改。所属领域的技术人员还将了解,可使用多种不同技术和技法中的任一者来表示信息和信号。举例来说,可通过电压、电流、电磁波、磁场或磁粒子、光场或光粒子或其任何组合来表示在整个上文描述中可能参考的数据、指令、命令、信息、信号、位、符号和码片。

提供本发明的前述描述是为了使所属领域的技术人员能够制造或使用本发明。所属领域的技术人员将容易显而易见对本发明的各种修改,且本文中界定的一般原理可应用于其它变化而不脱离本发明的精神或范围。因此,本发明并不希望限于本文中所描述的实例和设计,而是应被赋予与本文中所揭示的原理和新颖特征相一致的最广范围。

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