S1)设置的经设 置的位670,可在预重命名/分配队列664的线程1队列664-1中停止CS2。停止或阻止CS2 可有效地阻止对来自线程1的多个控制信号的分配,使得没有比该线程暂停指令更年轻的 其他控制信号进展通过流水线W执行。在运种情况下,该停止是在分配处的,但是本发明的 范围并不如此受限。 W65] 然后,CS1可经由执行单元634、队列672,继续流过流水线,并且由提交单元642提 交。在一些实施例中,如参考标号(3)处所示,当提交CS1时,该控制信号CS1可激活或启 动排空计时器644。在一些实施例中,该排空计时器可W是一般被部署在流水线的提交级处 的硬件计时器(例如,递增或递减计数器)。在一些实施例中,处理器可包括此类排空计时 器预硬件线程。在一些实施例中,该排空计时器可停止或阻止来自对应的线程(即,在运种 情况下的线程1)的多个后续控制信号的引退长达预定的排空时间。如参考标号(4)处所 示,当提交CS1时,它可重置标记670。
[0066] 在一些实施例中,在提交CS1时,预重命名/分配队列664的输出和提交单元642 之间的流水线的多个级可排空来自线程1的多个控制信号。例如,CS1和CS2可W是背靠 背化ack-to-back)的控制信号。该提交单元可有序地提交多条指令,使得可在提交CS1之 前提交来自线程1的所有先前的指令。此外,由于CS1和CS2是背靠背的控制信号,因此, 在流水线中,没有其他控制信号在它们之间。由于标记670而阻止分配CS2。相应地,使上 述流水线级有效地排出或排空来自线程1的除CS1和CS2之外的多个控制信号。
[0067] 在一些实施例中,当提交了CS1,并且如参考标号(4)处所示重置了标记时,可分 配CS2。在一些实施例中,如参考标号(5)处所示,当分配CS2时,它可再次设置该标记670, 使得阻止对来自线程1的后续多个控制信号的分配。然后,CS2可继续通过该流水线。如 参考标号(6)处所示,可在预提交队列672的线程1队列672-1中停止或阻止CS2,同时排 空计时器644对预定的排空时间计数或计时。当该排空计时器已计数或计时到预定的排空 时间时,选择器单元674可选择CS2,并且将它提供给提交单元642。
[0068] 在一些实施例中,如参考标号(7)处所示,由于如参考标号(5)所示在CS2的分配 期间所设置的经设置的标记670,可在预命名/分配队列664的线程1队列664-1中停止 或阻止CS3。在一些实施例中,如参考标号(8)处所示,当提交CS2时,它可重置标记670。 运可允许CS3W及来自线程1的后续多条指令的控制信号能够被分配,并自由地流过该流 水线。相应地,响应于从线程暂停指令(例如,响应于从该线程暂停指令解码出的控制信号 (例如,CS2)的引退),暂停线程1的时间段可结束。 阳069] 图7是包括后端部728的处理器710的实施例的框图,该后端部用于:当该后端部 是空闲的时候,响应于线程暂停指令,可选地用信号通知前端部712和/或存储器执行单元 790。该后端部包括单元或逻辑730 (例如,重命名/分配单元),其用于响应于线程暂停指 令,暂停对线程的后续多条指令的处理。运可基本上如本文中别处所描述的那样执行。如 先前所述,处理器的后端的至少部分(经常是至少多数)可排空来自那个被暂停线程的多 条指令。当没有其他线程由处理器的后端主动地处理的时候(例如,在单线程模式中或当 也暂停、停止或结束全部其他线程时),运些部分也可变成空闲的或不活动的。运也可能如 本文中别处所述那样发生。
[0070] 在后端部中对线程的暂停或停止也可能易于在处理器的前端部中引起或推动对 被暂停线程的指令流和/或控制信号流的随之而来的暂停或停止。前端单元的该停止或 暂停可能是由于某种回压化ackpressure) 782,该回压是由于控制信号不能够通过后端部 728中的停止而造成的。虽然处理器的前端部一般将不会是空的,但是由于该回压,它可能 变成空闲的或不活动的。当后端部是空闲的或不活动的时候,存储器执行单元790也可能 变成空闲的或不活动的。
[0071] 现在,即便在前端部712是空闲的或不活动的时候,它也不一定自动能够停止其 时钟。例如,如果该前端部预期或可能预期来自后端部728的需要被处理的某些信号或事 件,则它可能需要保持其时钟运转。作为示例,此类事件可包括但不限于例如,跳转误预测 清除(jumpmispredictionclear)(运可能在执行的跳转被解析为是误预测的时候发生)、 异常清除(exc巧tionclear)(运可能发生在指令提交时)或其他清除事件。
[0072] 在一些实施例中,大约在后端部变成空闲的时候(例如,就在它变成空闲的之前, 就在它变成空闲的之后,等等),该后端部可如780处所示,用信号通知前端部712。例如, 后端空闲单元778或其他逻辑可用信号通知前端空闲逻辑784或其他逻辑。在不同的实施 例中,该信号可进行各种不同的指示。作为示例,该信号可指示后端部将是空闲的,可指示 后端部将不提供需要前端部关注的事件,可W是后端部认为前端部可停止其时钟的保证, 等等。该信号可帮助前端部知晓其可W安全地停止其时钟。在没有此类信号的情况下,取 决于特定实现,前端部停止其时钟可能是不太可能的,并且/或者前端部停止其时钟可能 不是那么容易的,并且/或者前端部可能不能够运么长时期地停止其时钟。在一些实施例 中,该信号可W可选地指示后端部将停止其时钟和/或将不需要前端部所持续的时钟信号 的数量。 阳073]在一些实施例中,大约在后端部变成空闲的时候(例如,就在它变成空闲的之前, 就在它变成空闲的之后,等等),该后端部可如786处所示,用信号通知存储器执行单元 790。例如,后端空闲单元778或其他逻辑可用信号通知存储器执行单元空闲逻辑788或其 他逻辑。在各种不同的实施例中,该信号可进行类似于上述针对前端部所述的那些指示的 各种不同的指示。作为示例,该信号可指示后端部将是空闲的,可指示后端部将不提供需要 存储器执行单元关注的事件,可W是后端部认为存储器执行单元可停止其时钟的保证,等 等。该信号可帮助存储器执行单元知晓其可W安全地停止其时钟。在没有此类信号的情况 下,取决于特定实现,存储器执行单元停止其时钟可能是不太可能的,并且/或者存储器执 行单元停止其时钟可能不是那么容易的,并且/或者存储器执行单元可能不能够运么长时 期地停止其时钟。在一些实施例中,该信号可W可选地指示后端部将停止其时钟和/或将 不需要存储器执行单元所持续的时钟信号的数量。
[0074]图8是执行线程暂停指令的方法892的实施例的流程框图。可在处理器、指令处 理装置或其他数字逻辑器件中执行该方法。该方法包括:在框893处,将线程暂停指令解码 为一组控制信号。可如本文中别处所述,对该指令进行解码。
[00巧]在框894处,运组控制信号中的一个或多个控制信号可作出线程暂停指令的相对 更简单的实现是否足够或是否应当执行该线程暂停指令的相对更详尽的实现(例如,使用 微代码)的决定。在框894中作出决定所遵照的方法一般取决于在其中执行该方法的处理 器/装置的特定实现和架构特征。作为示例,某些架构特征、增强或扩展(例如,支持虚拟 化(例如,英特尔麽虚拟化技术)、支持事务性执行(例如,受限的事务性存储器)或其他 架构状态)可对线程暂停指令的实现施加附加的处理。例如,在英特尔@64和IA-32架 构软件开发者手册(Intel嚴 64andIA-32A;rchitec1:uresSoftwareDeveloper'sManual, 订购号:325462-049US,2014年2月)中描述了暂停指令的执行可能导致事务性执行被中 止。在该参考中也描述了暂停指令可能或可能无法使虚拟机退出。相应地,在一些实施例 中,在框894处的决定可设及确定是否正在使用虚拟化和/或确定是否正在使用事务性执 行。例如,运可包括检查一个或多个控制寄存器中的一个或多个位来确定是否正在使用运 些特征。在其他实施例中,其他架构特征或扩展可影响线程暂停指令的实现,并因此是相关 的。
[0076] 如果在框894处的决定是更简单的实现是足够的(即,决定为"是"),例如,如果 不是正在使用将使线程暂停指令的实现复杂的架构特征(例如,既不使用虚拟化,也不使 用事务性执行),则该方法可进展至框896。在框896处,可利用相对更简单的实现来实现 该线程暂停指令。例如,在一些实施例中,可使用在框893处解码出的运组控制信号中的一 个或多个其余的控制信号来实现该线程暂停指令。
[0077] 相反,如果在框894处的决定是更简单的实现不是足够的(即,决定为"否"),例 如,如果正在使用将使线程暂停指令的实现复杂的架构特征(例如,正在使用虚拟化和/或 正在使用事务性执行),则该方法可前进至框895。在框895处,该方法可恢复到利用相对 更详尽的实现来实现该线程暂停指令。例如,在一些实施例中,该方法可恢复到使用微代码 实现来实现该线程暂停指令。作为示例,该更详尽的实现可包括用于确保该暂停指令鉴于 使其实现复杂的一个或多个架构特征而被正确地执行的多个附加操作。在一个方面,运些 附加操作可能潜在地难W通过经解码器解码的经解码的控制信号(例如,微操作)来实现, 或者在一些情况下,运是不可实行的。例如,解码器可能不能够对用于实现所有需要的校验 和其他操作的足够的控制信号进行解码。在一些实施例中,该更详尽的实现可能花费更多 时间和/或执行更多操作,或W其他方式容易减少线程暂停指令的功率节约机会。
[0078]有利的是,在适当的时候(例如,当不是正在使用复杂的架构特征时),该方法可 允许使用线程暂停指令的相对更简单的实现。运可有助于减少执行该暂停指令所需要的时 间和资源量,从而可允许更快地减小功率或更快地释放资源给另一线程。当该更简单的实 现是不合适的时候,该方法可恢复到更详尽的实现(例如,更严格地处理复杂的架构特征 的实现)。在需要时,可选择性地使用此类更详尽地使用,相反,在不需要并且可通过更简单 的实现来节约更多功率时不运样。 阳0巧]示例忡寄存器架构
[0080] 图9是根据本发明的一个实施例的寄存器架构900的框图。在所示出的实施例中, 有32个512位宽的向量寄存器910 ;运些寄存器被引用为zmmO至Ijzmm31。较低的12个zmm 寄存器的较低阶的256个位覆盖在寄存器ymmO-12上。较低的12个zmm寄存器的较低阶 的128个位(ymm寄存器的较低阶的128个位)覆盖在寄存器xmmO-11上。
[0081] 写掩码寄存器911 一一在所示的实施例中,存在8个写掩码寄存器化0至k7),每一 个写掩码寄存器的尺寸是64位。在替代实施例中,写掩码寄存器911的尺寸是12位。如 先前所述的,在本发明的一个实施例中,向量掩码寄存器kO无法用作写掩码;当正常指示 kO的编码用作写掩码时,它选择硬连线的写掩码OxFFFF,从而有效地停用该指令的写掩码 操作。
[0082] 通用寄存器925-一在所示出的实施例中,有十六个64位通用寄存器,运些寄存 器与现有的x86寻址模式一起使用W对存储器操作数寻址。运些寄存器通过名称RAX、RBX、 RCX、畑X、RBP、RSI、畑I、RSPW及R8 到R11 来引用。
[0083] 标量浮点找寄存器组(x87找)945,在其上面重叠了MMX紧缩整数平坦寄存器组 950一一在所示出的实施例中,x87找是用于使用x87指令集扩展来对32/64/80位浮点数 据执行标量浮点运算的八元素找;而使用MMX寄存器来对64位紧缩整数数据执行操作,W 及为在MMX和XMM寄存器之间执行的一些操作保存操作数。
[0084] 本发明的替代实施例可W使用更宽的或更窄的寄存器。另外,本发明的替代实施 例可W使用更多、更少或不同的寄存器组和寄存器。 阳0化]示例忡核架构、化理器巧计算化架构
[0086] 处理器核可W用出于不同目的的不同方式在不同的处理器中实现。例如,此类核 的实现可包括:1)旨在用于通用计算的通用有序核;2)旨在用于通用计算的高性能通用无 序核;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可包 括:1)包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个 或多个通用无序核的CPU;W及2)包括旨在主要用于图形和/或科学(吞吐量)的一个或 多个专用核的协处理器。此类不同处理器导致不同的计算机系统架构,其可包括:1)在与 CPU分开的忍片上的协处理器;2)在与CPU相同的封装中但分开的管忍上的协处理器;3) 与CPU在相同管忍上的协处理器(在该情况下,运样的协处理器有时被称为诸如集成图形 和/或科学(吞吐量)逻辑之类的专用逻辑,或被称为专用核);W及4)可W将所描述的 CPU(有时被称为应用核或应用处理器)、W上描述的协处理器和附加功能包括在同一管忍 上的忍片上系统。接着描述示例性核架构,随后描述示例性处理器和计算机架构。
[0087] 示例性核架构
[0088] 有序和无序核框图
[0089]图10A是示出根据本发明的多个实施例的示例性有序流水线和示例性的寄存器 重命名的无序发布/执行流水线两者的框图。图10B是示出根据本发明的多个实施例的要 包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的无序发布/执 行架构核的框图。图10A-B中的实线框示出了有序流水线和有序核,而可选增加的虚线框 示出了寄存器重命名的、无序发布/执行流水线和核。考虑到有序方面是无序方面的子集, 将描述无序方面。
[0090] 在图10A中,处理器流水线1000包括取出级1002、长度解码级1004、解码级1006、 分配级1008、重命名级1010、调度(也被称为分派或发布)级1012、寄存器读取/存储器读 取级1014、执行级1016、写回/存储器写入级1018、异常处理级1022和提交级1024。
[0091] 图10B示出处理器核1090,其包括禪合至执行引擎单元1050的前端单元1030,该 前端单元和执行引擎单元两者均禪合至存储器单元1070。核1090可W是精简指令集计算 巧ISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或混合或其他核类型。作为又 一选项,核1090可W是专用核,例如,网络或通信核、压缩引擎、协处理器核、通用计算图形 处理单元(GPGPU)核、图形核等。 阳092] 前端单元1030包括禪合到指令高速缓存单元1034的分支预测单元1032,该指令 高速缓存单元禪合到指令转换后备缓冲器(TLB) 1036,该指令转换后备缓冲器禪合到指令 取出单元1038,指令取出单元禪合到解码单元1040。解码单元1040(或解码器)可解码指 令,并生成从原始指令解码出的、或W其他方式反映原始指令的或从原始指令导出的一个 或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元1040 可使用各种不同的机制来实现。合适的机制的示例包括但不限于,查找表、硬件实现、可编 程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核1090包括(例如,在 解码单元1040中或W其他方式在前端单元1030内的)用于存储某些宏指令的微代码的微 代码ROM或其他介质。解码单元1040