CN116893848A - 对指令解码集群的可变长度指令引导 - Google Patents

对指令解码集群的可变长度指令引导 Download PDF

Info

Publication number
CN116893848A
CN116893848A CN202310176210.5A CN202310176210A CN116893848A CN 116893848 A CN116893848 A CN 116893848A CN 202310176210 A CN202310176210 A CN 202310176210A CN 116893848 A CN116893848 A CN 116893848A
Authority
CN
China
Prior art keywords
instruction
slice
instructions
blocks
block
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
CN202310176210.5A
Other languages
English (en)
Inventor
穆罕默德·阿泽姆
兰根·巴苏·罗伊·乔杜里
邹翔
马利赫·艾哈迈迪
乔州·约瑟夫·扎霍
阿里尔·萨巴
阿蒙·克里斯蒂安森
波利赫罗尼斯·谢卡拉基斯
以利亚·基拉达
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 CN116893848A publication Critical patent/CN116893848A/zh
Pending legal-status Critical Current

Links

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, look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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, look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • 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
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • 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, look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • G06F9/3873Variable length pipelines, e.g. elastic pipeline

Abstract

公开了用于对指令解码集群的可变长度指令引导的装置和方法的实施方案。在实施例中,一种装置包括解码集群和块引导电路。解码集群包括多个指令解码器。块引导电路用于将指令字节序列分解为多个块,基于关于该多个块中的一个或多个块中的每个块中的指令数量的一个或多个指示,从该多个块中的该一个或多个块创建切片,其中该切片具有可变大小并且包括多个指令,以及将该切片引导至解码集群。

Description

对指令解码集群的可变长度指令引导
技术领域
本技术领域总体涉及信息处理系统,并且更具体地,涉及但不限于在信息处理系统中解码指令。
背景技术
信息处理系统可以执行软件(或代码),该软件(或代码)包括系统中的处理器的指令集中的指令(或宏指令)。处理器可以包括指令解码器,以解码指令和/或从原始指令生成或导出微操作、微码进入点、微指令、其他指令或其他控制信号。
发明内容
根据本申请的一方面,提供了一种用于可变长度指令引导(steering)的装置,包括:解码集群,包括多个指令解码器;以及块引导电路,用于执行以下操作:将指令字节序列分解为多个块,基于关于所述多个块中的一个或多个块中的每个块中的指令数量的一个或多个指示,从所述多个块中的所述一个或多个块创建切片,其中,所述切片具有可变大小并且包括多个指令,以及将所述切片引导至所述解码集群。
根据本申请的另一方面,提供了一种用于可变长度指令引导的方法,包括:将指令字节序列分解为多个块,基于关于所述多个块中的一个或多个块中的每个块中的指令数量的一个或多个指示,从所述多个块中的所述一个或多个块创建切片,其中,所述切片具有可变大小并且包括多个指令,以及将所述切片引导至解码集群,其中,所述解码集群包括多个指令解码器。
根据本申请的又一方面,提供了一种用于可变长度指令引导的系统,包括:多个处理器核心,其中,所述处理器核心中的至少一个包括:缓存,用于存储指令字节序列;解码集群,包括多个指令解码器;以及块引导电路,用于执行以下操作:将所述指令字节序列分解为多个块,基于关于所述多个块中的一个或多个块中的每个块中的指令数量的一个或多个指示,从所述多个块中的所述一个或多个块创建切片,其中,所述切片具有可变大小并且包括多个指令,并且将所述切片引导至所述解码集群;以及存储器控制器,用于将所述指令字节序列从动态随机存取存储器DRAM提供到所述缓存。
附图说明
将参照附图描述根据本公开的各种实施例,在附图中:
图1是其中可以实现实施例的处理器核心的框图。
图2是其中可以实现实施例的处理器核心的框图。
图3A、图3B和图3C是示出根据实施例的指令引导机制的框图。
图4A和图4B是示出根据实施例的用于可变块(chunk)引导的指令引导单元的框图。
图5A、图5B和图5C是示出根据实施例的用于指令引导的方法和一些装置两者的流程图和框图的组合。
图6是表示根据实施例的引导至集群(steer-to-cluster)可变引导管线的图示。
图7示出了示例性系统的实施例。
图8示出了处理器的实施例的框图,该处理器可以具有多于一个核心、可以具有集成存储器控制器、并且可以具有集成图形。
图9(A)是示出根据实施例的示例性有序管线和示例性寄存器重命名、乱序发布/执行管线两者的框图。
图9(B)是示出根据实施例的将被包括在处理器中的有序架构核心的示例性实施例以及示例性寄存器重命名、乱序发布/执行架构核心两者的框图。
图10示出了(一个或多个)执行单元电路的实施例,如图9(B)的(一个或多个)执行单元电路。
图11是根据一些实施例的寄存器架构的框图。
图12示出了指令格式的实施例。
图13示出了寻址字段的实施例。
图14示出了第一前缀的实施例。
图15(A)-(D)示出了如何使用第一前缀的R、X和B字段的实施例。
图16(A)-(B)示出了第二前缀的实施例。
图17示出了第三前缀的实施例。
图18示出了根据实施例的对比使用软件指令转换器将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图。
具体实施方式
本公开涉及用于对指令解码集群的可变长度指令引导的方法、装置、系统和非暂态计算机可读存储介质。
如背景技术部分所述,信息处理系统或其他电子产品中的处理器可以包括指令解码器,以解码指令(或宏指令)和/或从原始指令生成、导出等微操作、微码进入点、微指令、其他指令、其他控制信号等(任何此类生成、导出等都可被称为解码)。原始指令可被包括在处理器的指令集中,该指令集规定不同的指令长度(例如,参见图12-图17和相应描述)。可以期望使用实施例来提供更快和/或更有效地解码指令序列、和/或以其他方式提供更快的软件执行和/或更高的处理器和/或系统的整体性能。
虽然在以下示例性核心组织的上下文中描述了各个特征,但是替代性实施例可以在其他示例性核心组织中实现这样的特征。
图1是其中可以实现一些实施例的处理器核心100的实施例的框图。在一些实施例中,处理器核心可被实现用于通用处理器(例如,中央处理单元(CPU)或用于服务器、台式机、笔记本电脑、智能电话或其他计算机的类型的其他通用微处理器)或在其中实现。替代地,处理器核心可被实现用于专用处理器或在其中实现。适当的专用处理器的示例包括但不限于网络处理器、通信处理器、图形处理器、协处理器、数字信号处理器(DSP)、嵌入式处理器和控制器(例如,微控制器)。处理器和/或处理器核心可以布置在半导体管芯或集成电路上,并且可以包括硬件(例如,晶体管、电路等)。
处理器核心100具有指令提取单元102、解码单元104、执行单元106和存储装置108。指令提取单元或提取单元可以提取指令101。指令101可以表示宏指令、处理器的指令集的指令、解码单元104能够解码的指令等。提取单元102可被耦合以从处理器的片上存储装置(例如,一个或多个缓存、缓冲器、队列等)(未示出)和/或从系统存储器接收指令101。解码单元104与提取单元102相耦合以接收提取的指令103(例如,相同的指令但被重新排序),并且可操作以将提取的指令103解码为一个或多个相对较低级别的指令或控制信号105(例如,一个或多个微指令、微操作、微码进入点、解码指令或控制信号等)。执行单元106可以与解码单元相耦合以接收该一个或多个较低级别的指令或控制信号105,并且可操作以生成相应的结果107。结果107可以存储在处理器的片上存储装置108(例如,寄存器、缓存等)或存储器中。
为了避免模糊描述,示出和描述了相对简单的处理器100。其他处理器可以包括多个解码单元、多个执行单元等。此外,处理器选择性地可以包括其他处理器组件,例如,下面针对图8、图9(B)、图10和图11中的任何一个示出和描述的组件。
现在参考图2,示例核心100的前端(FE)110包括指令提取单元(IFU)210、指令解码单元(IDU)220和微码排序单元(MSU)230。在实施例中,FE 110可以对应于图9(B)的FE 930,IFU 210对应于图9(B)的指令提取框938,以及IDU 220对应于图9(B)的指令解码电路940。
IFU 210从存储器子系统(例如,连接到存储器控制器280)或缓存(例如,等级0(L0)指令缓存(I-缓存或IC)295)提取指令字节,并将提取的指令提供给IDU 220。提取过程可以以IFU 210从提取地址序列进行读取开始,该提取地址序列由分支预测单元(BPU)250预测并存储在队列(例如,命中向量队列(HVQ))中。然后IFU 210提取所要求的指令字节并将这些字节发送到IDU 220。
IFU 210的实施例可以包括以下单元中的一个或多个(其中的若干单元未在图2中示出):
·命中向量队列(HVQ),具有最多4个读数
·256kB等级1(L1)缓存,具有2个分组的(banked)读取端口
·12条目L0缓存,具有4-6个读取端口
·指令流式传输缓冲器(ISB),具有4个分组的读取端口
·在32字节/周期上执行指令长度解码(ILD)的填充单元
·迁移单元(每周期从ISB向L1 IC移动最多2个缓存线)
IFU 210的实施例的一些突出特征可以包括:
·读取完整的64字节缓存线(对齐)
·使用L0缓存以提高提取带宽
·从L0、L1和ISB混合读取
·从HVQ读取多个条目,取决于能够满足多少提取框读取
·提取预解码(PD)位以指导解码引导
·填充指令长度解码(ILD)以计算预解码位
指令缓存的大部分控制逻辑位于BPU 250中。具体地,IC和ISB标记位于BPU内部的管线内。预解码缓存数据位于IFU中。
IDU 220将来自IFU 210的有序字节转译成内部硬件级微指令(uops)。IDU 220激活微码排序器单元(MSU)230以控制通过剩余管线阶段对uops的排序。例如,uops可以按程序顺序被传递给乱序(OOO)执行电路120内的重命名和分配(RA)单元。在各种实施例中,IDU220包括可以并行解码二十四条指令的微架构,以维持非常宽且深的后端。
在各种实施例中,IDU 220可以执行以下功能:
·将来自最多四个缓存线的指令字节划分并引导至六个解码集群
·在每个集群内,每个周期将最多四条指令引导至四个解码器
·对指令字节进行解码以识别前缀、操作码和指令字段并验证指令的长度
·使用经解码的信息生成称为别名uops(AUOP)的微指令
·经由经解码的uop队列(DUQ)将别名uops传递给MSU 230和/或OOO执行电路120(例如,以对来自L0数据缓存(D-缓存)296的数据进行操作),该经解码的uop队列(DUQ)由两种独立类型的队列组成:别名uop队列(DUQU)和即时队列(DUQM)
·激活MSU 230以控制对uops的排序
·检测不同类型的分支(如条件型、间接型、调用型(CALL)、返回型(RET)和直接型分支)以用于分支地址计算(BAC)来计算直接分支的下一顺序地址和目标地址,并验证分支目标缓冲器(BTB)预测地址
在各种实施例中,核心100是复杂指令集计算机(CISC)架构,其中指令是可变长度的并且单个指令可以支持复杂功能。FE 110的功能之一是将CISC指令(例如,x86或IA32指令)转译到精简指令集计算机(RISC),如uops。这些uops可以由IDU 220在解码指令时生成,或者可以从包含由uops组成的微码流的只读存储器(ROM)中读取。
在实施例中,IDU 220包括硬件以实现指令引导机制,该指令引导机制被设计为在第一级(引导至集群或STC)中,将来自IFU 210的指令字节序列分成固定大小(例如,8B或16B)的块并将可变数量的块引导至每个解码集群,以及在第二级中,将一个指令的字节(one instruction worth of bytes)引导至每个解码器。在实施例中,IDU 220被配置为在指令块引导(IS)管线(例如,具有四个阶段)内执行第一级,并在指令解码(ID)管线(例如,具有三个阶段)内执行第二级。在实施例中,IS管线与指令提取(IF)管线交叠。在IS管线中,IDU 220计算引导控制信号,然后将指令块从IFU引导至解码器集群。
图3A、图3B和图3C是在FE 110内示出根据实施例的指令引导机制的框图。图3A、图3B和图3C示出了IF、IS、指令解码(ID)和微码排序(MS)管线的阶段内的IDU 220的框,以及IFU 210、MSU 230和BPU250的所选框。以下示出和/或描述的是IDU 220的引导控制框302(包括预解码块对齐引导PD CAS逻辑、切片数据逻辑和绑定控制逻辑)、解码集群引导框322、CCQ 324a至324f、解码集群326a至326f(每个包括指令引导控制逻辑、前缀/操作码逻辑、转译/长度/字段位置、和别名逻辑)、DUQU 328a至328f、分支地址和预解码清除多路复用器332、即时解码器334a至334f、DUQM 336a至336f、微操作对齐和合并多路复用器340、即时对齐和合并多路复用器342、DUBU 344、DUBM 346、以及微码排序读取队列(MSRQ)348;IFU210的框,IF下一指令指针(IFNIP)304、L0标签框306、指令计数(IC)数据和多路复用框308、L0数据框310、L0预解码框312、ISB数据框314、L0路多路复用器316、ISB路多路复用器318、以及L1/L0/ISB多路复用器320;MSU 230的框350、微码ROM和下一微码指令指针(NUIP)ROM352、354、356、358、360、362、以及跳转执行事件微码指令指针多路复用器(JE EV UIP)364;以及BPU 250的框330和即时恢复路径缓存338。
在IDU 220中,引导控制框302用于控制通过指令引导框322将来自IFU 210的指令字节引导至解码器配置,该解码器配置包括多个解码器(例如,二十四个至四十八个),这些解码器被划分为多个(例如,六个至十二个)解码集群326a至326f,每个解码集群包括多个(例如,二个至六个)解码器。解码集群326a至326f中的每一个与集群块队列(CCQ)324a至324f相关联以将IS管线桥接到ID管线,以及与DUQU328a至328f、即时解码器(IMM DEC)334a至334f、以及DUQM 336a至336f相关联。
在图3A中,引导控制框302被示为提供固定引导(即将固定数量(例如,一个)的块引导至每个解码集群)。固定引导可以设计为具有每个周期每个解码器平均引导一个指令的目标。例如,在平均指令长度为四个字节的情况下,每个周期将一个16B的块引导至每个CCQ将平均为每个周期每个解码器引导一个指令。为了实现固定引导,引导控制框302查看缓存线进入点和退出点以识别有效的块,但不试图使用关于指令数量的信息。在大多数情况下(不考虑跨块指令分割,这可能导致额外的块),切片大小(被引导至每个集群的字节数)是固定的。
实施例额外地或替代地可以支持各种其他块引导算法,每种算法可能具有不同的复杂性和管线长度,并且用于一组缓存线的算法可取决于缓存线的来源(即基于IFU管线和IS管线的对齐)。块引导控制的目的为最大限度减少其中解码器集群接收到的指令的数量超过解码器集群中的解码器的数量的情况。可以通过确定每个解码器集群应接收的16B块(来自一个周期内从IC/L0/ISB读取的最多四条缓存线)的数量来实现该目标。此外,块引导控制可以保留一个额外的重命名和分配通道给需要两个此类通道的指令。
图4A和图4B是示出根据实施例的用于可变块引导的指令引导单元(ISU)400的框图。图4A和图4B示出了IF、IS和ID管线的阶段内的IDU 220的被指定为ISU 400的框,以及IFU 210的所选框。以下示出和/或描述的是ISU 400的框402和422;IDU 220的框424a至424f以及426a至426f;以及IFU 210的框404、406、408、409、410、412、414、415、416、418和420,每个框对应于图3A/图3B/图3C的类似框。
在ISU 400中,引导控制框402用于控制通过指令引导框422将来自IFU 210的指令字节引导至解码器配置,该解码器配置包括多个解码器(例如,二十四个至四十八),这些解码器被划分为多个(例如,六个至十二个)解码集群426a至426f,每个解码集群包括多个(例如,二个至六个)解码器。解码集群426a至426f中的每一个与集群块队列(CCQ)424a至424f相关联,以将IS管线桥接到ID管线。
在实施例中,被引导至集群的多个指令字节(称为切片)可以是从16B块的一部分到多个16B块的任何情况,并且可不仅取决于缓存线进入点和退出点,而且还取决于缓存线包含多少指令。由于STC引导是在块级别,因此当切片是块的一部分时,该块被引导至多个集群。
在实施例中,ISU 400的STC机制可以设计为具有以下目标:
·将最多(但不超过)四条(集群中的解码器的数量)指令引导至解码集群。引导少于四条指令造成IDU管线中的解码槽浪费。引导多于解码集群能够消耗的指令不仅造成解码槽损失(例如,就解码槽损失而言,引导五条指令与引导一条指令一样糟糕),而且还会延迟从较新的解码器读取uops,因为DUQ是按顺序读取的。
·消耗由IFU产生的来自最多4/6个缓存线的有效块。
·为了最小化由分支错误预测引起的跳转执行清除(Jeclear)的延迟,引导逻辑应适应I-缓存标记(IT)管线到IF旁路的时序要求。
下列两种变体(以下结合图5的描述进一步描述)在它们获得关于指令长度/计数的信息的方面有所不同。
·为了实现基于预解码缓存(PD$)位的可变引导,STC机制包括对预解码缓存中的指令结束或微指令结束(例如,EOM)标记进行计数以计算出需要引导多少字节以覆盖一个周期的指令(one cycle worth of instructions)。
·为了实现基于I-缓存标记(ICTAG)指令计数(ICnt)的可变引导,STC机制包括将关于指令槽的数量的信息以块粒度保存在ICTAG中。尽管根据该变体STC机制忽略PD缓存信息,但解码集群内的指令引导仍然使用PD缓存信息。
实施例可以包括半可变引导(可变引导的更限制性版本)以允许引导机制时序适应更严格的时序约束。半可变引导可以包括限制切片以使得它们不跨越某个粒度。例如,对于旁路情况,切片可被限制为块粒度,使得切片不能从两个分开的块获得指令(除了从剩余的块获得块分割指令的前一半字节)。在一些实施例中,半可变引导可以使用ICnts(例如,由于更严格的时序约束),并且在一些实施例中,半可变引导可以使用PD位。
图5A、图5B和图5C是示出根据实施例的用于指令引导的方法和一些装置两者的流程图和框图的组合。引导逻辑使用以下信息来确定用于每个集群的切片:
·16B块中的分支退出点和进入点。IFU可以提取过去的最多两个已采取的分支,并且每个提取提供最多四个缓存线。分支退出点和进入点之间的16B块是无效的并且不被引导至任何解码器集群。
·用于每个块的ICnt,即块中的EOM标记的数量,其中双槽分配情况被算作两个。
·用于每个块的最后一个字节EOM(LBEOM)标记,即,关于块的结束是否也是指令的结束的指示。该信息用于识别指令分割情况。
IA32指令可以是从1B到15B的任何情况。因此,四条指令可能需要60B(4*15B)。在最坏的情况下,这四条指令可以分割成六个块(((4*15B)+(2*16B-2))/16B/块))。然而,平均而言,四个连续指令的长度可能更少,因此实施例可以将切片中的块的数量限制为较低的数字(例如,三个)。
图5A、图5B和图5C示出了IT和IF管线的阶段内的框。
在IF1阶段,框510表示针对每个块确定在该块中是否存在预测的所采取的分支EOM,并将该指示与从HVQ读取的LBEOM进行或运算(OR),以创建针对该块的LVBEOM(最后有效字节为EOM)指示。
此外,在IF1阶段,框512、514和516表示创建每条线中的块的ICnts的总和(即针对每条线,将前两个块的ICnts、前三个块的ICnts相加,以此类推)。这些总和中的最后一个给出线ICnt(LICnt)。
在其他实施例中,引导方案可以使用来自ICTAG的静态ICnt值,而不是动态掩蔽的(基于分支进入点和退出点);然而,当块的所有字节都无效时,ICnt值可能不反映有效指令槽的总和,这对于包含如下所采取的分支的块会发生:在该所采取的分支中,分支的结束不是块的最后字节。块中的在该所采取的分支的结束之后的字节对于解码是无效的。它还针对其中所采取的分支的目标不是块的起始字节的块而发生,使得块中的在目标之前的所有字节对于解码是无效的。
在其中引导逻辑使用掩蔽的PD位的实施例中,计数被动态创建,并且考虑由于预测的所采取的分支而无效的字节。对于该基于ICnt的可变方案,ICnts是静态的,由ILD填充。预测的所采取的分支的结束越早或者所采取的分支在块中的目标越晚,不准确性就越大。为了在一定程度上对此进行弥补,引导逻辑可以对部分有效块的ICnt值进行预处理。虽然确切值可能基于性能研究而不同,但实施例可以基于这样的想法来设计:如果块的一半到四分之三的字节无效,则ICnt将被除以2(左移1),并且如果块的超过四分之三是无效的,则ICnt将被除以4(左移2)。由于该估计,部分块被引导至的解码器可能获得多于或少于四个指令。为了减轻获得过多指令的一些惩罚,DUQ的读取带宽可以多于四个uops。
在IT02阶段,在框504中,每个块的ICnt和每个块的LBEOM被从ICTAG 502读取并与关于线的其他信息一起写入HVQ 506。基于所采取的分支的进入点和退出点,无效块的计数被清零并且部分有效块的计数被修改。
包含所采取的分支的最后字节的块也被标记,然后与LBEOM指示进行或运算(OR)以得到针对该块的LVBEOM指示。
此外,在IF1阶段,框518表示确定从HVQ读取的缓存线是否包含比引导逻辑能够消耗的更多的指令。对于引导逻辑的第一个限制是它每个周期可以消耗最多三十二条指令。如果从HVQ读取的缓存线包含多于三十二条指令,则在框508中,HVQ读取指针被重新引导至未完全消耗的线。在实施例中,框518可以包括使用LICnts来查找第一条线、前两条线中的指令的数量,以此类推(可以由存储体冲突逻辑限定)。具有三十二或以下的LICnts之和的线被认为可被引导逻辑消耗。
例如,如果从HVQ读取了四条缓存线,并且每条缓存线包含十条指令,则将消耗三条线,并且重新引导逻辑将读取指针移动到第四条线,以便在下一周期中再次读取第四条线。
在实施例中,引导逻辑可以保持跟踪是否有块和/或有多少块被从未部分消耗的第一条线消耗,并允许这些块被下一阶段消耗。然后,在下一周期中,引导逻辑可以在最后一者作为重新引导的结果被再次发送时,将已消耗的块的ICnt清零。因此,引导逻辑可以按块粒度消耗字节,而IFU按缓存线粒度工作。
从IF1阶段开始并在IF2阶段完成,框520表示创建最多十六个总和(SUM),第一总和等于第一块的掩蔽ICnt,第二总和等于前两个块的和,以此类推。
在IF2阶段,框522表示基于SUM和LVBEOM识别预切片,其中预切片是四个指令的组,没有任何其他限制,例如,块大小和采取分支限制。为此,每个SUM要与八个四的倍数并行比较。对这些结果进行查找优先(find-first)操作并考虑LVBEOM,识别每个预切片的开始和结束块。
在实施例中,预切片可被分割成两个或更多个切片,例如,如果预切片分布在多于三个块上或者预切片包含多于一个所采取的分支。如果预切片被分成两个或更多个切片,则每个产生的切片将包含少于四个指令(在每个预切片四个指令的实施例中)。
尽管可变引导机制每个周期可消耗最多三十二条指令(即八个预切片),但为了将可写入CCQ的切片的数量限制为两个,每个周期的切片的数量(在将预切片分为切片之后)可被限制为解码集群的数量的两倍。为了降低设计成本,实施方案可以选择将写入CCQ的切片的数量限制为一个,在这种情况下,预切片分成切片将被进一步限制。因此,在IF2中,在识别预切片之后,框522可以包括识别多少预切片将被分成多少切片,以提供对切片的总数进行计数。
在IF3阶段,框526表示如果确定切片的数量超过所支持的数量(即基于解码集群的数量所支持的数量,以及在一周期内是否可以在解码集群中写入一个或两个切片),则发出IF3停滞的信号,以允许所有切片在移动到下一组切片之前被消耗。框526可以包括检查切片中的块不超过最大值(>MaxC CHK)、所采取的分支不超过最大值(>MaxB TBr)等。假设需要分割预切片是少见的,则需要分割如此多的预切片以至于超过八个的切片数量限制是极其少见的。因此,该IF3停滞预计是非常少见的,并且实施例可以改变为重新引导(并在发生这种情况时引入气泡(bubble))以降低设计复杂性/成本。
此外,在IF3阶段,框524表示创建最多四个切片的开始和结束。不需要被分割的预切片被直接映射到切片。例如,如果识别六个有效的预切片,并且第二个和第五个预切片需要各自被分割成2个切片,则预切片映射将看起来为:
可变引导机制以循环(round robin)方式将切片写入CCQ,从上一周期中最后一个切片被写入的CCQ之后的CCQ开始。因此,此外,在IF3阶段,框528表示将切片开始/结束块指示转换为多路复用选择,以执行切片到CCQ映射。此外,在IFU中包括停滞和合并(stall-and-merge)支持的实施例中,第一个缓存线可能不是最旧的缓存线,多路复用控制也考虑到这一点。
在实施例中,引导逻辑可以为每个群集创建年龄ID,其在每次引导逻辑从最后一个解码群集滚动到第一个群集时被递增。因此,切片的年龄可以从年龄ID和群集ID的组合(例如,n位年龄ID和3位群集ID)确定。
在IF4阶段,来自L1/L0/ISB多路复用器520的指令字节通过解码集群引导多路复用器534被引导至CCQ 536a至536f。此外,在IF4阶段,框532表示计算集群-块进入和退出偏移。
在实施例中,引导控制逻辑与IF管线并行实现。引导多路复用器控制在三个阶段之后生成,此时原始字节和PD位可以从IF管线获得。在最后的IS阶段,原始字节、PD位和其他相关联信息以块粒度被多路复用到CCQ 536a至536f。在其中可以将最多两个切片引导至解码集群并且每个切片可以包含最多三个块的实施例中,CCQ写入逻辑和STC多路复用器将在每个周期内每个解码集群处理最多六个(2*3)写入。
图6是表示STC可变引导管线660的图示。
在实施例中,STC逻辑可以使用信息(FindN偏移信息)来为被写入CCQ的每个块(或切片)创建块进入偏移和块退出偏移,并且也可以用于处理双槽指令。例如,如果切片的退出偏移的第FindN个EOM是双槽指令,并且它是切片中的第四条指令,则可能在下一切片的开始处留下洞(hole),并且该切片被告知在下一切片中留下了洞。在假设完美引导的实施例中,可以假设切片的退出偏移总是在第四条指令上,并且如果是双槽指令,则可能总是留下洞。
各种实施例可以包括多种引导机制,包括下列项的任何组合;
·基于ICTAG ICnt的可变转向,其可以在IF管线从HVQ读取时使用。它可以将最多四条指令(“切片”)引导至每个解码集群。
o双槽分配情况可以被算作两条指令。
o每个切片可以包含最多一个所采取的分支。
o每个切片可以包含最多三个16B块。
·可变引导可将多于六个切片引导至CCQ。因此,CCQ可以允许在一周期内写入最多两个切片,其中每个切片可以包含最多三个指令。
·可变引导可以将第一切片引导至上一切片被引导到的解码集群的下一个(之后的)解码集群。
·当HVQ被绕过时,可以使用半可变引导(例如,IT管线信息被转发给IF管线)。为了满足时序要求,半可变引导可以比可变引导更具限制性。半可变引导可以尝试将最多4条指令(切片)引导至每个解码集群。
然而:
o每个16B块可被分配给一个或多个解码集群以进行解码。当块中的指令的数量不是四的倍数时,这将导致解码带宽损失。
o每个解码集群获得一个块来解码。然而,如果指令被分割到两个块中,则可以将额外的块引导至它。
o半可变引导可仅将最多四个切片引导至CCQ,从解码集群0开始。
实施例可以包括上述引导机制的组合。在程序的执行期间,在某些条件下,如分支错误预测,延迟可能具有比原始带宽更高的优先级。实施例可以基于延迟相对于吞吐量优先级来在不同的引导机制之间动态切换,以优化功率和性能。
示例实施例
在实施例中,一种装置包括解码集群和块引导电路。解码集群包括多个指令解码器。块引导电路将指令字节序列分解为多个块,基于关于该多个块中的一个或多个块中的每个块中的指令数量的一个或多个指示,从该多个块中的一个或多个块创建切片,其中该切片具有可变大小并且包括多个指令,以及将该切片引导至解码集群。
任何这样的实施例可以包括以下方面中的任一方面或任何组合。多个块中的每个块可以具有固定大小,其中每个块的固定大小等于每个其他块的固定大小。解码集群还可以包括指令引导电路,以将多个指令中的第一指令引导至多个指令解码器中的第一指令解码器,并将多个指令中的第二指令引导至多个指令解码器中的第二指令解码器。解码集群还可以包括集群块队列,以接收来自块引导电路的切片,并存储切片以便由指令引导电路进行指令引导。指令引导电路还可以向多个指令解码器中的每一个提供每个时钟周期最多一条指令。解码集群可以是多个解码集群中的一个,并且块引导电路可以从多个块创建多个切片,并将多个切片中的每一个引导至多个解码集群中的相应解码集群。块引导电路可以以循环方式将多个切片中的每一个引导至相应解码集群。多个解码集群中的每一个可以包括:多个指令解码器,以及指令引导电路,用于将多个切片之一的每条指令引导至多个指令解码器中的相应一个指令解码器。装置还可以包括指令提取电路,以向指令引导电路提供指令字节序列。指令字节序列可以是要由指令提取电路提供的多个指令字节序列中的一个,其中多个指令字节序列中的每一个包括最多固定数量的缓存线。块引导电路可以在从多个块中的一个或多个块创建切片与从多个块中的仅一个块创建切片之间动态切换。块引导电路可以基于时序约束来动态切换。关于该多个块中的一个或多个块中的每个块中的指令数量的一个或多个指示可以包括一个或多个指令结束标记。创建切片可以包括对指令结束标记进行计数。创建切片可以包括掩蔽分支指令和分支指令的目标之间的指令字节。创建切片可以包括创建包括固定数量指令的预切片,并基于预切片中的块的数量来划分该预切片。
在实施例中,一种方法包括将指令字节序列分解为多个块,基于关于该多个块中的一个或多个块中的每个块中的指令数量的一个或多个指示,从该多个块中的一个或多个块创建切片,其中该切片具有可变大小并且包括多个指令,以及将该切片引导至解码集群,其中解码集群包括多个指令解码器。
任何这样的实施例可以包括以下方面中的任一方面或任何组合。该方法可以包括将切片写入集群块队列,从集群块队列读取切片,以及将多个指令中的第一指令引导至多个指令解码器中的第一指令解码器,并且将多个指令中的第二指令引导至多个指令解码器中的第二指令解码器。多个块中的每个块可以有固定大小,其中每个块的固定大小等于每个其他块的固定大小。解码集群还可以包括指令引导电路,以将多个指令中的第一指令引导至多个指令解码器中的第一指令解码器,并将多个指令中的第二指令引导至多个指令解码器中的第二指令解码器。解码集群还可以包括集群块队列,以接收来自块引导电路的切片,并存储切片以便由指令引导电路进行指令引导。指令引导电路还可以向多个指令解码器中的每一个提供每个时钟周期最多一条指令。解码集群可以是多个解码集群中的一个,并且块引导电路可以从多个块创建多个切片,并将多个切片中的每一个引导至多个解码集群中的相应解码集群。块引导电路可以以循环方式将多个切片中的每一个引导至相应解码集群。多个解码集群中的每一个可以包括:多个指令解码器,以及指令引导电路,用于将多个切片之一的每条指令引导至多个指令解码器中的相应一个指令解码器。执行该方法的装置还可以包括指令提取电路,以向指令引导电路提供指令字节序列。指令字节序列可以是要由指令提取电路提供的多个指令字节序列中的一个,其中多个指令字节序列中的每一个包括最多固定数量的缓存线。块引导电路可以在从多个块中的一个或多个块创建切片与从多个块中的仅一个块创建切片之间动态切换。块引导电路可以基于时序约束来动态切换。关于该多个块中的一个或多个块中的每个块中的指令数量的一个或多个指示可以包括一个或多个指令结束标记。创建切片可以包括对指令结束标记进行计数。创建切片可以包括掩蔽分支指令和分支指令的目标之间的指令字节。创建切片可以包括创建包括固定数量指令的预切片,并基于预切片中的块的数量来划分该预切片。
在实施例中,一种系统包括多个处理器核心,其中处理器核心中的至少一个包括:缓存,存储指令字节序列;解码集群,包括多个指令解码器;以及块引导电路,将指令字节序列分解为多个块,基于关于该多个块中的一个或多个块中的每个块中的指令数量的一个或多个指示,从该多个块中的一个或多个块创建切片,其中该切片具有可变大小并且包括多个指令,以及将该切片引导至解码集群;以及存储器控制器,将指令字节序列从动态随机存取存储器(DRAM)提供到缓存。
任何这样的实施例可以包括以下方面中的任一方面或任何组合。该系统可以包括DRAM。多个块中的每个块可以具有固定大小,其中每个块的固定大小等于每个其他块的固定大小。解码集群还可以包括指令引导电路,以将多个指令中的第一指令引导至多个指令解码器中的第一指令解码器,并将多个指令中的第二指令引导至多个指令解码器中的第二指令解码器。解码集群还可以包括集群块队列,以接收来自块引导电路的切片,并存储切片以便由指令引导电路进行指令引导。指令引导电路还可以在每个时钟周期向多个指令解码器中的每一个提供最多一条指令。解码集群可以是多个解码集群中的一个,并且块引导电路可以从多个块创建多个切片,并将多个切片中的每一个引导至多个解码集群中的相应解码集群。块引导电路可以以循环方式将多个切片中的每一个引导至相应解码集群。多个解码集群中的每一个可以包括:多个指令解码器,以及指令引导电路,用于将多个切片之一的每条指令引导至多个指令解码器中的相应一个指令解码器。装置还可以包括指令提取电路,以向指令引导电路提供指令字节序列。指令字节序列可以是要由指令提取电路提供的多个指令字节序列中的一个,其中多个指令字节序列中的每一个包括最多固定数量的缓存线。块引导电路可以在从多个块中的一个或多个块创建切片与从多个块中的仅一个块创建切片之间动态切换。块引导电路可以基于时序约束来动态切换。关于该多个块中的一个或多个块中的每个块中的指令数量的一个或多个指示可以包括一个或多个指令结束标记。创建切片可以包括对指令结束标记进行计数。创建切片可以包括掩蔽分支指令和分支指令的目标之间的指令字节。创建切片可以包括创建包括固定数量指令的预切片,并基于预切片中的块的数量来划分该预切片。
在实施例中,一种装置可以包括用于执行本文公开的任何功能的装置。在实施例中,一种装置可以包括存储代码的数据存储设备,该代码在由硬件处理器或控制器执行时,使得该硬件处理器或控制器执行本文公开的任何方法或方法的一部分。在实施例中,一种装置可以如具体实施方式所述。在实施例中,一种方法可以如具体实施方式所述。在实施例中,一种非暂态机器可读介质可以存储指令,该指令在由机器执行时使得该机器执行本文公开的任何方法或方法的一部分。实施例可以包括本说明书中描述的任何细节、特征等,或细节、特征等的组合。
示例性计算机架构
以下详细描述了示例性计算机架构。本领域中已知的用于膝上型计算机、桌面型计算机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备、以及各种其他电子设备的其他系统设计和配置也是适当的。总之,能够包含本文公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般是适当的。
图7示出了示例性系统的实施方式。多处理器系统700是点对点互连系统,并且包括多个处理器,包括通过点对点互连750耦合的第一处理器770和第二处理器780。在一些实施例中,第一处理器770和第二处理器780是同质的。在一些实施例中,第一处理器770和第二处理器780是异质的。
处理器770和处理器780被示为分别包括集成存储器控制器(IMC)单元电路772和7482。处理器770还包括点对点(P-P)接口776和778作为其总线控制器单元的一部分;类似地,第二处理器780包括P-P接口786和788。处理器770、780可以使用P-P接口电路778、788经由点对点(P-P)互连750来交换信息。IMC 772和782将处理器770、780耦合到各自的存储器,即存储器732和存储器734,存储器732和存储器734可以是在本地附接到各个处理器的主存储器的部分。
处理器770、780可以各自使用点对点接口电路776、794、786、798经由各个P-P接口752、754来与芯片组790交换信息。芯片组790可选地可以经由高性能接口792与协处理器738交换信息。在一些实施例中,协处理器738是专用处理器,例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。
共享缓存(未示出)可以被包括在任一处理器770、780中,或者在两个处理器之外但经由P-P互连与处理器连接,使得任一个或两个处理器的本地缓存信息在处理器被置于低功率模式中的情况下可以被存储在该共享缓存中。
芯片组790可以通过接口796耦合到第一互连716。在一些实施例中,第一互连716可以是外围组件互连(PCI)互连,或诸如PCI快速互连或另一I/O互连之类的互连。在一些实施例中,其中一个互连耦合到电源控制单元(PCU)717,其可以包括电路、软件和/或固件以执行与处理器770、780和/或协处理器738有关的电源管理操作。PCU 717向电压调节器提供控制信息,使电压调节器产生适当的调节电压。PCU 717还提供控制信息以控制产生的工作电压。在各种实施例中,PCU 717可以包括各种电源管理逻辑单元(电路),以执行基于硬件的电源管理。这样的电源管理可以完全由处理器控制(例如,由各种处理器硬件,并且可以由工作负荷和/或功率、热或其他处理器约束触发)和/或电源管理可以响应于外部来源(例如,平台或电源管理源或系统软件)而执行。
PCU 717被示为作为与处理器770和/或处理器780分开的单独逻辑而存在。在一些情况下,PCU 717可以在处理器770或780的给定一个或多个核心(未示出)上执行。在一些情况下,PCU 717可被实现为微控制器(专用或通用)或被配置为执行其自身的专用电源管理代码(有时称为P代码)的其他控制逻辑。在另一些实施例中,由PCU 717执行的电源管理操作可以在处理器外部实现,例如,通过单独的电源管理集成电路(PMIC)或处理器外部的另一组件。在另一些实施例中,由PCU 717执行的电源管理操作可以在BIOS或其他系统软件中实现。
各种I/O设备714可以耦合到第一互连716,以及将第一互连716耦合到第二互连720的互连(总线)桥718。在一些实施例中,一个或多个额外的处理器715(例如,协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列(FPGA)、或者任何其他处理器)耦合到第一互连716。在一些实施例中,第二互连720可以是低引脚数(LPC)互连。各种设备可以耦合到第二互连720,包括例如键盘和/或鼠标722、通信设备727和存储单元电路728。存储单元电路728可以是盘驱动器或者其他大容量存储设备,其在一些实施例中可以包括指令/代码和数据730。另外,音频I/O 724可以耦合到第二互连720。注意,除了上述点对点架构之外的其他架构是可能的。例如,取代点对点架构,诸如多处理器系统700之类的系统可以实现多点分支互连或者其他这种架构。
示例性核心架构、处理器和计算机架构
处理器核心可以以不同的方式实现、用于不同的目的、以及在不同的处理器中实现。例如,这种核心的实施方式可以包括:1)用于通用计算的通用有序核心;2)用于通用计算的高性能通用乱序核心;3)主要用于图形和/或科学(吞吐量)计算的专用核心。不同的处理器的实施方式可以包括:1)CPU,包括一个或多个用于通用计算的通用有序核心和/或一个或多个用于通用计算的通用乱序核心;以及2)协处理器,包括一个或多个主要用于图形和/或科学(吞吐量)的专用核心。这种不同的处理器产生不同的计算机系统架构,其可以包括:1)与CPU不同的芯片上的协处理器;2)同一封装中与CPU不同的管芯上的协处理器;3)与CPU相同的管芯上的协处理器(在这种情况下,这种协处理器有时被称为专用逻辑(例如,集成图形和/或科学(吞吐量)逻辑)或专用核心);以及4)片上系统,可以在同一管芯上包括所述CPU(有时称为(一个或多个)应用核心或(一个或多个)应用处理器)、上述协处理器和附加功能。接下来描述示例性核心架构,之后是对示例性处理器和计算机架构的描述。
图8示出了处理器800的实施例的框图,该处理器800可以具有多于一个核心,可以具有集成存储器控制器,并且可以具有集成图形。实线框示出了具有单个核心802A、系统代理810、一组一个或多个互连控制器单元电路816的处理器800,而可选地添加的虚线框示出了具有多个核心802(A)-(N)、系统代理单元电路810中的一组一个或多个集成存储器控制器单元电路814、专用逻辑808、以及一组一个或多个互连控制器单元电路816的替代处理器800。注意,处理器800可以是图7的处理器770或780、或协处理器738或715中的一个。
因此,处理器800的不同实施方式可以包括:1)CPU,其中专用逻辑808为集成图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核心,未示出),并且核心802(A)-(N)为一个或多个通用核心(例如,通用有序核心、通用乱序核心、或两者的组合);2)协处理器,其中核心802(A)-(N)为大量主要用于图形和/或科学(吞吐量)的专用核心;以及3)协处理器,其中核心802(A)-(N)为大量通用有序核心。因此,处理器800可以是通用处理器、协处理器或专用处理器,例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元电路)、高吞吐量许多集成核心(MIC)协处理器(包括30个或更多核心)、嵌入式处理器等。处理器可以在一个或多个芯片上实现。处理器800可以是一个或多个衬底的一部分和/或可以使用多种工艺技术(例如,BiCMOS、CMOS或NMOS)中的任何一种在一个或多个衬底上实现。
存储器层级包括核心802(A)-(N)内的一个或多个级别的(一个或多个)缓存单元电路804(A)-(N)、一组一个或多个共享缓存单元电路806、以及耦合到该组集成存储器控制器单元电路814的外部存储器(未示出)。该组一个或多个共享缓存单元电路806可以包括一个或多个中级缓存,例如,2级(L2)、3级(L3)、4级(L4)或其他级别的缓存,如末级缓存(LLC),和/或其组合。虽然在一些实施例中基于环的互连网络电路812互连专用逻辑808(例如,集成图形逻辑)、该组共享缓存单元电路806和系统代理单元电路810,但替代实施例使用任何数量的公知技术来互连这些单元。在一些实施例中,在共享缓存单元电路806和核心802(A)-(N)中的一个或多个之间维持一致性。
在一些实施例中,核心802(A)-(N)中的一个或多个能够进行多线程处理。系统代理单元电路810包括协调和操作核心802(A)-(N)的组件。系统代理单元电路810可以包括例如功率控制单元(PCU)电路和/或显示单元电路(未示出)。PCU可以是或可以包括调整核心802(A)-(N)和/或专用逻辑808(例如,集成图形逻辑)的功率状态所需的逻辑和组件。显示单元电路用于驱动一个或多个外接显示器。
核心802(A)-(N)在架构指令集方面可以是同质的或异质的;即核心802(A)-(N)中的两个或更多个能够执行相同的指令集,而其他核心可能仅能够执行该指令集的子集或不同的指令集。
示例性核心架构
有序和乱序核心框图
图9(A)是示出根据实施例的示例性有序管线和示例性寄存器重命名、乱序发布/执行管线两者的框图。图9(B)是示出根据实施例的将被包括在处理器中的有序架构核心的示例性实施例以及示例性寄存器重命名、乱序发布/执行架构核心两者的框图。图9(A)-图9(B)中的实线框图示了有序管线和有序核心,而可选地添加的虚线框图示了寄存器重命名、乱序发布/执行管线和核心。考虑到有序方面是乱序方面的子集,将描述乱序方面。
在图9(A)中,处理器管线900包括提取阶段902、可选的长度解码阶段904、解码阶段906、可选的分配阶段908、可选的重命名阶段910、调度(也称为分发或发布)阶段912、可选的寄存器读取/存储器读取阶段7914、执行阶段916、写回/存储器写入阶段918、可选的异常处置阶段922和可选的提交阶段924。可以在这些处理器管线阶段中的每一个中执行一个或多个操作。例如,在提取阶段902期间,从指令存储器提取一条或多条指令,在解码阶段906期间,可以解码一条或多条提取的指令,可以生成使用转发的寄存器端口的地址(例如,加载存储单元(LSU)地址),并且可以执行分支转发(例如,立即数偏移或链接寄存器(LR))。在一个实施例中,解码阶段906和寄存器读取/存储器读取阶段914可以组合成一个管线阶段。在一个实施例中,在执行阶段916期间,可以执行解码的指令,可以执行到高级微控制器总线(AHB)接口的LSU地址/数据管线、可以执行乘法和加法运算、可以执行具有分支结果的算术运算等。
作为示例,示例性寄存器重命名、乱序发布/执行核心架构可以如下实现管线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。
图9(B)示出了处理器核心990,包括耦合到执行引擎单元电路950的前端单元电路930,并且两者都耦合到存储器单元电路970。核心990可以是精简指令集计算(RISC)核心,复杂指令集计算(CISC)核心、超长指令字(VLIW)核心、或混合或替代核心类型。作为又一选项,核心990可以是专用核心,例如,网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(GPGPU)核心、图形核心等。
前端单元电路930可以包括耦合到指令缓存单元电路934的分支预测单元电路932,指令缓存单元电路934耦合到指令转换后备缓冲器(TLB)936,TLB 936耦合到指令提取单元电路938,指令提取单元电路938耦合到解码单元电路940。在一个实施例中,指令缓存单元电路934被包括在存储器单元电路970中而不是前端单元电路930中。解码单元电路940(或解码器)可以对指令进行解码,并且生成一个或多个微操作、微代码进入点、微指令、其他指令或其他控制信号作为输出,这些微操作、微代码进入点、微指令、其他指令或其他控制信号从原始指令解码或以其他方式反映或源自原始指令。解码单元电路940还可以包括地址生成单元电路(AGU,未示出)。在一个实施例中,AGU使用转发的寄存器端口来生成LSU地址,并且可以进一步执行分支转发(例如,立即数偏移分支转发、LR寄存器分支转发等)。解码单元电路940可以使用各种不同的机制来实现。合适机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核心990包括微代码ROM(未示出)或存储某些宏指令的微代码的其他介质(例如,在解码单元电路940中或以其他方式在前端单元电路930内)。在一个实施例中,解码单元电路940包括微操作(micro-op)或操作缓存(未示出)以保存/缓存在解码阶段或处理器管线900的其他阶段期间生成的解码操作、微标签或微操作。解码单元电路940可以耦合到执行引擎单元电路950中的重命名/分配器单元电路952。
执行引擎电路950包括耦合到引退单元电路954和一组一个或多个调度器电路956的重命名/分配器单元电路952。(一个或多个)调度器电路956代表任意数量的不同的调度器,包括预约站、中央指令窗口等。在一些实施例中,(一个或多个)调度器电路956可以包括算术逻辑单元(ALU)调度器/调度电路、ALU队列、算术生成单元(AGU)调度器/调度电路、AGU队列等。(一个或多个)调度器电路956耦合到(一个或多个)物理寄存器堆电路958。(一个或多个)物理寄存器堆电路958中的每一个代表一个或多个物理寄存器堆,不同的物理寄存器堆存储一个或多个不同的数据类型,例如,标量整数、标量浮点、压缩整数、压缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一个指令的地址的指令指针)等。在一个实施例中,(一个或多个)物理寄存器堆单元电路958包括向量寄存器单元电路、写入掩码寄存器单元电路和标量寄存器单元电路。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、通用寄存器等。(一个或多个)物理寄存器堆单元电路958与引退单元电路954(也称为引退队列或退休队列)重叠,来说明可以实现寄存器重命名和乱序执行的各种方式(例如,使用(一个或多个)重排序缓冲器((一个或多个)ROB)和(一个或多个)引退寄存器堆;使用(一个或多个)未来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器堆;使用寄存器映射和寄存器池等)。引退单元电路954和(一个或多个)物理寄存器堆电路958耦合到(一个或多个)执行集群960。(一个或多个)执行集群960包括一组一个或多个执行单元电路962和一组一个或多个存储器访问电路964。执行单元电路962可以对各种类型的数据(例如,标量浮点、压缩整数、压缩浮点、向量整数、向量浮点)执行各种算术、逻辑、浮点或其他类型的运算(例如,移位、加法、减法、乘法)。尽管一些实施例可以包括专用于特定功能或功能组的多个执行单元或执行单元电路,但其他实施例可以仅包括一个执行单元电路或全部执行所有功能的多个执行单元/执行单元电路。(一个或多个)调度器电路956、(一个或多个)物理寄存器堆单元电路958和(一个或多个)执行集群960被示为可能是多个,因为某些实施例为某些类型的数据/操作创建单独的管线(例如,标量整数管线、标量浮点/压缩整数/压缩浮点/向量整数/向量浮点管线、和/或存储器访问管线,每个管线都有自己的调度器电路、(一个或多个)物理寄存器堆单元电路和/或执行集群-并且在单独的存储器访问管线的情况下,实现了其中只有该管线的执行集群具有(一个或多个)存储器访问单元电路964的某些实施例)。还应该理解,在使用单独的管线的情况下,这些管线中的一个或多个可以是乱序发布/执行,而其余为有序的。
在一些实施例中,执行引擎单元电路950可以执行到高级微控制器总线(AHB)接口(未示出)的加载存储单元(LSU)地址/数据管线,以及地址阶段和写回、数据阶段加载、存储和分支。
该组存储器访问电路964耦合到存储器单元电路970,存储器单元电路970包括耦合到数据缓存电路974的数据TLB单元电路972,数据缓存电路974耦合到2级(L2)缓存电路976。在一个示例性实施例中,存储器访问单元电路964可以包括加载单元电路、存储地址单元电路和存储数据单元电路,它们中的每一个耦合到存储器单元电路970中的数据TLB电路972。指令缓存电路934进一步耦合到存储器单元电路970中的2级(L2)缓存单元电路976。在一个实施例中,指令缓存934和数据缓存974被组合成L2缓存单元电路976、3级(L3)缓存单元电路(未示出)和/或主存储器中的单个指令和数据缓存(未示出)。L2缓存单元电路976耦合到一个或多个其他级别的缓存并最终耦合到主存储器。
核心990可以支持一个或多个指令集(例如,x86指令集(具有已经添加了较新版本的一些扩展);MIPS指令集;ARM指令集(具有可选的附加扩展,例如NEON)),包括本文描述的(一个或多个)指令。在一个实施例中,核心990包括支持压缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许由许多多媒体应用使用的操作使用压缩数据来执行。
示例性执行单元电路
图10示出了(一个或多个)执行单元电路的示例,例如图9(B)的(一个或多个)执行单元电路962。如图所示,(一个或多个)执行单元电路962可以包括一个或多个ALU电路1001、向量/SIMD单元电路1003、加载/存储单元电路1005、和/或分支/跳转单元电路1007。ALU电路1001执行整数算术和/或布尔(Boolean)运算。向量/SIMD单元电路1003对压缩数据(例如,SIMD/向量寄存器)执行向量/SIMD操作。加载/存储单元电路1005执行加载和存储指令以将数据从存储器加载到寄存器或从寄存器存储到存储器。加载/存储单元电路1005还可以生产地址。分支/跳转单元电路1007根据指令引起分支或跳转到存储器地址。FPU电路1009执行浮点算术。(一个或多个)执行单元电路962的宽度取决于实施例而变化,并且可以在16位到1024位的范围内。在一些实施例中,两个或更多个较小的执行单元被逻辑地组合以形成更大的执行单元(例如,两个128位执行单元被逻辑地组合以形成256位执行单元)。
示例性寄存器架构
图11是根据一些实施例的寄存器架构1100的框图。如图所示,存在从128位到1024位的宽度变化的向量/SIMD寄存器1110。在一些示例中,向量/SIMD寄存器1110在物理上是512位,并且根据映射,仅使用一些低位。例如,在一些实施例中,向量/SIMD寄存器1110是512位的ZMM寄存器:低256位用于YMM寄存器,而低128位用于XMM寄存器。因此,存在寄存器的覆盖。在一些实施例中,向量长度字段在最大长度和一个或多个其他较短长度之间进行选择,其中每个这样较短长度是前一个长度的一半长度。标量运算是对ZMM/YMM/XMM寄存器中最低阶数据元素位置执行的运算;根据示例,高阶数据元素位置保持如它们在指令之前一样或者被归零。
在一些实施例中,寄存器架构1100包括写入掩码/断言寄存器1115。例如,在一些实施例中,有8个写入掩码/断言寄存器(有时称为k0到k7),每个寄存器是16位、32位、64位或128位大小。写入掩码/断言寄存器1115可以允许合并(例如,允许在任何操作的执行期间保护目的地中的任何元素集合免于更新)和/或归零(例如,归零向量掩码允许在任何操作的执行期间将目的地中的任何元素集合归零)。在一些实施例中,给定写入掩码/断言寄存器1115中的每个数据元素位置对应于目的地的数据元素位置。在其他实施例中,写入掩码/断言寄存器1115是可缩放的并且由用于给定向量元素的设定数量的使能位组成(例如,每64位向量元素有8个使能位)。
寄存器架构1100包括多个通用寄存器1125。这些寄存器可以是16位、32位、64位等,并且可以用于标量运算。在一些实施例中,这些寄存器由名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8到R15引用。
在一些实施例中,寄存器架构1100包括标量浮点寄存器1145,其用于使用x87指令集扩展或作为MMX寄存器对32/64/80位浮点数据进行标量浮点运算以对64位压缩整数数据执行运算,以及保存在MMX和XMM寄存器之间执行的一些操作的操作数。
一个或多个标志寄存器1140(例如,EFLAGS、RFLAGS等)存储用于算术、比较和系统操作的状态和控制信息。例如,一个或多个标志寄存器1140可以存储条件代码信息,例如,进位、奇偶校验、辅助进位、零、符号和溢出。在一些实施例中,一个或多个标志寄存器1140被称为程序状态和控制寄存器。
分段寄存器1120包含用于访问存储器的分段点。在一些示例中,这些寄存器由名称CS、DS、SS、ES、FS和GS引用。
机器特定寄存器(MSR)1135控制和报告处理器性能。大多数MSR1135处理与系统相关的功能并且不能被应用程序访问。机器检查寄存器1160由用于检测和报告硬件错误的控制、状态和错误报告MSR组成。
一个或多个指令指针寄存器1130存储指令指针值。(一个或多个)控制寄存器1155(例如,CR0-CR4)确定处理器(例如,处理器770、780、738、718和/或800)的操作模式和当前执行任务的特性。调试寄存器950控制并允许监视处理器或核心的调试操作。
存储器管理寄存器1165指定在保护模式存储器管理中使用的数据结构的位置。这些寄存器可包括GDTR、IDRT、任务寄存器和LDTR寄存器。
替代实施例可以使用更宽或更窄的寄存器。此外,替代实施例可以使用更多、更少或不同的寄存器堆和寄存器。
指令集
指令集架构(ISA)可以包括一种或多种指令格式。给定的指令格式可以定义各种字段(例如,位的数量、位的位置)以指定要执行的操作(例如,操作码)和将执行该操作的(一个或多个)操作数和/或(一个或多个)其他数据字段(例如,掩码)。一些指令格式通过指令模板(或子格式)的定义进一步细分。例如,给定指令格式的指令模板可以定义为具有指令格式字段的不同子集(所报考的字段通常以相同的顺序,但至少一些具有不同的位位置,因为包含的字段较少)和/或定义为对给定字段进行不同的解释。因此,ISA的每条指令都使用给定的指令格式(并且如果已定义,则在该指令格式的给定指令模板中)表示,并包括用于指定操作和操作数的字段。例如,示例性ADD指令具有特定操作码和指令格式,该指令格式包括操作码字段来指定该操作码和操作数字段以选择操作数(源1/目的地和源2);并且在指令流中出现此ADD指令将在选择特定操作数的操作数字段中具有特定内容。
示例性指令格式
本文描述的(一个或多个)指令的实施例可以以不同的格式来体现。此外,下文详述了示例性系统、架构和管线。(一个或多个)指令的实施例可以在这样的系统、架构和管线上执行,但不限于这些详细说明。
图12示出了指令格式的实施例。如图所示,指令可以包括多个组成部分,包括但不限于用于以下项的一个或多个字段:一个或多个前缀1201、操作码1203、寻址信息1205(例如,寄存器标识符、存储器寻址信息等)、位移值1207、和/或立即数1209。注意,一些指令使用格式的部分或全部字段,而其他指令可能仅使用操作码1203的字段。在一些实施例中,所示顺序是这些字段将被编码的顺序,然而,应当理解,在其他实施例中,这些字段可以以不同的顺序编码、组合等。
(一个或多个)前缀字段1201在使用时修改指令。在一些实施例中,一个或多个前缀用于重复字符串指令(例如,0xF0、0xF2、0xF3等),以提供部分覆盖(例如,0x2E、0x36、0x3E、0x26、0x64、0x65、0x2E、0x3E等),以执行总线锁定操作,和/或更改操作数(例如,0x66)和地址大小(例如,0x67)。某些指令需要强制前缀(例如,0x66、0xF2、0xF3等)。这些前缀中的某些可能被认为是“传统”前缀。其他前缀(其一个或多个示例在本文中详述)指示和/或提供进一步的能力,例如,指定特定寄存器等。其他前缀通常跟在“传统”前缀之后。
操作码字段1203用于至少部分地定义在指令解码时要执行的操作。在一些实施例中,在操作码字段1203中编码的主操作码的长度为1、2或3个字节。在其他实施例中,主操作码可以是不同的长度。附加的3位操作码字段有时被编码在另一个字段中。
寻址字段1205用于寻址指令的一个或多个操作数,例如,存储器或一个或多个寄存器中的位置。图13图示了寻址字段1205的示例。在该图示中,示出了可选的Mod R/M字节1302和可选的缩放、索引、基址(SIB)字节1304。Mod R/M字节1302和SIB字节1304用于对指令的最多两个操作数进行编码,每个操作数是直接寄存器或有效存储器地址。注意,这些字段中的每一个是可选的,因为并非所有指令都包含这些字段中的一个或多个。MOD R/M字节1302包括MOD字段1342、寄存器字段1344、和R/M字段1346。
MOD字段1342的内容区分存储器访问模式和非存储器访问模式。在一些实施例中,当MOD字段1342具有值b11时,使用寄存器直接寻址模式,否则使用寄存器间接寻址。
寄存器字段1344可以对目的地寄存器操作数或源寄存器操作数进行编码,或者可以对操作码扩展进行编码并且不用于对任何指令操作数进行编码。寄存器索引字段1344的内容直接或通过地址生成指定源或目的操作数的位置(在寄存器中或在存储器中)。在一些实施例中,寄存器字段1344用来自前缀(例如,前缀1201)的附加位来补充以允许更大的寻址。
R/M字段1346可以用于对引用存储器地址的指令操作数进行编码,或可以用于对目的地寄存器操作数或源寄存器操作数进行编码。注意,在一些实施例中,R/M字段1346可以与MOD字段1342组合以指示寻址模式。
SIB字节1304包括要在地址生成中使用的缩放字段1352、索引字段1354和基址字段1356。缩放字段1352指示缩放因子。索引字段1354指定要使用的索引寄存器。在一些实施例中,索引字段1354用来自前缀(例如,前缀1201)的附加位来补充以允许更大的寻址。基址字段1356指定要使用的基础寄存器。在一些实施例中,基址字段1356用来自前缀(例如,前缀1201)的附加位来补充以允许更大的寻址。实际上,缩放字段1352的内容允许缩放索引字段1354的内容以用于存储器地址生成(例如,用于使用2缩放*索引+基址的地址生成)。
一些寻址形式利用位移值来生成存储器地址。例如,存储器地址可以根据2缩放*索引+基址+位移、索引*缩放+位移、r/m+位移、指令指针(RIP/EIP)+位移、寄存器+位移等来生成。位移可以是1-字节、2-字节、4-字节等值。在一些实施例中,位移字段1207提供该值。另外,在一些实施例中,位移因子使用被编码在寻址字段1205的MOD字段中,该MOD字段指示通过将disp8与缩放因子N相乘来计算位移值的压缩位移方案,该缩放因子N是基于向量长度、b位的值和指令的输入元素大小来确定的。位移值存储在位移字段1207中。
在一些实施例中,立即数字段1209指定指令的立即数。立即数可以编码为1字节值、2字节值、4字节值等。
图14图示了第一前缀1201(A)的实施例。在一些实施例中,第一前缀1201(A)是REX前缀的实施例。使用此前缀的指令可以指定通用寄存器、64位压缩数据寄存器(例如,单指令、多数据(SIMD)寄存器或向量寄存器)和/或控制寄存器和调试寄存器(例如,CR8-CR15和DR8-DR15)。
使用第一前缀1201(A)的指令可以使用3位字段来指定最多三个寄存器,具体取决于格式:1)使用Mod R/M字节1302的reg字段1344和R/M字段1346;2)使用Mod R/M字节1302和SIB字节1304,包括使用reg字段1344和基址字段1356和索引字段1354;或3)使用操作码的寄存器字段。
在第一前缀1201(A)中,位位置7:4被设置为0100。位位置3(W)可以用于确定操作数大小,但不能单独确定操作数宽度。因此,当W=0时,操作数大小由代码段描述符(CS.D)确定,并且当W=1时,操作数大小为64位。
注意,添加另一位允许寻址16(24)个寄存器,而MOD R/M reg字段1344和MOD R/MR/M字段1346单独各自只能寻址8个寄存器。
在第一前缀1201(A)中,位位置2(R)可以是MOD R/M reg字段1344的扩展,并且可以用于在该字段编码通用寄存器、64位压缩数据寄存器(例如,SSE寄存器)、或者控制或调试寄存器时修改Mod R/M reg字段1344。当Mod R/M字节1302指定其他寄存器或定义扩展操作码时,忽略R。
位位置1(X)X位可以修改SIB字节索引字段1354。
位位置B(B)B可以修改Mod R/M R/M字段1346或SIB字节基址字段1356中的基址;或者它可以修改用于访问通用寄存器(例如,通用寄存器1125)的操作码寄存器字段。
图15(A)-15(D)示出了如何使用第一前缀1201(A)的R、X和B字段的实施例。图15(A)示出了当SIB字节1304不用于存储器寻址时,来自第一前缀1201(A)的R和B用于扩展MODR/M字节1302的reg字段1344和R/M字段1346。图15(B)示出了当SIB字节1304不被使用时(寄存器-寄存器寻址),来自第一前缀1201(A)的R和B用于扩展MOD R/M字节1302的reg字段1344和R/M字段1346。图15(C)示出了当SIB字节1304用于存储器寻址时,来自第一前缀1201(A)的R、X和B用于扩展MOD R/M字节1302的reg字段1344以及索引字段1354和基址字段1356。图15(D)示出了当寄存器被编码在操作码1203中时,来自第一前缀1201(A)的B用于扩展MOD R/M字节1302的reg字段1344。
图16(A)-图16(B)示出了第二前缀1201(B)的实施例。在一些实施例中,第二前缀1201(B)是VEX前缀的示例。第二前缀1201(B)编码允许指令具有多于两个的操作数,并允许SIMD向量寄存器(例如,向量/SIMD寄存器1110)长于64位(例如,128位和256位)。第二前缀1201(B)的使用提供了三操作数(或更多)的语法。例如,前面的两个操作数指令执行了诸如A=A+B之类的操作,这会覆盖源操作数。使用第二前缀1201(B)使操作数能够执行非破坏性操作,例如A=B+C。
在一些实施例中,第二前缀1201(B)以两种形式出现-双字节形式和三字节形式。双字节的第二前缀1201(B)主要用于128位、标量和一些256位指令;而三字节的第二前缀1201(B)提供了对第一前缀1201(A)和3字节操作码指令的紧凑替换。
图16(A)图示了第二前缀1201(B)的双字节形式的实施例。在一个示例中,格式字段1601(字节0 1603)包含值C5H。在一个示例中,字节1 1605包括位[7]中的“R”值。该值是第一前缀1201(A)的相同值的补码。位[2]用于指示向量的长度(L)(其中值0是标量或128位向量,值1是256位向量)。位[l:0]提供与一些传统前缀扩展性等效的操作码(例如,00=无前缀、01=66H、10=F3H和11=F2H)。显示为vvvv的位[6:3]可以用于:1)编码第一源寄存器操作数,以反转(1s补码)形式指定,并且对具有2个或更多源操作数的指令有效;2)编码目的地寄存器操作数,以1s补码形式指定用于某些向量移位;或者3)不编码任何操作数,字段被保留并且应该包含一定的值,例如1111b。
使用此前缀的指令可以使用Mod R/M R/M字段1346来对引用存储器地址的指令操作数进行编码,或者对目的地寄存器操作数或源寄存器操作数进行编码。
使用该前缀的指令可以使用Mod R/M reg字段1344来编码目的地寄存器操作数或源寄存器操作数,被视为操作码扩展并且不用于对任何指令操作数进行编码。
对于支持四个操作数vvvv的指令语法,Mod R/M R/M字段1346和Mod R/M reg字段1344对四个操作数中的三个进行编码。然后立即数1209的位[7:4]用于对第三源寄存器操作数进行编码。
图16(B)图示了第二前缀1201(B)的三字节形式的实施例。在一个示例中,格式字段1611(字节0 1613)包含值C4H。字节1 1615在位[7:5]中包括“R”、“X”和“B”,它们是第一前缀1201(A)的相同值的补码。字节1 1615的位[4:0](显示为mmmmm)包括要根据需要对一个或多个隐含的前导操作码字节进行编码的内容。例如,00001表示0FH前导操作码,00010表示0F38H前导操作码,00011表示前导0F3AH操作码,等等。
字节2 1617的位[7]的使用类似于第一前缀1201(A)的W,包括有助于确定可提升的操作数大小。位[2]用于指示向量的长度(L)(其中值0是标量或128位向量,值1是256位向量)。位[l:0]提供与一些传统前缀扩展性等效的操作码(例如,00=无前缀、01=66H、10=F3H和11=F2H)。显示为vvvv的位[6:3]可以用于:1)对第一源寄存器操作数进行编码,以反转(1s补码)形式指定,并且对具有2个或更多源操作数的指令有效;2)编码目的地寄存器操作数,以1s补码形式指定用于某些向量移位;或者3)不编码任何操作数,字段被保留并且应该包含一定的值,例如1111b。
使用该前缀的指令可以使用Mod R/M R/M字段1346来编码引用存储器地址的指令操作数,或者编码目的地寄存器操作数或源寄存器操作数。
使用该前缀的指令可以使用Mod R/M reg字段1344来编码目的地寄存器操作数或源寄存器操作数,被视为操作码扩展并且不用于编码任何指令操作数。
对于支持四个操作数vvvv的指令语法,Mod R/M R/M字段1346和Mod R/M reg字段1344对四个操作数中的三个进行编码。然后立即数1209的位[7:4]用于对第三源寄存器操作数进行编码。
图17示出了第三前缀1201(C)的示例。在一些实施例中,第一前缀1201(A)是EVEX前缀的实施例。第三前缀1201(C)是四字节前缀。
第三前缀1201(C)可以在64位模式下编码32个向量寄存器(例如,128位、256位和512位寄存器)。在一些实施例中,使用写入掩码/操作掩码(参见前面图中寄存器的讨论,例如图11)或预测的指令使用此前缀。操作掩码寄存器允许有条件处理或选择控制。操作掩码指令(其源/目的地操作数是操作掩码寄存器并处理操作掩码寄存器的内容作为单个值)使用第二前缀1201(B)进行编码。
第三前缀1201(C)可以编码特定于指令类的功能(例如,具有“加载+操作”语义的压缩指令可以支持嵌入式广播功能,具有舍入语义的浮点指令可以支持静态舍入功能,具有非舍入算术语义的浮点指令可以支持“抑制所有异常”功能等)。
第三前缀1201(C)的第一字节是格式字段1711,在一个示例中,其值为62H。后续字节被称为有效负载字节1715-1719并且共同形成P[23:0]的24位值,以一个或多个字段的形式提供特定能力(在此详述)。
在一些实施例中,有效载荷字节1719的P[1:0]与低两个mmmmm位相同。P[3:2]在一些实施例中被保留。当与P[7]和Mod R/M reg字段1344组合时,位P[4](R’)允许访问高16个向量寄存器集。当不需要SIB字节寻址时,P[6]还可以提供对高16个向量寄存器的访问。P[7:5]由R、X和B组成,它们是向量寄存器、通用寄存器、存储器寻址的操作数说明符修饰符位(operand specifier modifier bit),并且当与Mod R/M寄存器字段1344和Mod R/M R/M字段1346组合时,允许访问超出低8个寄存器的下一组8个寄存器。P[9:8]提供与一些传统前缀扩展性等效的操作码(例如,00=无前缀、01=66H、10=F3H和11=F2H)。在一些实施例中,P[10]是固定值1。显示为vvvv的P[14:11]可以用于:1)对第一源寄存器操作数进行编码,以反转(1s补码)形式指定,并且对具有2个或更多源操作数的指令有效;2)编码目的地寄存器操作数,以1s补码形式指定用于某些向量移位;或者3)不编码任何操作数,字段被保留并且应该包含一定的值,例如1111b。
P[15]类似于第一前缀1201(A)和第二前缀1211(B)的W,并且可以用作操作码扩展位或操作数大小提升。
P[18:16]指定操作掩码(写入掩码)寄存器(例如,写入掩码/断言寄存器1115)中的寄存器的索引。在一个实施例中,特定值aaa=000具有特殊行为,这意味着对于特定指令不使用操作掩码(这可以通过多种方式实现,包括使用硬连线到所有指令的操作掩码或绕过掩码硬件的硬件)。当合并时,向量掩码允许在执行任何操作(由基础操作和增广操作指定)期间保护目的地中的任何元素集免受更新;在另一个实施例中,保留目的地的每个元素的旧值,其中相应的掩码位为0。相反,当归零时,向量掩码允许在执行任何操作(由基础操作和增广操作指定)期间将目的地中的任何元素集归零;在一个实施例中,当对应的掩码位具有0值时,目的地的元素被设置为0。此功能的子集是能够控制正在执行的操作的向量长度(即,被修改的元素的跨度,从第一个到最后一个);然而,被修改的元素不一定是连续的。因此,操作掩码字段允许部分向量操作,包括加载、存储、算术、逻辑等。虽然描述了其中操作掩码字段的内容选择多个操作掩码寄存器中包含要使用的操作掩码的一个操作掩码寄存器(因此操作掩码字段的内容间接标识要执行的掩码)的实施例,替代实施例替代地或附加地允许掩码写入字段的内容直接指定要执行的掩码。
P[19]可以与P[14:11]组合以便以非破坏性源语法对第二源向量寄存器进行编码,该非破坏性源语法可以使用P[19]访问高16个向量寄存器。P[20]编码多种功能,这些功能在不同类别的指令中有所不同,并且会影响向量长度/舍入控制说明符字段(P[22:21])的含义。P[23]表示支持合并-写入掩码(例如,当设置为0时)或支持归零和合并-写入掩码(例如,当设置为1时)。
下表详述了使用第三前缀1201(C)的指令中的寄存器编码的示例性实施例。
64位模式下的32寄存器支持
[2:0] REG.TYPE 公共用途
REG Mod R/M reg GPR,向量 目的地或源
VVVV VVVV GPR,向量 第2源或目的地
RM Mod R/M R/M GPR,向量 第1源或目的地
基址 Mod R/M R/M GPR 存储器寻址
索引 SIB.index GPR 存储器寻址
VIDX SIB.index 向量 VSIB存储器寻址
32位模式下的编码寄存器说明符
[2:0] REG.TYPE 公共用途
REG Mod R/M Reg k0-k7
VVVV VVVV k0-k7 第2源
RM Mod R/M R/M k0-k7 第1源
{k1} aaa k01-k7 操作掩码
操作掩码寄存器说明符编码
程序代码可以应用于输入指令以执行本文所述的功能并生成输出信息。可以以已知方式将输出信息应用于一个或多个输出设备。出于本申请的目的,处理系统包括具有处理器的任何系统,例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
程序代码可以以高级过程或面向对象的编程语言来实现以与处理系统通信。如果需要,程序代码也可以用汇编语言或机器语言来实现。事实上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况下,语言可以是编译语言或解释语言。
本文公开的机制的实施例可以以硬件、软件、固件或此类实现方法的组合来实现。实施例可以实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备的可编程系统上执行的计算机程序或程序代码。
至少一个实施例的一个或多个方面可以通过存储在机器可读介质上的代表性指令来实现,该机器可读介质表示处理器内的各种逻辑,当被机器读取时使机器制造逻辑以执行本文描述的技术。这种称为“IP核心”的表示可以存储在有形的机器可读介质上,并提供给各种客户或制造设施,以加载到实际制造逻辑或处理器的制造机器中。
这样的机器可读存储介质可以包括但不限于由机器或设备制造或形成的物品的非暂态有形布置,包括存储介质,例如硬盘,任何其他类型的盘,包括软盘、光盘、压缩盘只读存储器(CD-ROM)、压缩盘可重写(CD-RW)和磁光盘,半导体器件,例如只读存储器(ROM)、随机存取存储器(RAM),例如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM)、磁卡或光卡,或任何其他类型的适合存储电子指令的介质。
因此,实施例还包括包含指令或包含例如硬件描述语言(HDL)的设计数据的非暂态有形机器可读介质,其定义了本文描述的结构、电路、装置、处理器和/或系统特征。这样的实施例也可以称为程序产品。
仿真(包括二进制转译、代码变形等)
在一些情况下,指令转换器可以用于将指令从源指令集转换到目标指令集。例如,指令转换器可以将指令转译(例如,使用静态二进制转译、包括动态编译的动态二进制转译)、变形、仿真或者以其他方式转换为要被核心处理的一个或多个其他指令。可以用软件、硬件、固件或者其组合来实现指令转换器。指令转换器可以在处理器上、在处理器外、或者一部分在处理器上而一部分在处理器外。
图18示出了根据实施例的对比使用软件指令转换器将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图。在所示实施例中,指令转换器是软件指令转换器,但替代地,可以用软件、固件、硬件或者其各种组合来实现指令转换器。图18示出了高级别语言1802的程序可被使用第一ISA编译器1804来编译以生成第一ISA二进制代码1806,第一ISA二进制代码1806可以由具有至少一个第一ISA指令集核心的处理器1816来本地执行。具有至少一个第一ISA指令集核心的处理器1816表示任何这样的处理器,该处理器可以通过兼容地执行或以其他方式处理(1)第一ISA指令集核心的指令集的实质部分或者(2)针对在具有至少一个第一ISA指令集核心的英特尔处理器上运行的应用或其他软件的目标代码版本,来执行与具有至少一个第一ISA指令集核心的处理器基本上相同的功能,以便实现与具有至少一个第一ISA指令集核心的处理器基本上相同的结果。第一ISA编译器1804表示可操作来生成第一ISA二进制代码1806(例如,目标代码)的编译器,第一ISA二进制代码1806可以在具有或不具有额外的链接处理的情况下,在具有至少一个第一ISA指令集核心的处理器1816上被执行。类似地,图18示出了高级别语言1802的程序可以使用替代指令集编译器1808来编译以生成替代指令集二进制代码1810,替代指令集二进制代码1810可以由不具有至少一个第一ISA指令集核心的处理器1814来本地执行。指令转换器1812用于将第一ISA二进制代码1806转换成可以由不具有第一ISA指令集核心的处理器1814本地执行的代码。该经转换的代码不太可能与替代指令集二进制代码1810相同,因为能够做到这一点的指令转换器是难以制作的;然而,经转换的代码将实现一般操作并且由来自替代指令集的指令构成。因此,指令转换器1812表示通过仿真、模拟或任何其他过程来允许不具有第一ISA指令集处理器或核心的处理器或其他电子设备执行第一ISA二进制代码1806的软件、固件、硬件或者其组合。
在前面的描述中,为了提供更全面的理解,可以阐述许多具体细节,例如,组件和系统配置。然而,本领域的技术人员将理解,实施例可以在没有此类具体细节的情况下实施。此外,一些众所周知的结构、电路和其他特征没有被详细显示,以避免不必要地模糊说明书。
如在说明书和附图中所使用的,被称为框、块、单元、引擎等的项可以代表硬件、逻辑门、存储单元、电路、电路系统等,和/或可以用硬件、逻辑门、存储单元、电路、电路系统等实现。
对“一个实施例”、“实施例”、“示例实施例”等的引用表明所描述的实施例可以包括特定的特征、结构或特性,但不一定每个实施例可能都包括该特定的特征、结构或特性。此外,这些短语不一定指的是同一个实施例。此外,当结合实施例描述特定的特征、结构或特性时,认为结合其他实施例实现这种特征、结构或特性在本领域技术人员的知识范围内,无论是否明确描述。
此外,在上述各种实施例中,除非另外特别指出,否则诸如短语“A、B或C中的至少一个”之类的分离性语言旨在被理解为表示A、B或C,或其任何组合(例如,A、B和/或C)。因此,该分离性语言不旨在、也不应被理解为暗示给定实施例要求至少一个A、至少一个B、或至少一个C各自存在。
如在本说明书和权利要求书中所使用的并且除非另有说明,使用序数形容词“第一”、“第二”、“第三”等来描述元素仅表示元素的特定实例或相同元素的不同实例被引用,并且不旨在暗示如此描述的元素必须在时间上、空间上、排名上或以任何其他方式处于特定顺序。此外,如在实施例的描述中所使用的,项之间的“/”字符可表示实施例可以包括第一项和/或第二项(和/或任何其他附加项),或者可以使用、利用和/或根据第一项和/或第二项(和/或任何其他附加项)来实施。
在本说明书中,流程图中的操作可能已经参考其他附图的示例性实施例进行了描述。然而,应理解,流程图的操作可以由除了参照其他附图讨论的实施例以外的实施例执行,并且参照其他附图讨论的实施例可以执行与参照流程图讨论的操作不同的操作。此外,虽然附图中的流程图示出了由某些实施例执行的操作的特定顺序,但应理解,这种顺序是作为示例被提供的(例如,替代实施例可以以不同的顺序执行操作、组合某些操作、重叠某些操作等)。
因此,本说明书和附图应以说明性而非限制性的意义来看待。然而,将明显的是,在不背离权利要求书中所阐述的本公开的更广泛的精神和范围的情况下,可以对其进行各种修改和改变。

