CN115858022A - 集群化解码管线的可缩放切换点控制电路系统 - Google Patents

集群化解码管线的可缩放切换点控制电路系统 Download PDF

Info

Publication number
CN115858022A
CN115858022A CN202211165487.XA CN202211165487A CN115858022A CN 115858022 A CN115858022 A CN 115858022A CN 202211165487 A CN202211165487 A CN 202211165487A CN 115858022 A CN115858022 A CN 115858022A
Authority
CN
China
Prior art keywords
decoding
instruction
cluster
switch
location
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202211165487.XA
Other languages
English (en)
Inventor
S·拉玛克里什南
J·库姆斯
M·J·利希特
S·斯里纳斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN115858022A publication Critical patent/CN115858022A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0754Error or fault detection not based on redundancy by exceeding limits
    • G06F11/0757Error or fault detection not based on redundancy by exceeding limits by exceeding a time limit, i.e. time-out, e.g. watchdogs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3812Instruction prefetching with instruction modification, e.g. store into instruction stream
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

描述了关于用于实现集群化解码管线的切换点插入的电路系统的系统、方法和装置。在一个示例中,硬件处理器核心包括包含多个解码器电路的第一解码集群、包含多个解码器电路的第二解码集群和用于在发送针对第一解码集群的解码而请求的指令与发送针对第二解码集群的解码而请求的指令之间进行切换的切换点控制电路,其中切换点控制电路用于:确定指令流中的位置作为候选切换点,以在第一解码集群与第二解码集群之间切换请求解码的指令的发送,跟踪该位置存在指令流的多个先前解码的特性的次数,以及导致基于次数在该位置插入切换点,以在发送针对第一解码集群的解码而请求的指令与发送针对第二解码集群的解码而请求的指令之间进行切换。

Description

集群化解码管线的可缩放切换点控制电路系统
技术领域
本公开一般涉及电子学,并且更具体地,本公开的示例涉及用于实现集群化解码管线的切换点插入的电路系统。
背景技术
处理器或处理器集合执行来自指令集(例如,指令集体系结构(instruction setarchitecture,ISA))的指令。指令集是计算机体系结构的关于编程的部分,并且一般包括原生数据类型、指令、寄存器体系结构、寻址模式、存储器体系结构、中断和异常处置以及外部输入和输出(input/output,I/O)。应当注意,术语指令在本文中可指宏指令或指微指令,宏指令例如,提供给处理器以供执行的指令,微指令例如,由处理器的解码器对宏指令进行解码得到的指令。
附图说明
在所附附图中以示例方式而非限制方式图示本公开,在附图中,类似的附图标记指示类似的要素,其中:
图1图示根据本公开的示例的具有多个解码集群和切换点控制电路的处理器核心。
图2图示根据本公开的示例的示例集群化解码程序流。
图3图示出根据本公开的示例的切换点跟踪数据结构的示例格式。
图4图示出根据本公开的示例的动态负荷平衡的流程图。
图5图示出根据本公开的示例的无效保持有限状态机的流程图。
图6是图示出根据本公开的示例的插入切换点以用于在多个解码集群之间切换指令流的解码的操作的流程图。
图7A是图示出根据本公开的示例的示例性有序管线和示例性的寄存器重命名的乱序发出/执行管线两者的框图。
图7B是图示出根据本公开的示例的要包括在处理器中的有序体系结构核心的示例性示例和示例性的寄存器重命名的乱序发出/执行体系结构核心两者的框图。
图8A是根据本公开的示例的单个处理器核心以及其到管芯上互连网络的连接以及它的第2级(L2)缓存的本地子集的框图。
图8B是根据本公开的示例的图8A中的处理器核心的部分的展开图。
图9是根据本公开的示例的可具有多于一个的核心、可具有集成存储器控制器、并且可具有集成图形器件的处理器的框图。
图10是根据本公开的一个示例的系统的框图。
图11是根据本公开的示例的更具体的示例性系统的框图。
图12所示的是根据本公开的示例的第二更具体的示例性系统的框图。
图13所示的是根据本公开的示例的片上系统(system on a chip,SoC)的框图。
图14是根据本公开的示例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
在下列描述中,阐述了众多特定细节。然而,应当理解,可在没有这些特定细节的情况下实施本公开的示例。在其他实例中,未详细示出公知的电路、结构和技术,以免使对本描述的理解模糊。
说明书中对“一个示例”、“示例”、等的引用指示所描述的示例可包括特定的特征、结构或特性,但是并非每个示例都一定包括该特定的特征、结构或特性。而且,此类短语不一定是指同一示例。此外,当结合示例描述特定的特征、结构或特性时,认为结合无论是否被明确描述的其他示例而影响此类特征、结构或特性是在本领域技术人员的知识范围之内的。
(例如,具有一个或多个核心的)(例如,硬件)处理器可执行(例如,用户级)指令(例如,指令线程)以对数据进行操作,从而例如执行算术、逻辑或其他功能。例如,软件可以包括提供给处理器(例如,其一个或多个核心)的多个指令(例如,宏指令),该处理器随后执行(例如,解码和执行)多个指令以执行相应的操作。在某些示例中,处理器包括电路系统(例如,一个或多个解码器电路),以将指令转译(例如,解码)成一个或多个微操作(μop或微操作),例如,其中这些微操作直接由硬件(例如,由执行电路)执行。与指令(例如,宏指令)对应的一个或多个微操作可以称为用于该指令的微代码流。微操作可以称为微指令,例如,由处理器对宏指令进行解码得到的微指令。在一个示例中,指令是指令集体系结构(ISA)的64比特和/或32比特指令。在一个示例中,指令是
Figure BDA0003861827930000031
指令集体系结构(ISA)的(例如,64比特和/或32比特)指令。在某些示例中,将指令转译成一个或多个微操作与处理器的管线的指令取得和/或解码部分相关联。
某些处理器(例如,某些核心)实现多个解码集群(例如,其中每个集群具有其自身的多个解码器电路),例如作为高效地增加解码带宽的方式。在某些示例中,解码器电路用于将(例如,宏)指令解码为一个或多个微操作的集合,这些一个或多个微操作要(例如,作为基元)由(一个或多个)执行电路执行。
然而,在某些示例中(例如,在前端电路系统中,例如,前端取得单元),正在解码的多个指令已与多个解码集群并行。当某些处理器(例如,某些核心)实现多个(例如,程序乱序)解码集群时出现的问题是,如何确定(例如,分配)何时将指派待解码的指令从第一解码集群切换到第二(或第三等)解码集群。在某些示例中,将工作分配给多个解码集群需要电路系统(例如,逻辑电路系统)将(例如,由分支预测器)为解码(例如,和取得)生成的一系列指令(例如,指令指针)转译为解码的开始和结束区域(例如,取得和解码)。在某些示例中,分支指令(例如,由分支预测器对采取的分支的预测)用于触发指令流的切换,从将流中的(一个或多个)之前指令发送到第一解码集群切换到将流中的(一个或多个)之后指令发送到第二解码集群,例如,以为每个解码集群提供一个机会并行完成其各自的解码任务。在某些示例中,分支(例如,分支指令)的最后一个字节结束当前区域(例如,由第一解码集群解码的块),并且采取的分支的目标开始下一个区域(例如,被指派由第二解码集群解码的块)。
不幸的是,分支(例如,所采取的分支)并非在所有代码序列中均匀分布。对于专注于计算的长代码序列来说这尤其是一个问题,因为控制流指令很少。某些指令流中的浮点序列(例如,标准性能评估公司(Standard Performance Evaluation Corporation,SPEC)浮点(floating-point,FP)基准代码)可以在没有单个采取的分支的情况下使用数百个指令。此类没有切换形式的长序列有效地缩小了集群化的前端。为了解决这个问题,本文的某些示例通过在某些(例如,连续长)代码区域中插入切换点来利用动态负荷平衡。
在某些示例中,处理器(例如,核心)依赖代码中现有的采取的分支在前端(例如,解码)集群之间切换,并且因此在(例如,顺序长)代码序列中插入附加(一个或多个)切换的最便捷方法是将长序列中选择的非分支指令视为采取的指令(例如,仅在前端以这种方式处理)。这些切换点可以称为“假分支”。因此,某些示例使用核心的分支预测器(例如,分支目标缓冲器(branch target buffer,BTB))的数据结构来实现(例如,存储)这些假分支的指示,以允许切换,从而改善解码集群的负荷平衡。
本文的示例提供了集群化前端中的动态负荷平衡,例如,经由本文公开的切换点(例如,假分支)控制(例如,插入)电路系统和方法。本文的示例通过过滤切换点插入和/或删除提供了优化的动态负荷平衡。在某些示例中,本文公开的动态负荷平衡通过使用有限状态机(finite state machine,FSM)以及之前看到的候选切换点的数据结构(例如,表)来处置最佳切换点(例如,假分支)的插入。本文的示例提供了一种无效方案,用于(例如,由于代码路径更改)解除分配非最佳位置(例如,在代码指令流中)插入的切换点。因此,本文的示例增加了集群化解码器之间的解码并行性,最大限度地减少分支预测器中的污染,和/或优化取得等待时间,例如,同时处理动态代码的复杂性质(例如,动态更改的代码)。
本文的示例提供了集群化解码微体系结构,其中解码集群被指派待解码的顺序(例如,“原始”)指令字节的块。在某些示例中,顺序流中的中断(例如,采取的分支)用于在解码集群之间切换指令流。然而,切换点的缺乏(例如,由于顺序指令的序列很长)限制了某些示例中的并行性。本文的示例公开解决这个问题的切换点插入硬件和方法,例如,通过拆分长指令流。
在某些示例中,切换点控制电路(例如,过滤控制逻辑)(例如,以及相对应的数据结构(例如,表))对于部署动态负荷平衡至关重要,例如,以及因此对集群化前端的性能至关重要。本文的某些示例指向可缩放切换插入过滤器的电路系统和方法。以下讨论了示例电路(例如,逻辑电路)和数据结构(例如,表),该结构控制如何添加以及如何删除具有多个解码集群的处理器(例如,核心)的切换点(例如,假分支)。本文的某些示例不需要程序员插入真采取的跳转(例如,只需跳转到下一个顺序指令(例如,在非常长序列中))或另一个触发切换的指示,例如,这些示例却包括通过插入切换点(例如,不是真采取的分支的切换点)(例如,通过插入是“假分支”的切换点)触发切换的硬件。本文的示例利用硬件(例如,本文公开的切换点控制电路)而不是要求人类(例如,程序员)插入切换点,例如,不利用人类思维和/或钢笔和纸张,例如,不利用人类思维和/或笔和纸张来(i)确定指令流中的位置作为候选切换点,以在第一解码集群与第二解码集群之间切换被请求解码的指令的发送,(ii)跟踪该位置存在指令流的多个先前解码的特性的次数,或(iii)基于次数在该位置插入切换点,以在发送针对第一解码集群的解码而请求的指令与发送针对第二解码集群的解码而请求的指令之间进行切换。应该理解,在某些示例中,有两个以上的解码集群,并且因此从“第一”集群切换到“第二”集群可能是从任一个解码集群切换到其他解码集群中的任一个(例如,下一个逻辑上连续的解码集群)。
图1图示根据本公开的实施例的具有多个解码集群108A-108B和切换点控制电路120的处理器核心100。处理器核心100可以是例如系统的处理器的多个核心中的一个核心。所描绘的处理器核心100包括分支预测器102(例如,用于预测要由处理器核心100执行的代码(例如,指令)的一个或多个分支)。
在某些示例中,分支操作(例如,指令)是无条件的(例如,每当指令被执行时分支被采取)或有条件的(例如,对于分支所采取的方向取决于条件),例如,其中接着条件分支(例如,条件跳转)的要执行的指令不是确定性地知晓的,直到分支所依赖的条件被解析。在此,与等待直到条件被解析不同,处理器的分支预测器102(例如,分支预测器电路)可以执行(例如,推测性地执行)分支预测以预测分支将被采取还是不被采取,和/或(例如,如果预测为被采取,则)预测分支的目标指令(例如,目标地址)。在某些示例中,如果分支被预测为被采取,则处理器核心100取得分支的所采取方向(例如,路径)的(一个或多个)指令(例如,在所预测的分支目标地址处找到的指令)并且推测性地执行该指令。在其中处理器还未确定预测是否正确的某些示例中,接着分支预测而执行的指令是推测性的。在某些示例中,处理器核心100在管线电路系统的后端处(例如,在(一个或多个)执行电路136和/或引退(写回)电路134中)解析分支指令。在某些示例中,如果分支指令被确定为不被处理器(例如,被后端)采取,则当前在管线电路系统中、在所采取的分支指令之后的所有指令(以及例如它们的数据)被转储清除(例如,丢弃)。在某些示例中,分支预测器102(例如,分支预测器电路)从分支的过往行为中学习以预测接下来的(例如,传入的)分支。在某些示例中,分支预测器102将(例如,按照原始程序顺序连续的)指令的合适子集预测为代码块(例如,以分支指令结束)。作为一个示例,处理器核心100可以接收要执行的代码,并且作为响应,可将代码划分为块。
在某些示例中,分支预测器102包括分支目标缓冲器(BTB)112,例如,用于存储有关(例如,真和假)预测分支(例如,预测采取的分支)的信息。在某些示例中,分支预测器104预测针对分支指令的目标指令(例如,可能被采取的分支指令(例如,被预先选择的分支指令))。在某些示例中,此后用针对分支指令的目标指令来更新分支预测器102(例如,其BTB112)。在某些示例中,软件管理硬件BTB,例如,其中软件指定预测模式,或者其中由对BTB写入的指令的模式隐式地定义的预测模式也对条目中的模式位进行置位。在某些示例中,(例如,分支预测器102的BTB 112中的)用于分支预测器125的每个条目包括标签字段和目标字段。在某些示例中,BTB中的每个条目的标签字段存储标识分支指令的指令指针(例如,存储器地址)的至少部分。在某些示例中,BTB中的每个条目的标签字段存储标识代码中的分支指令的指令指针(例如,存储器地址)。在某些示例中,目标字段存储针对在同一条目的标签字段中标识的分支指令的目标的指令指针的至少部分。在某些示例中,(例如,分支预测器102的BTB 112中的)用于分支预测器125的条目包括一个或多个其他字段。在某些示例中,条目不包括(或包括)用于辅助关于分支指令是否被采用的预测的单独字段,例如,如果分支指令存在(例如,存在于BTB中),则认为要采取该分支指令。
在某些示例中,实现了不同类型的硬件电路系统(例如,逻辑电路系统),以供在乱序集群化解码中负荷平衡。例如,在一些示例中,集群平衡电路系统实现回压启发式,该回压启发式依赖于整个处理器核心执行管线中的足够排队才能正确工作。在其他示例中,集群平衡电路系统采用或利用分支预测器硬件来驱动将未解码指令指派给特定的(一个或多个)解码集群。这些指派可以一种方式完成,这种方式可以试图平衡解码集群的工作负荷和/或保持所有解码集群以完整或近乎完整的输入队列(例如,指令队列110A-110B)操作。在某些示例中,集群平衡电路系统(例如,切换点控制电路120)利用额外数据(例如,元数据)为预测的采取的分支增强分支目标缓冲器(BTB)112条目,以迫使或增加解码并行性。在某些示例中,集群平衡电路系统(例如,切换点控制电路120)插入代表“假预测采取分支”的条目,例如,并可利用元数据增强这些条目,以迫使或增加解码并行性。
在某些示例中,分支目标缓冲器112包括包含可用于在解码集群之间触发负荷平衡操作的信息的条目。在某些示例中,分支目标缓冲器112被配置成用于存储有关真预测分支和假预测分支的信息。在某些示例中,分支目标缓冲器112包含多个条目。在某些示例中,分支目标缓冲器112中的条目包括以下各项中的一个或任意组合:(i)每个条目的字段,用于存储代表分支指令地址(例如,用于访问条目)的数据,(ii)每个条目的字段,用于存储代表分支指令的预测目标地址的数据,该分支指令的地址由条目的第一字段中的数据表示,例如,对于与假预测分支相对应的条目,数据按程序顺序表示下一个指令的地址,而不是预测分支地址,(iii)每个条目的字段,用于存储代表负荷平衡权重值的数据(例如,该字段中的值可指示从执行管线的下游组件接收的数据的相对值,该相对值指示与一个或多个阈值相比每个解码集群或每个块递送到处理器核心后端或其执行电路的微操作(uop)的数量、每个集群或块的解码等待时间、和/或每个块的执行等待时间;在某些示例中,该字段中的“高”值表示获得的数据超过采取特定负荷平衡操作的阈值(诸如迫使集群切换或抑制集群切换),该字段中的“低”值表示获得的值小于阈值,低于该阈值可以采取不同的负荷平衡操作,和/或该字段中的“中”值表示负荷平衡操作不应基于从执行管线的下游组件获得的数据来采取,和/或(iv)每个条目中的字段,用于存储代表与相对应预测采取分支相关联的一个或多个其他标签的数据,例如,数据指示相对应条目代表真预测采取分支(例如“真”)还是假预测采取分支(例如“假”)。
在某些示例中,分支目标缓冲器(诸如分支目标缓冲器112)中的条目利用任何类型的信息进行注释,这些信息可用于确定是否以及何时切换集群,抑制以其他方式完成的集群切换,和/或决定是否以及何时切换集群或抑制以其他方式完成的集群切换。在某些示例中,不同数量的字段可被填充在目标缓冲器112中的不同条目内。例如,一些字段可能不适用于某些分支指令编码。在某些示例中,分支目标缓冲器(诸如分支目标缓冲器112)的每个条目中包含的信息类型,包括代表uop计数、等待时间值、指令缓存未命中、指令TLB未命中和/或任何其他可能表明多个解码集群之间工作负荷不平衡的信息的数字数据。在某些示例中,一个或多个字段中的数据可代表由集群平衡器、取得电路(例如,取得电路104的指令指针(instruction pointer,IP)生成器)或基于启发式的分支预测器计算的权重值,该启发式是从执行管线的下游组件、分支预测器、引退管线(例如,引退单元)、指令缓存、指令TLB或其他地方获得的两个或更多个信息片的函数。然后,这些权重值可以与一个或多个阈值权重值进行比较,以确定是否以及何时采取特定的负荷平衡操作。在某些示例中,当指令未命中发生时(例如,对于指令转译后备缓冲器(TLB)的查找),取得电路104迫使集群切换,以便将同一页中的指令指针值引导为全部由同一解码集群解码。
在某些示例中,分支目标缓冲器(诸如分支目标缓冲器112)的每个条目中包含的一个字段中的数据明确表示,当遇到相对应的分支指令时,集群切换应被执行。在特定条件下,值可被写入该字段(例如,通过取得电路104或切换点控制电路120),以迫使集群切换。在另一个示例中,分支目标缓冲器(诸如分支目标缓冲器112)的每个条目中包含的一个字段中的数据明确表明,在遇到相对应分支指令时本来会被执行的集群切换应该被抑制。在特定条件下,值可被写入该字段(例如,通过取得电路104或切换点控制电路120),以迫使集群切换的抑制。
在某些示例中,当需要从发送指令供第一集群解码到替代地发送指令供第二集群解码的切换时(例如,当并且如果块内递送的微操作(uop)数量超过阈值,例如,阈值小于32和/或可编程),则“假”分支在BTB中插入。该假分支可以在BTB中被赋予假分支独有的分支类型编码,以免触发假冒分支行为。在这里,术语“假冒分支”可以指非分支上的预测采取分支,这通常是由于BTB 112中的别名问题而发生的。在某些示例中,当检测到假冒分支时,BTB中的预测无效。相比之下,在某些示例中,“假分支”指示在解码管线中向下传递,就像对于预测采取分支更新一样,BTB 112中的假分支条目利用最终的微操作(uop)计数来注释(例如,如果最终微操作(uop)计数超过阈值则为值0x0),并可包括下一个顺序指令指针作为目标地址。与正常(“真”)预测采取分支的条目不同,假分支的分配点可能在指令执行之前(例如,在一些示例中,在分支地址计算点处)。在某些示例中,在第二集群平衡方法的变体中,假分支插入限于在指令缓存106中命中的块。在此类示例中,另一个状态片可以在从预测时间到解码管线的结束的块中被携载。在另一种变体中,该集群平衡方法可以通过简单地跟踪最近有指令缓存未命中来近似。
在一些示例中,通过在平衡包括长基本块(例如,和微代码流)的工作负荷时采用假分支,并通过在BTB 112中采用添加的字段来指示切换点,处理器核心100(例如,完全)依靠BTB 112来提供以近乎最佳平衡来执行集群负荷平衡所需的信息。
附加地或替代地,某些示例提供了集群化前端中的动态负荷平衡,例如,经由本文公开的切换点(例如,假分支)控制(例如,插入)电路系统和方法。本文的某些示例通过过滤切换点插入和/或删除(例如,附加地或替代地基于块内递送的微操作(uop)的数量超过阈值来控制解码集群之间的切换)提供了优化的动态负荷平衡。在某些示例中,本文公开的动态负荷平衡算法通过使用有限状态机(FSM)和之前看到的候选切换点的数据结构(例如,表)来处置最佳切换点(例如,假分支)的插入(例如,附加地或替代地基于块内递送的微操作(uop)的数量超过阈值来控制解码集群之间的切换)。
图2图示根据本公开的示例的示例集群化解码程序流200。例如,其中集群0是图1中的解码集群108A,并且集群1是图1中的解码集群108B。程序流200图示(例如,程序)代码(例如,指令),该代码被划分为代码块A-F(例如,其中A是按程序顺序的“最老”代码块,并且F是按程序顺序的“最年轻”代码块),并且每个代码块被指派给解码集群0或解码集群1以供解码。
再次参考图1,处理器核心100(例如,经由取得电路104和/或分支预测器102)可以将指令块(例如,图2中的块A-F)发送至解码集群,例如,其中第一指令块A被发送至解码集群0 108A,(按程序顺序接下来的(例如,更年轻的))第二指令块B被发送至解码集群N108B,等等。在两个集群的示例中,第三(按程序顺序接下来的(例如,更年轻的))指令块C可以被发送至接下来可用的解码集群(例如,在该解码集群已经完成对其当前指令块的解码后)。在两个集群的示例中,第三(按程序顺序接下来的(例如,更年轻的))指令块C可以被发送至接下来的解码集群(例如,在该示例中发送至解码集群108A)。尽管示出两个解码集群108A-108B,但是应当理解,可以利用三个或更多个集群(例如,其中“N”是大于一的正整数)。本文的示例允许切换点控制电路120确定切换点并将切换点(例如,假分支插入BTB112)插入待解码指令流中,例如,不需要人类(例如,程序员)将切换点插入指令流。例如,其中在代码块A的结束处的切换指示下一个代码块B开始。
在某些示例中,每个解码集群包括能够相对于彼此乱序地对不同的基本代码块解码的两个或更多个(例如,超标量x86)指令解码器,例如,其中解码集群108A包括第一解码器电路114A(例如,解码器)和第二解码器电路116A(例如,解码器),并且解码集群108B包括第一解码器电路114B(例如,解码器)和第二解码器电路116B(例如,解码器)。在某些示例中,解码集群中的一个或多个各自具有三个(或更多个)解码器电路,例如,三个解码集群各自具有三个解码器电路,用于九宽解码总数。
在某些示例中,处理器核心100的分支预测器102将代码划分为(例如,来自程序的连续指令的集合的)各个块,例如,基于一个或多个切换点。在某些示例中,处理器核心100的取得电路104将代码划分为(例如,来自程序的连续指令的集合的)各个块,例如,根据本公开基于一个或多个切换点。然后,各个代码块可被发送到它们各自的解码集群以供解码。
可选地,处理器核心100包括(例如,第一级)指令缓存106,以例如对一个或多个指令进行缓存而不必从存储器加载它们。在某些示例中,取得电路104经由指令缓存106将代码块发送至它们各自的解码集群。指令缓存106可以包括指令缓存标签和/或指令转译后备缓冲器(TLB)。
在某些示例中,一旦代码块被发送至它们对应的解码集群108A-108B,每个解码集群就开始并行地对代码块解码(例如,经由其中的并行解码器电路)。在某些示例中,解码器和/或解码集群彼此独立地操作,因此代码块可以被乱序地解码(例如,不按程序顺序)。在某些示例中,分配电路134负责按合适的程序顺序将操作(例如,微操作)分配给执行电路136(例如,执行单元)。
处理器核心描绘具有第一集合112A中的多个解码器电路114A-116A的第一解码集群108A和具有第二集合112B中的多个解码器电路114B-116B的第二解码集群108B。在某些示例中,(例如,每个)解码器电路(114A、116A、114B、116B)用于将(例如,宏)指令解码为一个或多个微操作的集合,这一个或多个微操作要(例如,作为基元)由(一个或多个)执行电路136执行。在某些示例中,解码器电路(114A、116A、114B、116B)用于在不利用微代码定序器142(例如,与任何解码集群和/或解码器电路分开的微代码定序器)的情况下将某些(例如,宏)指令解码为对应的一个或多个微操作的集合,并且/或者通过利用微代码定序器142(例如,与任何解码集群和/或解码器电路分开的微代码定序器)将其他(例如,宏)指令(例如,复杂指令集计算机(complex instruction set computer,CISC)指令)解码为对应的一个或多个微操作的集合。在一个示例中,解码器电路(114A、116A、114B、116B)用于在每个周期输出某个数量的微操作(例如,每个周期一个微操作和/或每个周期一个与四个之间数量的微操作)。在某些实施例中,“微代码”指令一般指代按照以下情况的指令:解码集群(例如,解码器的集合)请求微代码定序器142将一个或多个(例如,多个)微操作(μop)的对应集合从微代码定序器存储器142(例如,只读存储器(read-only memory,ROM))加载到解码管线中(例如,加载到对应的指令解码队列中),例如,而不是直接由解码器电路产生该指令的一个或多个微操作的集合。例如,为了实现一些(例如,复杂的)(例如,x86)指令,微代码定序器142用于将指令划分为较小(例如,微)操作(也称为微操作或μop)的序列。
在某些示例中(例如,对于请求解码/执行的代码),硬件电路系统(例如,取得电路104或指令缓存106逻辑电路系统)用于将待解码指令发送到解码集群(例如,其队列)108A-108B。在某些示例中,处理器核心100中的硬件电路系统(例如,取得电路104)开始按程序顺序在指令块中生成未解码指令流(例如,表示未解码指令的指令指针值),并将其引导到处理器中多个解码集群108A-108B中的给定一个解码集群,例如,直到达到切换点以切换到多个解码集群108A-108B中的一个不同的解码集群。
在某些示例中,切换点控制电路120添加和/或删除切换点(例如,通过导致将指令插入指令流,例如,插入指令,导致在指令缓存106中切换)。在某些示例中,切换点控制电路120插入切换点(例如,标记为“假分支”的指令),使得当(例如,按程序顺序)在指令流中遇到该点(例如,假分支)时,由多个解码集群108A-108B中的一个解码集群对紧接切换点之前(例如,或在切换点处)的(一个或多个)指令的指令流的解码转译为多个解码集群108A-108B中的一个不同的解码集群对紧接切换点之后(例如,或在切换点处)的指令。在某些示例中,通过将指令流中的现有指令标记为“假分支”来插入切换点。在某些示例中,通过在指令流中插入标记为“假分支”的额外(例如,新)指令来插入切换点。
在某些示例中,切换点控制电路120添加和/或删除分支预测器102(例如其BTB112)中的切换点。在某些示例中,切换点控制电路120在分支预测器102(例如,其BTB 112)中添加假分支指令用作切换点,例如,根据本文的公开。在某些示例中,切换点控制电路120添加指示(例如,在BTB 112中的条目中),以切换解码集群,例如,通过向预测采取分支添加指示(例如,经由切换点控制电路120与分支预测器102(例如,BTB 112)之间的耦合124),其中指示(例如,元数据)用于指示切换。在某些示例中,切换点控制电路120用于(i)确定指令流中的位置作为候选切换点,用于在发送针对第一解码集群的解码而请求的指令与发送针对第二解码集群的解码而请求的指令之间进行切换,(ii)跟踪该位置存在多个指令流的先前解码的特性的次数,和/或(iii)基于次数在该位置插入切换点,以便在发送针对第一解码集群的解码而请求的指令与发送针对第二解码集群的解码而请求的指令之间进行切换。在某些示例中,集群之间的切换纯粹基于指令字节(例如,其中指令字节的缓存行可包括多个指令),例如,不基于分支,不基于指令,不基于微操作(uop)等。在某些示例中,集群之间的切换并不纯粹基于指令字节(例如,其中指令字节的缓存行可包括多个指令),例如,基于分支、指令、微操作(uop)等。在某些示例中,处理器核心(或其他组件)不包括配置成用于将指令字节重新组装为(例如,跨越多个缓存行的可变长度指令)指令的拆分解码单元。在某些示例中,硬件处理器核心(例如,切换点控制电路120)根据此公开使用预测器和/或切换点跟踪数据结构,例如,这与仅基于读取指令缓存来切换形成对照。在某些示例中,基于对代码(例如,指令)流的先前解码,插入(或删除)代码(例如,指令)流中的切换。
在某些示例中,切换点控制电路120维护(例如,并包括)跟踪数据结构126,例如,用于确定指令流中的位置作为候选切换点,用于在发送针对第一解码集群的解码而请求的指令与发送针对第二解码集群的解码而请求的指令之间进行切换和/或跟踪该位置存在指令流的多个先前解码的特性的次数。在某些示例中,特性包括以下各项中的一项或任意组合:微操作(uop)、指令、字节或(例如,多次解码)指令流的任何其他特性。在某些示例中,特性包括以下各项中的一项或任意组合:微操作(uop)的数量、指令的数量、字节的数量或(例如,多次解码的)指令流的任何其他特性。
在某些示例中,切换点控制电路120维护(例如,并包括)一个或多个计数器128(例如,本文讨论的超时计数器)。在某些示例中,跟踪数据结构126根据图3中的格式。
在某些示例中,切换点控制电路120包括与每个解码集群中(例如,单个)指令解码队列的耦合,例如,在切换点控制电路120与指令解码队列118A之间耦合122A,并在切换点控制电路120与指令解码队列118B之间耦合122B。
在某些示例中,切换点控制电路120读取(例如,并包括)一个或多个阈值130,例如,如下文和/或图4所述。在某些示例中,(一个或多个)阈值130是指示阈值条件的值,例如,微操作(uop)、指令、字节的阈值数或指令流的任何其他特性。
在(例如,由解码器电路或微代码定序器)将指令解码为其相应的(一个或多个)微操作之后,在某些示例中,这些微操作被存储在指令解码队列中。在图1中(例如,在解码阶段结束时),解码集群108A包括从解码器电路114A-116A(例如,和从微代码序列器)接收相应微操作的指令解码队列118A(例如,指令队列),解码集群108B包括从解码器电路114B-116B(例如,和从微代码序列器)接收相应微操作的指令解码队列118B(例如,指令队列)。可选地,开关132被包括以将指令解码队列118A-118B的(一个或多个)输出耦合至分配电路134的(一个或多个)输入。在某些示例中,分配电路134用于将来自指令解码队列118A-118B的微操作(例如,按程序顺序)发送至执行电路136中的执行电路(例如,基于微操作的类型和执行电路的类型,例如,整数、向量、浮点等)。在一个示例中,一个或多个指令解码队列不按程序顺序加载但是按程序顺序读取。执行电路136可以访问存储装置,例如,寄存器138和/或数据缓存140(例如,一个或多个级别的缓存层次体系)。一旦结果由执行电路136生成,引退电路134然后可以引退对应的指令。
图3图示出根据本公开的示例的切换点跟踪数据结构(例如,图1中的切换点跟踪数据结构126)的示例格式300。在某些示例中,切换点控制电路根据格式300维护(例如,并包括)根据格式300的跟踪数据结构。在某些示例中,跟踪数据结构是一个表(例如,假分支插入(fake branch insertion,FBI)表)。在某些示例中,单个跟踪数据结构在所有集群化解码器之间共享。在某些示例中,跟踪数据结构是全相联的。格式300包括一个或多个条目,例如,其中N是任何大于1的正整数。在一个示例中,N=8。
在某些示例中,每个条目的格式300包括标签字段,用于指示插入切换点(例如,假分支)的候选点(例如,指令)。在某些示例中,每个标签标识包含跨越微操作阈值的微操作(例如,其中指令被解码为多个微操作)的指令,例如,如下参考图4所讨论。在某些示例中,一旦确定要使用的候选点,例如,在BTB 112内,在候选切换点处或紧接候选切换点之后插入实际的切换点(例如,假分支指令)。
在某些示例中,每个条目的格式300包括有效字段,用于指示条目有效或无效,例如,其中首先选择切换点跟踪数据结构中的无效条目(例如,在条目的第二列中标记为无效指示)以供分配。在某些示例中,如果所有条目都有效,则遵循最近使用最少的(least-recently-used,LRU)策略来替换最近使用最少的条目(例如,基于该条目的计时器),例如,LRU策略和“一次性解除分配策略”选择要替换的条目。
在某些示例中,每个条目的格式300包括命中计数字段,用于指示在任何指令流的先前解码期间遇到候选切换点(例如,候选指令)的次数。命中计数字段的示例用法将参考图4进行更详细的描述。
在某些示例中,一旦确定候选点用作切换点,切换点控制电路120导致激活切换点的指示,例如,通过在BTB 112中插入相对应(例如,导致切换)的假分支。
图4图示出根据本公开的示例的动态负荷平衡的流程图400。虽然图4中使用了术语假分支插入(FBI)表,但应该理解,可以使用其他数据结构,例如,切换点跟踪数据结构。在某些示例中,切换点控制电路120根据流程图400操作。
在某些示例中,流程图400(例如,算法)基于对包括顺序(例如,x86)指令块的微操作(uop)数量进行的计数。这可以称为当前的“uop_cnt”。在某些示例中,微操作计数(uop_cnt)是自遇到最后一个实际切换或切换候选以来解码的微操作数量。在某些示例中,流程图(例如,算法)与当前微操作计数(uop_cnt)进行比较,某些阈值是可调的(例如,可变化的),例如,阈值1、阈值2、阈值3和阈值4(例如,如图1中存储在(一个或多个)阈值130中)。
在某些示例中,阈值1表示自切换以来看到的经解码微操作的阈值数量(例如,24),例如,使得阈值1用于确定插入切换点(例如,假分支)的候选位置,例如,尚未在指令流中的切换点(例如,真分支)。
在某些示例中,阈值2表示在切换后看到的经解码微操作的不同阈值数量(例如,32),例如,使得当代码流在未来多个微操作中已经有另一个切换时,阈值2用于避免插入切换(例如,假分支),例如,如果在阈值2个微操作(uop)内发生切换,候选将被删除,并且不分配到切换点跟踪数据结构中。
在某些示例中,阈值3表示经解码微操作的阈值数量(例如,16),例如,使得阈值3用于确定之前插入的假分支何时应无效(例如,在预测结构(例如,BTB)中无效)。例如,为了检查导致假分支的微操作计数(uop_cnt)是否低于阈值2与阈值1之间的差(例如,上例中的8),如果是,假分支可以立即被删除(例如,从预测结构(例如,BTB)中删除),并且如果高于此差但低于阈值3,则它可以被删除。
在某些示例中,如果代码路径已更改使其不再有效,则已经在预测结构中的假分支(例如,在BTB中作为假分支)无效,例如,在该路径上与切换点跟踪数据结构(例如,FBI)没有相互影响。在某些示例中,只有当该代码段没有任何切换点并且系统(例如,核心)解码了足够的、期望插入新的假分支的微操作(uop),才分配(或解除分配(例如,无效))跟踪条目(例如,“FBI”条目)。在某些示例中,切换点跟踪数据结构(例如,FBI)是保持区域,用于跟踪候选位置,在这些位置中添加假分支应该有助于负荷平衡,但要确认在允许候选从切换点跟踪数据结构(例如,FBI)分配到预测结构(例如,BTB)中之前、(一个或多个)解码器中多次(在一个实现方式中,次数是2次,除非为1的绕过情况,但可以是任何值)发生相同/相似的情况。在某些示例中,如果在切换点跟踪数据结构(例如,FBI)中有候选(例如,分支)命中并且多个要求被满足,则该候选(例如,位置)被插入到预测结构(例如,BTB)中,例如,并且相对应的条目从切换点跟踪数据结构(例如,FBI)中解除分配,因为它不再需要被保持(例如,它是实际的切换而不是候选切换)。
在某些示例中,阈值4指示待从候选位置提升到切换点的实际位置的切换点跟踪数据结构中的条目的命中的阈值数量(例如,1或2),例如,其中候选位置作为假分支被提升到BTB。
在某些示例中,全局重置是清除所有跟踪数据,例如,清除切换点跟踪数据结构(例如,但不包括阈值)。
在某些示例中,“次数”值是在没有任何切换的情况下看到的切换候选的总数。在某些示例中,一旦标识的切换候选数量超过“次数”的阈值(例如,在图4中,这被描述为4,这意味着在没有任何切换的情况下看到的指令的总数跨越4*阈值1即4*24,假设阈值1=24的示例),那么切换点跟踪数据结构(例如,FBI)插入可以被跳过(例如,“FBI绕过”),并且切换候选直接被提升为切换点(例如,假分支),例如,被插入到预测结构中(例如,BTB)。
在某些示例中,“次数”值是在没有切换的情况下看到的微操作总数(例如,由“阈值1”值指示的数量)。示例“阈值1”值是24,但是它可以是其他示例中的任何数字。
在某些示例中,流程图400的操作包括在402处的等待状态,例如,等待微操作(uop)被解码(例如,显示在指令解码队列中),在404处的切换检查,用于确定微操作是否已经是导致切换的指令(例如,其微操作),(i)如果是并且“真”切换(例如,真“采取”分支微操作或相对应的宏指令),然后清除uop_cnt和次数计数器,然后返回等待状态402,(ii)如果是并且“假”切换(例如,假“采取”分支微操作或相对应的宏指令)然后继续比较424,在424处比较描述的阈值,然后在430处要么使来自BTB的假分支无效,要么继续比较426(例如,如果所描述的(一个或多个)条件满足,则在428处启动无效保持有限状态机(FSM),例如如图5所示),以及(iii)如果不是导致切换的指令(例如,其微操作),则在406处进行阈值1比较,在408处候选保持(例如,检查已解码的附加微操作),在410处保持候选切换检查(例如,检查附加微操作是否是切换),在412处阈值2比较,在414处检查切换点跟踪数据结构(例如,FBI)绕过,在416处比较切换点跟踪数据结构(例如,FBI)条目,以及在418处分配切换点跟踪数据结构(例如,FBI)中的条目。在某些示例中,假分支在420处被分配。在某些示例中,在422处为条目执行命中计数的比较(例如,如图3所示)。
在某些示例中(例如,在正常情况下),一旦微操作计数(uop_cnt)达到阈值1,就选择插入切换(例如,假分支)的候选位置。然而,在某些示例中,此候选位置可能不是完全静态的,因为可能存在基于指令类型、存在长微代码(例如,只读存储器)流(例如,来自微代码定序器)或其他基于硬件的限制,这些限制可要求完全处于阈值1的指令(例如,微操作)不被允许成为候选。为了解决这个问题,在某些示例中,最终候选捕捉指令指针(IP)信息以及微操作计数(uop_cnt)以存储到切换点跟踪数据结构(例如,表)中。在某些示例中,此表被称为假分支插入表(“FBI”)。在某些示例中,如果再次看到具有匹配标签(例如,散列的IP比特)和微操作计数(uop_cnt)的微操作(uop)(例如,切换点的候选),它命中切换点跟踪数据结构(例如,FBI表)。在某些示例中,如果在切换点跟踪数据结构(例如,FBI表)中候选的条目被命中足够的次数(例如,命中计数大于或等于阈值4),则条目从切换点跟踪数据结构(例如,FBI表)中解除分配,并且候选位置被提升为实际切换点(例如,通过将该条目作为假分支提升到BTB)。在某些示例中,命中计数阈值4可以选择不同的值。为了避免在代码流在(例如,非常接近的)未来已经有另一个切换时插入假分支,在某些示例中,如果在阈值2个微操作(uop)中检测到切换,候选将被删除,并且不分配到切换点跟踪数据结构(例如,FBI表)中。
在某些示例中,期望实现较小大小的切换点跟踪数据结构(例如,FBI表),例如,当采取分支之间有一个非常长的2000个微操作(uop)的序列时,期望每20个uop插入切换点,但这可能利用至少2000/20(即,100个条目)深度的切换点跟踪数据结构(例如,FBI表),因为任何小于此的条目,容量驱逐可能导致完全没有切换插入。
为了在处置长序列的同时启用小/密集的切换点跟踪数据结构(例如,FBI表),本文的某些示例利用切换点跟踪数据结构(例如,FBI表)绕过(例如,“FBI绕过”),适用于指令序列中根本没有分支的情况,例如,以允许来自切换点跟踪数据结构(例如,FBI表)的条目从候选切换点升级提升到实际切换点(例如,作为假分支从切换点跟踪数据结构提升到BTB)的机会。例如,如某些长的未滚动单指令多数据(single-instruction multipledata,SIMD)和/或浮点(FP)计算中所示。在某些示例中,在当前微操作计数(uop_cnt)超过阈值1的次数而无任何切换时,切换点跟踪数据结构(例如,FBI表)被绕过。在图4中,其被描述为4,但应该理解为可以使用其他值(例如,在硬件中可配置)。在某些示例中,还有其他条件(例如,某些长的复杂指令集计算机(CISC)流)也启用切换点跟踪数据结构(例如,FBI表)绕过。在某些示例中,在再次看到真切换或发生重置条件后,切换点跟踪数据结构(例如,FBI表)绕过模式被禁用。
在某些示例中,切换点跟踪数据结构(例如,FBI表)绕过解决了大多数触发对非常大型表的触发的情况,但可能仍然存在静止容量驱逐情况,可以压倒任何有限的切换点跟踪数据结构(例如,FBI表)。为了增强切换点跟踪数据结构(例如,FBI表)绕过并启用较小的切换点跟踪数据结构(例如,FBI表),切换点跟踪数据结构(例如,FBI表)的某些(例如,但不是全部)(例如,2个)条目在某些示例中具有“一次性解除分配策略”,例如,使得对于这些条目,如果“有效”,则不能被覆写,直到计时器(例如,超时计数器)溢出或由于切换(例如,假分支)插入而被解除分配。在某些示例中,该超时机制是经由多个(例如,6个)比特计数器跟踪总切换点跟踪数据结构(例如,FBI表)条目分配构建的。在某些示例中,当计数器溢出(例如,63到0)时,允许再次LRU替换这些“特殊”条目。
在某些示例中,具有非常可预测和静态路径长度的简单代码流将与位于与之前切换点距离阈值1的所有假分支一起搁置。然而,代码通常是动态的,并且因此,在解码和/或执行的一个阶段期间插入的切换(例如,假分支)在后续阶段期间可能无法很好地定位。在这种情况下,本文的某些示例使用(例如,在BTB中)检测之前插入的切换(例如,假分支)何时无效的逻辑。在某些示例中,这是(或没有)检测到任何切换(例如,假分支)被发现低于阈值2减去阈值1的情况。
在某些示例中,如果检测到插入的切换(例如,假分支位置)的多次(例如,不变的)调节,则切换点控制电路替代地将单个(例如,位置不佳的)切换(例如,假分支)保留在一长串以其他方式正确放置的切换(例如,假分支)中。在某些示例中,这包括检查导致假分支的微操作计数(uop_cnt)是否低于阈值2与阈值1之间的差(例如,8个微操作(uop))。在某些示例中,如果是,它可以被立即删除。在某些示例中,如果高于此差但低于阈值3(例如,16个微操作(uop)),它可能被删除。在某些示例中,如果后续切换也是插入的切换(例如,“假”分支),则不删除切换(例如,假分支)。图5中描述了(例如,由切换点控制电路执行的)无效的示例。
图5图示出根据本公开的示例的无效保持有限状态机的流程图500。描绘的流程图500包括等待无效保持请求502,并且当接收到时(例如,图4中的428处),在504处保持无效请求,以检查遇到的下一个切换是否为真(例如,真分支),如果是,则在508处使来自预测结构(例如,BTB)的假分支无效,如果不是,则不使预测结构(例如,BTB)中的假分支无效(并继续回502处等待)。
图6是图示出根据本公开的示例的插入切换点以用于在多个解码集群之间切换指令流的解码的操作600的流程图。操作600中的一些或全部(或本文中描述的其他过程、或变型、和/或其组合)在(例如,处理器核心100的)切换点控制电路120的控制之下被执行。
操作600包括在框602处接收硬件处理器核心请求解码的指令流,该硬件处理器核心包括具有多个解码器电路的第一解码集群和具有多个解码器电路的第二解码集群。操作600进一步包括在框604处,通过硬件处理器核心的切换点控制电路确定指令流中的位置作为候选切换点,以在发送针对第一解码集群的解码而请求的指令与发送针对第二解码集群的解码而请求的指令之间进行切换。操作600进一步包括,在框606处,通过切换点控制电路跟踪该位置存在指令流的多个先前解码的特性的次数。操作600进一步包括在框608处,基于次数在该位置插入切换点,以在发送针对第一解码集群的解码而请求的指令与发送针对第二解码集群的解码而请求的指令之间进行切换。
下文详述可在上文中使用的示例性体系结构、系统等。
可以根据下列示例来描述所公开的技术的至少一些示例:
示例1。一种硬件处理器核心,包括:
第一解码集群,包括多个解码器电路;
第二解码集群,包括多个解码器电路;以及
切换点控制电路,用于在发送针对第一解码集群的解码而请求的指令与发送针对第二解码集群的解码而请求的指令之间进行切换,其中切换点控制电路用于:
确定指令流中的位置作为候选切换点,以在发送针对第一解码集群的解码而请求的指令与发送针对第二解码集群的解码而请求的指令之间进行切换,
跟踪该位置存在指令流的多个先前解码的特性的次数,以及
导致基于次数在该位置插入切换点,以在发送针对第一解码集群的解码而请求的指令与发送针对第二解码集群的解码而请求的指令之间进行切换。
示例2。示例1的硬件处理器核心,其中,特性是在位置之前以及在指令流的解码在第一解码集群与第二解码集群之间的紧前切换之后从指令流解码的微操作的数量。
示例3。示例1的硬件处理器核心,其中,特性是在位置之前以及在指令流的解码在第一解码集群与第二解码集群之间的紧前切换之后从指令流解码的宏操作的数量。
示例4。示例1的硬件处理器核心,其中,切换点的插入包括在硬件处理器核心的分支目标缓冲器中分支指令的插入。
示例5。示例1的硬件处理器核心,其中,切换点控制电路进一步用于:在指令流的随后解码中位置之后在阈值数量的指令内遇到现有切换点时,删除作为候选切换点的位置。
示例6。示例1的硬件处理器核心,其中特性是位置之前从指令流解码的微操作的数量。作为进一步的示例,在某些示例中,当微操作的数量跨越某一阈值(例如,如图4所示,在414处设置值为4)而无任何切换时,它将开始绕过FBI(例如,和将在BTB中分配的假分支)。
示例7。示例1的硬件处理器核心,其中,切换点控制电路包括计时器,并且在来自计时器的跟踪时间超过阈值时间后,停止跟踪该位置存在指令流的多个先前解码的特性的次数。
示例8。示例1的硬件处理器核心,其中,切换点控制电路确定多个候选切换点,并跟踪每个相应位置存在指令流的多个先前解码的相应特性的相对应次数。
示例9。一种方法,包括:
接收硬件处理器核心请求解码的指令流,该硬件处理器核心包括具有多个解码器电路的第一解码集群和具有多个解码器电路的第二解码集群;
通过硬件处理器核心的切换点控制电路确定指令流中的位置作为候选切换点,以在发送针对第一解码集群的解码而请求的指令与发送针对第二解码集群的解码而请求的指令之间进行切换;
通过切换点控制电路跟踪该位置存在指令流的多个先前解码的特性的次数;以及
基于次数在该位置处插入切换点,以在发送针对第一解码集群的解码而请求的指令与发送针对第二解码集群的解码而请求的指令之间进行切换。
示例10。示例9的方法,其中,特性是在位置之前以及在指令流的解码在第一解码集群与第二解码集群之间的紧前切换之后从指令流解码的微操作的数量。
示例11。示例9的方法,其中,特性是在位置之前以及在指令流的解码在第一解码集群与第二解码集群之间的紧前切换之后从指令流解码的宏操作的数量。
示例12。示例9的方法,其中,切换点的插入包括在硬件处理器核心的分支目标缓冲器中分支指令的插入。
示例13。示例9的方法,进一步包括在指令流的随后解码中位置之后在阈值数量的指令内遇到现有切换点时,删除作为候选切换点的位置。
示例14。示例9的方法,其中特性是位置之前从指令流解码的微操作的数量。
示例15。示例9的方法,进一步包括在跟踪时间超过阈值时间之后,停止跟踪该位置存在指令流的多个先前解码的特性的次数。
示例16。示例9的方法,其中确定包括确定多个候选切换点,以及跟踪包括跟踪每个相应位置存在指令流的多个先前解码的相应特性的相对应次数。
示例17。一种装置,包括:
存储器,用于存储指令;
包括多个解码器电路的第一解码集群;
包括多个解码器电路的第二解码集群;以及
切换点控制电路,用于在发送针对第一解码集群的解码而请求的指令与发送针对第二解码集群的解码而请求的指令之间进行切换,其中切换点控制电路用于:
确定指令流中的位置作为候选切换点,以在发送针对第一解码集群的解码而请求的指令与发送针对第二解码集群的解码而请求的指令之间进行切换,
跟踪该位置存在指令流的多个先前解码的特性的次数,以及
导致基于次数在该位置插入切换点,以在发送针对第一解码集群的解码而请求的指令与发送针对第二解码集群的解码而请求的指令之间进行切换。
示例18。示例17的装置,其中,特性是在位置之前以及在指令流的解码在第一解码集群与第二解码集群之间的紧前切换之后从指令流解码的微操作的数量。
示例19。示例17的装置,其中,特性是在位置之前以及在指令流的解码在第一解码集群与第二解码集群之间的紧前切换之后从指令流解码的宏操作的数量。
示例20。示例17的装置,其中,切换点的插入包括在分支目标缓冲器中分支指令的插入。
示例21。示例17的装置,其中,切换点控制电路进一步用于:在指令流的随后解码中位置之后在阈值数量的指令内遇到现有切换点时,删除作为候选切换点的位置。
示例22。示例17的装置,其中,特性是位置之前从指令流解码的微操作的数量。
示例23。示例17的装置,其中切换点控制电路包括计时器,并且在来自计时器跟踪时间超过阈值时间之后,停止跟踪该位置存在指令流的多个先前解码的特性的次数。
示例24。示例17的装置,其中切换点控制电路确定多个候选切换点,并跟踪每个相应位置存在指令流的多个先前解码的相应特性的相对应次数。
在又一示例中,一种装置包括数据存储设备,该数据存储设备存储代码,该代码在由硬件处理器执行时使得该硬件处理器执行本文中所公开的任何方法。装置可如在具体实施方式中所描述。方法可如在具体实施方式中所描述。
指令集可包括一种或多种指令格式。给定的指令格式可定义各种字段(例如,比特的数量、比特的位置)以指定要执行的操作(例如,操作码)以及将对其执行该操作的(一个或多个)操作对象和/或(一个或多个)其他数据字段(例如,掩码),等等。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,可将给定指令格式的指令模板定义为具有该指令格式的字段(所包括的字段通常按照相同顺序,但是至少一些字段因为较少的字段被包括而具有不同的位的位置)的不同子集,和/或定义为具有以不同方式进行解释的给定字段。由此,ISA的每一个指令使用给定的指令格式(并且如果被定义,则按照该指令格式的指令模板中的给定的一个指令模板)来表达,并包括用于指定操作和操作对象的字段。例如,示例性ADD(加法)指令具有特定的操作码和指令格式,该特定的指令格式包括用于指定该操作码的操作码字段和用于选择操作对象(源1/目的地以及源2)的操作对象字段;并且该ADD指令在指令流中出现将使得在操作对象字段中具有选择特定操作对象的特定的内容。已经推出和/或发布了被称为高级向量扩展(AVX)(AVX1和AVX2)和利用向量扩展(VEX)编码方案的SIMD扩展集(参见例如2018年11月的
Figure BDA0003861827930000251
64和IA-32体系结构软件开发者手册;以及参见2018年10月的
Figure BDA0003861827930000253
Figure BDA0003861827930000252
体系结构指令集扩展编程参考)。
示例性核心体系结构、处理器和计算机体系结构
处理器核心能以不同方式、出于不同的目的、在不同的处理器中实现。例如,此类核心的实现可以包括:1)旨在用于通用计算的通用有序核心;2)旨在用于通用计算的高性能通用乱序核心;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现可包括:1)CPU,其包括旨在用于通用计算的一个或多个通用有序核心和/或旨在用于通用计算的一个或多个通用乱序核心;以及2)协处理器,其包括旨在主要用于图形和/或科学(吞吐量)的一个或多个专用核心。此类不同的处理器导致不同的计算机系统体系结构,这些计算机系统体系结构可包括:1)在与CPU分开的芯片上的协处理器;2)在与CPU相同的封装中但在分开的管芯上的协处理器;3)与CPU在相同管芯上的协处理器(在该情况下,此类协处理器有时被称为专用逻辑或被称为专用核心,该专用逻辑诸如,集成图形和/或科学(吞吐量)逻辑);以及4)片上系统,其可以将所描述的CPU(有时被称为(一个或多个)应用核心或(一个或多个)应用处理器)、以上描述的协处理器和附加功能包括在同一管芯上。接着描述示例性图形处理器,随后描述示例性核心体系结构,以及示例性处理器和计算机体系结构。
示例性核心体系结构
有序和乱序核心框图
图7A是图示根据本公开的各示例的示例性有序管线和示例性的寄存器重命名的乱序发出/执行管线的框图。图7B是示出根据本公开的各示例的要包括在处理器中的有序体系结构核心的示例性示例和示例性的寄存器重命名的乱序发出/执行体系结构核心的框图。图7A-图7B中的实线框图示有序管线和有序核心,而虚线框的可选增加图示寄存器重命名的、乱序发出/执行管线和核心。考虑到有序方面是乱序方面的子集,将描述乱序方面。
在图7A中,处理器管线700包括取得(fetch)级702、长度解码阶段704、解码阶段706、分配阶段708、重命名阶段710、调度(也被称为调遣或发出)级712、寄存器读取/存储器读取阶段714、执行阶段716、写回/存储器写入阶段718、异常处置阶段722和提交阶段724。
图7B示出处理器核心790,该处理器核心790包括前端单元730,该前端单元730耦合到执行引擎单元750,并且前端单元730和执行引擎单元750两者都耦合到存储器单元770。核心790可以是精简指令集计算(reduced instruciton set computing,RISC)核心、复杂指令集计算(CISC)核心、超长指令字(very long instruction word,VLIW)核心、或混合或替代的核心类型。作为又一选项,核心790可以是专用核心,诸如例如,网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(general purpose computinggraphics processing unit,GPGPU)核心、图形核心,等等。
前端单元730包括分支预测单元732,该分支预测单元732耦合到指令缓存单元734,该指令缓存单元734耦合到指令转译后备缓冲器(translation loodaside buffer,TLB)736,该指令转译后备缓冲器736耦合到指令取得单元738,该指令取得单元738耦合到解码单元740(例如,在某些示例中多个解码集群)。解码单元740(或解码器或解码器单元)可对指令(例如,宏指令)解码,并且生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元740可使用各种不同的机制来实现。合适机制的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(programmable logic array,PLA)、微代码只读存储器(ROM)等。在一个示例中,核心790包括存储用于某些宏指令的微代码的微代码ROM或其他介质(例如,在解码单元740中,或以其他方式在前端单元730内)。解码单元740耦合到执行引擎单元750中的重命名/分配器单元752。
执行引擎单元750包括重命名/分配器单元752,该重命名/分配器单元752耦合到引退单元754和一个或多个调度器单元的集合756。(一个或多个)调度器单元756表示任何数量的不同调度器,包括预留站、中央指令窗等。(一个或多个)调度器单元756耦合到(一个或多个)物理寄存器堆单元758。(一个或多个)物理寄存器堆单元758中的每一个物理寄存器堆单元表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点,状态(例如,作为要执行的下一个指令的地址的指令指针)等等。在一个示例中,(一个或多个)物理寄存器堆单元758包括向量寄存器单元、写入掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供体系结构向量寄存器、向量掩码寄存器和通用寄存器。(一个或多个)物理寄存器堆单元758由引退单元754重叠,以图示可实现寄存器重命名和乱序执行的各种方式(例如,使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器堆;使用(一个或多个)未来的堆、(一个或多个)历史缓冲器、(一个或多个)引退寄存器堆;使用寄存器图谱和寄存器池,等等)。引退单元754和(一个或多个)物理寄存器堆单元758耦合到(一个或多个)执行集群760。(一个或多个)执行集群760包括一个或多个执行单元的集合762以及一个或多个存储器访问单元的集合764。执行单元762可执行各种操作(例如,移位、加法、减法、乘法)并可对各种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管一些示例可以包括专用于特定功能或功能集合的多个执行单元,但是其他示例可包括仅一个执行单元或全都执行所有功能的多个执行单元。(一个或多个)调度器单元756、(一个或多个)物理寄存器堆单元758和(一个或多个)执行集群760示出为可能有多个,因为某些示例为某些类型的数据/操作创建分开的管线(例如,标量整数管线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点管线,和/或各自具有其自身的调度器单元、(一个或多个)物理寄存器堆单元和/或执行集群的存储器访问管线——并且在分开的存储器访问管线的情况下,实现其中仅该管线的执行集群具有(一个或多个)存储器访问单元764的某些示例)。还应当理解,在使用分开的管线的情况下,这些管线中的一个或多个可以是乱序发出/执行,并且其余管线可以是有序的。
存储器访问单元的集合764耦合到存储器单元770,该存储器单元770包括数据TLB单元772,该数据TLB单元772耦合到数据缓存单元774,该数据缓存单元774耦合到第二级(L2)缓存单元776。在一个示例性示例中,存储器访问单元764可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合到存储器单元770中的数据TLB单元772。指令缓存单元734还耦合到存储器单元770中的第二级(L2)缓存单元776。L2缓存单元776耦合到一个或多个其他级别的缓存,并最终耦合到主存储器。
在某些示例中,包括预取得电路400以预取得数据,例如从而预测访问地址并将针对那些地址的数据(例如,从存储器)带至一个或多个缓存中。
作为示例,示例性寄存器重命名的乱序发出/执行核心体系结构可如下所述地实现管线700:1)指令取得738执行取得阶段702和长度解码阶段704;2)解码单元740执行解码阶段706;3)重命名/分配器单元752执行分配阶段708和重命名阶段710;4)(一个或多个)调度器单元756执行调度阶段712;5)(一个或多个)物理寄存器堆单元758和存储器单元770执行寄存器读取/存储器读取阶段714;执行集群760执行执行阶段716;6)存储器单元770和(一个或多个)物理寄存器堆单元758执行写回/存储器写入阶段718;7)各单元可牵涉到异常处置阶段722;以及8)引退单元754和(一个或多个)物理寄存器堆单元758执行提交阶段724。
核心790可支持一个或多个指令集(例如,x86指令集(具有已与较新版本一起添加的一些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集;加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集(具有诸如NEON的可选的附加扩展)),其中包括本文中描述的(一个或多个)指令。在一个示例中,核心790包括用于支持紧缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,由此允许使用紧缩数据来执行由许多多媒体应用使用的操作。
应当理解,核心可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,各种方式包括时分多线程化、同时多线程化(其中单个物理核心为物理核心正在同时多线程化的线程中的每一个线程提供逻辑核心)、或其组合(例如,时分取得和解码以及此后的诸如
Figure BDA0003861827930000291
超线程化技术中的同时多线程化)。
尽管在乱序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序体系结构中使用寄存器重命名。尽管所图示的处理器的示例还包括分开的指令和数据缓存单元734/774以及共享的L2缓存单元776,但是替代示例可以具有用于指令和数据两者的单个内部缓存,诸如例如,第一级(L1)内部缓存或多个级别的内部缓存。在一些示例中,该系统可包括内部缓存和在核心和/或处理器外部的外部缓存的组合。或者,所有缓存都可以在核心和/或处理器的外部。
具体的示例性有序核心体系结构
图8A-图8B图示更具体的示例性有序核心体系结构的框图,该核心将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核心)中的一个逻辑块。取决于应用,逻辑块通过高带宽互连网络(例如,环形网络)与一些固定的功能逻辑、存储器I/O接口和其他必要的I/O逻辑进行通信。
图8A是根据本公开的示例的单个处理器核心以及它至管芯上互连网络802的连接及其第二级(L2)缓存的本地子集804的框图。在一个示例中,指令解码单元800支持具有紧缩数据指令集扩展的x86指令集。L1缓存806允许对进入标量和向量单元中的、对缓存存储器的低等待时间访问。尽管在一个示例中(为了简化设计),标量单元808和向量单元810使用分开的寄存器集合(分别为标量寄存器812和向量寄存器814),并且在这些寄存器之间传输的数据被写入到存储器,并随后从第一级(L1)缓存806读回,但是本公开的替代示例可以使用不同的方法(例如,使用单个寄存器集合或包括允许数据在这两个寄存器堆之间传输而无需被写入和读回的通信路径)。
L2缓存的本地子集804是全局L2缓存的一部分,该全局L2缓存被划分成多个分开的本地子集,每个处理器核心一个本地子集。每个处理器核心具有到其自身的L2缓存的本地子集804的直接访问路径。由处理器核心读取的数据被存储在其L2缓存子集804中,并且可以与其他处理器核心访问其自身的本地L2缓存子集并行地被快速访问。由处理器核心写入的数据被存储在其自身的L2缓存子集804中,并在必要的情况下从其他子集转储清除。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核心、L2缓存和其他逻辑块之类的代理在芯片内彼此通信。每个环形数据路径为每个方向812比特宽。
图8B是根据本公开的示例的图8A中的处理器核心的一部分的展开图。图8B包括L1缓存804的L1数据缓存806A部分,以及关于向量单元810和向量寄存器814的更多细节。具体地,向量单元810是16宽向量处理单元(VPU)(见16宽ALU 828),该单元执行整数、单精度浮点以及双精度浮点指令中的一个或多个。该VPU通过混合单元820支持对寄存器输入的混合,通过数值转换单元822A-B支持数值转换,并且通过复制单元824支持对存储器输入的复制。写入掩码寄存器826允许谓词所得的向量写入。
图9是根据本公开的示例的可具有多于一个的核心、可具有集成存储器控制器、以及可具有集成图形器件的处理器900的框图。图9中的实线框图示具有单个核心902A、系统代理910、一个或多个总线控制器单元的集合916的处理器900,而虚线框的可选增加图示具有多个核心902A-N、系统代理单元910中的一个或多个集成存储器控制器单元的集合914以及专用逻辑908的替代处理器900。
因此,处理器900的不同实现可包括:1)CPU,其中专用逻辑908是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核心),并且核心902A-N是一个或多个通用核心(例如,通用有序核心、通用乱序核心、这两者的组合);2)协处理器,其中核心902A-N是旨在主要用于图形和/或科学(吞吐量)的大量专用核心;以及3)协处理器,其中核心902A-N是大量通用有序核心。因此,处理器900可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(general purpose graphics processingunit,通用图形处理单元)、高吞吐量的集成众核(many integrated core,MIC)协处理器(包括30个或更多核心)、嵌入式处理器,等等。该处理器可以被实现在一个或多个芯片上。处理器900可以是一个或多个基板的一部分,和/或可使用多种工艺技术(诸如例如,BiCMOS、CMOS、或NMOS)中的任何技术被实现在一个或多个基板上。
存储器层次体系包括核心内的一个或多个级别的缓存、一个或多个共享缓存单元的集合906、以及耦合到集成存储器控制器单元的集合914的外部存储器(未示出)。共享缓存单元的集合906可包括一个或多个中间级别的缓存,诸如,第二级(L2)、第三级(L3)、第四级(L4)或其他级别的缓存、最后一级缓存(last level cache,LLC)和/或以上各项的组合。虽然在一个示例中,基于环的互连单元912将集成图形逻辑908、共享缓存单元的集合906以及系统代理单元910/(一个或多个)集成存储器控制器单元914互连,但是替代示例可使用任何数量的公知技术来互连此类单元。在一个示例中,在一个或多个缓存单元906与核心902A-N之间维持一致性。
在一些示例中,一个或多个核心902A-N能够实现多线程化。系统代理910包括协调和操作核心902A-N的那些组件。系统代理单元910可包括例如功率控制单元(powercontrol unit,PCU)和显示单元。PCU可以是对核心902A-N以及集成图形逻辑908的功率状态进行调节所需的逻辑和组件,或可包括这些逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核心902A-N在体系结构指令集方面可以是同构的或异构的;即,核心902A-N中的两个或更多个核心可能能够执行相同的指令集,而其他核心可能能够执行该指令集的仅仅子集或不同的指令集。
示例性计算机体系结构
图10-13是示例性计算机体系结构的框图。本领域中已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(digital signal processor,DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般地,能够包含如本文中所公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般都是合适的。
现在参考图10,所示出的是根据本公开一个示例的系统1000的框图。系统1000可以包括一个或多个处理器1010、1015,这些处理器耦合到控制器中枢1020。在一个示例中,控制器中枢1020包括图形存储器控制器中枢(graphics memory controller hub,GMCH)1090和输入/输出中枢(Input/Output Hub,IOH)1050(其可以在分开的芯片上);GMCH 1090包括存储器和图形控制器,存储器1040和协处理器1045耦合到该存储器和图形控制器;IOH1050将输入/输出(input/output,I/O)设备1060耦合到GMCH 1090。或者,存储器和图形控制器中的一个或这两者被集成在(如本文中所描述的)处理器内,存储器1040和协处理器1045直接耦合到处理器1010,并且控制器中枢1020与IOH 1050处于单个芯片中。例如,存储器1040可以包括代码1040A,用于存储在被执行时使处理器执行本公开的任何方法的代码。
附加的处理器1015的可选性在图10中通过虚线来表示。每一处理器1010、1015可包括本文中描述的处理核心中的一个或多个,并且可以是处理器900的某一版本。
存储器1040可以是例如动态随机存取存储器(dynamic randommemory,DRAM)、相变存储器(phase change memory,PCM)或这两者的组合。对于至少一个示例,控制器中枢1020经由诸如前端总线(frontside bus,FSB)之类的多点分支(multi-drop)总线、诸如快速路径互连(QuickPath Interconnect,QPI)之类的点到点接口、或者类似的连接1095来与(一个或多个)处理器1010、1015进行通信。
在一个示例中,协处理器1045是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。在一个示例中,控制器中枢1020可以包括集成图形加速器。
在物理资源1010、1015之间可以存在包括体系结构、微体系结构、热、功耗特性等一系列品质度量方面的各种差异。
在一个示例中,处理器1010执行控制一般类型的数据处理操作的指令。嵌入在这些指令内的可以是协处理器指令。处理器1010将这些协处理器指令识别为具有应当由附连的协处理器1045执行的类型。因此,处理器1010在协处理器总线或者其他互连上将这些协处理器指令(或者表示协处理器指令的控制信号)发出到协处理器1045。(一个或多个)协处理器1045接受并执行所接收的协处理器指令。
现在参见图11,所示出的是根据本公开的示例的第一更具体的示例性系统1100的框图。如图11中所示,多处理器系统1100是点到点互连系统,并且包括经由点到点互连1150耦合的第一处理器1170和第二处理器1180。处理器1170和1180中的每一个都可以是处理器900的某一版本。在本公开的一个示例中,处理器1170和1180分别是处理器1010和1015,而协处理器1138是协处理器1045。在另一示例中,处理器1170和1180分别是处理器1010和协处理器1045。
处理器1170和1180示出为分别包括集成存储器控制器(integrated memorycontroller,IMC)单元1172和1182。处理器1170还包括作为其总线控制器单元的一部分的点到点(point-to-point,P-P)接口1176和1178;类似地,第二处理器1180包括P-P接口1186和1188。处理器1170、1180可以经由使用点到点(P-P)接口电路1178、1188的P-P接口1150来交换信息。如图11中所示,IMC 1172和1182将处理器耦合到相应的存储器,即存储器1132和存储器1134,这些存储器可以是本地附连到相应处理器的主存储器的部分。
处理器1170、1180可各自经由使用点到点接口电路1176、1194、1186、1198的各个P-P接口1152、1154来与芯片组1190交换信息。芯片组1190可以可选地经由高性能接口1139来与协处理器1138交换信息。在一个示例中,协处理器1138是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享缓存(未示出)可被包括在任一处理器中,或在这两个处理器的外部但经由P-P互连与这些处理器连接,使得如果处理器被置于低功率模式,则任一个或这两个处理器的本地缓存信息可被存储在共享缓存中。
芯片组1190可以经由接口1196耦合到第一总线1116。在一个示例中,第一总线1116可以是外围组件互连(Peripheral Component Interconnect,PCI)总线或诸如PCI快速(PCI Express)总线或另一第三代I/O互连总线之类的总线,但是本公开的范围不限于此。
如图11中所示,各种I/O设备1114可连同总线桥1118一起耦合到第一总线1116,该总线桥1118将第一总线1116耦合到第二总线1120。在一个示例中,诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器的一个或多个附加处理器1115耦合到第一总线1116。在一个示例中,第二总线1120可以是低引脚数(low pin count,LPC)总线。在一个示例中,各种设备可耦合到第二总线1120,这些设备包括例如键盘和/或鼠标1122、通信设备1127以及存储单元1128,该存储单元1128诸如可包括指令/代码和数据1130的盘驱动器或者其他大容量存储设备。此外,音频I/O 1124可以被耦合到第二总线1120。注意,其他体系结构是可能的。例如,代替图11的点到点体系结构,系统可以实现多分支总线或其他此类体系结构。
现在参考图12,示出的是根据本公开的示例的第二更具体的示例性系统1200的框图。图11和12中的类似元件使用类似的附图标记,并且从图12中省略了图11的某些方面以避免混淆图12的其他方面。
图12图示处理器1170、1180可分别包括集成存储器和I/O控制逻辑(“controllogic,CL”)1172和1182。因此,CL 1172、1182包括集成存储器控制器单元,并包括I/O控制逻辑。图12图示不仅存储器1132、1134耦合到CL 1172、1182,而且I/O设备1214也耦合到控制逻辑1172、1182。传统I/O设备1215被耦合到芯片组1190。
现在参考图13,示出的是根据本公开的示例的SoC 1300的框图。图9中的类似要素使用类似的附图标记。另外,虚线框是更先进的SoC上的可选的特征。在图13中,(一个或多个)互连单元1302被耦合到:应用处理器1310,其包括一个或多个核心的集合902A-N(以及相应(一个或多个)缓存单元904A-904N)的集合以及(一个或多个)共享缓存单元906;系统代理单元910;(一个或多个)总线控制器单元916;(一个或多个)集成存储器控制器单元914;一个或多个协处理器的集合1320,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(static random access memory,SRAM)单元1330;直接存储器访问(direct memory access,DMA)单元1332;以及用于耦合到一个或多个外部显示器的显示单元1340。在一个示例中,(一个或多个)协处理器1320包括专用处理器,诸如例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、或嵌入式处理器,等等。
本文公开的机制的各示例可以被实现在硬件、软件、固件或此类实现方式的组合中。本公开的示例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
可将程序代码(诸如,图11中图示的代码1130)应用于输入指令,以执行本文中描述的功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有处理器的任何系统,该处理器诸如例如,数字信号处理器(DSP)、微控制器、专用集成电路(application specific integrated circuit,ASIC)或微处理器。
程序代码可以用高级的面向过程的编程语言或面向对象的编程语言来实现,以便与处理系统通信。如果需要,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定的编程语言的范围。在任何情况下,该语言可以是编译语言或解释语言。
至少一个示例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,该指令表示处理器中的各种逻辑,该指令在被机器读取时使得该机器制造用于执行本文中所述的技术的逻辑。被称为“IP核心”的此类表示可以被存储在有形的机器可读介质上,并可被供应给各个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。[00125]此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非暂态、有形布置,其包括存储介质,诸如硬盘;任何其他类型的盘,包括软盘、光盘、致密盘只读存储器(compact disk read-only memory,CD-ROM)、可重写致密盘(compack diskrewritable,CD-RW)以及磁光盘;半导体器件,诸如,只读存储器(ROM)、诸如动态随机存取存储器(dynamic random access memory,DRAM)和静态随机存取存储器(static randomaccess memory,SRAM)的随机存取存储器(random access memory,RAM)、可擦除可编程只读存储器(erasable programmable read-only memories,EPROM)、闪存、电可擦除可编程只读存储器(electrically erasable programmable read-only memory,EEPROM);相变存储器(phase change memory,PCM);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。
因此,本公开的示例还包括非暂态的有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(Hardware Description Language,HDL),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些示例也被称为程序产品。
仿真(包括二进制转译、代码变形等)
在一些情况下,指令转换器可用于将指令从源指令集转换至目标指令集。例如,指令转换器可以将指令转译(例如,使用静态二进制转译、包括动态编译的动态二进制转译)、变形、仿真或以其他方式转换成要由核心处理的一个或多个其他指令。指令转换器可以用软件、硬件、固件、或其组合来实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。
图14是根据本公开的示例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的示例中,指令转换器是软件指令转换器,但替代地,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图14示出可使用x86编译器1404来编译高级语言1402形式的程序,以生成可由具有至少一个x86指令集核心的处理器1416原生执行的x86二进制代码1406。具有至少一个x86指令集核心的处理器1416表示通过兼容地执行或以其他方式处理以下各项来执行与具有至少一个x86指令集核心的
Figure BDA0003861827930000361
处理器基本相同的功能的任何处理器:1)
Figure BDA0003861827930000362
x86指令集核心的指令集的实质部分,或2)目标为在具有至少一个x86指令集核心的
Figure BDA0003861827930000363
处理器上运行以便取得与具有至少一个x86指令集核心的
Figure BDA0003861827930000364
处理器基本相同的结果的应用或其他软件的目标代码版本。x86编译器1404表示可操作用于生成x86二进制代码1406(例如,目标代码)的编译器,该二进制代码可通过或不通过附加的链接处理在具有至少一个x86指令集核心的处理器1416上执行。类似地,图14示出可以使用替代的指令集编译器1408来编译高级语言1402形式的程序,以生成可以由不具有至少一个x86指令集核心的处理器1414(例如,具有执行加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集、和/或执行加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集的核心的处理器)原生执行的替代的指令集二进制代码1410。指令转换器1412用于将x86二进制代码1406转换成可以由不具有x86指令集核心的处理器1414原生执行的代码。该转换后的代码不大可能与替代的指令集二进制代码1410相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作,并且由来自替代指令集的指令构成。因此,指令转换器1412通过仿真、模拟或任何其他过程来表示允许不具有x86指令集处理器或核心的处理器或其他电子设备执行x86二进制代码1406的软件、固件、硬件或其组合。

