用于管理无序毫码控制操作的方法和系统的制作方法

文档序号:6373632阅读:207来源:国知局
专利名称:用于管理无序毫码控制操作的方法和系统的制作方法
技术领域
本发明一般涉及微处理器,更具体地涉及管理复杂指令的无序执行。
背景技术
诸如微处理器系统的当代电子计算系统典型地包括被配置为接收并处理指令的处理器和数据路径。一般地,指令是“简单的”或“复杂的”。典型的简单指令包含单个操作,诸如,例如从存储器加载或存储。公共精简指令集计算机(RISC)只采用简单指令。复杂指令典型地包含多于一个单个操作(诸如,加/存储)。公共复杂指令集计算机(CISC)采用复杂指令,并且有时也采用简单指令。这些当代处理器内核利用各种技术提升性能。一个这样的技术是并行指令执行。例如,可以在不同的执行单元中并行执行尤其是定点(fixed-point)单元指令和二进制浮·点单元指令等。这可以是超标量(superscalar),或者甚至对于“简单”类型指令是无序的。然而,一般需要在毫码(millicode)中执行由诸如CISC体系架构的体系架构使用的复杂指令。在毫码中执行的此需求使得这些复杂指令的并行和无序执行困难(如果并非不可能)。

发明内容
在一个实施例中,公开了用于管理处理器内的指令的方法。该方法包括在处理器的恢复单元接收修改驻留在该恢复单元内的控制寄存器的指令。该恢复单元从通用寄存器接收与该指令关联的第一数据集。由该恢复单元从该控制寄存器取出与该指令关联的第二数据集。该恢复单元对所述第一数据集和所述第二数据集执行至少一个二进制逻辑操作。在另一实施例中,公开了包括用于管理处理器内的指令的恢复单元的信息处理系统。信息处理系统包括存储器、以及通信地耦接至该存储器的处理器。该处理器包括被配置为执行方法的恢复单元。该方法包括接收修改驻留在该恢复单元内的控制寄存器的指令。该恢复单元从通用寄存器接收与该指令关联的第一数据集。该恢复单元从该控制寄存器取出与该指令关联的第二数据集。该恢复单元对所述第一数据集和所述第二数据集执行至少一个二进制逻辑操作。在又一实施例中,公开了用于管理处理器内的指令的计算机程序产品。该计算机程序产品包括存储介质,其是处理电路可读的、且存储用于由该处理电路执行以执行方法的指令。该方法包括在该处理器的恢复单元接收修改驻留在该恢复单元内的控制寄存器的指令。该恢复单元从通用寄存器接收与该指令关联的第一数据集。该恢复单元从该控制寄存器取出与该指令关联的第二数据集。该恢复单元对所述第一数据集和所述第二数据集执行至少一个二进制逻辑操作。


附图用于进一步图示各个实施例并说明全部依据本发明的各个原理和优点,其中,贯穿各个视图,同样的参考标记指示相同或者功能上类似的元件,并且,附图与下面的详细描述一起并入到说明书中并且形成说明书的一部分,其中图I图示了根据本发明的一个实施例的操作环境的一个示例;图2图示了根据本发明的一个实施例的处理内核的详细视图;图3图示了根据本发明的一个实施例的用于无序地执行毫码控制操作的执行流水线(pipeline)的一个示例。图4图示了根据本发明的一个实施例的用于修改毫码控制寄存器的数据路径的一个示例;图5A-5B图示了根据本发明的一个实施例的用于管理在处理器的恢复单元内执行的无序指令之间的依赖性的机制的一个示例;图6是图示根据本发明的一个实施例的用于管理无序复杂指令的过程的一个示 例的操作流程图;图7是图示根据本发明的一个实施例的管理在处理器的恢复单元内执行的指令的依赖性的一个示例的操作流程图;以及图8是图示根据本发明的一个实施例的检测在处理器的恢复单元的执行流水线内的清除(flush)条件的一个示例的操作流程图。
具体实施例方式如所需的,这里公开了本发明的详细实施例;然而,应理解,所公开的实施例仅仅是可以以各种形式体现的本发明的示例。因此,这里公开的具体结构和功能细节不被解释为限制,而是仅仅作为权利要求的基础、以及作为用于教示本领域技术人员以几乎任何适当的详细结构和功能来不同地采用本发明的代表性基础。此外,这里使用的术语和措词不意图限制;而是提供本发明的可理解的描述。这里使用的术语“一”或“一个”被定义为一个或多于一个。这里使用的术语“多个”被定义为两个或多于两个。这里使用的术语“另一个”被定义为至少第二或更多。这里使用的术语“包括”和/或“具有”被定义为包括(即,开放式语言)。这里使用的术语“耦接”被定义为连接(尽管并非必须直接地且并非必须机械地)。复数形式和单数形式术语相同,除非另外明确地说明。操作环境图I示出了适用于本发明的各个实施例的操作环境的一个示例。特别地,图I示出实施本发明的一个实施例的并行分布的处理系统。在此实施例中,并行分布的处理系统100在SMP计算环境中操作。在SMP计算环境中,并行的应用可以具有在相同的处理节点上的各个处理器上执行的几个任务(过程)。并行分布的处理系统100在多个处理节点102和104上执行,所述多个处理节点102和104经由多个网络适配器106和108而彼此耦接。每个处理节点102和104是独立的计算机,具有其自己的操作系统映像110和112、信道控制器114和116、存储器118和120、以及系统存储器总线126和128上的处理器122和124。系统输入/输出总线130、132将I/O适配器134和136与网络适配器106和108耦接。虽然为了简便在每个处理节点102和104中仅示出一个处理器122和124,但是每个处理节点102和104可以具有多于一个处理器。通信适配器经由网络交换机138而链接在一起。而且,一个或多个节点102、104包括大容量存储接口 140。大容量存储接口 140用于将大容量存储设备142连接至节点102。一个特定类型的数据存储设备是计算机可读介质,诸如紧致盘(“⑶”)驱动器,其可以用于将数据存储到⑶144或DVD、以及从⑶144或DVD读取数据。另一类型的数据存储设备是被配置为支持例如JFS型文件系统操作的硬盘。在一些实施例中,各个处理节点102和104可以是处理集群的一部分。应注意,本发明不限于SMP环境。其它体系架构也是适用的,并且,本发明的其它实施例也可以在单个系统内操作。应注意,以上计算环境可以基于由纽约阿芒克的国际商业机器公司(IBM )提供的 z/Architecture.1', z/Arehitecturf 在 z/Aivhiieclurc'1 Principles ofOperation, IBM'出版号SA22-7832-05,第六版,(2007年4月)中更完全地描述,通过引用将其全文合并在此。基于z/Arc.hitectures^计算环境包括例如eServer和zSeries⑩,其二者均由IBM 提供。然而,其它体系架构也是适用的。处理器内核
根据一个实施例,图2图示了用于无序(OoO)毫码操作的处理器122、124内的处理器内核200的一个示例。应注意,图2中示出的配置仅仅是适用于当前要求权利的发明的一个示例。特别地,图2示出了处理内核200。在一个实施例中,处理器内核200包括总线接口单元202,其将处理器内核200耦接至其它处理器和外设。总线接口单元202还将读取和存储数据值的LlD高速缓存(Dcache) 204、读取程序指令的LlI高速缓存(Icache)206、以及高速缓存接口单元208连接至外部存储器、处理器和其它设备。LlI高速缓存206与指令拾取(fetch)单元IFU210协力提供指令流的加载。在一个实施例中,IFU210将指令分类为组。IFU210还预取指令,并且可以包括不确定的加载和分支预测能力。这些拾取的指令码被指令解码单元(IDU) 212解码为指令处理数据。一旦被解码,指令就被调度(dispatch)到指令定序器(sequencer)单元(ISU) 214并被保存在发出(Issue)队列(IQ) 215中。ISU214控制发出到各个执行单元的指令的定序,所述各个执行单元诸如用于执行一般操作的一个或多个定点单元(FXU)216、以及用于执行浮点操作的一个或多个浮点单元(FPU) 218。浮点单元218可以是二进制浮点单元220、十进制浮点单元222等。应注意,在一个实施例中,FUX216包括多个FXU流水线,其是彼此的副本。ISU214还经由多个LSU流水线而耦接到一个或多个加载/存储单元(LSU)224。将这些多个LSU流水线视为用于执行加载和存储、以及用于转移的地址生成的执行单元。指令逗留在发出队列中,取决于它们的年龄(age)和它们的依赖性而等待被发出到执行单元。例如,检查IQ215中的指令,以确定它们的依赖性并查看它们是否可以被发出。当确定哪些指令或微指令(Uop)(操作单位)准备好发出时,硬件在这些指令中选择最老的指令(微指令),然后将所选择的指令发出到执行单元。发出带宽取决于设计中可用的执行的数目。一组驻留在ISU214内的全局(或者组)完成表(GCT) 226通过标签追踪由ISU214发出的指令,直到作为指令的目标的特定执行单元指示所述指令已经完成执行为止。在一个实施例中,对于每组指令,ISU214在GCT226中创建条目。ISU214使用GCT226管理每个未决组内的指令的完成。将FXU216和FPU218耦接至各个资源,诸如通用寄存器(GPR) 228和浮点寄存器(FPR) 230。GPR228和FPR230提供对于由加载存储单元(LSU) 224从LlD高速缓存204加载并存储的数据值的数据值存储。IFU210、IDU212和ISU214中的每一个也通信地耦接至一个或多个恢复单元(RU)232。RU232包括处理器的整个架构化(architected)的状态、以及处理器的内部控制的状态。RU232还包括毫码控制寄存器(MCR),用于多个级别的开始解释执行(SIE)访客(guest)的架构化的控制寄存器、用于多个级别的SIE访客的架构化的定时设施、有关处理器状态的信息、以及关于系统配置的信息。另外,存在控制硬件执行的寄存器、以及用于将信息从处理器传递至处理复杂度内的其它芯片的数据总线。RU232寄存器提供毫码(中央处理器内部的代码)与处理器硬件之间的主接口,并被毫码用于控制并监视硬件操作。RU232中的这些专用寄存器对于毫码来说是可访问的,并且,存在若干唯一的毫指令(milli-ops)来访问它们,诸如,读专用寄存器、写专用寄存器、与(AND)专用寄存器、或(OR)专用寄存器、以及逻辑直接与、或、以及插入到一些RU232寄存器的各个2字节字段中。通过这些指令,只要当前执行需要毫码,毫码就可以读取或更改处理器的许多状态信息。这可以发生在必须读取或写入特定状态信息的指令的执行期间、或者在一些其它类型的功能期间,诸如,在复位处理器或处理恢复情形期间。在一个实施例中,RU232还包括用于位操纵的二进制逻辑单元(BLU) 234。这通过提供RU232内的MCR (毫码控制寄存器)控制操作的内置执行而允许无序毫码控制操作。通过在RU232内包括BLU234,时延减小,并且FXU不需要用于操作。因此,RU232作为附加的执行单元而操作,其能够与由其它执行单元216、218、224正在执行的操作并行地执行操作。下面更详细讨论RU232和无序毫码控制操作。无序毫码控制操作如上所讨论的,一般需要在毫码中执行复杂指令,毫码是中央处理器内部的代码。毫码驻留在称为硬件系统区域的受保护的存储区域中,该区域对于常规操作系统或应用程序来说是不可访问的。与处理操作系统代码的方式类似地,由处理器硬件处理毫码。毫码访问MCR,其驻留在RU232内并保持检查点(check-pointed)状态用于可能的在错误的情况下的恢复。将毫码从系统存储区域带入处理器中,并将其缓存在I高速缓存206中。IFU210从高速缓存拾取毫码指令,解码它们,计算操作数地址,拾取操作数,并将它们发送至执行单元,用于实际执行和结果的存储。毫码执行使用与用于执行系统指令相同的基本数据流。当遭遇必须通过毫码执行的指令时,对系统程序指令流的常规处理停止,保存当前系统程序指令和下一顺序指令两者的指令地址。将指令的操作码(以经过修改的格式)用作到硬件系统区域的毫码部分中的索引,将适当的毫码例程拾取到I缓存206中。在下一例程开始之前,对每个例程给予例如128字节的连续存储。如果需要附加的存储来完成该例程,则毫码稍后将转移到系统存储区域中为毫码例程的一般使用而定义的且不具有尺寸限制的唯一位置。

在执行毫码例程的第一个指令之前,由硬件执行设置以便为毫码执行做准备。如果需要,则在寄存器中保存实际的指令文本用以由毫码使用。如果需要地址计算用于系统程序指令的操作数,则将所计算的地址放置在毫码通用寄存器(GR)中,并且将所关联的程序访问寄存器(AR)拷贝到对应的MCR中。一些操作数访问控制寄存器(OACR)利用当前程序PSW (程序状态字)的访问密钥和寻址模式来初始化,并且一些操作数访问控制寄存器设置为具有为零的访问密钥的实际寻址模式。基于系统程序指令的格式,将相关程序GR的寄存器编号放置在寄存器间接标签中。对于一些指令,设置标志以指示关于指令操作数的特定事实,诸如,跨页(page crossing)、相等操作数值、或为零的操作数值。对于有限数目的指令,在毫码条目处理期间,将实际操作数内容直接设置到此毫码GR中。一旦已经设立了所有适当的硬件设施,毫码例程就具有关于指令和其操作数的特定细节的足够信息以开始指令的执行。对于多个指令,硬件还检查对于指令可能的一些程序中断条件(特许的操作例外、规范例外等)。毫码例程负责以适当的架构顺序检查硬件不检查的任何可能的程序中断条件。如果未检测到中断条件,则毫码例程继续其对在毫码条目期间设立的数据的处理、工作、将程序GR拾取到其自己的GR中、从RU232读取数据、以及从存储器请求数据。指令地址寄存器(除了保持所保存的操作系统指令地址的寄存器之外)用于当毫码例程执行时保持指令地址。例程可以转移到同一例程内的其它地方,转移到不同的例程,或者调用不同的例程作为子例程,并且毫码指令地址寄存器追踪接下来拾取并解码哪个地址。当毫码例程执行时,用所计算的结果来更新架构化的设施。这些设施可以是程序 GR、存储位置、或RU232中的控制未来执行的寄存器。当已经执行了对于系统程序的指令的所有操作并且已经设置了任何条件代码时,毫码例程可以停止处理。发出毫指令、毫码结束(MCEND),其警告硬件这是此毫码例程中的最后指令。当解码此MCEND时,硬件停止从毫码指令地址寄存器拾取指令,并重新从系统程序的“下一顺序指令地址”寄存器拾取指令,系统程序在条目上保存到毫码例程中。然后,硬件开始从系统程序指令流解码指令,并且,使得指令直接由硬件执行,或者将指令返回到另一毫码例程以用于其执行。在传统的系统中,修改MCR如下。在RU内读取MCR数据,然后将其传送至FXU。然后,在FXU的算术逻辑单元(ALU)中执行二进制逻辑操作。然后,所得到的数据被传送至RU并被用于写MCR数据。因为关于传统的MCR控制操作,经历的时延较长,所以关于毫码控制操作的并行或无序执行在传统系统中一般是不可能的。而且,在执行常规操作期间需要一些MCR数据。因此,需要本地影子化(local shadowing)。例如,特定控制寄存器可以在指令单元、执行单元或处理器的其它区域内具有本地影子副本。公共BUS (CBUS)用于更新影子副本。当写MCR时,从RU232递送此CBUS,以更新RU232外部的影子副本。CUBS需要是有序的,因此不允许无序执行。然而,本发明的一个或多个实施例允许无序毫码控制操作。毫码控制操作发生在访问MCR的每个毫码的一般执行中。与传统系统的FXU内相比,修改MCR的指令的操作现在在RU232内部。在一个实施例中,RU232进行对于访问MCR的所有指令的执行。图3示出根据一个实施例的用于无序地执行毫码控制操作的执行流水线300的一个示例。如图3中可见的,IFU200拾取指令并将指令分类为组。IFU210将每个指令的指令地址发送至RU232。然后,将所拾取的指令从IFU210发送至IDU212,其将指令解码为指令处理数据。IDU212将指令文本和分配给指令的指令标签(I标签(Itag))发送至RU232。I标签指示指令组内的关于年龄的位置。一旦被解码,IDU212就将指令组调度到ISU214。ISU214将组内的指令发出到一个或多个执行单元,诸如FXU216、FPU218、LSU224、以及在一个实施例中为RU232。应注意,直到指令被发出到执行单元之前,它们保持为有序的。然后,如上所述,可以将它们无序地发出到包括RU232的一个或多个执行单元。关于指令向RU232的无序发出,RU232从ISU214接收用于指令的操作代码(操作码),并进行指令的无序执行。将MGR数据与MCR数据逻辑组合,并且对其执行RU232的BLU234中的逻辑操作。例如,图4示出用于修改MCR的数据路径的一个示例。如从图4可见的,在RU232从ISU214接收用于无序MCR修改指令的操作码之后,RU232从RU232内的MCR404读取MCR数据402,并且从对应的MGR (未示出)读取MGR数据406。无序MCR修改指令的示例包括但不限于或专用寄存器(OSR)指令、与专用寄存器(NSR)指令、以及异或(XOR)专用寄存器(XSR)指令。由RU232内的BLU234对MCR数据402和MGR数据406执行一个或多个二进制逻辑操作(与、或、异或、掩码(masking)等)。将所得到的数据408写回到MCR404。无序执行需要对在BLU操作之后被写回到MCR404的MCR结果数据408进行重新排序。在一个实施例中,在指令已经完成之后,在RU写队列(未示出)内执行此重新排序。RU232可以在单个CBUS410上影子化MCR数据408,其中每组允许一个MCR写指令。然而,也可以允许每组多于一个MCR写指令。返回到图3,一旦指令已经将它们的数据操作数结果写入到RU232中架构化的寄存器/控制寄存器中,它们就结束。应注意,被分组在一起且同时开始执行的指令并非必须 行单元之一已经通过了清除点指定正在结束执行、并且已经在架构化的状态中更新了所有更老的指令(因为必须有序地完成指令)时,称该指令“完成”。因此,该指令现在准备好完成并更新架构化的状态(如图3中的RU检查点所示),这意味着当已经完成指令时更新数据的最终状态。只能有序地更新架构化的状态,即,必须有序地完成指令,并且,必须当每个指令完成时更新所完成的数据。RU检查点用于维持“检查点”结果,其可用于在检测到错误之后恢复处理器的状态。“检查点”意味着在任何给定时间,存在反映在完成指令时的结果的寄存器的一个副本。当遭遇错误时,将寄存器的所有副本恢复到它们的检查点状态,控制返回至跟在最后的指令之后的点。除了提供上述无序毫码控制操作之外,一个或多个实施例还提供了用于确定并管理在RU232内执行的无序指令之间的依赖性的机制。一般地,在指令需要来自它们自己作为另一指令的结果的源的数据的情况下,发生依赖性。例如,在指令序列ADD$8, $7, $5Sff$9, (O) $8中,ADD (相加)指令将寄存器$7的内容与寄存器$5的内容相加,并将结果放在寄存器$8中。SW (存储字)指令将寄存器$9的内容存储在在$8中找到的存储位置地址。同样地,SW指令在存储寄存器$8的内容之前,必须等待ADD指令完成。因此,Sff指令对ADD指令具有依赖性。所说明的依赖性也被称为先写后读(RAW)依赖性。因此,在一个实施例中,RU232包括一个或多个依赖性管理机制。图5A-5B示出依赖性管理机制的一个示例。特别地,图5A-5B示出表示各个流水线阶段的示意图。例如,图5A-5B示出调度至发出队列流水线502、发出/执行流水线504、完成写队列流水线506、以及检查点流水线508。在图5A-5B的示例中,在流水线502、504、506、508之间存在公28个阶段。例如,调度至发出队列流水线502包括8个阶段DO至D7。发出/执行流水线504包括6个阶段Al至A6。完成写队列流水线506包括8个阶段NO至N7。检查点流水线508包括6个阶段Rl至R6。图5A还示出在每个阶段写类型指令当前正在执行并且读类型指令已经进入给定流水线阶段的时间点。在调度至发出队列流水线502处开始,例如写类型指令当前正在此流水线阶段502内执行。当写类型指令正在执行时,例如读类型指令进入流水线阶段502。写类型指令的示例包括但不限于WSR (写专用普遍(Pervasive))指令、NSR (与专用普遍)指令、OAR(或专用普遍)指令、XOR (异或专用普遍)指令、以及LCTL (加载控制寄存器)指令。读类型指令的示例包括但不限于RSR (读专用普遍)指令、NSR (与专用普遍)指令、OAR (或专用普遍)指令、XOR (异或专用普遍)指令、以及STCTL (存储控制寄存器)指令。读类型指令与发出有效位510、发出地址512和发出I标签关联。写类型指令与调度至发出队列有效位516、调度至发出队列地址518、以及调度至发出队列I标签520关联。有效位指示相符的流水线阶段何时仍然有效(active)。可以在发出指令时初始地设置有效位。然后,有效位通过流水线传播(propagate)。当有效位被设置为等于“O”时,忽略地址标签和I标签。而且,可以通过清除操作来丢弃该有效位。I标签指示对应的指令组内的关于年龄的位置。如上所述,调度至发出队列流水线502包括8个阶段DO至D7。因此,对于这些阶段DO、Dl、D2…D7的每一个,存在调度至发出队列有效位516、调度至发出队列地址、以及调度至发出队列I标签520。RU232利用指令地址比较逻辑522来确定读类型指令与写类型指令的指令地址512,518是否匹配。如果这些指令地址512、518不匹配,则不存在依赖性,并且指令继续在流水线阶段502中执行。然而,如果指令地址512、518匹配,则RU232使用I标签比较逻辑 528比较这些指令的每一个的I标签514、520。执行此I标签比较处理来确定读类型指令的I标签514是否大于写类型指令的I标签520。如上所述,I标签指示对应指令组内的关于年龄的位置。因此,如果读类型指令的I标签514大于写类型指令的I标签520,则读类型指令比写类型指令年轻,并且在指令之间存在依赖性。否则,不存在依赖性,并且允许指令继续它们在流水线阶段502内的执行。如果确定读类型指令比写类型指令年轻,那么RU232拒绝(reject)读类型指令。这导致读类型指令被重新发出。例如,将指令比较逻辑522的输出和读类型指令的有效位510耦接至第一与门524的输入。将第一与门524的输出用作第一锁存器526的输入。将I标签比较逻辑528的输出耦接至第二锁存器530的输入。锁存器526、530将各个流水线阶段的逻辑分开。应注意,图5的示意图中示出的其它组件也可以包括也用于将流水线阶段分开的锁存器/寄存器。第一和第二锁存器526、530的输出耦接至第二与门532的输入。第二与门532的输出耦接至或门534的输入,或门534 (在此示例中)是来自28个输入阶段的逻辑或门。因此,当指令地址512、518匹配时,指令比较逻辑522将值输出到第一与门524。当读类型指令的有效位510也为高时,这导致第一与门524将高比特输出到第二与门532。然后,当I标签514、520匹配时,I标签比较逻辑528也将高比特输出至第二与门532。来自指令地址比较逻辑522和I标签比较逻辑528的两个高比特导致第二与门532将高比特输出至或门524,其触发拒绝读类型指令。应注意,对于调度至发出队列流水线502的其余流水线阶段的每个、以及对于发出/执行流水线504、完成写队列流水线506以及检查点流水线508的每个阶段,也执行以上依赖性管理处理。另外,图5A还图示了在例如分支误预测的情况(或者需要流水线清除的任何其它情形)下用于清除流水线的机制。与清除整个流水线相比,此机制允许仅清除比分支误预测指令年轻的指令。特别地,RU232利用附加的I标签比较逻辑538来比较写类型指令的I标签520与关联于分支误预测指令的I标签536。如果I标签比较逻辑538指示写类型指令的I标签520小于分支误预测指令的I标签536,则写类型指令比分支误预测指令老并且被清除。然而,如果I标签比较逻辑538指示写类型指令的I标签520大于分支误预测指令的I标签536,则写类型指令比分支误预测指令年轻并且被清除。例如,将I标签比较逻辑538的输出和分支误预测指令的有效位539耦接至第三与门540的输入。当写类型指令的I标签520大于分支误预测指令的I标签538,则I标签比较逻辑536将低比特输出至第三与门540。因此,第三与门540接收来自分支误预测指令的高比特、以及来自I标签比较逻辑536的低比特。这导致低比特被从第三与门540输出到写类型指令的有效位516,其可以被选通(gate),从而导致写类型指令的有效位516被设置为低比特。因此,第二与门532接收来自第一与门524和I标签比较逻辑528的高比特、以及来自写类型指令的有效位516的低比特。这导致该流水线的清除。换言之,当分支误预测指令的有效位539有效(=1)、并且分支误预测指令的I标签538小于当前阶段的写类型指令的I标签518时,使写类型指令的有效位516无效(或者被选通542)。比较器536将分支误预测指令的I标签538与当前阶段的写类型指令的I标·签518进行比较。如果分支误预测指令的I标签538小于(B卩,年轻于)写类型指令的I标签518,则使分支误预测指令的I标签538无效(例如,将对516的输入强制为“O”)。应注意,对于发出/执行流水线504 (图5B)和完成写队列流水线506 (图5B)的每个阶段也执行用于清除流水线的上述处理。如从以上讨论可见的,本发明的一个或多个实施例允许在RU内无序地执行MCR控制操作。通过在RU内包括BLU,时延减小了并且不需要FXU用于操作。因此,RU作为附加的执行单元操作,其能够与其它执行单元正在执行的操作并行地执行操作。与在传统系统的FXU内相比,修改MCR的指令的操作现在在RU内部。在一个实施例中,RU对于访问MCR的所有指令进行所述执行。而且,可以通过从RU驱动的CBUS执行影子化。另一个优点是RU能够通过提供用于管理依赖性的机制来解决潜在的冲突。操作流稈6是图示管理无序复杂指令的一个示例的操作流程图。图6的操作流程图在步骤602开始,并直接流入步骤604中。在步骤604,IDU212接收复杂指令。在步骤606,IDU212分析复杂指令。在步骤608,IDU212基于分析而确定应当将复杂指令强制为毫码。在步骤610,IDU212将复杂指令组织为表示毫码条目序列的微指令并将微指令调度到ISU214。在步骤612,ISU214将微指令无序地发出到RU232。在步骤614,RU232从MGR取出与微指令关联的MGR数据、以及从RU232内的MCR取出与该微指令关联的MCR数据。在步骤616,在RU232的BLU234内,对MGR数据和MCR数据执行一个或多个二进制逻辑操作。在步骤618,RU232将二进制逻辑操作写入到MCR。在步骤620,经由CBUS更新MCR的任何影子副本。然后,控制流程在步骤622退出。图7是图示管理在RU232内执行的指令的依赖性的一个示例的操作流程图。图7的操作流程图在步骤702开始,并直接流入步骤704中。在步骤704,RU232确定读类型指令已经进入执行流水线阶段,在其中写类型指令当前正在执行。在步骤706,RU232将读类型指令的指令地址512与写类型指令的指令地址518进行比较。在步骤708,RU232确定指令地址512、518是否匹配。如果此确定的结果是否定的,则控制流程在步骤710退出。如果此确定的结果是肯定的,则在步骤712,RU232比较每个指令的I标签514、520。
在步骤714,RU232确定读类型指令的I标签514是否大于写类型指令的I标签520。如果此确定的结果是否定的,则控制流程在步骤710退出。如果此确定的结果是肯定的,则在步骤716,RU232确定读类型指令比写类型指令年轻,并将从流水线拒绝读类型指令以用于重新发出。控制流程然后在步骤718退出。 图8是图示检测RU232的执行流水线内的清除条件的一个示例的操作流程图。图8的操作流程图可以与图7的步骤712并行地开始并执行。在步骤802,RU232将写类型指令的I标签520与分支误预测指令的I标签536进行比较。在步骤804,RU232确定写类型指令的I标签520是否小于分支误预测指令的I标签536。如果此确定的结果是肯定的,则控制流程在步骤806退出。如果此确定的结果是否定的,则RU232确定写类型指令的I标签520大于(B卩,写类型指令年轻于)分支误预测指令的I标签536。在步骤808,RU232然后从流水线清除写类型指令和其它较年轻的指令。然后,控制流程在步骤810退出。非限制示例

虽然已经公开了本发明的特定实施例,但是本领域普通技术人员将理解,可以在不违背本发明的精神和范畴的情况下对特定实施例进行改变。因此,本发明的范畴不被限制为特定实施例,并且,所附权利要求书意在覆盖本发明的范畴内的任何和所有这样的应用、修改和实施例。虽然已经在完全功能的计算机系统的上下文中讨论了本发明的各个示例实施例,但是本领域普通技术人员将理解,各个实施例能够经由CD或DVD (例如,CD、CD ROM或其它形式的可记录介质)、或经由任何类型的电子传输机制而作为程序产品来分发。
权利要求
1.一种用于管理处理器内的指令的方法,该方法包括 在处理器的恢复单元,接收修改驻留在该恢复单元内的控制寄存器的指令; 由该恢复单元从通用寄存器取出与该指令关联的第一数据集; 由该恢复单元从该控制寄存器取出与该指令关联的第二数据集;以及 由该恢复单元对该第一数据集和该第二数据集执行至少一个二进制逻辑操作。
2.如权利要求I所述的方法,还包括 将由执行该二进制逻辑操作而得到的第三数据集写入到该控制寄存器。
3.如权利要求2所述的方法,还包括 在该恢复单元的写队列内重新排序该第三数据集。
4.如权利要求I所述的方法,还包括 由该恢复单元经由公共总线更新该控制寄存器的至少一个影子副本。
5.如权利要求I所述的方法,还包括 在该执行之前,逻辑地组合该第一数据集与该第二数据集。
6.如权利要求I所述的方法,还包括 由该恢复单元响应于接收到该指令,将该指令的第一指令地址与当前执行的指令的第二指令地址进行比较; 由该恢复单元确定该第一指令地址与该第二指令地址匹配; 由该恢复单元响应于该确定,将关联于该指令的第一指令标签与关联于该当前执行的指令的第二指令标签进行比较; 由该恢复单元响应于比较该第一指令标签与该第二指令标签,确定该第一指令标签大于该第二指令标签;以及 由该恢复单元响应于该第一指令标签大于该第二指令标签,识别该指令依赖于该当前执行的指令。
7.如权利要求6所述的方法,还包括 响应于该识别,防止该指令执行。
8.如权利要求I所述的方法,还包括 由该恢复单元响应于接收到该指令,将关联于当前在该恢复单元的执行流水线内执行的指令的第一指令标签与关联于分支误预测指令的第二指令标签进行比较; 由该恢复单元响应于比较该第一指令标签与该第二指令标签,确定该第一指令标签大于该第二指令标签;以及 由该恢复单元从该执行流水线清除至少该当前执行的指令。
9.一种包括用于管理处理器内的指令的恢复单元的信息处理系统,该信息处理系统包括 存储器;以及 通信地耦接至该存储器的处理器,该处理器包括被配置为执行以下方法的恢复单元,该方法包括 接收修改驻留在该恢复单元内的控制寄存器的指令; 从通用寄存器取出与该指令关联的第一数据集; 从该控制寄存器取出与该指令关联的第二数据集;以及对该第一数据集和该第二数据集执行至少一个二进制逻辑操作。
10.如权利要求9所述的信息处理系统,该方法还包括 将由执行该二进制逻辑操作而得到的第三数据集写入到该控制寄存器;以及 在该恢复单元的写队列内重新排序该第三数据集。
11.如权利要求9所述的信息处理系统,该方法还包括 经由公共总线更新该控制寄存器的至少一个影子副本。
12.如权利要求9所述的信息处理系统,该方法还包括 响应于接收到该指令,将该指令的第一指令地址与当前执行的指令的第二指令地址进行比较; 确定该第一指令地址与该第二指令地址匹配; 由该恢复单元响应于该确定,将关联于该指令的第一指令标签与关联于该当前执行的指令的第二指令标签进行比较; 响应于比较该第一指令标签与该第二指令标签,确定该第一指令标签大于该第二指令标签;以及 响应于该第一指令标签大于该第二指令标签,识别该指令依赖于该当前执行的指令。
13.如权利要求12所述的信息处理系统,该方法还包括 响应于该识别,防止该指令执行。
14.如权利要求9所述的信息处理系统,该方法还包括 响应于接收到该指令,将关联于当前在该恢复单元的执行流水线内执行的指令的第一指令标签与关联于分支误预测指令的第二指令标签进行比较; 响应于比较该第一指令标签与该第二指令标签,确定该第一指令标签大于该第二指令标签;以及 从该执行流水线清除至少该当前执行的指令。
全文摘要
通过在处理器的恢复单元接收修改驻留在该恢复单元内的控制寄存器的指令,管理处理器内的指令。该恢复单元从通用寄存器接收与该指令关联的第一数据集。由该恢复单元从该控制寄存器取出与该指令关联的第二数据集。该恢复单元对该第一数据集和该第二数据集执行至少一个二进制逻辑操作。
文档编号G06F9/30GK102890624SQ201210253748
公开日2013年1月23日 申请日期2012年7月20日 优先权日2011年7月20日
发明者M.克雷默, G.格维格, F.莱纳特, P.普罗布斯特 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1