Claims (20)

1.一种用于可变长度指令引导的装置,包括:
解码集群,包括多个指令解码器;以及
块引导电路,用于执行以下操作:
将指令字节序列分解为多个块,
基于关于所述多个块中的一个或多个块中的每个块中的指令数量的一个或多个指示,从所述多个块中的所述一个或多个块创建切片,其中,所述切片具有可变大小并且包括多个指令,以及
将所述切片引导至所述解码集群。
2.根据权利要求1所述的装置,其中,所述多个块中的每个块具有固定大小,其中,每个块的固定大小等于每个其他块的固定大小。
3.根据权利要求1所述的装置,其中,所述解码集群还包括:指令引导电路,用于将所述多个指令中的第一指令引导至所述多个指令解码器中的第一指令解码器,并将所述多个指令中的第二指令引导至所述多个指令解码器中的第二指令解码器。
4.根据权利要求3所述的装置,其中,所述解码集群还包括:集群块队列,用于接收来自所述块引导电路的所述切片,并存储所述切片以便由所述指令引导电路进行指令引导。
5.根据权利要求4所述的装置,其中,所述指令引导电路用于向所述多个指令解码器中的每一个指令解码器提供每个时钟周期最多一条指令。
6.根据权利要求1所述的装置,其中,所述解码集群是多个解码集群中的一个,并且所述块引导电路用于执行以下操作:
从所述多个块创建多个切片,并且
将所述多个切片中的每一个切片引导至所述多个解码集群中的相应解码集群。
7.根据权利要求6所述的装置,其中,所述块引导电路用于以循环方式将所述多个切片中的每一个切片引导至所述相应解码集群。
8.根据权利要求6所述的装置,其中,所述多个解码集群中的每一个解码集群包括:
多个指令解码器,以及
指令引导电路,用于将所述多个切片中的一个切片的每条指令引导至所述多个指令解码器中的相应一个指令解码器。
9.根据权利要求1所述的装置,还包括:指令提取电路,用于向所述指令引导电路提供所述指令字节序列。
10.根据权利要求9所述的装置,其中,所述指令字节序列是要由所述指令提取电路提供的多个指令字节序列中的一个,其中,所述多个指令字节序列中的每一个指令字节序列包括最多固定数量的缓存线。
11.根据权利要求1所述的装置,其中,所述块引导电路用于在从所述多个块中的一个或多个块创建所述切片与从所述多个块中的仅一个块创建所述切片之间动态切换。
12.根据权利要求11所述的装置,其中,所述块引导电路用于基于时序约束来动态切换。
13.根据权利要求1所述的装置,其中,关于所述多个块中的所述一个或多个块中的每个块中的指令数量的一个或多个指示包括一个或多个指令结束标记。
14.根据权利要求13所述的装置,其中,创建所述切片包括对所述指令结束标记进行计数。
15.根据权利要求1所述的装置,其中,创建所述切片包括掩蔽分支指令和所述分支指令的目标之间的指令字节。
16.根据权利要求1所述的装置,其中,创建所述切片包括:
创建包括固定数量指令的预切片,并且
基于所述预切片中的块的数量来划分所述预切片。
17.一种用于可变长度指令引导的方法,包括:
将指令字节序列分解为多个块,
基于关于所述多个块中的一个或多个块中的每个块中的指令数量的一个或多个指示,从所述多个块中的所述一个或多个块创建切片,其中,所述切片具有可变大小并且包括多个指令,以及
将所述切片引导至解码集群,其中,所述解码集群包括多个指令解码器。
18.根据权利要求17所述的方法,还包括:
将所述切片写入集群块队列,
从所述集群块队列读取所述切片,以及
将所述多个指令中的第一指令引导至所述多个指令解码器中的第一指令解码器,并且将所述多个指令中的第二指令引导至所述多个指令解码器中的第二指令解码器。
19.一种用于可变长度指令引导的系统,包括:
多个处理器核心,其中,所述处理器核心中的至少一个包括:
缓存,用于存储指令字节序列;
解码集群,包括多个指令解码器;以及
块引导电路,用于执行以下操作:
将所述指令字节序列分解为多个块,
基于关于所述多个块中的一个或多个块中的每个块中的指令数量的一个或多个指示,从所述多个块中的所述一个或多个块创建切片,其中,所述切片具有可变大小并且包括多个指令,并且
将所述切片引导至所述解码集群;以及
存储器控制器,用于将所述指令字节序列从动态随机存取存储器DRAM提供到所述缓存。
20.根据权利要求19所述的系统,还包括所述DRAM。
CN202310176210.5A 2022-04-02 2023-02-28 对指令解码集群的可变长度指令引导 Pending CN116893848A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/712,139 US20230315473A1 (en) 2022-04-02 2022-04-02 Variable-length instruction steering to instruction decode clusters
US17/712,139 2022-04-02

Publications (1)

Publication Number Publication Date
CN116893848A true CN116893848A (zh) 2023-10-17

Family

ID=85415449

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310176210.5A Pending CN116893848A (zh) 2022-04-02 2023-02-28 对指令解码集群的可变长度指令引导

Country Status (3)

Country Link
US (1) US20230315473A1 (zh)
EP (1) EP4254179A1 (zh)
CN (1) CN116893848A (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11928472B2 (en) * 2020-09-26 2024-03-12 Intel Corporation Branch prefetch mechanisms for mitigating frontend branch resteers

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5565228B2 (ja) * 2010-09-13 2014-08-06 ソニー株式会社 プロセッサ
US11907712B2 (en) * 2020-09-25 2024-02-20 Intel Corporation Methods, systems, and apparatuses for out-of-order access to a shared microcode sequencer by a clustered decode pipeline

Also Published As

Publication number Publication date
EP4254179A1 (en) 2023-10-04
US20230315473A1 (en) 2023-10-05

Similar Documents

Publication Publication Date Title
US20220197975A1 (en) Apparatus and method for conjugate transpose and multiply
US20220206743A1 (en) Instructions to convert from fp16 to bf8
EP4254179A1 (en) Variable-length instruction steering to instruction decode clusters
US10545735B2 (en) Apparatus and method for efficient call/return emulation using a dual return stack buffer
EP4016290A1 (en) Efficient multiply and accumulate instruction when an operand is equal to or near a power of two
EP4020174A1 (en) Apparatus and method for complex matrix multiplication
EP4020177A1 (en) Apparatus and method for complex matrix conjugate transpose
EP4016289A1 (en) Efficient divide and accumulate instruction when an operand is equal to or near a power of two
EP4202656A1 (en) Random data usage
US20230205685A1 (en) Read all zeros or random data upon a first read from volatile memory
EP4202660A1 (en) Conversion instructions
EP4141659A1 (en) Bfloat16 arithmetic instructions
US20230205527A1 (en) Conversion instructions
EP4202659A1 (en) Conversion instructions
US20230205436A1 (en) Zero cycle memory initialization
EP4109248A1 (en) Dual sum of quadword 16x16 multiply and accumulate
EP4202657A1 (en) Memory controller with arithmetic logic unit and/or floating point unit
US20240004660A1 (en) Conditional load and/or store
US20240004661A1 (en) Add with rotation instruction and support
US20220100514A1 (en) Loop support extensions
US20240111539A1 (en) Device, method and system to determine a mode of processor operation based on page table metadata
EP4141657A1 (en) Bfloat16 square root and/or reciprocal square root instructions
EP4307111A1 (en) Vector unpack based on selection information
US20230401067A1 (en) Concurrently fetching instructions for multiple decode clusters
US20220308998A1 (en) Apparatus and method to reduce bandwidth and latency overheads of probabilistic caches

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication