一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于可缩放预留站的方法、系统和装置与流程

2022-06-29 23:07:27 来源:中国专利 TAG:
1.本公开概括而言涉及电子产品,更具体而言,本公开的实施例涉及在处理器中实现单个统一推测状态传播和执行唤醒矩阵的可缩放预留站电路。
背景技术
::2.处理器或者处理器的集合执行来自指令集的指令,例如指令集体系结构(instructionsetarchitecture,isa)。指令集是与编程有关的计算机体系结构的一部分,并且一般包括原生数据类型、指令、寄存器体系结构、寻址模式、存储器体系结构、中断和异常处理、以及外部输入和输出(i/o)。应当注意这里的术语指令可以指宏指令,例如提供到处理器以供执行的指令,或者指微指令,例如由处理器的解码器对宏指令解码而产生的指令。技术实现要素:3.本公开的一方面提供了一种装置,包括:解码器电路,用于将一个或多个指令解码成从数据缓存加载数据的第一微操作,依赖于所述第一微操作的第二微操作,以及依赖于所述第二微操作的第三微操作;执行电路,用于执行所述第一微操作、所述第二微操作、以及所述第三微操作;以及预留站电路,包括加载推测跟踪器电路,并且所述预留站电路耦合在所述解码器电路和所述执行电路之间,所述加载推测跟踪器电路用于针对所述第三微操作的预留站条目,跟踪所述第一微操作在所述数据缓存中的进度,以响应于所述第一微操作对在所述数据缓存中的数据的错失而针对所述第三微操作生成取消指示,其中,所述加载推测跟踪器电路用于响应于所述第一微操作被调遣到所述数据缓存中而开始跟踪所述第一微操作在所述数据缓存中的进度。4.本公开的一方面提供了一种方法,包括:用处理器的解码器电路将一个或多个指令解码成从所述处理器的数据缓存加载数据的第一微操作,依赖于所述第一微操作的第二微操作,以及依赖于所述第二微操作的第三微操作;针对所述第三微操作填充所述处理器的预留站电路的预留站条目;以及响应于针对所述第三微操作填充所述预留站条目,由所述预留站电路的加载推测跟踪器电路跟踪所述第一微操作在所述数据缓存中的进度,以响应于所述第一微操作对在所述数据缓存中的数据的错失而针对所述第三微操作生成取消指示,其中,所述加载推测跟踪器电路响应于所述第一微操作被调遣到所述数据缓存中而开始跟踪所述第一微操作在所述数据缓存中的进度。5.本公开的一方面提供了一种装置,包括:存储器;以及处理器,包括:与所述存储器耦合的数据缓存,解码器电路,用于将一个或多个指令解码成从所述数据缓存加载数据的第一微操作,依赖于所述第一微操作的第二微操作,以及依赖于所述第二微操作的第三微操作,执行电路,用于执行所述第一微操作、所述第二微操作、以及所述第三微操作,以及预留站电路,包括加载推测跟踪器电路,并且所述预留站电路耦合在所述解码器电路和所述执行电路之间,所述加载推测跟踪器电路用于针对所述第三微操作的预留站条目,跟踪所述第一微操作在所述数据缓存中的进度,以响应于所述第一微操作对在所述数据缓存中的数据的错失而针对所述第三微操作生成取消指示,其中,所述加载推测跟踪器电路用于响应于所述第一微操作被调遣到所述数据缓存中而开始跟踪所述第一微操作在所述数据缓存中的进度。附图说明6.在附图中以示例而非限制方式图示了本公开,其中相似的标记指示类似的元素,并且其中:7.图1根据本公开的实施例图示了具有包括预留站电路的分配电路的处理器核心。8.图2根据本公开的实施例图示了具有多个流水线级的数据缓存。9.图3根据本公开的实施例图示了预留站电路。10.图4根据本公开的实施例图示了图3的预留站电路中的示例定时路径。11.图5根据本公开的实施例图示了统一推测状态传播和执行唤醒矩阵电路。12.图6根据本公开的实施例图示了加载推测跟踪器电路。13.图7根据本公开的实施例图示了耦合到执行电路的多个集群的预留站电路。14.图8是根据本公开的实施例图示出利用处理器的预留站电路的操作的流程图。15.图9a是根据本公开的实施例图示出示例性有序流水线和示例性寄存器重命名、无序发出/执行流水线两者的框图。16.图9b是根据本公开的实施例图示出要被包括在处理器中的有序体系结构核心的示例性实施例和示例性寄存器重命名、无序发出/执行体系结构核心两者的框图。17.图10a是根据本公开的实施例的单个处理器核心及其与片上互连网络以及与第2级(l2)缓存的其本地子集的连接的框图。18.图10b是根据本公开的实施例的图10a中的处理器核心的一部分的扩展视图。19.图11是根据本公开的实施例的可具有多于一个核心、可具有集成的存储器控制器并且可具有集成的图形的处理器的框图。20.图12是根据本公开的一种实施例的系统的框图。21.图13是根据本公开的实施例的更具体示例性系统的框图。22.图14示出了根据本公开的实施例的第二更具体示例性系统的框图。23.图15示出了根据本公开的实施例的片上系统(soc)的框图。24.图16是根据本公开的实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。具体实施方式25.在接下来的描述中,阐述了许多具体细节。然而,要理解,没有这些具体细节也可实现本公开的实施例。在其他情况下,没有详细示出公知的电路、结构和技术,以免模糊对本说明书的理解。26.说明书中提及“一个实施例”、“一种实施例”、“示例实施例”等等表明描述的实施例可包括特定的特征、结构或特性,但可不一定每个实施例都包括该特定特征、结构或特性。另外,这种短语不一定指同一实施例。另外,当联系一实施例来描述特定的特征、结构或特性时,认为联系其他实施例(无论是否明确描述)来实现这种特征、结构或特性是在本领域技术人员的知识范围内的。27.(例如,硬件)处理器(例如,具有一个或多个核心)可执行(例如,用户级)指令(例如,指令的线程)以在数据上操作,例如以执行算术、逻辑或者其他功能。例如,软件可包括多个指令(例如,宏指令),这些指令被提供给处理器(例如,其一个或多个核心),该处理器随后执行(例如,解码和执行)多个指令以执行相应的操作。在某些实施例中,处理器包括电路(例如,一个或多个解码器电路),以将指令转化(例如,解码)为一个或多个微操作(μop或微op),例如,这些微操作被硬件(例如,被执行电路)直接执行。与指令(例如,宏指令)相对应的一个或多个微操作可被称为该指令的微代码流。微操作可被称为微指令,例如,由处理器对宏指令的解码而产生的微指令。在一个实施例中,指令是指令集体系结构(instructionsetarchitecture,isa)的64比特和/或32比特指令。在一个实施例中,指令是指令集体系结构(isa)的(例如,64比特和/或32比特)指令。在某些实施例中,将指令转化成一个或多个微操作与处理器的流水线(pipeline)的指令取得和/或解码部分相关联。28.在某些处理器中,要被执行(例如,从一个或多个指令解码队列接收)的操作(例如,微操作)在一个或多个(例如,分配)通道上被发送到针对操作分配执行资源的电路(例如,分配电路)。在某些实施例中,分配电路负责将微操作分配给执行电路(例如,与该执行电路相对应的预留站电路)。在某些实施例中,分配电路将微操作的某些信息发送给预留站电路,例如,以便预留站电路可监视该微操作的(一个或多个)源(例如,以及目的)操作对象,并且指示出该微操作何时要被调遣到执行电路以便执行。指令(例如,其一个或多个微操作)可更新(一个或多个)寄存器,例如(一个或多个)数据寄存器。在某些实施例中,单个指令被实现为单个微操作(μop)。在某些实施例中,单个指令被实现为一组两个或更多个微操作(μop)。29.一个或多个指令从而可在其中形成依赖链(dependencychain)。例如,一个或多个可被解码成(例如,按程序顺序的)第一加载微操作,以加载数据(例如,从数据缓存中加载),从而使得依赖的、第二(例如,按程序顺序紧接着的下一个)微操作对该数据进行操作。在某些实施例中,预留站电路跟踪微操作(μop)的依赖链。30.预留站(例如,矩阵调度器)可包括(例如,执行电路)矩阵(例如,电路),以跟踪(例如,输入)操作对象,用于唤醒准备就绪生成;逻辑电路,以跟踪加载依赖,用于取消(例如,对于在数据缓存中错失(miss)的加载);拾取器电路,以基于静态端口绑定算法来调遣到执行端口。然而,这样的预留站可具有以下限制。为了增大来自预留站(reservationstation,rs)的微操作耗尽率(drainrate)和执行带宽以获得更高的每周期指令(instructionspercycle,ipc)率,在某些实施例中使用来自预留站的额外调遣端口,例如,通过扩大预留站中的调遣端口的数目。然而,这显著劣化了包括唤醒执行矩阵和加载依赖传播逻辑两者的单周期循环,例如,执行唤醒矩阵使用额外的线路(例如,多路复用器)来侦听额外的调遣端口并且适应额外的延迟(例如,线延迟,例如,额外的电阻-电容(rc)延迟)。在一个实施例中,当父微操作被拾取以调遣到执行电路时,依赖微操作唤醒机制(例如,经由执行矩阵)经由广播机制将推测(speculation)状态从该父微操作传播到子微操作。一种缺点是单周期定时路径拾取循环,它开始于:31.开始循环:[0032]-》微操作(μop)拾取[0033]-》选择(例如,复用出)所拾取的微操作的推测状态[0034]-》将推测状态广播到预留站条目中的所有微操作[0035]-》依赖微操作经由唤醒事件从执行矩阵命中拾取推测状态[0036]-》如果推测状态解析(resolve)为坏的(例如,父微操作的数据错失),则取消拾取。(例如,如果推测状态尚不能被解析,则按条目在本地暂存(stage)推测状态以便以后解析)[0037]-》生成最终拾取[0038]去到开始循环[0039]然而,这种拓扑的某些实施例在预留站条目和调遣端口的数目增大的情况下不能很好地缩放,原因是用于针对拾取的微操作选择(例如,复用出)推测状态的拾取向量、严重的rc延迟、以及从广播中加载。[0040]某些依赖性微操作唤醒机制与动态端口绑定调度器是不兼容的。例如,预留站中的微操作会侦听单个预先确定的调遣端口(例如,父微操作是静态端口绑定的,并且子微操作在微操作插入到预留站中之前就知道这一点),以捕捉来自父微操作的推测状态。然而,动态端口绑定调度器在某些实施例中打破了这个假设。[0041]另外,简单地增大调遣端口和执行单元的数目以增大执行带宽和耗尽率,会导致单周期(例如,第0级)旁路(bypass)的数目的o(2n^2)增大,以获得执行结果,并且因此造成单周期定时循环的劣化。在某些实施例中,加载、rc延迟和门延迟严重限制了执行端口的数目的缩放。[0042]在某些实施例中,拾取2(pick-2)(或更高)的调度器(例如,预留站条目例如在同一周期内可调遣到多于一个端口)取决于一些种类的静态和/或伪动态端口绑定方案。在某些实施例中,涉及到主拾取器和次拾取器之间的串行定时路径的真正的拾取2调度器,在实践中是不可行的。在某些实施例中,静态端口绑定使用在微操作(例如,条目)插入到预留站中之前或之时的信息。例如,在动态执行信息不可用的情况下,不可能实现最佳的端口绑定以最小化时延并且达到最大的耗尽率。在某些实施例中,半动态端口绑定方案调整预留站中的待定微操作的端口指派,例如,微操作端口指派是在调度/拾取周期前的一个或多个周期之前决定的。[0043]在某些实施例中,旁路域(例如,执行电路(例如,执行单元)之间的有限0级旁路)概念有助于执行电路的定时,但不能缓解rs矩阵调度器中的、来自额外调遣端口的单周期定时路径压力。在一个实施例中,通过使用加载依赖矩阵机制来缓解单周期加载推测跟踪定时循环。但是,在某些实施例中,加载依赖矩阵是一个昂贵的结构,例如,加载依赖矩阵结构与执行矩阵是完全分开的。在某些实施例中,在加载依赖矩阵和执行矩阵之间没有共享结构(例如,电路),并且它们的矩阵具有不同的宽度。在某些实施例中,加载矩阵具有很高的读取和写入端口要求。在某些实施例中,读取端口的数目是分配宽度乘以源操作对象的数目。在某些实施例中,写入端口的数目是分配宽度。在某些实施例中,每个传入的微操作在预留站(rs)插入时执行昂贵的读取-修改-写入操作。在某些实施例中,所有加载操作都必须探入加载依赖矩阵的列。在某些实施例中,加载矩阵在面积、功率和复杂性方面具有非常高的成本。此外,在某些实施例中,加载矩阵是需要管理的单独资源,例如,为了确保加载矩阵列的数目足以跟踪机器中的最大数目的飞行中(inflight)加载微操作,例如,权衡掉所支持的飞行中加载的数目会导致性能损失。[0044]在某些实施例中,解决动态端口绑定设计中的加载推测跟踪的模糊性问题的一种方式是使用多个比较器(例如,比较唤醒物理源(psrc)标识符与物理目的地(pdst)标识符)(例如,除了执行矩阵之外),以唯一地识别动态端口绑定场景中的真正唤醒父亲,从而有可能将加载推测状态从真正的父亲传播到依赖的孩子。例如,来自rs条目的微操作源操作对象的生产者标识符可指定两个可能的执行端口,生产者微操作可从这些执行端口调遣。在这种情况下,在某些实施例中需要两个比较器来唯一地识别实际的唤醒源,例如,在一种更优化的设计中,一个比较器与执行唤醒矩阵一起被使用。另一种解决方案是使用单独的加载依赖矩阵,例如,加载推测状态传播不依靠唤醒事件,因此它不受动态端口绑定方案的影响。然而,这有其自身的缺点,如上所述。在某些实施例中,使用额外的比较器而不是加载矩阵以允许与动态端口绑定方案的兼容性,具有非常高的面积和功率成本,例如,实际上将执行矩阵的面积和功率加倍或者变成三倍(例如,对于每个预留站条目监视三个源的预留站)。在某些实施例中,加载推测跟踪仍然是单周期路径,但由于有额外级别的逻辑电路来模糊使用这些比较器的真正父亲,所以定时会劣化。[0045]在某些实施例中,使用半动态端口绑定方案来改进静态端口绑定,例如,在rs中的微操作驻留期间,基于某种加载平衡算法来更新端口指派。在某些实施例中,由于微操作端口指派和微操作拾取在静态或半动态端口绑定方案中是独立完成的,所以针对两个执行端口所调度的微操作可能不是两个最老旧的准备就绪微操作(例如,不是基于准备就绪微操作之间的年龄顺序)。例如,预留站可能无法最佳地拾取两个最老旧的准备就绪微操作来在两个执行端口上执行。在某些实施例中,静态或半动态端口绑定方案不能实现真正的基于年龄的动态端口绑定方案的性能。在某些实施例中,当(一个或多个)执行电路的子集较慢时(例如,某个(某些)执行电路可能由于定时原因而不支持0级旁路),从静态或半动态端口绑定方案到慢执行电路的微操作的次优端口绑定会招致显著的性能惩罚。换句话说,较慢的执行电路可能只有结合真正的基于年龄的动态端口绑定方案一起才会良好地工作。[0046]在某些实施例中,一种缩放到大量执行端口的拓扑在执行电路之间引入旁路域概念,例如,在集群之间只允许1级或更高(例如,两个或更多个周期)的旁路,但不允许0级(例如,单周期)旁路。然而,旁路域概念(例如,限制执行电路(例如,alu)之间的(一个或多个)0级旁路)与静态和半动态端口绑定方案一起不能良好地工作,并且导致显著的性能损失,因为执行信息不能提供给端口绑定逻辑来避免旁路惩罚。[0047]在某些实施例中,缩放到更多的rs调遣端口会增大单周期定时路径的数目和逻辑深度,并且增大了rs矩阵调度器中的单周期定时路径的加载。[0048]这里的实施例通过实现真正的基于年龄的动态端口绑定方案(例如,真正的基于年龄的动态端口绑定懒惰(lazy)拾取2方案)来克服上述问题。这里的实施例针对的是可缩放预留站,其实现单个统一推测状态传播和执行唤醒矩阵,以及具有执行电路(例如,算术逻辑单元(arithmeticlogicunit,alu))执行端口集群化的真正的基于年龄的动态端口绑定(例如,懒惰)拾取2调度器。[0049]这里的实施例针对的是新的一类预留站设计和执行单元集群化,实现了以下各项中的一个或多个。(1)单个统一推测传播和执行(例如,执行电路)唤醒矩阵,对于加载依赖跟踪和微操作唤醒都使用共享的依赖信息。此设计的实施例与动态端口绑定兼容,与经由微操作唤醒事件的加载推测状态跟踪不同。这里的实施例不形成单周期定时循环路径,例如,不同于加载推测状态跟踪(例如,作为一种依赖微操作唤醒机制(例如,经由执行矩阵),该机制在父微操作被拾取以调遣到执行电路时,经由广播机制将推测状态从该父微操作传播到子微操作)。(2)真正的基于年龄的动态端口绑定拾取二初级和懒惰次级调度器,用于动态调度到每个预留站的两个执行端口,例如,动态端口绑定方案允许使用(例如,“懒惰的”,如本文所述)次级拾取器(例如,性能接近非懒惰的拾取2方案)。这里的实施例将rs调遣端口的数目加倍(并且因此也将调遣带宽加倍),但与单拾取方案相比,没有引入任何额外的单周期定时路径。(3)通过利用这种新的(例如,懒惰的)拾取2方案,这里的实施例将使用执行电路(例如,alu执行单元)集群化拓扑的执行电路(例如,alu执行单元)的数目加倍,例如,无需添加任何0级数据旁路和/或单周期定时路径。这里的某些实施例没有复制执行端口,而是将个体执行电路分组为执行电路集群。在一个实施例中,每个执行电路集群由初级和次级执行电路组成,例如,端口绑定在集群内是动态的(例如,但在集群之间不是动态的)。(4)在某些实施例中,动态端口绑定、(例如,懒惰)拾取2、执行电路(例如,alu执行单元)集群中的初级执行电路以及次级执行电路一起工作,以使得执行带宽加倍,而不劣化第一阶上的关键单周期定时路径。在某些实施例中,统一推测传播和执行矩阵电路从rs矩阵调度器中去除了关键单周期定时循环。这里的实施例提出了可缩放的设计,以加深和拓宽预留站,并且增大(例如,alu)执行端口的数目,例如,并且避免了增大预留站条目的数目、调遣端口的数目和/或以上论述的执行电路的成本和困难。[0050]这里的实施例利用真正的动态端口绑定方案来提取动态性能和最大的设计灵活性。这里的实施例实现了真正的基于年龄的动态端口绑定拾取2调度器。这里的实施例实现了统一推测状态传播和执行矩阵,以实现rs条目和调遣端口的缩放(例如,与动态端口绑定兼容),而不使用昂贵的加载依赖矩阵(例如,电路)。这里的实施例提供了扩大无序处理器(例如,核心)的宽度和深度的路径。这里的实施例利用动态端口绑定方案、执行单元(例如,电路)集群化以及(例如,懒惰的)拾取2方案来将调遣/执行端口的数目至少加倍,而无需在rs调度器中添加新的单周期定时路径或者从额外的执行电路添加0级旁路数据和相关单周期路径。这里的实施例允许了高效地使用非对称执行电路(例如,alu)设计来优化定时、面积和功率。这里的实施例避免了由于缺乏动态执行信息而将微操作最佳地指派给具有不对称功能的执行电路(例如,alu)的静态端口绑定方案的困难。这里的实施例允许了扩大rs、调遣端口和执行电路的深度和宽度,以提取最大的单线程性能,例如,利用可管理的成本和时间影响。[0051]这里的实施例针对的是统一推测状态传播和执行(唤醒)矩阵(例如,电路),例如,而不是使用单独的加载推测跟踪机制。在某些实施例中,经由统一推测传播矩阵的加载推测跟踪与动态端口绑定兼容(例如,解决端口模糊问题),不具有单周期定时路径来传播推测状态(例如,与经由唤醒/广播事件的推测状态传播形成对比),去除了对于(例如,功率和面积饥饿的)加载依赖矩阵的需要(例如,通过以创新的方式再利用执行矩阵),去除了在动态端口绑定场景中为了消除模糊而对于每个rs条目、每个源的额外比较器的需要(例如,在动态拾取2方案中将比较器加倍)(例如,额外的比较器是功率饥饿的并且使用大量面积),和/或允许了预留站(例如,电路)缩放深度和宽度,因为它去除了加载推测跟踪所要求的单周期定时路径。[0052]这里的实施例针对的是动态端口绑定懒惰拾取2方案和执行端口集群化方案。在某些实施例中,动态端口绑定懒惰拾取2方案和/或执行端口集群化方案包括真正的基于年龄的动态端口绑定拾取2方案端口,其一起绑定并拾取以获得最佳性能(例如,与端口独立地绑定和拾取的静态或半动态端口绑定方案不同),允许了根据需要尽可能快地在多个执行端口中的任何一个(例如,任一个)上调度关键的依赖微操作,而没有像静态或半动态端口绑定方案中的限制(例如,换言之,端口利用率被最大化,从而一旦依赖微操作准备就绪就执行它们),真正的基于年龄的拾取器最大限度地提高了性能,因为最老旧的准备就绪的微操作有最高的概率在关键的依赖链中,双rs调遣端口,与第一阶的单拾取方案相比没有引入任何额外的单周期定时路径(例如,其中动态端口绑定方案允许使用懒惰的次级拾取器,并且性能接近真正的非懒惰拾取2方案),通过利用懒惰拾取2方案,将执行电路(例如,alu执行单元)的数目加倍,而不引入额外的(例如,任何)0级数据旁路和使用执行电路集群化拓扑的单周期定时路径,和/或允许了调遣端口和执行电路(例如,alu执行单元)的数目的缩放,例如,执行单元集群中的额外的懒惰调遣端口和次级(例如,alu)执行电路不参与单周期定时循环路径。[0053]对于作为加载的第一微操作和直接依赖于该加载的第二微操作,这里的某些实施例允许了第二微操作跟踪第一微操作的加载依赖状态,例如,如果第一微操作是坏的(例如,在缓存中错失,等等),则第二微操作被取消。这里的某些实施例利用推测状态传播电路(例如,推测状态传播矩阵304电路)来使得第二微操作的孩子、孙子等等(例如,直接和/或间接依赖于第二微操作,因此它们也间接依赖于第一微操作)能够跟踪它们的加载推测状态,并且因此允许了第二微操作的孩子、孙子等等在第一微操作是坏的(例如,在缓存中错失)并且例如需要被取消和重发出的情况下也被取消。[0054]图1根据本公开的实施例图示了处理器核心100,该处理器核心100具有包括预留站电路142的分配电路138。预留站电路可以是单个预留站电路(例如,被共享于执行电路140之间,例如,执行输入端口144、146和/或148)或者多个预留站电路(例如,对于执行电路的集群的每一执行电路或者对于执行电路140中的每一执行电路,例如对于执行输入端口144、146和/或148中的每一个,有多个预留站电路中的一个预留站电路)。[0055]多个执行电路140可包括多个不同类型的执行电路,例如,(一个或多个)整数类型的执行电路、(一个或多个)存储器类型的执行电路、(一个或多个)浮点类型的执行电路、(一个或多个)单指令多数据(singleinstruction,multipledata,simd)(例如,向量)类型的执行电路,或者这些的任何组合。执行电路140可包括:(i)一组一个或多个整数类型的执行电路150a、150b、150c和150d,具有相应的整数端口144(分别标记为端口p0、p1、p2和p3)(虽然示为具有四个端口和四个相应的这种类型的执行电路,但在某些实施例中可利用任何单个或多个),(ii)一组一个或多个存储器类型的执行电路152a、152b和152c,具有相应的存储器端口146(分别标记为端口p4、p5和p6)(虽然示为具有三个端口和三个相应的这种类型的执行电路,但在某些实施例中可利用任何单个或多个),和/或(iii)一组一个或多个浮点类型和/或simd类型的执行电路154a、154b和154c,具有相应的浮点/simd端口148(分别标记为端口p7、p8和p9)(虽然示为具有三个端口和三个相应的这种类型的执行电路,但在某些实施例中可利用任何单个或多个)。执行电路可以包括一个或多个旁路,例如,子微操作经由执行电路从父微操作接收其操作对象源数据中的一个或多个,该执行电路执行该父微操作,具有输出耦合到要执行该子微操作的执行电路的旁路输入(例如,用于在结果数据尚未被写回到寄存器文件时使用)。[0056]要执行的操作(例如,来自解码器电路120a-122a和/或解码器电路120b-122b的微操作)可被从分配通道136(例如,可以是任何多个,例如,大于端口数、等于端口数和/或小于端口数)经由端口144、146和/或148发送到执行电路140。在某些实施例中,分配通道的数目被称为分配宽度,例如,可以分配的微操作的数目(例如,来自指令解码队列124a和/或指令解码队列124b)。[0057]在某些实施例中,包括了分配电路138,以针对分配通道136上的传入微操作分配执行电路140。在某些实施例中,包括了预留站电路142,以在微操作准备好执行(readyforexecution)时调遣微操作,例如,通过将预留站电路142的一个或多个发出(或调遣)端口上的微操作发送到执行电路140中的相应执行电路。在一个实施例中,预留站电路142检查用于微操作的(一个或多个)操作对象(例如,如其预留站条目中所指示)是否可用,以及相应的执行电路是否可用(例如,可自由使用),并且响应于(一个或多个)操作对象可用和相应的执行电路可用而调遣微操作以供执行。在某些实施例中,处理器利用寄存器重命名来从物理寄存器中抽象出逻辑寄存器,例如,这(一个或多个)逻辑寄存器被预留站(例如,调度器)电路所利用。[0058]处理器核心100可以是处理器的多个核心之一,例如,系统的处理器的多个核心之一。处理器核心100可包括分支预测器102(例如,以预测将由处理器核心100执行的代码(例如,指令)的一个或多个分支。在某些实施例中,分支预测器102(例如,分支预测器电路)从分支的过去行为进行学习来预测下一个(例如,传入的)分支。在某些实施例中,分支预测器102预测(例如,在原始程序顺序上连续的)指令的真子集来作为代码块(例如,以分支指令结束)。作为一个示例,处理器核心100可接收要执行的代码,并且作为响应,可将代码划分成块。[0059]在某些实施例中,处理器核心100(例如,经由取得电路104和/或分支预测器102)可将指令块发送到解码集群,例如,其中第一指令块被发送到解码集群0108a,(程序顺序上的下一个,例如,更年轻的)第二指令块被发送到解码集群n108b,等等。在两集群示例中,第三个(程序顺序上的下一个,例如,更年轻的)指令块可被发送到下一个可用的解码集群(例如,在它完成了其当前指令块的解码之后)。在两集群示例中,第三个(程序顺序上的下一个,例如,更年轻的)指令块可被发送到下一个解码集群(例如,在这个示例中发送到解码器集群108a)。虽然示出了两个解码集群108a-108b,但应当理解为可利用三个或更多个集群(例如,其中“n”是大于1的正整数)。[0060]在某些实施例中,每个解码集群包括两个或更多个(例如,超标量x86)指令解码器,能够对不同的基本代码块进行相互无序的解码,例如,解码集群108a包括第一解码器电路120a(例如,解码器)和第二解码器电路122a(例如,解码器),并且解码集群108b包括第二解码器电路120b(例如,解码器)和第二解码器电路122b(例如,解码器)。[0061]在某些实施例中,处理器核心100的分支预测器102将代码划分为个体块(例如,来自程序的一组连续指令的块)。在某些实施例中,处理器核心100的取得电路104将代码划分为个体块(例如,来自程序的一组连续指令的块)。然后,个体代码块可被发送到它们各自的解码集群进行解码,例如,发送到各自的指令数据队列(例如,指令数据队列110a作为解码集群108a的输入队列,指令数据队列110b作为解码集群108b的输入队列)。[0062]可选地,处理器核心100包括(例如,一级(levelone))指令缓存106,例如,用于缓存一个或多个指令,而不必从存储器加载它们。在某些实施例中,取得电路104经由指令缓存106将代码块发送到它们各自的解码集群。指令缓存106可包括指令缓存标签和/或指令转化后备缓冲器(translationlookasidebuffer,tlb)。在某些实施例中,一旦代码块被发送到它们相应的解码集群108a-108b,每个解码集群就开始并行解码代码块(例如,经由其中的并行解码器电路)。在某些实施例中,解码集群彼此独立地操作,因此可不按顺序(例如,不按程序顺序)地解码代码块。[0063]在某些实施例中,分配电路138负责将操作(例如,微操作)分配给执行电路140(例如,执行单元),例如,按适当的程序顺序。分配电路138可执行引退和/或重命名,例如,以及包括用于重排序任何无序指令(例如,微操作)执行的重排序缓冲器(re-orderbuffer,rob)。在某些实施例中,处理器核心100包括预留站电路142,以使得微操作在该微操作准备好执行时,例如,(一个或多个)源操作对象可用时,被发送(例如,调遣)到执行电路140。在某些实施例中,预留站电路142包括多个预留站条目,例如,对于每个等待执行的微操作有一个。[0064]处理器核心描绘了:第一解码集群108a,在第一组112a中有多个解码器电路120a-122a;以及第二解码集群108b,在第二组112b中有多个解码器电路120b-122b。在某些实施例中,(例如,每个)解码器电路(120a、122a、120b、122b)要将(例如,宏)指令解码成要由(一个或多个)执行电路140执行(例如,作为基元来执行)的一组一个或多个微操作。在某些实施例中,解码器电路(120a、122a、120b、122b)要将某些(例如,宏)指令解码成相应的一组一个或多个微操作,而不利用微代码定序器128(例如,与任何解码集群和/或解码器电路分开的微代码定序器),和/或通过利用微代码定序器128(例如,与任何解码集群和/或解码器电路分开的微代码定序器)将其他(例如,宏)指令(例如,复杂指令集计算机(complexinstructionsetcomputer,cisc)指令)解码成相应的一组一个或多个微操作。在一个实施例中,解码器电路(120a、122a、120b、122b)将在每个周期输出一定数目的微操作(例如,每个周期一个微操作和/或每个周期一个到四个微操作之间)。在某些实施例中,“微编码”指令一般是指这样的指令:其中,解码集群(例如,一组解码器)请求微代码定序器128把相应的一组一个或多个(例如,多个)微操作(μop)从微代码定序器存储器130(例如,只读存储器(rom))加载到解码流水线中(例如,加载到相应的指令解码队列中),例如,而不是由解码器电路直接产生该指令的一组一个或多个微操作。例如,为了实现一些(例如,复杂的)(例如,x86)指令,使用微代码定序器128将该指令划分成一串较小的(例如,微)操作(也被称为微op或μop)。[0065]在某些实施例中,每个解码集群(例如,在一些实施例中的每个解码器电路)包括数据结构,来将一个或多个指令的相应入口点值(例如,地址)存储到微代码定序器128的存储器130中,和/或包括数个比特(例如,生成指令的相应微操作的周期的数目和/或指令的微操作的数目)。例如,(1)解码集群108a的数据结构114a包括一个或多个条目,每个条目指示出(例如,对于单个指令),指令的入口点116a和/或指令的比特(例如,编码值),和/或(2)解码集群108b的数据结构114b包括一个或多个条目,每个条目指示出(例如,对于单个指令),指令的入口点116b和/或指令的比特(例如,代码)。在某些实施例中,数据结构114a和数据结构114b是彼此的拷贝,例如,它们包括相同的数据。在一个实施例中,数据结构114a和数据结构114b在制造时被加载其数据。在一个实施例中,数据结构114a和数据结构114b在处理器启动期间被加载其数据,例如,通过执行基本输入/输出系统(basicinput/outputsystem,bios)固件或统一可扩展固件接口(unifiedextensiblefirmwareinterface,uefi)固件。[0066]在将指令解码成其各自的微操作之后(例如,由解码器电路或微代码定序器),在某些实施例中,它们被存储在指令解码队列中。在图1中(例如,在解码级结束时),解码集群108a包括指令解码队列124a(例如,指令队列),该队列从解码器电路120a-122a和从微代码定序器128接收各自的微操作(例如,当解码集群108a被仲裁访问存储器130时),并且解码集群108b包括指令解码队列124b(例如,指令队列),该队列从解码器电路120b-122b和从微代码定序器128接收各自的微操作(例如,当解码集群108b被仲裁访问存储器130时)。[0067]可选地,包括了开关134来将指令解码队列124a-124b的(一个或多个)输出耦合到分配电路138的分配通道136(例如,(一个或多个)输入)。在某些实施例中,分配电路138将来自指令解码队列124a-124b的微操作(例如,按程序顺序或不按程序顺序)发送到执行电路140中的执行电路(例如,经由预留站电路142)。在某些实施例中,处理器核心100包括预留站电路142,以使得微操作在该微操作准备好执行时,例如,(一个或多个)源操作对象可用时,被发送(例如,调遣)到执行电路140。在某些实施例中,预留站电路142包括多个预留站条目,例如,对于每个等待执行的微操作有一个。[0068]某些执行电路140(例如,存储器执行电路150a-154c)可访问存储装置,例如,寄存器156(例如,(一个或多个)数据寄存器158)和/或数据缓存160(例如,缓存层次体系的一个或多个级别)。一旦结果由执行电路140生成,引退电路(例如,在分配电路138内)于是就可引退相应的指令。[0069]图2根据本公开的实施例图示了具有多个流水线级的数据缓存160。例如,第一级202(例如,接收加载请求)(例如,数据缓存0(dc0)级),耦合到第二级204(例如,dc1),耦合到第三级206(例如,dc2),耦合到第四级208(例如,dc3)(例如,在这里解析了加载推测状态),以及第五级210(例如,dc4)(例如,在这里已经加载的数据是可用的,例如,可用来由执行电路(例如,在执行流水线中)消费)。虽然示出了五个级,但应当理解,数据缓存可具有任何单个或多个级。可以包括监视电路212来监视待处理的加载请求的状态,例如,监视它是否是“坏”请求。坏请求(例如,在第四级208期间确定为坏)的示例包括(一个或多个)缓存中的数据的错失(例如,不是命中),例如,数据不在数据缓存中。错失可能是由数据缓存160的预取器未能正确预测以从其他(例如,系统)存储器中预取该数据到数据缓存中而造成的。例如,参见图9b。错失可能是由该数据的逐出而造成的,例如,在缓存没有容量的情况下,该数据已被逐出。[0070]例如,第二个(例如,算术功能或逻辑功能)微操作可能依赖于从数据缓存160加载其数据(例如,到寄存器中)的加载类型的微操作。[0071]图3根据本公开的实施例图示了预留站电路142。所描绘的预留站电路142包括统一推测状态传播和执行矩阵电路302,该统一推测状态传播和执行矩阵电路302包括统一依赖矩阵306,在逻辑上馈送给推测(例如,状态)传播矩阵304和执行唤醒308矩阵逻辑电路两者。注意,推测状态传播矩阵304和执行唤醒矩阵逻辑308是单独示出的,以强调在逻辑上,在某些实施例中,在执行唤醒和推测状态传播之间没有交叉馈送,即使这两个功能使用相同的物理矩阵结构。图5中示出了单个统一推测状态传播和执行矩阵电路302(例如,作为逻辑电路的一个块)。在某些实施例中,推测状态传播矩阵304、加载推测跟踪器电路312、以及用于飞行中执行微操作的加载推测逻辑电路318一起工作,以跟踪加载依赖性,并且一旦其加载依赖性得以解决则生成取消指示(例如,对于所有rs条目)。在某些实施例中(例如,在同一时间),执行唤醒矩阵逻辑308生成准备就绪给初级拾取器电路320和次级拾取器电路322,以及粘性(sticky)准备就绪逻辑电路324(例如,计数器),例如,对于所有rs条目。在某些实施例中,单个统一矩阵结构302提供准备就绪生成(例如,操作对象是否准备就绪)和加载推测跟踪(例如,它是否是坏的加载,使得推测应当被取消)功能。[0072]在某些实施例中,初级拾取器电路320使用粘性准备就绪逻辑电路324(例如,指示出微操作源至少在一个周期前就准备就绪)和来自执行唤醒矩阵逻辑308的实时准备就绪(例如,在当前周期中生成的准备就绪)。在某些实施例中,次级拾取器电路仅使用来自粘性准备就绪逻辑电路324的准备就绪指示。在某些实施例中,次级拾取器电路322不使用实时准备就绪指示,因此这被称为“懒惰”拾取,例如,次级拾取器电路322不参与单周期唤醒循环。在某些实施例中,次级拾取器电路322与执行唤醒矩阵逻辑308为初级拾取器电路320生成准备就绪比特并行地,拾取微操作。在一个实施例中,粘性准备就绪324(例如,计数器)被用于生成dc1_spec_stat_from_direct_load314,用于直接依赖于加载的微操作,例如,还用于控制数据旁路电路。[0073]在一个实施例中,与从执行唤醒矩阵逻辑308生成的准备就绪比特相比,次级拾取器电路322在更短的时间内完成,例如,从而对于初级拾取器电路320(例如,调度器)的单周期拾取循环,次级拾取是隐藏的。在某些实施例中,预留站电路中的任何微操作(例如,从分配加载到统一依赖矩阵306中)可被初级拾取器电路320或次级拾取器电路拾取,而没有任何限制,例如,拾取顺序和执行端口指派是微操作年龄和准备就绪度的函数,没有任何端口绑定的信息。有效地,这实现了真正的基于年龄的动态端口绑定拾取2调度器。某些实施例从而使用懒惰的次级拾取器电路322,而不是非懒惰的次级拾取器,来自真正的动态端口绑定的性能损失很小。[0074]图4根据本公开的实施例图示了图3的预留站电路中的示例定时路径。在某些实施例中,单周期拾取定时循环只对于初级拾取器电路320存在。例如,懒惰的次级拾取器电路322只参与两周期定时循环。[0075]参考图3和图4,应当很明显,统一推测状态传播和执行矩阵电路302实现了与单独的加载依赖矩阵相同的好处,但没有它的高成本。通过再利用执行依赖矩阵306,这里的实施例直接将推测状态从生产者微操作传播到依赖微操作。在某些实施例中,直接推测传播状态机制(例如,推测状态传播矩阵304)是实现动态端口绑定的关键促成者,因为它不依靠于经由矩阵唤醒事件从预先确定的执行端口传播父微操作推测状态。在某些实施例中,直接推测传播状态机制(例如,推测状态传播矩阵304)针对加载推测取消逻辑电路去除了单周期定时路径,例如,创建了如图4所示的三周期路径。在某些实施例中,取消指示可被发送到(一个或多个)执行电路(例如,(一个或多个)端口)。[0076]在某些实施例中,包括了加载推测跟踪器电路312,以跟踪数据缓存中的加载微操作的推测,例如,如下文参考图6所论述的那样。加载推测跟踪器电路312可经由执行唤醒308(例如,包括来自其他执行预留站310——例如,其他整数alu、浮点或加载型预留站的执行唤醒308)和粘性准备就绪逻辑324,从图2中的监视电路212接收其直接依赖于加载的微操作的进度。加载推测跟踪器电路312可经由执行唤醒308(例如,包括来自其他执行预留站310——例如,其他整数alu、浮点或加载型预留站的308)和用于飞行中执行uop的加载推测逻辑电路318,从监视电路212接收其间接依赖于加载的微操作的进度指示。[0077]在某些实施例中,初级拾取器电路320从统一依赖矩阵拾取准备好执行的第一微操作(例如,并且作为向量328发送,该向量包括与该微操作相关的信息,例如,操作码、(一个或多个)源数据位置、(一个或多个)目的数据位置,等等),以便调遣到执行电路;和/或次级拾取器电路322从统一依赖矩阵(例如,经由粘性准备就绪逻辑电路)拾取准备好执行的第二微操作(例如,并且作为向量330发送,该向量包括与该微操作相关的信息,例如,操作码、(一个或多个)源数据位置、(一个或多个)目的数据位置,等等),以便调遣到执行电路。这样的选择可使得对调遣的指示被用于唤醒的广播向量326发送,例如,其随后被发送到执行唤醒矩阵逻辑308和/或加载推测逻辑电路318。在某些实施例中,这种选择使得那些微操作(例如,向量328和330)被微操作拾取开关332发送到执行电路,例如,其(一个或多个)输入端口。[0078]在某些实施例中,当微操作的(一个或多个)父生产者微操作在飞行中要被服务,但可能由于各种原因被取消时,预留站电路142将推测性地把依赖微操作指示为准备好执行。例如,父生产者微操作可以是加载微操作或直接或间接依赖于(一个或多个)加载微操作的其他微操作。例如,加载推测跟踪器电路312跟踪(一个或多个)直接或间接父加载微操作的至少一些进度(例如,在解析加载微操作执行状态的周期之前的一个或多个周期并且包括该周期),然后将指示发送到已被推测性地标记为准备就绪的依赖微操作。在某些实施例中,如果(一个或多个)直接或间接父加载被确定为坏的,例如,数据缓存错失,则来自加载推测跟踪器电路312的指示被用来取消直接或间接依赖于(一个或多个)加载微操作的微操作的执行。[0079]图5根据本公开的实施例图示了统一推测状态传播和执行唤醒矩阵电路302。图5中包括预留站电路142的示例格式,以说明多个条目(例如,索引为0至n-1)(例如,对于其中被调度的每个微操作有一个条目)如何被用于在微操作准备好执行时对其进行调遣,例如,通过将预留站电路142的一个或多个发出(或调遣)端口上的微操作发送到图1中的执行电路140中的相应执行电路。在一个实施例中,预留站电路142检查微操作的(一个或多个)操作对象(例如,在图5中示为源1、源2和源3)(例如,如其预留站条目中所指示)是否可用,以及相应的执行电路是否可用(例如,可自由使用),并且响应于(一个或多个)操作对象可用和相应的执行电路可用而调遣微操作来执行。在某些实施例中,处理器利用寄存器重命名来从物理寄存器中抽象出逻辑寄存器,例如,这(一个或多个)逻辑寄存器被预留站(例如,调度器)电路所利用。[0080]在某些实施例中,统一推测状态传播和执行唤醒矩阵电路302被包括为预留站电路142的一部分。在一个实施例中,统一推测状态传播和执行唤醒矩阵电路302的宽度为n,高度为n,其中n是每个执行端口集群(例如,初级和次级)的rs条目的数目。在某些实施例中,统一推测状态传播和执行唤醒矩阵电路302对于执行群集c的每个预留站条目i包括n×n矩阵的电路元素502(例如,dep_mtx[c][i][n-1:0])。在某些实施例中,每一行是rs条目的依赖向量,例如,依赖向量在与其源生产者的rs条目相对应的比特位置处具有“一”。例如,如果在rs条目j中的父微操作与执行端口集群c中的子微操作i之间存在依赖性,则dep_mtx[c][i][j]被设置为“一”。在某些实施例中,有一个或多个执行端口集群,其中执行端口集群的总数为大写c。例如,每个集群具有其各自的统一推测状态传播和执行唤醒矩阵电路302。在一个实施例中,有三个执行端口集群(例如,执行端口集群c=3),从而在依赖矩阵前面利用了3:1多路复用器。在一个实施例中,小写的c指示出给定的处理器的执行端口集群中的特定一个执行端口集群,例如c=1和c=4,指示出具有4个执行端口集群的处理器(例如,核心)的“执行端口集群”编号1。[0081]在执行唤醒使用模式的某些实施例中,父微操作广播其唤醒向量(例如,来自从广播集群之一c的n比特向量cluster_bcst[c][n-1:0],其中c是集群0到集群c-1之一)到统一推测状态传播和执行唤醒矩阵电路302,并且执行矩阵对于依赖于进行广播的父微操作的rs条目生成“命中”指示(例如,图5中的source_rdy[c][i])。例如,来自所有rs条目的“命中”指示是要由拾取器电路(例如图3和图4中的拾取器电路320)消耗的源准备就绪向量。[0082]在某些实施例中,选择一种模式,其使得加载推测状态向量(例如,dc1_in、dc2_in、dc3_in)在统一依赖矩阵列上被广播。在某些实施例中,加载推测状态向量dc1_in[c][n:1-0]、dc2_in[c][n:1-0]、dc3_in[c][n:1-0]是n比特向量(例如,其中n是矩阵宽度),其中c是c个执行端口集群之一。在某些实施例中,加载推测状态向量的比特i(例如,dc1_in[c][i]、dc2_in[c][i]、dc3_in[c][i])表示执行端口集群c的rs条目i的加载推测状态。例如,dc1_in[c][i]表示执行端口集群c的rs条目i对于dc1流水线级处的加载微操作直接或间接地具有依赖性(例如,因此离参考图2的加载推测解析有2个周期)。类似地,dc2_in[c][i]表示执行端口集群c的rs条目i对于dc2流水线级处的加载微操作具有依赖性(例如,因此离参考图2的加载推测解决有单个周期)。在某些实施例中,加载依赖状态向量dc1_in、dc2_in、dc3_in在这个使用模式中经由统一依赖矩阵从父微操作传播到依赖微操作。[0083]在一个实施例中,加载推测向量dc1_in、dc2_in、dc3_in(例如,但不包括dc0或dc4)在统一依赖矩阵的列上广播。producer_cluster_id[c][i]是执行端口集群c的rs条目i中的微操作的生产者标识符(例如,父生产者微操作所驻留的rs或执行端口集群)。[0084][0085][0086]在这个实施例中,如果执行端口集群producer_cluster_id[c]的rs条目j中的父微操作与执行端口集群c的子微操作i之间存在依赖性,如dep_mtx[c][i][j]=1所指示,则dc1_in[producer_cluster_id[c]][j]传播到dc1_out[c][i]。以这种方式,加载依赖状态从父亲传播到孩子。从而,在某些实施例中,加载推测状态(例如,dc1_in、dc2_in、dc3_in)从父亲传播到孩子(例如,经由and逻辑门、多路复用器以及按行or逻辑门,如图5中所描绘)(例如,来自加载推测跟踪器电路312的输入),而不依靠在单周期路径中从刚拾取/调遣的父微操作(例如,经由唤醒矩阵命中事件)向子微操作广播加载依赖状态。[0087]图6根据本公开的实施例图示了加载推测跟踪器电路312(例如,对于每个源操作对象和/或预留站条目有一个)。更具体而言,图6示出了rs条目的一个源的加载推测跟踪器电路312的细节。在某些实施例中,加载推测跟踪器电路312跟踪数据缓存访问的多个流水线级的真子集(例如,如图2所示)。例如,加载推测跟踪器电路312(例如,仅)跟踪在使用第一数据触发器602(dc2_stat_flop)和第二数据触发器604(dc3_stat_flop)解析推测之前的加载推测状态的最后两个级。在一个实施例中,用于飞行中微操作的加载推测逻辑电路318计算从rs派遣的飞行中微操作的推测状态(例如,dc1_spec_stat_from_in_flight316)。例如,在dc1_spec_stat_from_in_flight中,与具有dc1推测状态的飞行中微操作的rs条目相对应的比特被标记为一(而不是零)。[0088]在某些实施例中,这是一个相对缓慢的操作。因此,在某些实施例中,预留站电路计算推测状态的dc1版本(例如,而不是dc3版本),并且在将它用于由坏加载引起的即时取消之前将其暂存两次(在第一数据触发器602(dc2_stat_flop)和第二数据触发器(dc3_stat_flop)中)。在某些实施例中,通过维护本地暂存触发器,加载推测状态逻辑的最后两个级只经由推测传播矩阵304直接从父亲传播到孩子。这样,如果微操作(例如,直接或间接地)依赖于坏的加载,则可提前生成取消指示606(例如,dc3_final信号)以即时取消rs中的微操作。在一个实施例中,使用两级暂存触发器602、604来将该定时路径扩展到三个周期(例如,从微操作拾取到最终的微操作取消),以分摊来自计算从rs调遣的飞行中微操作(例如,如图3所描绘)的dc1加载推测状态(例如,dc1_spec_stat_from_in_flight316指示)的定时压力。在一个实施例中,三周期定时路径从(dc1)加载推测逻辑电路318开始到(dc2)加载推测跟踪器电路312/推测传播矩阵304到(dc3)加载推测跟踪器电路312/推测传播矩阵304到最终取消指示生成。[0089]在某些实施例中,任何加载依赖都源于微操作,其操作对象直接依赖于加载。为了出于功率和面积的原因尽量减少逻辑和暂存触发器,这里的某些实施例仅在本地跟踪加载推测状态的最后两个级(例如,dc2和dc3),而不是从与(例如,直接)加载依赖相关联的最开始级开始的所有级。由于这种优化,在某些实施例中,要计算dc1推测状态,因为加载推测状态的更早级没有被跟踪,并且是不可用的。在图3中,用于飞行中执行微操作的加载推测逻辑电路318计算刚调遣到执行流水线中(例如,调度提前一个周期发生)的微操作的dc1状态(例如,该直接或间接父加载操作是否已达到流水线级dc1,但还没有解析加载推测状态)。因此,在某些实施例中,只要求被调遣到执行流水线的依赖微操作的dc1推测状态,例如,没有必要计算rs中的所有微操作的dc1推测状态。在某些实施例中,待定的微操作不启动依赖链以及随其传播推测状态。在某些实施例中,通过在执行流水线的较后级(例如,执行电路的较后级,例如,如图9a或9b中所示)与被派遣的微操作的飞行中的父亲相匹配来为该微操作确定dc1加载推测状态。例如,这里的实施例使用唤醒距离来匹配飞行中的父亲,例如,连同源(物理源(psrc)标识符)和/或目的地(物理目的地(pdst)标识符)比较一起。在某些实施例中,被派遣的微操作和直接依赖于加载的微操作的dc1状态被组合,然后在与被派遣的微操作的rs条目或者具有直接加载依赖的微操作的rs条目相对应的推测传播矩阵的列上广播。[0090]一般来说,直接加载依赖可以指微操作将加载操作的结果作为其输入之一,和/或间接加载依赖可以指微操作将来自直接或间接依赖于加载操作的非加载微操作的结果作为其输入之一。在一个实施例中,间接加载依赖微操作可被继承多于一个级别,例如,如果微操作的输入之一是来自(一个或多个)父非加载微操作和(一个或多个)祖父非加载微操作、但不是来自(一个或多个)曾祖父加载微操作的结果,则该微操作被视为间接依赖于加载。[0091]在某些实施例中,为了启动推测状态传播的链,具有直接依赖于加载的源操作对象的微操作要将其dc1推测状态(例如,图3和6中的dc1_spec_stat_from_direct_load314指示)传播给依赖的子微操作。在某些实施例中,dc1_spec_stat_from_load314指示对于具有直接加载依赖的微操作来说是从来自加载的唤醒事件(例如,以及唤醒距离)得出的。如图6所示,dc3_final指示606由所描绘的输入生成(例如,经由or逻辑门)。在某些实施例中,dc1_spec_stat_from_direct_load316和dc1_stat_from_in_flight314的逻辑or生成rs中要开始传播到子微操作的所有微操作的dc1推测状态。在某些实施例中,经由推测传播矩阵304,每个rs条目中的子微操作从父亲接收dc1状态。在某些实施例中,结果dc1推测状态被dc2_stat_flop602捕捉(例如,为下一个周期作为时钟周期提前)。在某些实施例中,来自所有rs条目的来自dc2_stat_flop602的dc2推测状态在推测传播矩阵304的相应列上广播。在某些实施例中,每个rs条目中的子微操作从其父亲接收dc2推测状态,并且将结果dc2推测状态捕捉到dc3_stat_flop604中。在某些实施例中,来自所有rs条目的来自dc3_stat_flop604的dc3推测状态在推测传播矩阵304的相应列上广播。在某些实施例中,每个rs条目中的子微操作从父亲接收dc3_out,例如,dc3_final用于重置粘性准备就绪比特和/或在被取消的微操作能够广播和唤醒其孩子之前即时取消在该周期中拾取的微操作,以停止坏依赖链传播。[0092]作为一个示例,对于依赖于加载的微操作,当该微操作被选择来执行(例如,并且用于唤醒的相应广播向量326被生成)时,用于飞行中执行微操作的加载推测逻辑电路318计算dc1状态316(例如,该加载操作是否已达到流水线级dc1,但还没有解析加载推测状态)。[0093]作为另一个示例,对于直接依赖于加载的微操作,该微操作在其父加载执行时被唤醒,并且该微操作知道它是被加载唤醒(例如,唤醒过程/事件来自统一推测和执行唤醒矩阵电路302内的执行唤醒矩阵308)。在一个实施例中,dc1_spec_state_from_direct_load314指示是从这个唤醒事件生成的,不管被唤醒的直接依赖于加载微操作的微操作是否被调度/拾取以及是否调遣到执行流水线中,例如,不同于“用于飞行中执行uop的加载推测逻辑电路318”,其中dc1_spec_stat__from_in_flight指示是(例如,仅)响应于微操作被调度/拾取和被调遣(例如,到执行流水线中)来执行而生成的。在某些实施例中,这被用来应对具有直接load依赖的微操作(例如,直接依赖于load的add,作为一个示例)在其被父load唤醒/准备就绪之后没有立即或足够快地被拾取和调遣的情况,例如,add没有足够早地被拾取/调度和调遣到执行流水线中,以至于当add的父load微操作处于其dc1周期中时,add已经在执行流水线中在“飞行中”了(微操作调度可能由于许多因素而延迟)。例如,当从dc2(例如,紧接着dc1之后)开始跟踪加载推测跟踪器电路312中的rs中的所有微操作的推测状态时。在某些实施例中,“用于飞行中微操作的加载推测逻辑318”仅在微操作(例如,add)被拾取(例如,并且在其第二预留站周期中)之后被使用。然而,在某些实施例中,在add在add的父load微操作处于其dc2周期或更晚时被拾取/调度并被调遣到执行流水线中的情况下,对于微操作(例如,add微操作)从dc2开始生成推测状态来写入到加载推测跟踪器电路312中,这太晚了。因此,对于具有“直接”加载(例如,loadμop)依赖性的微操作,某些实施例针对dc1_spec_state_from_direct_load314使用单独的逻辑/路径,以便在直接依赖于加载的微操作到达dc1时写入到加载推测跟踪器电路312中(例如,经由粘性准备就绪324),以使得加载推测跟踪器电路312可以开始跟踪其dc2状态,例如,即使直接依赖于加载的微操作(例如,在一个示例中是add)还没有被拾取和调遣。在某些实施例中,dc1_spec_state_from_direct_load314被用于应对直接依赖于load的微操作,该load被拾取/调遣得太晚,以至于无法使用用于飞行中微操作的加载推测逻辑电路318。在某些实施例中,dc1_spec_state_from_direct_load314指示是从直接依赖加载的微操作的唤醒事件生成的,而不管直接依赖于加载微操作的微操作是否被调度/拾取(例如,以及被派遣)到执行流水线中。[0094]图7根据本公开的实施例图示了耦合到执行电路的多个集群704_0和704_1的预留站电路。在一个实施例中,初级拾取器电路320和次级拾取器电路322将微操作702发送到执行电路的多个集群704_0和704_1以便执行。[0095]在某些实施例中,一组两个或更多个执行电路(例如,每个具有相应的(一个或多个)端口)被集群化为单个集群。例如,在单个集群704_0中有(例如,alu的)主执行端口706和(例如,alu的)第二执行端口708。可以利用多个集群,例如,集群704_1,等等。在一个实施例中,(例如,每个)集群包括一个或多个旁路,用于来自执行电路(例如,alu)的直接来自另一个执行电路(例如,在同一集群中或者来自(一个或多个)其他集群的执行电路)的结果数据,例如,其中结果数据尚未被写回到寄存器文件中(例如,由于定时)。从而,子微操作可经由旁路从父操作对象接收其操作对象源数据中的一个或多个。在图7中,所描绘的集群704_0中的初级端口706和次级端口708分别具有其自己的l1和更高的旁路712和714,而只有初级端口706具有l0旁路710,例如,l0意味着输入从早一个周期执行的父亲到达,l1意味着输入从早两个周期执行的父亲到达。第二集群704_1可包括类似的组件。[0096]预留站电路(例如,调度器)可包括单个拾取器电路(例如,在被指派到执行端口的预绑定的微操作候选者之间拾取)。一种简单的拾取2调度器实现方式可使用如本文所述的静态端口绑定方案或半动态端口绑定方案。在某些实施例中,这两种方案不允许拾取器电路考虑预留站中的所有微操作,例如,拾取器电路只考虑基于端口绑定的微操作的真子集。由于微操作端口绑定和微操作拾取操作是解耦的,所以不能实现最佳的端口指派,而且在某些实施例中这会导致性能损失。[0097]这里的实施例(例如,与静态或半动态并行拾取2调度器形成对比)利用次级拾取器电路322,它基于来自先前周期的准备就绪信息,每个周期拾取一个微操作。例如,第二拾取器使用旧一个周期的准备就绪比特(例如,“懒惰”)(例如,粘性准备就绪324(例如,触发器)),以避免向其唤醒定时路径中引入单周期时延。在某些实施例中,次级拾取器电路322只参与2周期拾取循环路径。在一个实施例中,从周期n-1拾取微操作的初级拾取器电路320取消该微操作为在周期n中的候选者的资格,次级拾取器电路322在周期n中基于与来自周期n-1相同的准备就绪信息拾取下一个最旧的准备就绪微操作,例如,下一个最旧的准备就绪微操作比初级拾取晚一个周期被拾取。在某些实施例中,由次级拾取器电路322拾取的微操作被取消作为同一周期n中的初级拾取器电路320的候选者的资格。以这种方式,拾取可根据年龄顺序使用每周期更新一次的准备就绪信息来顺序/串行地进行,例如,周期n中的初级拾取器电路320和周期n 1中的次级拾取器电路322使用相同的准备就绪信息。[0098]在某些实施例中,由于次级拾取器电路322使用粘性准备就绪324(例如,来自先前周期)而不是来自执行唤醒矩阵308的实时准备就绪,次级拾取器电路322在周期的开始时开始执行,例如,并且就定时而言与执行唤醒矩阵308逻辑重叠。在某些实施例中,预期执行唤醒矩阵308输出会较慢,因为在拾取/复用过程之后来自被派遣的微操作的广播信号的严重扇出,例如,从而没有由于包含次级拾取器电路322而引起的时间影响,因为它被完全隐藏在初级执行矩阵唤醒308逻辑之下。在一个实施例中,唯一的单周期循环是来自初级拾取器电路320的基本拾取到拾取循环,例如,次级拾取器电路322只参与两周期拾取循环。在一个实施例中,取消循环是经由推测传播矩阵的3周期循环,如图4所示。[0099]在某些实施例中,预留站中的所有微操作(例如,与静态或半动态端口绑定方案中的微操作的真子集形成对比)都是不受限制地调遣到同一执行集群内的初级或次级执行端口的候选者,例如,不使用任何静态端口绑定算法或者半动态算法中的端口绑定的实时调整。在一个实施例中,尽管次级拾取器电路322使用“懒惰准备就绪”,但依赖链中的关键微操作总是被初级拾取器电路322拾取,从而不会表现出由于到懒惰端口的次优端口绑定而引起的任何性能惩罚,例如,像静态或半动态端口绑定算法中那样。在某些实施例中,使用“懒惰准备就绪”不仅从次级拾取器电路322中去除了单周期路径,而且次级执行电路的执行端口(例如,次级执行端口708)不要求从(例如,所有)其他执行单元的单周期(例如,0级)旁路。以这种方式,这里的实施例将次级拾取器电路322和次级执行电路(例如,执行单元)添加到执行电路集群中,而不在其中添加单周期定时路径。这些实施例从而将执行端口的数目和执行带宽加倍,而没有在单个拾取器和执行端口上引入任何额外的单周期路径。这里的实施例提供了更好的性能,因为来自预留站的可用执行带宽和耗尽率被加倍,并且/或者动态端口绑定允许了预留站中的所有微操作被初级和次级调遣端口两者拾取为候选者,例如,与静态或半动态端口绑定方案形成对比,其中任一调遣端口仅考虑预留站中的所有微操作的真子集。[0100]这里的实施例通过使用这种具有动态端口绑定的延迟(例如,懒惰)的次级拾取器电路而提供了定时优势。例如,动态端口绑定允许了对于定时使用“懒惰准备就绪”方案,而不引入由于次优端口绑定而引起的任何显著的性能惩罚,例如,与一般静态或半动态端口绑定方案形成对比,这种方案难以与懒惰调度器一起工作,因为次优端口绑定到懒惰端口对性能有不利影响。在某些实施例中,动态端口绑定允许了“懒惰拾取”的实现,而没有显著的性能惩罚。[0101]这里的实施例提供了(例如,alu)执行端口集群化,仅对初级执行端口有0级(例如,单周期)旁路。在一个实施例中,(例如,alu)执行集群包括初级alu和次级alu,例如,其中初级执行电路(例如,alu)支持来自所有初级和次级执行电路(例如,alu)的完全数据旁路,并且/或者次级执行电路(例如,alu)仅支持来自初级和次级执行电路(例如,alu)的来自1级和更高级的数据旁路。作为示例,对于在周期n执行的生产者微操作,0级旁路允许了初级执行电路(例如,alu)在周期n 1消耗该结果,并且由于0级数据旁路对于次级执行电路(例如,alu)不可用,所以次级执行电路(例如,alu)可能只在周期n 2或以后消耗来自生产者微操作的结果。这里的实施例从而避免了在添加次级拾取器和次级执行电路(例如,alu)执行端口时添加单周期(例如,0级)旁路。在某些实施例中,次级执行电路(例如,alu)只参与两周期定时路径,例如,如图4中所描绘。这里的实施例从而使得执行电路(例如,alu)的数目加倍,而没有引入任何新的单周期定时路径,例如,实际上使执行耗尽率加倍,而没有一阶的定时劣化,具有可缩放的执行电路(例如,alu)集群化方案。[0102]作为示例,七个微操作的链可包括加载(例如,“第一uop”)-》a-》b-》第二uop-》c-》d-》第三uop(例如,其中箭头指示出随后的微操作依赖于在前的微操作)(例如,下面的示例部分中论述的第一、第二和第三uop)。在某些实施例中,(1)加载(第一)uop使用统一推测和执行唤醒矩阵电路来唤醒a,auop使用统一推测和执行唤醒矩阵电路来唤醒b,buop使用统一推测和执行唤醒矩阵电路来唤醒第二uop,第二uop唤醒c,c唤醒d,d唤醒第三uop(例如,全都使用统一推测和执行唤醒矩阵电路来唤醒其直接孩子),(2)a、b、第二uop、c、d、第三uop全都驻留在具有统一推测和执行唤醒矩阵电路的预留站中,和/或(3)但是,加载(第一)uop可驻留在另一种类型的预留站中(例如,加载预留站),例如,加载(第一uop)使用统一推测和执行唤醒矩阵电路来唤醒a,因为a在具有统一矩阵的预留站中(例如,对于b、第二uop、c、d和第三uop也是如此)。在某些实施例中,加载(第一uop)在统一推测和执行唤醒矩阵电路中使用不同的唤醒模式,例如,其中rs条目a的唤醒矩阵逻辑被配置为比较器(例如,替代唤醒矩阵模式,而不是在此示例中可用于其他uop的一发(one-hot)依赖向量命中(例如,如本文所述)),以便来自加载(第一uop)的目的地指示(例如,“pdst”标签)可用于唤醒a。[0103]这里的实施例降低了增大处理器中的预留站条目、调遣端口和执行电路的数目的成本和难度。这里的实施例针对的是一种新颖的预留站拓扑,其实现单个统一推测状态传播和执行唤醒矩阵、真正的基于年龄的动态端口绑定懒惰拾取2调度器、以及执行电路(例如,alu)执行端口集群化。这里的实施例是可缩放的方式,通过从加载依赖跟踪逻辑电路中去除单周期定时路径来增大预留站深度。这里的实施例提供了真正的基于年龄的动态端口绑定方案,该方案通过去除静态或半动态端口绑定方案的低效率来提取性能。这里的实施例提供了动态端口绑定,它允许在执行端口集群中使用懒惰的次级拾取器和次级执行电路,以将拾取器、调遣和执行端口的数目加倍,而不引入额外的单周期定时路径。非对称执行电路(例如,alu)设计可被高效地用于优化定时、面积和功率。这里的实施例克服了静态端口绑定方案由于缺乏动态执行信息而在将微操作最优地指派给具有不对称功能的alu时的困难。这里的实施例提供了一种懒惰的拾取2策略和加载推测跟踪机制,该机制是可缩放的,例如,并且它可被扩展到更高数目的拾取器电路(例如,拾取3,拾取4,等等),其中第二和更高的拾取不在单周期定时循环中。[0104]图8是根据本公开的实施例图示出利用处理器的预留站电路的操作800的流程图。操作800(或者本文描述的其他过程,或者变化,和/或其组合)中的一些或全部是在预留站电路的控制下执行的。[0105]操作800包括,在块802,用处理器的解码器电路将一个或多个指令解码成从处理器的数据缓存加载数据的第一微操作,依赖于第一微操作的第二微操作,以及依赖于第二微操作的第三微操作。操作800还包括,在块804,针对第三微操作填充处理器的预留站电路的预留站条目。操作800还包括,在块806,响应于针对第三微操作填充预留站条目,由预留站电路的加载推测跟踪器电路跟踪第一微操作在数据缓存中的进度,以响应于第一微操作对数据缓存中的数据的错失而针对第三微操作生成取消指示,其中,加载推测跟踪器电路响应于第一微操作被调遣到数据缓存中而开始跟踪第一微操作在数据缓存中的进度。[0106]在另一个实施例中,操作800包括用处理器的解码器电路将一个或多个指令解码为从处理器的数据缓存加载数据的微操作、对数据进行操作的微操作、或者从数据缓存加载数据的第一微操作和对数据进行操作的第二微操作;针对该一个或多个微操作填充处理器的预留站电路的一个或多个预留站条目;并且,响应于针对直接或间接加载依赖微操作填充预留站条目,由预留站电路的加载推测跟踪器电路跟踪微操作的直接或间接父加载微操作的进度(关于在数据缓存执行流水线中的执行状态),以响应于直接或间接父加载微操作对数据缓存中的数据的错失而针对直接或间接加载依赖微操作生成取消指示,其中,加载推测跟踪器电路响应于直接或间接父加载微操作被调遣到数据缓存执行流水线中,利用推测矩阵传播电路,开始跟踪直接或间接父加载微操作在数据缓存执行流水线中的进度。[0107]下面详述其可使用上述内容的示例性体系结构、系统等等。[0108]可考虑到以下示例来描述所公开的技术的至少一些实施例:[0109]示例1。一种装置,包括:[0110]解码器电路,用于将一个或多个指令解码成从数据缓存加载数据的微操作,对数据进行操作的微操作,或者从数据缓存加载的第一微操作和对所述数据进行操作的第二微操作;[0111]执行电路,用于执行微操作;以及[0112]预留站电路,包括加载推测跟踪器电路并且耦合在所述解码器电路和所述执行电路之间,所述加载推测跟踪器电路对于微操作的预留站条目,跟踪该微操作的直接或间接父加载微操作的进度(例如,关于在数据缓存执行流水线中的执行状态),以响应于所述直接或间接父加载微操作在所述数据缓存中的数据的错失而(向所述预留站条目中的直接或间接加载依赖微操作)生成取消指示,其中,所述加载推测跟踪器电路响应于所述直接或间接父加载微操作被调遣到数据缓存执行流水线中,利用推测传播矩阵电路,开始跟踪所述直接或间接父加载微操作在所述数据缓存执行流水线中的进度。[0113]示例2。如示例1所述的装置,其中所述数据缓存包括多个流水线级,并且所述加载推测跟踪器电路只在所述多个流水线级的包括确定是否存在数据缓存中的数据的错失的流水线级的真子集中跟踪所述直接或间接父加载微操作的进度。[0114]示例3。如示例1所述的装置,其中所述数据缓存包括多个流水线级,并且所述加载推测跟踪器电路只在所述多个流水线级中的确定是否存在数据缓存中的数据的错失的第二流水线级和紧挨在所述第二流水线级之前的第一流水线级中跟踪所述微操作的进度。[0115]示例4。如示例1所述的装置,其中所述取消指示在被拾取来执行或者尚未被拾取来执行的直接或间接加载依赖微操作唤醒依赖微操作之前将其取消。[0116]示例5。如示例1所述的装置,其中所述预留站电路包括统一推测状态传播和执行矩阵电路,其中包括所述预留站条目,用于将生产者微操作的进度(从直接或间接父加载微操作继承)的状态指示发送到用于(一个或多个)依赖微操作的预留站条目,并且在一个或多个生产者微操作准备就绪、被调度并且被拾取/调遣来在执行流水线中执行时向用于(一个或多个)依赖微操作的预留站条目发送唤醒指示。[0117]示例6。如示例1所述的装置,其中所述预留站电路包括第一拾取器电路,用于将在当前周期中接收其准备好执行指示的微操作发送来执行,以及第二拾取器电路,用于将在先前周期中接收了其准备好执行指示的微操作发送来执行。[0118]示例7。如示例6所述的装置,其中所述预留站电路还包括粘性准备就绪计数器,用于对多个微操作中的每一个的(一个或多个)操作对象变得准备就绪的周期的数目进行计数。预留站条目中的(一个或多个)直接加载依赖微操作利用粘性准备就绪计数器,连同来自执行矩阵电路的唤醒事件,用于生成其父加载微操作的进度的状态指示。[0119]示例8。如示例6所述的装置,还包括第二执行电路,其中所述执行电路包括单周期结果旁路输入,所述第二执行电路不包括单周期结果旁路输入,并且所述第一拾取器电路将微操作发送来在所述执行电路上执行但不在所述第二执行电路上执行,并且所述第二拾取器电路将微操作发送来在所述第二执行电路上执行但不在所述执行电路上执行。[0120]示例9。一种方法,包括:[0121]用处理器的解码器电路将一个或多个指令解码成从所述处理器的数据缓存加载数据的微操作,对数据进行操作的微操作,或者从数据缓存加载的第一微操作和对所述数据进行操作的第二微操作;[0122]为(一个或多个)微操作填充所述处理器的预留站电路的预留站条目;并且[0123]响应于为微操作填充预留站条目,由所述预留站电路的加载推测跟踪器电路跟踪该微操作的直接或间接父加载的进度(例如,关于在数据缓存执行流水线中的执行状态的进度),以响应于所述直接或间接父加载微操作在所述数据缓存中的数据的错失而(向所述预留条目中的直接或间接加载依赖微操作)生成取消指示,其中,所述加载推测跟踪器电路响应于所述直接或间接父加载微操作被调遣到数据缓存执行流水线中,利用推测传播电路,开始跟踪所述直接或间接父加载微操作在所述数据缓存执行流水线中的进度。[0124]示例10。如示例9所述的方法,其中所述数据缓存包括多个流水线级,并且所述方法还包括只在所述多个流水线级的包括确定是否存在数据缓存中的数据的错失的流水线级的真子集中由所述加载推测跟踪器电路跟踪所述直接或间接父加载微操作的进度。[0125]示例11。如示例9所述的方法,其中所述数据缓存包括多个流水线级,并且所述方法还包括只在所述多个流水线级中的确定是否存在数据缓存中的数据的错失的第二流水线级和紧挨在所述第二流水线级之前的第一流水线级中由所述加载推测跟踪器电路跟踪所述微操作的进度。[0126]示例12。如示例9所述的方法,其中所述取消指示在被拾取来执行或者尚未被拾取来执行的直接或间接加载依赖微操作唤醒依赖微操作之前将其取消。[0127]示例13。如示例9所述的方法,其中所述预留站电路包括统一推测状态传播和执行矩阵电路,其中包括所述预留站条目,并且所述方法还包括由所述统一推测状态传播和执行矩阵电路将生产者微操作的进度(从直接或间接父加载微操作继承)的状态指示发送到用于(一个或多个)依赖微操作的预留站条目,并且在一个或多个生产者微操作准备就绪、被调度并且被拾取/调遣来在执行流水线中执行时向用于(一个或多个)依赖微操作的预留站条目发送唤醒指示。[0128]示例14。如示例9所述的方法,还包括:[0129]由所述预留站电路的第一拾取器电路将在当前周期中接收其准备好执行指示的微操作发送来执行;并且[0130]由所述预留站电路的第二拾取器电路将在先前周期中接收了其准备好执行指示的微操作发送来执行。[0131]示例15。如示例14所述的方法,还包括由所述预留站电路的粘性准备就绪计数器对多个微操作中的每一个的(一个或多个)操作对象变得准备就绪的周期的数目进行计数。预留站条目中的(一个或多个)直接加载依赖微操作利用粘性准备就绪计数器,连同来自执行矩阵电路的唤醒事件,用于生成其父加载微操作的进度的状态指示。[0132]示例16。如示例14所述的方法,其中由所述第一拾取器电路发送来执行是向所述处理器的包括单周期结果旁路输入的执行电路发送,并且由所述第二拾取器电路发送来执行是向所述处理器的不包括单周期结果旁路输入的第二执行电路发送。[0133]示例17。一种装置,包括:[0134]存储器;以及[0135]处理器,包括:[0136]与所述存储器耦合的数据缓存,[0137]解码器电路,用于将一个或多个指令解码成从所述数据缓存加载数据的微操作,对数据进行操作的微操作,或者从数据缓存加载的第一微操作和对所述数据进行操作的第二微操作,[0138]执行电路,用于执行微操作,以及[0139]预留站电路,包括加载推测跟踪器电路并且耦合在所述解码器电路和所述执行电路之间,所述加载推测跟踪器电路对于微操作的预留站条目,跟踪该微操作的直接或间接父加载的进度(例如,关于在数据缓存执行流水线中的执行状态的进度),以响应于所述直接或间接父加载微操作在所述数据缓存中的数据的错失而(向所述预留条目中的直接或间接加载依赖微操作)生成取消指示,其中,所述加载推测跟踪器电路响应于所述直接或间接父加载微操作被调遣到数据缓存执行流水线中,利用推测传播电路,开始跟踪所述直接或间接父加载微操作在所述数据缓存执行流水线中的进度。[0140]示例18。如示例17所述的装置,其中所述数据缓存包括多个流水线级,并且所述加载推测跟踪器电路只在所述多个流水线级的包括确定是否存在数据缓存中的数据的错失的流水线级的真子集中跟踪所述直接和间接父微操作的进度。[0141]示例19。如示例17所述的装置,其中所述数据缓存包括多个流水线级,并且所述加载推测跟踪器电路只在所述多个流水线级中的确定是否存在数据缓存中的数据的错失的第二流水线级和紧挨在所述第二流水线级之前的第一流水线级中跟踪所述微操作的进度。[0142]示例20。如示例17所述的装置,其中所述取消指示在被拾取来执行或者尚未被拾取来执行的直接或间接加载依赖微操作唤醒依赖微操作之前将其取消。[0143]示例21。如示例17所述的装置,其中所述预留站电路包括统一推测状态传播和执行矩阵电路,其中包括所述预留站条目,用于将生产者微操作的进度(从直接或间接父加载微操作继承)的状态指示发送到用于(一个或多个)依赖微操作的预留站条目,并且在一个或多个生产者微操作准备就绪、被调度并且被拾取/调遣来在执行流水线中执行时向用于(一个或多个)依赖微操作的预留站条目发送唤醒指示。[0144]示例22。如示例17所述的装置,其中所述预留站电路包括第一拾取器电路,用于将在当前周期中接收其准备好执行指示的微操作发送来执行,以及第二拾取器电路,用于将在先前周期中接收了其准备好执行指示的微操作发送来执行。[0145]示例23。如示例22所述的装置,其中所述预留站电路还包括粘性准备就绪计数器,用于对多个微操作中的每一个的(一个或多个)操作对象变得准备就绪的周期的数目进行计数。例如,其中预留站条目中的(一个或多个)直接加载依赖微操作利用粘性准备就绪计数器,连同来自执行矩阵电路的唤醒事件,用于生成其父加载微操作的进度的状态指示。[0146]示例24。如示例22所述的装置,还包括第二执行电路,其中所述执行电路包括单周期结果旁路输入,所述第二执行电路不包括单周期结果旁路输入,并且所述第一拾取器电路将微操作发送来在所述执行电路上执行但不在所述第二执行电路上执行,并且所述第二拾取器电路将微操作发送来在所述第二执行电路上执行但不在所述执行电路上执行。[0147]示例25。一种装置,包括:[0148]解码器电路,用于将一个或多个指令解码成从数据缓存加载数据的第一微操作,依赖于所述第一微操作的第二微操作,以及依赖于所述第二微操作的第三微操作;[0149]执行电路,用于执行所述第一微操作、所述第二微操作、以及所述第三微操作;以及[0150]预留站电路,包括加载推测跟踪器电路并且耦合在所述解码器电路和所述执行电路之间,所述加载推测跟踪器电路对于所述第三微操作的预留站条目,跟踪所述第一微操作在所述数据缓存中的进度,以响应于所述第一微操作在所述数据缓存中的数据的错失而为所述第三微操作生成取消指示,其中,所述加载推测跟踪器电路响应于所述第一微操作被调遣到所述数据缓存中而开始跟踪所述第一微操作在所述数据缓存中的进度。[0151]在一个实施例中,所述第二微操作是可选的,例如,所述第三微操作直接依赖于所述第一微操作。[0152]示例26。如示例25所述的装置,其中所述数据缓存包括多个流水线级,并且所述加载推测跟踪器电路只在所述多个流水线级的包括确定是否存在数据缓存中的数据的错失的流水线级的真子集中跟踪所述第一微操作的进度。[0153]示例27。如示例25所述的装置,其中所述数据缓存包括多个流水线级,并且所述加载推测跟踪器电路只在所述多个流水线级中的确定是否存在所述数据缓存中的数据的错失的第二流水线级和紧挨在所述第二流水线级之前的第一流水线级中跟踪所述第一微操作的进度。[0154]示例28。如示例25所述的装置,其中所述取消指示在所述第三微操作唤醒依赖微操作之前取消所述第三微操作。[0155]示例29。如示例25所述的装置,其中所述预留站电路包括统一推测状态传播和执行矩阵电路,其中包括所述预留站条目,用于向用于所述第三微操作的预留站条目发送所述第一微操作在所述数据缓存中的进度的状态指示,并且在一微操作的一个或多个生产者微操作被调遣来执行时向用于该微操作的预留站条目发送唤醒指示。[0156]示例30。如示例25所述的装置,其中所述预留站电路包括第一拾取器电路,用于将在当前周期中接收其准备好执行指示的微操作发送来执行,以及第二拾取器电路,用于将在先前周期中接收了其准备好执行指示的微操作发送来执行。[0157]示例31。如示例30所述的装置,其中所述预留站电路还包括计数器,用于对多个微操作中的每一个的一个或多个操作对象准备好执行的周期的数目进行计数。[0158]示例32。如示例30所述的装置,还包括第二执行电路,其中所述执行电路包括单周期结果旁路输入,所述第二执行电路不包括单周期结果旁路输入,并且所述第一拾取器电路将微操作发送来在所述执行电路上执行,并且所述第二拾取器电路将微操作发送来在所述第二执行电路上执行但不在所述执行电路上执行。[0159]示例33。一种方法,包括:[0160]用处理器的解码器电路将一个或多个指令解码成从所述处理器的数据缓存加载数据的第一微操作,依赖于所述第一微操作的第二微操作,以及依赖于所述第二微操作的第三微操作;[0161]为所述第三微操作填充所述处理器的预留站电路的预留站条目;并且[0162]响应于为所述第三微操作填充所述预留站条目,由所述预留站电路的加载推测跟踪器电路跟踪所述第一微操作在所述数据缓存中的进度,以响应于所述第一微操作在所述数据缓存中的数据的错失而为所述第三微操作生成取消指示,其中,所述加载推测跟踪器电路响应于所述第一微操作被调遣到所述数据缓存中而开始跟踪所述第一微操作在所述数据缓存中的进度。[0163]示例34。如示例33所述的方法,其中所述数据缓存包括多个流水线级,并且所述方法还包括只在所述多个流水线级的包括确定是否存在所述数据缓存中的数据的错失的流水线级的真子集中由所述加载推测跟踪器电路跟踪所述第一微操作的进度。[0164]示例35。如示例33所述的方法,其中所述数据缓存包括多个流水线级,并且所述方法还包括只在所述多个流水线级中的确定是否存在所述数据缓存中的数据的错失的第二流水线级和紧挨在所述第二流水线级之前的第一流水线级中由所述加载推测跟踪器电路跟踪所述第一微操作的进度。[0165]示例36。如示例33所述的方法,其中所述取消指示在被拾取来执行的所述第三微操作唤醒依赖微操作之前取消所述第三微操作。[0166]示例37。如示例33所述的方法,其中所述预留站电路包括统一推测状态传播和执行矩阵电路,其中包括所述预留站条目,并且所述方法还包括由所述统一推测状态传播和执行矩阵电路将所述第一微操作在所述数据缓存中的进度的状态指示发送到用于所述第三微操作的预留站条目,并且在一微操作的一个或多个生产者微操作被调遣来执行时向用于该微操作的预留站条目发送唤醒指示。[0167]示例38。如示例33所述的方法,还包括:[0168]由所述预留站电路的第一拾取器电路将在当前周期中接收其准备好执行指示的微操作发送来执行;并且[0169]由所述预留站电路的第二拾取器电路将在先前周期中接收了其准备好执行指示的微操作发送来执行。[0170]示例39。如示例38所述的方法,还包括由所述预留站电路的计数器对多个微操作中的每一个的一个或多个操作对象准备好执行、但尚未被发送来执行、已等待处理的周期的数目进行计数,其中由所述第二拾取器电路发送来执行包括选择具有最高周期数目的微操作。[0171]示例40。如示例38所述的方法,其中由所述第一拾取器电路发送来执行是向所述处理器的包括单周期结果旁路输入的执行电路发送,并且由所述第二拾取器电路发送来执行是向所述处理器的不包括单周期结果旁路输入的第二执行电路发送。[0172]示例41。一种装置,包括:[0173]存储器;以及[0174]处理器,包括:[0175]与所述存储器耦合的数据缓存,[0176]解码器电路,用于将一个或多个指令解码成从所述数据缓存加载数据的第一微操作,依赖于所述第一微操作的第二微操作,以及依赖于所述第二微操作的第三微操作,[0177]执行电路,用于执行所述第一微操作、所述第二微操作、以及所述第三微操作,以及[0178]预留站电路,包括加载推测跟踪器电路并且耦合在所述解码器电路和所述执行电路之间,所述加载推测跟踪器电路对于所述第三微操作的预留站条目,跟踪所述第一微操作在所述数据缓存中的进度,以响应于所述第一微操作在所述数据缓存中的数据的错失而为所述第三微操作生成取消指示,其中,所述加载推测跟踪器电路响应于所述第一微操作被调遣到所述数据缓存中而开始跟踪所述第一微操作在所述数据缓存中的进度。[0179]示例42。如示例41所述的装置,其中所述数据缓存包括多个流水线级,并且所述加载推测跟踪器电路只在所述多个流水线级的包括确定是否存在数据缓存中的数据的错失的流水线级的真子集中跟踪所述第一微操作的进度。[0180]示例43。如示例41所述的装置,其中所述数据缓存包括多个流水线级,并且所述加载推测跟踪器电路只在所述多个流水线级中的确定是否存在所述数据缓存中的数据的错失的第二流水线级和紧挨在所述第二流水线级之前的第一流水线级中跟踪所述第一微操作的进度。[0181]示例44。如示例41所述的装置,其中所述取消指示在被拾取来执行的所述第三微操作唤醒依赖微操作之前取消所述第三微操作。[0182]示例45。如示例41所述的装置,其中所述预留站电路包括统一推测状态传播和执行矩阵电路,其中包括所述预留站条目,用于向用于所述第三微操作的预留站条目发送所述第一微操作在所述数据缓存中的进度的状态指示,并且在一微操作的一个或多个生产者微操作被调遣来执行时向用于该微操作的预留站条目发送唤醒指示。[0183]示例46。如示例41所述的装置,其中所述预留站电路包括第一拾取器电路,用于将在当前周期中接收其准备好执行指示的微操作发送来执行,以及第二拾取器电路,用于将在先前周期中接收了其准备好执行指示的微操作发送来执行。[0184]示例47。如示例46所述的装置,其中所述预留站电路还包括计数器,用于对多个微操作中的每一个的一个或多个操作对象准备好执行的周期的数目进行计数。[0185]示例48。如示例46所述的装置,还包括第二执行电路,其中所述执行电路包括单周期结果旁路输入,所述第二执行电路不包括单周期结果旁路输入,并且所述第一拾取器电路将微操作发送来在所述执行电路上执行,并且所述第二拾取器电路将微操作发送来在所述第二执行电路上执行但不在所述执行电路上执行。示例49。如示例25或示例41所述的装置(或者如示例33所述的方法),其中所述第二微操作经由对于直接依赖于所述第一微操作的微操作的链式依赖性而间接依赖于所述第一微操作。[0186]在另外一个实施例中,一种装置包括存储代码的数据存储设备,所述代码当被硬件处理器执行时使得所述硬件处理器执行本文公开的任何方法。一种装置可如详细描述中所描述。一种方法可如详细描述中所描述。[0187]指令集可包括一个或多个指令格式。给定的指令格式可定义各种字段(例如,比特的数目、比特的位置)来指定要执行的操作(例如,操作码)和要在其上执行该操作的(一个或多个)操作对象和/或其他(一个或多个)数据字段(例如,掩码),等等。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可被定义为具有该指令格式的字段的不同子集(包括的字段通常是按相同顺序的,但至少一些具有不同的比特位置,因为包括的字段更少)和/或被定义为具有以不同方式被解读的给定字段。从而,isa的每个指令利用给定的指令格式被表达(并且如果定义了的话,以该指令格式的指令模板中的给定一个指令模板来被表达)并且包括用于指定操作和操作对象的字段。例如,示例性add指令具有特定的操作码和指令格式,该指令格式包括操作码字段来指定该操作码并且包括操作对象字段来选择操作对象(源1/目的地和源2);并且此add指令在指令流中的出现将在选择特定操作对象的操作对象字段中具有特定内容。被称为高级向量扩展(advancedvectorextension,avx)(avx1和avx2)并且使用向量扩展(vectorextension,vex)编码方案的simd扩展的集合已被发布和/或发表(例如,参见64和ia-32体系结构软件开发者手册,2018年11月;并且参见体系结构指令集扩展编程参考,2018年10月)。[0188]示例性核心体系结构、处理器和计算机体系结构[0189]可按不同的方式、为了不同的目的、在不同的处理器中实现处理器核心。例如,这种核心的实现方式可包括:1)打算用于通用计算的通用有序核心;2)打算用于通用计算的高性能通用无序核心;3)主要打算用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现方式可包括:1)包括打算用于通用计算的一个或多个通用有序核心和/或打算用于通用计算的一个或多个通用无序核心的cpu;以及2)包括主要打算用于图形和/或科学(吞吐量)的一个或多个专用核心的协处理器。这样的不同处理器导致不同的计算机系统体系结构,这些体系结构可包括:1)协处理器在与cpu分开的芯片上;2)协处理器在与cpu相同的封装中、分开的管芯上;3)协处理器与cpu在同一管芯上(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可在同一管芯上包括所描述的cpu(有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)、上述的协处理器以及额外的功能。接下来描述示例性图形处理器。然后是示例性核心体系结构,以及对示例性处理器和计算机体系结构的描述。[0190]示例性核心体系结构[0191]有序和无序核心框图[0192]图9a是根据本公开的实施例图示出示例性有序流水线和示例性寄存器重命名、无序发出/执行流水线两者的框图。图9b是根据本公开的实施例图示出要被包括在处理器中的有序体系结构核心的示例性实施例和示例性寄存器重命名、无序发出/执行体系结构核心两者的框图。图9a-9b中的实线框图示了有序流水线和有序核心,而虚线框的可选添加图示了寄存器重命名、无序发出/执行流水线和核心。考虑到有序方面是无序方面的子集,将描述无序方面。[0193]在图9a中,处理器流水线900包括取得级902、长度解码级904、解码级906、分配级908、重命名级910、调度(也称为调遣或发出)级912、寄存器读取/存储器读取级914、执行级916、写回/存储器写入级918、异常处理级922、以及提交级924。[0194]图9b示出了处理器核心990包括耦合到执行引擎单元950的前端单元930,并且两者都耦合到存储器单元970。核心990可以是精简指令集计算(reducedinstructionsetcomputing,risc)核心、复杂指令集计算(complexinstructionsetcomputing,cisc)核心、超长指令字(verylonginstructionword,vliw)核心、或者混合或替换核心类型。作为另外一个选项,核心990可以是专用核心,例如,网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(generalpurposecomputinggraphicsprocessingunit,gpgpu)核心、图形核心,等等。[0195]前端单元930包括分支预测单元932,其耦合到指令缓存单元934,指令缓存单元934耦合到指令转化后备缓冲器(translationlookasidebuffer,tlb)936,指令tlb936耦合到指令取得单元938,指令取得单元938耦合到解码单元940。解码单元940(或者解码器或解码器单元)可对指令(例如,宏指令)解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或者其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或者其他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。可利用各种不同的机制来实现解码单元940。适当机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(programmablelogicarray,pla)、微代码只读存储器(readonlymemory,rom),等等。在一个实施例中,核心990包括微代码rom或其他介质,其为某些宏指令存储微代码(例如,在解码单元940中或者以其他方式在前端单元930内)。解码单元940耦合到执行引擎单元950中的重命名/分配器单元952。[0196]执行引擎单元950包括重命名/分配器单元952,其耦合到引退单元954和一组一个或多个调度器单元956。(一个或多个)调度器单元956表示任何数目的不同调度器,包括预留站、中央指令窗口,等等。(一个或多个)调度器单元956耦合到(一个或多个)物理寄存器文件单元958。物理寄存器文件单元958中的每一者表示一个或多个物理寄存器文件,这些物理寄存器文件中的不同物理寄存器文件存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针),等等。在一个实施例中,物理寄存器文件单元958包括向量寄存器单元、写入掩码寄存器单元、以及标量寄存器单元。这些寄存器单元可提供体系结构式向量寄存器、向量掩码寄存器、以及通用寄存器。(一个或多个)物理寄存器文件单元958与引退单元954重叠以说明可用来实现寄存器重命名和无序执行的各种方式(例如,利用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器文件;利用(一个或多个)未来文件、(一个或多个)历史缓冲器、和(一个或多个)引退寄存器文件;利用寄存器图谱和寄存器的池;等等)。引退单元954和(一个或多个)物理寄存器文件单元958耦合到(一个或多个)执行集群960。(一个或多个)执行集群960包括一组一个或多个执行单元962和一组一个或多个存储器访问单元964。执行单元962可在各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)上执行各种操作(例如,移位、加法、减法、乘法)。虽然一些实施例可包括专用于特定功能或功能集合的若干个执行单元,但其他实施例可只包括一个执行单元或者全部执行所有功能的多个执行单元。(一个或多个)调度器单元956、(一个或多个)物理寄存器文件单元958和(一个或多个)执行集群960被示为可能是多个,因为某些实施例为某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线、和/或存储器访问流水线,它们各自具有其自己的调度器单元、物理寄存器文件单元和/或执行集群——并且在单独的存储器访问流水线的情况下,实现了某些实施例,其中只有此流水线的执行集群具有(一个或多个)存储器访问单元964)。还应当理解,在使用分开流水线的情况下,这些流水线中的一个或多个可以是无序发出/执行,并且其余的是有序的。[0197]存储器访问单元964的集合耦合到存储器单元970,存储器单元970包括数据tlb单元972,数据tlb单元972耦合到数据缓存单元974,数据缓存单元974耦合到第2级(l2)缓存单元976。在一个示例性实施例中,存储器访问单元964可包括加载单元、存储地址单元、以及存储数据单元,它们中的每一者耦合到存储器单元970中的数据tlb单元972。指令缓存单元934进一步耦合到存储器单元970中的第2级(l2)缓存单元976。l2缓存单元976耦合到一个或多个其他级别的缓存并且最终耦合到主存储器。[0198]作为示例,示例性寄存器重命名、无序发出/执行核心体系结构可按如下实现流水线900:1)指令取得938执行取得和长度解码级902和904;2)解码单元940执行解码级906;3)重命名/分配器单元952执行分配级908和重命名级910;4)(一个或多个)调度器单元956执行调度级912;5)(一个或多个)物理寄存器文件单元958和存储器单元970执行寄存器读取/存储器读取级914;执行集群960执行执行级916;6)存储器单元970和(一个或多个)物理寄存器文件单元958执行写回/存储器写入级918;7)在异常处理级922中可涉及各种单元;并且8)引退单元954和(一个或多个)物理寄存器文件单元958执行提交级924。[0199]核心990可支持一个或多个指令集(例如,x86指令集(带有已随着较新版本添加的一些扩展);加州森尼维尔市的mips技术公司的mips指令集;加州森尼维尔市的arm控股公司的arm指令集(带有可选的额外扩展,例如neon)),包括本文描述的(一个或多个)指令。在一个实施例中,核心990包括逻辑来支持紧缩数据指令集扩展(例如,avx1、avx2),从而允许了被许多多媒体应用使用的操作被利用紧缩数据来执行。[0200]应当理解,核心可支持多线程处理(执行操作或线程的两个或更多个并行集合),并且可按多种方式来支持多线程处理,包括时间切片式多线程处理、同时多线程处理(其中单个物理核心为该物理核心在同时进行多线程处理的每个线程提供逻辑核心),或者这些的组合(例如,时间切片式取得和解码,然后是同时多线程处理,例如像hyper-threading技术中那样)。[0201]虽然是在无序执行的情境中描述寄存器重命名的,但应当理解寄存器重命名可被用在有序体系结构中。虽然处理器的图示实施例还包括分开的指令和数据缓存单元934/974和共享的l2缓存单元976,但替换实施例可针对指令和数据两者具有单个内部缓存,例如,第1级(l1)内部缓存或者多级别的内部缓存。在一些实施例中,系统可包括内部缓存与在核心和/或处理器外部的外部缓存的组合。或者,所有缓存可在核心和/或处理器外部。[0202]具体示例性有序核心体系结构[0203]图10a-10b图示出更具体的示例性有序核心体系结构的框图,该核心将是芯片中的若干个逻辑块(包括相同类型和/或不同类型的其他核心)之一。逻辑块通过高带宽互连网络(例如,环状网络)与某些固定功能逻辑、存储器i/o接口和其他必要i/o逻辑进行通信,这取决于应用。[0204]图10a是根据本公开的实施例的单个处理器核心及其与片上互连网络1002以及与第2级(l2)缓存的其本地子集1004的连接的框图。在一个实施例中,指令解码单元1000支持具有紧缩数据指令集扩展的x86指令集。l1缓存1006允许低时延访问以将存储器缓存到标量和向量单元中。虽然在一个实施例中(为了简化设计),标量单元1008和向量单元1010使用分开的寄存器集合(分别是标量寄存器1012和向量寄存器1014)并且在它们之间传送的数据被写入到存储器,然后被从第1级(l1)缓存1006读回,但本公开的替换实施例可使用不同的方案(例如,使用单个寄存器集合或者包括允许数据在两个寄存器文件之间传送而不被写入和读回的通信路径)。[0205]l2缓存的本地子集1004是全局l2缓存的一部分,全局l2缓存被划分成单独的本地子集,每处理器核心有一个。每个处理器核心具有到其自己的l2缓存本地子集1004的直接访问路径。处理器核心所读取的数据被存储在其l2缓存子集1004中并且可被迅速访问,所述访问与其他处理器核心访问其自己的本地l2缓存子集并行进行。处理器核心所写入的数据被存储在其自己的l2缓存子集1004中并且在必要时被从其他子集冲刷出。环状网络确保了共享数据的一致性。环状网络是双向的,以允许诸如处理器核心、l2缓存和其他逻辑块之类的代理在芯片内与彼此通信。每个环状数据路径在每方向上是1012比特宽的。[0206]图10b是根据本公开的实施例的图10a中的处理器核心的一部分的扩展视图。图10b包括l1缓存1004的l1数据缓存1006a部分,以及关于向量单元1010和向量寄存器1014的更多细节。具体而言,向量单元1010是16宽向量处理单元(vectorprocessingunit,vpu)(参见16宽alu1028),其执行整数、单精度浮点和双精度浮点指令中的一个或多个。vpu支持利用调配单元1020调配寄存器输入,利用数值转换单元1022a-b进行的数值转换,以及利用复制单元1024对存储器输入进行的复制。写入掩码寄存器1026允许断言结果向量写入。[0207]图11是根据本公开的实施例的可具有多于一个核心、可具有集成的存储器控制器并且可具有集成的图形的处理器1100的框图。图11中的实线框图示了具有单个核心1102a、系统代理1110和一组一个或多个总线控制器单元1116的处理器1100,而虚线框的可选添加图示了具有多个核心1102a-n、系统代理单元1110中的一组一个或多个集成存储器控制单元1114和专用逻辑1108的替换处理器1100。[0208]从而,处理器1100的不同实现方式可包括:1)其中专用逻辑1108是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核心)并且核心1102a-n是一个或多个通用核心(例如,通用有序核心、通用无序核心或者两者的组合)的cpu;2)其中核心1102a-n是大量的主要打算用于图形和/或科学(吞吐量)的专用核心的协处理器;以及3)其中核心1102a-n是大量的通用有序核心的协处理器。从而,处理器1100可以是通用处理器、协处理器或专用处理器,例如,网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元)、高吞吐量集成众核(manyintegratedcore,mic)协处理器(包括30个或更多个核心)、嵌入式处理器,等等。处理器可被实现在一个或多个芯片上。处理器1100可以是一个或多个衬底的一部分和/或可利用若干个工艺技术中的任何一者被实现在一个或多个衬底上,这些技术例如是bicmos、cmos或nmos。[0209]存储器层次体系包括核心内的一级或多级缓存、一组或一个或多个共享缓存单元1106、以及耦合到该组集成存储器控制器单元1114的外部存储器(未示出)。该组共享缓存单元1106可包括一个或多个中间级别缓存(例如第2级(l2)、第3级(l3)、第4级(l4)或者其他级别的缓存),最后一级缓存(lastlevelcache,llc),和/或这些的组合。虽然在一个实施例中基于环的互连单元1112互连集成图形逻辑1108、该组共享缓存单元1106和系统代理单元1110/(一个或多个)集成存储器控制器单元1114,但替换实施例也可使用任何数目的公知技术来互连这种单元。在一个实施例中,在一个或多个缓存单元1106和核心1102a-n之间维持一致性。[0210]在一些实施例中,核心1102a-n中的一个或多个能够进行多线程处理。系统代理1110包括协调和操作核心1102a-n的那些组件。系统代理单元1110可包括例如功率控制单元(powercontrolunit,pcu)和显示单元。pcu可以是或者可以包括对核心1102a-n和集成图形逻辑1108的功率状态进行调节所需要的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。[0211]核心1102a-n就体系结构指令集而言可以是同构的或者异构的;也就是说,核心1102a-n中的两个或更多个可能够执行同一指令集,而其他的核心可能够只执行该指令集的子集或者不同的指令集。[0212]示例性计算机体系结构[0213]图12-图15是示例性计算机体系结构的框图。本领域中已知的用于膝上型电脑、桌面型电脑、手持pc、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(digitalsignalprocessor,dsp)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备、和各种其他电子设备的其他系统设计和配置,也是适当的。总之,能够包含本文公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般是适当的。[0214]现在参考图12,其中示出了根据本公开的一个实施例的系统1200的框图。系统1200可包括一个或多个处理器1210、1215,它们耦合到控制器中枢(hub)1220。在一个实施例中,控制器中枢1220包括图形存储器控制器中枢(graphicsmemorycontrollerhub,gmch)1290和输入/输出中枢(input/outputhub,ioh)1250(它们可在分开的芯片上);gmch1290包括与存储器1240和协处理器1245耦合的存储器和图形控制器;ioh1250将输入/输出(i/o)设备1260耦合到gmch1290。或者,存储器和图形控制器中的一者或两者被集成在处理器内(如本文所述),存储器1240和协处理器1245直接耦合到处理器1210,并且控制器中枢1220与ioh1250在单个芯片中。存储器1240可包括例如系统或用户代码1240a,该代码当被执行时使得处理器执行本公开的任何方法。[0215]额外的处理器1215的可选性在图12中用虚线表示。每个处理器1210、1215可包括本文描述的处理核心中的一个或多个并且可以是处理器1100的某个版本。[0216]存储器1240可例如是动态随机访问存储器(dynamicrandomaccessmemory,dram)、相变存储器(phasechangememory,pcm)、或者两者的组合。对于至少一个实施例,控制器中枢1220经由多点分支总线(例如前端总线(frontsidebus,fsb))、点到点接口(例如quickpathinterconnect(qpi))或者类似的连接1295与(一个或多个)处理器1210、1215进行通信。[0217]在一个实施例中,协处理器1245是专用处理器,例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器,等等。在一个实施例中,控制器中枢1220可包括集成的图形加速器。[0218]在物理资源1210、1215之间,就包括体系结构特性、微体系结构特性、热特性、功率消耗特性等等在内的价值度量的范围而言可以有各种差异。[0219]在一个实施例中,处理器1210执行控制一般类型的数据处理操作的指令。嵌入在这些指令内的可以是协处理器指令。处理器1210将这些协处理器指令识别为应当由附接的协处理器1245执行的类型。因此,处理器1210在协处理器总线或其他互连上向协处理器1245发出这些协处理器指令(或者表示协处理器指令的控制信号)。(一个或多个)协处理器1245接受并且执行接收到的协处理器指令。[0220]现在参考图13,其中示出了根据本公开的实施例的第一更具体示例性系统1300的框图。如图13中所示,多处理器系统1300是点到点互连系统,并且包括经由点到点互连1350耦合的第一处理器1370和第二处理器1380。处理器1370和1380中的每一者可以是处理器1100的某个版本。在本公开的一个实施例中,处理器1370和1380分别是处理器1210和1215,而协处理器1338是协处理器1245。在另一实施例中,处理器1370和1380分别是处理器1210和协处理器1245。[0221]处理器1370和1380被示为分别包括集成存储器控制器(integratedmemorycontroller,imc)单元1372和1382。处理器1370还包括点到点(p-p)接口1376和1378作为其总线控制器单元的一部分;类似地,第二处理器1380包括p-p接口1386和1388。处理器1370、1380可利用p-p接口电路1378、1388经由点到点(p-p)接口1350交换信息。如图13中所示,imc1372和1382将处理器耦合到各自的存储器,即存储器1332和存储器1334,存储器1332和存储器1334可以是在本地附接到各个处理器的主存储器的一部分。[0222]处理器1370、1380可各自利用点到点接口电路1376、1394、1386、1398经由个体p-p接口1352、1354与芯片组1390交换信息。芯片组1390可以可选地经由高性能接口1339与协处理器1338交换信息。在一个实施例中,协处理器1338是专用处理器,例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器,等等。[0223]共享缓存(未示出)可被包括在任一处理器中,或者在两个处理器之外,但经由p-p互连与处理器连接,从而使得任一个或两个处理器的本地缓存信息在处理器被置于低功率模式中的情况下可被存储在该共享缓存中。[0224]芯片组1390可经由接口1396耦合到第一总线1316。在一个实施例中,第一总线1316可以是外围组件互连(peripheralcomponentinterconnect,pci)总线,或者诸如快速pci总线或另一种第三代i/o互连总线之类的总线,虽然本公开的范围不限于此。[0225]如图13中所示,各种i/o设备1314可耦合到第一总线1316,以及将第一总线1316耦合到第二总线1320的总线桥1318。在一个实施例中,一个或多个额外的处理器1315,例如协处理器、高吞吐量mic处理器、gpgpu、加速器(例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列或者任何其他处理器,耦合到第一总线1316。在一个实施例中,第二总线1320可以是低引脚数(lowpincount,lpc)总线。各种设备可耦合到第二总线1320,包括例如键盘/鼠标1322、通信设备1327和存储单元1328,例如盘驱动器或者其他大容量存储设备,其中该存储单元1328在一个实施例中可包括指令/代码和数据1330。另外,音频i/o1324可耦合到第二总线1320。注意其他体系结构是可能的。例如,取代图13的点到点体系结构,系统可实现多点分支总线或者其他这种体系结构。[0226]现在参考图14,其中示出了根据本公开的实施例的第二更具体示例性系统1400的框图。图13和图14中的相似元素带有相似的标号,并且图13的某些方面被从图14中省略以避免模糊图14的其他方面。[0227]图14图示出处理器1370、1380可分别包括集成存储器和i/o控制逻辑(“cl”)1372和1382。从而,cl1372、1382包括集成存储器控制器单元并且包括i/o控制逻辑。图14图示出不仅存储器1332、1334耦合到cl1372、1382,而且i/o设备1414也耦合到控制逻辑1372、1382。传统i/o设备1415耦合到芯片组1390。[0228]现在参考图15,其中示出了根据本公开的实施例的soc1500的框图。图11中的相似元素带有相似的标号。另外,虚线框是更先进soc上的可选特征。在图15中,(一个或多个)互连单元1502耦合到:应用处理器1510,其包括一组一个或多个核心1102a-n和(一个或多个)共享缓存单元1106;系统代理单元1110;(一个或多个)总线控制器单元1116;(一个或多个)集成存储器控制器单元1114;一组或一个或多个协处理器1520,其可包括集成图形逻辑、图像处理器、音频处理器、以及视频处理器;静态随机访问存储器(staticrandomaccessmemory,sram)单元1530;直接存储器访问(directmemoryaccess,dma)单元1532;以及显示单元1540,用于耦合到一个或多个外部显示器。在一个实施例中,(一个或多个)协处理器1520包括专用处理器,例如网络或通信处理器、压缩引擎、gpgpu、高吞吐量mic处理器、嵌入式处理器,等等。[0229]本文公开的(例如,机制的)实施例可以用硬件、软件、固件或者这种实现方案的组合来实现。本公开的实施例可被实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备的可编程系统上执行的计算机程序或程序代码。[0230]程序代码,例如图13中所示的代码1330,可被应用到输入指令以执行本文描述的功能并且生成输出信息。输出信息可按已知的方式被应用到一个或多个输出设备。对于本技术而言,处理系统包括任何具有处理器的系统,例如;数字信号处理器(digitalsignalprocessor,dsp)、微控制器、专用集成电路(applicationspecificintegratedcircuit,asic)、或者微处理器。[0231]可以用高级别过程式或面向对象的编程语言来实现程序代码以与处理系统进行通信。如果希望,也可以用汇编或机器语言来实现程序代码。实际上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况下,该语言可以是经编译或者解译的语言。[0232]至少一个实施例的一个或多个方面可由被存储在机器可读介质上的表示处理器内的各种逻辑的代表性指令来实现,这些代表性指令当被机器读取时使得该机器制作逻辑来执行本文描述的技术。这种被称为“ip核心”的表现形式可被存储在有形机器可读介质上并且被提供到各种客户或制造设施以加载到实际制作该逻辑或处理器的制作机器中。[0233]这种机器可读存储介质可包括但不限于由机器或设备制造或形成的物品的非暂态有形布置,包括诸如以下各项之类的存储介质:硬盘,任何其他类型的盘(包括软盘、光盘、致密盘只读存储器(compactdiskread-onlymemory,cd-rom)、可改写致密盘(compactdiskrewritable,cd-rw)、和磁光盘),半导体设备(例如,只读存储器(read-onlymemory,rom),诸如动态随机访问存储器(dynamicrandomaccessmemory,dram)、静态随机访问存储器(staticrandomaccessmemory,sram)之类的随机访问存储器(randomaccessmemory,ram),可擦除可编程只读存储器(erasableprogrammableread-onlymemory,eprom),闪速存储器,电可擦除可编程只读存储器(electricallyerasableprogrammableread-onlymemory,eeprom),相变存储器(phasechangememory,pcm)),磁卡或光卡,或者适合用于存储电子指令的任何其他类型的介质。[0234]因此,本公开的实施例还包括非暂态有形机器可读介质,其包含指令或者包含定义本文描述的结构、电路、装置、处理器和/或系统特征的设计数据,例如硬件描述语言(hardwaredescriptionlanguage,hdl)。这种实施例也可被称为程序产品。[0235]仿真(包括二进制转化、代码变形等等)[0236]在一些情况下,指令转换器可被用于将指令从源指令集转换到目标指令集。例如,指令转换器可将指令转化(例如,利用静态二进制转化、包括动态编译的动态二进制转化)、变形、仿真或者以其他方式转换到要被核心处理的一个或多个其他指令。可以用软件、硬件、固件或者其组合来实现指令转换器。指令转换器可以在处理器上、在处理器外、或者一部分在处理器上一部分在处理器外。[0237]图16是根据本公开的实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。在图示的实施例中,指令转换器是软件指令转换器,虽然可替换地,可以用软件、固件、硬件或者其各种组合来实现指令转换器。图16示出了可以利用x86编译器1604来编译高级别语言1602的程序以生成x86二进制代码1606,x86二进制代码1606可由具有至少一个x86指令集核心1616的处理器原生执行。具有至少一个x86指令集核心1616的处理器表示任何这样的处理器:这种处理器可通过兼容地执行或以其他方式处理(1)x86指令集核心的指令集的实质部分或者(2)针对在具有至少一个x86指令集核心的处理器上运行的应用或其他软件的目标代码版本,来执行与具有至少一个x86指令集核心的处理器基本上相同的功能,以便实现与具有至少一个x86指令集核心的处理器基本上相同的结果。x86编译器1604表示可操作来生成x86二进制代码1606(例如,目标代码)的编译器,x86二进制代码1606在带有或不带有额外的链接处理的情况下可在具有至少一个x86指令集核心的处理器1616上被执行。类似地,图16示出了高级别语言1602的程序可被利用替换指令集编译器1608来编译以生成替换指令集二进制代码1610,替换指令集二进制代码1610可由没有至少一个x86指令集核心的处理器1614(例如,具有执行加州森尼维耳市的mips技术公司的mips指令集和/或执行加州森尼维耳市的arm控股公司的arm指令集的核心的处理器)原生执行。指令转换器1612用于将x86二进制代码1606转换成可由没有x86指令集核心的处理器1614原生执行的代码。这个转换后的代码不太可能与替换指令集二进制代码1610相同,因为能够做到这一点的指令转换器是难以制作的;然而,转换后的代码将实现一般操作并且由来自替换指令集的指令构成。从而,指令转换器1612表示通过仿真、模拟或任何其他过程允许不具有x86指令集处理器或核心的处理器或其他电子设备执行x86二进制代码1606的软件、固件、硬件或者其组合。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献