CN114327635A - 用于处理器的非对称执行端口和分配宽度的可缩放端口绑定的方法、系统和装置 - Google Patents

用于处理器的非对称执行端口和分配宽度的可缩放端口绑定的方法、系统和装置 Download PDF

Info

Publication number
CN114327635A
CN114327635A CN202110989172.6A CN202110989172A CN114327635A CN 114327635 A CN114327635 A CN 114327635A CN 202110989172 A CN202110989172 A CN 202110989172A CN 114327635 A CN114327635 A CN 114327635A
Authority
CN
China
Prior art keywords
allocation
execution
port
circuitry
micro
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
CN202110989172.6A
Other languages
English (en)
Inventor
D·徐
V·阿加瓦尔
J·埃斯珀
K·亚历山大
A·帕兰杰佩
J·库姆斯
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 CN114327635A publication Critical patent/CN114327635A/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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • 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
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Mathematical Physics (AREA)

Abstract

描述了用于处理器的非对称执行端口和分配宽度的可缩放端口绑定的系统、方法和装置。一种硬件处理器核包括:解码器电路,用于将指令解码为一个或多个微操作的集合;指令解码队列,用于存储一个或多个微操作的集合;多个不同类型的执行电路,各自包括相应的输入端口和相应的输入队列;以及分配电路,包括多个分配通道,分配电路用于:针对微操作的输入,生成占用的经排序列表,生成输入端口到多个分配通道的预绑定映射,当来自分配通道的微操作的类型与预绑定映射中的输入端口的执行电路的类型不匹配时,滑动预绑定映射,使得输入端口映射到具有匹配类型的微操作的分配通道,以生成最终映射,以及根据最终映射将输入端口绑定到多个分配通道。

Description

用于处理器的非对称执行端口和分配宽度的可缩放端口绑定 的方法、系统和装置
技术领域
本公开总体上关于电子学,更具体地,本公开的实施例关于用于实现处理器的非对称执行端口和分配宽度的可缩放端口绑定的电路。
背景技术
处理器或处理器集合执行来自指令集(例如,指令集架构(ISA))的指令。指令集是计算机架构的关于编程的部分,并且一般包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置以及外部输入和输出(I/O)。应当注意,术语指令在本文中可指宏指令或指微指令,宏指令例如,提供给处理器以供执行的指令,微指令例如,由处理器的解码器对宏指令进行解码得到的指令。
附图说明
在所附附图中以示例方式而非限制方式图示本公开,在附图中,类似的附图标记指示类似的要素,其中:
图1图示根据本公开的实施例的具有包括端口绑定电路的分配电路和多个执行电路的处理器核。
图2图示根据本公开的实施例的示例整数执行电路。
图3图示根据本公开的实施例的示例存储器执行电路。
图4图示根据本公开的实施例的示例浮点/单指令多数据(SIMD)执行电路。
图5图示根据本公开的实施例的端口绑定电路。
图6图示根据本公开的实施例的端口到分配通道的预绑定映射。
图7图示根据本公开的实施例的将第一(例如,整数执行电路)端口集合到分配通道的预绑定映射滑动到最终(例如,实际)映射中。
图8图示根据本公开的实施例的将第二(例如,存储器执行电路)端口集合到分配通道的预绑定映射滑动到最终(例如,实际)映射中。
图9图示根据本公开的实施例的将第三(例如,浮点执行电路)端口集合到分配通道的预绑定映射滑动到最终(例如,实际)映射中。
图10图示根据本公开的实施例的利用静态绑定微操作将端口集合到分配通道的预绑定映射滑动到最终(例如,实际)映射中。
图11是图示根据本公开的实施例的用于将执行电路的端口绑定到分配通道的操作的流程图。
图12A是图示根据本公开的实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线的框图。
图12B是图示根据本公开的实施例的要包括在处理器中的有序架构核的示例性实施例和示例性寄存器重命名的乱序发布/执行架构核的框图。
图13A是根据本公开的实施例的单个处理器核以及其到管芯上互连网络的连接以及它的第二级(L2)高速缓存的本地子集的框图。
图13B是根据本公开的实施例的图13A中的处理器核的部分的展开图。
图14是根据本公开的实施例的可具有多于一个的核、可具有集成存储器控制器、并且可具有集成图形器件的处理器的框图。
图15是根据本公开的一个实施例的系统的框图。
图16是根据本公开的实施例的更具体的示例性系统的框图。
图17所示的是根据本公开的实施例的第二更具体的示例性系统的框图。
图18所示的是根据本公开的实施例的芯片上系统(SoC)的框图。
图19是根据本公开的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
在下列描述中,阐述了众多具体细节。然而,应当理解,可在没有这些具体细节的情况下实施本公开的实施例。在其他实例中,未详细示出公知的电路、结构和技术,以免使对本描述的理解模糊。
说明书中对“一个实施例”、“实施例”、“示例实施例”等的引用指示所描述的实施例可包括特定的特征、结构或特性,但是每个实施例可以不一定包括该特定的特征、结构或特性。而且,此类短语不一定是指同一实施例。此外,当结合实施例描述特定的特征、结构或特性时,认为结合无论是否被明确描述的其他实施例而影响此类特征、结构或特性是在本领域技术人员的知识范围之内的。
(例如,具有一个或多个核的)(例如,硬件)处理器可执行(例如,用户级)指令(例如,指令线程)以对数据进行操作,从而例如执行算术、逻辑或其他功能。例如,软件可以包括提供给处理器(例如,其一个或多个核)的多条指令(例如,宏指令),该处理器随后执行(例如,解码和执行)多条指令以执行相应的操作。在某些实施例中,处理器包括电路(例如,一个或多个解码器电路),以将指令转换(例如,解码)成一个或多个微操作(μop或微操作),例如,其中这些微操作直接由硬件(例如,由执行电路)执行。与指令(例如,宏指令)对应的一个或多个微操作可以称为用于该指令的微代码流。微操作可以称为微指令,例如,由处理器对宏指令进行解码得到的微指令。在一个实施例中,指令是指令集架构(ISA)的64位和/或32位指令。在一个实施例中,指令是
Figure BDA0003231896190000031
指令集架构(ISA)的(例如,64位和/或32位)指令。在某些实施例中,将指令转换成一个或多个微操作与处理器的流水线的指令取出和/或解码部分相关联。
在某些处理器中,要被执行的操作(例如,微操作)由对用于操作的执行资源进行分配的电路(例如,分配电路)调度以供执行。分配电路可以是处理器的调度器电路的一部分。在某些实施例中,分配电路负责:(i)跟踪微操作(μop)的依赖性链,和/或(ii)(例如,最优地)基于每个端口的功能跨执行端口调度微操作(μop)。
在某些实施例中,为了使分配电路最优地调度微操作(μop),要知晓准备好被调度的所有微操作(μop)(例如,在每个周期),并且然后应用最好的调度选项,使得这可使执行流水线(例如,执行端口)利用最大化。在某些实施例中,由分配电路进行该动态调度是非常硬件密集的并且是时序关键的,并且不可随着执行流水线(例如,端口)的增加而缩放,并且将其限制为统一结构。为了解决该问题并且摆脱动态执行流水线(例如,端口)选择,另一选项是早期在流水线中将微操作(μop)绑定到特定执行端口,使得分配电路仅在被绑定到特定流水线的微操作(μop)之间挑选,例如,从而使得分配电路的工作集中于跟踪依赖性链和将微操作调度至指定端口。例如,这可被称为端口绑定,但是针对端口绑定的折衷为性能,例如,端口绑定方案能多接近地模仿动态调度。端口绑定可以在分配时被执行,例如,其中分配电路(例如,分配流水线)知晓每个微操作(μop)的类型以及这些微操作可以在哪个执行流水线(例如,端口)上执行。
在某些实施例中,分配方案用于将微操作(μop)分配到执行电路的最少占用的(多个)输入端口(例如,基于端口占用数据)。在某些实施例中,分配方案用于按循环顺序(例如,“轮询”)(例如,并且不基于端口占用数据)将微操作(μop)分配到执行电路的(多个)输入端口。两种方案都具有它们自己的缺陷。例如,当存在很少(例如,狭窄)的执行和分配流水线时,例如,其中对于每个分配周期,分配电路试图将正在被调度的所有微操作(μop)推入最少占用的(多个)端口,分配到最少占用的端口可以起作用。然而,在此类实施例中,分配电路可能不知道其他端口是否没有要调度的内容或关于其他端口的任何占用信息(例如,并且对于具有更多分配通道和更多执行流水线的微架构是不可缩放的)。此类实施例可能导致向执行流水线(例如,端口)的暂时不平衡的工作负荷分发,并且因此没有高效地使用执行流水线(例如,端口)。例如,循环顺序分配(例如,“轮询”)试图均匀地分发工作,但是可能未考虑到端口的耗尽速率,并且因此不具有对依赖性链如何解析的可见性,例如,从而导致对执行流水线(例如,端口)的非最优使用,这导致性能降级。
本文中的某些实施例利用对上述两种方案进行改进的单个分配方案,例如,随分配宽度而可缩放并且提高执行流水线(例如,端口)利用从而产生高得多的性能的单个分配方案。本文中的某些实施例利用单个分配方案(例如,用于端口绑定或端口亲和性(affinity)),该单个分配方案利用端口占用信息、循环顺序分配、和滑动。
在单个分配方案的某些实施例中,端口占用信息是基于占用而创建的执行端口的预排序列表。在一个实施例中,在排序时,某些试探法被应用以对某些端口进行掩蔽和/或将所有操作分配到特定的(例如,单个)端口。端口占用信息可能是陈旧的,从而允许排序和掩蔽跨一个或多个周期被分发以减少时序关键性。
在单个分配方案的某些实施例中,预排序列表然后按循环顺序(例如,“轮询”方式)被预映射到分配通道,例如,使得每个分配通道具有预指派的端口编号。
在单个分配方案的某些实施例中,在分配期间,如果要被分配的微操作(μop)的类型与端口的类型(例如,与那个端口对应的执行电路的类型)匹配,则该预排序列表用于绑定,并且如果不匹配,则分配电路用于例如基于一些试探法将预排序信息滑动到接下来的分配通道。例如,为了确保排序信息不丢失并且因此能够跨执行端口平衡工作(例如,用于整数端口的绑定针对存储器相关的微操作(μop)和/或浮点微操作(μop)而滑动)。在此,实施例因此通过以下方式来提供一种用于两个关键问题的方案:(i)提供随着增加的分配带宽(例如,分配通道的数量)的端口绑定的可缩放性,例如,使得此类端口绑定在硬件中可实现并且可缩放,以及(ii)对增大数量的执行端口(例如,非对称端口、静态(例如,绑定到单个执行端口)、部分动态(例如,执行端口的合适子集)、和完全动态(例如,所有执行端口))平衡工作,这产生性能提高。
图1图示根据本公开的实施例的具有包括端口绑定电路142的分配电路138和多个执行电路140的处理器核100。多个执行电路140可以包括多个不同类型的执行电路,例如,整数类型的(多个)执行电路(例如,如参照图2所讨论的)、存储器类型的(多个)执行电路(例如,如参照图3所讨论的)、浮点类型的(多个)执行电路(例如,如参照图4所讨论的)、单指令多数据(SIMD)(例如,向量)类型的(多个)执行电路(例如,如参照图4所讨论的)、或其任意组合。执行电路140可以包括:(i)具有对应的整数端口144(分别为被标记的端口P0、P1、P2和P3)的一个或多个整数类型的执行电路150A、150B、150C和150D的集合(尽管示出为具有四个端口和四个对应的这种类型的执行电路,但是在某些实施例中,可以利用任意单个或多个端口和执行电路),(ii)具有对应的存储器端口146(分别为被标记的端口P4、P5和P6)的一个或多个存储器类型的执行电路152A、152B和152C的集合(尽管示出为具有三个端口和三个对应的这种类型的执行电路,但是在某些实施例中,可以利用任意单个或多个端口和执行电路),和/或(iii)具有对应的浮点/SIMD端口148(分别为被标记的端口P7、P8和P9)的一个或多个浮点类型和/或SIMD类型的执行电路154A、154B和154C的集合(尽管示出为具有三个端口和三个对应的这种类型的执行电路,但是在某些实施例中,可以利用任意单个或多个端口和执行电路)。
要被执行的操作(例如,来自解码器电路120A-122A和/或解码器电路120B-122B的微操作)可以被从分配通道136(例如,其可以是任意多个,例如,大于端口的数量、等于端口的数量、和/或小于端口的数量)经由端口144、146和/或148发送至执行电路140。在某些实施例中,分配通道的数量被称为分配宽度,例如,(例如,来自指令解码队列124A和/或指令解码队列124B的)可以被分配的微操作的数量。
在某些实施例中,分配电路138被包括以用于针对分配通道136上的传入的微操作(例如,在同一(例如,单个)周期中在分配通道136上传入的微操作)来分配执行电路140。在某些实施例中,端口绑定电路142被包括以用于将分配通道绑定到执行电路140的端口中的一个或多个端口。端口绑定电路142可以利用(例如,单个)分配方案(例如,用于端口绑定),该分配方案利用端口占用信息、循环顺序分配、和滑动。参照图5进一步讨论示例端口绑定电路142。
处理器核100可以是例如系统的处理器的多个核中的一个核。处理器核100可以包括分支预测器102(例如,用于预测要由处理器核100执行的代码(例如,指令)的一个或多个分支)。在某些实施例中,分支预测器102(例如,分支预测器电路)从分支的过往行为中学习以预测接下来的(例如,传入的)分支。在某些实施例中,分支预测器102将(例如,按照原始程序顺序连续的)指令的合适子集预测为代码块(例如,以分支指令结束)。作为一个示例,处理器核100可以接收要执行的代码,并且作为响应,可将代码划分为块。
在某些实施例中,处理器核100(例如,经由取出电路104和/或分支预测器102)可以将指令块发送至解码集群,例如,其中第一指令块被发送至解码集群0 108A,(按程序顺序接下来的(例如,更年轻的))第二指令块被发送至解码集群N 108B,等等。在两个集群的示例中,第三(按程序顺序接下来的(例如,更年轻的))指令块可以被发送至接下来可用的解码集群(例如,在该解码集群已经完成对其当前指令块的解码后)。在两个集群的示例中,第三(按程序顺序接下来的(例如,更年轻的))指令块可以被发送至接下来的解码集群(例如,在该示例中发送至解码集群108A)。尽管示出两个解码集群108A-108B,但是应当理解,可以利用三个或更多个集群(例如,其中“N”是大于一的正整数)。
在某些实施例中,每个解码集群包括能够相对于彼此乱序地对不同的基本代码块解码的两个或更多个(例如,超标量x86)指令解码器,例如,其中解码集群108A包括第一解码器电路120A(例如,解码器)和第二解码器电路122A(例如,解码器),并且解码集群108B包括第二解码器电路120B(例如,解码器)和第二解码器电路122B(例如,解码器)。
在某些实施例中,处理器核100的分支预测器102将代码划分为(例如,来自程序的连续指令的集合的)各个块。在某些实施例中,处理器核100的取出电路104将代码划分为(例如,来自程序的连续指令的集合的)各个块。然后,各个代码块可以被发送至它们相应的解码集群以供解码,例如,其中每个代码块的要被解码的指令被存储在相应的指令数据队列(例如,作为解码集群108A的输入队列的指令数据队列110A和作为解码集群108B的输入队列的指令数据队列110B)中。
可选地,处理器核100包括(例如,第一级)指令高速缓存106,以例如对一条或多条指令进行高速缓存而不必从存储器加载它们。在某些实施例中,取出电路104经由指令高速缓存106将代码块发送至它们相应的解码集群。指令高速缓存106可以包括指令高速缓存标签和/或指令转换后备缓冲器(TLB)。在某些实施例中,一旦代码块被发送至它们对应的解码集群108A-108B,每个解码集群就开始并行地对代码块解码(例如,经由其中的并行解码器电路)。在某些实施例中,解码集群彼此独立地操作,因此代码块可以被乱序地解码(例如,不按程序顺序)。
在某些实施例中,分配电路138负责例如按合适的程序顺序将操作(例如,微操作)分配给执行电路140(例如,执行单元)。
处理器核描绘具有第一集合112A中的多个解码器电路120A-122A的第一解码集群108A和具有第二集合112B中的多个解码器电路120B-122B的第二解码集群108B。在某些实施例中,(例如,每个)解码器电路(120A、122A、120B、122B)用于将(例如,宏)指令解码为一个或多个微操作的集合,这些一个或多个微操作要(例如,作为基元)由(多个)执行电路140执行。在某些实施例中,解码器电路(120A、122A、120B、122B)用于在不利用微代码定序器128(例如,与任何解码集群和/或解码器电路分开的微代码定序器)的情况下将某些(例如,宏)指令解码为对应的一个或多个微操作的集合,并且/或者通过利用微代码定序器128(例如,与任何解码集群和/或解码器电路分开的微代码定序器)将其他(例如,宏)指令(例如,复杂指令集计算机(CISC)指令)解码为对应的一个或多个微操作的集合。在一个实施例中,解码器电路(120A、122A、120B、122B)用于在每个周期输出某个数量的微操作(例如,每个周期一个微操作和/或每个周期一个与四个之间数量的微操作)。在某些实施例中,“微代码”指令一般指代按照以下情况的指令:解码集群(例如,解码器的集合)请求微代码定序器128将一个或多个(例如,多个)微操作(μop)的对应集合从微代码定序器存储器130(例如,只读存储器(ROM))加载到解码流水线中(例如,解码到对应的指令解码队列中),例如,而不是直接由解码器电路产生该指令的一个或多个微操作的集合。例如,为了实现一些(例如,复杂的)(例如,x86)指令,微代码定序器128用于将指令划分为较小(例如,微)操作(也称为微操作或μop)的序列。
在某些实施例中,例如,由于x86的性质和/或建立许多微操作的定序器的需要,出于许多目的利用微代码定序器并且其产生包含众多(例如,数万个)微操作的结构。在某些实施例中,由于这些微操作序列需要大量的存储(例如,大于100千比特(KB)),因此微代码定序器128被物理地建立为单个(例如,读取)端口存储器130(例如,ROM)阵列,例如,其中解码集群共享微代码定序器的该单个读取端口。在某些实施例中,代替对微代码定序器128进行复制,共享微代码定序器128是显著的管芯面积节约,例如,因为微代码定序器128的面积大于解码集群中的一个解码集群的面积。
由于一些(例如,x86)指令可以映射到众多(例如,数十、数百等)对应的微操作(例如,并且这些序列中的一些序列要求使指令在架构上串行化的行为,例如,该一些序列强制任何更老的指令完成并且阻止任何更年轻的指令开始),一旦解码集群将控制传递到微代码定序器128中,该解码集群就必须等待直到该指令的微操作序列完成(例如,并且微代码定序器将控制释放回到解码集群)。在某些实施例中,微代码定序器128一次对单个解码集群的访问进行仲裁。
在某些实施例中,每个解码集群(例如,一些实施例中的每个解码器电路)包括数据结构,该数据结构用于存储一条或多条指令的到微代码定序器128的存储器130中的对应的进入点值(例如,地址)和/或多个位(例如,用于生成指令的对应微操作的周期的数量和/或指令的微操作的数量)。例如,(1)其中解码集群108A的数据结构114A包括一个或多个条目,这些条目各自指示(例如,用于单条指令的)用于指令的进入点116A,和/或(2)其中解码集群108B的数据结构114B包括一个或多个条目,这些条目各自指示(例如,用于单条指令的)用于指令的进入点116B。在某些实施例中,数据结构114A和数据结构114B是彼此的副本,例如,它们包括相同的数据。在一个实施例中,数据结构114A和数据结构114B在制造时被加载它们的数据。在一个实施例中,数据结构114A和数据结构114B在处理器引导期间被加载它们的数据,例如,通过执行基本输入/输出系统(BIOS)固件或统一可扩展固件接口(UEFI)固件。
在(例如,由解码器电路或微代码定序器)将指令解码为其相应的微操作之后,在某些实施例中,这些微操作被存储在指令解码队列中。在图1中(例如,在解码级的末尾),解码集群108A包括指令解码队列124A(例如,指令队列),指令解码队列124A接收来自解码器电路120A-122A和来自微代码定序器128(例如,当解码集群108A被仲裁对存储器130的访问时)的相应微操作,并且解码集群108B包括指令解码队列124B(例如,指令队列),指令解码队列124B接收来自解码器电路120B-122B和来自微代码定序器128(例如,当解码集群108B被仲裁对存储器130的访问时)的相应微操作。可选地,开关134被包括以将指令解码队列124A-124B的(多个)输出耦合至分配电路138的分配通道136(例如,(多个)输入)。在某些实施例中,分配电路138用于将来自指令解码队列124A-124B的微操作(例如,按程序顺序)发送至执行电路140中的执行电路。在一个实施例中,一个或多个指令解码队列不按程序顺序加载但是按程序顺序读取。某些执行电路140(例如,存储器执行电路152A-152B)可以访问存储,例如,寄存器156和/或数据高速缓存158(例如,一个或多个级别的高速缓存层级结构)。一旦结果由执行电路140生成,引退电路138然后可以引退对应的指令。
图2图示根据本公开的实施例的示例整数执行电路150(例如,作为图1中的执行电路150A、150B、150C和/或150D的实例)。整数执行电路150包括用于接收要由执行电路(例如,算术逻辑单元(ALU)208、整数乘法器210、整数除法器212、移位器214、和/或分支216)执行的一个(或多个)微操作的(例如,单个)端口202、以及例如到(多个)整数寄存器156A的耦合。在某些实施例中,整数执行电路150包括用于存储正在等待被执行的一个或多个微操作的输入队列204、以及例如用于指示输入队列204内的占用(或空缺)的占用计数器206。
图3图示根据本公开的实施例的示例存储器执行电路152(例如,作为图1中的执行电路152A、152B和/或152C的实例)。存储器执行电路152包括用于接收要由执行电路(例如,地址生成电路308)执行的一个(或多个)微操作的(例如,单个)端口302、以及例如到(多个)寄存器156和/或数据高速缓存158的耦合。在某些实施例中,存储器执行电路152包括用于存储正在等待被执行的一个或多个微操作的输入队列304、以及例如用于指示输入队列304内的占用(或空缺)的占用计数器306。
图4图示根据本公开的实施例的示例浮点/SIMD执行电路154(例如,作为图1中的执行电路154A、154B和/或154C的实例)。浮点/SIMD执行电路154包括用于接收要由执行电路(例如,算术逻辑单元(ALU)408、浮点和/或SIMD乘法器410、浮点和/或SIMD除法器412、浮点和/或SIMD加法器414、混洗器416、和/或加密(例如,引擎)418)执行的一个(或多个)微操作的(例如,单个)端口402、以及例如到(多个)向量寄存器156B的耦合。在某些实施例中,浮点/SIMD执行电路154包括用于存储正在等待被执行的一个或多个微操作的输入队列404、以及例如用于指示输入队列404内的占用(或空缺)的占用计数器406。
在某些实施例中,浮点格式是十六位宽电气与电子工程师协会(IEEE)(例如,IEEE754标准)半精度二进制浮点格式(IEEE float16),其具有符号字段(一位宽)、指数字段(五位宽)、和尾数(有效数字精度)字段(隐式地存储的十一位,即,显式地存储的十位宽)。在某些实施例中,浮点格式是十六位宽脑浮点格式(bfloat16),其具有符号字段(一位宽)、指数字段(八位宽)、和尾数(有效数字精度)字段(隐式地存储的八位,即,显式地存储的七位宽)。在某些实施例中,假定尾数(有效数字精度)字段具有值为一的隐式前导位,除非指数字段存储有全零。在某些实施例中,浮点格式是三十二位宽浮点格式,例如,binary32(根据IEEE标准),其有时被称为“单精度”或“fp32”,例如,具有符号字段(一位宽)、指数字段(八位宽)、和尾数(有效数字精度)字段(隐式地存储的二十四位,即,显式地存储的二十三位宽)。
图5图示根据本公开的实施例的端口绑定电路142。在某些实施例中,端口绑定电路142包括用于排序504、优化506、预绑定508、和滑动512的逻辑电路以生成最终端口绑定。
在某些实施例中,端口绑定电路142用于在相同类型的执行端口之间平衡微操作(μop)。在一个实施例中,端口绑定电路例如通过以下方式使绑定相比较多占用的端口而朝向较少占用的端口偏置:使用(例如,来自执行电路的一个或多个占用计数器的)端口占用信息;基于占用来排序504(例如,包括有条件地将(多个)端口掩蔽掉或将所有分配通道绑定到一个端口)(例如,包括可并行地执行的非全宽度SIMD(例如,向量)支持)、预绑定508(例如,根据循环顺序(例如,轮询))以用于使用经排序的顺序将分配通道预指派到端口;以及滑动512(例如,针对不同类型的操作(例如,微操作)滑动预绑定顺序)。
在某些实施例中,端口绑定电路包括端口占用502,例如,指示端口占用(例如,来自每个执行电路的对应占用计数器的值)。在某些实施例中,在跨相同类型的执行端口(例如,执行电路)的微操作(μop)的占用中存在不平衡。在某些实施例中,不平衡的原因是依赖性链解析(例如,动态执行行为)和非对称执行电路(例如,与其他对应(多个)端口中的MUL电路相比,可能存在用于某个(些)对应端口的更多ALU)。为了解决该不平衡,某些实施例利用端口绑定电路142。
在某些实施例中,端口绑定电路142包括用于排序504(例如,按端口占用)的电路。在一个实施例中,每个执行端口(例如,图1中的端口P0-P9)维护其自己的占用计数器(例如,如图2、图3和图4中所示),该占用计数器指示有多少微操作(μop)被绑定到该端口(例如,利用该端口的相应输入队列来存储)。在一个实施例中,用于排序的占用计数器值可以是陈旧的,例如,使得实现方式是时序友好且可缩放的。在某些实施例中,用于排序504的电路使用端口占用502信息来生成占用的经排序(例如,预排序)列表,例如,具有首先朝向较少占用的端口的偏置。
本文中讨论了某些示例,并且应当理解,本文中利用的数字可以是示例并且是非限制性的。
在一个示例中,参考图1,存在4个整数端口144(P0、P1、P2、P3),并且它们的占用为6、5、4、8(例如,被绑定的微操作),因此占用的经排序列表(例如,按增加的占用的顺序)为P2、P1、P0、P3(例如,单个类型的端口)。
作为一个选项,端口绑定电路142(例如,用于优化506的电路)有条件地掩蔽掉一个或多个端口,例如,使得这些(多个)端口不被绑定到分配通道(例如,对于该分配周期)。例如,当占用不平衡在执行端口之间发生时,某个(些)端口比其他端口被更多(例如,显著更多)地占用。在此类情形下,到该端口的任意更多绑定可能使不平衡问题更恶劣,因此用于优化506的电路可以掩蔽掉该端口(例如,将其从经排序列表排除)。
在一个示例中,参考图1,存在4个整数端口144(P0、P1、P2、P3),并且它们的占用为6、5、15、7(例如,被绑定的微操作),因此占用的经排序列表(例如,按增加的占用的顺序)为P1、P0、P3、P2(例如,单个类型的端口)。然而,由于P2的占用(“15”)比其他端口更高(例如,显著更高),因此P2被掩蔽掉,因此经优化的占用的经排序列表(例如,按增加的占用的顺序)为P1、P0、P3。注意,掩蔽掉操作可以取决于特定核的实现方式。在某些实施例中,具有高于阈值506A(例如,阈值占用)的占用的任何端口被掩蔽掉,例如,如果在以上示例中阈值为8,则端口P2被掩蔽掉。在某些实施例中,具有多个端口中的最大占用的单个端口被掩蔽掉,例如,端口P2被掩蔽掉,因为其具有那些端口(例如,单个类型的端口)中的最大占用。
作为另一选项,端口绑定电路142(例如,用于优化506的电路)除了一个端口之外掩蔽掉所有端口,例如,使得那些其他(多个)端口不被绑定到分配通道(例如,对于该分配周期)。例如,当一个端口的占用显著低于其他端口时。在此类情形下,用于优化506的电路用于将(例如,对应分配通道上的)所有传入的微操作绑定到多个端口(例如,单个类型的端口)中的单个端口。在一个示例中,参考图1,存在4个整数端口144(P0、P1、P2、P3),并且它们的占用为13、14、3、14(例如,被绑定的微操作),因此占用的经排序列表(例如,按增加的占用的顺序)为P2、P0、P1、P3(例如,单个类型的端口)。然而,由于P2的占用(“3”)比其他端口更低(例如,低得多),因此P1、P2和P3被掩蔽掉,并且(例如,对应分配通道上的)所有微操作被绑定到P2。
作为又一选项,端口绑定电路142(例如,用于优化506的电路)允许(例如,非全宽度)SIMD(例如,向量)指令(例如,多个对应微操作)并行地执行。例如,SIMD型指令可以被解码为可以在多个执行端口处被并行地执行的多个微操作。为了通过利用并行性实现最大性能,在某些实施例中,端口绑定电路142(例如,用于优化506的电路)将每个微操作(例如,作为指令的子操作)绑定到不同执行端口。在某些实施例中,SIMD执行端口由端口绑定电路142(例如,用于优化506的电路)分开地管理,按照占用来排序,并且该排序用于预绑定。在某些实施例中,上文的“全部到一个端口”优化不对SIMD指令应用,例如,以防止SIMD指令的多个微操作(例如,该指令的子操作)被绑定到同一端口。在一个示例中,参照图1,存在3个SIMD端口148(P7、P8、P9),这些端口按占用被排序为P8、P7、P9,并且单条SIMD型指令为2个微操作(例如,2个子操作),使得两个微操作(例如,子操作)中的第一个被绑定到P8,而两个微操作(例如,子操作)中的第二个被绑定到接下来(例如,接下来最少占用)的端口,该端口为P7。通过将单条指令的两个微操作(例如,子操作)绑定到不同端口,这两个微操作(例如,子操作)实现并行执行机会。
在某些实施例中,在占用的(多个)经排序列表(例如,针对每种类型的端口)被生成之后,用于预绑定508的电路被执行以基于分配通道信息510(例如,指示分配通道的数量的信息)将分配通道(例如,图1中的分配通道136,示出为四个,但是任何一个或多个都是可能的)预绑定到某些端口,例如,如图6中所示,静态地预绑定每个分配通道。在分配宽度大于按经排序顺序的执行端口的数量的情形下,经排序顺序随后再次从开头开始(例如,作为另一轮询)以完成对所有分配通道的预绑定。
图6图示根据本公开的实施例的端口604到分配通道602的预绑定映射600。例如,如果分配宽度为6而经排序顺序(例如,占用的经排序列表)为P2、P0、P1、P3,则预绑定映射为:通道0到P2、通道1到P0、通道2到P2、通道3到P3,并且按循环顺序,以通道4到P2、通道5到P0等等重新开始。可以针对每种类型的端口(例如,此处示出针对图1中的整数端口P0到P3)或者一次针对所有类型的端口(例如,图1中的端口P0到P9)完成此类预绑定。
在某些实施例中,预绑定尚未考虑操作类型(例如,对于在分配通道上传入的操作),例如,操作类型可以是不同类型(例如,并且不要求全部是相同类型)。
在某些实施例中,端口绑定电路142包括用于滑动512的电路(例如,基于来自分配通道的指令/操作信息514)。在一个实施例中,信息514指示(例如,针对每个通道的)每个传入微操作的类型(例如,整数、存储器、浮点、SIMD等)。在其中预绑定不考虑每个分配通道的操作类型的实施例中,因此预绑定的端口可能不能执行从其预绑定的分配通道传入的微操作。例如,预绑定映射可以包括来自分配通道的存储器类型的微操作到不能进行存储器操作的端口(例如,整数执行电路的端口)的映射。本文中的某些实施例允许将预绑定顺序滑动到接下来(例如,按物理通道顺序,但是未排序)的分配通道,例如,其中滑动继续,直到其满足合适类型的操作(或直到所有端口对匹配进行尝试)。
在某些实施例中,由于假设所有(例如,六个作为一个示例)分配通道在这些分配通道中的每一个分配通道上具有相同类型的微操作(例如,整数、存储器、浮点或SIMD中的一种)(例如,假设六宽度分配),预绑定(例如,映射)被安排,因此滑动发生,例如,并且因此每个分配通道有一个预绑定的副本(例如,每种类型具有其自己的副本)。在某些实施例中,例如,其中在分配期间,当存在类型不匹配时,针对不匹配的类型滑动预绑定,以便不丢失预绑定信息。
在某些实施例中,对于多个类型中的每个类型存在一个预绑定(例如,映射)。例如,在某些实施例中,如果存在三种不同类型的操作(例如,整数、存储器和浮点),则存在三个预绑定(每种类型一个)。在某些实施例中,独立地维护对每个预绑定(例如,映射)的滑动。
在某些实施例中,用于滑动512的电路执行对每种类型的端口(例如,对于同一列表的通道)的滑动。
图7图示根据本公开的实施例的将第一(例如,整数执行电路)端口(例如,图1中的端口P0到P3)集合到分配通道702的预绑定映射706滑动700到最终(例如,实际)映射708中。在一个示例中,被绑定的端口是整数端口(例如,用于整数执行电路)并且按经排序顺序P2、P0、P1、P3,用于滑动512的电路检查分配通道0到来自预绑定706的端口P2的绑定,并且确定分配通道0具有与P2的目标端口类型(例如,此处为整数端口)相同的(例如,如由微操作的字段指示的)类型(例如,整数类型)的微操作(μop)704,并且因此不滑动(例如,实际绑定708与用于该通道的预绑定706匹配)。在所描绘的示例中,用于滑动512的电路检查分配通道1到来自预绑定706的P0的绑定,并且确定分配通道1具有与来自预绑定706的目标端口类型(例如,此处为整数端口)P0不同的类型(例如,浮点(FP)类型)的微操作(μop)704,并且因此试图将通道2滑动至P0,并且这样做成功,因为分配通道2具有与P0的目标端口类型(例如,此处为整数端口)相同的类型(例如,整数类型)的微操作(μop)704。在所描绘的示例中,用于滑动512的电路检查接下来的分配通道3到来自预绑定706的接下来的端口P1的绑定,并且确定分配通道3具有与来自预绑定706的目标端口类型(例如,此处为整数端口)P1不同的类型(例如,存储器(MEC)类型)的微操作(μop)704,并且因此试图将通道4滑动至P1,并且这样做成功,因为分配通道4具有与P1的目标端口类型(例如,此处为整数端口)相同的类型(例如,整数类型)的微操作(μop)。在所描绘的示例中,用于滑动512的电路检查接下来的分配通道5到来自预绑定706的接下来的端口P3的绑定,并且确定分配通道5具有与P3的目标端口类型(例如,此处为整数端口)相同的类型(例如,整数类型)的微操作(μop),并且因此不进一步滑动(例如,实际绑定708与用于该通道的预绑定706不匹配,因为对先前的通道执行了滑动)。例如,并且随着所有通道已经被分析,滑动700完成。
图8图示根据本公开的实施例的将第二(例如,存储器执行电路)端口(例如,端口P4-P6)集合到分配通道802的预绑定映射806滑动800到最终(例如,实际)映射808中。在一个示例中,被绑定的端口是存储器端口(例如,用于存储器执行电路)并且按经排序顺序P6、P4、P5,用于滑动512的电路检查分配通道0到来自预绑定806的端口P6的绑定,并且确定分配通道0具有与来自预绑定806的目标端口类型(例如,此处为存储器端口)P6不同的(例如,如由微操作的字段指示的)类型(例如,整数类型)的微操作(μop)804,并且试图将通道1滑动至P6,并且这样做失败,因为分配通道1具有与P6的目标端口类型(例如,此处为存储器端口)不同的类型(例如,浮点(FP)类型)的微操作(μop)804,并且试图将通道2滑动至P6,并且这样做失败,因为分配通道2具有与P6的目标端口类型(例如,此处为存储器端口)不同的类型(例如,整数类型)的微操作(μop)804,并且因此试图将通道3滑动至P6,并且这样做成功,因为分配通道3具有与P6的目标端口类型(例如,此处为存储器端口)相同的类型(例如,存储器类型)的微操作(μop)。在所描绘的示例中,用于滑动512的电路检查接下来的分配通道4到来自预绑定806的接下来的端口P4的绑定,并且确定分配通道4具有与来自预绑定806的目标端口类型(例如,此处为存储器端口)P4不同的类型(例如,整数类型)的微操作(μop),并且试图将通道5滑动至P4,并且这样做失败,因为分配通道5具有与P4的目标端口类型(例如,此处为存储器端口)不同的类型(例如,整数类型)的微操作(μop)804。例如,并且随着所有通道已经被分析,滑动800完成。
图9图示根据本公开的实施例的将第三(例如,浮点执行电路)端口集合到分配通道902的预绑定映射906滑动到最终(例如,实际)映射908中。在一个示例中,被绑定的端口是浮点端口(例如,用于浮点执行电路)并且按经排序顺序P9、P8、P7,用于滑动512的电路检查分配通道0到来自预绑定906的端口P9的绑定,并且确定分配通道0具有与来自预绑定906的目标端口类型(例如,此处为浮点端口)P9不同的(例如,如由微操作的字段指示的)类型(例如,整数类型)的微操作(μop)904,并且试图将通道1滑动至P9,并且这样做成功,因为分配通道1具有与P9的目标端口类型(例如,此处为浮点端口)相同的类型(例如,浮点类型)的微操作(μop),并且试图将接下来的通道2滑动到来自预绑定906的接下来的端口P8,并且这样做失败,因为分配通道2具有与P8的目标端口类型(例如,此处为浮点端口)不同的类型(例如,整数类型)的微操作(μop)904。在所描绘的示例中,用于滑动512的电路检查接下来的分配通道3到来自预绑定906的端口P8的绑定,并且确定分配通道3具有与来自预绑定906的目标端口类型(例如,此处为浮点端口)P8不同的类型(例如,存储器类型)的微操作(μop),并且试图将通道4滑动至P8,并且这样做失败,因为分配通道4具有与P8的目标端口类型(例如,此处为浮点端口)不同的类型(例如,整数类型)的微操作(μop)904。在所描绘的示例中,用于滑动512的电路检查接下来的分配通道5到来自预绑定906的端口P8的绑定,并且确定分配通道5具有与来自预绑定906的目标端口类型(例如,此处为浮点端口)P8不同的类型(例如,整数类型)的微操作(μop),并且这样做失败,因为分配通道5具有与P8的目标端口类型(例如,此处为浮点端口)不同的类型(例如,整数类型)的微操作(μop)904。例如,并且随着所有通道已经被分析,滑动900完成。
再次转向图5,经更新的(多个)映射然后可以用作(多个)最终绑定,例如,并且对应微操作基于那些(多个)映射从(多个)分配通道被发送至(多个)输入端口,这些映射例如,来自图7的用于图1中的整数端口144的实际绑定708、来自图8的用于图1中的存储器端口146的实际绑定808、以及来自图9的用于图1中的浮点(或SIMD)端口148的实际绑定908。在某些实施例中,端口绑定电路142包括用于端口占用更新516的电路,例如,用于基于该经更新的端口绑定来更新端口占用502。在某些实施例中,用于端口占用更新516的电路用于基于执行电路(例如,图1中的执行电路140)的占用来更新端口占用502(例如,作为对基于来自用于滑动512的电路的经更新的端口绑定来更新端口占用502的附加或替代)。在一个实施例中,用于端口占用更新516的电路用于基于来自执行电路的占用计数器(例如,用于一个或多个整数执行电路的一个或多个占用计数器206、用于一个或多个存储器执行电路的一个或多个占用计数器306、以及用于一个或多个浮点/SIMD执行电路的一个或多个占用计数器406)来更新端口占用502。
图10图示根据本公开的实施例的利用静态绑定微操作将端口集合到分配通道1002的预绑定映射1006滑动1000到最终(例如,实际)映射1008中。在某些实施例中,也将滑动应用于被静态绑定到单个端口的微操作,例如,即使其是相同类型的操作并且因此静态绑定被视为例外情形。
在一个示例中,被绑定的端口是整数端口(例如,用于整数执行电路)并且按经排序顺序P2、P0、P1、P3,用于滑动512的电路检查分配通道0到来自预绑定1006的端口P2的绑定,并且确定分配通道0具有与P2的目标端口类型(例如,此处为整数端口)相同的类型(例如,整数类型)的微操作(μop)1004,并且因此不滑动(例如,实际绑定1008与用于该通道的预绑定1006匹配)。在所描绘的示例中,用于滑动512的电路检查分配通道1到来自预绑定1006的端口P0的绑定,并且确定分配通道1具有与P0的目标端口类型(例如,此处为整数端口)相同的类型(例如,整数类型)的微操作(μop)1004,并且因此不滑动(例如,实际绑定1008与用于该通道的预绑定1006匹配)。在所描绘的示例中,用于滑动512的电路检查分配通道2到来自预绑定1006的P1的绑定,并且确定分配通道1具有与来自预绑定1006的目标端口类型(例如,此处为整数端口)P1相同的类型(例如,整数类型)的微操作(μop)1004,但是该微操作被静态绑定到(例如,不同的)端口,因此这样做失败,并且试图将接下来的通道3滑动至来自预绑定1006的端口P1,并且这样做成功,因为分配通道3具有与P1的目标端口类型(例如,此处为整数)相同的类型(例如,整数类型)的微操作(μop)1004。在所描绘的示例中,用于滑动512的电路检查接下来的分配通道4到来自预绑定1006的接下来的端口P3的绑定,并且确定分配通道4具有与P3的目标端口类型(例如,此处为整数端口)相同的类型(例如,整数类型)的微操作(μop)1004,并且因此不进一步滑动(例如,实际绑定1008与用于该通道的预绑定1006不匹配,因为对先前的通道执行了滑动)。在所描绘的示例中,用于滑动512的电路检查接下来的分配通道5到来自预绑定1006的接下来的端口P2(例如,环绕)的绑定,并且确定分配通道5具有与P2的目标端口类型(例如,此处为整数端口)相同的类型(例如,整数类型)的微操作(μop)1004,并且因此不进一步滑动(例如,实际绑定1008与用于该通道的预绑定1006不匹配,因为对先前的通道执行了滑动)。例如,并且随着所有通道已经被分析,滑动1000完成。
图11是图示根据本公开的实施例的用于将执行电路的端口绑定到分配通道的操作1100的流程图。操作1100中的一些或全部(或本文中描述的其他过程、或变型、和/或其组合)在分配电路(例如,其端口绑定电路)的控制之下被执行。
操作1100包括:在框1102处,利用处理器的一个或多个解码器电路将指令解码为一个或多个微操作的集合,该处理器包括多个不同类型的执行电路(例如,并行地),这些多个不同类型的执行电路各自包括相应的输入端口和相应的输入队列。操作1100进一步包括:在框1104处,在处理器的分配电路的多个分配通道上接收微操作的输入。操作1100进一步包括:在框1106处,由分配电路生成每个输入端口的输入队列的占用的经排序列表。操作1100进一步包括:在框1108处,由分配电路生成按循环顺序的根据经排序列表的多个不同类型的执行电路的输入端口到多个分配通道的预绑定映射。操作1100进一步包括:在框1110处,当来自分配通道的微操作的类型与预绑定映射中的输入端口的执行电路的类型不匹配时,由分配电路滑动预绑定映射,使得输入端口映射到接下来的具有匹配类型的微操作的分配通道,以生成多个不同类型的执行电路的输入端口到多个分配通道的最终映射。操作1100进一步包括:在框1112处,由分配电路根据最终映射将多个不同类型的执行电路的输入端口绑定到多个分配通道。
下文详述可在上文中使用的示例性架构、系统等。
可以根据下列示例来描述所公开的技术的至少一些实施例:
示例1:一种硬件处理器核,包括:
解码器电路,用于将指令解码为一个或多个微操作的集合;
指令解码队列,用于存储所述一个或多个微操作的集合;
多个不同类型的执行电路,各自包括相应的输入端口和相应的输入队列;以及
分配电路,包括耦合至所述指令解码队列并且耦合至所述多个不同类型的执行电路的输入端口的多个分配通道,其中,所述分配电路用于:针对所述多个分配通道上的微操作的输入,生成每个输入端口的输入队列的占用的经排序列表,生成按循环顺序的根据所述经排序列表的所述多个不同类型的执行电路的输入端口到所述多个分配通道的预绑定映射,当来自分配通道的微操作的类型与所述预绑定映射中的输入端口的执行电路的类型不匹配时,滑动所述预绑定(例如,一对一)映射,使得所述输入端口映射到接下来(例如,按核中的物理顺序)的具有匹配类型的微操作的分配通道,以生成所述多个不同类型的执行电路的输入端口到所述多个分配通道的最终映射,以及根据所述最终映射将所述多个不同类型的执行电路的输入端口绑定到所述多个分配通道。
示例2:如示例1所述的硬件处理器核,其中,所述分配电路用于:将具有最多占用的输入队列的端口从输入端口到所述多个分配通道的所述预绑定映射移除。
示例3:如示例1所述的硬件处理器核,其中,所述分配电路用于:将具有高于阈值占用的输入队列的任何端口从输入端口到所述多个分配通道的所述预绑定映射移除。
示例4:如示例1所述的硬件处理器核,其中,所述分配电路用于:标识具有最少占用的输入队列的端口,并且所述预绑定映射用于将所述多个分配通道全部映射到具有所述最少占用的输入队列的端口。
示例5:如示例1所述的硬件处理器核,其中,所述分配电路用于:将单条指令的第一向量微操作绑定到所述多个不同类型的执行电路中的第一向量执行电路的端口,并且将所述单条指令的第二向量微操作绑定到所述多个不同类型的执行电路中的第二向量执行电路的端口。
示例6:如示例1所述的硬件处理器核,其中,所述多个分配通道的数量大于输入端口的数量。
示例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 BDA0003231896190000261
64和IA-32架构软件开发者手册;并且参见2018年10月的
Figure BDA0003231896190000262
架构指令集扩展编程参考)。
示例性核架构、处理器和计算机架构
处理器核能以不同方式、出于不同的目的、在不同的处理器中实现。例如,此类核的实现可以包括:1)旨在用于通用计算的通用有序核;2)旨在用于通用计算的高性能通用乱序核;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可包括:1)CPU,其包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个或多个通用乱序核;以及2)协处理器,其包括旨在主要用于图形和/或科学(吞吐量)的一个或多个专用核。此类不同的处理器导致不同的计算机系统架构,这些计算机系统架构可包括:1)在与CPU分开的芯片上的协处理器;2)在与CPU相同的封装中但在分开的管芯上的协处理器;3)与CPU在相同管芯上的协处理器(在该情况下,此类协处理器有时被称为专用逻辑或被称为专用核,该专用逻辑诸如,集成图形和/或科学(吞吐量)逻辑);以及4)芯片上系统,其可以将所描述的CPU(有时被称为(多个)应用核或(多个)应用处理器)、以上描述的协处理器和附加功能包括在同一管芯上。接着描述示例性图形处理器。随后是示例性核架构和示例性处理器和计算机架构的描述。
示例性核架构
有序和乱序核框图
图12A是图示根据本公开的各实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线的框图。图12B是示出根据本公开的各实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核的框图。图12A-图12B中的实线框图示有序流水线和有序核,而虚线框的任选增加图示寄存器重命名的、乱序发布/执行流水线和核。考虑到有序方面是乱序方面的子集,将描述乱序方面。
在图12A中,处理器流水线1200包括取出级1202、长度解码级1204、解码级1206、分配级1208、重命名级1210、调度(也被称为分派或发布)级1212、寄存器读取/存储器读取级1214、执行级1216、写回/存储器写入级1218、异常处置级1222和提交级1224。
图12B示出处理器核1290,该处理器核1290包括前端单元1230,该前端单元1230耦合到执行引擎单元1250,并且前端单元1230和执行引擎单元1250两者都耦合到存储器单元1270。核1290可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核、或混合或替代的核类型。作为又一选项,核1290可以是专用核,诸如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核,等等。
前端单元1230包括分支预测单元1232,该分支预测单元1232耦合到指令高速缓存单元1234,该指令高速缓存单元1234耦合到指令转换后备缓冲器(TLB)1236,该指令转换后备缓冲器1236耦合到指令取出单元1238,该指令取出单元1238耦合到解码单元1240。解码单元1240(或解码器或解码器单元)可对指令(例如,宏指令)解码,并且生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元1240可使用各种不同的机制来实现。合适机制的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核1290包括存储用于某些宏指令的微代码的微代码ROM或其他介质(例如,在解码单元1240中,或以其他方式在前端单元1230内)。解码单元1240耦合到执行引擎单元1250中的重命名/分配器单元1252。
执行引擎单元1250包括重命名/分配器单元1252,该重命名/分配器单元1252耦合到引退单元1254和一个或多个调度器单元的集合1256。(多个)调度器单元1256表示任何数量的不同调度器,包括预留站、中央指令窗等。(多个)调度器单元1256耦合到(多个)物理寄存器堆单元1258。(多个)物理寄存器堆单元1258中的每一个物理寄存器堆单元表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点,状态(例如,作为要执行的下一条指令的地址的指令指针)等等。在一个实施例中,(多个)物理寄存器堆单元1258包括向量寄存器单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器和通用寄存器。(多个)物理寄存器堆单元1258由引退单元1254重叠,以图示可实现寄存器重命名和乱序执行的各种方式(例如,使用(多个)重排序缓冲器和(多个)引退寄存器堆;使用(多个)未来文件、(多个)历史缓冲器、(多个)引退寄存器堆;使用寄存器映射和寄存器池,等等)。引退单元1254和(多个)物理寄存器堆单元1258耦合到(多个)执行集群1260。(多个)执行集群1260包括一个或多个执行单元的集合1262以及一个或多个存储器访问单元的集合1264。执行单元1262可执行各种操作(例如,移位、加法、减法、乘法)并可对各种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可包括仅一个执行单元或全都执行所有功能的多个执行单元。(多个)调度器单元1256、(多个)物理寄存器堆单元1258和(多个)执行集群1260示出为可能有多个,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线,和/或各自具有其自身的调度器单元、(多个)物理寄存器堆单元和/或执行集群的存储器访问流水线——并且在分开的存储器访问流水线的情况下,实现其中仅该流水线的执行集群具有(多个)存储器访问单元1264的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行,并且其余流水线可以是有序的。
存储器访问单元的集合1264耦合到存储器单元1270,该存储器单元1270包括数据TLB单元1272,该数据TLB单元1272耦合到数据高速缓存单元1274,该数据高速缓存单元1274耦合到第二级(L2)高速缓存单元1276。在一个示例性实施例中,存储器访问单元1264可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合到存储器单元1270中的数据TLB单元1272。指令高速缓存单元1234还耦合到存储器单元1270中的第二级(L2)高速缓存单元1276。L2高速缓存单元1276耦合到一个或多个其他级别的高速缓存,并最终耦合到主存储器。
在某些实施例中,包括预取电路1278以预取数据,例如从而预测访问地址并将针对那些地址的数据(例如,从存储器1280)带至一个或多个高速缓存中。
作为示例,示例性寄存器重命名的乱序发布/执行核架构可如下所述地实现流水线1200:1)指令取出1238执行取出级1202和长度解码级1204;2)解码单元1240执行解码级1206;3)重命名/分配器单元1252执行分配级1208和重命名级1210;4)(多个)调度器单元1256执行调度级1212;5)(多个)物理寄存器堆单元1258和存储器单元1270执行寄存器读取/存储器读取级1214;执行集群1260执行执行级1216;6)存储器单元1270和(多个)物理寄存器堆单元1258执行写回/存储器写入级1218;7)各单元可牵涉到异常处置级1222;以及8)引退单元1254和(多个)物理寄存器堆单元1258执行提交级1224。
核1290可支持一个或多个指令集(例如,x86指令集(具有已与较新版本一起添加的一些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集;加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集(具有诸如NEON的任选的附加扩展)),其中包括本文中描述的(多条)指令。在一个实施例中,核1290包括用于支持紧缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,由此允许使用紧缩数据来执行由许多多媒体应用使用的操作。
应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,各种方式包括时分多线程化、同时多线程化(其中单个物理核为物理核正在同时多线程化的线程中的每一个线程提供逻辑核)、或其组合(例如,时分取出和解码以及此后的诸如
Figure BDA0003231896190000291
超线程化技术中的同时多线程化)。
尽管在乱序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。尽管所图示的处理器的实施例还包括分开的指令和数据高速缓存单元1234/1274以及共享的L2高速缓存单元1276,但是替代实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如,第一级(L1)内部高速缓存或多个级别的内部高速缓存。在一些实施例中,该系统可包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。或者,所有高速缓存都可以在核和/或处理器的外部。
具体的示例性有序核架构
图13A-图13B图示更具体的示例性有序核架构的框图,该核将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核)中的一个逻辑块。取决于应用,逻辑块通过高带宽互连网络(例如,环形网络)与一些固定的功能逻辑、存储器I/O接口和其他必要的I/O逻辑进行通信。
图13A是根据本公开的实施例的单个处理器核以及它至管芯上互连网络1302的连接及其第二级(L2)高速缓存的本地子集1304的框图。在一个实施例中,指令解码单元1300支持具有紧缩数据指令集扩展的x86指令集。L1高速缓存1306允许对进入标量和向量单元中的、对高速缓存存储器的低等待时间访问。尽管在一个实施例中(为了简化设计),标量单元1308和向量单元1310使用分开的寄存器集合(分别为标量寄存器1312和向量寄存器1314),并且在这些寄存器之间传输的数据被写入到存储器,并随后从第一级(L1)高速缓存1306读回,但是本公开的替代实施例可以使用不同的方法(例如,使用单个寄存器集合或包括允许数据在这两个寄存器堆之间传输而无需被写入和读回的通信路径)。
L2高速缓存的本地子集1304是全局L2高速缓存的一部分,该全局L2高速缓存被划分成多个分开的本地子集,每个处理器核一个本地子集。每个处理器核具有到其自身的L2高速缓存的本地子集1304的直接访问路径。由处理器核读取的数据被存储在其L2高速缓存子集1304中,并且可以与其他处理器核访问其自身的本地L2高速缓存子集并行地被快速访问。由处理器核写入的数据被存储在其自身的L2高速缓存子集1304中,并在必要的情况下从其他子集转储清除。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2高速缓存和其他逻辑块之类的代理在芯片内彼此通信。每个环形数据路径为每个方向1012位宽。
图13B是根据本公开的实施例的图13A中的处理器核的一部分的展开图。图13B包括L1高速缓存1304的L1数据高速缓存1306A部分,以及关于向量单元1310和向量寄存器1314的更多细节。具体地,向量单元1310是16宽向量处理单元(VPU)(见16宽ALU 1328),该单元执行整数、单精度浮点以及双精度浮点指令中的一个或多个。该VPU通过混合单元1320支持对寄存器输入的混合,通过数值转换单元1322A-B支持数值转换,并且通过复制单元1324支持对存储器输入的复制。写掩码寄存器1326允许掩蔽所得的向量写入。
图14是根据本公开的实施例的可具有多于一个的核、可具有集成存储器控制器、以及可具有集成图形器件的处理器1400的框图。图14中的实线框图示具有单个核1402A、系统代理1410、一个或多个总线控制器单元的集合1416的处理器1400,而虚线框的任选增加图示具有多个核1402A-N、系统代理单元1410中的一个或多个集成存储器控制器单元的集合1414以及专用逻辑1408的替代处理器1400。
因此,处理器1400的不同实现可包括:1)CPU,其中专用逻辑1408是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核),并且核1402A-N是一个或多个通用核(例如,通用有序核、通用乱序核、这两者的组合);2)协处理器,其中核1402A-N是旨在主要用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核1402A-N是大量通用有序核。因此,处理器1400可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量的集成众核(MIC)协处理器(包括30个或更多核)、嵌入式处理器,等等。该处理器可以被实现在一个或多个芯片上。处理器1400可以是一个或多个基板的一部分,和/或可使用多种工艺技术(诸如例如,BiCMOS、CMOS、或NMOS)中的任何技术被实现在一个或多个基板上。
存储器层次结构包括核内的一个或多个级别的高速缓存、一个或多个共享高速缓存单元的集合1406、以及耦合到集成存储器控制器单元的集合1414的外部存储器(未示出)。共享高速缓存单元的集合1406可包括一个或多个中间级别的高速缓存,诸如,第二级(L2)、第三级(L3)、第四级(L4)或其他级别的高速缓存、末级高速缓存(LLC)和/或以上各项的组合。虽然在一个实施例中,基于环的互连单元1412将集成图形逻辑1408、共享高速缓存单元的集合1406以及系统代理单元1410/(多个)集成存储器控制器单元1414互连,但是替代实施例可使用任何数量的公知技术来互连此类单元。在一个实施例中,在一个或多个高速缓存单元1406与核1402A-N之间维持一致性。
在一些实施例中,一个或多个核1402A-N能够实现多线程化。系统代理1410包括协调和操作核1402A-N的那些部件。系统代理单元1410可包括例如功率控制单元(PCU)和显示单元。PCU可以是对核1402A-N以及集成图形逻辑1408的功率状态进行调节所需的逻辑和部件,或可包括这些逻辑和部件。显示单元用于驱动一个或多个外部连接的显示器。
核1402A-N在架构指令集方面可以是同构的或异构的;即,核1402A-N中的两个或更多个核可能能够执行相同的指令集,而其他核可能能够执行该指令集的仅仅子集或不同的指令集。
示例性计算机架构
图15-18是示例性计算机架构的框图。本领域中已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般地,能够包含如本文中所公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般都是合适的。
现在参考图15,所示出的是根据本公开一个实施例的系统1500的框图。系统1500可以包括一个或多个处理器1510、1515,这些处理器耦合到控制器中枢1520。在一个实施例中,控制器中枢1520包括图形存储器控制器中枢(GMCH)1590和输入/输出中枢(IOH)1550(其可以在分开的芯片上);GMCH 1590包括存储器和图形控制器,存储器1540和协处理器1545耦合到该存储器和图形控制器;IOH 1550将输入/输出(I/O)设备1560耦合到GMCH1590。或者,存储器和图形控制器中的一个或这两者被集成在(如本文中所描述的)处理器内,存储器1540和协处理器1545直接耦合到处理器1510,并且控制器中枢1520与IOH 1550处于单个芯片中。存储器1540可以包括分配代码1540A,例如,用于存储当被执行时使处理器执行本公开的任何方法的代码。
附加的处理器1515的任选性在图15中通过虚线来表示。每一处理器1510、1515可包括本文中描述的处理核中的一个或多个,并且可以是处理器1400的某一版本。
存储器1540可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或这两者的组合。对于至少一个实施例,控制器中枢1520经由诸如前端总线(FSB)之类的多分支总线、诸如快速路径互连(QPI)之类的点对点接口、或者类似的连接1595来与(多个)处理器1510、1515进行通信。
在一个实施例中,协处理器1545是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。在一个实施例中,控制器中枢1520可以包括集成图形加速器。
在物理资源1510、1515之间可以存在包括架构、微架构、热、功耗特性等一系列品质度量方面的各种差异。
在一个实施例中,处理器1510执行控制一般类型的数据处理操作的指令。嵌入在这些指令内的可以是协处理器指令。处理器1510将这些协处理器指令识别为具有应当由附连的协处理器1545执行的类型。因此,处理器1510在协处理器总线或者其他互连上将这些协处理器指令(或者表示协处理器指令的控制信号)发布到协处理器1545。(多个)协处理器1545接受并执行所接收的协处理器指令。
现在参见图16,所示出的是根据本公开的实施例的第一更具体的示例性系统1600的框图。如图16中所示,多处理器系统1600是点对点互连系统,并且包括经由点对点互连1650耦合的第一处理器1670和第二处理器1680。处理器1670和1680中的每一个都可以是处理器1400的某一版本。在本公开的一个实施例中,处理器1670和1680分别是处理器1510和1515,而协处理器1638是协处理器1545。在另一实施例中,处理器1670和1680分别是处理器1510和协处理器1545。
处理器1670和1680示出为分别包括集成存储器控制器(IMC)单元1672和1682。处理器1670还包括作为其总线控制器单元的一部分的点对点(P-P)接口1676和1678;类似地,第二处理器1680包括P-P接口1686和1688。处理器1670、1680可以经由使用点对点(P-P)接口电路1678、1688的P-P接口1650来交换信息。如图16中所示,IMC 1672和1682将处理器耦合到相应的存储器,即存储器1632和存储器1634,这些存储器可以是本地附连到相应处理器的主存储器的部分。
处理器1670、1680可各自经由使用点对点接口电路1676、1694、1686、1698的各个P-P接口1652、1654来与芯片组1690交换信息。芯片组1690可以任选地经由高性能接口1639来与协处理器1638交换信息。在一个实施例中,协处理器1638是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享高速缓存(未示出)可被包括在任一处理器中,或在这两个处理器的外部但经由P-P互连与这些处理器连接,使得如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在共享高速缓存中。
芯片组1690可以经由接口1696耦合到第一总线1616。在一个实施例中,第一总线1616可以是外围部件互连(PCI)总线或诸如PCI快速总线或另一第三代I/O互连总线之类的总线,但是本公开的范围不限于此。
如图16中所示,各种I/O设备1614可连同总线桥1618一起耦合到第一总线1616,该总线桥1618将第一总线1616耦合到第二总线1620。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器的一个或多个附加处理器1615耦合到第一总线1616。在一个实施例中,第二总线1620可以是低引脚数(LPC)总线。在一个实施例中,各种设备可耦合到第二总线1620,这些设备包括例如键盘和/或鼠标1622、通信设备1627以及存储单元1628,该存储单元1628诸如可包括指令/代码和数据1630的盘驱动器或者其他大容量存储设备。此外,音频I/O 1624可以被耦合到第二总线1620。注意,其他架构是可能的。例如,代替图16的点对点架构,系统可以实现多分支总线或其他此类架构。
现在参考图17,示出的是根据本公开的实施例的第二更具体的示例性系统1700的框图。图16和17中的类似元件使用类似的附图标记,并且从图17中省略了图16的某些方面以避免混淆图17的其他方面。
图17图示处理器1670、1680可分别包括集成存储器和I/O控制逻辑(“CL”)1672和1682。因此,CL 1672、1682包括集成存储器控制器单元,并包括I/O控制逻辑。图17图示不仅存储器1632、1634耦合到CL 1672、1682,而且I/O设备1714也耦合到控制逻辑1672、1682。传统I/O设备1715被耦合到芯片组1690。
现在参考图18,示出的是根据本公开的实施例的SoC 1800的框图。图14中的类似要素使用类似的附图标记。另外,虚线框是更先进的SoC上的任选的特征。在图18中,(多个)互连单元1802被耦合到:应用处理器1810,其包括一个或多个核的集合1402A-N以及(多个)共享高速缓存单元1406;系统代理单元1410;(多个)总线控制器单元1416;(多个)集成存储器控制器单元1414;一个或多个协处理器的集合1820,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元1830;直接存储器访问(DMA)单元1832;以及用于耦合到一个或多个外部显示器的显示单元1840。在一个实施例中,(多个)协处理器1820包括专用处理器,诸如例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、或嵌入式处理器,等等。
本文公开的(例如,机制的)各实施例可以被实现在硬件、软件、固件或此类实现方式的组合中。本公开的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
可将程序代码(诸如,图16中图示的代码1630)应用于输入指令,以执行本文中描述的功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有处理器的任何系统,该处理器诸如例如,数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
程序代码可以用高级的面向过程的编程语言或面向对象的编程语言来实现,以便与处理系统通信。如果需要,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定的编程语言的范围。在任何情况下,该语言可以是编译语言或解释语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,该指令表示处理器中的各种逻辑,该指令在被机器读取时使得该机器制造用于执行本文中所述的技术的逻辑。被称为“IP核”的此类表示可以被存储在有形的机器可读介质上,并可被供应给各个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非暂态、有形布置,其包括存储介质,诸如硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(CD-ROM)、可重写紧致盘(CD-RW)以及磁光盘;半导体器件,诸如,只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM);相变存储器(PCM);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。
因此,本公开的实施例还包括非暂态的有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也被称为程序产品。
仿真(包括二进制变换、代码变形等)
在一些情况下,指令转换器可用于将指令从源指令集转换至目标指令集。例如,指令转换器可以将指令变换(例如,使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其他方式转换成要由核处理的一条或多条其他指令。指令转换器可以用软件、硬件、固件、或其组合来实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。
图19是根据本公开的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但替代地,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图19示出可使用x86编译器1904来编译高级语言1902形式的程序,以生成可由具有至少一个x86指令集核的处理器1916原生执行的x86二进制代码1906。具有至少一个x86指令集核的处理器1916表示通过兼容地执行或以其他方式处理以下各项来执行与具有至少一个x86指令集核的
Figure BDA0003231896190000371
处理器基本相同的功能的任何处理器:1)
Figure BDA0003231896190000372
x86指令集核的指令集的实质部分,或2)目标为在具有至少一个x86指令集核的
Figure BDA0003231896190000373
处理器上运行以便取得与具有至少一个x86指令集核的
Figure BDA0003231896190000374
处理器基本相同的结果的应用或其他软件的目标代码版本。x86编译器1904表示可操作用于生成x86二进制代码1906(例如,目标代码)的编译器,该二进制代码可通过或不通过附加的链接处理在具有至少一个x86指令集核的处理器1916上执行。类似地,图19示出可以使用替代的指令集编译器1908来编译高级语言1902形式的程序,以生成可以由不具有至少一个x86指令集核的处理器1914(例如,具有执行加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集、和/或执行加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集的核的处理器)原生执行的替代的指令集二进制代码1910。指令转换器1912用于将x86二进制代码1906转换成可以由不具有x86指令集核的处理器1914原生执行的代码。该转换后的代码不大可能与替代的指令集二进制代码1910相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作,并且由来自替代指令集的指令构成。因此,指令转换器1912通过仿真、模拟或任何其他过程来表示允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码1906的软件、固件、硬件或其组合。

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中任一项所述的硬件处理器核,其中,所述多个不同类型的执行电路包括整数执行电路类型、存储器执行电路类型和浮点执行电路类型。
CN202110989172.6A 2020-09-26 2021-08-26 用于处理器的非对称执行端口和分配宽度的可缩放端口绑定的方法、系统和装置 Pending CN114327635A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/033,739 US20220100569A1 (en) 2020-09-26 2020-09-26 Methods, systems, and apparatuses for scalable port-binding for asymmetric execution ports and allocation widths of a processor
US17/033,739 2020-09-26

Publications (1)

Publication Number Publication Date
CN114327635A true CN114327635A (zh) 2022-04-12

Family

ID=80818299

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110989172.6A Pending CN114327635A (zh) 2020-09-26 2021-08-26 用于处理器的非对称执行端口和分配宽度的可缩放端口绑定的方法、系统和装置

Country Status (3)

Country Link
US (1) US20220100569A1 (zh)
CN (1) CN114327635A (zh)
DE (1) DE102021121973A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115878190B (zh) * 2023-03-08 2023-04-21 北京工业大学 一种应用于发射队列间指令调度填充的方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9372698B2 (en) * 2013-06-29 2016-06-21 Intel Corporation Method and apparatus for implementing dynamic portbinding within a reservation station
CN112540796B (zh) * 2019-09-23 2024-05-07 阿里巴巴集团控股有限公司 一种指令处理装置、处理器及其处理方法

Also Published As

Publication number Publication date
US20220100569A1 (en) 2022-03-31
DE102021121973A1 (de) 2022-04-14

Similar Documents

Publication Publication Date Title
US10503505B2 (en) Read and write masks update instruction for vectorization of recursive computations over independent data
JP6340097B2 (ja) リードマスク及びライトマスクにより制御されるベクトル移動命令
CN108369509B (zh) 用于基于通道的跨步分散操作的指令和逻辑
JP6849274B2 (ja) 融合された単一のサイクルのインクリメント−比較−ジャンプを実施するための命令及びロジック
JP6373425B2 (ja) 複数のビットを左にシフトし、複数の1を複数の下位ビットにプルインするための命令
CN110580175A (zh) 可变格式、可变稀疏矩阵乘法指令
US11243775B2 (en) System, apparatus and method for program order queue (POQ) to manage data dependencies in processor having multiple instruction queues
US20130339649A1 (en) Single instruction multiple data (simd) reconfigurable vector register file and permutation unit
US10083032B2 (en) System, apparatus and method for generating a loop alignment count or a loop alignment mask
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
CN114253607A (zh) 用于由集群化解码流水线对共享微代码定序器的乱序访问的方法、系统和装置
US11169809B2 (en) Method and apparatus for converting scatter control elements to gather control elements used to sort vector data elements
CN114327635A (zh) 用于处理器的非对称执行端口和分配宽度的可缩放端口绑定的方法、系统和装置
CN111752533A (zh) 用于矩阵运算的加速器系统和方法
CN116339489A (zh) 处理器中微操作的扼制融合的系统、装置和方法
CN114675881A (zh) 优化部分标志更新指令的方法、系统和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination