用于乱序集群化解码中的负载平衡的系统和方法与流程

文档序号:17727730发布日期:2019-05-22 02:38阅读:283来源:国知局
用于乱序集群化解码中的负载平衡的系统和方法与流程

本申请要求2016年9月29日提交的题为“用于乱序集群化解码中的负载平衡的系统和方法”(“systemandmethodforloadbalancinginout-of-orderclustereddecoding”)的美国非临时专利申请no.15/280,460的优先权权益,该美国非临时专利申请通过引用整体结合于此。

本公开涉及处理逻辑、微处理器以及相关联的指令集架构领域,当由处理器或其他处理逻辑执行该指令集架构时,该指令集架构执行逻辑、数学或其他功能性操作。

相关技术的描述

多处理器系统正变得越来越普遍。多处理器系统的应用包括动态域分区一直到桌面计算。为了利用多处理器系统,要被执行的代码可被分成多个线程以供各种处理实体执行。每个线程可以彼此并行地执行。可以在系统中实现应用的流水线操作以便更高效地执行应用。可以将如在处理器上所接收的指令解码为原生的或更原生的术语或指令字以供在处理器上执行。处理器可以实现在芯片上系统中。

附图说明

在附图中的诸个图中通过示例而非限制地示出各个实施例:

图1a是根据本公开的实施例的示例性计算机系统的框图,该计算机系统被形成为具有可以包括用于执行指令的执行单元的处理器;

图1b示出了根据本公开的实施例的数据处理系统;

图1c示出了用于执行文本串比较操作的数据处理系统的其他实施例;

图2是根据本公开的实施例的处理器的微架构的框图,处理器可以包括用于执行指令的逻辑电路;

图3a示出了根据本公开的实施例的多媒体寄存器中的各种紧缩数据类型表示;

图3b示出了根据本公开的实施例的可能的寄存器内数据存储格式;

图3c示出了根据本公开的实施例的多媒体寄存器中的各种有符号和无符号紧缩数据类型表示;

图3d示出了操作编码格式的实施例;

图3e示出了根据本公开的实施例的具有四十位或更多位的另一可能的操作编码格式;

图3f示出了根据本公开的实施例的又一可能的操作编码格式;

图4a是示出根据本公开的实施例的有序流水线以及寄存器重命名级、乱序发布/执行流水线的框图;

图4b是示出根据本公开的实施例的、要被包括在处理器中的有序架构核以及寄存器重命名逻辑、乱序发布/执行逻辑的框图;

图5a是根据本公开的实施例的处理器的框图;

图5b是根据本公开的实施例的核的示例实现的框图;

图6是根据本公开的实施例的系统的框图;

图7是根据本公开的实施例的第二系统的框图;

图8是根据本公开的实施例的第三系统的框图;

图9是根据本公开的实施例的芯片上系统的框图;

图10示出了根据本公开的实施例的处理器,包括中央处理单元和图形处理单元,该处理器可执行至少一条指令;

图11是示出根据本公开的实施例的ip核开发的框图;

图12示出了根据本公开的实施例的不同类型的处理器可以如何仿真第一类型的指令;

图13示出了根据本公开的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图;

图14是根据本公开的实施例的处理器的指令集架构的框图;

图15是根据本公开的实施例的处理器的指令集架构的更具体的框图;

图16是根据本公开的实施例的用于处理器的指令集架构的执行流水线的框图;

图17是根据本公开的实施例的用于利用处理器的电子设备的框图;

图18是根据本公开的实施例的用于乱序集群化解码的示例系统的示图;

图19是根据本公开的实施例的用于执行乱序集群化解码的方法的示图;

图20是根据本公开的实施例的具有前端的示例处理器核的示图,该前端包括多个两宽度解码集群;

图21是根据本公开的实施例的用于将负载平衡应用于乱序集群化解码的方法的示图;

图22是根据本公开的实施例的用于将负载平衡应用于乱序集群化解码的示例处理器核的示图;

图23是根据本公开的实施例的用于生成乱序集群化解码的负载平衡触发条件的方法的示图;

图24是根据本公开的实施例的用于取决于负载平衡触发条件来执行乱序集群化解码的方法的示图;

图25是根据本公开的实施例的示例分支目标缓冲器的示图,其中条目利用可用于触发解码集群之间的负载平衡动作的信息来注释;

图26是根据本公开的实施例的用于聚集指令相关的数据元素以用于并行解码的方法的示图;

图27是根据本公开的实施例的用于对指令相关的数据元素的乱序子集解码并且合并结果以将有序的uop的集合提供给处理器核后端的执行集群以供执行的方法的示图;以及

图28a-28d示出根据本公开的实施例的利用负载平衡的乱序集群化解码的应用的示例。

具体实施方式

以下描述描述了用于乱序集群化解码中的负载平衡的处理装置和处理逻辑。此类处理装置可以包括乱序处理器。在以下描述中,陈述了诸如处理逻辑、处理器类型、微架构状况、事件、启用机制等众多特定细节,以提供对本公开的实施例的更透彻理解。然而,本领域技术人员将领会,没有这些具体细节也可实施实施例。此外,没有详细示出一些公知的结构、电路等,以避免不必要地使本公开的多个实施例模糊。

虽然参照处理器来描述下列各实施例,但是,其他实施例也适用于其他类型的集成电路和逻辑器件。本公开的实施例的类似技术和教导可应用于可受益于更高的流水线吞吐量和改善的性能的其他类型的电路或半导体器件。本公开的诸个实施例的教导适用于执行数据操纵的任何处理器或机器。然而,实施例不限于执行512位、256位、128位、64位、32位或16位数据操作的处理器或机器,并可以应用于其中可以执行对数据的操纵或管理的任何处理器和机器。另外,下列描述提供了示例,并且为了进行说明,所附附图示出各种示例。然而,这些示例不应当以限制性意义来解释,因为它们仅仅旨在提供本公开的诸个实施例的示例,而并非对本公开的实施例的所有可能实现方式进行穷举。

虽然下述的示例是在执行单元和逻辑电路情境下描述指令处理和分配,但本公开的其他实施例也可通过存储在机器可读有形介质上的数据和/或指令来完成,这些数据和/或指令在被机器执行时使得机器执行与本公开至少一个实施例相一致的功能。在一个实施例中,与本公开的实施例相关联的功能被具体化在机器可执行指令中。这些指令可用来使可以通过这些指令而被编程的通用处理器或专用处理器执行本公开的操作。本公开的一些实施例也可以作为计算机程序产品或软件来提供,该计算机程序产品或软件可包括其上存储有指令的机器或计算机可读介质,这些指令可被用来对计算机(或其他电子设备)进行编程来执行根据本公开的实施例的一个或多个操作。此外,本公开的多个实施例的多个操作可由包含用于执行这些操作的固定功能逻辑的专用硬件组件来执行,或由经编程的计算机组件以及固定功能硬件组件的任何组合来执行。

被用于对逻辑进行编程以执行本公开的诸个实施例的指令可被存储在系统的存储器(诸如,dram、高速缓存、闪存、或其他存储器)中。此外,指令可经由网络或通过其他计算机可读介质来分配。因此,机器可读介质可包括用于以机器(诸如,计算机)可读形式存储或发送信息的任何机制,但不限于:软盘、光盘、紧凑盘只读存储器(cd-rom)、磁光盘、只读存储器(rom)、随机存取存储器(ram)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)、磁卡或光卡、闪存、或在经由互联网通过电、光、声、或其他形式的传播信号(诸如,载波、红外信号、数字信号等)发送信息中所用的有形机器可读存储器。因此,计算机可读介质可以包括适用于以机器(例如,计算机)可读形式存储或发送电子指令或信息的任何类型的有形的机器可读介质。

设计会经历多个阶段,从创造到仿真到制造。表示设计的数据可用多种方式来表示该设计。首先,像仿真中可以有用的那样,可以使用硬件描述语言或另一功能性描述语言来表示硬件。此外,可在设计过程的某些阶段产生具有逻辑和/或晶体管门电路的电路级模型。此外,设计在某个阶段可以达到表示硬件模型中各种设备的物理布置的数据的层级。在使用一些半导体制造技术的情况下,表示硬件模型的数据可以是指定在用于制造集成电路的掩模的不同掩模层上存在或不存在各种特征的数据。在任何设计表示中,数据可以被存储在任何形式的机器可读介质中。存储器或者磁或光存储设备(诸如,盘)可以是存储经由光或电波发送的信息的机器可读介质,调制或以其他方式生成这些光或电波以发送这些信息。当发送指示或承载代码或设计的电载波达到实现该电信号的复制、缓冲或重新发送的程度时,可以产生新的副本。因此,通信提供商或网络提供商会在有形机器可读介质上至少临时地存储具体化本公开的诸个实施例的技术的物品(诸如,编码在载波中的信息)。

在现代处理器中,可以将多个不同的执行单元用于处理和执行各种代码和指令。一些指令可以更快地完成,而其他指令可能需要多个时钟周期来完成。指令的吞吐量越快,则处理器的总体性能越好。因此,使尽可能多的指令尽可能快地执行将会是有利的。然而,可能存在具有较大的复杂度并且在执行时间和处理器资源方面要求更多的某些指令,诸如浮点指令、加载/存储操作、数据移动等等。

因为更多的计算机系统被用于互联网、文本以及多媒体应用,所以已逐渐地引进了附加的处理器支持。在一个实施例中,指令集可与一个或多个计算机架构相关联,一个或多个计算机架构包括:数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理以及外部输入和输出(i/o)。

在一个实施例中,指令集架构(isa)可由一个或多个微架构来实现,微架构可包括用于实现一个或多个指令集的处理器逻辑和电路。因此,具有不同微架构的多个处理器可共享公共指令集的至少一部分。例如,奔腾四(pentium4)处理器、酷睿(coretm)处理器、以及来自加利福尼亚州桑尼威尔(sunnyvale)的超微半导体有限公司(advancedmicrodevices,inc.)的多个处理器实现几乎相同版本的x86指令集(具有已随更新的版本加入的一些扩展),但具有不同的内部设计。类似地,由其他处理器开发公司(诸如,arm控股有限公司、mips或它们的授权方或兼容方)设计的多个处理器可共享至少一部分公共指令集,但可包括不同的处理器设计。例如,isa的相同寄存器架构在不同的微架构中可使用新的或公知的技术以不同方法来实现,包括专用物理寄存器、使用寄存器重命名机制(例如,使用寄存器别名表(rat)、重排序缓冲器(rob)以及引退寄存器堆)的一个或多个动态分配物理寄存器。在一个实施例中,寄存器可包括:可由软件编程者寻址或不可由软件编程者寻址的一个或多个寄存器、寄存器架构、寄存器堆、或其他寄存器集合。

指令可以包括一个或多个指令格式。在一个实施例中,指令格式可指示多个字段(位的数量、位的位置等)以指定将要被执行的操作以及将要对其执行操作的操作数等。在进一步的实施例中,一些指令格式可由指令模板(或子格式)进一步定义。例如,给定指令格式的指令模板可被定义为具有指令格式字段的不同的子集,和/或被定义为具有以不同方式进行解释的给定字段。在一个实施例中,可以使用指令格式(并且,如果定义过,则以该指令格式的指令模板中的给定的一个)来表示指令,并且该指令指定或指示操作以及该操作将操作的操作数。

科学应用、金融应用、自动向量化通用应用、rms(识别、挖掘和合成)应用以及视觉和多媒体应用(例如,2d/3d图形、图像处理、视频压缩/解压缩、语音识别算法和音频处理)可能需要对大量数据项执行相同的操作。在一个实施例中,单指令多数据(simd)指的是使得处理器对多个数据元素执行一个操作的指令类型。可将simd技术用于可将寄存器中的多个位逻辑地划分为多个固定尺寸或可变尺寸的数据元素(每个数据元素表示单独的值)的处理器中。例如,在一个实施例中,可将64位寄存器中的多个位组织为包含四个单独的16位数据元素的源操作数,每个数据元素表示单独的16位的值。该数据类型可被称为‘紧缩’数据类型或‘向量’数据类型,并且该数据类型的操作数可被称为紧缩数据操作数或向量操作数。在一个实施例中,紧缩数据项或向量可以是存储在单个寄存器中的紧缩数据元素的序列,并且紧缩数据操作数或向量操作数可以是simd指令(或“紧缩数据指令”或“向量指令”)的源操作数或目的地操作数。在一个实施例中,simd指令指定了将要对两个源向量操作数执行以生成具有相同或不同尺寸的、具有相同或不同数量的数据元素的、具有相同或不同数据元素顺序的目的地向量操作数(也被称为结果向量操作数)的单个向量操作。

诸如由酷睿(coretm)处理器(具有包括x86、mmxtm、流simd扩展(sse)、sse2、sse3、sse4.1、sse4.2指令的指令集)、arm处理器(诸如,arm处理器族,具有包括向量浮点(vfp)和/或neon指令的指令集)和mips处理器(诸如,中国科学院计算机技术研究所(ict)开发的龙芯处理器族)所采用的simd技术之类的simd技术在应用性能上带来了极大的提高(coretm和mmxtm是加利福尼亚州圣克拉拉市的英特尔公司的注册商标或商标)。

在一个实施例中,目的地寄存器/数据和源寄存器/数据可以是表示对应数据或操作的源和目的地的通用术语。在一些实施例中,它们可由寄存器、存储器或具有与所描绘的那些名称或功能不同的名称或功能的其他存储区域来实现。例如,在一个实施例中,“dest1”可以是临时存储寄存器或其他存储区域,而“src1”和“src2”可以是第一和第二源存储寄存器或其他存储区域,等等。在其他实施例中,src和dest存储区域中的两个或更多可对应于相同存储区域中的不同数据存储元素(例如,simd寄存器)。在一个实施例中,通过例如将对第一和第二源数据执行的操作的结果写回至两个源寄存器中作为目的地寄存器的那个寄存器,源寄存器中的一个也可以作为目的地寄存器。

图1a是根据本公开的实施例的示例性计算机系统的框图,该计算机系统被形成为具有可以包括用于执行指令的执行单元的处理器。根据本公开,诸如在本文中所描述的实施例中,系统100可以包括诸如处理器102之类的组件,该处理器102用于使用包括逻辑的执行单元以执行算法来处理数据。系统100可以代表基于可从美国加利福尼亚州圣克拉拉市的英特尔公司获得的iii、4、xeontmxscaletm和/或strongarmtm微处理器的处理系统,不过也可使用其他系统(包括具有其他微处理器的pc、工程工作站、机顶盒等)。在一个实施例中,样本系统100可执行可从美国华盛顿州雷蒙德市的微软公司获得的windowstm操作系统的一个版本,不过也可使用其他操作系统(例如unix和linux)、嵌入式软件、和/或图形用户界面。因此,本公开的各实施例不限于硬件电路和软件的任何特定组合。

诸实施例不限于计算机系统。本公开的一些实施例可用于其他设备,诸如手持式设备和嵌入式应用。手持式设备的某些示例包括蜂窝电话、网际协议设备、数码相机、个人数字助理(pda)以及手持式pc。嵌入式应用可包括微控制器、数字信号处理器(dsp)、芯片上系统、网络计算机(netpc)、机顶盒、网络集线器、广域网(wan)交换机、或可执行根据至少一个实施例的一条或多条指令的任何其他系统。

计算机系统100可包括处理器102,处理器102可包括一个或多个执行单元108,用于执行算法以执行根据本公开的一个实施例的至少一个指令。可在单处理器桌面或服务器系统的情境中描述一个实施例,但是可将其他实施例包括在多处理器系统中。系统100可以是“中枢”系统架构的示例。系统100可以包括处理器102以用于处理数据信号。处理器102可以包括复杂指令集计算机(cisc)微处理器、精简指令集计算(risc)微处理器、超长指令字(vliw)微处理器、实现多个指令集组合的处理器或任意其他处理器设备(例如,数字信号处理器)。在一个实施例中,处理器102可以耦合至处理器总线110,处理器总线110可以在处理器102与系统100中的其他组件之间传输数据信号。系统100的多个要素可以执行为熟悉本领域的人员所公知的它们的常规功能。

在一个实施例中,处理器102可以包括第一级(l1)内部高速缓存存储器104。取决于架构,处理器102可具有单个内部高速缓存或多级内部高速缓存。在另一个实施例中,高速缓存存储器可驻留在处理器102的外部。其他实施例也可包括内部高速缓存和外部高速缓存的组合,这取决于特定实现和需求。寄存器堆106可将不同类型的数据存储在各种寄存器(包括整数寄存器、浮点寄存器、状态寄存器、指令指针寄存器)中。

执行单元108(包括用于执行整数和浮点操作的逻辑)也驻留在处理器102中。处理器102还可包括存储用于某些宏指令的微代码的微代码(ucode)rom。在一个实施例中,执行单元108可以包括用于处置紧缩指令集109的逻辑。通过将紧缩指令集109包括在通用处理器102以及用于执行指令的相关联的电路的指令集中,可以使用通用处理器102中的紧缩数据来执行由许多多媒体应用使用的操作。因此,通过将处理器数据总线的完整宽度用于对紧缩数据执行操作,可加速并更高效地执行许多多媒体应用。这可减少在处理器数据总线上传输更小数据单元以在一个时间对一个数据元素执行一个或多个操作的需要。

执行单元108的实施例也可以用于微控制器、嵌入式处理器、图形设备、dsp及其他类型的逻辑电路。系统100可以包括存储器120。存储器120可以实现为动态随机存取存储器(dram)设备、静态随机存取存储器(sram)设备、闪存设备或其他存储器设备。存储器120可存储由可由处理器102执行的数据信号来表示的指令119和/或数据121。

系统逻辑芯片116可以耦合至处理器总线110和存储器120。系统逻辑芯片116可以包括存储器控制器中枢(mch)。处理器102可以经由处理器总线110与mch116通信。mch116可以提供至存储器120的高带宽存储器路径118,用于指令119和数据121的存储,并且用于图形命令、数据和纹理的存储。mch116可以引导处理器102、存储器120以及系统100内的其他组件之间的数据信号,并用于在处理器总线110、存储器120和系统i/o122之间桥接数据信号。在一些实施例中,系统逻辑芯片116可提供用于耦合至图形控制器112的图形端口。mch116可通过存储器接口118耦合至存储器120。图形卡112可通过加速图形端口(agp)互连114耦合至mch116。

系统100可使用专有中枢接口总线122以将mch116耦合至i/o控制器中枢(ich)130。在一个实施例中,ich130可经由本地i/o总线来提供到某些i/o设备的直接连接。本地i/o总线可包括用于将外围设备连接到存储器120、芯片组以及处理器102的高速i/o总线。示例可包括音频控制器129、固件中枢(闪存bios)128、无线收发机126、数据存储设备124、包括用户输入接口125(其可以包括键盘接口)的传统i/o控制器123、串行扩展端口127(诸如,通用串行总线(usb))以及网络控制器134。数据存储设备124可以包括硬盘驱动器、软盘驱动器、cd-rom设备、闪存设备、或其他大容量存储设备。

对于系统的另一个实施例,根据一个实施例的指令可以与芯片上系统一起使用。芯片上系统的一个实施例包括处理器和存储器。用于一个这样的系统的存储器可以包括闪存。闪存可位于与处理器和其他系统组件相同的管芯上。此外,诸如存储器控制器或图形控制器之类的其他逻辑块也可位于芯片上系统上。

图1b示出数据处理系统140,该数据处理系统140实现本公开的实施例的原理。本领域的技术人员将容易理解,本文描述的多个实施例可利用替代的处理系统来操作,而不背离本公开的多个实施例的范围。

计算机系统140包括用于执行根据一个实施例的至少一条指令的处理核159。在一个实施例中,处理核159表示任何类型的架构(包括但不限于,cisc、risc或vliw类型架构)的处理单元。处理核159也可适于以一种或多种工艺技术来制造,并且通过足够详细地表示在机器可读介质上可适用于促进所述制造。

处理核159包括执行单元142、一组寄存器堆145以及解码器144。处理核159也可以包括对于理解本公开的实施例不是必需的附加电路(未示出)。执行单元142可以执行处理核159接收到的指令。除了执行典型的处理器指令外,执行单元142也可执行紧缩指令集143中的指令,以便对紧缩数据格式执行操作。紧缩指令集143可包括用于执行本公开的多个实施例的指令以及其他紧缩指令。执行单元142可通过内部总线耦合至寄存器堆145。寄存器堆145可表示处理核159上用于存储包括数据的信息的存储区域。如前文所述,可以理解,该存储区域可以存储紧缩数据并不是关键的。执行单元142可以耦合至解码器144。解码器144可以将处理核159接收到的指令解码为控制信号和/或微代码进入点。响应于这些控制信号和/或微代码进入点,执行单元142执行合适的操作。在一个实施例中,解码器可以解释指令的操作码,该操作码将指示应当对该指令内所指示的对应数据执行什么操作。

处理核159可以与总线141耦合,用于与各种其他系统设备进行通信,其他系统设备可包括但不限于:例如,同步动态随机存取存储器(sdram)控制器146、静态随机存取存储器(sram)控制器147、猝发闪存接口148、个人计算机存储卡国际协会(pcmcia)/紧致闪存(cf)卡控制器149、液晶显示器(lcd)控制器150、直接存储器存取(dma)控制器151、以及替代的总线主接口152。在一个实施例中,数据处理系统140也可包括i/o桥154,用于经由i/o总线153与各种i/o设备进行通信。此类i/o设备可包括但不限于:例如,通用异步接收机/发射机(uart)155、通用串行总线(usb)156、蓝牙无线uart157、以及i/o扩展接口158。

数据处理系统140的一个实施例提供了移动通信、网络通信和/或无线通信,并提供了可执行包括文本串比较操作的simd操作的处理核159。可利用各种音频、视频、成像和通信算法对处理核159进行编程,这些算法包括:离散变换(诸如walsh-hadamard变换、快速傅立叶变换(fft)、离散余弦变换(dct)以及它们相应的逆变换);压缩/解压缩技术(例如,色彩空间变换、视频编码运动估计或视频解码运动补偿);以及调制/解调(modem)功能(例如,脉冲编码调制(pcm))。

图1c示出了执行simd文本串比较操作的数据处理系统的其他实施例。在一个实施例中,数据处理系统160可包括主处理器166、simd协处理器161、高速缓存存储器167以及输入/输出系统168。输入/输出系统168可以可选地耦合至无线接口169。simd协处理器161可以执行包括根据一个实施例的指令的操作。在一个实施例中,处理核170可适用于以一种或多种工艺技术来制造,并且通过足够详细地表示在机器可读介质上,可适用于促进包括处理核170的数据处理系统160的全部或部分的制造。

在一个实施例中,simd协处理器161包括执行单元162以及一组寄存器堆164。主处理器166的一个实施例包括解码器165,该解码器165用于识别包括根据一个实施例的、用于由执行单元162执行的指令的指令集163中的多条指令。在其他实施例中,simd协处理器161也包括用于对指令集163中的多条指令进行解码的解码器165的至少部分(示出为165b)。处理核170也可以包括对于理解本公开的实施例不是必需的附加电路(未示出)。

在操作中,主处理器166执行控制通用类型的数据处理操作(包括与高速缓存存储器167和输入/输出系统168之间的交互)的数据处理指令流。simd协处理器指令可以被嵌入到该数据处理指令流中。主处理器166的解码器165将这些simd协处理器指令识别为应当由附连的simd协处理器161来执行的类型。因此,主处理器166在协处理器总线171上发布这些simd协处理器指令(或表示simd协处理器指令的控制信号)。可以由任何附连的simd协处理器从协处理器总线171接收这些指令。在这种情况下,simd协处理器161可以接受并执行任何接收到的针对该simd协处理器的simd协处理器指令。

可经由无线接口169接收数据以通过simd协处理器指令进行处理。对于一个示例,能以数字信号的形式接收到语音通信,可由simd协处理器指令处理该数字信号以便重新生成表示该语音通信的数字音频样本。对于另一个示例,能以数字位流的形式接收到被压缩的音频和/或视频,可由simd协处理器指令处理该数字位流以便重新生成数字音频样本和/或运动视频帧。在处理核170的一个实施例中,主处理器166和simd协处理器161可被集成在单个处理核170中,该单个处理核170包括执行单元162、一组寄存器堆164以及用于识别包括根据一个实施例的多条指令的指令集163中的多条指令的解码器165。

图2是根据本公开的实施例的处理器200的微架构的框图,处理器200可以包括用于执行指令的逻辑电路。在一些实施例中,可将根据一个实施例的指令实现为对具有字节尺寸、字尺寸、双字尺寸、四字尺寸等并具有诸多数据类型(例如,单精度和双精度整数和浮点数据类型)的数据元素进行操作。在一个实施例中,有序前端201可以实现处理器200的部分,该部分可以取出要被执行的指令,并准备这些指令以便稍后在处理器流水线中使用。前端201可以包括若干单元。在一个实施例中,指令预取器226从存储器中取出指令,并将这些指令馈送至指令解码器228,指令解码器228进而解码或解释这些指令。例如,在一个实施例中,解码器将所接收到的指令解码为机器可执行的被称为“微指令”或“微操作”(也称为微op或uop)的一个或多个操作。在其他实施例中,该解码器将指令解析为可由微架构用于执行根据一个实施例的多个操作的操作码以及对应的数据和控制字段。在一个实施例中,追踪高速缓存230可以在uop队列234中将经解码的uop组合为程序排序的序列或踪迹,以用于执行。当追踪高速缓存230遇到复杂指令时,微代码rom232提供完成操作所需的uop。

一些指令可以被转换为单个微op,而其他指令需要若干个微op以完成完整的操作。在一个实施例中,如果需要多于四个微op来完成指令,则解码器228可以访问微代码rom232以执行该指令。在一个实施例中,可将指令解码为少量的微op,以便在指令解码器228处进行处理。在另一实施例中,如果需要许多微op来完成操作,则可将指令存储在微代码rom232中。追踪高速缓存230参考进入点可编程逻辑阵列(pla)来确定正确的微指令指针,以从微代码rom232中读取微代码序列来完成根据一个实施例的一条或多条指令。在微代码rom232完成对指令的微op进行的序列化操作之后,该机器的前端201可以恢复从追踪高速缓存230中取出微op。

乱序执行引擎203可以准备指令以供执行。乱序执行逻辑具有若干个缓冲器,用于将指令流平滑并且重排序,以优化指令流进入流水线后的性能,并调度指令流以供执行。分配器/寄存器重命名器215中的分配器逻辑分配每个uop需要的机器缓冲器和资源,以用于执行。分配器/寄存器重命名器215中的寄存器重命名逻辑将诸个逻辑寄存器重命名为寄存器堆中的条目。在指令调度器(存储器调度器209、快速调度器202、慢速/通用浮点调度器204、简单浮点调度器206)之前,分配器215也将每个微操作的条目分配在两个微操作队列中的一个之中,一个微操作队列用于存储器操作(存储器uop队列207),另一个微操作队列用于非存储器操作(整数/浮点uop队列205)。uop调度器202、204、206基于它们的从属输入寄存器操作数源的准备就绪以及uop完成它们的操作所需的执行资源的可用性来确定uop何时准备好用于执行。一个实施例的快速调度器202可以在主时钟周期的每半个时钟周期上进行调度,而其他调度器在每个主处理器时钟周期上仅可调度一次。调度器对分配端口进行仲裁以调度微操作以便执行。

寄存器堆208、210可以设置在调度器202、204、206与执行块211中的执行单元212、214、216、218、220、222、224之间。寄存器堆208、210中的每一个分别执行整数和浮点操作。每个寄存器堆208、210可以包括旁路网络,该旁路网络可以绕开还未被写入到寄存器堆中的、刚完成的结果或者将这些结果转发到新的从属uop中。整数寄存器堆208和浮点寄存器堆210可以彼此传递数据。在一个实施例中,可以将整数寄存器堆208划分为两个单独的寄存器堆,一个寄存器堆用于数据的低阶32位,第二个寄存器堆用于数据的高阶32位。浮点寄存器堆210可以包括128位宽的条目,因为浮点指令通常具有从64至128位宽度的操作数。

执行块211可以包括执行单元212、214、216、218、220、222和224。执行单元212、214、216、218、220、222和224可以执行指令。执行块211可以包括存储微指令执行所需的整数和浮点数据操作数值的寄存器堆208和210。在一个实施例中,处理器200可以包括许多执行单元:地址生成单元(agu)212、agu214、快速alu216、快速alu218、慢速alu220、浮点alu222、浮点移动单元224。在另一个实施例中,浮点执行块222和224可以执行浮点、mmx、simd、sse以及其他操作。在又一个实施例中,浮点alu222可以包括用于执行除法、平方根和余数微op的64位除64位的浮点除法器。在各实施例中,可利用浮点硬件来处置涉及浮点值的指令。在一个实施例中,可以将alu操作传递到高速alu执行单元216和218。高速alu216和218可以执行有效等待时间为半个时钟周期的快速操作。在一个实施例中,大多数复杂的整数操作去往慢速alu220,因为慢速alu220可以包括用于长等待时间类型操作的整数执行硬件,例如,乘法器、移位器、标志逻辑和分支处理设备。存储器加载/存储操作可以由agu212和214来执行。在一个实施例中,整数alu216、218和220可以对64位数据操作数执行整数操作。在其他实施例中,alu216、218和220可实现为支持包括16、32、128以及256等的各种数据位尺寸。类似地,浮点单元222和224可实现为支持具有各种宽度的位的一系列操作数。在一个实施例中,浮点单元222和224可结合simd和多媒体指令来对128位宽的紧缩数据操作数进行操作。

在一个实施例中,在父加载完成执行之前,uop调度器202、204和206就分派从属操作。由于可以在处理器200中推测性地调度并执行uop,因此处理器200也可以包括用于处置存储器未命中的逻辑。如果数据加载在数据高速缓存中未命中,则在流水线中会存在已带着临时错误的数据离开调度器的运行中的依赖性操作。重放机制跟踪使用错误数据的指令,并重新执行这些指令。仅仅依赖性操作可能需要被重放,而可以允许独立操作完成。也可将处理器的一个实施例的调度器和重放机制设计成用于捕捉指令序列,以用于文本串比较操作。

术语“寄存器”可以是指可以被用作标识操作数的指令的部分的板上处理器存储器位置。换句话说,寄存器可以是从处理器外部(从编程者的角度来看)可用的那些处理器存储位置。然而,在一些实施例中,寄存器可能不限于特定类型的电路。相反,寄存器可以存储数据、提供数据以及执行本文中所描述的功能。本文所描述的寄存器可利用任何数量的不同技术,由处理器中的电路来实现,这些不同技术诸如,专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、专用和动态分配的物理寄存器的组合等。在一个实施例中,整数寄存器存储32位整数数据。一个实施例的寄存器堆也包含八个多媒体simd寄存器,用于紧缩数据。对于以下讨论,寄存器可以被理解为设计成保存紧缩数据的数据寄存器,诸如来自美国加利福尼亚州圣克拉拉市的英特尔公司的启用了mmx技术的微处理器的64位宽mmxtm寄存器(在一些实例中也称为“mm”寄存器)。这些mmx寄存器(在整数和浮点形式两者中是可用的)可与伴随simd和sse指令的紧缩数据元素一起操作。类似地,涉及sse2、sse3、sse4或以外的(统称为“ssex”)技术的128位宽的xmm寄存器可以保存这样的紧缩数据操作数。在一个实施例中,在存储紧缩数据和整数数据时,寄存器不需要区分这两类数据类型。在一个实施例中,整数和浮点数据可被包括在相同的寄存器堆中,或被包括在不同的寄存器堆中。进一步地,在一个实施例中,浮点和整数数据可被存储在不同的寄存器中,或被存储在相同的寄存器中。

在下述附图的示例中,可以描述多个数据操作数。图3a示出了根据本公开的实施例的多媒体寄存器中的各种紧缩数据类型表示。图3a示出用于128位宽操作数的紧缩字节310、紧缩字320以及紧缩双字(dword)330的数据类型。本示例的紧缩字节格式310可以是128位长,并且包含十六个紧缩字节数据元素。字节可以被定义为,例如,数据的八位。每一个字节数据元素的信息可以被存储为:对于字节0存储在位7到位0,对于字节1存储在位15到位8,对于字节2存储在位23到位16,最后对于字节15存储在位120到位127。因此,可以在该寄存器中使用所有可用的位。该存储配置提高了处理器的存储效率。同样,因为访问了十六个数据元素,所以现在可并行地对十六个数据元素执行一个操作。

通常,数据元素可以包括与具有相同长度的其他数据元素一起被存储在单个寄存器或存储器位置中的单独的数据片。在涉及ssex技术的紧缩数据序列中,存储在xmm寄存器中的数据元素的数目可以是128位除以单独的数据元素的位长。类似地,在涉及mmx和sse技术的紧缩数据序列中,存储在mmx寄存器中的数据元素的数目可以是64位除以单独的数据元素的位长。虽然图3a中示出的数据类型可以是128位长,但是本公开的实施例还可以利用64位宽或其他尺寸的操作数来操作。本示例中的紧缩字格式320可以是128位长,并且包含八个紧缩字数据元素。每个紧缩字包含十六位的信息。图3a的紧缩双字格式330可以是128位长,并且包含四个紧缩双字数据元素。每个紧缩双字数据元素包含三十二位的信息。紧缩四字可以是128位长,并包含两个紧缩四字数据元素。

图3b示出了根据本公开的实施例的可能的寄存器内数据存储格式。每个紧缩数据可包括多于一个的独立数据元素。示出了三种紧缩数据格式:紧缩半数据元素341、紧缩单数据元素342和紧缩双数据元素343。紧缩半数据元素341、紧缩单数据元素342和紧缩双数据元素343的一个实施例包含固定点数据元素。对于另一个实施例,紧缩半数据元素341、紧缩单数据元素342和紧缩双数据元素343中的一个或多个可包含浮点数据元素。紧缩半数据元素341的一个实施例可以是128位长,包含八个16位数据元素。紧缩单数据元素342的一个实施例可以是128位长,并且包含四个32位数据元素。紧缩双数据元素343的一个实施例可以是128位长,并且包含两个64位数据元素。将会理解,可进一步将此类紧缩数据格式扩展至其他寄存器长度,例如,96位、160位、192位、224位、256位或更长。

图3c示出了根据本公开的实施例的多媒体寄存器中的各种有符号和无符号紧缩数据类型表示。无符号紧缩字节表示344示出将无符号紧缩字节存储在simd寄存器中。每一个字节数据元素的信息可以被存储为:对于字节0存储在位7到位0,对于字节1存储在位15到位8,对于字节2存储在位23到位16,最后对于字节15存储在位120到位127。因此,可以在该寄存器中使用所有可用的位。该存储配置可提高处理器的存储效率。同样,因为访问了十六个数据元素,所以现在可以并行方式对十六个数据元素执行一个操作。有符号紧缩字节表示345示出了有符号紧缩字节的存储。注意,每个字节数据元素的第八位可以是符号指示符。无符号紧缩字表示346示出了如何可以将字7到字0存储在simd寄存器中。有符号紧缩字表示347可以类似于无符号紧缩字寄存器内表示346。注意,每个字数据元素的第十六位可以是符号指示符。无符号紧缩双字表示348示出了如何存储双字数据元素。有符号紧缩双字表示349可以类似于无符号紧缩双字寄存器内表示348。注意,必要的符号位可以是每个双字数据元素的第三十二位。

图3d示出了操作编码(操作码)的实施例。此外,格式360可以包括与可从美国加利福尼亚州圣克拉拉市的英特尔公司的万维网(www)intel.com/design/litcentr上获得的“ia-32英特尔架构软件开发者手册卷2:指令集参考(ia-32intelarchitecturesoftwaredeveloper'smanualvolume2:instructionsetreference)”中描述的操作码格式类型相对应的寄存器/存储器操作数寻址模式。在一个实施例中,可通过字段361和362中的一个或多个对指令进行编码。可以对于每条指令标识多至两个操作数位置,包括多至两个源操作数标识符364和365。在一个实施例中,目的地操作数标识符366可以与源操作数标识符364相同,而在其他实施例中它们可以不相同。在另一个实施例中,目的地操作数标识符366可以与源操作数标识符365相同,而在其他实施例中它们可以不相同。在一个实施例中,由源操作数标识符364和365标识的源操作数中的一个可以被文本串比较操作的结果覆写,而在其他实施例中,标识符364对应于源寄存器元件,而标识符365对应于目的地寄存器元件。在一个实施例中,操作数标识符364和365可以标识32位或64位的源和目的地操作数。

图3e示出了根据本公开的实施例的具有四十位或更多位的另一可能的操作编码(操作码)格式370。操作码格式370对应于操作码格式360,并包括可选的前缀字节378。根据一个实施例的指令可通过字段378、371和372中的一个或多个来编码。通过源操作数标识符374和375以及通过前缀字节378,可对每条指令标识多至两个操作数位置。在一个实施例中,前缀字节378可被用于标识32位或64位的源和目的地操作数。在一个实施例中,目的地操作数标识符376可以与源操作数标识符374相同,而在其他实施例中它们可以不相同。对于另一个实施例,目的地操作数标识符376可以与源操作数标识符375相同,而在其他实施例中它们可以不相同。在一个实施例中,指令对由操作数标识符374和375所标识的操作数中的一个或多个进行操作,并且可以通过该指令的结果覆写由操作数标识符374和375所标识的一个或多个操作数,而在其他实施例中,可以将由标识符374和375标识的操作数写入另一寄存器中的另一数据元素中。操作码格式360和370允许由mod字段363和373以及由可选的比例-索引-基址(scale-index-base)和位移(displacement)字节部分地指定的寄存器到寄存器寻址、存储器到寄存器寻址、由存储器对寄存器寻址、由寄存器对寄存器寻址、由立即数对寄存器寻址、寄存器到存储器寻址。

图3f示出了根据本公开的实施例的又一可能的操作编码(操作码)格式。可以通过协处理器数据处理(cdp)指令来执行64位单指令多数据(simd)算术操作。操作编码(操作码)格式380描绘了具有cdp操作码字段382和389的一条此类cdp指令。对于另一实施例,可由字段383、384、387和388中的一个或多个对cdp指令操作的这种类型进行编码。可以对每个指令标识多至三个操作数位置,包括多至两个源操作数标识符385和390以及一个目的地操作数标识符386。协处理器的一个实施例可对8位、16位、32位和64位的值进行操作。在一个实施例中,可以对整数数据元素执行指令。在一些实施例中,可使用条件字段381,有条件地执行指令。对于一些实施例,可通过字段383来对源数据尺寸进行编码。在一些实施例中,可对simd字段执行零(z)、负(n)、进位(c)和溢出(v)检测。对于一些指令,可通过字段384对饱和类型进行编码。

图4a是示出根据本公开的实施例的有序流水线以及寄存器重命名级、乱序发布/执行流水线的框图。图4b是示出根据本公开的实施例的、要被包括在处理器中的有序架构核以及寄存器重命名逻辑、乱序发布/执行逻辑的框图。图4a中的实线框示出了有序流水线,而虚线框示出了寄存器重命名的、乱序发布/执行流水线。类似地,图4b中的实线框示出了有序架构逻辑,而虚线框示出了寄存器重命名逻辑以及乱序发布/执行逻辑。

在图4a中,处理器流水线400可以包括取出级402、长度解码级404、解码级406、分配级408、重命名级410、调度(也被称为分派或发布)级412、寄存器读取/存储器读取级414、执行级416、写回/存储器写入级418、异常处理级422和提交级424。

在图4b中,箭头指示两个或更多个单元之间的耦合,且箭头的方向指示那些单元之间的数据流的方向。图4b示出了包括耦合到执行引擎单元450的前端单元430的处理器核490,且执行引擎单元和前端单元两者都可以耦合到存储器单元470。

核490可以是精简指令集计算(risc)核、复杂指令集计算(cisc)核、超长指令字(vliw)核或混合或其他核类型。在一个实施例中,核490可以是专用核,诸如例如,网络或通信核、压缩引擎、图形核等。

前端单元430可以包括耦合至指令高速缓存单元434的分支预测单元432。指令高速缓存单元434可以耦合至指令转换后备缓冲器(tlb)436。tlb436可以耦合至指令取出单元438,指令取出单元耦合至解码单元440。解码单元440可解码指令,并生成可从原始指令中解码出的、或以其他方式反映原始指令的、或可从原始指令中导出的一个或多个微操作、微代码进入点、微指令、其他指令或其他控制信号作为输出。可使用各种不同的机制来实现解码器。合适的机制的示例包括但不仅限于,查找表、硬件实现、可编程逻辑阵列(pla)、微代码只读存储器(rom)等等。在一个实施例中,指令高速缓存单元434可以进一步耦合到存储器单元470中的第2级(l2)高速缓存单元476。解码单元440可以耦合至执行引擎单元450中的重命名/分配器单元452。

执行引擎单元450可以包括耦合至引退单元454的重命名/分配器单元452以及一组一个或多个调度器单元456。调度器单元456表示任意数量的不同调度器,包括预留站、中央指令窗等。调度器单元456可以耦合到物理寄存器堆单元458。每个物理寄存器堆单元458表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一个或多个不同的数据类型(诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点,等等)、状态(诸如,作为要被执行的下一条指令的地址的指令指针)等等。物理寄存器堆单元458可以被引退单元454所覆盖,以示出可实现寄存器重命名和乱序执行的多种方式(诸如,使用一个或多个重排序缓冲器和一个或多个引退寄存器堆、使用一个或多个未来文件(futurefile)、一个或多个历史缓冲器以及一个或多个引退寄存器堆;使用寄存器映射和寄存器池等等)。通常,架构寄存器从处理器外部或从编程者的视角来看可以是可见的。寄存器可能不限于任何已知特定类型的电路。各种不同类型的寄存器可适用,只要它们存储并提供本文中所述的数据。合适寄存器的示例包括但可能不限于,专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、以及专用物理寄存器和动态分配的物理寄存器的组合,等等。引退单元454和物理寄存器堆单元458可以耦合至执行集群460。执行集群460可以包括一组一个或多个执行单元462和一组一个或多个存储器访问单元464。执行单元462可以对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可包括仅一个执行单元或全都执行所有功能的多个执行单元。调度器单元456、物理寄存器堆单元458和执行集群460被示出为可能是复数个,因为某些实施例为某些数据/操作类型创建了多个单独流水线(例如,均具有各自调度器单元、物理寄存器堆单元和/或执行集群的标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线和/或存储器访问流水线;以及在单独的存储器访问流水线的情况下,某些实施例可以被实现为仅仅该流水线的执行集群具有存储器访问单元464)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行,并且其余流水线可以是有序的。

存储器访问单元464的集合可以耦合到存储器单元470,该存储器单元可以包括耦合到数据高速缓存单元474的数据tlb单元472,其中数据高速缓存单元耦合到第2级(l2)高速缓存单元476。在一个示例性实施例中,存储器访问单元464可包括加载单元、存储地址单元和存储数据单元,其中的每一个均可以耦合至存储器单元470中的数据tlb单元472。l2高速缓存单元476可以耦合至一个或多个其他等级的高速缓存,并最终耦合至主存储器。尽管图4b示出其中指令高速缓存单元434、数据高速缓存单元474和第二级(l2)高速缓存单元476驻留在核490内的实施例,但是在其他实施例中,在不同组合中,一个或多个高速缓存或高速缓存单元可以在核内部、在核外部、或部分在核内部并且部分在核外部。

作为示例,示例性寄存器重命名的、乱序发布/执行核架构可以如下实现流水线400:1)指令取出438可以执行取出和长度解码级402和404;2)解码单元440可以执行解码级406;3)重命名/分配器单元452可以执行分配级408和重命名级410;4)调度器单元456可以执行调度级412;5)物理寄存器堆单元458和存储器单元470可以执行寄存器读取/存储器读取级414;执行集群460可以执行执行级416;6)存储器单元470和物理寄存器堆单元458可以执行写回/存储器写入级418;7)各单元可牵涉到异常处理级422的性能;以及8)引退单元454和物理寄存器堆单元458可以执行提交级424。

核490可支持一个或多个指令集(诸如,x86指令集(具有增加有更新版本的一些扩展)、加利福尼亚州桑尼威尔的mips技术公司的mips指令集、加利福尼亚州桑尼威尔的arm控股公司的arm指令集(具有可选附加扩展,诸如neon))。

应当理解,核可以按各种方式来支持多线程操作(执行两个或更多个并行的操作或线程的集合)。可以由例如包括时分多线程操作、同步多线程操作(其中,单个物理核为物理核正在同步进行多线程操作的多个线程中的每一个线程提供逻辑核)或其组合来执行多线程操作支持。此类组合可以包括,例如,时分取出和解码以及此后诸如利用超线程技术的同步多线程操作。

尽管可以在乱序执行的上下文中描述寄存器重命名,但是,应当理解,寄存器重命名可以用于有序架构中。虽然处理器的所示出的实施例也可以包括单独的指令和数据高速缓存单元434/474以及共享的l2高速缓存单元476,但其他实施例可具有用于指令和数据两者的单个的内部高速缓存,诸如例如,第1级(l1)内部高速缓存或多个层级的内部高速缓存。在一些实施例中,系统可以包括内部高速缓存以及可以在核和/或处理器外部的外部高速缓存的组合。在其他实施例中,全部高速缓存都可以在核和/或处理器的外部。

图5a是根据本公开的实施例的处理器500的框图。在一个实施例中,处理器500可以包括多核处理器。处理器500可以包括通信地耦合至一个或多个核502的系统代理510。此外,核502和系统代理510可以通信地耦合至一个或多个高速缓存506。核502、系统代理510和高速缓存506可以经由一个或多个存储器控制单元552通信地耦合。此外,核502、系统代理510和高速缓存506可以经由存储器控制单元552通信地耦合至图形模块560。

处理器500可以包括用于将核502、系统代理510、以及高速缓存506、以及图形模块560互连的任何合适的机制。在一个实施例中,处理器500可以包括基于环的互连单元508以用于将核502、系统代理510、以及高速缓存506、以及图形模块560互连。在其他实施例中,处理器500可以包括任何数量的公知技术来将这些单元互连。基于环的互连单元508可以利用存储器控制单元552来促进互连。

处理器500可以包括存储器层级结构,该存储器层级结构包括核内的一个或多个层级的高速缓存、一个或多个共享高速缓存单元(例如高速缓存506)、或耦合到集成存储器控制器单元552的集合的外部存储器(未示出)。高速缓存506可以包括任何合适的高速缓存。在一个实施例中,高速缓存506可以包括一个或多个中级高速缓存,诸如,第2级(l2)、第3级(l3)、第4级(l4),或其他层级的高速缓存,末级高速缓存(llc),和/或上述各项的组合。

在各实施例中,核502中的一个或多个可以执行多线程操作。系统代理510可以包括用于协调和操作核502的组件。系统代理单元510可以包括例如功率控制单元(pcu)。pcu可以是或可以包括用于调节核502的功率状态所需的逻辑和组件。系统代理510可以包括显示引擎512,用于驱动一个或多个外部连接的显示器或图形模块560。系统代理510可以包括用于通信总线的接口514以用于图形。在一个实施例中,接口514可以由pci快速(pcie)实现。在进一步的实施例中,接口514可以由pci快速图形(peg)实现。系统代理510可以包括直接媒体接口(dmi)516。dmi516可以提供母板上的或计算机系统的其他部分上的不同桥之间的链路。系统代理510可以包括pcie桥518以用于将pcie链路提供到计算系统的其他元件。可以使用存储器控制器520和一致性逻辑522来实现pcie桥518。

核502可以以任何合适的方式来实现。核502可以是在架构和/或指令集上同构的或异构的。在一个实施例中,核502中的一些可以是有序的,而另一些可以是乱序的。在另一实施例中,核502中的两个或更多可以执行相同的指令集,而其他核仅可执行该指令集的子集或不同的指令集。

处理器500可以包括通用处理器,诸如酷睿(coretm)i3、i5、i7、2duo和quad、至强(xeontm)、安腾(itaniumtm)、xscaletm或strongarmtm处理器,这些均可以从加利福尼亚州圣克拉拉市的英特尔公司获得。处理器500可以提供自另一个公司,诸如,来自arm控股公司、mips等。处理器500可以是专用处理器,诸如,例如,网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器、等等。处理器500可以被实现在一个或多个芯片上。处理器500可以是一个或多个衬底的一部分,和/或可以使用多种工艺技术中的任何一种(诸如,例如,bicmos、cmos或nmos)实现在一个或多个衬底上。

在一个实施例中,高速缓存506中的给定的一个可以被核502中的多个核共享。在另一实施例中,高速缓存506中的给定的一个可以专用于核502中的一个核。将高速缓存506分配到核502可以由高速缓存控制器或其他合适的机制处置。高速缓存506中的给定的一个可以通过实现给定高速缓存506的时分而被两个或更多核502共享。

图形模块560可以实现集成图形处理子系统。在一个实施例中,图形模块560可以包括图形处理器。此外,图形模块560可以包括媒体引擎565。媒体引擎565可以提供媒体编码和视频解码。

图5b是根据本公开的实施例的核502的示例实现的框图。核502可以包括通信地耦合至乱序引擎580的前端570。核502可以通过高速缓存层级结构503通信地耦合至处理器500的其他部分。

前端570可以以任何合适的方式实现,例如全部或部分地由如上所述的前端201。在一个实施例中,前端570可以通过高速缓存层级结构503与处理器500的其他部分通信。在进一步的实施例中,前端570可以从处理器500的部分取出指令并将这些指令准备好以供稍后当这些指令被传递到乱序执行引擎580时在处理器流水线中使用。

乱序执行引擎580可以以任何合适的方式实现,例如全部或部分地由如上所述的乱序执行引擎203。乱序执行引擎580可以将接收自前端570的指令准备好以供执行。乱序执行引擎580可以包括分配模块582。在一个实施例中,分配模块582可以分配处理器500的资源或其他资源(诸如寄存器或缓冲器)以执行给定的指令。分配模块582可以在调度器(诸如存储器调度器、快速调度器或浮点调度器)中进行分配。此类调度器在图5b中可以由资源调度器584表示。分配模块582可以全部或部分地由结合图2所描述的分配逻辑实现。资源调度器584可以基于给定资源的源的准备就绪以及执行指令所需的执行资源的可用性来确定指令何时准备好用于执行。资源调度器584可以由例如上文所讨论的调度器202、204和206实现。资源调度器584可以将指令的执行调度到一个或多个资源上。在一个实施例中,此类资源可以在核502的内部,并且可以示出为例如资源586。在另一实施例中,此类资源可以在核502的外部,并且可由例如高速缓存层级结构503访问。资源可以包括,例如,存储器、高速缓存、寄存器堆或寄存器。核502内部的资源可以表示为图5b中的资源586。如果需要,被写入资源586或从资源586读出的值可以通过例如高速缓存层级结构503与处理器500的其他部分协调。当指令被分配有资源时,它们可以被放置在重排序缓冲器588中。当指令被执行时,重排序缓冲器588可以跟踪指令,并且可以选择性地基于处理器500的任何合适的标准将指令的执行重排序。在一个实施例中,重排序缓冲器588可以标识可以被独立地执行的指令或一系列指令。可以与其他此类指令并行地执行此类指令或一系列指令。核502中的并行执行可以由任何合适数量的单独的执行块或虚拟处理器执行。在一个实施例中,共享资源(诸如存储器、寄存器和高速缓存)可以被给定核502内的多个虚拟处理器访问。在其他实施例中,共享资源可以被处理器500内的多个处理实体访问。

高速缓存层级结构503可以以任何合适的方式来实现。例如,高速缓存层级结构503可以包括一个或多个较低级或中级高速缓存,诸如高速缓存572和574。在一个实施例中,高速缓存层级结构503可以包括通过逻辑块576通信地耦合至高速缓存572和574的llc595。在另一实施例中,llc595可以实现在可被处理器500的所有处理实体访问的模块590中。在进一步的实施例中,模块590可以实现在来自英特尔公司的处理器的非核模块中。模块590可以包括对于核502的执行有必要的处理器500的部分或子系统中,但是可能不实现在核502内。除了llc595之外,模块590可以包括,例如,硬件接口、存储器一致性协调器、处理器间互连、指令流水线或存储器控制器。可以通过模块590并且更具体地llc595使处理器500可访问ram599。此外,核502的其他实例可以类似地访问模块590。可以通过模块590部分地促进核502的实例的协调。

图6-8可以示出适于包括处理器500的示例性系统,而图9可以示出可包括核502中的一个或多个的示例性芯片上系统(soc)。本领域已知的对膝上型设备、台式机、手持pc、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(dsp)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和实现也可以是合适的。一般地,包含本文中所公开的处理器和/或其他执行逻辑的多个系统或电子设备一般可以是合适的。

图6示出了根据本公开的实施例的系统600的框图。系统600可以包括可以耦合至图形存储器控制器中枢(gmch)620的一个或多个处理器610、615。在图6中以虚线表示附加的处理器615的可选的性质。

每一处理器610、615可以是处理器500的某种版本。然而,应当注意,集成图形逻辑和集成存储器控制单元可能不会出现在处理器610和615中。图6示出了gmch620可以耦合至存储器640,该存储器640可以是例如动态随机存取存储器(dram)。对于至少一个实施例,dram可以与非易失性高速缓存相关联。

gmch620可以是芯片组或芯片组的部分。gmch620可以与处理器610、615进行通信,并控制处理器610、615与存储器640之间的交互。gmch620还可充当处理器610、615和系统600的其他元件之间的加速总线接口。在一个实施例中,gmch620经由诸如前端总线(fsb)695之类的多点总线与处理器610、615进行通信。

此外,gmch620可以耦合至显示器645(诸如平板显示器)。在一个实施例中,gmch620可以包括集成图形加速器。gmch620可以进一步耦合至输入/输出(i/o)控制器中枢(ich)650,该输入/输出(i/o)控制器中枢(ich)650可用于将各种外围设备耦合至系统600。外部图形设备660可以包括与另一外围设备670一起耦合至ich650的分立图形设备。

在其他实施例中,附加的或不同的处理器也可存在于系统600中。例如,附加的处理器610、615可以包括可以与处理器610相同的附加的处理器、可以与处理器610异构的或不对称的附加的处理器、加速器(诸如例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列或任何其他处理器。在物理资源610和615之间可以存在包括架构、微架构、热和功耗特征等的一系列品质度量方面的各种差异。这些差异可以有效显示为处理器610和615之间的不对称性和异构性。对于至少一个实施例,各种处理器610和615可驻留在同一管芯封装中。

图7示出了根据本公开的实施例的第二系统700的框图。如图7所示,多处理器系统700可以包括点对点互连系统,并且可以包括经由点对点互连750而被耦合的第一处理器770和第二处理器780。处理器770和780中的每一个可以是处理器500的某个版本(如处理器610、615中的一个或多个)。

虽然图7可以示出两个处理器770、780,但是应当理解本公开的范围不限于此。在其他实施例中,在给定处理器中可存在一个或多个附加处理器。

处理器770和780被示为分别包括集成存储器控制器单元772和782。处理器770还可以包括点对点(p-p)接口776和778作为其总线控制器单元的部分;类似地,第二处理器780可以包括p-p接口786和788。处理器770、780可以经由使用点对点(p-p)接口电路778、788的p-p接口750来交换信息。如图7所示,imc772和782可以将处理器耦合至相应的存储器,即,存储器732和存储器734,它们在一个实施例中可以是本地连接到相应的处理器的主存储器的部分。

处理器770、780可各自经由使用点对点接口电路776、794、786、798的各个p-p接口752、754与芯片组790交换信息。在一个实施例中,芯片组790还可以经由接口792通过高性能图形总线739与高性能图形电路738交换信息。

共享高速缓存(未示出)可被包括在任一处理器中,或在这两个处理器的外部但经由p-p互连与这些处理器连接,使得如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在共享高速缓存中。

芯片组790可以经由接口796耦合到第一总线716。在一个实施例中,第一总线716可以是外围组件互连(pci)总线或诸如pci高速总线或另一第三代i/o互连总线之类的总线,但是本公开的范围不限于此。

如图7中所示,各种i/o设备714可连同总线桥718一起耦合到第一总线716,总线桥718将第一总线716耦合到第二总线720。在一个实施例中,第二总线720可以是低引脚数(lpc)总线。在一个实施例中,各种设备可以耦合至第二总线720,包括例如,键盘和/或鼠标722、通信设备727以及可包括指令/代码和数据730的存储单元728(诸如,盘驱动器或其他大容量存储设备)。此外,音频i/o724可以被耦合到第二总线720。注意,其他架构是可能的。例如,代替图7的点对点架构,系统可以实现多分支总线或其他此类架构。

图8示出了根据本公开的实施例的第三系统800的框图。图7和8中的相同部件用相同附图标记表示,并已从图8中省去了图7中的某些方面,以避免使图8的其他方面变得模糊。

图8示出处理器770、780可以分别包括集成存储器和i/o控制逻辑(“cl”)872和882。对于至少一个实施例,cl872和882可包括诸如以上结合图5和7所描述的集成存储器控制器单元。此外,cl872、882还可包括i/o控制逻辑。图8示出了不仅存储器732、734可以被耦合到cl872、882,而且i/o设备814也可以被耦合到控制逻辑872、882。传统i/o设备815可以被耦合至芯片组790。

图9示出了根据本公开的实施例的soc900的框图。图5中相似的部件具有同样的附图标记。另外,虚线框可以表示更先进的soc的可选特征。互连单元902可耦合至:应用处理器910,其可包括一个或多个核的集合502a-n(包括相应的本地高速缓存504a-n)和共享高速缓存单元506;系统代理单元510;总线控制器单元916;集成存储器控制器单元914;一个或多个媒体处理器的集合920,其可包括集成图形逻辑908、用于提供静止和/或视频相机功能的图像处理器924、用于提供硬件音频加速的音频处理器926、以及用于提供视频编码/解码加速的视频处理器928;静态随机存取存储器(sram)单元930;直接存储器存取(dma)单元932;以及显示单元940,其用于耦合至一个或多个外部显示器。

图10示出了根据本公开的实施例的处理器,包括中央处理单元(cpu)和图形处理单元(gpu),该处理器可执行至少一条指令。在一个实施例中,执行根据至少一个实施例的操作的指令可由cpu来执行。在另一实施例中,指令可以由gpu来执行。在又一实施例中,指令可以由gpu和cpu所执行的操作的组合来执行。例如,在一个实施例中,根据一个实施例的指令可被接收,并被解码,以便在gpu上执行。然而,经解码的指令中的一个或多个操作可由cpu来执行,并且结果被返回到gpu,以便进行指令的最终引退。相反,在一些实施例中,cpu可作为主处理器,而gpu作为协处理器。

在一些实施例中,受益于高度并行化的吞吐量处理器的指令可由gpu来执行,而受益于处理器(这些处理器受益于深度流水线架构)性能的指令可由cpu来执行。例如,图形、科学应用、金融应用以及其他并行工作负荷可受益于gpu的性能并相应地被执行,而更多的序列化应用(例如,操作系统内核或应用代码)可更适于cpu。

在图10中,处理器1000包括,cpu1005、gpu1010、图像处理器1015、视频处理器1020、usb控制器1025、uart控制器1030、spi/sdio控制器1035、显示设备1040、存储器接口控制器1045、mipi控制器1050、闪存控制器1055、双数据率(ddr)控制器1060、安全引擎1065、i2s/i2c控制器1070。其他逻辑和电路(包括更多的cpu或gpu以及其他外围设备接口控制器)可被包括在图10的处理器中。

至少一个实施例的一个或多个方面可由存储在表示处理器内的各种逻辑的机器可读介质上的表示性数据来实现,当机器读取该表示性数据时,该表示性数据使得该机器用于制造执行本文所述的技术的逻辑。可将此类表示(称为“ip核”)存储在有形的机器可读介质(“磁带”)上,并将其提供给各种顾客或生产设施,以便加载到实际制作该逻辑或处理器的制造机器中。例如,ip核(诸如由arm控股公司所开发的cortextm处理器族以及由中国科学院计算机技术研究所(ict)所开发的龙芯ip核)可被授权或销售给各种客户或受许可方,诸如德州仪器、高通、苹果、或三星,并被实现在由这些客户或受许可方生产的处理器中。

图11示出根据本公开的实施例的示出ip核开发的框图。存储设备1100可以包括仿真软件1120和/或硬件或软件模型1110。在一个实施例中,表示ip核设计的数据可经由存储器1140(例如,硬盘)、有线连接(例如,互联网)1150或无线连接1160而被提供给存储设备1100。由仿真工具和模型所生成的ip核信息可随后被发送到生产设施1165,可由第三方在该生产设施中制造该ip核以执行根据至少一个实施例的至少一条指令。

在一些实施例中,一条或多条指令可以对应于第一类型或架构(例如,x86),并且可在不同类型或架构(例如,arm)的处理器上被转换或仿真。根据一个实施例,因此可在任何处理器或处理器类型(包括arm、x86、mips、gpu或其他处理器类型或架构)上执行指令。

图12示出了根据本公开的实施例的不同类型的处理器可以如何仿真第一类型的指令。在图12中,程序1205包含可执行与根据一个实施例的指令相同或基本相同的功能的一些指令。然而,程序1205的指令可以是与处理器1215不同或不兼容的类型和/或格式,这意味着不能够由处理器1215原生地执行程序1205中的类型的指令。然而,借助于仿真逻辑1210,可以将程序1205的指令转换成可以由处理器1215原生执行的指令。在一个实施例中,仿真逻辑可以被具体化在硬件中。在另一实施例中,可以将仿真逻辑具体化在有形的机器可读介质中,该机器可读介质包含用于将程序1205中的该类指令转换为可由处理器1215原生地执行的类型的软件。在其他实施例中,仿真逻辑可以是固定功能或可编程硬件和存储在有形的机器可读介质上的程序的组合。在一个实施例中,处理器包含仿真逻辑,而在其他实施例中,仿真逻辑在处理器之外,并且可以由第三方提供。在一个实施例中,通过执行被包括在处理器中或者与该处理器相关联的微代码或固件,处理器可以加载被具体化在包含软件的有形的机器可读介质中的仿真逻辑。

图13示出了根据本公开的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所示的实施例中,指令转换器可以是软件指令转换器,但该指令转换器可以用软件、固件、硬件或其各种组合来实现。图13示出可使用x86编译器1304来编译利用高级语言1302的程序,以生成可由具有至少一个x86指令集核的处理器1316原生地执行的x86二进制代码1306。具有至少一个x86指令集核的处理器1316表示任何处理器,这些处理器可以通过兼容地执行或以其他方式处理以下内容来执行与具有至少一个x86指令集核的英特尔处理器基本相同的功能:1)英特尔x86指令集核的指令集的本质部分,或2)目标为在具有至少一个x86指令集核的英特尔处理器上运行的应用或其他软件的目标代码版本,以便取得与具有至少一个x86指令集核的英特尔处理器基本相同的结果。x86编译器1304表示可用于生成x86二进制代码1306(例如,目标代码)的编译器,该x86二进制代码1306可通过附加的链接处理或无需附加的链接处理而在具有至少一个x86指令集核的处理器1316上被执行。类似地,图13示出可以使用替代的指令集编译器1308来编译高级语言1302的程序以生成可由不具有至少一个x86指令集核的处理器1314(例如,具有执行加利福尼亚州桑尼维尔市的mips技术公司的mips指令集和/或执行加利福尼亚州桑尼维尔市的arm控股公司的arm指令集的核的处理器)原生地执行的替代的指令集二进制代码1310。指令转换器1312可以用于将x86二进制代码1306转换成可以由不具有x86指令集核的处理器1314原生地执行的代码。该转换后的代码可能与替代的指令集二进制代码1310不相同;然而,转换后的代码将完成通用操作并由来自替代指令集的指令构成。因此,指令转换器1312表示软件、固件、硬件或它们的组合,这些软件、固件、硬件或它们的组合通过仿真、模拟或任何其他过程允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码1306。

图14是根据本公开的实施例的处理器的指令集架构1400的框图。指令集架构1400可以包括任何合适数量或种类的组件。

例如,指令集架构1400可以包括处理实体,诸如处理器子系统1405内的一个或多个核1406、1407以及图形处理单元1415。核1406、1407可以通过任何合适的机制(诸如通过总线或高速缓存)通信地耦合至指令集架构1400的剩余部分。在一个实施例中,核1406、1407可以通过l2高速缓存控制1408通信地耦合,l2高速缓存控制1408可以包括总线接口单元1409和l2高速缓存1411。核1406、1407和图形处理单元1415可以通过互连1410彼此通信地耦合并且耦合至指令集架构1400的剩余部分。在一个实施例中,图形处理单元1415可以使用视频编解码器1420,视频编解码器定义其中特定视频信号将被编码和解码以作为输出的方式。

指令集架构1400还可以包括任何数量或种类的接口、控制器或用于与电子设备或系统的其他部分相接或通信的其他机制。此类机制可以促进与例如外围设备、通信设备、其他处理器或存储器的交互。在图14的示例中,指令集架构1400可以包括液晶显示器(lcd)视频接口1425、用户接口模块(sim)接口1430、引导rom接口1435、同步动态随机存取存储器(sdram)控制器1440、闪存控制器1445、以及串行外围接口(spi)主单元1450。lcd视频接口1425可以提供将视频信号从例如gpu1415并且通过例如移动产业处理器接口(mipi)1490或高清晰度多媒体接口(hdmi)1495输出到显示器。此类显示器可以包括例如lcd。sim接口1430可以提供到sim卡或设备的访问或来自sim卡或设备的访问。sdram控制器1440可以提供到存储器的访问或来自存储器的访问,存储器诸如sdram芯片或模块1460。闪存控制器1445可以提供到存储器的访问或来自存储器的访问,存储器诸如闪存1465或ram的其他实例。spi主单元1450可以提供到通信模块的访问或来自通信模块的访问,通信模块诸如蓝牙模块1470、高速3g调制解调器1475、全球定位系统模块1480或实现诸如802.11的通信标准的无线模块1485。指令集架构1400还可以包括功率控制单元1455。

图15是根据本公开的实施例的处理器的指令集架构1500的更具体的框图。指令架构1500可以实现指令集架构1400的一个或多个方面。此外,指令集架构1500可以示出用于在处理器内的指令的执行的模块和机制。

指令架构1500可以包括通信地耦合至一个或多个执行实体1565的存储器系统1540。此外,指令架构1500可以包括高速缓存和总线接口单元,诸如通信地耦合至执行实体1565和存储器系统1540的单元1510。在一个实施例中,可以由一级或多级执行来执行将指令加载到执行实体1565中。此类级可以包括,例如,指令预取级1530、双指令解码级1550、寄存器重命名级1555、发布级1560、以及写回级1570。

在一个实施例中,存储器系统1540可以包括执行的指令指针1580。执行的指令指针1580可以存储标识一批指令中最旧的、未分派的指令的值。最旧的指令可以对应于最低程序顺序(po)值。po可以包括指令的唯一编号。此类指令可以是由多个缕程(strand)表示的线程内的单个指令。po可以在对指令进行排序中使用以确保代码的正确执行语义。po可以被机制重新构建,诸如评估编码在指令中的po的增量,而不是绝对值。此类被重新构建的po可以称为“rpo”。虽然可以在本文中引用po,但是此类po可以与rpo互换地使用。缕程可以包括相互数据依赖的指令序列。在编译时,缕程可以由二进制转换器安排。执行缕程的硬件可以根据各种指令的po有序地执行给定缕程的指令。线程可以包括多个缕程,从而不同缕程的指令可以相互依赖。给定缕程的po可以是缕程中还未被从发布级分派到执行的最旧的指令的po。因此,给定具有多个缕程的线程,每个缕程包括按po排序的指令,执行的指令指针1580可以存储线程中最旧的(示为最低数字的)po。

在另一实施例中,存储器系统1540可以包括引退指针1582。引退指针1582可以存储标识上一引退的指令的po的值。引退指针1582可以由例如引退单元454设置。如果还未引退指令,则引退指针1582可以包括空值。

执行实体1565可以包括任何合适数量和种类的机制,处理器可以通过该机制执行指令。在图15的示例中,执行实体1565可以包括alu/乘法单元(mul)1566、alu1567和浮点单元(fpu)1568。在一个实施例中,此类实体可以利用包含在给定地址1569内的信息。执行实体1565与级1530、1550、1555、1560和1570相结合可以共同地形成执行单元。

单元1510可以以任何合适的方式来实现。在一个实施例中,单元1510可以执行高速缓存控制。在此类实施例中,单元1510可以因此包括高速缓存1525。在进一步的实施例中,高速缓存1525可以实现为具有任何合适尺寸的l2统一高速缓存,诸如存储器的零、128k、256k、512k、1m或2m字节。在另一进一步的实施例中,高速缓存1525可以实现在纠错码存储器中。在另一实施例中,单元1510可以执行总线与处理器或电子设备的其他部分相接。在此类实施例中,单元1510可以因此包括总线接口单元1520以用于通过互连、处理器内总线、处理器间总线或其他通信总线、端口或线通信。总线接口单元1520可以提供相接以执行例如生成存储器和输入/输出地址以用于在执行实体1565与在指令架构1500外部的系统的部分之间的数据传输。

为了进一步促进其功能,总线接口单元1510可以包括中断控制和分配单元1511以用于生成中断和其他通信到处理器或电子设备的其他部分。在一个实施例中,总线接口单元1510可以包括监听控制单元1512,其为多个处理核处置高速缓存访问和一致性。在进一步的实施例中,为了提供此类功能,监听控制单元1512可以包括高速缓存到高速缓存传输单元1513,其处置不同高速缓存之间的信息交换。在另一进一步的实施例中,监听控制单元1512可以包括一个或多个监听过滤器1514,其监视其他高速缓存(未示出)的一致性,使得高速缓存控制器(诸如单元1510)不必直接执行此类监视。单元1510可以包括任何合适数量的计时器1515以用于使指令架构1500的动作同步。此外,单元1510可以包括ac端口1516。

存储器系统1540可以包括任何合适数量和种类的机制以用于为指令架构1500的处理需要存储信息。在一个实施例中,存储器系统1540可以包括加载存储单元1546以用于存储信息,诸如写入存储器或寄存器或从存储器或寄存器读回的缓冲器,以及数据高速缓存1542。在另一实施例中,存储器系统1540可以包括转换后备缓冲器(tlb)1545,其提供在物理地址与虚拟地址之间查找地址值。在又一实施例中,存储器系统1540可以包括存储器管理单元(mmu)1544以用于促进对虚拟存储器的访问。在再一实施例中,存储器系统1540可以包括预取器1543以用于在实际需要执行指令之前从存储器请求这些指令以减少等待时间。

指令架构1500执行指令的操作可以通过不同级来实现。例如,通过使用单元1510,指令预取级1530可以通过预取器1543访问指令。可以将被检取的指令存储在指令高速缓存1532中。预取级1530可以为快速循环模式实现选项1531,其中执行形成足够小以装入给定高速缓存的循环的一系列指令。在一个实施例中,可以实现此类执行而无需访问来自例如指令高速缓存1532的附加指令。对预取哪些指令的确定可以由例如分支预测单元1535作出,其可以访问全局历史1536中对执行的指示、对目标地址1537的指示、或返回栈1538的内容以确定接下来将执行代码的分支1557中的哪些指令。可能预取此类分支作为结果。分支1557可以通过如下所述的其他级的操作而产生。指令预取级1530可以将指令以及关于未来指令的任何预测提供到双指令解码级1550。

双指令解码级1550可以将所接收的指令转换成可以被执行的基于微代码的指令。双指令解码级1550可以在每个时钟周期同时解码两个指令。此外,双指令解码级1550可以将其结果传递到寄存器重命名级1555。此外,双指令解码级1550可以从其对微代码的解码和最终执行确定任何所得的分支。可以将此类结果输入到分支1557中。

寄存器重命名级1555可以将对虚拟寄存器或其他资源的引用转换成对物理寄存器或资源的引用。寄存器重命名级1555可以包括对寄存器池1556中的此类映射的指示。寄存器重命名级1555可以改变所接收的指令并且将结果发送到发布级1560。

发布级1560可以将命令发布或分派到执行实体1565。可以以乱序方式执行此类发布。在一个实施例中,可以在多个指令被执行之前在发布级1560处保存该多个指令。发布级1560可以包括指令队列1561以用于保存此类多个命令。可以由发布级1560基于任何可接受的标准(诸如资源对于给定指令的执行的可用性或合适性)将指令发布到特定处理实体1565。在一个实施例中,发布级1560可以将指令队列1561内的指令重排序,从而第一接收的指令可能不是第一执行的指令。基于指令队列1561的排序,可以将附加分支信息提供到分支1557。发布级1560可以将指令传递到执行实体1565以供执行。

一旦执行,写回级1570可以将数据写入寄存器、队列、或指令集架构1500的其他结构以传递给定命令的完成。取决于布置在发布级1560中的指令的顺序,写回级1570的操作可以使得附加指令能被执行。可以由跟踪单元1575监视或调试指令集架构1500的性能。

图16是根据本公开的实施例的用于处理器的指令集架构的执行流水线1600的框图。执行流水线1600可以示出例如图15的指令架构1500的操作。

执行流水线1600可以包括操作的任何合适组合。在1605中,可以作出对接下来会执行的分支的预测。在一个实施例中,此类预测可以基于指令的先前执行及其结果。在1610中,可以将对应于执行所预测的分支的指令加载到指令高速缓存中。在1615中,可以取出指令高速缓存中的一个或多个此类指令以供执行。在1620中,可以将已经被取出的指令解码为微代码或更具体的机器语言。在一个实施例中,可以同时解码多个指令。在1625中,可以重新分配对经解码的指令内的寄存器或其他资源的引用。例如,可以将对虚拟寄存器的引用替换为对相应的物理寄存器的引用。在1630中,可以将指令分派到队列以供执行。在1640中,可以执行指令。此类执行可以以任何合适的方式来实现。在1650中,可以将指令发布到合适的执行实体。执行指令的方式可以取决于执行指令的特定实体。例如,在1655处,alu可以执行算术功能。alu可以利用单个时钟周期以及两个移位器以用于其操作。在一个实施例中,可以采用两个alu,并且因此在1655处可以执行两个指令。在1660处,可以作出对所得分支的确定。程序计数器可以用于指示将作出分支的目的地。可以在单个时钟周期内执行1660。在1665处,可以由一个或多个fpu执行浮点算术。浮点操作可以要求多个时钟周期(诸如两个到十个周期)来执行。在1670处,可以执行乘法和除法操作。可以在四个时钟周期中执行此类操作。在1675处,可以执行将操作加载和存储到寄存器或流水线1600的其他部分。操作可以包括加载和存储地址。可以在四个时钟周期中执行此类操作。在1680处,可以根据1655-1675的所得操作的需要执行写回操作。

图17是根据本公开的实施例的用于利用处理器1710的电子设备1700的框图。电子设备1700可以包括例如笔记本、超级本、计算机、塔服务器、机架服务器、刀片服务器、膝上型计算机、台式机、平板、移动设备、电话、嵌入式计算机、或任何其他合适的电子设备。

电子设备1700可以包括通信地耦合至任何合适数量或种类的组件、外围设备、模块或设备的处理器1710。此类耦合可以通过任何合适种类的总线或接口完成,例如i2c总线、系统管理总线(smbus)、低引脚数(lpc)总线、spi、高清晰度音频(hda)总线、串行先进技术附接(sata)总线、usb总线(版本1、2、3)或通用异步接收机/发射机(uart)总线。

此类组件可以包括,例如,显示器1724、触摸屏1725、触板1730、近场通信(nfc)单元1745、传感器中枢1740、热传感器1746、快速芯片组(ec)1735、受信任平台模块(tpm)1738、bios/固件/闪存1722、数字信号处理器1760、诸如固态硬盘(ssd)或硬盘驱动器(hdd)的驱动器1720、无线局域网(wlan)单元1750、蓝牙单元1752、无线广域网(wwan)单元1756、全球定位系统(gps)1755、诸如usb3.0相机的相机1754、或以例如lpddr3标准实现的低功率双数据率(lpddr)存储器单元1715。这些组件可以各自以任何合适的方式来实现。

此外,在各实施例中,其他组件可以通过上文讨论的组件通信地耦合至处理器1710。例如,加速度计1741、环境光传感器(als)1742、罗盘1743以及陀螺仪1744可以通信地耦合至传感器中枢1740。热传感器1739、风扇1737、键盘1736以及触板1730可以通信地耦合至ec1735。扬声器1763、头戴式耳机1764以及话筒1765可以通信地耦合至音频单元1762,音频单元可以进而通信地耦合至dsp1760。音频单元1762可以包括,例如,音频编解码器和d类放大器。sim卡1757可以通信地耦合至wwan单元1756。诸如wlan单元1750、蓝牙单元1752以及wwan单元1756的组件可以以下一代形状因数(ngff)实现。

本公开的一些实施例涉及处理器中的指令的乱序集群化解码。图18是根据本公开的实施例的用于乱序集群化解码的示例系统1800的示图。本文中描述的系统和方法可以用于在控制流中的高效点处使解码操作并行化。在一些实施例中,该方法可以用于通过允许多组连续指令由处理器核前端中的相应解码集群乱序地解码来增加在每个周期中可以被解码的指令的数量。然后,可以在所得的经解码指令被传递到处理器核后端或到其执行集群以供执行之前按程序顺序重新组装它们。例如,在处理器核后端的分配和寄存器重命名级之前由多个解码集群产生的经解码指令可以按程序顺序被放回。在至少一些实施例中,可以通过逻辑复制来提供增加的解码带宽以支持并行性。例如,在处理器核前端的最早级中的组件创建表示按程序顺序的程序的未解码指令的数据元素流之后,可以通过对连续数据元素块解码使解码级并行化,连续数据元素块在多个解码集群中的与指令边界对应的点处被分解。在一个示例实施例中,流中的数据元素中的每一个可以包括共同表示指令指针值的一个或多个字节。前端中的分离器组件可以将不同的连续数据元素块引导到多个解码集群中的每一个。在一些实施例中,分离器可以在每个预测的所采用分支之后分解数据元素流。在其他实施例中,分离器可以使用不同的标准来确定数据元素流中的点,在该点处,分离器切换数据元素被引导到的解码集群。在至少一些实施例中,该方法可以解决与串行依赖关系相关联的频率问题。例如,通过使每个解码集群保持相对较窄,它可以允许串行逻辑链保持更短。每个解码集群可以包括共同执行n宽度解码的多个解码器,其中n是任意整数。

系统1800可以包括一个或多个处理器、soc、集成电路或其他机构。尽管在图18中作为示例示出和描述系统1800,但是可以使用任何合适的机构。例如,本文中描述的系统1800的一些或全部功能可以由数字信号处理器(dsp)、电路、用于重新配置电路的指令、微控制器、专用集成电路(asic)或具有比图18所示的元件更多、更少、或不同的元件的微处理器来实现。系统1800可以包括用于执行流水线化预取以使多个数据流并行地前进的任何合适的机构。在至少一些实施例中,这些机构可以在硬件中实现。例如,在一些实施例中,图18所示和/或本文中所描述的系统1800的一些或所有元件可以完全或部分地使用硬件电路来实现。在一些实施例中,该电路可以包括静态(固定功能)逻辑器件,其共同实现系统1800的一些或全部功能。在其他实施例中,该电路可以包括可编程逻辑器件,诸如现场可编程逻辑门或其阵列,其共同实现系统1800的一些或全部功能。在另一些实施例中,该电路可以包括静态、动态和/或可编程存储器设备,当与其他硬件元件一起操作时,它们实现系统1800的一些或全部功能。例如,系统1800可以包括其中存储有指令的硬件存储器,该指令可以用于对系统1800进行编程以执行根据本公开的实施例的一个或多个操作。系统1800的实施例不限于硬件电路和软件的任何特定组合。系统1800可以完全地或部分地由图1-17中描述的元件实现。

在一个实施例中,系统1800可以接收指令以用于作为指令流来执行。在一个实施例中,系统1800可以包括用于取出和解码指令的处理器核前端1810和用于执行经解码指令的处理器核后端1860。在系统1800包括多核处理器的实施例中,多个处理器核中的每一个可以包括前端1810的至少一部分和后端1860的至少一部分。

前端1810可以包括数据元素的队列1820,其表示按程序顺序的未解码指令的序列,这些未解码指令作为指令流被接收或者从存储器(未示出)中被取出。在一个实施例中,数据元素可以包括指令指针值(示出为ip0-ipn)。在另一实施例中,数据元素可以包括处理器的指令集架构(isa)中的指令的编码。在又一实施例中,数据元素可以表示要由处理器解码和/或解释的指令相关的“文本”,以使处理器的isa中的指令被执行。在另一实施例中,数据元素可以是要由处理器解码和/或解释的数据的原始字节,以使处理器的isa中的指令被执行。在一些实施例中,表示未解码指令的数据元素中的每一个可以是相同长度。在其他实施例中,表示未解码指令的数据元素中的至少一些可以具有不同长度。

前端1810可以包括两个解码集群,示出为解码集群0(1830)和解码集群1(1835)。前端1810还可以包括分离器1825,其将队列1820中的数据元素的不同子集引导至解码集群0(1830)或解码集群1(1835)以进行解码。在一个实施例中,分离器1825可以包括硬件电路或逻辑,用于确定是否以及何时将队列1820中的数据元素的不同子集引导至解码集群0(1830)和/或解码集群1(1835)以用于解码。在一些实施例中,解码集群中的每一个可以包括用于对被引导至它的数据元素中的多个数据元素并行地解码的硬件电路或逻辑。例如,在一个实施例中,解码集群中的每一个可以执行两宽度解码。一般而言,解码集群中的每一个可以执行n宽度解码,其中n是任意整数。在一些实施例中,不同的解码集群可以包括不同数量的解码器,即,它们可以不是对称的。在一些实施例中,不同的集群可能比其他集群更适合于对某些指令解码。在一些实施例中,分离器1825可以将解码集群之间的这些和/或其他差异作为因素考虑到其对是否以及何时将队列1820中的数据元素的不同子集引导至解码集群0(1830)和/或解码集群1(1835)以用于解码的确定中。

前端1810可以包括队列1840和队列1845,由解码集群0(1830)执行的解码操作的输出被引导到队列1840,并且由解码集群1(1835)执行的解码操作的输出被引导到队列1845。在该示例中,队列1840和1845以微操作(uop)的形式存储经解码指令。在一些实施例中,对被引导到解码集群0(1830)的队列1820的数据元素中的每一个的解码可以在队列1840中生成单个uop。在其他实施例中,对于被引导到解码集群0(1830)的数据元素中的至少一些,解码可以在队列1840中生成两个或更多个uop。类似地,在一些实施例中,对被引导到解码集群1(1835)的队列1820的数据元素中的每一个的解码可以在队列1845中生成单个uop。在其他实施例中,对于被引导到解码集群1(1835)的数据元素中的至少一些,解码可以在队列1845中生成两个或更多个uop。

前端1810还可以包括合并组件1850。如本文更详细描述的,合并组件1850可以包括硬件电路或逻辑,用于合并分别在队列1840和1845中的解码集群0(1830)和解码集群1(1835)的输出以产生经解码指令的有序序列。在合并解码集群0(1830)和解码集群1(1835)的输出之后,经解码指令的序列中的经解码指令的顺序可以反映从队列1820被引导到解码集群的对应的未解码指令的程序顺序。在该示例中,可以将由合并组件1850生成的经解码指令的有序序列提供给处理器核后端1860以供执行。在一个实施例中,可以将由合并组件1850生成的经解码指令的有序序列提供给处理器核后端1860的寄存器重命名级(示出为寄存器重命名器1861)。

处理器核后端1860还可以包括指令分派器1862、一个或多个指令发布队列1863、一个或多个执行单元1864、以及用于将指令执行的结果写入存储器的写回级1865。在一个实施例中,执行单元1864中的至少一个可以是乱序执行引擎。由寄存器重命名器1861接收的经解码指令可以由指令分派器1862分派。它们可以被放置在一个或多个指令发布队列1863中,从其中可以调度它们以由特定执行单元1864执行。在一些实施例中,处理器核后端1860可以包括执行指令所需的附加组件(未示出)。例如,在不同的实施例中,处理器核的非核模块可以包括一个或多个高速缓存、硬件接口、存储器一致性协调器、处理器间互连、指令流水线或存储器控制器(未示出)。

在另一示例实施例中,队列1820可以实现为两个物理队列,表示未解码指令的数据元素被分离器(诸如分离器1825)引导到其中,以在这些数据元素被生成后由解码集群中的不同的解码集群解码。在又一示例实施例中,队列1820可以实现为单个物理队列内的两个逻辑队列。在该示例中,可以维护多个指针以由分离器(诸如分离器1825)将数据元素引导到逻辑队列中的每一个中,并且将不同组的连续数据元素引导到多个解码集群。

图19是根据本公开的实施例的用于执行乱序集群化解码的方法的示图。方法1900可以由图1-18、图20或图22所示的任何元件实现。方法1900可以依据任何合适标准启动并且可以在任何合适点处启动操作。在一个实施例中,方法1900可以在1905处启动操作。方法1900可以包括比所示的操作更多或更少的操作。此外,方法1900可以以与下文所示的顺序不同的顺序执行其操作。方法1900可以在任何合适操作处终止。此外,方法1900可以在任何合适操作处重复操作。方法1900可以与方法1900的其他操作并行地或与其他方法的操作并行地执行其任何操作。此外,可以执行方法1900多次以对不同的未解码指令流执行乱序集群化解码。可以随时间执行方法1900以解码指令以实现一个或多个应用。在方法1900的执行期间,可以调用其他方法,诸如下面描述的方法2100和/或方法2300。可以调用这些附加方法来执行方法1900的操作中的至少一些。

在1905处,在一个实施例中,在处理器中接收表示按程序顺序的指令序列中的未解码指令的数据元素流。在一个实施例中,数据元素可以包括指令指针值。在另一实施例中,数据元素可以包括处理器的指令集架构(isa)中的指令的编码。在又一实施例中,数据元素可以表示要由处理器解码和/或解释的指令相关的“文本”,以使处理器的isa中的指令被执行。在另一实施例中,数据元素可以是要由处理器解码和/或解释的数据的原始字节,以使处理器的isa中的指令被执行。在一些实施例中,表示未解码指令的数据元素中的每一个可以是相同长度。在其他实施例中,表示未解码指令的数据元素中的至少一些可以具有不同长度。

在1910处,可以按程序顺序将数据元素的第一子集引导到多个解码集群中的第一个。在一些实施例中,数据元素的第一子集可以包括表示单个指令的一个或多个数据元素。在其他实施例中,数据元素的第一子集可以包括表示两个或更多个指令的数据元素。在各实施例中,数据元素的第一子集可以由指令序列中的一个或多个指令边界定义。例如,在一些实施例中,数据元素的第一子集中的第一数据元素可以是指令表示中的第一数据元素。数据的第一子集中的最后数据元素可以是同一指令或另一指令的表示中的最后数据元素。

在1915处,可以确定已经满足触发切换到另一个解码集群的条件。在1920处,可以按程序顺序将数据元素的第二子集(按程序顺序紧跟着数据元素的第一子集的子集)引导到第二解码集群。在一些实施例中,数据元素的第二子集可以包括表示单个指令的一个或多个数据元素。在其他实施例中,数据元素的第二子集可以包括表示两个或更多个指令的数据元素。在各实施例中,数据元素的第二子集可以由指令序列中的一个或多个指令边界定义。例如,在一些实施例中,数据元素的第二子集中的第一数据元素可以是指令表示中的第一数据元素。数据的第二子集中的最后数据元素可以是同一指令或另一指令的表示中的最后数据元素。

在1925处,第一解码集群可以解码数据元素的第一子集,并且第二解码集群可以解码数据元素的第二子集。在至少一些实施例中,可以基本上并行地执行这些解码操作。在1930处,在第一和第二解码集群的解码之后,可以合并由两个解码集群执行的解码操作的结果以产生经解码指令的有序序列,其中经解码指令的顺序对应于未解码指令的程序顺序。在1935处,可以按与程序顺序对应的顺序将经解码指令的序列提供给执行集群。在该示例实施例中,可以连续地重复操作1910-1935,以在表示未解码指令的数据元素流中的数据元素被接收后对其解码。在一些实施例中,执行集群可以类似于图4b所示的执行集群460。执行集群可以包括多个执行单元,诸如图4b中的执行单元462或图18中的执行单元1864。

在至少一些实施例中,方法1900的操作1905至1935中的一个或多个可以在处理器核的前端中的硬件中执行。

在一些实施例中,本文所描述的系统可以利用主要的分支预测机制被放置在处理器核的执行流水线中的很早的位置的事实以及指定在几乎每个周期期间预测所采用分支的能力的性能要求。例如,许多现代高性能处理器包括大的复杂的分支预测器。在这些处理器中,如在本公开的一些实施例中,预测器可以尽可能早地放置在流水线中,以便最小化每当发现所采用分支时浪费的工作量。在一些现有系统中,通过流水线的指令流可以顺序地前进,直到预测到所采用分支。所采用分支可以非常频繁地发生(例如,每8-10个指令)。包括本公开的一些实施例的高性能处理器可以包括用于尽可能快地标识所采用分支的电路,因为分支判定通常花费多于单个周期。在一些实施例中,可以使用被称为分支预测队列(bpq)的指令指针(ip)队列将预测过程与处理器流水线的其余部分进一步解耦。这可以允许预测过程的粒度与取出过程的粒度不同,同时提供消除由预测流水线的等待时间引起的任何气泡的手段。

在一些实施例中,给定这些前端机制本质上创建指令指针流,本文所描述的系统可以通过从bpq开始聚集取出和解码流水线来利用已知的良好的指令边界点。例如,代替包括单个bpq、用于取出原始字节的单个取出器和单个解码流水线,可以在从bpq开始并且在经解码uop的队列处结束(在有序分配之前)的多个解码集群中复制整个解码过程。解码集群可以并行地在不同的未解码指令的顺序流上工作。流中的数据元素的每个子集中的数据元素可以按程序顺序。被连续分配给同一解码集群的数据元素流的子集可以或可以不按程序顺序。

图20是根据本公开的实施例的具有前端的示例处理器核2000的示图,该前端包括多个两宽度解码集群。更具体地,处理器核2000包括三宽度分配器/重命名器,并且包括四宽度集群化前端,其使用两个两宽度解码集群来实现。尽管在图20中作为示例示出和描述处理器核2000,但是可以使用任何合适的机构。例如,本文中描述的处理器核2000的一些或全部功能可以由数字信号处理器(dsp)、电路、用于重新配置电路的指令、微控制器、专用集成电路(asic)或具有比图20所示的元件更多、更少、或不同的元件的微处理器来实现。处理器核2000可以包括用于执行流水线化预取以使多个数据流并行地前进的任何合适的机构。在至少一些实施例中,这些机构可以在硬件中实现。例如,在一些实施例中,图20所示和/或本文中所描述的处理器核2000的一些或所有元件可以完全或部分地使用硬件电路来实现。在一些实施例中,该电路可以包括静态(固定功能)逻辑器件,其共同实现处理器核2000的一些或全部功能。在其他实施例中,该电路可以包括可编程逻辑器件,诸如现场可编程逻辑门或其阵列,其共同实现处理器核2000的一些或全部功能。在另一些实施例中,该电路可以包括静态、动态和/或可编程存储器设备,当与其他硬件元件一起操作时,它们实现处理器核2000的一些或全部功能。例如,处理器核2000可以包括其中存储有指令的硬件存储器,该指令可以用于对处理器核2000进行编程以执行根据本公开的实施例的一个或多个操作。处理器核2000的实施例不限于硬件电路和软件的任何特定组合。处理器核2000可以完全地或部分地由图1-19中描述的元件实现。

在一个实施例中,处理器核2000可以接收用于作为指令流执行的指令。在一个实施例中,处理器核2000可以包括用于取出和解码指令的前端2010和用于接收经解码指令的分配器重命名器2070。前端2010可以包括两个两宽度解码集群,示出为解码集群0(2032)和解码集群1(2052)。在一个实施例中,分配器/重命名器2070可以是处理器核后端的组件,其包括用于执行经解码指令的一个或多个执行单元,并且可以类似于图18所示的寄存器重命名器1861。

前端2010可以包括分支预测器2020,其可以包括两个分支预测队列2022和2024。在一个实施例中,存储在预测队列2022和2024中的数据元素可以包括指示采用分支的指令的指令指针值。在一个实施例中,这些分支预测队列2022和2024中的每一个可以包括用于最多八个条目的存储。在其他实施例中,这些分支预测队列2022和2024中的任一个或两个可以存储其他数量的条目。分支预测器2022还可以包括执行分支预测所需的其他元件,诸如用于实现分支预测逻辑的硬件电路、一个或多个缓冲器或队列(包括分支目标缓冲器)、或其他硬件电路和/或逻辑元件(未示出)。

前端2010还可以包括用于存储表示将由解码集群0(2032)解码的未解码指令的数据元素的预取缓冲器2030和用于存储表示将由解码集群1(2052)解码的未解码指令的数据元素的预取缓冲器2050。前端2010还可以包括指令高速缓存2040。在一个实施例中,指令高速缓存2040可以包括用于表示未解码指令的最多32k字节的数据的存储。在其他实施例中,指令高速缓存2040可以包括用于更多或更少条目的存储。在一些实施例中,可以将来自指令高速缓存2040的表示未解码指令的指令相关的数据元素提供给预取缓冲器2030和2050,以用于分别由解码集群2032和2034进行后续解码。

在该示例中,可以将来自分支预测队列2022和2024的包括关于要由前端2010解码的未解码指令的分支相关的信息的数据元素提供给预取缓冲器2030和2050,以用于将由解码集群2032和2034分别执行的后续解码操作。在一个实施例中,分支预测器2020可以包括硬件电路或逻辑,用于确定要包括在分支预测队列0(2022)和分支预测队列1(2024)中的数据元素。在一个实施例中,该信息可以用于确定指令高速缓存2040中的哪些数据元素将被引导到预取缓冲器2030以及指令高速缓存2040中的哪些数据元素将被引导到预取缓冲器2050。在一些实施例中,前端2010可以包括硬件电路或逻辑,用于确定指令高速缓存2040中的数据元素的哪些子集将被引导到预取缓冲器2030和2050中的每一个。在一个示例中,数据元素可以被从指令高速缓存2040引导到预取缓冲器2030或2050中的一个,直到指令高速缓存2040中的数据元素中的一个对应于指示预测的所采用分支的对应的分支预测器2022或2024中的条目。

前端2010可以包括微代码rom(示出为urom2045),其存储表示用于执行在输入指令流中接收的各种指令的微操作(uop)的数据元素。在一些实施例中,解码集群2032和2052中的每一个可以包括硬件电路或逻辑,用于对其预取缓冲器中的数据元素中的多个数据元素并行地解码。例如,示出为解码集群0(2032)的第一解码集群是包括两个解码器的两宽度解码集群,解码器中的每一个可以基本上同时解码不同的数据元素。解码集群2032可以解码被引导到预取缓冲器0(2030)的数据元素。在一些情况下,解码操作可以包括为每个经解码数据元素生成一个或多个uop。在其他情况下,解码操作可以包括为每个经解码数据元素从urom2045获得一个或多个uop,例如,如果在urom2045中用于同一指令的先前解码操作的结果是可用的。类似地,示出为解码集群1(2052)的第二解码集群是包括两个解码器的两宽度解码集群,解码器中的每一个可以基本上同时解码不同的数据元素。解码集群2052可以解码被引导到预取缓冲器1(2050)的数据元素。在一些情况下,解码操作可以包括为每个经解码数据元素生成一个或多个uop。在其他情况下,解码操作可以包括为每个经解码数据元素从urom2045获得一个或多个uop,例如,如果在urom2045中用于同一指令的先前解码操作的结果是可用的。

前端2010可以包括队列2034和队列2054,解码集群0(2032)的输出被引导到队列2034,并且解码集群1(2052)的输出被引导到队列2054。在该示例中,队列2034和2054以微操作(uop)的形式存储经解码指令。在一些实施例中,对被引导到解码集群0(2032)的预取缓冲器2030的数据元素中的每一个的解码可以在队列2034中生成单个uop。在其他实施例中,对于被引导到解码集群0(2032)的数据元素中的至少一些,解码可以在队列2034中生成两个或更多个uop。类似地,在一些实施例中,对被引导到解码集群1(2052)的预取缓冲器2050的数据元素中的每一个的解码可以在队列2054中生成单个uop。在其他实施例中,对于被引导到解码集群1(2052)的数据元素中的至少一些,解码可以在队列2054中生成两个或更多个uop。如该示例所示,作为解码操作的结果,uop可以被从解码集群2032和/或2052本身引导到队列2034和/或2054,或从urom2045,取决于用于同一指令的先前解码操作的结果在urom2045中是否可用。

前端2010还可以包括合并组件2060。合并组件2060可以包括硬件电路或逻辑,用于合并分别在队列2034和2054中的解码集群0(2032)和解码集群1(2052)的输出以产生经解码指令的有序序列。在合并解码集群0(2032)和解码集群1(2052)的输出之后,经解码指令的序列中的经解码指令的顺序可以反映通过它们相应的预取缓冲器被引导到解码集群的对应的未解码指令的程序顺序。在该示例中,由合并组件2060生成的经解码指令的有序序列可以被提供给处理器核后端的分配和寄存器重命名级(示出为分配器/重命名器2070),处理器核后端还包括用于执行指令的一个或多个执行单元。

在本公开的一些实施例中,处理器的前端中的分离器电路可以操作以将表示未解码指令的数据元素引导到解码集群中的一个(或者馈送解码集群的队列),直到指示分离器应该开始将数据元素引导到不同的解码集群(或者馈送另一个解码集群的队列)的触发条件为止。在至少一些实施例中,被引导到集群中的一个的数据元素组可以包括在已知的指令边界处开始和结束的按程序顺序的连续数据元素。一些处理器isa包括可变长度指令,其中可能不容易确定这样的边界。在一个实施例中,集群切换触发条件可以包括检测预测的所采用分支。在另一实施例中,检测集群切换触发条件可以包括检测特别长的指令(例如,由指令流中的大量数据元素表示的指令)。该条件可以在长指令的数据元素被引导到解码集群中的一个之前或之后立即触发切换到另一个解码集群。在一些isa中,可以保证指令流包括至少与在指令流中已经接收到的预定数量的数据元素一样频繁的指令边界。例如,在一个isa中,至少在指令流中的每32个字节之后,可以保证指令流中的指令边界。在该示例中,检测集群切换触发条件可以包括对被引导到每个解码集群的字节的数量计数,并且每当32个字节或32个字节的倍数已经被引导到解码集群中的一个时切换到另一个解码集群。在另一些实施例中,其他机制可以用于标识指令流中的指令边界或其他已知的良好的点,在该点处切换到不同的解码集群。例如,在一个实施例中,表示未解码指令的数据元素可以由处理器的前端中的指令指针生成逻辑利用编码来标记,该编码指示它们是否是集群切换点的候选者,并且检测集群切换触发条件可以包括检测将数据元素标识为集群切换点的候选者的编码。

在各实施例中,上文描述的用于执行乱序集群化解码的系统和方法可以解决性能、频率和可扩展性方面的问题。然而,在解码集群之间工作负载不均衡的实施例中,这些系统的性能可能达不到预期。例如,实现乱序集群化解码的系统可能经历等待时间不对称。虽然在大多数情况下这些系统的平均性能可能是可接受的,但由于在特定工作负载下集群化解码器缺乏负载平衡而导致的系统的性能可能更明显。在本公开的至少一些实施例中,在指令指针(ip)生成的点处实现的负载平衡可以帮助乱序集群化解码实现使解码硬件的正常运行时间和集群化前端的有效带宽最大化。在至少一些实施例中,本文所描述的用于乱序集群化解码的负载平衡机制可以完全或部分地在处理器前端中的硬件电路或逻辑中实现。

在各实施例中,可以实现不同类型的硬件电路或逻辑以用于乱序集群化解码中的负载平衡。例如,在一些实施例中,集群平衡电路可以实现反压启发方法,其取决于贯穿处理器核的执行流水线的足够的排队以正确地运行。在其他实施例中,集群平衡电路可以采用或利用分支预测器硬件来驱动将未解码指令分配到特定解码集群。这些分配可以以试图使解码集群的工作负载平衡和/或使所有解码集群保持以完整或接近完整的输入队列操作的方式进行。在一些实施例中,集群平衡电路可以利用额外的元数据数据来增加用于预测的所采用分支的现有分支目标缓冲器(btb)条目,以强制或提高解码并行性。在一些实施例中,集群平衡电路可以插入表示“假的预测的所采用分支”的条目,并且可以利用元数据来增加这些条目,以强制或提高解码并行性。

在至少一些实施例中,跟踪由不同的解码集群解码的指令块的绝对或相对新旧度以供处理器中的任何硬件电路或逻辑使用可能是重要的,该硬件电路或逻辑依赖于其进行操作的指令是按程序顺序。这可以包括但不限于用于在有序分配和重命名之前执行对乱序的经解码指令流的重新排序的硬件电路或逻辑。在一些实施例中,给定所采用的宏分支不再能用于隐式地跟踪每个指令块的新旧度,ip生成器中的块分派器可以传递与显式的双态切换(toggle)点相关联的状态(即,在该点处在解码集群中进行切换的点,表示未解码指令的指令指针值被引导到该解码集群),无论用于确定何时以及是否切换集群的机制如何。在一些实施例中,可以在执行流水线中的更下游使用该状态信息而不是所采用分支信息来跟踪块新旧度。

图21是根据本公开的实施例的用于将负载平衡应用于乱序集群化解码的方法2100的示图。方法2100可以由图1-20或图22所示的任何元件实现。方法2100可以依据任何合适标准启动并且可以在任何合适点处启动操作。在一个实施例中,方法2100可以在2105处启动操作。方法2100可以包括比所示的操作更多或更少的操作。此外,方法2100可以以与下文所示的顺序不同的顺序执行其操作。方法2100可以在任何合适操作处终止。此外,方法2100可以在任何合适操作处重复操作。方法2100可以与方法2100的其他操作并行地或与其他方法的操作并行地执行其任何操作。此外,可以执行方法2100多次,以将负载平衡机制应用于将不同的未解码指令块分配到实现乱序集群化解码的系统中的解码集群。方法2100可以在操作期间随时间执行以在解码指令以实现一个或多个应用时应用负载平衡机制。基于方法2100的结果,可以调用其他方法,诸如下面描述的方法2700。例如,可以通过方法2100的执行来调用方法2700以解码被引导到特定解码集群的指令信息,并且将结果提供给处理器核后端的执行集群以供执行。

在2105处,在一个实施例中,可以在处理器中接收表示按程序顺序的指令序列中的未解码指令的数据元素流。在2110处,指令指针生成器可以按程序顺序将数据元素的第一子集引导到处理器中的多个解码集群中的第一个。在2115处,指令指针生成器可以检测指示应该采取特定动作来平衡集群之间的负载的条件。根据一些实施例,下面更详细地描述这些负载平衡动作的各种示例。在2120处,响应于检测到该条件,可以采取用于平衡集群之间的负载的特定动作。

在2125处,取决于所采取的特定动作,指令指针生成器可以将按程序顺序紧跟着数据元素的第一子集的数据元素的第二子集引导到第一解码集群或第二解码集群。例如,如果检测到的条件指示要发生集群切换,则指令指针生成器可以将数据元素的第二子集引导到第二解码集群。在另一示例中,如果检测到的条件指示要抑制集群切换,则指令指针生成器可以将数据元素的第二子集引导到第一解码集群,不论与数据元素的第一或第二子集相关联的另一条件是否将以其他方式触发集群切换。

在2130处,数据元素的第一和第二子集将被引导到的一个或多个解码集群可以解码数据元素的那些子集以分别生成经解码指令的第一和第二子集。在2135处,可以按程序顺序将经解码指令的第一和第二子集提供给处理器核后端的执行集群以供执行。在数据元素的第一和第二子集由不同的解码集群解码的情况下,这可以包括合并从解码集群的相应输出队列获得的经解码指令的子集,以生成反映对应的未解码指令的程序顺序的经解码指令的序列。

如上所述,在本公开的至少一些实施例中,处理器的取出和解码流水线可以包括在读取指令高速缓存的点之后的排队点。执行流水线中的在该点处的一个或多个队列可以至少临时地保持原始高速缓存行和/或原始字节以及其他状态信息。例如,可以存在与每个解码集群相关联的相应预取缓冲器,其保存将由解码集群解码的数据元素,这些数据元素中的至少一些可以从指令高速缓存获得。在一些实施例中,这些预取缓冲器可以与图20所示的预取缓冲器2030和2050类似,并且可以实现预取缓冲器2030和2050的功能。在至少一些实施例中,取决于微架构,另一队列或并行的队列组可以存在于执行流水线的解码级之后,但在分配和重命名级之前。在执行乱序集群化解码的系统中,每个解码集群可以实现一个这样的解码后队列。例如,这些经解码指令队列中的每一个可以存储已经由解码集群中的相应一个输出的uop,从而允许从这些队列中读取乱序uop并且在将它们传递到分配和重命名级之前按程序顺序放回。在一些实施例中,这些经解码指令队列(有时可以被称为“uop队列”)可以类似于图20所示的经解码指令队列2034和2054并且可以实现经解码指令队列2034和2054的功能。在一些实施例中,处理器还可以包括在取出级之前的每个集群的相应队列,其至少临时地保存从分支预测器馈送的指令指针地址。在一些实施例中,这些队列可以与图20所示的分支预测队列2022和2024类似,并且可以实现分支预测队列2022和2024的功能。

在实现乱序集群化解码但不包括集群平衡机制的系统中,可以以循环方式将工作分配给解码集群中的每一个,并且集群切换可以仅在预测的所采用分支上发生。在一个示例中,当在包括两个解码集群的处理器中取出并解码高性能但不平衡的指令流时,第一集群的经解码指令队列可能耗尽,而第二集群的经解码指令队列可能是满的或几乎满的。当性能受其宽度限制的第一集群已经被分配了过多的工作负载时,这可能发生。在这种情况下,由于第一集群的解码等待时间很高,因此与第一集群相关联的预取缓冲器将填满,与第一集群相关联的分支预测队列也将如此。另一方面,已经被分配了太少的工作负载的第二集群的预取缓冲器和分支预测队列能够耗尽并且可以是空的或接近空的。更具体地,当由于与第一集群相关联的分支预测队列变满而导致馈送分支预测队列的有序ip生成电路或逻辑停止时,可能发生这种情况。

在本公开的一些实施例中,其中在乱序集群化解码中应用负载平衡,集群平衡硬件或逻辑可以跟踪执行流水线中的队列的状态。例如,可以由硬件在队列处检测队列的占用级别、队列被填充的速率、或队列被耗尽的速率,并且可以在取出和解码流水线的ip生成点处将该信息的指示提供给电路或逻辑并且由其跟踪。在一些此类实施例中,在ip生成点处执行的集群平衡可以包括将一个或多个队列的状态相互比较。在分支预测队列很深的实施例中,集群平衡机制可以单独地或者主要地依赖于关于与每个解码集群相关联的分支预测队列的绝对或相对占用率。在一些实施例中,处理器可以包括两个解码集群,并且当尝试平衡两个解码集群之间的工作负载时,ip生成电路或逻辑可以发送双态切换指示(例如,它可以断言双态切换位)以强制集群切换。在处理器包括多于两个集群的实施例中,这种双态切换位可以伴随对要解码的下一个指令块的集群分配(例如,集群id)的指示。这可以允许ip生成电路或逻辑内的分派器分配不论多么必要的块以平衡所有解码集群之间的工作负载,而不是仅以循环方式操作。在一个示例中,如果与第一解码集群相关联的分支预测队列的占用率超过阈值,而与第二解码集群相关联的分支预测队列的占用率未超过该阈值,则分派器可以抑制自然双态切换点(例如,对应于预测的所采用分支或其他块边界的点),同时将未解码指令引导到第二解码集群。这可以使两个连续的块(按程序顺序)被引导到第二解码集群,而不是块中的一个被引导到解码集群中的每一个,这可以用于更好地平衡解码集群之间的工作负载。

在一些系统中,分支预测队列深度可能太浅而不允许ip生成电路或逻辑足够快地响应以防止由于不平衡的解码工作负载导致的性能降级。例如,在一些cisc架构中,被映射到馈送到解码器的原始指令字节中的每一个的uop的数量可能是高度可变的。在一些此类实施例中,当确定何时以及是否应用集群负载平衡动作时,可以使用来自执行流水线中的更下游的排队点的信息。在一个实施例中,可以在取出和解码流水线的末尾处从经解码指令队列获得最早的警告作为反馈。在这种实施例中,当与解码集群中的一个相关联的经解码指令队列比与另一个解码集群相关联的经解码指令队列更快地耗尽时,工作负载可能是不平衡的,并且ip生成电路或逻辑内的分派器可能偏离其经解码指令队列更快地耗尽的解码集群。在一些实施例中,在确定何时以及是否应用集群负载平衡动作时,还可以考虑从在取出和解码流水线中间的排队点(诸如与解码集群中的每一个相关联的预取缓冲器)获得的类似信息,并且使用该附加信息可以提高所应用偏置的置信度水平。在一些实施例中,由于在ip生成点处实现集群分配偏置的变化与在下游队列中看到该变化的影响之间的滞后,可以配置所触发的偏置动作以在足以确保期望的变化已经生效的时间段阻止进一步的偏置动作。在一些实施例中,这可以通过测量和跟踪来自一个或多个队列的解除分配来确定。

图22是根据本公开的实施例的用于将负载平衡应用于乱序集群化解码的示例处理器核2200的示图。在图22所示的示例实施例中,处理器核2200包括处理器核前端2210和处理器核后端2280。前端2210包括指令指针(ip)生成器2260、分支预测器2220和合并组件2270,ip生成器2260包括集群平衡器2262,分支预测器2220包括分支目标缓冲器(btb)2222。在各实施例中,分支预测器2220可以类似于图4b中的分支预测单元432、图15所示的分支预测单元1535或图20所示并且上文所述的分支预测器2020并且可以实现它们的功能。在一些实施例中,合并组件2270可以类似于图20所示并且上文所述的合并组件2060并且可以实现其功能。

在该示例实施例中,前端2210还包括微代码rom(示出为urom2244)、指令高速缓存2240和指令转换后备缓冲器(tlb)2242。在一些实施例中,urom2244可以类似于图20所示并且上文所述的urom2045并且可以实现其功能。在一些实施例中,指令高速缓存2240可以类似于图4b所示的指令高速缓存单元434或图20所示并且上文所述的指令高速缓存2040并且可以实现其功能。在一些实施例中,指令tlb2242可以类似于图4b所示的指令tlb436并且可以实现其功能。

在图22所示的示例实施例中,前端2210还包括两个两宽度解码集群(示出为解码集群2232和2252),每个解码集群与预取缓冲器(分别示出为预取缓冲器2230和2250)、分支预测队列(分别示出为分支预测队列2224和2226)和经解码指令队列(分别示出为经解码指令队列2234和2254)相关联。在一些实施例中,解码集群2232和2252可以类似于图20所示并且上文所述的解码集群2032和2052并且可以实现它们的功能。在一些实施例中,预取缓冲器2230和2250可以类似于图20所示并且上文所述的预取缓冲器2030和2050并且可以实现它们的功能。在一些实施例中,分支预测队列2224和2226可以类似于图20所示并且上文所述的分支预测队列2022和2024并且可以实现它们的功能。在一些实施例中,经解码指令队列2234和2254可以类似于图20所示并且上文所述的经解码指令队列2034和2054并且可以实现它们的功能。

如该示例实施例所示,ip生成器2260或其集群平衡器2262的输入可以包括从分支预测器2220获得的信息,诸如一个或多个分支目标缓冲器条目。ip生成器2260或其集群平衡器2262的输入还可以包括来自后端2280的反馈2275。该反馈可以包括,例如,由解码集群2232或解码集群2252解码的各个指令块的执行等待时间的指示。ip生成器2260或其集群平衡器2262的输入还可以包括来自经解码指令队列2234和2254的反馈,分别示出为反馈2235和2255。在不同的实施例中,该反馈可以包括,例如,队列的占用水平,队列被填充的速率,队列被耗尽的速率,或从由对应的解码集群解码的各个指令块的队列提供给后端2280的uop的数量的计数。从每个单独的指令块的队列提供给后端2280的uop的数量的计数可以在经解码指令队列2234和2254中的相应计数器的值中反映(分别示出为计数器2236和2256)。

ip生成器2260或其集群平衡器2262的输入还可以包括来自预取缓冲器2230和2250的反馈,分别示出为反馈2233和2253。在不同的实施例中,该反馈可以包括,例如,队列的占用水平、队列被填充的速率或队列被耗尽的速率。在一些实施例中,ip生成器2260或其集群平衡器2262的输入可以包括来自分支预测队列2224和2226的反馈(图22中未示出)。在不同的实施例中,该反馈可以包括,例如,队列的占用水平、队列被填充的速率或队列被耗尽的速率。在一些实施例中,ip生成器2260或其集群平衡器2262的输入还可以包括来自解码集群2232和2252的反馈(图22中未示出)。在一些实施例中,该反馈可以包括例如指令块的解码等待时间的指示。在各实施例中,从后端2280或从前端2210的任何其他组件接收的反馈可以用于通知集群平衡决策,如本文中详细描述的。

如该示例实施例所示,ip生成器2260可以耦合到指令高速缓存2240和/或指令tlb2242,并且可以从前端2210的这些组件中的一个或两个获得可以用于通知集群平衡决策的信息,如本文所述。在一些实施例中,分支预测器2220可以耦合到指令高速缓存2240和/或指令tlb2242,并且可以与这些组件中的一个或两个交换信息以通知分支预测。

面对高的每周期指令工作负载,其循环通过具有不均匀的uop计数的多个基本块,其拍频波形图与处理器中的解码集群的数量对齐,诸如上文描述的基于启发方法形式的解码集群负载平衡可以很好地工作以防止解码集群之间的不平衡。例如,一个此类工作负载可以包括循环,其中长基本块(其包括12个uop)之后是短基本块(其包括4个uop),其之间是所采用分支。在该示例中,循环正在其上执行的处理器包括两个解码集群,每个解码集群包括两个解码器,以及四宽度后端(执行核)。该循环可能能够以每周期四个指令运行。然而,在没有负载平衡的情况下,无论哪个解码集群最初被分配为解码第一基本块(集群a)将始终被分配为在执行循环时解码第一基本块,而另一个解码集群(集群b)将始终被分配为解码第二基本块。在该示例中,循环的性能可能与每周期四个指令相比更接近每周期两个指令,其中解码集群a是阻碍性能的瓶颈。

在该示例中,如果应用本文描述的集群平衡机制,则ip生成电路或逻辑内的分派器可以基于从与解码集群中的每一个相关联的经解码指令队列接收的反馈,检测到与集群a相关联的经解码指令队列比与集群b相关联的经解码指令队列更快地耗尽。然而,多个连续的12个uop的序列保持位于与集群a相关联的预取缓冲器中,并且不被转储清除。在ip生成器包括集群平衡器的至少一些实施例中,集群平衡器可以通过抑制在写入与集群b相关联的分支预测队列时将以其他方式由下一个预测的所采用分支引起的双态切换动作而使分派器偏向解码集群b。此时,可以至少临时地阻止进一步的偏置动作。该负载平衡动作使分派器分配将被分配给集群b的4个uop块和下一个12个uop块。随后,分派器可以继续以循环方式分配基本块,从而将4个uop块分配给集群a并且将12个uop块分配给集群b。一旦足够的块已经解除分配以减少集群a上的压力,就可以重新启用偏置逻辑。最终,当集群平衡器检测到与集群b相关联的经解码指令队列开始比与集群a相关联的经解码指令队列更快地耗尽时,可以通过再次抑制将以其他方式在块之间发生的双态切换动作来触发第二负载平衡动作以偏向集群a。在一些实施例中,在高的每周期指令的部分的工作负载之前在每个uop队列中具有足够的深度并且队列中具有充足的工作的情况下,该示例工作负载可能能够达到其每周期四个指令的上限。

上述集群平衡算法是可以由ip生成器内的集群平衡器植入以在集群化乱序取出和解码流水线中执行负载平衡的各种潜在算法中的一个。在本公开的至少一些实施例中,至少可以从ip生成器通过流水线发送“双态切换”位以及表示每个基本块的数据,使得通过解码集群的块可以具有适当新旧度。在存在许多解码集群(例如,三个或更多)的实施例中,ip生成器可以基于由集群平衡器实现的算法,将目标集群id与双态切换位附连,这可以允许分派器以不同于隐式的循环方案的方式将基本块分配给解码集群。

虽然在许多情况下,上述集群平衡方案可以很好地工作,以平衡以其他方式将是不平衡的工作负载,但是该方法依赖于预测的所采用分支的存在。然而,例如,一些工作负载(诸如包括向量化代码的长展开循环的工作负载)可能在所采用分支之前具有数十个指令。为了使用上述集群平衡算法来平衡这种类型的工作负载,将需要比在典型处理器设计中会是实际的队列大得多的队列。下面描述的第二种方法可能更适合于平衡这种和其他类型的工作负载。

在该第二集群平衡方法中,可以将电路或逻辑添加到每个解码流水线的末尾,以跟踪每个分配的块的从对应的解码集群传递到后端或其执行集群的uop的数量。在一个示例实施例中,该电路可以包括5位计数器,其值反映当被传递的uop的数量小于32时每个块的被传递的uop的数量。在该示例实施例中,32个或更多个uop被从其中传递到核的块被分配值0x0。该计数器的值以及关于块的所采用分支的信息被发送到机器的后端,并且如果该值从先前计数值变化预定量(例如,可编程阈值量),则更新btb中的对应条目。在该方法下,可以从btb沿着解码流水线向下发送uop计数信息,以便抑制对btb的不必要的更新。在该示例中,注释在btb中的条目中的计数值可以具有初始值0x0。

在该示例实施例中,当并且如果在块内传递的uop的数量超过阈值(例如,小于32并且可编程的阈值),则可以将“假”的所采用分支插入到btb中。该假分支可以在btb内被给予对假分支唯一的分支类型编码,以便不触发虚假(bogus)分支行为。在此,术语“虚假分支”可以指代非分支上的预测的所采用分支,其通常可能由于btb中的别名问题而发生。当检测到虚假分支时,btb中的预测可能是无效的。相比之下,“假分支”指示可以沿着解码流水线向下传递,并且如预测的所采用分支更新所做的那样,btb中的假分支条目可以利用最终uop计数(或者如果最终uop计数超过32则利用值0x0)来注释并且可以包括作为目标地址的下一顺序指令指针。与在用于正常(“实际”)的预测的所采用分支的条目中不同,假分支的分配点可以在指令执行之前(例如,在一些实施例中,在分支地址计算点处)。在一些实施例中,在该第二集群平衡方法的变型中,假分支插入可以被限制为在指令高速缓存中命中的块。在此类实施例中,可以从预测时间到解码流水线的末尾利用块来携带另一条状态。在又一变型中,该集群平衡方法可以通过简单地跟踪最近已经存在指令高速缓存未命中来近似。

在本公开的一些实施例中,通过在平衡包括长基本块(和微代码流)的工作负载时采用假分支,并且通过在btb中采用在其中注释块等待时间的添加字段,分派器与ip生成器可以完全依赖于btb来提供执行具有接近最佳平衡的集群负载平衡所需的信息。

虽然当孤立地考虑时出于集群平衡目的而消耗btb内的条目会负面地影响性能,但是由于长基本块的btb压力低于通常的压力,可能对具有长基本块的工作负载的性能的影响非常小。例如,包括大的处理器的系统可以采用乱序集群化解码以便保持馈送执行核。包括这类处理器的系统通常可以包括接近指令高速缓存的尺寸的btb。例如,btb可以包括大约2k个条目。在此类系统中,每个条目添加几个位在面积或性能方面可能不是显著的。

图23是根据本公开的实施例的用于生成乱序集群化解码的负载平衡触发条件的方法2300的示图。方法2300可以由图1-22所示的任何元件实现。方法2300可以依据任何合适标准启动并且可以在任何合适点处启动操作。在一个实施例中,方法2300可以在2305处启动操作。方法2300可以包括比所示的操作更多或更少的操作。此外,方法2300可以以与下文所示的顺序不同的顺序执行其操作。方法2300可以在任何合适操作处终止。此外,方法2300可以在任何合适操作处重复操作。方法2300可以与方法2300的其他操作并行地或与其他方法的操作并行地执行其任何操作。此外,可以执行方法2300多次以生成用于表示未解码指令块的多个数据元素集合的乱序集群化解码的负载平衡触发条件。方法2300可以在操作期间随时间执行以在解码指令以实现一个或多个应用时生成负载平衡触发条件。基于方法2300的结果,可以调用其他方法,诸如下面描述的方法2700。例如,可以基于方法2300的执行来调用方法2700以解码被引导到特定解码集群的指令信息,并且将结果提供给处理器核后端的执行集群以供执行。

在2305处,在一个实施例中,表示按程序顺序的指令块的未解码指令的指令指针值可以被引导到处理器中的多个解码集群中的一个或多个。在2310处,指令指针值被引导到的一个或多个集群可以解码指令块的未解码指令,并按程序顺序将经解码指令传递到处理器核后端的执行集群,以供后续执行。在2315处,来自执行流水线的一个或多个下游组件的数据,诸如指示由每个解码集群传递到执行集群的或每个块的uop的数量、每个集群或块的解码等待时间、和/或每个块的执行等待时间的数据,可以被提供给指令指针生成器或分支预测器。在2320处,可以确定该数据是否指示满足采取动作来平衡解码集群上的负载的条件。如果否,则不采取负载平衡动作,如2325中那样。如果是,则方法2300在2330处继续。在2330处,可以采取动作以尝试平衡多个解码集群上的负载。在各实施例中,该动作可以包括但不限于,利用可用于确定应该触发或抑制集群切换的元数据来注释btb条目,插入假的btb条目,显式地触发集群切换,或者显式地抑制集群切换。

图24是根据本公开的实施例的用于取决于负载平衡触发条件来执行乱序集群化解码的方法2400的示图。方法2400可以由图1-23所示的任何元件实现。方法2400可以依据任何合适标准启动并且可以在任何合适点处启动操作。在一个实施例中,方法2400可以在2405处启动操作。方法2400可以包括比所示的操作更多或更少的操作。此外,方法2400可以以与下文所示的顺序不同的顺序执行其操作。方法2400可以在任何合适操作处终止。此外,方法2400可以在任何合适操作处重复操作。方法2400可以与方法2400的其他操作并行地或与其他方法的操作并行地执行其任何操作。此外,可以执行方法2400多次以在解码表示未解码指令块的多个数据元素集合时取决于负载平衡触发条件而执行乱序集群化解码。可以在操作期间随时间执行方法2400以解码指令以实现一个或多个应用。基于方法2400的结果,可以调用其他方法,诸如下面描述的方法2700。例如,可以基于方法2400的执行来调用方法2700以解码被引导到特定解码集群的指令信息,并且将结果提供给处理器核后端的执行集群以供执行。

在2405处,在一个实施例中,处理器内的硬件电路或逻辑可以开始生成按程序顺序的表示指令块中的未解码指令的指令指针值流,并将它们引导到处理器中的多个解码集群中的给定的一个。在2410处,如果确定已经从执行流水线的一个或多个下游组件接收到与集群负载有关的反馈,则方法2400在2415处继续。否则,方法2400前进到2420。在2415处,如果确定反馈指示已经满足用于在解码集群之间切换或用于抑制集群切换的触发条件,则方法2400在2430处继续。否则,方法2400前进到2420。

在2420处,如果确定指令块中的指令与分支目标缓冲器(btb)条目相关联,则方法2400在2425处继续。否则,方法2400前进到2435。在2425处,如果确定btb条目指示已经满足用于在解码集群之间切换或用于抑制集群切换的触发条件,则方法2400在2430处继续。否则,方法2400前进到2435。在2430处,表示按程序顺序的下一个指令块中的未解码指令的指令指针值流被引导到给定的解码集群或处理器中的另一个解码集群。下一个块被引导到的解码集群可以取决于触发条件。替代地,在2435处,表示按程序顺序的下一个指令块中的未解码指令的指令指针值流被引导到给定的解码集群。

图25是根据本公开的实施例的示例分支目标缓冲器2500的示图,其中条目利用可用于触发解码集群之间的负载平衡动作的信息来注释。在该示例中,分支目标缓冲器2500配置为存储关于实际的和假的预测的所采用分支的信息。分支目标缓冲器2500包括图25详细示出的至少五个条目。在该示例中,每个条目的第一字段(在列2510中)存储表示分支指令地址的数据,该分支指令地址用于访问该条目。每个条目的另一个字段(在列2520中)存储表示分支指令的预测目标地址的数据,该分支指令的地址由该条目的第一字段中的数据表示。在对应于假预测分支的条目的情况下,诸如对应于图25中的分支地址c和分支地址e的条目,存储在列2520中的数据可以表示按程序顺序的下一指令的地址,而不是预测分支地址。

在该示例实施例中,每个条目的第三字段(在列2530中)存储表示负载平衡权重值的数据。例如,当与一个或多个阈值相比时,该字段中的值可以指示从执行流水线的下游组件接收的数据的相对值,其指示由每个集群传递到处理器核后端或其执行集群的或每个块的uop的数量、每个集群或块的解码等待时间、和/或每个块的执行等待时间。在一个实施例中,该字段中的“高”值可以指示所获得的数据可能超过用于采取特定负载平衡动作(诸如强制集群切换或抑制集群切换)的阈值,该字段中的“低”值可以指示所获得的值小于阈值,低于该阈值可以采取不同的负载平衡动作,并且该字段中的“中”值可以指示基于从执行流水线的下游组件获得的数据不应该采取负载平衡动作。在不同实施例中,每个条目中的第四字段(在列2535中)可以配置为存储表示与对应的预测的所采用分支相关联的一个或多个其他标签的数据。在图25所示的示例中,该字段存储指示对应条目表示实际的预测的所采用分支(示出为“实际”)还是假的预测的所采用分支(示出为“假”)的数据。

一般而言,分支目标缓冲器(诸如分支目标缓冲器2500)中的条目可以利用任何类型的信息来注释,该信息可用于确定是否以及何时切换集群或抑制将以其他方式进行的集群切换,或者偏置关于是否以及何时切换集群或抑制将以其他方式进行的集群切换的决定。在其他实施例中,分支目标缓冲器2500中的每个条目可以包括比图25所示的字段更多、更少或不同的字段。在一些实施例中,可以在目标缓冲器2500中的不同条目内填充不同数量的字段。例如,一些字段可能不适用于某些分支指令编码。在一些实施例中,可以被包括在诸如分支目标缓冲器2500的分支目标缓冲器的每个条目中的信息的类型可以包括表示uop计数、等待时间值、指令高速缓存未命中、指令tlb未命中、或可以指示多个解码集群之间的不平衡的工作负载的任何其他信息的数字数据。在一些实施例中,一个或多个字段中的数据可以表示由集群平衡器、ip生成器或分支预测器基于启发方法计算的加权值,该启发方法是从执行流水线的下游组件、分支预测器、指令高速缓存、指令tlb或其他地方获得的两条或更多条信息的函数。然后可以将这些加权值与一个或多个阈值加权值进行比较,以确定是否以及何时采取特定的负载平衡动作。在一个示例中,当指令tlb未命中发生时,ip生成器可以强制集群切换,以便将同一页面内的指令指针值引导为由同一解码集群解码。

在一个实施例中,被包括在诸如分支目标缓冲器2500的分支目标缓冲器的每个条目中的一个字段中的数据可以显式地指示当遇到对应的分支指令时应该执行集群切换。在特定条件下,ip生成器或集群平衡器可以将值写入该字段以强制集群切换。在另一实施例中,被包括在诸如分支目标缓冲器2500的分支目标缓冲器的每个条目中的一个字段中的数据可以显式地指示当遇到对应的分支指令时将以其他方式执行的集群切换应该替代地被抑制。在特定条件下,ip生成器或集群平衡器可以将值写入该字段以强制抑制集群切换。

图26是根据本公开的实施例的用于聚集指令相关的数据元素以用于并行解码的方法2600的示图。方法2600可以由图1-25所示的任何元件实现。方法2600可以依据任何合适标准启动并且可以在任何合适点处启动操作。在一个实施例中,方法2600可以在2605处启动操作。方法2600可以包括比所示的操作更多或更少的操作。此外,方法2600可以以与下文所示的顺序不同的顺序执行其操作。方法2600可以在任何合适操作处终止。此外,方法2600可以在任何合适操作处重复操作。方法2600可以与方法2600的其他操作并行地或与其他方法的操作并行地执行其任何操作。此外,可以执行方法2600多次以聚集指令信息,以用于针对不同的未解码指令流进行并行解码。可以在操作期间随时间执行方法2600以解码指令以实现一个或多个应用。基于方法2600的结果,可以调用其他方法,诸如下面描述的方法2700。例如,可以调用方法2700以解码由方法2600的执行聚集的指令信息,并且将结果提供给处理器核后端的执行集群以供执行。

在2605处,在一个实施例中,可以在处理器中开始表示按程序顺序的指令序列中的未解码指令的数据元素流的生成。在一个实施例中,数据元素可以包括指令指针值。在另一实施例中,数据元素可以包括处理器的指令集架构(isa)中的指令的编码。在又一实施例中,数据元素可以表示要由处理器解码和/或解释的指令相关的“文本”,以使处理器的isa中的指令被执行。在另一实施例中,数据元素可以是要由处理器解码和/或解释的数据的原始字节,以使处理器的isa中的指令被执行。在一些实施例中,表示未解码指令的数据元素中的每一个可以是相同长度。在其他实施例中,表示未解码指令的数据元素中的至少一些可以具有不同长度。在2610处,可以将数据元素流中的第一数据元素引导到多个解码集群中的第一个。

在一个实施例中,在2615处,可以确定是否已经满足触发切换到另一个解码集群的条件。如果是,则方法2600可以前进到2620。否则,方法2600可以前进到2630。在至少一些实施例中,可以基于集群负载平衡机制的应用由ip生成器生成触发集群切换的检测条件。在不同实施例中,集群负载平衡机制可以是本文描述的集群负载平衡机制中的任一个或另一个集群负载平衡机制。

在2620处,由于满足了集群切换触发条件,因此可以利用指示满足了集群切换触发条件的信息来标记数据元素。例如,在一个实施例中,双态切换位可以被包括在数据元素的编码中,以指示是否已经满足触发切换到另一个解码集群的条件。在该示例中,可以设置被包括在数据元素编码中的双态切换位(例如,设置为值“1”或表示“真”的值)以指示触发切换到另一个解码集群的条件已经满足。然而,在可以由被引导到每个解码集群的字节的数量的计数来触发切换到另一个解码集群的实施例中,如果未解码指令与经解码指令之间存在一对一的对应关系,则可能不需要在数据元素编码中包括这种双态切换位。类似地,在可以由被引导到每个解码集群的未解码指令的数量的计数来触发切换到另一个解码集群的实施例中,如果未解码长度指示伴随每个经解码指令,则可能不需要在数据元素编码中包括这种双态切换位。在另一实施例中,可以修改数据元素中的另一编码的值以指示已经满足触发切换到另一个解码集群的条件。在另一些实施例中,其他机制可以用于标记数据元素以指示已经满足用于集群切换的触发条件。如本文所述,在不同的实施例中,各种触发条件中的任一个可以用于确定何时以及是否切换到不同的解码集群。在一些实施例中,单个标记值(其可以由标志或单个位表示)可以用于指示发生了集群切换。在其他实施例中,取决于触发了集群切换的条件,可以利用不同的值来标记数据元素。例如,在一些实施例中,一个标记值可以指示集群切换由实际的预测的所采用分支触发,并且另一个标记值可以指示集群切换通过在btb中插入假的预测的所采用分支条目来触发。另一些标记值可以指示集群切换是基于uop计数、指令高速缓存未命中的计数、指令tlb未命中的计数、解码等待时间或执行等待时间。

在2625处,按程序顺序的下一个数据元素可以被引导到按预定顺序的下一个解码集群。例如,在仅存在两个解码集群的实施例中,处理器前端的分离组件、ip生成器或集群平衡器可以在每当检测到触发条件时在两者之间双态切换。在存在多于两个解码集群的实施例中,分离组件、ip生成器或集群平衡器可以以循环方式在解码集群之间循环,或者可以基于目标集群id值将数据元素引导到特定解码集群,该目标集群id值与双态切换位一起附连到指令块内的数据元素。在2630处,按程序顺序的下一个数据元素可以被引导到同一解码集群。在任一情况下,该方法可以在2615处继续,并且随着未解码指令继续被接收和解码,操作2615-2630可以被重复一次或多次。在至少一些实施例中,方法2600的操作2605至2630中的一个或多个可以在处理器核的前端中的硬件中执行。

在一些实施例中,为了促进在将经解码指令提供给处理器核后端或其执行集群以供执行之前按程序顺序重新组装它们,可以利用指示该事实的编码来标记与集群切换点对应的经解码指令。在一些实施例中,可以由解码器将双态切换指示符编码到每个经解码指令中,以指示经解码指令是否对应于集群切换点。例如,如果经解码指令对应于集群切换点,则编码在经解码指令中的单个双态切换位的值可以被设置为“1”,并且如果经解码指令不对应于集群切换点,则其可以被设置为“0”。

在至少一些实施例中,当按程序顺序重新组装经解码指令时,合并组件可以从解码集群中的每一个的相应输出队列接收(或检取)经解码指令(uop),并且可以按uop将被包括在经解码指令流中的顺序,其至少部分地基于与uop中的每一个相关联的双态切换指示符的状态。例如,在处理器核在其执行流水线中具有三宽度分配/重命名级的实施例中,合并组件可以从输出队列中的每一个接收(或检取)三个经解码指令(uop)并且可以选择uop中的三个以被包括在经解码指令流中的第一经解码指令分组中。合并组件可以将按程序顺序的第一可用uop放置在将被提供给核以供执行的uop分组中的第一位置中。合并组件可以继续放置从其中选择了第一可用uop的输出队列中选择的连续的uop,直到其遇到双态切换位被设置的uop或者直到三个uop已经被组装以呈现给核。如果在组装三个uop之前遇到双态切换位被设置的uop,则合并组件可以切换到按预定顺序(例如,当检测到集群切换条件时填充解码集群的同一顺序)的下一个输出队列来为经解码指令分组选择一个或多个附加的uop。在一些实施例中,如果在切换到另一个输出队列之后遇到双态切换位被设置的另一个uop,则合并组件可以再次切换来为经解码指令分组选择一个或多个附加的uop。在其他实施例中,在单个经解码指令分组的组装期间,可以仅支持一次输出队列切换。在此类实施例中,合并组件可以利用来自输出队列的紧跟着双态切换位被设置的uop的uop来填充经解码指令分组,并且可以将这些uop标记为无效的。

在其他实施例中,合并组件可以使用关于uop的其他机制或信息从多个解码集群的相应输出队列中选择uop。在一些实施例中,合并组件可以使其对uop的选择和排序基于编码在uop中的其他信息。例如,每个uop可以利用其新旧度的指示来被编码,并且合并组件可以基于它们的新旧度从输出队列中选择uop,并且按新旧度将它们放置在经解码指令的每个分组中。

图27是根据本公开的实施例的用于对指令相关的数据元素的乱序子集解码并且合并结果以将有序的uop的集合提供给处理器核后端的执行集群以供执行的方法2700的示图。方法2700可以由图1-26所示的任何元件实现。方法2700可以依据任何合适标准启动并且可以在任何合适点处启动操作。在一个实施例中,方法2700可以在2705处启动操作。方法2700可以包括比所示的操作更多或更少的操作。此外,方法2700可以以与下文所示的顺序不同的顺序执行其操作。方法2700可以在任何合适操作处终止。此外,方法2700可以在任何合适操作处重复操作。方法2700可以与方法2700的其他操作并行地或与其他方法的操作并行地执行其任何操作。此外,可以执行方法2700多次以解码不同的未解码指令流的指令相关的数据元素的乱序子集、合并结果、并且将它们提供给处理器核后端的执行集群以供执行。可以在操作期间随时间执行方法2700以解码、合并和/或将指令提供给处理器核后端的执行集群以实现一个或多个应用。可以基于上文描述的方法2100、2300、2400或2600中的任一个的结果来调用方法2700。例如,可以调用方法2700以解码由方法2100、方法2300、方法2400或方法2600的执行聚集的指令信息,并且将结果提供给处理器核后端的执行集群以供执行。

在2705处,在一个实施例中,表示按程序顺序的程序指令序列的数据元素流的交替子集可以被引导到处理器中的两个解码集群。在2710处,两个解码集群中的每一个可以一次解码数据元素中的一个或多个,并且可以将多个有序uop组输出到队列。每个uop组可以对应于数据元素的子集中的一个。在至少一些实施例中,一旦数据元素中的至少一些已经被解码,合并组件就可以开始组装一组uop,以便按照与来自队列中的每一个的程序顺序对应的顺序执行。例如,在2715处,合并组件可以从队列中的每一个中接收(或检取)多个uop。在一个实施例中,合并组件从每个解码集群的输出队列接收(或检取)的uop的数量可以等于处理器核后端中的执行流水线的分配/重命名级的宽度。在经解码指令分组中的从呈现给处理器核后端的执行集群的那些uop中选择的uop的数量也可以等于处理器核后端中的执行流水线的分配/重命名级的宽度。

在2720处,合并组件可以标识队列中的一个中的要被执行的下一个uop(按程序顺序),并且可以将其包括在要被引导到处理器核后端的执行集群以供执行的uop组中。在一个实施例中,在2725处,可以确定uop组是否完整。如果是,则方法2700可以前进到2730。否则,方法2700可以前进到2735。在2730处,合并组件可以将组装的uop组提供给执行集群以供执行。

在一个实施例中,在2735处,可以确定最近添加的uop是否设置了其双态切换指示符。如果是,则方法2700可以前进到2745。否则,方法2700可以前进到2740。在2745处,合并组件可以从与从其中检取了最近添加的uop的队列不同的队列中标识下一个uop(按程序顺序),并且可以将其添加到要被引导到处理器核后端的执行集群以供执行的uop组。在2740处,合并组件可以从与从其中检取了最近添加的uop的队列相同的队列中标识下一个uop(按程序顺序),并且可以将其添加到要被引导到执行集群以供执行的uop组。

可以适当地重复示出为2725-2745的操作一次或多次,直到uop组是完整的并且已经被提供给处理器核后端的执行集群以供执行。如从操作2730到操作2715的虚线所示,可以适当地重复操作2715到2745任何次数,因为数据元素继续由两个解码集群解码,并且所得的uop被引导到对应的队列以供合并组件检取。在至少一些实施例中,方法2700的操作2705至2745中的一个或多个可以在处理器核的前端中的硬件中执行。

图28a-28d示出根据本公开的实施例的乱序集群化解码的应用的示例。更具体地,图28a示出处理器内的表示按程序顺序的未解码指令序列的数据元素的队列2810。在该示例中,队列2810包括相关数据元素a0-a5的第一序列。在一个实施例中,这些数据元素可以共同表示单个指令。在另一实施例中,这些数据元素可以共同表示按程序顺序的两个或更多个指令的序列。在该示例中,数据元素a0和a5可以表示指令序列中的指令边界。例如,数据元素a0可以是与指令相关联的第一数据元素,并且数据元素a5可以是与指令相关联的最后数据元素(与同数据元素a0相关联的指令相同的指令或不同的指令)。在该示例中,数据元素a5表示预测的所采用分支指令或标识预测的所采用分支的指令指针值。

在该示例中,队列2810包括相关数据元素b0-b4的第二序列。在一个实施例中,这些数据元素可以共同表示单个指令。在另一实施例中,这些数据元素可以共同表示按程序顺序的两个或更多个指令的序列。在该示例中,数据元素b0和b3可以表示指令序列中的指令边界。例如,数据元素b0可以是与指令相关联的第一数据元素,并且数据元素b3可以是与指令相关联的最后数据元素(与同数据元素b0相关联的指令相同的指令或不同的指令)。在该示例中,数据元素b4表示假的预测的所采用分支指令或表示假的预测的所采用分支的指令指针值,其基于集群负载平衡机制(诸如本文描述的机制中的任一个)的应用而在数据元素b3处的指令边界之后被插入。

在该示例中,队列2810包括相关数据元素c0-c3的第三序列。在一个实施例中,这些数据元素可以共同表示单个指令。在另一实施例中,这些数据元素可以共同表示按程序顺序的两个或更多个指令的序列。在该示例中,数据元素c0和c3可以表示指令序列中的指令边界。例如,数据元素c0可以是与指令相关联的第一数据元素,并且数据元素c3可以是与指令相关联的最后数据元素(与同数据元素c0相关联的指令相同的指令或不同的指令)。在该示例中,数据元素c0-c3中没有一个表示实际的或假的预测的所采用分支指令或表示实际的或假的预测的所采用分支的指令指针值,数据元素c0-c3中的任一个也不与任何其他触发条件或应该在其执行之后执行或抑制集群切换的指示相关联。

在该示例中,队列2810包括相关数据元素d0-d3的第四序列。在一个实施例中,这些数据元素可以共同表示单个指令。在另一实施例中,这些数据元素可以共同表示按程序顺序的两个或更多个指令的序列。在该示例中,数据元素d0和d3可以表示指令序列中的指令边界。例如,数据元素d0可以是与指令相关联的第一数据元素,并且数据元素d3可以是与指令相关联的最后数据元素(与同数据元素d0相关联的指令相同的指令或不同的指令)。在该示例中,数据元素d3已经被注释了指示关于负载平衡的相关数据元素d0-d3的序列的高权重的值。例如,该数据元素或由数据元素d0-d3表示的指令块可以与大的uop计数或长的解码等待时间相关联,并且注释可以反映该状况。

在该示例中,队列2810还包括相关数据元素的第五序列,其一部分被示出为e0-e2。在一个实施例中,这些数据元素和未示出的其他数据元素可以共同表示单个指令。在另一实施例中,这些数据元素和未示出的其他元素可以共同表示按程序顺序的两个或更多个指令的序列。在该示例中,数据元素e0可以表示指令序列中的指令边界。例如,数据元素e0可以是与指令相关联的第一数据元素。数据元素e2和e3可以与同数据元素e0相关联的指令相同的指令相关联,或者可以与同数据元素e0相关联的指令不同的指令相关联。在该示例中,数据元素e0-e2中没有一个表示实际的或假的预测的所采用分支指令或表示实际的或假的预测的所采用分支的指令指针值。

在该示例中,在队列2810中示出的按程序顺序的数据元素被引导到处理器的前端中的两个解码集群以供乱序集群化解码。在一个实施例中,可以以与图26中所示和本文描述的方式类似的方式来执行队列2810中的数据元素的分离。在另一实施例中,可以由分离组件、ip生成器或集群平衡器应用不同的机制和/或不同的集群切换触发条件,以将队列2810中的数据元素引导到两个解码集群以供乱序集群化解码。

图28b示出在队列2810中的数据元素的子集已经由处理器的前端的分离组件、ip生成器或集群平衡器引导到这些缓冲器之后的用于第一解码集群的预取缓冲器2820和用于第二解码集群的预取缓冲器2825。在该示例中,分离组件、ip生成器或集群平衡器已经将数据元素的第一子集(示出为a0-a5)引导到用于第一解码集群的预取缓冲器2820。由于数据元素a5表示预测的所采用分支指令或标识预测的所采用分支的指令指针值,因此分离组件、ip生成器或集群平衡器切换到第二解码集群。因此,数据元素的第二子集(示出为b0-b4)被引导到用于第二解码集群的预取缓冲器2825。由于数据元素b4表示假的预测的所采用分支指令或表示假的预测的所采用分支的指令指针值,因此分离组件、ip生成器或集群平衡器切换回第一解码集群。因此,数据元素的第三子集(示出为c0-c3)被引导到用于第一解码集群的预取缓冲器2820。由于数据元素c3不表示实际的或假的预测的所采用分支指令或表示实际的或假的预测的所采用分支的指令指针值,也不与任何其他触发条件或在其执行之后应该执行或抑制集群切换的指示相关联,因此分离组件、ip生成器或集群平衡器不切换解码集群,而是将数据元素的第四子集(示出为d0-d3)引导到用于第一解码集群的预取缓冲器2820。最后,由于数据元素d3已经注释了指示关于负载平衡的相关数据元素d0-d3的序列的高权重的值,因此分离组件、ip生成器或集群平衡器再次切换到第二解码集群,并且至少示出为e0-e2的数据元素的第五子集的部分被引导到用于第二解码集群的预取缓冲器2825。

在该示例中,处理器中的两个解码集群基本上并行地对已经被引导到其相应预取缓冲器(2820和2825)的数据元素进行解码。在至少一些实施例中,与表示实际的或假的预测的所采用分支指令或表示实际的或假的预测的所采用分支的指令指针值的数据元素、或注释了关于负载平衡的高加权值的数据元素对应的经解码指令(uop),可以利用在它们被引导到解码集群中的一个之后发生的集群切换的指示来标记。在该示例中,与数据元素a5、b4和/或d3相关联的经解码指令(uop)中的每一个可以利用这种指示来标记。在该示例中,可以设置被包括在数据元素编码中的双态切换位(例如,设置为值“1”或表示“真”的值)以指示满足了触发切换到另一个解码集群的条件并且集群切换由分离组件、ip生成器或集群平衡器执行。在其他实施例中,其他机制可以用于标记各种数据元素以指示满足了用于集群切换的触发条件。在一些实施例中,解码集群中的每一个可以包括用于对其预取缓冲器中的数据元素中的多个数据元素并行地解码的硬件电路或逻辑。例如,在不同的实施例中,解码集群中的每一个可以执行两宽度解码或n宽度解码(其中n是3或更大)。

图28c示出由第一解码集群为预取缓冲器2820中的数据元素中的一些输出的经解码指令(uop)的队列2830和由第二解码集群为预取缓冲器2825中的数据元素中的一些输出的经解码指令(uop)的队列2835。在一些实施例中,队列2830和2835可以存储由合并组件接收(或检取)的经解码指令(uop),以用于可能包含在指令缓冲器2840中,如下文描述的。在该示例中,因为要向其提供经解码指令的处理器核后端包括三宽度分配器/重命名器,所以合并组件可以在每个周期从预取缓冲器(2820和2825)中的每一个接收(或检取)接下来的三个经解码指令(uop),以用于可能包含在指令缓冲器2840中。

图28d示出指令缓冲器2840,其存储在合并组件对这些经解码指令(uop)的选择和重新排序之后要呈现给处理器核后端中的分配器或重命名级的经解码指令。在至少一些实施例中,对经解码指令(uop)的合并可以由合并组件以与图27所示和本文所描述的方式类似的方式执行。在另一实施例中,合并组件可以采用不同的机制和/或不同的集群切换指示来选择要包括在指令缓冲器2840中的经解码指令(uop)。

在该示例中,合并组件已经将队列2830的第一元素标识为包含要执行的下一经解码指令(示出为对应于数据元素a4的uop)并且已经将其添加到指令缓冲器2840。由于该元素不包括被设置的双态切换位,因此合并组件将队列2830的第二元素(示出为对应于数据元素a5的uop)添加到指令缓冲器2840。然而,由于队列2830的第二元素(示出为对应于数据元素a5的uop)包括被设置的双态切换位,因此合并组件不将该元素添加到指令缓冲器2840。替代地,合并组件标识队列2835中的第一个未执行(经解码)指令(示出为数据元素b0的uop)并将该元素添加到指令缓冲器2840。

在该示例中,在将指令缓冲器2840的内容提供给处理器核后端之后,用于各种队列条目的存储可以被解除分配,并且它们的指针可以前进。随后,合并组件可以以类似的方式开始组装下一组四个经解码指令(uop),从对应于数据元素b1的经解码指令(uop)开始。

在一些实施例中,在由解码集群解码的数据元素与作为解码的结果而生成的uop之间可能不存在一对一的映射。在一个示例中,数据元素可以被解码为三个uop。在本公开的至少一些实施例中,这三个uop可以被放置在解码集群的输出队列中,该解码集群按它们应该被执行的顺序执行了解码。如果集群切换触发条件与未解码的数据元素相关联,则输出队列中的三个uop中的最后一个可以利用双态切换指示符来标记。

在至少一些实施例中,本文描述的用于乱序集群化解码的系统和方法可以提供对现有系统的前端级的改进。例如,虽然指令高速缓存必须与存储器格式对齐地建立,但是代码块可以在任意边界处(在一些isa中)开始和结束。在现有系统中,馈送宽解码流水线所需的连续字节越多,每个周期必须从指令高速缓存读取的字节越多。给定任意的起始点和结束点,连续读取越宽,阵列读取变得越低效,因为浪费的数据量增加并且阵列的花费增加。例如,利用固定的4字节指令的6宽度解码器需要24b的连续数据。如果指令高速缓存配置为读取对齐的32b,除了潜在地浪费25%的数据之外,32b中可能只有4b是有用的。为了保证24个连续字节,该阵列必须支持4b边界上的不对齐读取。虽然可以进行分区以支持这一点,但是可能仍然存在读取越过高速缓存行边界的问题。

然而,在一些实施例中,通过建立集群化取出和解码机制,诸如本文所描述的那些,由宽的取出引起的低效可以被减少超过一半。利用集群化解码,连续指令高速缓存读取的要求可能比现有系统中的低50%,同时每次访问提供更多有用的字节。使用本文描述的机制,假设不对齐的基于24b的指令高速缓存读取利用对齐的16b子阵列的区块被物理地建立,同一拓扑可以用于读取两个独立的指令流。

在至少一些实施例中,在轮转(rotate)原始数据以对齐后续的解码逻辑的正确指令边界的上下文中,通过解码集群化,可以相对于现有系统的前端级改善本文描述的系统的前端级。例如,宽解码(即使在固定长度指令集中)需要轮转过程以将存储器格式化指令高速缓存数据与解码边界的起点对齐,以便从解码器实现每个周期的全带宽。随着轮转变长,逻辑的定时要求增加。例如,在32位固定长度isa中对齐来自存储器对齐的32b高速缓存读取的第一个字节需要8选1复用器,而在16b读取时这样做只需要4选1复用器。8选1复用器的要求包括串行更长的数据路径,并且对复用器的控制也具有贯穿该级的更高的负载。如本文所描述的,通过使用乱序解码集群化将其分解为并行的16b独立流,虽然逻辑门的总数可能不会更低,但是可以减少定时要求。在具有非固定长度isa的一些现有系统中,为每个指令解码对齐数据以及理解用于下一个周期的第一个字节的位置也会存在问题。该问题实质上是“找到第n个”的问题,其中每个后续值n需要越来越多的逻辑深度来计算。在这些现有系统中,即使字节已经被预先标记了指令边界,简单地处理这些标记也会产生串行依赖关系链。如本文所述,利用集群化解码,每个集群上的负载可以仅表示总数的一部分。例如,代替需要用于最多“找到6”的电路,两个解码集群可以各自包括用于“找到3”操作的电路。在一些实施例中,由于该操作必须在单个周期中执行,因此该方法可以导致在一些处理器中消除共同的关键路径。

在至少一些实施例中,代替在预测的所采用分支处停止解码流,本文描述的系统和方法可以允许处理器在同一周期中越过预测的所采用分支而解码。例如,利用集群化解码,可以在比在现有系统中更高的级别复制解码逻辑。这可以允许每个解码集群将它接收的每个数据元素块处置为连续数据元素,同时提供解码与解码集群一样多的非连续区域的能力。在一个示例中,三指令基本块的流可以仅在具有经解码uop高速缓存或跟踪高速缓存的机器中运行高于3.0每周期指令(ipc)。在一些情况下,流可以循环,从而允许应用循环流送检测器。然而,在一些实施例中,包括两个两宽度解码集群的处理器可以以峰值效率工作并且每个周期完全传递4个指令。

在一些系统中,一些指令比其他指令更复杂,并且它们不能由系统中的每个解码器提供。例如,一些指令需要与特定解码器(解码器0,例如,在某些微架构中)对齐,而其他指令需要转换为微代码。在本文描述的包括集群化解码的系统的一些实施例中,可以使与这些低效率相关联的损失并行化。例如,可以使需要多个解码器0对齐的基本块并行化,使得可以在同一周期中寻址需要解码器0的多个特定指令,同时降低由于这些要求而不能消耗的浪费的解码时隙。在本公开的一些实施例中,对于具有到微代码的跳转的指令流,也可以使对这些微代码流的检测并行化。在一些实施例中,可以乱序地服务某些短的微代码流。一般而言,如本文所描述,集群化解码可以减少或者甚至消除与微代码流相关联的进入和/或退出损失。例如,在一个微架构中,已经观察到若干大于+15%的正性能增益,这具体地是由于集群化解码器在包含重复的到微代码中的跳转的高ipc代码中增加微代码定序器的利用率的能力。

在不同的实施例中,本文描述的用于执行乱序集群化解码的技术可以应用于各种处理器架构中的任一个。然而,具有非固定长度isa的系统可以比具有固定长度isa的系统实现更多性能增益。利用该方法,处理器前端的设计可以通过大块复制缩放到任何期望的宽度,而无需实现单片宽度增加或添加经解码uop高速缓存通常要求的大量设计修改和定时收敛要求。例如,在一个实施例中,通过使解码流水线的设计参数化,可以将其编译为包括多个两宽度解码集群或多个n宽度解码集群(其中n是3或更多)。利用该相同的基本设计,可以快速实现处理器前端,其支持2宽度(一个解码集群)、3宽度(一个解码集群)、4宽度(两个解码集群,每个解码集群为2宽度)和6宽度(两个解码集群,每个解码集群为3宽度)的总解码带宽,对先前的定时关键单周期循环影响很小到没有影响。此外,在仅微小修改的情况下,可以使用该方法来实现最多12宽度解码带宽。在至少一些实施例中,可以根据需要使由该缩放产生的任何定时影响流水线化以满足频率要求。

如此处详细描述的,用于执行乱序集群化解码的系统和方法可以解决与宽指令取出和解码有关的问题,特别是在非固定长度架构中。例如,这些系统可以将乱序技术应用于指令取出和解码,以去除现有系统中的许多最有问题的串行依赖关系。在本公开的至少一些实施例中,该方法可以在单线程上下文内通过并行性来实现与传统宽度增加可比的增加的解码带宽,同时提供传统缩放不能提供的效率益处。集群负载平衡机制的实现,诸如本文所描述的那些机制,可以改善解码并行性,并且因此改善工作负载的性能,否则在该工作负载中指令块的指令指针值将以不平衡的方式被引导到解码集群。

本文中所公开的机制的实施例可被实现在硬件、软件、固件或此类实现方式的组合中。本公开的一些实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。

可将程序代码应用于输入指令以执行本文描述的功能并产生输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统可以包括具有诸如例如数字信号处理器(dsp)、微控制器、专用集成电路(asic)或微处理器之类的处理器的任何系统。

程序代码可以用高级过程编程语言或面向对象的编程语言来实现,以便与处理系统通信。如果需要,也可用汇编语言或机器语言来实现程序代码。事实上,本文中所描述的机制不限于任何特定的编程语言的范围。在任何情况下,该语言可以是编译语言或解释语言。

至少一个实施例的一个或多个方面可由存储在机器可读介质上的表示处理器中的各种逻辑的表示性指令来实现,该表示性指令在由机器读取时使得该机器制造用于执行本文中所描述的技术的逻辑。被称为“ip核”的这些表示可以被存储在有形的机器可读介质上,并被提供给多个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。

此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非瞬态的有形安排,其包括存储介质,诸如:硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(cd-rom)、紧致盘可重写(cd-rw)以及磁光盘;半导体器件,例如只读存储器(rom)、诸如动态随机存取存储器(dram)和静态随机存取存储器(sram)之类的随机存取存储器(ram)、可擦除可编程只读存储器(eprom)、闪存、电可擦除可编程只读存储器(eeprom);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。

因此,本公开的各实施例还可包括非暂态有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(hdl),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。此类实施例也可被称为程序产品。

在一些情况下,指令转换器可用来将指令从源指令集转换至目标指令集。例如,指令转换器可以将指令变换(例如使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其他方式转换成要由核来处理的一个或多个其他指令。指令转换器可以用软件、硬件、固件、或其组合来实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。

因此,公开了用于执行根据至少一个实施例的一条或多条指令的技术。虽然已经描述并在附图中示出了某些示例性实施例,但是应当理解,此类实施例仅仅是对其他实施例的说明而非限制,并且这些实施例不限于所示出和所描述的特定结构和配置,因为本领域技术人员在研究了本公开文本之后可以料知到各种其他修改。在诸如本申请这样的、发展迅速且进一步的进展难以预见的技术领域中,所公开的多个实施例在通过启用技术进步所促成的配置和细节上是容易修改的,同时不背离本公开的原理和所附权利要求书的范围。

本公开的一些实施例包括一种处理器。在这些实施例中的至少一些中,处理器可以包括:执行集群,包括一个或多个执行单元,用于执行经解码指令;以及第一和第二解码集群,各自包括一个或多个解码器。处理器还可以包括:用于接收多个数据元素的电路,多个数据元素各自表示按程序顺序的程序的未解码指令的有序序列中的未解码指令;以及用于将多个数据元素的第一子集引导到第一解码集群的电路,数据元素的第一子集中的数据元素将按程序顺序。第一解码集群可以包括用于解码数据元素的第一子集以生成经解码指令的第一子集的电路。处理器还可以包括用于以下操作的电路:检测指示特定集群负载平衡动作将被采取的条件;采取特定集群负载平衡动作;取决于所采取的特定集群负载平衡动作,确定按程序顺序紧跟着数据元素的第一子集的多个数据元素的第二子集将被引导到第一解码集群还是第二解码集群;以及将数据元素的第二子集引导到第一和第二解码集群中的所确定的一个,数据元素的第二子集中的数据元素将按程序顺序。解码集群中的所确定的一个可以包括用于解码数据元素的第二子集以生成经解码指令的第二子集的电路。处理器还可以包括用于按程序顺序将经解码指令的第一和第二子集提供给执行集群以供执行的电路。结合以上实施例中的任一个,处理器可以进一步包括分支目标缓冲器,并且为了检测指示特定集群负载平衡动作将被采取的条件,处理器可以进一步包括用于以下操作的电路:检测分支目标缓冲器中的与数据元素的第一子集相关联的条目可以包括其值指示负载平衡触发条件的注释。在以上实施例中的任一个中,注释可以表示负载平衡权重值,负载平衡权重值取决于由第一解码集群或第二解码集群生成的经解码指令的计数,或者对第一解码集群或第二解码集群观察到的解码等待时间。为了检测指示特定集群负载平衡动作将被采取的条件,处理器可以进一步包括用于以下操作的电路:确定负载平衡权重值超过用于触发特定集群负载平衡动作的执行的阈值。在以上实施例中的任一个中,分支目标缓冲器中的与数据元素的第一子集相关联的条目是表示被插入到分支目标缓冲器中的假的预测的所采用分支的条目,并且注释可以包括条目表示假的预测的所采用分支而不是实际的预测的所采用分支的指示。结合以上实施例中的任一个,处理器可以进一步包括分支目标缓冲器,并且特定集群负载平衡动作可以包括用于将表示假的预测的所采用分支的条目插入到分支目标缓冲器中的操作。在以上实施例中的任一个中,特定集群负载平衡动作可以包括用于强制集群切换的操作,并且处理器可以进一步包括用于以下操作的电路:响应于用于强制集群切换的操作的执行,将数据元素的第二子集引导到第二解码集群。在以上实施例中的任一个中,特定集群负载平衡动作可以包括用于抑制集群切换的操作,并且处理器可以进一步包括用于以下操作的电路:响应于用于抑制集群切换的操作的执行,将数据元素的第二子集引导到第一解码集群。结合以上实施例中的任一个,处理器可以进一步包括:第一队列,与第一解码集群相关联,第一队列用于保存表示将由第一解码集群解码的未解码指令或由第一解码器生成的经解码指令的数据;以及第二队列,与第二解码集群相关联,第二队列用于保存表示将由第二解码集群解码的未解码指令或由第二解码器生成的经解码指令的数据。为了检测指示特定集群负载平衡动作将被采取的条件,处理器可以进一步包括用于以下操作的电路:从第一队列接收指示第一队列的状态的数据;从第二队列接收指示第二队列的状态的数据;以及将第一队列的状态与第二队列的状态进行比较。结合以上实施例中的任一个,处理器可以进一步包括:第一输出队列,与第一解码集群相关联;以及第二输出队列,与第二解码集群相关联。第一解码集群可以进一步包括用于以下操作的电路:将经解码指令的第一子集存储在第一输出队列中。第二解码集群可以包括用于以下操作的电路:解码数据元素的第二子集以生成经解码指令的第二子集;以及将经解码指令的第二子集存储在第二输出队列中。为了将经解码指令的第一和第二子集按程序顺序提供给执行集群以供执行,处理器可以进一步包括用于以下操作的电路:合并存储在第一输出队列中的经解码指令的至少子集和存储在第二输出队列中的经解码指令的至少子集以生成按程序顺序的经解码指令序列。

本公开的一些实施例包括一种方法。在这些实施例中的至少一些中,方法可以包括,在处理器中:接收多个数据元素,多个数据元素各自表示按程序顺序的程序的未解码指令的有序序列中的未解码指令;将多个数据元素的第一子集引导到处理器中的第一解码集群,数据元素的第一子集中的数据元素按程序顺序;由第一解码集群解码数据元素的第一子集以生成经解码指令的第一子集;检测指示特定集群负载平衡动作将被采取的触发条件;采取特定集群负载平衡动作;取决于所采取的特定集群负载平衡动作,确定按程序顺序紧跟着数据元素的第一子集的多个数据元素的第二子集将被引导到处理器中的第一解码集群还是第二解码集群;将数据元素的第二子集引导到第一和第二解码集群中的所确定的一个,数据元素的第二子集中的数据元素按程序顺序;由解码集群中的所确定的一个解码数据元素的第二子集以生成经解码指令的第二子集;以及按程序顺序将经解码指令的第一和第二子集提供给处理器的执行集群以供执行。在以上实施例中的任一个中,检测指示特定集群负载平衡动作将被采取的触发条件可以包括:检测分支目标缓冲器中的与数据元素的第一子集相关联的条目可以包括其值指示负载平衡触发条件的注释。在以上实施例中的任一个中,注释可以表示负载平衡权重值,负载平衡权重值取决于由第一解码集群或第二解码集群生成的经解码指令的计数,或者对第一解码集群或第二解码集群观察到的解码等待时间;以及检测指示特定集群负载平衡动作将被采取的触发条件可以包括:确定负载平衡权重值超过用于触发特定集群负载平衡动作的执行的阈值。在以上实施例中的任一个中,分支目标缓冲器中的与数据元素的第一子集相关联的条目是表示被插入到分支目标缓冲器中的假的预测的所采用分支的条目,并且注释可以包括条目表示假的预测的所采用分支而不是实际的预测的所采用分支的指示。在以上实施例中的任一个中,特定集群负载平衡动作可以包括用于将表示假的预测的所采用分支的条目插入到分支目标缓冲器中的操作。在以上实施例中的任一个中,特定集群负载平衡动作可以包括用于强制集群切换或抑制集群切换的操作。在以上实施例中的任一个中,特定集群负载平衡动作可以包括用于强制集群切换的操作,并且方法可以包括:响应于用于强制集群切换的操作的执行,将数据元素的第二子集引导到第二解码集群。在以上实施例中的任一个中,特定集群负载平衡动作可以包括用于抑制集群切换的操作,并且方法可以进一步包括:响应于用于抑制集群切换的操作的执行,将数据元素的第二子集引导到第一解码集群。在以上实施例中的任一个中,检测指示特定集群负载平衡动作将被采取的触发条件可以包括:从与第一解码集群相关联并且保存表示将由第一解码集群解码的未解码指令或由第一解码器生成的经解码指令的数据的第一队列,接收指示第一队列的状态的数据;从与第二解码集群相关联并且保存表示将由第二解码集群解码的未解码指令或由第二解码器生成的经解码指令的数据的第二队列,接收指示第二队列的状态的数据;以及将第一队列的状态与第二队列的状态进行比较。结合以上实施例中的任一个,方法可以进一步包括:将经解码指令的第一子集存储在与第一解码集群相关联的第一输出队列中;由第二解码集群解码数据元素的第二子集以生成经解码指令的第二子集;以及将经解码指令的第二子集存储在与第二解码集群相关联的第二输出队列中。将经解码指令的第一和第二子集按程序顺序提供给处理器的执行集群以供执行可以包括:合并存储在第一输出队列中的经解码指令的至少子集和存储在第二输出队列中的经解码指令的至少子集以生成按程序顺序的经解码指令序列。

本公开的一些实施例包括一种系统。在这些实施例中的至少一些中,系统可以包括:执行集群,包括一个或多个执行单元,用于执行经解码指令;以及第一和第二解码集群,各自包括一个或多个解码器。系统还可以包括用于以下操作的电路:接收多个数据元素,多个数据元素各自表示按程序顺序的程序的未解码指令的有序序列中的未解码指令;以及将多个数据元素的第一子集引导到第一解码集群,数据元素的第一子集中的数据元素将按程序顺序。第一解码集群可以包括用于解码数据元素的第一子集以生成经解码指令的第一子集的电路。系统还可以包括用于以下操作的电路:检测指示特定集群负载平衡动作将被采取的条件;采取特定集群负载平衡动作;取决于所采取的特定集群负载平衡动作,确定按程序顺序紧跟着数据元素的第一子集的多个数据元素的第二子集将被引导到第一解码集群还是第二解码集群;以及将数据元素的第二子集引导到第一和第二解码集群中的所确定的一个,数据元素的第二子集中的数据元素将按程序顺序。解码集群中的所确定的一个可以包括用于解码数据元素的第二子集以生成经解码指令的第二子集的电路。系统还可以包括用于按程序顺序将经解码指令的第一和第二子集提供给执行集群以供执行的电路。结合以上实施例中的任一个,系统可以进一步包括分支目标缓冲器,并且为了检测指示特定集群负载平衡动作将被采取的条件,系统可以进一步包括用于以下操作的电路:检测分支目标缓冲器中的与数据元素的第一子集相关联的条目可以包括其值指示负载平衡触发条件的注释。在以上实施例中的任一个中,注释可以表示负载平衡权重值,负载平衡权重值将取决于由第一解码集群或第二解码集群生成的经解码指令的计数,或者对第一解码集群或第二解码集群观察到的解码等待时间;以及为了检测指示特定集群负载平衡动作将被采取的条件,系统可以进一步包括用于以下操作的电路:确定负载平衡权重值超过用于触发特定集群负载平衡动作的执行的阈值。在以上实施例中的任一个中,分支目标缓冲器中的与数据元素的第一子集相关联的条目是表示被插入到分支目标缓冲器中的假的预测的所采用分支的条目,并且注释可以包括条目表示假的预测的所采用分支而不是实际的预测的所采用分支的指示。在以上实施例中的任一个中,系统可以进一步包括分支目标缓冲器,并且特定集群负载平衡动作可以包括用于将表示假的预测的所采用分支的条目插入到分支目标缓冲器中的操作。在以上实施例中的任一个中,特定集群负载平衡动作可以包括用于强制集群切换或抑制集群切换的操作,并且系统可以进一步包括用于以下操作的电路:响应于用于强制集群切换的操作的执行,将数据元素的第二子集引导到第二解码集群,以及响应于用于抑制集群切换的操作的执行,将数据元素的第二子集引导到第一解码集群。结合以上实施例中的任一个,系统可以进一步包括:第一队列,与第一解码集群相关联,第一队列用于保存表示将由第一解码集群解码的未解码指令或由第一解码器生成的经解码指令的数据;以及第二队列,与第二解码集群相关联,第二队列用于保存表示将由第二解码集群解码的未解码指令或由第二解码器生成的经解码指令的数据。为了检测指示特定集群负载平衡动作将被采取的条件,系统可以进一步包括用于以下操作的电路:从第一队列接收指示第一队列的状态的数据;从第二队列接收指示第二队列的状态的数据;以及将第一队列的状态与第二队列的状态进行比较。结合以上实施例中的任一个,系统可以进一步包括:第一输出队列,与第一解码集群相关联;以及第二输出队列,与第二解码集群相关联。第一解码集群可以进一步包括用于以下操作的电路:将经解码指令的第一子集存储在第一输出队列中。第二解码集群可以包括用于以下操作的电路:解码数据元素的第二子集以生成经解码指令的第二子集;以及将经解码指令的第二子集存储在第二输出队列中。为了将经解码指令的第一和第二子集按程序顺序提供给执行集群以供执行,系统可以进一步包括用于以下操作的电路:合并存储在第一输出队列中的经解码指令的至少子集和存储在第二输出队列中的经解码指令的至少子集以生成按程序顺序的经解码指令序列。

本公开的一些实施例包括一种设备。在这些实施例中的至少一些中,设备可以包括:用于接收多个数据元素的装置,多个数据元素各自表示按程序顺序的程序的未解码指令的有序序列中的未解码指令;用于将多个数据元素的第一子集引导到处理器中的第一解码集群的装置,数据元素的第一子集中的数据元素按程序顺序;用于由第一解码集群解码数据元素的第一子集以生成经解码指令的第一子集的装置;用于检测指示特定集群负载平衡动作将被采取的触发条件的装置;用于采取特定集群负载平衡动作的装置;用于取决于所采取的特定集群负载平衡动作而确定按程序顺序紧跟着数据元素的第一子集的多个数据元素的第二子集将被引导到处理器中的第一解码集群还是第二解码集群的装置;用于将数据元素的第二子集引导到第一和第二解码集群中的所确定的一个的装置,数据元素的第二子集中的数据元素按程序顺序;用于由解码集群中的所确定的一个解码数据元素的第二子集以生成经解码指令的第二子集的装置;以及用于按程序顺序将经解码指令的第一和第二子集提供给处理器的执行集群以供执行的装置。结合以上实施例中的任一个,用于检测指示特定集群负载平衡动作将被采取的触发条件的装置可以包括:用于检测分支目标缓冲器中的与数据元素的第一子集相关联的条目可以包括其值指示负载平衡触发条件的注释的装置。在以上实施例中的任一个中,注释可以表示负载平衡权重值,负载平衡权重值取决于由第一解码集群或第二解码集群生成的经解码指令的计数,或者对第一解码集群或第二解码集群观察到的解码等待时间;以及用于检测指示特定集群负载平衡动作将被采取的触发条件的装置可以包括:用于确定负载平衡权重值超过用于触发特定集群负载平衡动作的执行的阈值的装置。在以上实施例中的任一个中,分支目标缓冲器中的与数据元素的第一子集相关联的条目是表示被插入到分支目标缓冲器中的假的预测的所采用分支的条目,并且注释可以包括条目表示假的预测的所采用分支而不是实际的预测的所采用分支的指示。在以上实施例中的任一个中,特定集群负载平衡动作可以包括用于将表示假的预测的所采用分支的条目插入到分支目标缓冲器中的操作。在以上实施例中的任一个中,特定集群负载平衡动作可以包括用于强制集群切换或抑制集群切换的操作。结合以上实施例中的任一个,特定集群负载平衡动作可以包括用于强制集群切换的操作,并且设备可以包括:用于响应于用于强制集群切换的操作的执行而将数据元素的第二子集引导到第二解码集群的装置。在以上实施例中的任一个中,特定集群负载平衡动作可以包括用于抑制集群切换的操作,并且设备可以进一步包括:用于响应于用于抑制集群切换的操作的执行而将数据元素的第二子集引导到第一解码集群的装置。结合以上实施例中的任一个,用于检测指示特定集群负载平衡动作将被采取的触发条件的装置可以包括:用于从与第一解码集群相关联并且保存表示将由第一解码集群解码的未解码指令或由第一解码器生成的经解码指令的数据的第一队列,接收指示第一队列的状态的数据的装置;用于从与第二解码集群相关联并且保存表示将由第二解码集群解码的未解码指令或由第二解码器生成的经解码指令的数据的第二队列,接收指示第二队列的状态的数据的装置;以及用于将第一队列的状态与第二队列的状态进行比较的装置。结合以上实施例中的任一个,设备可以进一步包括:用于将经解码指令的第一子集存储在与第一解码集群相关联的第一输出队列中的装置;用于由第二解码集群解码数据元素的第二子集以生成经解码指令的第二子集的装置;以及用于将经解码指令的第二子集存储在与第二解码集群相关联的第二输出队列中的装置。用于将经解码指令的第一和第二子集按程序顺序提供给处理器的执行集群以供执行的装置可以包括:用于合并存储在第一输出队列中的经解码指令的至少子集和存储在第二输出队列中的经解码指令的至少子集以生成按程序顺序的经解码指令序列的装置。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1