Claims (24)

1.一种硬件处理器核心,包括:
包括多个解码器电路的第一解码集群;
包括多个解码器电路的第二解码集群;以及
切换点控制电路,用于在发送针对所述第一解码集群的解码而请求的指令与发送针对所述第二解码集群的解码而请求的指令之间进行切换,其中所述切换点控制电路用于:
确定指令流中的位置作为候选切换点,用于在发送针对所述第一解码集群的解码而请求的指令与发送针对所述第二解码集群的解码而请求的指令之间进行切换,
跟踪所述位置存在多个所述指令流的先前解码的特性的次数,以及
导致基于所述次数在所述位置插入切换点,以在发送针对所述第一解码集群的解码而请求的指令与发送针对所述第二解码集群的解码而请求的指令之间进行切换。
2.如权利要求1所述的硬件处理器核心,其中,所述特性是在所述位置之前以及在所述指令流的解码在所述第一解码集群与所述第二解码集群之间的紧前切换之后从所述指令流解码的微操作的数量。
3.如权利要求1所述的硬件处理器核心,其中,所述特性是在所述位置之前以及在所述指令流的解码在所述第一解码集群与所述第二解码集群之间的紧前切换之后从所述指令流解码的宏操作的数量。
4.如权利要求1所述的硬件处理器核心,其中,所述切换点的插入包括在所述硬件处理器核心的分支目标缓冲器中分支指令的插入。
5.如权利要求1所述的硬件处理器核心,其中所述切换点控制电路进一步用于:在在所述指令流的随后解码中的所述位置之后、在阈值数量的指令内遇到现有切换点时,删除作为所述候选切换点的所述位置。
6.如权利要求1所述的硬件处理器核心,其中,所述特性是所述位置之前从所述指令流解码的微操作的数量。
7.如权利要求1所述的硬件处理器核心,其中,所述切换点控制电路包括计时器,并且用于在来自所述计时器的跟踪时间超过阈值时间之后,停止跟踪所述位置存在所述指令流的多个先前解码的所述特性的所述次数。
8.如权利要求1-7中任一项所述的硬件处理器核心,其中,所述切换点控制电路确定多个候选切换点,并跟踪每个相应位置存在所述指令流的多个先前解码的相应特性的相对应次数。
9.一种方法,包括:
接收硬件处理器核心请求解码的指令流,所述硬件处理器核心包括具有多个解码器电路的第一解码集群和具有多个解码器电路的第二解码集群;
通过所述硬件处理器核心的切换点控制电路确定所述指令流中的位置作为候选切换点,以在发送针对所述第一解码集群的解码而请求的指令与发送针对所述第二解码集群的解码而请求的指令之间进行切换;
通过所述切换点控制电路跟踪所述位置存在所述指令流的多个先前解码的特性的次数;以及
基于所述次数在所述位置处插入切换点,以在发送针对所述第一解码集群的解码而请求的指令与发送针对所述第二解码集群的解码而请求的指令之间进行切换。
10.如权利要求9所述的方法,其中,所述特性是在所述位置之前以及在所述指令流的解码在所述第一解码集群与所述第二解码集群之间的紧前切换之后从所述指令流解码的微操作的数量。
11.如权利要求9所述的方法,其中,所述特性是在所述位置之前以及在所述指令流的解码在所述第一解码集群与所述第二解码集群之间的紧前切换之后从所述指令流解码的宏操作的数量。
12.如权利要求9所述的方法,其中,所述切换点的插入包括在所述硬件处理器核心的分支目标缓冲器中分支指令的插入。
13.如权利要求9所述的方法,进一步包括在所述指令流的随后解码中所述位置之后在阈值数量的指令内遇到现有切换点时,删除作为所述候选切换点的所述位置。
14.如权利要求9所述的方法,其中,所述特性是所述位置之前从所述指令流解码的微操作的数量。
15.如权利要求9所述的方法,进一步包括在跟踪时间超过阈值时间之后,停止跟踪所述位置存在所述指令流的多个先前解码的所述特性的次数。
16.如权利要求9-15中任一项所述的方法,其中,所述确定包括确定多个候选切换点,以及所述跟踪包括跟踪每个相应位置存在所述指令流的多个先前解码的相应特性的相对应次数。
17.一种装置,包括:
存储器,用于存储指令;
包括多个解码器电路的第一解码集群;
包括多个解码器电路的第二解码集群;以及
切换点控制电路,用于在发送针对所述第一解码集群的解码而请求的指令与发送针对所述第二解码集群的解码而请求的指令之间进行切换,其中所述切换点控制电路用于:
确定指令流中的位置作为候选切换点,以在发送针对所述第一解码集群的解码而请求的指令与发送针对所述第二解码集群的解码而请求的指令之间进行切换,
跟踪所述位置存在所述指令流的多个先前解码的特性的次数,以及
导致基于所述次数在所述位置插入切换点,以在发送针对所述第一解码集群的解码而请求的指令与发送针对所述第二解码集群的解码而请求的指令之间进行切换。
18.如权利要求17所述的装置,其中,所述特性是在所述位置之前以及在所述指令流的解码在所述第一解码集群与所述第二解码集群之间的紧前切换之后从所述指令流解码的微操作的数量。
19.如权利要求17所述的装置,其中,所述特性是在所述位置之前以及在所述指令流的解码在所述第一解码集群与所述第二解码集群之间的紧前切换之后从所述指令流解码的宏操作的数量。
20.如权利要求17所述的装置,其中,所述切换点的插入包括在分支目标缓冲器中分支指令的插入。
21.如权利要求17所述的装置,其中,所述切换点控制电路进一步用于:在所述指令流的随后解码中所述位置之后在阈值数量的指令内遇到现有切换点时,删除作为所述候选切换点的所述位置。
22.如权利要求17所述的装置,其中,所述特性是所述位置之前从所述指令流解码的微操作的数量。
23.如权利要求17所述的装置,其中,所述切换点控制电路包括计时器,并且在从所述计时器跟踪时间超过阈值时间之后,停止跟踪所述位置存在所述指令流的多个先前解码的所述特性的所述次数。
24.如权利要求17-23中任一项所述的装置,其中,所述切换点控制电路确定多个候选切换点,并跟踪每个相应位置存在所述指令流的多个先前解码的相应特性的相对应次数。
CN202211165487.XA 2021-09-24 2022-09-23 集群化解码管线的可缩放切换点控制电路系统 Pending CN115858022A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/484,969 US20230099989A1 (en) 2021-09-24 2021-09-24 Scalable toggle point control circuitry for a clustered decode pipeline
US17/484,969 2021-09-24

Publications (1)

Publication Number Publication Date
CN115858022A true CN115858022A (zh) 2023-03-28

Family

ID=82846295

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211165487.XA Pending CN115858022A (zh) 2021-09-24 2022-09-23 集群化解码管线的可缩放切换点控制电路系统

Country Status (4)

Country Link
US (1) US20230099989A1 (zh)
EP (1) EP4155915B1 (zh)
JP (1) JP2023047283A (zh)
CN (1) CN115858022A (zh)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5794068A (en) * 1996-03-18 1998-08-11 Advanced Micro Devices, Inc. CPU with DSP having function preprocessor that converts instruction sequences intended to perform DSP function into DSP function identifier
US11200058B2 (en) * 2014-05-07 2021-12-14 Qualcomm Incorporated Dynamic load balancing of hardware threads in clustered processor cores using shared hardware resources, and related circuits, methods, and computer-readable media
US10331454B2 (en) * 2016-09-29 2019-06-25 Intel Corporation System and method for load balancing in out-of-order clustered decoding

Also Published As

Publication number Publication date
EP4155915B1 (en) 2024-04-17
US20230099989A1 (en) 2023-03-30
EP4155915A1 (en) 2023-03-29
JP2023047283A (ja) 2023-04-05

Similar Documents

Publication Publication Date Title
US11379229B2 (en) Apparatus and method for adaptable and efficient lane-wise tensor processing
Thomadakis The architecture of the Nehalem processor and Nehalem-EP SMP platforms
JP6143872B2 (ja) 装置、方法、およびシステム
US11093250B2 (en) Apparatus and method for gang invariant operation optimizations using dynamic evaluation
US20190004810A1 (en) Instructions for remote atomic operations
US10831505B2 (en) Architecture and method for data parallel single program multiple data (SPMD) execution
US10713053B2 (en) Adaptive spatial access prefetcher apparatus and method
US10915328B2 (en) Apparatus and method for a high throughput parallel co-processor and interconnect with low offload latency
US11188341B2 (en) System, apparatus and method for symbolic store address generation for data-parallel processor
EP4020189A1 (en) Methods, systems, and apparatuses for a scalable reservation station implementing a single unified speculation state propagation and execution wakeup matrix circuit in a processor
EP3767462A1 (en) Detecting a dynamic control flow re-convergence point for conditional branches in hardware
CN113535236A (zh) 基于指令集体系结构的和自动的加载跟踪的方法和装置
US12019553B2 (en) System, apparatus and method for prefetching physical pages in a processor
CN114661434A (zh) 用于难以预测的分支的替代路径解码
CN114661358A (zh) 基于分支指令信息来访问分支目标缓冲器
US20220100500A1 (en) Methods, systems, and apparatuses for out-of-order access to a shared microcode sequencer by a clustered decode pipeline
CN113849222A (zh) 流水线化乱序页未命中处理程序
US20230101512A1 (en) Shared prefetch instruction and support
US20220206945A1 (en) Adaptive remote atomics
EP3757772A1 (en) System, apparatus and method for a hybrid reservation station for a processor
CN113568663A (zh) 代码预取指令
EP4155915B1 (en) Scalable toggle point control circuitry for a clustered decode pipeline

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication