用于聚集-更新-分散操作的加速器的制作方法

文档序号:14835380发布日期:2018-06-30 12:10阅读:200来源:国知局
用于聚集-更新-分散操作的加速器的制作方法

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



背景技术:

多处理器系统正变得越来越普遍。为了利用多处理器系统,要执行的代码可被分离到多个线程中以用于由各种处理实体执行。每个线程可相互并行地被执行。可在系统中实现应用的流水线,以便更高效地执行应用。当在处理器上接收到指令时,可将该指令解码为自然或更自然的用于在处理器上执行的术语或指令字。每个处理器可包括一个或多个高速缓存。可在片上系统中实现处理器。

附图说明

本公开的各种实施例通过示例而非限制的方式被图示在附图的图中,其中相同的附图标记指示相似的元件,并且在附图中:

图1A是根据本公开的一些实施例的形成有可包括执行单元以执行指令的处理器的示范性计算机系统的框图;

图1B图示根据本公开的一些实施例的数据处理系统;

图1C图示用于执行文本串比较操作的数据处理系统的又一个实施例;

图2是根据本公开的一些实施例的图示加速聚集-更新-分散(gather-update-scatter)型操作的执行的示例性系统的框图;

图3是根据本公开的一些实施例的图示聚集-更新-分散加速器的框图;

图4是根据本公开的一些实施例的更详细地图示在图2中图示的聚集-更新-分散加速器的所选部分的框图;

图5是根据本公开的一些实施例的由聚集-更新-分散加速器组件执行聚集-更新-分散操作的图示;

图6是根据本公开的一些实施例的图示用于由处理器的聚集-更新-分散加速器执行聚集-更新-分散操作的方法的流程图;

图7是根据本公开的一些实施例的图示用于使用聚集-更新-分散加速器来执行一个或多个聚集-更新-分散操作的方法的流程图;

图8是根据本公开的一些实施例的图示寄存器架构的框图;

图9A是根据本公开的一些实施例的图示有序流水线和寄存器重命名、无序发布/执行流水线的框图;

图9B是根据本公开的一些实施例的图示将包括在处理器中的有序架构核和寄存器重命名、无序发布/执行逻辑的框图;

图10A和图10B是根据本公开的一些实施例的图示示例性有序核架构的框图;

图11根据本公开的一些实施例的图示图示处理器的框图;

图12至图15是根据本公开的一些实施例的图示示例性计算机架构的框图;以及

图16是根据本公开的一些实施例的图示使用编译器和软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。

具体实施方式

下面的描述描述用于加速处理装置中聚集-更新-分散型操作的执行的指令和处理逻辑。这样的处理装置可包括无序处理器。在下面的描述中,阐述诸如处理逻辑、处理器类型、微架构条件、事件、使能机制等等之类的许多具体细节,以便提供对本公开的实施例的更全面的理解。然而,本领域技术人员将领会可在没有这样的具体细节的情况下实践其它实施例。另外,还没有详细示出一些公知的结构、电路等等,以避免不必要地模糊本文中包括的本公开的示例性实施例。

说明书中对“一个实施例”、“实施例”、“示例性实施例”等的引用指示所述的实施例可包括特定的特征、结构或特性。然而,并非本公开的所有实施例都必然包括特定特征、结构或特性。而且,这样的短语不一定是指相同的实施例。此外,当结合实施例描述特定的特征、结构或特性时,认为结合该公开的其它实施例来实现这样的特征、结构或特性在本领域技术人员的知识范围内,而不论是否明确描述这样的联系。

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

虽然以下示例描述在执行单元和逻辑电路的上下文中的指令处理和分发,但是本公开的其它实施例可通过存储在机器可读有形介质上的数据或指令的方式来实现,该数据或指令在由机器执行时使机器执行与该公开的至少一个实施例一致的功能。在一些实施例中,与本公开的实施例相关联的功能可以机器可执行指令来体现。该指令可用于使可用指令编程的通用或专用处理器执行本公开的操作。本公开的一些实施例可作为计算机程序产品或软件来提供,该计算机程序产品或软件可包括在其上存储有指令的机器或计算机可读介质,该指令可用于编程计算机(或其它电子设备)以根据本公开的实施例执行一个或多个操作。此外,本公开的一些实施例的操作可能由包含用于执行操作的固定功能逻辑的特定硬件组件、或者由编程的计算机组件和固定功能硬件组件的任何组合来执行。贯穿本公开,除非以其它方式明确地陈述,否则参考标号的复合形式一般或共同地指元件。因而,例如,微件(widget)101A或101-1是指微件类别的实例,该微件类别可共同地被称为微件101,并且该微件类别中的任何一个可被一般地称为微件101。

用于编程逻辑以执行本公开的一些实施例的指令可被存储在系统中的诸如DRAM、高速缓存、闪速存储器或其它储存器之类的存储器内。此外,指令可经由网络或通过其它计算机可读介质的方式来分发。因而,机器可读介质可包括用于以由机器(例如计算机)可读的形式存储或传输信息的任何机制,但不限于软盘、光盘、压缩盘、只读存储器(CD-ROM)以及磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪速存储器或者在互联网上通过电、光、声或其它形式的传播信号(例如载波、红外信号、数字信号等)的信息传输中使用的有形机器可读储存器。相应地,计算机可读介质可包括适合于以由机器(例如计算机)可读的形式存储或传输电子指令或信息的任何类型的有形机器可读介质。

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

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

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

在一个实施例中,指令集架构(ISA)可由一个或多个微架构来实现,一个或多个微架构可包括用于实现一个或多个指令集的处理器逻辑和电路。相应地,具有不同微架构的处理器可共享通用指令集的至少一部分。例如,Intel® Pentium 4处理器、Intel® CoreTM处理器以及来自加利福尼亚的桑尼维尔的Advanced Micro Devices公司的处理器实现几乎相同版本的x86指令集(带有已添加有更新版本的一些扩展),但有不同的内部设计。类似地,由诸如ARM控股有限公司、MIPS或者其被许可者或采用者之类的其它处理器开发公司设计的处理器可共享通用指令集的至少一部分,但可包括不同的处理器设计。例如, ISA的相同寄存器架构可在不同的微架构中使用新的或公知的技术、以不同的方式来实现,包括专用物理寄存器、使用寄存器重命名机制(例如寄存器别名表(RAT)、重排序缓冲器(ROB)和退役寄存器文件的使用)的一个或多个动态分配的物理寄存器。在一个实施例中,寄存器可包括一个或多个寄存器、寄存器架构、寄存器文件或者可由或不可由软件程序员可寻址的其它寄存器集。

指令可包括一个或多个指令格式。在一个实施例中,指令格式可指示各种字段(位数、位的位置等),以除了其它外尤其指定要执行的操作以及将在其上执行该操作的操作数。在进一步的实施例中,一些指令格式可由指令模板(或子格式)进一步定义。例如,给定指令格式的指令模板可被定义成具有指令格式的字段的不同子集和/或被定义成具有不同解释的给定字段。在一个实施例中,指令可使用指令格式(并且如果定义的话,在该指令格式的指令模板的给定的一个中)来表达,并且指定或指示操作以及操作将在其上进行操作的操作数。

科学、金融、自动矢量化的通用的RMS(识别,挖掘和综合)以及视觉和多媒体应用(例如2D/3D图形、图像处理,视频压缩/解压缩,语音识别算法和音频操纵)可需要将在大量数据项上执行的相同操作。在一个实施例中,单指令多数据(SIMD)是指使处理器对多个数据元素执行操作的指令类型。SIMD技术可用在处理器中,该处理器可在逻辑上将寄存器中的位分为许多固定大小或可变大小的数据元素,该数据元素中的每一个表示单独的值。例如,在一个实施例中,64位寄存器中的位可被组织为包含四个单独的16位数据元素的源操作数,四个单独的16位数据元素中的每一个表示单独的16位值。这种类型的数据可被称为“封装”数据类型或“矢量”数据类型,并且这种数据类型的操作数可被称为封装数据操作数或矢量操作数。在一个实施例中,封装数据项或矢量可以是存储在单个寄存器内的封装数据元素的序列,并且封装数据操作数或矢量操作数可以是SIMD指令(或“封装数据指令”或“矢量指令”)的源或目的地操作数。在一个实施例中,SIMD指令指定将在两个源矢量操作数上执行的单个矢量操作,以用相同或不同数量的数据元素并且以相同或不同的数据元素次序生成相同或不同大小的目的地矢量操作数(也被称为结果矢量操作数)。

诸如由Intel® CoreTM处理器(具有包括x86、MMXTM、流式SIMD扩展(SSE)、SSE2、SSE3、SSE4.1和SSE4.2指令的指令集)采用的之类的SIMD技术、诸如ARM Cortex®系列处理器(具有包括矢量浮点(VFP)和/或NEON指令的指令集)之类的ARM处理器、以及诸如由中国科学院计算技术研究所(ICT)开发的龙芯系列处理器之类的MIPS处理器在应用性能方面已经使得能够实现显著改进(CoreTM和MMXTM是加利福尼亚的圣克拉拉的Intel公司的注册商标或商标)。

在一个实施例中,目的地和源寄存器/数据可以是表示对应的数据或操作的源和目的地的通用术语。在一些实施例中,它们可由具有除了所描绘的名称或功能之外的其它名称或功能的寄存器、存储器或其它存储区域来实现。例如,在一个实施例中,“DEST1”可以是临时存储寄存器或其它存储区域,而“SRC1”和“SRC2”可以是第一和第二源存储寄存器或其它存储区域,等等。在其它实施例中,SRC和DEST存储区域中的两个或更多个可对应于相同存储区域内的不同数据存储元件(例如SIMD寄存器)。在一个实施例中,例如通过将对第一和第二源数据执行的操作的结果回写到用作目的地寄存器的两个源寄存器中的一个,源寄存器中的一个也可充当目的地寄存器。

图1A是根据本公开的一些实施例的形成有可包括执行单元以执行指令的处理器的示例性计算机系统的框图。根据本公开,系统100可包括诸如处理器102之类的组件,以采用包括逻辑的执行单元来执行用于处理数据的算法,诸如在本文所述的示例性实施例中。系统100可代表基于可从加利福尼亚的圣克拉拉的Intel公司获得的Pentium® III、Pentium® 4、XeonTM、ItaniumTM、XScaleTM和/或StrongARMTM微处理器的处理系统,不过也可使用其它系统(包括具有其它微处理器的PC、工程工作站、机顶盒等等)。在一个实施例中,样本系统100可以执行可从华盛顿的雷蒙德的Microsoft公司获得的WINDOWSTM操作系统的版本,不过也可使用其它操作系统(例如UNIX和Linux)、嵌入式软件和/或图形用户界面。因而,本公开的实施例不限于硬件电路和软件的任何具体组合。

本公开的实施例不限于计算机系统。本公开的一些实施例可用在诸如手持设备和嵌入式应用之类的其它设备中。手持设备的一些示例包括蜂窝电话、互联网协议设备、数码相机、个人数字助理(PDA)和手持PC。嵌入式应用可包括微控制器、数字信号处理器(DSP)、片上系统、网络计算机(NetPC)、机顶盒、网络中心(hub)、广域网(WAN)交换机或者可根据至少一个实施例执行一个或多个指令的任何其它系统。

根据本公开的一个实施例,计算机系统100可包括处理器102,处理器102可包括一个或多个执行单元108以执行算法来执行至少一个指令。可在单个处理器桌面或服务器系统的上下文中描述一个实施例,但是其它实施例可被包括在多处理器系统中。系统100可以是“中心”系统架构的示例。系统100可包括用于处理数据信号的处理器102。处理器102可包括复杂指令集计算机(CISC)微处理器、精简指令集计算(RISC)微处理器、甚长指令字(VLIW)微处理器、实现指令集的组合的处理器或者诸如例如数字信号处理器之类的任何其它处理器设备。在一个实施例中,处理器102可耦合到处理器总线110,处理器总线110可在处理器102和系统100中的其它组件之间传输数据信号。系统100的元件可执行本领域技术人员公知的常规功能。

在一个实施例中,处理器102可包括1级(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与MCH 116通信。MCH 116可向存储器120提供高带宽存储器路径118,用于指令119和数据121的存储并用于图形命令、数据和纹理的存储。MCH 116可在处理器102、存储器120和系统100中的其它组件之间引导数据信号,并且在处理器总线110、存储器120和系统I/O 122之间桥接数据信号。在一些实施例中,系统逻辑芯片116可提供用于耦合到图形控制器112的图形端口。MCH 116可通过存储器接口118耦合到存储器120。图形卡112可通过加速图形端口(AGP)互连114耦合到MCH 116。

系统100可使用专用中心接口总线122来将MCH 116耦合到I/O控制器中心(ICH)130。在一个实施例中,ICH 130可经由本地I/O总线提供到一些I/O设备的直接连接。本地I/O总线可包括用于将外围设备连接到存储器120、芯片组和处理器102的高速I/O总线。示例可包括音频控制器129、固件中心(闪存BIOS)128、无线收发器126、数据储存器124、包含用户输入接口125的传统I/O控制器123(其可包括键盘接口)、诸如通用串行总线(USB)之类的串行扩展端口127以及网络控制器134。数据存储设备124可包括硬盘驱动器、软盘驱动器、CD-ROM设备、闪速存储器设备或其它大容量存储设备。

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

图1B图示实现本公开的实施例的原理的数据处理系统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总线153与各种I/O设备通信的I/O桥154。这样的I/O设备可包括但不限于例如通用异步接收器/发射器(UART)155、通用串行总线(USB)156、蓝牙无线UART 157和I/O扩展接口158。

数据处理系统140的一个实施例提供移动网络和/或无线通信以及处理核159,该处理核159可执行包括文本串比较操作的SIMD操作。处理核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,以识别包括根据一个实施例的指令的指令集163的指令,用于由执行单元162执行。在其它实施例中,SIMD协处理器161还包括解码器165(被示为165B)的至少一部分以解码指令集163的指令。处理核170还可包括对于理解本公开的实施例可能不必要的附加电路(未示出)。

在操作中,主处理器166执行控制一般类型的数据处理操作的数据处理指令的流,该数据处理操作包括与高速缓存存储器167和输入/输出系统168的交互。数据处理指令的流内嵌入的可以是SIMD协处理器指令。主处理器166的解码器165将这些SIMD协处理器指令识别为应当由附连的SIMD协处理器161执行的类型。相应地,主处理器166在协处理器总线171上发出这些SIMD协处理器指令(或表示SIMD协处理器指令的控制信号)。这些指令可由任何附连的SIMD协处理器从协处理器总线171接收。在这种情况下,SIMD协处理器161可接受并执行旨在用于它的任何接收的SIMD协处理器指令。

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

本公开的实施例涉及用于加速聚集-更新-分散型操作的执行的指令、硬件内容关联存储器(CAM)和处理逻辑。例如,该系统可提供基于CAM的方法来加速线性分类器中的梯度更新步骤。图2是加速聚集-更新-分散型操作的执行的示例性系统200的图示。系统200可包括处理器、SoC、集成电路或其它机制。例如,系统200可包括处理器核204。虽然处理器核204在图2中作为示例被示出和描述,但是可使用任何合适的机制。处理器核204可包括用于加速聚集-更新-分散型操作的执行的任何合适的机制。在一个实施例中,这样的机制可用硬件来实现。处理器核204可完全或部分地由图1A-1C中或图9A-16中所述的元件来实现。

将在处理器核204上执行的指令可被包括在指令流202中。指令流202可由例如编译器、即时解释器或其它合适的机制(其可能或可能不被包括在系统200中)生成,或者可由导致指令流202的代码的撰写者来指定。例如,编译器可采取应用代码并且以指令流202的形式生成可执行代码。指令可由处理器核204从指令流202接收。可以任何合适的方式将指令流202加载到处理器核204。例如,可从储存器、从其它机器或者从诸如存储器系统250之类的其它存储器加载将由处理器核204执行的指令。指令可到达并且在诸如RAM之类的驻留存储器中可用,并且可被从储存器取出以由处理器核204执行。指令可由例如预取器或取出单元(诸如指令取出单元208)从驻留存储器取出。如图2中所图示,在一些实施例中,指令流202可包括:使处理器核204执行如以任何合适的指令格式定义的聚集-更新-分散指令的指令,或者使处理器核204从聚集-更新-分散加速器的CAM中的条目逐出键-值对并在其位置存储新的键-值对的指令。

处理器核204可包括前端206和后端212。前端206可包括指令取出流水线级(诸如指令取出单元208)和解码流水线级(诸如决定单元210)。前端206可使用解码单元210接收和解码来自指令流202的指令。经解码的指令可被分派、分配和调度以用于由后端212的分配级(诸如分配器214)执行,并且可被分配给后端212内的具体执行单元216或分配给聚集-更新-分散加速器230以用于执行。将由处理器核204执行的一个或多个具体指令可被包括在被定义以用于由处理器核204执行的库中。在一些实施例中,具体指令可由处理器核204的特定部分作为目标。例如,处理器核204可识别指令流202中的尝试来以软件执行矢量操作,并且可向执行单元216中的特定执行单元发出指令以执行该指令。在另一个实施例中,处理器核204可识别指令流202中的尝试来执行聚集-更新-分散指令,并且可向聚集-更新-分散加速器230发出指令以执行该指令。

在一个实施例中,系统200可包括存储器层次结构,该存储器层次结构包括核内的一级或多级高速缓存、一个或多个共享高速缓存单元和/或耦合到一组集成存储器控制器单元(未示出)的外部存储器。存储器层次结构内的每一级上的高速缓存可包括任何合适的高速缓存。本公开的一些实施例可包括用于指令和数据两者的单个内部高速缓存,诸如例如1级(L1)内部高速缓存或多级内部高速缓存。其它实施例可包括单独的指令和数据高速缓存单元以及共享的中级高速缓存,诸如2级(L2)高速缓存单元。在一些实施例中,系统可包括内部高速缓存和可在核和/或处理器外部的外部高速缓存的组合。例如,在一些实施例(未示出)中,最后一级高速缓存(LLC)可驻留在系统代理中,诸如来自Intel公司的处理器的非核模块。在其它实施例中,所有的高速缓存可在核和/或处理器外部。

在图2中图示的示例性系统200中,存储器子系统220可包括存储器、RAM或高速缓存层次结构,该高速缓存层次结构可包括一个或多个1级(L1)高速缓存222。在一个实施例中,L1高速缓存222可以是存储器层次结构的到执行单元216最接近的元素。因此,与对存储器层次结构中的其它级的访问相比,对L1高速缓存222的访问可经历最短的等待时间。在一个实施例中,L1高速缓存222可小于在存储器层次结构中其它级的高速缓存。存储器子系统220还可包括例如中级高速缓存。在一个实施例中,中级高速缓存可包括一个或多个2级(L2)高速缓存224。一个或多个L2高速缓存224可由多个处理器核204共享。在另一个实施例中,中级高速缓存可包括在高速缓存层次结构中的多个级的每一个上的一个或多个高速缓存,诸如2级(L2)、3级(L3)、4级(L4)或其它级的高速缓存。在一个实施例中,诸如L2高速缓存224之类的中级高速缓存的高速缓存可比L1高速缓存222更远离执行单元216,但比最后一级高速缓存(未示出)更接近执行单元216。因此,对L2高速缓存224的高速缓存的访问可比对L1高速缓存222的访问经历更长的等待时间。在一个实施例中,L2高速缓存224可大于L1高速缓存222,但可小于最后一级高速缓存(未示出)。在一个实施例中,本地L2高速缓存224可包括以四到六个组(bank)的256千字节,其中具有每个组两个端口。在一个实施例中,对最后一级高速缓存的访问可经历比对其它级的高速缓存层次结构的访问长的等待时间。

存储器子系统220还可包括高速缓存控制器226。高速缓存控制器226可控制各种L1高速缓存222和L2高速缓存224的分配,用于后端212内的执行单元216的使用。在至少一些实施例中,高速缓存控制器226可包括硬件电路或逻辑,以根据用于高速缓存的一个或多个高速缓存替换策略来控制将高速缓存行插入到L1高速缓存222和L2高速缓存224中以及从L1高速缓存222和L2高速缓存224逐出高速缓存行。

在执行期间,可通过存储器子系统220进行对数据或附加指令(包括驻留在存储器系统250中的数据或指令)的访问。而且,来自执行的结果可被存储在存储器子系统220中,并且随后可被冲洗(flush)到存储器系统250。在由执行单元216或聚集-更新-分散加速器230执行之后,指令可由后端212内的退役单元218中的回写阶段或退役阶段退役。这样的执行流水线的各种部分可由一个或多个处理器核204执行。

诸如线性分类器之类的许多机器学习工作负载是聚集-更新-分散型操作的重要用户,其中聚集几乎之后紧接着分散到相同的地址,在其之间仅仅有聚集的数据的潜在的修改。一般而言,术语“聚集”可指其中从索引的阵列加载一个或多个索引并且基于那些索引从存储器中的位置获得(“聚集”)元素的操作。术语“分散”可指相反的操作,其中从索引阵列加载一个或多个索引,并且基于那些索引将元素存储(“分散”)到随机位置或分散到存储器中的位置。这些聚集和分散操作在现有系统上实现较差性能,因为它们展现差的空间局部性,并且大多数高速缓存仅仅允许每个周期一个或两个访问。因而,这些分散操作和聚集操作可增加这些系统中的高速缓存压力。

在一些现有系统中,如果在聚集的条目之中存在空间局部性,扩展的矢量指令的使用可提供性能改进。然而,没有为在诸如n-gram模型之类的机器学习应用中发现的聚集-更新-散布模式明确地优化它们,该机器学习应用在具有很小的空间局部性的真实世界数据集上操作。例如,一些这样的方法涉及尝试将多个聚集、更新或分散操作映射到单指令多数据(SIMD)算术操作,以便探索指令级并行性。这些方法取决于标识匹配的索引键的能力,这可引入显著的高速缓存压力。在某些情况下,这些方法可导致相对高的分支误预测率,这可与SIMD不兼容。

在至少一些实施例中,本文所述的系统和处理器可包括内容可寻址存储器(CAM)以支持聚集-更新-分散型操作。例如,处理器可包括用于聚集-更新-分散型操作的基于CAM的加速器。在一些实施例中,CAM可被严重地成组(banked)以用于并行性。例如,在CAM中的成组的情况下,加速器可能能够每个周期执行四个、八个或者甚至十二个聚集-更新-分散型操作,而不管地址流的空间局部性如何。在一些实施例中,CAM或存储在CAM中的具体数据结构可仅仅存储32位到64位值以解决聚集和分散操作的低空间局部性方面。在一些实施例中,CAM或存储在CAM中的具体数据结构可用基于索引的寻址方案替换传统的高速缓存地址查找,这减少查找所需的工作负载。例如,在至少一些实施例中,当使用这种方法时,不需要TLB访问。

在本公开的实施例中,系统200可包括硬件支持以加速这些聚集-更新-分散操作并因而加速机器学习应用的处理。例如,在一个实施例中,系统200可包括提供基于键的关联搜索功能性的聚集-更新-分散加速器(GUSA)。如以下更详细描述的,GUSA可包括逻辑和/或电路以高效地执行一个或多个聚集-更新-分散操作。

如图2中所图示,在一个实施例中,系统200可包括聚集-更新-分散加速器(GUSA)230以执行一个或多个聚集-更新-分散操作。GUSA 230可以任何合适的方式来实现。系统200可包括在系统200的任何合适部分中的GUSA 230。在一个实施例中,系统200可包括GUSA 230,该GUSA 230被实现为处理器核204内的独立电路。在另一个实施例中,系统200可包括GUSA 230,该GUSA 230被实现为一个或多个执行单元216的组件或者被实现为处理器核204中的执行流水线的另一个元件的组件。在又一个实施例中,系统200可包括GUSA 230,该GUSA 230被实现在系统200内的处理器核204外部并且通信地耦合到处理器核204。在不同的实施例中,GUSA 230可由电路或硬件计算逻辑的任何合适的组合来实现。在一个实施例中,GUSA 230可接受来自系统200的其它部分的输入,并且返回一个或多个聚集-更新-分散操作的结果。

在一个实施例中,GUSA 230可包括或可通信地耦合到存储器元件以存储执行一个或多个聚集-更新-分散操作所必要的信息。例如,GUSA 230可包括内容可寻址存储器,被示为CAM 245。CAM 245可存储其中可存储多组键-值对的内容关联数据结构(被示为CAM数据结构234)。在各种实施例中,CAM数据结构234可以是包括128到512个条目的4KB CAM数据结构,这取决于它们的大小。在一些实施例中,CAM数据结构234可被实现为成组的存储器。例如,CAM数据结构234可包括四到八个组,其中每个组两个端口。

在一个实施例中,可在GUSA 230内的CAM 245中实现CAM数据结构234。在另一个实施例中,可在系统200内的任何合适的存储器内实现CAM数据结构234。在一个实施例中,GUSA 230可由包括CAM控制逻辑232的电路实现,该CAM控制逻辑232可控制对CAM 245和/或CAM数据结构234的内容的访问并在其上执行操作。在至少一些实施例中,CAM控制逻辑232可支持读取操作、写入操作和原位更新(update-in-place)操作,该原位更新操作被引导到CAM 245和/或CAM数据结构234内的特定条目。例如,在一个实施例中,GUSA 230可包括电路以执行修改驻留在CAM数据结构中的键-值对的算术或逻辑操作。在另一个实施例中,GUSA 230可包括电路以存储键-值对,在该键-值对上已经在CAM数据结构234中执行了算术或逻辑操作。在一个实施例中,GUSA 230可包括电路以将CAM数据结构234的内容中的一些或全部逐出到存储器(例如以将包含键-值对的一个或多个条目逐出到存储器子系统220和/或存储器系统250)。

处理器核204可或者隐含地或者通过具体指令的解码和执行来识别将执行聚集-更新-分散操作。在这样的情况下,聚集-更新-分散操作的执行可被卸载到GUSA 230。在一个实施例中,GUSA 230可由指令流202中的一个或多个具体指令作为目标。这样的具体指令可由例如编译器、即时解释器或其它合适的机制(其可被包括或可不被包括在系统200中)生成,或者可由导致指令流202的代码的撰写者指定。注意:指令流202可包括除了执行聚集-更新-分散操作的指令之外的指令。

在一个实施例中,用于执行聚集-更新-分散操作的以诸如CAM数据结构234之类的内容关联数据结构的内容为目标的具体指令可包括:如以任何合适的指令格式定义的执行聚集-更新-分散指令的指令,或者使处理器核204从聚集-更新-分散加速器230的CAM数据结构234中的条目逐出键-值对并将新的键-值对存储在其位置的指令。在各种实施例中,聚集-更新-分散加速器230可包括算术逻辑单元(ALU),该算术逻辑单元(ALU)可包括电路和逻辑以执行各种算术或逻辑操作中的任一个,各种算术或逻辑操作采用CAM数据结构234中的条目的数据值以及标量数据值作为其输入操作数。

在一些实施例中,ISA可包括单个聚集-更新-分散指令,其中要执行的ALU操作由指令的输入参数中的一个定义。在这样的实施例中,具体的聚集-更新-分散指令可由单个聚集-更新-分散指令的三个输入参数定义:表示用于CAM数据结构中的特定条目的索引键的值(其数据值将用作用于特定算术或逻辑操作的操作数),标识要执行的特定算术或逻辑操作的值,以及用作用于该操作的另一个操作数的标量数据值。在另一个实施例中,具体的聚集-更新-分散指令可由单个聚集-更新-分散指令的三个输入参数定义:存储用于CAM数据结构中的特定条目的索引键的寄存器的标识符(其数据值将用作用于特定算术或逻辑操作的操作数),存储标识要执行的特定算术或逻辑操作的值的寄存器的标识符,以及存储用作用于该操作的另一个操作数的标量数据值的寄存器的标识符。

在一些实施例中,ISA可包括将由聚集-更新-分散加速器230执行的单独的聚集-更新-分散型指令以用于由聚集-更新-分散加速器230支持的不同算术或逻辑操作中的一些或全部。例如,在一个实施例中,除了其它之外,ISA尤其可包括单独的“GUSA_ADD”、“GUSA_MULTIPLY”、“GUSA_AND”、“GUSA_OR”和/或“GUSA_XOR”指令。这些指令中的每一个都可由ISA中的不同操作码实现,其隐含地指示将作为聚集-更新-分散操作的部分被执行的算术或逻辑操作。在这种情况下,这些指令中的每一个可包括作为输入参数的表示用于CAM数据结构中的特定条目的索引键的值(或者存储用于CAM数据结构中的特定条目的索引键的寄存器的标识符)以及用作用于该操作的另一个操作数的标量数据值(或者存储用作用于该操作的另一个操作数的标量数据值的寄存器的标识符),但是可不需要标识要执行的特定算术或逻辑操作的输入参数值。在本公开的至少一些实施例中,不是执行三个单独的宏指令来读取值,而是将算术或逻辑操作应用到准备好的值,并将结果回写到从其读取原始值的相同位置,这些高带宽聚集-更新-分散指令中的每一个可作为单个宏指令来由执行所有这三个操作的聚集-更新-分散加速器230执行。

在本公开的一个实施例中,诸如GUSA 230之类的聚集-更新-分散加速器可由专用电路或逻辑实现以加速被引导到处理器核204的聚集-更新-分散操作的执行。在一些实施例中,处理器核204的每个线程可访问不同的硬件内容关联数据结构,诸如CAM数据结构234。在其它实施例中,处理器核204的每个线程可访问在线程之间共享的单个CAM数据结构234的不同部分。在又一个实施例中,系统200可包括用于处理器核204的多个线程中的每一个的专用GUSA 230(以及对应的CAM 245和/或CAM数据结构234)。在一个实施例中,由每个处理器核204、执行单元216或其线程可访问以用于存储键-值对并在其上操作的共享CAM数据结构234的部分可具有固定大小。在另一个实施例中,由每个处理器核204、执行单元216或其线程可访问以用于存储键-值对并在其上操作的共享CAM数据结构234的部分的大小可基于工作负载而在运行时间动态地可配置。

在一个实施例中,与一个或多个其它线程或核共享CAM数据结构234的每个线程或核可访问CAM数据结构234内的键-值对的相应的集合。在一个实施例中,GUSA 230的用于特定处理器核204、执行单元216或其线程的CAM控制逻辑232可包括跟踪针对每个线程存储在共享CAM数据结构234中的键-值对的数量的电路或逻辑。在另一个实施例中,CAM控制逻辑232可包括生成到共享CAM数据结构234中的正确偏移以针对每个线程提供对共享CAM数据结构234的相应部分的访问的电路或逻辑。在又一个实施例中,系统200可包括多个处理器核204、执行单元216或其线程向其提交请求以执行聚集-更新-分散操作的共享CAM控制逻辑232(例如共享CAM处理引擎)。在该示例中,共享CAM控制逻辑232可访问适当的CAM数据结构234(或其部分)来代表请求处理器核、执行单元或线程执行请求的聚集-更新-分散操作。

在一个实施例中,CAM数据结构234可通信地耦合到存储器子系统220,并且由GUSA 230执行聚集-更新-分散操作的结果可被存储在存储器子系统220中。在一些实施例中,GUSA 230可通信地直接耦合到存储器子系统220,以提供由GUSA 230执行的聚集-更新-分散操作的结果。例如,由GUSA 230执行聚集-更新-分散操作的结果可被写入到存储器子系统220的高速缓存层次结构内的任何合适的高速缓存,诸如L1高速缓存222或L2高速缓存224。被写入到高速缓存层次结构的结果随后可被冲洗到存储系统250。

图3是根据本公开的一些实施例的更详细地图示聚集-更新-分散加速器230的框图。在该示例中,聚集-更新-分散加速器(GUSA)230包括CAM 245内的硬件内容关联数据结构(CAM数据结构234)以及控制对CAM数据结构234的内容的访问以及在其上执行操作的CAM控制逻辑232。在一个实施例中,CAM控制逻辑232可包括一个或多个聚集-更新-分散操作执行单元(被示为ALU 233),一个或多个聚集-更新-分散操作执行单元中的每一个包括用于执行以CAM数据结构234为目标的一个或多个聚集-更新-分散操作的全部或一部分的电路。例如,ALU 233中的一个或多个可包括用于以下的电路:执行算术或逻辑操作以修改CAM数据结构234内的条目的内容,以基于在键-值对中的数据值上执行的算术或逻辑操作的结果而向CAM数据结构234添加新条目,或者以将CAM数据结构234的一个或多个条目移动到存储器。

在一个实施例中,CAM数据结构234可包括多个元素235-240,多个元素中的每一个可存储表示键-值对的信息。每个这样的元素可包括n个位,n个位的子集用于到CAM数据结构234中以访问该元素的索引,并且n个位中的另一个子集包含将使用该索引检索的数据值。例如,在图3中以展开形式示出的元素235包括位(n-1)到(m+1)中的索引键242以及位m到0中的数据值244。在该示例中,为了检索存储在元素235内的位m到0中的数据值242,可将存储在位(n-1)到(m+1)中的索引键242呈递给CAM数据结构234。在不同的实施例中,可以任何合适的键-值格式编码存储在CAM数据结构234中的键-值对。

在至少一些实施例中,使用本文所述的用于加速聚集-更新-分散操作的执行的机制可改进机器学习应用的性能,其中聚集-更新-分散模式用于使用稀疏输入执行模型更新。例如,这些应用可包括操作,该操作基于由稀疏矢量提供的附加操作数而将算术或逻辑操作应用到密集阵列中相对少量的条目(例如DenseArray+=SparseVector)。在这些机器学习应用中,与稀疏矢量中的条目的数量相比,密集阵列可包括非常大量的条目。在一个示例中,密集阵列可包括一百万个条目,而稀疏矢量(其包括仅用于将在其上执行更新操作的密集阵列的特定条目的相应的条目)可包括大约二十个条目。在一些实施例中,正被更新的密集阵列内的条目往往可能驻留在CAM数据结构234中。

以下通过示例性伪代码图示可能从本文所述的技术受益的聚集-更新-分散模式的一个示例。

for (int i=0; i<n; i++)

{

d[s[i]→index]+=s[i]→value; //聚集-更新-分散操作

}

在该示例中,稀疏矢量s的每个条目i中的索引键值用于查找密集阵列d中由该索引键访问的位置处的数据值。然后在从密集阵列读取的数据值和包括该索引键值的稀疏矢量中的数据值上执行更新操作。在该示例中,该操作是一个加法操作,不过可指定任何一个或多个算术和/或逻辑操作以用于执行更新。在该示例中,在将这两个值加在一起之后,加法的结果被存储回到密集阵列d中在由索引键值访问的位置处。这针对稀疏矢量中的每个条目而重复。

在本公开的至少一些实施例中,n个聚集-更新-分散操作中的每一个可作为被引导到用于执行的聚集-更新-分散加速器230的单个聚集-更新-分散指令而被执行。例如,对应于最近或频繁访问的密集阵列的条目的某一数量的<索引,值>对可被存储在支持读取、写入和原位更新操作的CAM数据结构234中。处理器核可随着时间的推移在代码的执行期间建立在稀疏矢量中存在针对其的条目的索引列表,并且可在以那些索引为目标的聚集-更新-分散指令被接收时调度针对CAM数据结构234中包括那些索引的条目的更新操作。在至少一些实施例中,这些单个聚集-更新-分散指令中的两个或更多个可由聚集-更新-分散加速器230并行地执行。在一些实施例中,该方法在理想情况下可将高速缓存查找的数量减少百分之五十,例如,在当以那些条目为目标的聚集-更新-分散指令被接收时频繁访问的条目的数量足够小以致于它们可能驻留在CAM数据结构234中的情况下。在该方法的初始分析中,使用真实世界稀疏机器学习数据集已经示出具有100-200个条目的CAM数据结构234可足以捕获在这些类型的工作负载中执行的聚集-更新-分散操作的显著部分。

在一些实施例中,聚集-更新-分散加速器230可包括用于基地址值的储存器,如基地址450所示。在一些实施例中,CAM数据结构234中的每个未命中可导致针对作为<base_addr+index>寻址到较大的备份(backing)高速缓存的位置的加载操作。在一些情况下,这还可导致从CAM数据结构234的逐出,被实现为CAM数据结构234中的条目的先前内容到高速缓存的存储。

在本公开的实施例中,包括诸如GUSA 230之类的聚集-更新-分散加速器的系统(诸如系统200)可支持几个应用编程接口(API)以执行聚集-更新-分散操作。这些聚集-更新-分散操作可访问诸如CAM数据结构234之类的硬件内容关联数据结构并在其上操作。在一些实施例中,由GUSA 230执行的聚集-更新-分散操作可被异步执行。在这样的实施例中,其它指令可由处理器核204内的执行单元216同时执行。在一个实施例中,这些API中的每一个可以用硬件实现为处理器核204的指令集架构(ISA)中的指令。在一个实施例中,聚集-更新-分散操作中的每一个可由包括在程序中的机器语言或汇编语言指令调用(invoke)。在另一个实施例中,通过调入(call)以高级面向程序或面向对象编程语言定义的函数或方法,可调用聚集-更新-分散操作中的每一个。在不同的实施例中,编程语言可以是编译或解释语言。

在一个实施例中,定义聚集-更新-分散操作的API中的每一个可通过由处理器核204执行的一个或多个微指令或微操作来实现。例如,解码单元210可接收表示由API中的一个定义的聚集-更新-分散操作的指令。解码单元210可将接收的指令解码成一个或多个微指令或微操作,一个或多个微指令或微操作中的任一个在本文中可被称为微指令(uop),并且一个或多个微指令或微操作中的每一个将由执行单元216中的一个或由GUSA 230执行。分配器214可从解码单元210接收一个或多个微指令或者一个或多个微操作,并且可将它们中的每一个引导到适当的执行单元216或GUSA 230,以便执行请求的聚集-更新-分散操作。在一个实施例中,GUSA 230可包括执行微指令或微操作以将数据加载到CAM数据结构234中的电路或逻辑。在另一个实施例中,GUSA 230可包括执行微指令或微操作以在键-值对的键上执行索引匹配操作的电路或逻辑。在另一个实施例中,GUSA 230可包括执行各种微指令或微操作以执行修改存储在CAM数据结构234中的键-值对内的数据值的算术或逻辑操作的电路或逻辑。这些和其它微指令或微操作可以各种组合来执行,以执行由API定义的聚集-更新-分散操作。在一个实施例中,聚集-更新-分散操作中的两个或更多个可由共享单个操作码的汇编语言指令执行。例如,操作码可指示该指令将被引导到GUSA 230(并由GUSA 230执行)。在该示例中,这些汇编语言指令可包括多个控制字段,其相应值定义要执行的具体的聚集-更新-分散操作。控制字段中的一个可指示要执行的算术或逻辑操作。控制字段中的一个可指示用于要执行的算术或逻辑操作的操作数的大小。

图4是根据本公开的一些实施例的更详细地图示在图2中图示的聚集-更新-分散加速器230的所选部分的框图。在各种实施例中,图4中描绘的元件中的一个或多个可以是CAM控制逻辑232的元件。在图4中图示的示例性实施例中,聚集-更新-分散加速器230在诸如CAM数据结构234之类的CAM数据结构内包括用于多个索引键(被示为索引键410)以及针对存储在CAM数据结构中的键-值对的对应数据值(被示为数据值430)的储存器。例如,索引键242和数据值244可共同表示存储在CAM数据结构中的键-值对。

在该示例中,聚集-更新-分散加速器230包括ALU 233。ALU 233可包括针对给定的聚集-更新-分散操作执行被指定为指令参数440的部分的算术或逻辑操作的硬件电路和逻辑。例如,指令参数440可包括:标识将由ALU 233执行的ALU操作(被示为ALU操作446)、标识将由ALU 233执行的ALU操作(被示为ALU操作446)的位置、或者以其它方式表示将由ALU 233执行的ALU操作(被示为ALU操作446)的数据。该数据可作为控制输入被提供给ALU 233,以使其在其输入操作数上执行指定的算术或逻辑操作。

在该示例性实施例中,指令参数440可包括:标识将用作到CAM数据结构234中的搜索索引(被示为搜索索引442)的给定的索引键值、标识将用作到CAM数据结构234中的搜索索引(被示为搜索索引442)的给定的索引键值的位置、或者以其它方式表示将用作到CAM数据结构234中的搜索索引(被示为搜索索引442)的给定的索引键值的数据。如果在索引键410中存在对搜索索引的命中,索引键可由复用器/解复用器415输出,并且作为控制输入而被提供给复用器/解复用器425。该输入可使对应数据值430从数据值430内由搜索索引442标识的条目聚集,并且被提供给ALU 233作为用于被指定为ALU操作446的算术或逻辑操作的操作数。

在该示例性实施例中,指令参数440可包括:标识标量数据值(被示为标量值444)、标识标量数据值(被示为标量值444)的位置、或者以其它方式表示标量数据值(被示为标量值444)的数据。该标量数据值可被提供给ALU 233作为用于指定的算术或逻辑操作的另一个操作数。在指定的算术或逻辑操作由ALU 233执行之后,操作的结果可被提供(作为ALU 233的输出)给复用器/解复用器425,以便将结果分散回到数据值430内由搜索索引442标识的条目。

在至少一些实施例中,图4中图示的聚集-更新-分散加速器230的所有元素对于诸如处理器核204之类的特定处理器核可以是本地的。在一些实施例中,CAM数据结构234内的索引键410可包括128个条目,128个条目中的每一个是32位宽。在一些实施例中,CAM数据结构234内的128个数据值430中的每一个可包括32或64位,该128个数据值430表示用于包括索引键值410的键-值对的数据值。如本文所述,聚集-更新-分散加速器230及其CAM数据结构234和CAM控制逻辑232可支持被引导到CAM数据结构234中的键-值对的读取操作、写入操作以及原位更新操作。

聚集-更新-分散加速器230及其CAM数据结构234和CAM控制逻辑232还可支持明确地逐出键-值对并将其用另一个键-值对替换的操作。例如,聚集-更新-分散加速器230可包括实现操作GUSA-CAM-evict-store的电路和逻辑,该操作包括:指定针对将存储在CAM数据结构234中的新的键-值对的索引键和值的指令参数,标识将在其中替换键-值对的条目的位置的到CAM数据结构234中的偏移,和/或与指定的偏移量组合标识当前包含在条目中的键-值对将被逐出到的存储器中的位置的基地址。例如,存储在基地址450中的值可表示用于存储键-值对的存储器中的阵列的基地址,该键-值对的子集被存储在CAM数据结构234中。在一些实施例中,当从CAM数据结构234逐出条目时,其可被首先逐出到诸如L1高速缓存222或L2高速缓存224中的一个之类的备份高速缓存,之后其可被冲洗到主存储器在从基地址和偏移计算的位置处。在聚集-更新-分散操作被呈递给聚集-更新-分散加速器230的情况下,对于其而言没有具有匹配指定的搜索键的索引键的条目存在于CAM数据结构234中,包含搜索索引的键-值对可被从备份高速缓存中获得。在一些实施例中,CAM控制逻辑232可能能够使用具有比在需要更大索引(诸如128位索引)的现有CAM中可能的更高的性能的跨越多达512个条目的32位索引搜索来执行CAM访问。这可允许在单个周期中执行多个聚集-更新-分散操作。通过将CAM条目成组,可提高并行性而没有极大地影响效率。在其中CAM条目成组的实施例中,对于每个组可存在ALU 233的单独的实例。

图5是根据本公开的一些实施例的由聚集-更新-分散加速器的组件执行聚集-更新-分散操作的说明。在一个实施例中,通过在具有匹配由指令指定的索引键的索引键的键-值对上执行指定的算术或逻辑操作,系统200可执行指令以修改驻留在CAM数据结构234中的所选键-值对的数据值。例如,可执行“聚集-更新-分散”型指令。该指令可包括任何合适的数量和种类的操作数、位、标志、参数或其它元素。在一个实施例中,聚集-更新-分散指令的调入可引用指针,所述指针标识在其中存储用于操作的索引键的寄存器。指定的索引键可用作搜索键来聚集驻留在CAM数据结构234中的键-值对的数据值。在其中要执行的算术或逻辑操作未由指令操作码隐含地指定的实施例中,聚集-更新-分散指令的调入可引用指针,该指针标识在其中存储用作用于操作的操作数的标量数据值的寄存器。聚集-更新-分散指令的调入还可引用指针,该指针标识在其中存储标识要执行的算术或逻辑操作的数据的寄存器。例如,存储在标识的寄存器中的参数值可指定:标量数据值被添加到具有指定键的键-值对的数据值,以及表示这两个操作数之和的值应当被存储为CAM数据结构234中的键-值对中的更新的数据值。

在图5中图示的示例性实施例中,在(1)处,可由CAM控制逻辑232从处理器核204接收聚集-更新-分散指令及其参数(其可包括以上所述的指针中的任何一个或全部)。例如,在一个实施例中,聚集-更新-分散指令可由处理器核204内的分配器214(图5中未示出)发布给聚集-更新-分散加速器230(图5中未示出)内的CAM控制逻辑232。聚集-更新-分散指令可由CAM控制逻辑232逻辑地执行。

在该示例中,驻留在CAM数据结构234中的键-值对可以是存储在存储器系统250(未示出)内的密集阵列中的键-值对的子集。在一些实施例中,由CAM控制逻辑232执行聚集-更新-分散指令可包括:在(2)处,从由指令调入中引用的第一指针所标识的中读取索引键。例如,第一指针可标识寄存器文件510中的、在指令调入之前搜索索引键被加载到其中的第一参数寄存器512,并且CAM控制逻辑232可从该寄存器读取索引键。在其它实施例中,表示搜索索引键的值可被指定为指令的输入参数。聚集-更新-分散指令的执行可包括:在(3)处,CAM控制逻辑232搜索CAM数据结构234以确定存储在CAM数据结构234中的键-值对是否包括被从(2)处标识的寄存器读取或作为指令的输入参数被获得的索引键。如果是这样,包含匹配的索引键的条目可被返回到CAM控制逻辑232。在一个实施例中,这可包括返回针对存储在CAM数据结构234中的具有匹配的索引键的键-值对的数据值。

如果在(3)处,发现匹配的索引键并且返回针对存储在CAM数据结构234中的包括匹配的索引键的键-值对的数据值,聚集-更新-分散指令的执行可包括获得用于聚集-更新-分散指令的其它指令参数。在一些实施例中,在(4)处,CAM控制逻辑232可从由指令调入中引用的第二指针标识的位置读取表示ALU操作的数据。例如,第二指针可标识寄存器文件510中的、在指令调入之前表示ALU操作的数据被加载到其中的第二参数寄存器514,并且CAM控制逻辑232可从标识的寄存器读取该值。在其它实施例中,表示要执行的ALU操作的值可被指定为指令的输入参数,或者要执行的ALU操作可由用于该指令的操作码隐含地指定。在一些实施例中,在(5)处,CAM控制逻辑232可从由指令调入中引用的第三指针标识的位置读取标量数据值。例如,第三指针可标识寄存器文件510中的、在指令调入之前用于ALU操作的标量数据值被加载到其中的第三参数寄存器,并且CAM控制逻辑232可从标识的寄存器读取该值。在其它实施例中,用于ALU操作的标量数据值可被指定为指令的输入参数。

在该示例中,在(6)处,CAM控制逻辑232可将指定的ALU操作应用到针对存储在CAM数据结构234中的包括匹配的索引键的键-值对的数据值,并且应用到指定的标量数据值。例如,如果ALU操作是ADD(加法)操作,标量数据值的值可被加到针对标识的键-值对的数据值。在另一个示例中,如果ALU操作是OR(或)操作,按位OR操作可被应用到两个操作数值。在执行ALU操作之后,在(7)处,CAM控制逻辑232可用表示ALU操作的结果的数据值替换存储在CAM数据结构234中的包括匹配的索引键的键-值对的数据值。例如,在不同的实施例中,替换数据值可表示两个操作数值的和,或者可表示应用到两个操作数值的OR操作的结果。在一些实施例中,键-值对可通过它们在CAM数据结构234中的键以排序的次序存储。在这样的实施例中,包括其原始索引键和替换数据值的经修改的键-值对可被存储在CAM数据结构234中在包括匹配的索引键的原始键-值对先前被存储在CAM数据结构234中的位置中。

在一些实施例中,如果在(3)处,在CAM数据结构234中未发现具有匹配的索引键的条目,可省略如(4)至(7)所示的操作。在其它实施例中,如果在(3)处,在CAM数据结构234中未发现具有匹配的索引键的条目,可从高速缓存或从主存储器(未示出)获得包括匹配的索引键的键-值对,在此之后可执行如(4)至(6)所示的操作。在这种情况下,在(7)处,CAM控制逻辑232可在CAM数据结构234中存储新的键-值对,新的键-值对包括匹配的索引键和表示ALU操作的结果的数据值。在一些实施例中,根据用于对存储在CAM数据结构234中的所有的键-值对排序和存储的排序算法,可将新的键-值对存储CAM数据结构234中在由其索引键确定的位置中。在一些实施例中,将新的键-值对存储在CAM数据结构234中可使得逐出当前存储在CAM数据结构234中的键-值对是必要的。尽管在图5中图示的示例中,不执行在(4)和(5)处所示的操作,直到在确定包含匹配的索引键的键-值对驻留在CAM数据结构234中之后,但是在其它实施例中,可在(3)处所示的操作之前或之后执行这些操作,而不管是否在CAM数据结构234中发现包含匹配的索引键的键-值对。换句话说,在一些实施例中,在(4)和(5)处所示的操作可能不取决于在(3)处所示的操作的成果。然而,在CAM数据结构234中未发现具有匹配的索引键的条目的情况下,可省略如(6)和(7)所示的操作。

在一个实施例中,可以这样的操作的顺序针对每个聚集-更新-分散操作重复图5中图示的操作中的任何一个或全部。例如,在稀疏矢量中的值用于修改密集阵列中的值的情况下,可针对CAM数据结构234中的每个键-值对执行图5中图示的操作,对于其而言在稀疏矢量中还存在与相同键相关联的值。

图6是图示根据本公开的一些实施例的用于由处理器的聚集-更新-分散加速器执行聚集-更新-分散操作的方法600的流程图。方法600可由图1A-5或9A-16中所示的元件中的任何一个来实现。方法600可由任何合适的准则发起,并且可在任何合适的点发起操作。在一个实施例中,方法600可在605处发起操作。方法600可包括比图示的那些更多或更少的步骤。而且,方法600可以不同于以下图示的那些的次序执行其步骤。方法600可在任何合适的步骤处终止。而且,方法600可在任何合适的步骤处重复操作。方法600可与方法600的其它步骤并行地、或者与其它方法的步骤并行地执行其步骤中的任何一个。此外,方法600可被执行多次以或者顺序地或者并行地执行不同的聚集-更新-分散操作。

在605处,在一个实施例中,执行聚集-更新-分散型操作的指令可由处理器核接收和解码。在610处,指令及其参数可被引导到处理器核的聚集-更新-分散加速器(GUSA)以用于执行。在615处,基于指令参数,可获得索引键。例如,在一些实施例中,表示索引键的数据可被包括在指令本身中。在其它实施例中,指令可包括可从其获得索引键的位置的指针或其它标识符。一旦获得索引键,它可用作搜索索引,用于针对包括匹配的键的条目搜索CAM数据结构。

在620处,可做出关于CAM数据结构中的条目是否包括在615处获得的索引键的确定。如果在620处确定CAM数据结构中的条目包括索引键,方法600可前进到630。否则,方法600可前进到625。在625处,可从高速缓存(例如备份高速缓存)或从主存储器获得包括指定的索引键的索引-值对,在此之后方法600可在640处继续。在630处,可从CAM数据结构获得针对指定的索引键的索引-值对,在此之后方法600可在640处继续。

在640处,基于指令参数,可确定要执行的操作和用于该操作的标量数据值。例如,在一些实施例中,表示要执行的操作的数据可被包括在指令本身中。在其它实施例中,指令可包括可以从其获得表示要执行的操作的数据的位置的指针或其它标识符。类似地,在一些实施例中,标量数据值可被包括在指令本身中。在其它实施例中,指令可包括可以从其获得标量数据值的位置的指针或其它标识符。

一旦已经获得了所有的指令参数,在645处,确定的操作可被应用到存储在CAM数据结构条目中的数据值以及用于该操作的标量数据值。在650处,操作的结果可被存储在新的或现有的CAM数据结构条目中。存储结果可包括:如果发现包括索引键的现有条目,用结果替换数据值,或者逐出条目,如果需要的话。随后,在655处,聚集-更新-分散指令可被退役。

在各种实施例中,可应用各种自动化或手动应用的替换策略中的任何一个来选择CAM数据结构中的其内容将被逐出以为新条目腾出空间的条目。例如,在一个实施例中,最近最少使用(LRU)替换策略可指定:存储在CAM数据结构中的最近最少使用的值应当用新值来替换。在其它实施例中,聚集-更新-分散加速器可支持明确的逐出-存储型指令。在这样的实施例中,基于适合于特定应用的任何准则,指令本身可明确指定要逐出的特定条目和替换的其内容。

图7是图示根据本公开的一些实施例的用于使用聚集-更新-分散加速器来执行一个或多个聚集-更新-分散操作的方法700的流程图。方法700可由图1A-5或9A-16中所示的元件的任何一个来实现。方法700可由任何合适的准则发起,并且可在任何合适的点发起操作。在一个实施例中,方法700可在705处发起操作。方法700可包括比图示的那些更多或更少的步骤。而且,方法700可以不同于以下图示的那些的次序执行其步骤。方法700可在任何合适的步骤处终止。而且,方法700可在任何合适的步骤处重复操作。方法700可与方法600的其它步骤并行地、或者与其它方法的步骤并行地执行其步骤中的任何一个。此外,方法700可被执行多次以或者顺序地或并行地执行不同的聚集-更新-分散操作。

在705处,在一些实施例中,表示一个或多个聚集-更新-分散型操作的程序代码由编译器、解释器或翻译器接收,其中基于相应的标量数据值通过应用指定的操作而更新密集阵列的相应条目。在这样的实施例中,在710处,对于聚集-更新-分散操作中给定的一个,定义聚集-更新-分散操作的一个或多个指令可用单个可执行指令替换,其参数标识密集阵列的相应条目、要执行的操作以及相应标量数据值。在其它实施例中,由处理器接收的指令流可包括表示单个可执行聚集-更新-分散型指令的数据,其参数和/或操作码标识密集阵列的相应条目、要执行的操作以及相应标量数据值,在这种情况下,可略去在705和710处所示的操作。

在715处,在一些实施例中,在程序代码的执行期间,第一寄存器可被加载有标识密集阵列的相应条目的索引键,第二寄存器可被加载有将作为聚集-更新-分散型操作的部分被执行的算术或逻辑操作的标识符,并且第三寄存器可被加载有用于操作的相应标量数据值。在一个示例性实施例中,这些寄存器加载中的每一个可由通过编译器、解释器或翻译器生成的相应解码指令(例如uop)执行。在一些实施例中,在720处,用于聚集-更新-分散操作(例如uop)的经解码的单个指令的表示以及第一寄存器、第二寄存器和第三寄存器的标识符可被引导到聚集-更新-分散加速器(GUSA)以用于执行。在其它实施例中,要执行的算术或逻辑操作可由聚集-更新-分散型操作的操作码隐含地指定。

在一些实施例中,在725处,在由GUSA执行单个指令之后,可将操作的结果从第一寄存器移动到CAM数据结构和/或移动到高速缓存(诸如备份高速缓存)。在一些实施例中,可在多个步骤中执行该移动。例如,操作的结果最初可由ALU或者具有CAM控制逻辑的其它电路或逻辑存储在CAM数据结构中。随后可将结果复制(例如备份)或逐出到高速缓存,在此之后其可被最终冲洗到主存储器。如果在730处,在要执行的程序代码中存在更多的聚集-更新-分散型操作,方法700可返回到710,从该点开始,其可适当地针对程序代码中的附加的聚集-更新-分散型操作中的每一个重复如710-725所示的操作中的任何一个或全部。当在要执行的程序代码中不存在附加的聚集-更新-分散型操作时,可不存在由专用聚集-更新-分散加速器采取的进一步的行动。

虽然已经在标量操作方面主要描述了用于使用基于CAM的聚集-更新-分散加速器加速聚集-更新-分散型操作的各种机制,但是在其它实施例中,由聚集-更新-分散加速器执行的操作可以是扩展的矢量操作,例如SIMD操作。在这样的实施例中,指令调入可标识在其中在不同的通道中存储多个索引的矢量寄存器,在其中存储标识要执行的算术或逻辑操作的数据的寄存器,以及在其中存储用作用于操作的相应附加操作数的多个标量值的矢量寄存器。在一些这样的实施例中,指令集架构可包括用于目的地操作数的条件执行和/或高效合并的专用屏蔽(mask)寄存器。用于执行聚集-更新-分散操作的至少一些扩展的矢量指令可包括对广播的支持。用于执行聚集-更新-分散操作的至少一些扩展的矢量指令可包括对嵌入式屏蔽的支持以使能判定(predication)。例如,在一个实施例中,用于执行聚集-更新-分散操作的扩展的矢量指令的编码可包括标识八个专用屏蔽寄存器k0-k7中的任何一个的编码。标识的屏蔽寄存器的每一位可在其被应用到相应源矢量元素或目的地矢量元素时管理矢量操作的行为。例如,在一个实施例中,这些屏蔽寄存器中的七个(k1-k7)可用于有条件地管理扩展的矢量指令的每数据元素计算操作。在该示例中,如果未设置对应的掩蔽位,不针对给定的矢量元素执行操作。在另一个实施例中,屏蔽寄存器k1-k7可用于有条件地管理对扩展的矢量指令的目的地操作数的每元素更新。在该示例中,如果未设置对应的掩蔽位,则不用操作的结果更新给定的目的地元素。

在一个实施例中,用于执行聚集-更新-分散操作的扩展的矢量指令的编码可包括指定将应用到扩展的矢量指令的目的地(结果)矢量的屏蔽的类型的编码。例如,该编码可指定合并屏蔽或零屏蔽是否被应用到矢量操作的执行。如果该编码指定合并屏蔽,屏蔽寄存器中其对应的位未被设置的任何目的地矢量元素的值可被保留在目的地矢量中。如果该编码指定零屏蔽,屏蔽寄存器中其对应的位未被设置的任何目的地矢量元素的值可用目的地矢量中的零值来替换。在一个示例性实施例中,屏蔽寄存器k0不用作用于矢量操作的判定操作数。在该示例中,将以其它方式选择掩蔽k0的编码值可代替地选择全一的隐含掩蔽值,从而有效地禁用掩蔽。在该示例中,屏蔽寄存器k0可用于采用一个或多个屏蔽寄存器作为源或目的地操作数的任何指令。

如本文所述,基于CAM的聚集-更新-分散加速器可用于加速处理器中的聚集-更新-分散型操作的执行。这些类型的操作用在线性分类器中的梯度更新步骤中以及常用的其它机器学习技术中。机器学习应用可计及针对数据中心的工作负载的显著部分,并且本文所述的技术可为指令集架构提供对于这些工作负载的大的性能提升。可从这些技术的使用受益的其它类型的应用包括:包括大量箱(bin)的直方图计算,或者在高性能计算中常见的类似计算模式。

如在本文中详细描述的,基于CAM的聚集-更新-分散加速器可提供相对于这些操作的基于典型加载/存储的软件实现方式以及相对于基于聚集/分散的SIMD实现方式的益处。例如,在各种实施例中,本文所述的用于加速聚集-更新-分散操作的基于CAM的方法可允许处理器在一个周期中执行多个聚集-更新-分散操作,即使不存在空间局部性,可减少使用现有方法将以其它方式所需的高速缓存访问的数量,可减少使用现有方法将以其它方式所需的TLB查找的数量,和/或可通过减少地址字段的大小(例如通过使用索引的寻址)和每个CAM条目的值字段的大小(例如通过使用32位或64位,而不是用于该字段的64字节,这取决于正在什么类型的值上操作)来优化用于低空间局部性情况的存储。在一些实施例中,由于这些数据结构的使用频率的并行分布,所以即使CAM数据结构本身不存储大量的条目,CAM中的命中率也可相对高。例如,基于对机器学习应用内的典型分布的初始评估,针对至少这些类型的工作负载可预期CAM数据结构内部相当高的命中率。

以下描述的图包括实现以上所述的硬件组件和/或指令的实施例的架构和系统的详细示例。在一些实施例中,以上所述的一个或多个硬件组件和/或指令可如以下详细描述的那样被仿真,或者可被实现为软件模块。

示例寄存器架构

图8是根据一个实施例的图示寄存器架构800的框图。在图示的实施例中,存在32个矢量寄存器810,其中的每一个是512位宽。在下面的描述中,这些寄存器被称为寄存器ZMM0至ZMM31。如图8中所图示,较低的16个ZMM寄存器的最低阶256位被覆盖在寄存器YMM0至YMM16上。另外,较低的16个ZMM寄存器的最低阶128位(对应于YMM寄存器的最低阶128位)被覆盖在寄存器XMM0至XMM15上。具体的矢量友好指令格式QAC00在这些经覆盖的寄存器文件上操作,如以下表格中所图示。

换句话说,矢量长度字段QAB59B可用于要在其上操作的矢量的最大长度与一个或多个其它较短长度之间选择,其中每个这样的较短长度可以是前述矢量长度选项的长度的一半。使用不包括矢量长度字段QAB59B的指令模板定义的指令可在用于指定的矢量寄存器的最大矢量长度的矢量上操作。在一个实施例中,使用具体的矢量友好指令格式QAC00的B类指令模板定义的指令可在封装或标量单/双精度浮点数据以及封装或标量整数数据上操作。可在矢量寄存器(例如ZMM、YMM或XMM寄存器)中的最低阶数据元素位置上执行标量操作。在这种情况下,在不同的实施例中,矢量寄存器的较高阶数据元素位置的内容可由于指令的执行而不变,或者可被归零(zero out)。

在图示的实施例中,存在八个写入屏蔽寄存器815(被称为写入屏蔽寄存器k0至k7),其中的每一个为64位宽。在替代实施例中,写入屏蔽寄存器815可以是16位宽。如先前所述,在一个实施例中,矢量屏蔽寄存器k0不能用作写入掩蔽。在这种情况下,当指令包括将通常指示k0用于写入掩蔽的编码时,可代替地应用0xFFFF的硬连线写入掩蔽,有效地禁用针对该指令的写入掩蔽。

在图示的实施例中,存在连同现有的x86寻址模式一起用于寻址存储器操作数的十六个64位通用寄存器825。这些寄存器由名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8至R15引用。

在图示的实施例中,寄存器架构800包括其上是别名的MMX封装整数扁平(flat)寄存器文件850的标量浮点堆栈寄存器文件(例如x87堆栈)845。如在该示例性实施例中所图示,x87堆栈845可以是用于使用x87指令集扩展在32位、64位和/或80位浮点数据上执行标量浮点操作的八元素堆栈。在该示例性实施例中,MMX寄存器用于在64位封装整数数据上执行操作,并且为在MMX与XMM寄存器之间执行的一些操作保持操作数。替代实施例可包括更宽或更窄的寄存器。另外,替代实施例可包括更多、更少或不同的寄存器文件和寄存器。

示例性核架构、处理器和计算机架构

处理器核可以不同的方式、为了不同的目的、并在不同的处理器中来实现。例如,在各种实施例中,这样的核可包括:旨在用于通用计算的通用有序核,旨在用于通用计算的高性能通用无序核,和/或旨在主要用于图形和/或科学计算(例如高吞吐量计算)的专用核。在各种实施例中,不同的处理器可包括CPU和协处理器,该CPU包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个或多个通用无序核,该协处理器包括旨在主要用于图形和/或科学计算(例如高吞吐量计算)的一个或多个专用核。在不同的实施例中,这样的不同处理器可导致不同的计算机系统架构。例如,在一些实施例中,协处理器可在与CPU独立的芯片上。在其它实施例中,协处理器可在与CPU独立的管芯上,但是可在与CPU相同的封装中。在一些实施例中,协处理器可在与CPU相同的管芯上。在这种情况下,协处理器有时可被称为可包括集成图形和/或科学逻辑(例如高吞吐量逻辑)的专用逻辑,或者可被称为专用核。在一些实施例中,片上系统可在相同管芯上包括:如上所述的CPU(其可被称为一个或多个应用核或一个或多个应用处理器)、如上所述的协处理器、以及附加功能性。根据一些实施例,以下描述示例性核架构、处理器和计算机架构。

示例性核架构

有序和无序的核框图

图9A是图示根据一些实施例的示例性有序流水线和寄存器重命名、无序发布/执行流水线的框图。图9B是图示根据一些实施例的将包括在处理器中的有序架构核和寄存器重命名、无序发布/执行逻辑的框图。图9A中的实线框图示有序流水线,而虚线框图示寄存器重命名、无序发布/执行流水线。类似地,图9B中的实线框图示有序架构逻辑,而虚线框图示寄存器重命名逻辑和无序发布/执行逻辑。

在图9A中,处理器流水线900包括取出级902、长度解码级904、解码级906、分配级908、重命名级910、调度级912(也称为分派或发布级)、寄存器读取/存储器读取级914、执行级916,回写/存储器写入级918、异常处理级922和提交级924。

在图9B中,箭头表示两个或更多个单元之间的耦合,并且箭头的方向指示那些单元之间的数据流的方向。在该示例中,图9B图示包括耦合到执行引擎单元950的前端单元930的处理器核990,前端单元930和执行引擎单元950两者都可耦合到存储器单元970。在不同实施例中,核990可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、甚长指令字(VLIW)核或者混合或替代核类型的核。在各种实施例中,核990可以是专用核,诸如例如网络核、通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核或另一类型的专用核。

在该示例中,前端单元930包括耦合到指令高速缓存单元934的分支预测单元932。指令高速缓存单元934可耦合到指令翻译后备缓冲器(TLB)936。TLB 936可耦合到指令取出单元938,指令取出单元938可耦合到解码单元940。解码单元940可解码指令,并且可生成作为输出的一个或多个微操作、微代码入口点、微指令、其它指令或其它控制信号,其被从原始未解码指令解码,或者以其它方式反映原始未解码指令,或者从原始未解码指令导出。在不同的实施例中,解码单元940可使用各种合适机制中的任何一个来实现。合适机制的示例可包括但不限于查找表、硬件电路、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)。在一个实施例中,指令高速缓存单元934可进一步耦合到存储器单元970中的2级(L2)高速缓存单元976。在一个实施例中,核990可包括存储针对某些宏指令(在解码单元940内或在前端单元930内的其它地方)的微代码的微代码ROM或其它介质。解码单元940可耦合到执行引擎单元950内的重命名/分配器单元952。

在该示例中,执行引擎单元950包括重命名/分配器单元952,重命名/分配器单元952可耦合到退役单元954和一组一个或多个调度器单元956。一个或多个调度器单元956可表示任何数量的各种类型的不同调度器,包括实现预留站点的那些调度器或者实现中央指令窗口的那些调度器。如该示例中所图示的,一个或多个调度器单元956可耦合到一个或多个物理寄存器文件单元958。物理寄存器文件单元958中的每一个可表示一个或多个物理寄存器文件,一个或多个物理寄存器文件中不同的物理寄存器文件存储一个或多个不同数据类型的数据,包括但不限于标量整数、标量浮点、封装整数、封装浮点、矢量整数、矢量浮点或状态数据类型。使用状态数据类型的一个示例可以是指示要执行的下一个指令的地址的指令指针。在一个实施例中,物理寄存器文件单元958可包括矢量寄存器单元、写入屏蔽寄存器单元和标量寄存器单元(未示出)。这些寄存器单元可提供架构矢量寄存器、写入屏蔽寄存器(例如矢量屏蔽寄存器)和通用寄存器。在一些实施例中,这些寄存器可类似于图8中图示和以上所述的寄存器。

在图9B中,一个或多个物理寄存器文件单元958被示为由退役单元954重叠,以图示可实现寄存器重命名和无序执行所用的各种方式。例如,在不同的实施例中,寄存器重命名和无序执行可使用一个或多个重排序缓冲器和一个或多个退役寄存器文件来实现;使用一个或多个未来文件、一个或多个历史缓冲器以及一个或多个退役寄存器文件来实现;或者使用寄存器映射和寄存器池来实现。一般而言,架构寄存器可从处理器的外部和/或从程序员的角度可见。寄存器不限于任何特定的已知类型的电路。相反,只要它们存储和提供如本文所述的数据,各种不同类型的寄存器中的任何一个就可适合于包括在核990中。合适的寄存器的示例包括但不限于专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器以及专用和动态分配的物理寄存器的组合。在图9B中图示的示例中,退役单元954和一个或多个物理寄存器文件单元958耦合到一个或多个执行群集960。执行群集960中的每一个可包括一个或多个执行单元962的集合以及一个或多个存储器访问单元964的集合。执行单元962可执行各种操作(例如移位、加法、减法、乘法),并且可在各种类型的数据(例如标量浮点、封装整数、封装浮点、矢量整数、矢量浮点)上操作。尽管一些实施例可包括专用于具体功能或功能集合的许多执行单元,但是其它实施例可仅仅包括一个执行单元,或者可包括其全部都执行所有支持的功能或操作的多个执行单元。在图9B中图示的示例中,由于一些实施例包括用于某些类型的数据/操作的单独的流水线,所以一个或多个调度器单元956、一个或多个物理寄存器文件单元958和一个或多个执行群集960被示为潜在地包括多个这样的单元。例如,一些实施例可包括标量整数流水线、标量浮点/封装整数/封装浮点/矢量整数/矢量浮点流水线、和/或存储器访问流水线,它们中的每一个包括其自己的调度器单元、物理寄存器文件单元和/或执行群集。在包括单独的存储器访问流水线的一些实施例中,仅仅该流水线的执行群集包括存储器访问单元964。还应当理解的是在使用单独的流水线的情况下,这些流水线中的一个或多个可以是无序发布/执行流水线,并且其余的可以是有序执行流水线。

在图9B中图示的示例中,存储器访问单元964的集合可耦合到存储器单元970,存储器单元970包括数据TLB单元972。数据TLB单元972可耦合到数据高速缓存单元974,数据高速缓存单元974进而可耦合到2级(L2)高速缓存单元976。在一个示例性实施例中,存储器访问单元964可包括加载单元、存储地址单元和存储数据单元,其中的每一个可耦合到存储器单元970中的数据TLB单元972。L2高速缓存单元976可耦合到一个或多个其它级的高速缓存,并且最终耦合到主存储器。尽管图9B图示其中指令高速缓存单元934、数据高速缓存单元974和2级(L2)高速缓存单元976驻留在核990内的实施例,但是在其它实施例中,一个或多个高速缓存或高速缓存单元可在核内部、在核外部,或者以不同组合被分配在核内部和核外部。

在一个示例性实施例中,图9B中图示的寄存器重命名、无序发布/执行核架构可如下实现图9B中图示的流水线900。指令取出单元938可执行取出和长度解码级902和904的功能。解码单元940可执行解码级906的功能。重命名/分配器单元952可执行分配级908和重命名级910的功能。一个或多个调度器单元956可执行调度级912的功能。一个或多个物理寄存器文件单元958和存储器单元970可共同地执行寄存器读取/存储器读取级914的功能。一个或多个执行群集960可执行执行级916的功能。存储器单元970和一个或多个物理寄存器文件单元958可共同地执行回写/存储器写入级918的功能。在不同的实施例中,各种单元(其中的一些可能未被示出)可在执行异常处理级922的功能中涉及。退役单元954和一个或多个物理寄存器文件单元958可共同地执行提交级924的功能。

在不同的实施例中,核990可支持一个或多个指令集,包括本文所述的一个或多个指令。例如,在各种实施例中,核990可支持x86指令集(具有或不具有已被包括在近期版本中的扩展);加利福尼亚的桑尼维尔的MIPS科技的MIPS指令集;和/或加利福尼亚的桑尼维尔的ARM控股的ARM指令集(具有或不具有诸如NEON之类的可选附加扩展)。在一个实施例中,核990可包括支持封装数据指令集扩展(例如AVX1或AVX2)的逻辑,从而允许使用封装数据执行许多多媒体应用所使用的操作。

在一些实施例中,核990可支持多线程(例如执行操作或线程的两组或更多并行集合),并且可以各种方式来这样实现。例如,核990可包括对时间分片多线程、同时多线程(其中单个物理核提供针对物理核正在同时执行的线程中的每一个的逻辑核)或者时间分片和同时多线程的组合的支持。在一个实施例中,例如,核990可包括对时间分片取出和解码以及对随后的流水线级中(诸如在Intel® Hyperthreading技术中)的同时多线程的支持。

尽管本文在无序执行的上下文中描述寄存器重命名,但是应当理解:在一些实施例中,寄存器重命名可用在有序架构中。尽管在图9B中图示的示例性实施例中,核990分别包括单独的指令和数据高速缓存单元934和974以及共享的L2高速缓存单元976,但是在其它实施例中,核990可包括:用于指令和数据两者的诸如例如1级(L1)内部高速缓存之类的单个内部高速缓存,或者多级内部高速缓存。在一些实施例中,系统可包括内部高速缓存和外部高速缓存(例如在核和/或处理器外部的高速缓存)的组合。在其它实施例中,所有的高速缓存可在核和/或处理器外部。

具体的示例性有序核架构

图10A和图10B是图示有序核架构的更具体示例的框图,其中核可以是在芯片中的几个逻辑块中的一个(例如包括相同类型和/或不同类型的其它核)。如该示例中所图示,逻辑块可通过高带宽的管芯上互连网络(例如环形网络)与一些固定功能逻辑、存储器I/O接口以及其它必要的I/O逻辑通信,这取决于应用。

图10A是图示根据一些实施例的单个处理器核连同其到管芯上互连网络(被示为环形网络1002)及到其2级(L2)高速缓存1004的本地子集的连接的框图。在一个实施例中,指令解码器1000可支持具有封装数据指令集扩展的x86指令集。L1高速缓存1006可通过标量和矢量单元允许对高速缓存存储器的低延迟访问。在一个实施例中(例如为了简化设计),标量单元1008和矢量单元1010可使用单独的寄存器组(例如分别是标量寄存器1012和矢量寄存器1014),并且可将它们之间传送的数据写入到存储器,并且然后从1级(L1)高速缓存1006中读回。然而,其它实施例可使用不同的方法。例如,它们可包括单个寄存器组,或者可包括允许数据在两个寄存器文件之间传送而不被写入到存储器并读回的通信路径。

在该示例中,L2高速缓存的本地子集1004可以是全局L2高速缓存的一部分,该部分被划分为单独的本地子集,例如其中每处理器核一个子集。每个处理器核可具有到其自己的L2高速缓存的本地子集1004的直接访问路径。由处理器核读取的数据可被存储在其L2高速缓存子集1004中,从其L2高速缓存子集1004中,其可被快速地并且与由其它处理器核对它们自己的本地L2高速缓存子集的访问并行地访问。如果有必要,可从其它L2高速缓存子集冲洗由处理器核写入并存储在其自己的L2高速缓存子集1004中的数据。在一些实施例中,环形网络1002可确保对共享数据的一致性。环形网络可以是双向的,以允许诸如处理器核、L2高速缓存和其它逻辑块之类的代理在芯片内彼此通信。在一个实施例中,每个环形数据路径可以是每方向1012位宽。

图10B图示根据一些实施例的在图10A中图示的处理器核的部分的扩展视图。在该示例中,图10B包括:可以是L1高速缓存1004的部分的L1数据高速缓存1006A,以及关于矢量单元1010和矢量寄存器1014的更多细节。具体地,矢量单元1010可以是包括16-宽矢量ALU 1028的16-宽矢量处理单元(VPU)。ALU 1028可被配置成执行整数、单精度浮动和双精度浮动指令中的一个或多个。VPU还可支持在存储器输入上拌和(swizzle)寄存器输入(使用拌和单元1020)、数值转换(使用数值转换单元1022A和1022B)和复制(使用复制单元1024)。包括写入屏蔽寄存器1026可允许判定所得到的矢量写入。

图11是图示处理器1100的框图,该处理器1100在一些实施例中可包括多于一个核、集成存储器控制器和/或可以是专用逻辑(诸如用于集成图形计算)。图11中的实线框图示处理器1100,该处理器1100包括单个核1102A、系统代理1110和一个或多个总线控制器单元1116的集合。用虚线框的可选添加,处理器1100的替代实施例包括多个核1102A-1102N,并且还包括系统代理单元1110内的一个或多个集成存储器控制器单元1114的集合以及专用逻辑1108。在一些实施例中,核1102A-1102N中的一个或多个可类似于图9B中图示的处理器核990或者图10A和10B中图示的处理器核。

在一些实施例中,处理器1100可表示CPU,其中专用逻辑1108包括集成图形和/或科学逻辑(其可包括一个或多个核),并且其中核1102A-1102N包括一个或多个通用核(例如通用有序核、通用无序核或两者的组合)。在其它实施例中,处理器1100可表示协处理器,其中核1102A-1102N包括旨在主要用于图形和/或科学计算(例如高吞吐量计算)的大量专用核。在又其他实施例中,处理器1100可表示其中核1102A-1102N包括大量通用有序核的协处理器。因而,在不同的实施例中,处理器1100可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量的“许多集成核”(MIC)协处理器(例如包括30个或更多个核)、嵌入式处理器或另一个类型的处理器。在不同的实施例中,可在一个芯片上或者在多于一个的芯片上实现处理器1100。处理器1100可以是使用诸如例如BiCMOS、CMOS或NMOS之类的许多工艺技术中的任何一种的一个或多个衬底的一部分和/或可在该一个或多个衬底上被实现。

在图11中图示的示例中,存储器层次结构包括:在核1102A到1102N(被示为高速缓存单元1104A至1104N)中的每一个内的一级或多级高速缓存,一个或多个共享高速缓存单元1106的集合,以及外部存储器(未示出),其中的一些或全部耦合到集成存储器控制器单元1114的集合。共享高速缓存单元1106的集合可包括一个或多个中级高速缓存,诸如2级(L2)高速缓存、3级(L3)高速缓存、4级(L4)高速缓存、其它级高速缓存、最后一级高速缓存(LLC)和/或其组合。在一个实施例中,基于环的互连单元1112可用于将专用逻辑1108(其可包括集成图形逻辑)、共享高速缓存单元1106的集合以及系统代理单元1110/一个或多个集成存储器控制器单元1114互连。在其它实施例中,任何数量的其它合适的技术可用于互连这样的单元。在一个实施例中,可在一个或多个高速缓存单元1106与核1102A-1102N之间保持一致性。

在一些实施例中,核1102A-1102N中的一个或多个可能能够多线程。在一些实施例中,系统代理1110可包括用于协调和操作核1102A-1102N的电路或逻辑。例如,系统代理单元1110可包括功率控制单元(PCU)和显示单元。PCU可以是或包括用于调节核1102A-1102N和专用逻辑1108(其可包括集成图形逻辑)的功率状态的逻辑和电路。显示单元可包括用于驱动一个或多个外部连接的显示器的电路或逻辑。

在各种实施例中,核1102A-1102N在架构指令集方面可以是同构的或异构的。也就是说,核1102A-1102N中的两个或更多个可能够执行相同的指令集,而其它核可能能够仅仅执行该指令集的子集或者可执行不同的指令集。

示例性计算机架构

图12至14是图示适合于包括一个或多个处理器的示例性系统的框图,所述一个或多个处理器包括但不限于本文所述的处理器。图15图示可包括一个或多个处理器核的示例性片上系统(SoC),所述一个或多个处理器核包括但不限于本文所述的处理器核。用于膝上型电脑、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络中心、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备和各种其它电子设备的其它系统设计和配置也可适合于包括本文所述的处理器和/或处理器核。一般而言,能够并入如本文所公开的处理器和/或其它执行逻辑的各种各样的系统或电子装置一般适合于包括本文所述的处理器和/或处理器核。

图12是图示根据本公开的一个实施例的系统1200的框图。如该示例中所图示,系统1200可包括耦合到控制器中心1220的一个或多个处理器1210。在一些实施例中,控制器中心1220可包括图形存储器控制器中心(GMCH)1290和输入/输出中心(IOH)1250。在一些实施例中,GMCH 1290和IOH 1250可在独立的芯片上。在该示例中,GMCH 1290可包括存储器1240和协处理器1245分别耦合到的存储器和图形控制器(未示出)。在该示例中,IOH 1250将一个或多个输入/输出(I/O)设备1260耦合到GMCH 1290。在各种实施例中,存储器和图形控制器中的一个或两者可被集成在处理器内(如本文所述),存储器1240和/或协处理器1245可直接耦合到一个或多个处理器1210,或者控制器中心1220可被实现在包括IOH 1250的单个芯片中。

在图12中用虚线表示附加处理器1210的可选性质。每个处理器1210可包括本文所述的处理核中的一个或多个,并且可由图11中图示和本文所述的处理器1100的版本来实现。

在各种实施例中,存储器1240可以例如是动态随机存取存储器(DRAM)、相变存储器(PCM)或者两者的组合。在至少一些实施例中,控制器中心1220可经由诸如前侧总线(FSB)之类的多点总线、诸如QuickPath互连(QPI)之类的点对点接口或者类似的连接与一个或多个处理器1210通信,其中任何一个在图12中可被表示为接口1295。

在一个实施例中,协处理器1245可以是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器或另一个类型的协处理器。在一个实施例中,控制器中心1220可包括集成图形加速器(未示出)。

在一些实施例中,在处理器1210的不同处理器的物理资源之间可存在各种差异。例如,在包括架构特性、微架构特性、热特性、功耗特性和/或其它性能相关特性的一系列度量指标方面,在处理器的物理资源之间可能存在差异。

在一个实施例中,处理器1210可执行控制一般类型的数据处理操作的指令。嵌入在指令内的可以是协处理器指令。处理器1210可将这些协处理器指令识别为应当由附连的协处理器1245执行的类型。相应地,处理器1210可在协处理器总线或其它互连上向协处理器1245发布这些协处理器指令(或表示协处理器指令的控制信号)。一个或多个协处理器1245可接受并执行接收的协处理器指令。

图13是图示根据本公开的一个实施例的第一示例性系统1300的框图。如图13中所示,多处理器系统1300实现点对点互连系统。例如,系统1300包括经由点对点互连1350彼此耦合的第一处理器1370和第二处理器1380。在一些实施例中,处理器1370和1380中的每一个可以是图11中图示的处理器1100的版本。在一个实施例中,处理器1370和1380可由相应的处理器1210实现,而协处理器1338可由协处理器1245实现。在另一个实施例中,处理器1370和1380可分别由处理器1210和协处理器1245实现。

分别示出包括集成存储器控制器(IMC)单元1372和1382的处理器1370和1380。处理器1370还包括作为其总线控制器单元的部分的点对点(P-P)接口1376和1378。类似地,处理器1380包括P-P接口1386和1388。处理器1370和1380可经由点对点(P-P)接口1350、使用P-P接口1378和1388交换信息。如图13中所示,IMC 1372和1382将处理器耦合到相应的存储器——被示为存储器1332和存储器1334,存储器1332和存储器1334可以是本地附连到相应的处理器的主存储器的部分。

处理器1370和1380可分别经由单独的P-P接口1352和1354、使用点对点接口电路1376、1394、1386和1398与芯片组1390交换信息。芯片组1390可能可选地经由接口1392、通过高性能接口1339与协处理器1338交换信息。在一个实施例中,协处理器1338可以是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器或另一种类型的专用处理器。在一个实施例中,协处理器1338可包括高性能图形电路,并且接口1339可以是高性能图形总线。

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

芯片组1390可经由接口1396耦合到第一总线1316。在各种实施例中,第一总线1316可以是外围组件互连(PCI)总线、快速PCI(PCI Express)总线或另一个第三代I/O互连总线,但是本公开的范围不限于这些具体的总线类型。

如图13中所示,各种I/O设备1314可连同总线桥1318一起耦合到第一总线1316。总线桥1318可将第一总线1316耦合到第二总线1320。在一个实施例中,诸如一个或多个协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列和/或任何其它处理器之类的一个或多个附加处理器1315可耦合到第一总线1316。在一个实施例中,第二总线1320可以是低引脚数(LPC)总线。各种设备可耦合到第二总线1320,包括例如键盘和/或鼠标1322、一个或多个通信设备1327以及数据存储单元1328。在一个实施例中,数据存储单元1328可以是可包括指令/代码和数据1330的盘驱动器或另一个大容量存储设备。在一些实施例中,音频I/O设备1324可耦合到第二总线1320。注意的是其它架构是可能的。例如,代替图13中图示的点对点架构,系统可实现多点总线或另一种类型的互连架构。

图14是图示根据本公开的一个实施例的第二示例性系统1400的框图。图13和14中的相同元件承载相同的附图标记,并且已经从图14省略图13的某些方面,以便避免模糊图14的其它方面。

图14图示处理器1370和1380可分别包括集成存储器和I/O控制逻辑(“CL”)单元1472和1482。因而,CL 1472和CL 1482可包括集成存储器控制器单元,并且还可包括I/O控制逻辑。图14图示不仅存储器1332和1334分别耦合到CL 1472和CL1482,而且I/O设备1414也耦合到CL 1472和CL1482。在该示例性系统中,传统I/O设备1415也可经由接口1396耦合到芯片组1390。

图15是图示根据本公开的一个实施例的片上系统(SoC)1500的框图。图15和图11中的类似元件承载相同的附图标记。而且,虚线框表示在更高级的SoC上的可选特征。在图15中,一个或多个互连单元1502耦合到应用处理器1510,该应用处理器1510包括一组一个或多个核1102A-1102N(包括相应的本地高速缓存单元1104A-1104N)的集合和一个或多个共享高速缓存单元1106。一个或多个互连单元1502还耦合到系统代理单元1110、一个或多个总线控制器单元1116、一个或多个集成存储器控制器单元1114、一个或多个协处理器1520的集合、静态随机存取存储器(SRAM)单元1530、直接存储器存取(DMA)单元1532以及用于耦合到一个或多个外部显示器的显示单元1540。在一个实施例中,一个或多个协处理器1520可包括专用处理器,诸如例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器或另一个类型的协处理器。在另一个实施例中,一个或多个协处理器1520可以是包括集成图形逻辑、图像处理器、音频处理器和/或视频处理器的媒体处理器。

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

诸如图13中图示的代码1330之类的程序代码可被应用到输入指令,以执行本文所述的功能并生成输出信息。可以已知的方式将输出信息应用到一个或多个输出设备。为了本公开的目的,处理系统可包括任何系统,其包括处理器,诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。

在一些实施例中,程序代码可以高级面向过程或面向对象编程语言来实现,以与处理系统通信。在其它实施例中,程序代码也可用汇编或机器语言来实现。实际上,本文所述的机制在范围上不限于任何特定的编程语言。一般而言,编程语言可以是编译语言或解释语言。

至少一个实施例的一个或多个方面可由存储在表示处理器内的各种逻辑的非暂时性机器可读介质上的代表性指令实现,该代表性指令在由机器读取时使机器制造逻辑以执行本文所述的技术。有时被称为“IP核”的这样的表示可被存储在有形的机器可读介质上,并且被供应给各种客户或制造设施以加载到实际制作逻辑或处理器的制造机器中。

这样的机器可读存储介质可包括而不限于由机器或设备制造或形成的物品的非暂时性有形装置,包括诸如硬盘之类的存储介质,任何其它类型的盘(包括软盘、光盘、压缩盘只读存储器(CD-ROM)、压缩盘可重写存储器(CD-RW)和磁光盘)、半导体设备(诸如只读存储器(ROM)、诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)之类的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM))、磁卡或光卡、或者适合于存储电子指令的任何其它类型的介质。

相应地,该公开的实施例还可包括非暂时性有形机器可读介质,其包含指令或包含设计数据,诸如硬件描述语言(HDL),其定义本文所述的结构、电路、装置、处理器和/或系统特征。这样的实施例也可被称为程序产品。

仿真

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

图16是图示根据一些实施例的使用编译器和软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在图示实施例中,指令转换器可以是软件指令转换器,但是在其它实施例中,指令转换器可以软件、固件、硬件或其各种组合来实现。图16图示:可使用x86编译器1604编译用高级语言1602的程序以生成x86二进制代码1606,x86二进制代码1606可由具有至少一个x86指令集核的处理器1616原生执行。具有至少一个x86指令集核的处理器1616表示可以通过兼容地执行或以其它方式处理以下来执行与具有至少一个x86指令集核的Intel处理器大体相同的功能的任何处理器:(1)Intel x86指令集核的指令集的实质部分或者(2)以在具有至少一个x86指令集核的Intel处理器上运行为目标的应用或其它软件的目标代码版本,以便实现与具有至少一个x86指令集核的Intel处理器大体相同的结果。x86编译器1604表示编译器,其可以在具有或不具有附加链接处理的情况下在具有至少一个x86指令集核1616的处理器上被执行。类似地,图16图示了以高级语言1602的程序可以使用替代指令集编译器1608来编译,以生成替代指令集二进制代码1610,其可以由不具有至少一个x86指令集核的处理器1614来原生地执行(例如,具有执行加利福尼亚桑尼维尔的MIPS科技的MIPS指令集和/或执行加利福尼亚桑尼维尔的ARM控股公司的ARM指令集的核的处理器)。指令转换器1612可用于将x86二进制代码1606转换成可由不具有x86指令集核1614的处理器原生执行的代码。该转换的代码可能不与替代指令集二进制代码1610相同;然而,转换的代码将完成一般操作,并由来自替代指令集的指令组成。因而,指令转换器1612表示软件、固件、硬件或其组合,其通过仿真、模拟或任何其他处理来允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码1606。

因而,公开用于根据至少一个实施例执行一个或多个指令的技术。尽管已经在附图中描述和示出了某些示例性实施例,但是应当理解的是这样的实施例仅仅说明而不限制其它实施例,并且这样的实施例不限于所示和所述的具体构造和布置,由于本领域普通技术人员在研究本公开时可想到各种其它修改。在诸如此类的技术领域中,在增长快速并且不容易预见进一步进步的情况下,公开的实施例可如通过使得能够实现技术进步而促进的那样容易地在布置和细节上可修改,而不脱离本公开的原理或所附权利要求的范围。

本公开的一些实施例包括处理器。在这些实施例的至少一些中,处理器可包括:聚集-更新-分散加速器,以及将指令引导到聚集-更新-分散加速器以用于执行的电路,所述指令包括定义聚集-更新-分散操作的信息。聚集-更新-分散加速器可包括:包括多个条目的内容关联存储器(CAM),多个条目中的每一个存储相应的索引键以及与索引键相关联的数据值,及CAM控制器。CAM控制器可包括:取决于指令中的信息而选择在其上操作的CAM中的多个条目中的一个的电路;算术逻辑单元(ALU),包括在CAM中的多个条目中的所选的一个上执行算术或逻辑操作的电路,所述操作取决于指令中的信息;以及在CAM中的多个条目中的所选的一个中存储操作的结果的电路。与以上实施例中的任何一个组合,定义聚集-更新-分散操作的信息可包括:表示给定的索引键的数据,标识算术或逻辑操作的数据,以及表示用于算术或逻辑操作的操作数的数据。与以上实施例中的任何一个组合,定义聚集-更新-分散操作的信息可包括:存储表示给定的索引键的数据的寄存器的标识符,存储标识算术或逻辑操作的数据的寄存器的标识符,以及存储表示用于算术或逻辑操作的操作数的数据的寄存器的标识符。与以上实施例中的任何一个组合,定义聚集-更新-分散操作的信息可包括表示给定的索引键的数据,并且选择在其上操作的CAM中的多个条目中的一个的电路可包括:基于给定的索引键标识CAM中的可包括给定的索引键的条目的电路。与以上实施例中的任何一个组合,处理器可进一步包括高速缓存,定义聚集-更新-分散操作的信息可包括表示给定的索引键的数据,并且选择在其上操作的CAM中的多个条目中的一个的电路可包括用于以下的电路:基于针对给定的索引键的CAM的搜索而确定CAM中没有条目可包括给定的索引键,从高速缓存获得可包括给定的索引键的键-值对,以及在CAM中的多个条目中的一个中存储从高速缓存获得的键-值对。与以上实施例中的任何一个组合,处理器可进一步包括高速缓存,定义聚集-更新-分散操作的信息可包括表示给定的索引键的数据,并且选择在其上操作的CAM中的多个条目中的一个的电路可包括用于以下的电路:基于针对给定的索引键的CAM的搜索而确定CAM中没有条目可包括给定的索引键,从高速缓存获得可包括给定的索引键的键-值对,从CAM中的多个条目中的一个逐出键-值对,以及在CAM中的多个条目中的一个中存储从高速缓存获得的键-值对。与以上实施例中的任何一个组合,处理器可进一步包括高速缓存,并且CAM控制器可进一步包括:将操作的结果作为键-值对写入到高速缓存的电路,所述键-值对包括操作的结果和给定的索引键。与以上实施例中的任何一个组合,定义聚集-更新-分散操作的信息可包括表示用于算术或逻辑操作的标量值的数据,并且为了执行该操作,ALU可包括使用存储在CAM中的多个条目中的所选的一个中的数据值作为第一操作数以及表示标量值的数据作为第二操作数来执行操作的电路。与以上实施例中的任何一个组合,ALU可以是CAM控制器中的多个算术逻辑单元中的一个,多个算术逻辑单元中的每一个可包括执行相应的算术或逻辑操作的电路。与以上实施例中的任何一个组合,ALU可以是CAM控制器中的多个算术逻辑单元中的一个,多个算术逻辑单元中的至少一个可包括:与由ALU对CAM中的多个条目中的所选的一个执行算术或逻辑操作并行地在CAM中的多个条目中的另一个上执行相应的算术或逻辑操作的电路。与以上实施例中的任何一个组合,CAM可包括多个组,ALU可以是CAM控制器中的多个算术逻辑单元中的一个,多个算术逻辑单元中的至少一个可包括:与由ALU对CAM中的多个条目中的所选的一个执行算术或逻辑擦剂做并行地在CAM中的多个条目中的另一个上执行相应的算术或逻辑操作的电路,并且与CAM中的多个条目中的所选的一个所驻留的组相比,CAM中的多个条目中的另一个驻留在CAM中的不同的组中。与以上实施例中的任何一个组合,处理器可进一步包括解码器,以解码指令流中由处理器接收的至少一个未解码指令,并将指令引导到聚集-更新-分散加速器以用于执行,处理器可包括用于以下的电路:从解码器接收处理器的指令集架构的经解码的指令,以及将处理器的指令集架构的经解码的指令引导到聚集-更新-分散加速器以用于执行。与以上实施例中的任何一个组合,处理器可进一步包括解释器或动态二进制翻译器,以针对指令流中由处理器接收的多个未解码指令中的每一个生成处理器的指令集架构的一个或多个经解码的指令。为了将指令引导到聚集-更新-分散加速器以用于执行,处理器可包括用于以下的电路:从解释器或动态二进制翻译器接收处理器的指令集架构的经解码的指令,以及将处理器的指令集架构的经解码的指令引导到聚集-更新-分散加速器以用于执行。

本公开的一些实施例包括一种方法。在这些实施例的至少一些中,该方法可包括:在处理器中,将指令引导到聚集-更新-分散加速器以用于执行,所述指令包括定义聚集-更新-分散操作的信息,聚集-更新-分散加速器包括包括多个条目的内容关联存储器(CAM),多个条目中的每一个存储相应的索引键以及与索引键相关联的数据值;由聚集-更新-分散加速器取决于指令中的信息来选择在其上操作的CAM中的多个条目中的一个;由聚集-更新-分散加速器在CAM中的多个条目中的所选的一个上执行算术或逻辑操作,所述操作取决于指令中的信息;以及在CAM中的多个条目中的所选的一个中存储操作的结果。与以上实施例中的任何一个组合,定义聚集-更新-分散操作的信息可包括:表示给定的索引键的数据,标识算术或逻辑操作的数据,以及表示用于算术或逻辑操作的操作数的数据。与以上实施例中的任何一个组合,定义聚集-更新-分散操作的信息可包括:存储表示给定的索引键的数据的寄存器的标识符,存储标识算术或逻辑操作的数据的寄存器的标识符,以及存储表示用于算术或逻辑操作的操作数的数据的寄存器的标识符。与以上实施例中的任何一个组合,定义聚集-更新-分散操作的信息可包括表示给定的索引键的数据,并且选择在其上操作的CAM中的多个条目中的一个可包括:基于给定的索引键,标识CAM中的可包括给定的索引键的条目。与以上实施例中的任何一个组合,处理器可进一步包括高速缓存,定义聚集-更新-分散操作的信息可包括表示给定的索引键的数据,并且选择在其上操作的CAM中的多个条目中的一个可包括:基于针对给定的索引键的CAM的搜索而确定CAM中没有条目可包括给定的索引键,从高速缓存获得可包括给定的索引键的键-值对,以及在CAM中的多个条目中的一个中存储从高速缓存获得的键-值对。与以上实施例中的任何一个组合,处理器可进一步包括高速缓存,定义聚集-更新-分散操作的信息可包括表示给定的索引键的数据,并且选择在其上操作的CAM中的多个条目中的一个可包括:基于针对给定的索引键的CAM的搜索而确定CAM中没有条目可包括给定的索引键,从高速缓存获得可包括给定的索引键的键-值对,从CAM中的多个条目中的一个逐出键-值对,以及在CAM中的多个条目中的一个中存储从高速缓存获得的键-值对。与以上实施例中的任何一个组合,处理器可进一步包括高速缓存,并且所述方法可进一步包括:将操作的结果作为键-值对写入到高速缓存,所述键-值对包括操作的结果和给定的索引键。与以上实施例中的任何一个组合,定义聚集-更新-分散操作的信息可包括表示用于算术或逻辑操作的标量值的数据,并且执行操作可包括:使用存储在CAM中的多个条目中的所选的一个中的数据值作为第一操作数以及表示标量值的数据作为第二操作数来执行操作。与以上实施例中的任何一个组合,聚集-更新-分散加速器可包括算术逻辑单元(ALU),并且执行操作可包括:由ALU执行算术或逻辑操作。与以上实施例中的任何一个组合,聚集-更新-分散加速器可包括多个算术逻辑单元,并且执行操作可包括:与由算术逻辑单元中的第二算术逻辑单元在CAM中的多个条目中的另一个上执行第二算术或逻辑操作并行地由算术逻辑单元中的第一算术逻辑单元在CAM中的多个条目中的所选的一个上执行第一算术或逻辑操作。与以上实施例中的任何一个组合,CAM可包括多个组,聚集-更新-分散加速器可包括多个算术逻辑单元,执行操作可包括:与由算术逻辑单元中的第二算术逻辑单元在CAM中的多个条目中的另一个上执行第二算术或逻辑操作并行地由算术逻辑单元中的第一算术逻辑单元在CAM中的多个条目中的所选的一个上执行第一算术或逻辑操作,并且与CAM中的多个条目中的所选的一个所驻留的组相比,CAM中的多个条目中的另一个驻留在CAM中的不同的组中。与以上实施例中的任何一个组合,处理器可进一步包括解码器,并且将指令引导到聚集-更新-分散加速器以用于执行可包括:从解码器接收处理器的指令集架构的经解码的指令,并且将处理器的指令集架构的经解码的指令引导到聚集-更新-分散加速器以用于执行。与以上实施例中的任何一个组合,处理器可进一步包括解释器或动态二进制翻译器,并且将指令引导到聚集-更新-分散加速器以用于执行可包括:从解释器或动态二进制翻译器接收处理器的指令集架构的经解码的指令,以及将处理器的指令架构集的经解码的指令引导到聚集-更新-分散加速器以用于执行。

本公开的一些实施例包括一种加速器。在这些实施例的至少一些中,加速器可包括:接收指令以用于执行的电路,所述指令包括定义聚集-更新-分散操作的信息;内容关联存储器(CAM),其包括多个条目,多个条目中的每一个存储相应的索引键以及与索引键相关联的数据值;以及CAM控制器。CAM控制器可包括:取决于指令中的信息而选择在其上操作的CAM中的多个条目中的一个的电路;包括在CAM中的多个条目中的所选的一个上执行算术或逻辑操作的电路的算术逻辑单元(ALU),所述操作取决于指令中的信息;以及在CAM中的多个条目中的所选的一个中存储操作的结果的电路。与以上实施例中的任何一个组合,定义聚集-更新-分散操作的信息可包括:表示给定的索引键的数据,标识算术或逻辑操作的数据,以及表示用于算术或逻辑操作的操作数的数据。与以上实施例中的任何一个组合,定义聚集-更新-分散操作的信息可包括:存储表示给定的索引键的数据的寄存器的标识符,存储标识算术或逻辑操作的数据的寄存器的标识符,以及存储表示用于算术或逻辑操作的操作数的数据的寄存器的标识符。与以上实施例中的任何一个组合,定义聚集-更新-分散操作的信息可包括表示给定的索引键的数据,并且选择在其上操作的CAM中的多个条目中的一个的电路可包括:基于给定的索引键而标识CAM中可包括给定的索引键的条目的电路。与以上实施例中的任何一个组合,定义聚集-更新-分散操作的信息可包括表示给定的索引键的数据,并且选择在其上操作的CAM中的多个条目中的一个的电路可包括用于以下的电路:基于针对给定的索引键对CAM的搜索而确定CAM中没有条目可包括给定的索引键,从高速缓存获得可包括给定的索引键的键-值对,以及在CAM中的多个条目中的一个中存储从高速缓存获得的键-值对。与以上实施例中的任何一个组合,定义聚集-更新-分散操作的信息可包括表示给定的索引键的数据,并且选择在其上操作的CAM中的多个条目中的一个的电路可包括用于以下的电路:基于针对给定的索引键对CAM的搜索而确定CAM中没有条目可包括给定的索引键,从高速缓存获得可包括给定的索引键的键-值对,从CAM中的多个条目中的一个逐出键-值对,以及在CAM中的多个条目中的一个中存储从高速缓存获得的键-值对。与以上实施例中的任何一个组合,CAM控制器可进一步包括将操作的结果作为键-值对写入到高速缓存的电路,所述键-值对包括操作的结果和给定的索引键。与以上实施例中的任何一个组合,定义聚集-更新-分散操作的信息可包括表示用于算术或逻辑操作的标量值的数据,并且为了执行操作,ALU可包括:使用存储在CAM中的多个条目中的所选的一个中的数据值作为第一操作数以及表示标量值的数据作为第二操作数来执行操作的电路。与以上实施例中的任何一个组合,ALU可以是CAM控制器中的多个算术逻辑单元中的一个,多个算术逻辑单元中的每一个可包括执行相应的算术或逻辑操作的电路。与以上实施例中的任何一个组合,ALU可以是CAM控制器中的多个算术逻辑单元中的一个,多个算术逻辑单元中的至少一个可包括:与由ALU对CAM中的多个条目中的所选的一个执行算术或逻辑操作并行地在CAM中的多个条目中的另一个上执行相应的算术或逻辑操作的电路。与以上实施例中的任何一个组合,CAM可包括多个组,ALU可以是CAM控制器中的多个算术逻辑单元中的一个,多个算术逻辑单元中的至少一个可包括:与由ALU对CAM中的多个条目中的所选的一个执行算术或逻辑操作并行地在CAM中的多个条目中的另一个上执行相应的算术或逻辑操作的电路,并且与CAM中的多个条目中的所选的一个所驻留的组相比,CAM中的多个条目中的另一个驻留在CAM中的不同的组中。与以上实施例中的任何一个组合,为了接收指令以用于执行,加速器可包括:从解码器接收解码指令的电路。与以上实施例中的任何一个组合,为了接收指令以用于执行,加速器可包括:从解释器或动态二进制翻译器接收经解码的指令的电路。

本公开的一些实施例包括一种系统。在这些实施例的至少一些中,该系统可包括:用于将指令引导到聚集-更新-分散加速器以用于执行的部件,所述指令包括定义聚集-更新-分散操作的信息,聚集-更新-分散加速器包括包括多个条目的内容关联存储器(CAM),多个条目中的每一个存储相应的索引键以及与索引键相关联的数据值;用于由聚集-更新-分散加速器取决于指令中的信息来选择在其上操作的CAM中的多个条目中的一个的部件,用于由聚集-更新-分散加速器在CAM中的多个条目中的所选的一个上执行算术或逻辑操作的部件,所述操作取决于指令中的信息;以及用于在CAM中的多个条目中的所选的一个条目中存储操作的结果的部件。与以上实施例中的任何一个组合,定义聚集-更新-分散操作的信息可包括:表示给定的索引键的数据,标识算术或逻辑操作的数据,以及表示用于算术或逻辑操作的操作数的数据。与以上实施例中的任何一个组合,定义聚集-更新-分散操作的信息可包括:存储表示给定的索引键的数据的寄存器的标识符,存储标识算术或逻辑操作的数据的寄存器的标识符,以及存储表示用于算术或逻辑操作的操作数的数据的寄存器的标识符。与以上实施例中的任何一个组合,定义聚集-更新-分散操作的信息可包括表示给定的索引键的数据,并且用于选择在其上操作的CAM中的多个条目中的一个的部件可包括:用于基于给定的索引键而标识CAM中可包括给定的索引键的条目的部件。与以上实施例中的任何一个组合,定义聚集-更新-分散操作的信息可包括表示给定的索引键的数据,并且用于选择在其上操作的CAM中的多个条目中的一个的部件可包括:用于基于针对给定的索引键对CAM的搜索而确定CAM中没有条目可包括给定的索引键的部件,用于从高速缓存获得可包括给定的索引键的键-值对的部件,以及用于在CAM中的多个条目中的一个中存储从高速缓存获得的键-值对的部件。与以上实施例中的任何一个组合,定义聚集-更新-分散操作的信息可包括表示给定的索引键的数据,并且用于选择在其上操作的CAM中的多个条目中的一个的部件可包括:用于基于针对给定的索引键对CAM的搜索而确定CAM中没有条目可包括给定的索引键的部件,用于从高速缓存获得可包括给定的索引键的键-值对的部件,用于从CAM中的多个条目中的一个逐出键-值对的部件,以及用于在CAM中的多个条目中的一个中存储从高速缓存获得的键-值对的部件。与以上实施例中的任何一个组合,所述方法可进一步包括:用于将操作的结果作为键-值对写入到高速缓存的部件,所述键-值对包括操作的结果和给定的索引键。与以上实施例中的任何一个组合,定义聚集-更新-分散操作的信息可包括表示用于算术或逻辑操作的标量值的数据,并且用于执行操作的部件可包括:用于使用存储在CAM中的多个条目中的所选的一个中的数据值作为第一操作数以及表示标量值的数据作为第二操作数来执行操作的部件。与以上实施例中的任何一个组合,聚集-更新-分散加速器可包括算术逻辑单元(ALU),并且用于执行操作的部件可包括:用于由ALU执行算术或逻辑操作的部件。与以上实施例中的任何一个组合,聚集-更新-分散加速器可包括多个算术逻辑单元,并且用于执行操作的部件可包括:用于与由算术逻辑单元中的第二算术逻辑单元在CAM中的多个条目中的另一个上执行第二算术或逻辑操作并行地由算术逻辑单元中的第一算术逻辑单元在CAM中的多个条目中的所选的一个上执行第一算术或逻辑操作的部件。与以上实施例中的任何一个组合,CAM可包括多个组,聚集-更新-分散加速器可包括多个算术逻辑单元,并且用于执行操作的部件可包括:用于与由算术逻辑单元中的第二算术逻辑单元在CAM中的多个条目中的另一个上执行第二算术或逻辑操作并行地由算术逻辑单元中的第一算术逻辑单元在CAM中的多个条目中的所选的一个上执行第一算术或逻辑操作的部件。与CAM中的多个条目中的所选的一个所驻留的组相比,CAM中的多个条目中的另一个驻留在CAM中的不同的组中。与以上实施例中的任何一个组合,用于将指令引导到聚集-更新-分散加速器以用于执行的部件可包括:用于从解码器接收经解码的指令的部件,以及用于将经解码的指令引导到聚集-更新-分散加速器以用于执行的部件。与以上实施例中的任何一个组合,用于将指令引导到聚集-更新-分散加速器以用于执行的部件可包括:用于从解释器或动态二进制翻译器接收经解码的指令的部件,以及用于将经解码的指令引导到聚集-更新-分散加速器以用于执行的部件。

本公开的一些实施例包括至少一个非暂时性机器可读存储介质,包括在机器可读介质上携带的计算机可执行指令,该指令可由处理器读取。在这些实施例的至少一些中,所述指令可包括第一指令,所述第一指令在被读取和执行时用于使处理器:取决于第一指令中的信息而选择在其上操作的内容关联存储器(CAM)中的多个条目中的一个,CAM包括多个条目,多个条目中的每一个存储相应的索引键和与索引键相关联的数据值;由与CAM相关联的专用算术逻辑单元(ALU)在CAM中的多个条目中的所选的一个上执行算术或逻辑操作,所述操作取决于第一指令中的信息;以及在CAM中的多个条目中的所选的一个中存储操作的结果。在以上实施例的任何一个中,包括在第一指令中的信息可包括:表示给定的索引键的数据,标识算术或逻辑操作的数据,以及表示用于算术或逻辑操作的操作数的数据。在以上实施例的任何一个中,包括在第一指令中的信息可包括:存储表示给定的索引键的数据的寄存器的标识符,存储标识算术或逻辑操作的数据的寄存器的标识符,以及存储表示用于算术或逻辑操作的操作数的数据的寄存器的标识符。与以上实施例中的任何一个组合,包括在第一指令中的信息可包括表示给定的索引键的数据,并且选择在其上操作的CAM中的多个条目中的一个可包括:基于给定的索引键而标识CAM中包括给定的索引键的条目。与以上实施例中的任何一个组合,包括在第一指令中的信息可包括表示给定的索引键的数据,并且选择在其上操作的CAM中的多个条目中的一个可包括:基于针对给定的索引键对CAM的搜索而确定CAM中没有条目包括给定的索引键,从高速缓存获得包括给定的索引键的键-值对,以及在CAM中的多个条目中的一个中存储从高速缓存获得的键-值对。与以上实施例中的任何一个组合,包括在第一指令中的信息可包括表示给定的索引键的数据,并且选择在其上操作的CAM中的多个条目中的一个可包括:基于针对给定的索引键对CAM的搜索而确定CAM中没有条目包括给定的索引键,从高速缓存获得包括给定的索引键的键-值对,从CAM中的多个条目中的一个逐出键-值对,以及在CAM中的多个条目中的一个中存储从高速缓存获得的键-值对。与以上实施例中的任何一个组合,第一指令可进一步用于使处理器将操作的结果作为键-值对写入到高速缓存,并且键-值对可包括操作的结果和给定的索引键。与以上实施例中的任何一个组合,包括在第一指令中的信息可包括表示用于算术或逻辑操作的标量值的数据,并且执行操作可包括:ALU使用存储在CAM中的多个条目中的所选的一个中的数据值作为第一操作数以及表示标量值的数据作为第二操作数来执行操作。与以上实施例中的任何一个组合,所述指令可包括第二指令,用于使处理器:从CAM中的多个条目中的给定的一个逐出第一键-值对,多个条目中给定的一个基于第二指令的参数而被标识;以及在CAM中的多个条目中的给定的一个中存储第二键-值对。

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