用于在加载数据元素以供执行时考虑空间局部性的装置和方法转让专利

申请号 : CN201580061760.6

文献号 : CN107111554A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : R·萨桑卡E·乌尔德-阿迈德-瓦尔

申请人 : 英特尔公司

摘要 :

在本发明的一个实施例中,处理器包括上级高速缓存和至少一个处理器核。至少一个处理器核包括一个或多个寄存器以及多个指令处理级:解码单元,用于解码指令,指令需要多个数据元素的输入,其中多个数据元素中的每一个的大小小于处理器的高速缓存行的大小;执行单元,用于将多个数据元素加载到处理器的一个或多个寄存器,而不将空间上邻近所述多个数据元素的数据元素或所述多个数据元素加载到上级高速缓存中。

权利要求 :

1.一种加载数据元素的处理器,包括:

上级高速缓存;以及

至少一个处理器核,耦合到所述上级高速缓存,包括一个或多个寄存器以及多个指令处理级:解码器单元,用于解码指令,所述指令需要多个数据元素的输入,其中所述多个数据元素中的每一个的大小小于所述处理器的高速缓存行的大小,以及执行单元,用于将所述多个数据元素加载到所述一个或多个寄存器,而不将空间上邻近所述多个数据元素的数据元素或所述多个数据元素加载到所述上级高速缓存中。

2.如权利要求1所述的处理器,其特征在于,对所述多个数据元素的加载用于:将所述多个数据元素聚集到临时缓冲器中;以及将所述多个数据元素从所述临时缓冲器加载到所述一个或多个寄存器。

3.如权利要求1所述的处理器,其特征在于,对所述多个数据元素的加载用于:将所述多个数据元素聚集到所述处理器的低级高速缓存中;以及将所述多个数据元素从所述低级高速缓存加载到所述一个或多个寄存器。

4.如权利要求1所述的处理器,其特征在于,所述指令具体用于在不考虑空间局部性的情形下对数据元素的执行。

5.如权利要求4所述的处理器,其特征在于,所述指令指定所述多个数据元素的数据元素之间的跨度值。

6.如权利要求5所述的处理器,其特征在于,所述跨度值大于所述处理器的高速缓存行的大小。

7.如权利要求4所述的处理器,其特征在于,所述指令指定对应于所述多个数据元素中的每一个的位置的索引。

8.一种用于在处理器中加载数据元素的方法,包括:解码指令,其中所述指令需要多个数据元素的输入,其中所述多个数据元素中的每一个的大小小于所述处理器的高速缓存行的大小;

在解码所述指令之后,将所述多个数据元素加载到所述处理器的一个或多个寄存器以供执行,而不将空间上邻近所述多个数据元素的数据元素或所述多个数据元素加载到所述处理器的上级高速缓存中。

9.如权利要求8所述的方法,其特征在于,将所述多个数据元素加载到所述一个或多个寄存器包括:将所述多个数据元素聚集到临时缓冲器中;以及将所述多个数据元素从所述临时缓冲器加载到所述一个或多个寄存器。

10.如权利要求8所述的方法,其特征在于,将所述多个数据元素加载到所述一个或多个寄存器包括:将所述多个数据元素聚集到所述处理器的低级高速缓存中;以及将所述多个数据元素从所述低级高速缓存加载到所述一个或多个寄存器。

11.如权利要求8所述的方法,其特征在于,所述指令具体用于在不考虑空间局部性的情形下对数据元素的执行。

12.如权利要求11所述的方法,其特征在于,所述指令指定所述多个数据元素的数据元素之间的跨度值。

13.如权利要求12所述的方法,其特征在于,所述跨度值大于所述处理器的高速缓存行的大小。

14.如权利要求11所述的方法,其特征在于,所述指令指定对应于所述多个数据元素中的每一个的位置的索引。

15.一种加载数据元素的计算机系统,包括:存储器,用于存储指令;

处理器,包括:

上级高速缓存;

至少一个处理器核,耦合到所述上级高速缓存,包括一个或多个寄存器以及多个指令处理级:解码器单元,用于解码指令,其中所述指令需要多个数据元素的输入,其中所述多个数据元素中的每一个的大小小于所述处理器的高速缓存行的大小,以及执行单元,配置为将所述多个数据元素加载到所述一个或多个寄存器,而不将空间上邻近所述多个数据元素的数据元素或所述多个数据元素加载到所述处理器核的上级高速缓存中。

16.如权利要求15所述的计算机系统,其特征在于,对所述多个数据元素的加载用于:将所述多个数据元素聚集到临时缓冲器中;以及将所述多个数据元素从所述临时缓冲器加载到所述一个或多个寄存器。

17.如权利要求15所述的计算机系统,其特征在于,对所述多个数据元素的加载用于:将所述多个数据元素聚集到所述计算机系统的低级高速缓存中;以及将所述多个数据元素从所述低级高速缓存加载到所述一个或多个寄存器。

18.如权利要求15所述的计算机系统,其特征在于,所述指令具体用于在不考虑空间局部性的情形下对数据元素的执行。

19.如权利要求18所述的计算机系统,其特征在于,所述指令指定所述多个数据元素的数据元素之间的跨度值。

20.如权利要求19所述的计算机系统,其特征在于,所述跨度值大于所述计算机系统的高速缓存行的大小。

说明书 :

用于在加载数据元素以供执行时考虑空间局部性的装置和

方法

技术领域

[0001] 本公开涉及微处理器,并且更具体地涉及在微处理器中加载数据元素以供执行。
[0002] 背景
[0003] 数组的跨度(也被称为增量、间距或步长)指示数组的连续数组元素开始的两个存储器位置之间的距离。许多科学应用具有拥有大跨度的数组。这些数组在例如以下情形时自然地发生:
[0004] ·访问矩阵(或2D/3D数组)。如果顺序地访问相同列的元素,例如A[0][3]、A[l][3]、A[2][3]...
[0005] ·访问被组织为结构数组(AoS)的相同数量的结构,例如A[0]-权重、A[l]-权重、A[2]-权重...
[0006] 由于所使用的算法的本质,此类有跨度的访问模式在高性能计算(HPC)和科学计算应用中是常见的。这些有跨度的访问中的许多具有大跨度值,通常大于高速缓存行的长度(例如,64字节)。此类访问不具有空间局部性。即,如果数据元素X被访问,则接近数据元素X的数据元素与远离数据元素X的数据元素相比被访问的可能更低。

附图说明

[0007] 在附图的图形中作为示例而非限制地说明了本发明,在附图中,类似的参考编号表示类似的元件。
[0008] 图1示出根据本发明的一个实施例的处理器的系统架构。
[0009] 图2示出根据本发明的实施例对在加载数据元素时考虑和不考虑局部性的情形下的操作的比较。
[0010] 图3A-B是示出根据本发明的一个实施例的在处理器中加载用于执行的数据元素时考虑局部性的方法的流程图。
[0011] 图4A是示出根据本发明的一个实施例的用于加载在连续数据元素之间不具有固定距离的多个数据元素并且不考虑空间局部性的指令类型的一个实现方式的伪代码。
[0012] 图4B是示出根据本发明的一个实施例的用于加载在连续数据元素之间具有固定距离的多个数据元素并且不考虑空间局部性的指令类型的一个实现方式的另一伪代码。
[0013] 图5A是示出根据本发明的各实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线的框图。
[0014] 图5B是示出根据本发明的各实施例的要被包括在处理器中的有序架构核的和示例性寄存器重命名的乱序发布/执行架构核的示例性实施例的框图。
[0015] 图6是根据本发明的各实施例的具有集成存储器控制器和图形器件的单核处理器和多核处理器的框图。
[0016] 图7是根据本发明的一个实施例的系统的框图。
[0017] 图8是根据本发明的实施例的第二系统的框图。
[0018] 图9是根据本发明的实施例的第三系统的框图。
[0019] 图10示出根据本发明的实施例的片上系统(SoC)的框图。
[0020] 图11是根据本发明的各实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
[0021] 图12A和12B是示出根据本发明的各实施例的通用向量友好指令格式及其指令模板的框图。
[0022] 图13A-D是示出根据本发明的各实施例的示例性专用向量友好指令格式的框图。
[0023] 图14是根据本发明的一个实施例的寄存器架构的框图。
[0024] 图15A是根据本发明的各实施例的单个处理器核以及其到管芯上互连网络的连接以及它的第2级(L2)高速缓存的本地子集的框图。
[0025] 图15B是根据本发明的各实施例的图14A中的处理器核的一部分的展开图。

具体实施方式

[0026] 在以下描述中,陈述了多个具体细节。然而,应当理解,可不通过这些具体细节来实施本发明的实施例。在其他实例中,公知的电路、结构和技术未被详细示出,以免混淆对本描述的理解。然而,本领域技术人员应当领会,没有这些具体细节也可实施本发明。本领域技术人员利用所包括的描述将能够在无需过度实验的情况下实现适当的功能。
[0027] 说明书中提到“一个实施例”、“实施例”、“示例实施例”等指示所描述的实施例可包括特定特征、结构或特性,但是,每一个实施例可以不一定包括该特定特征、结构或特征。此外,这样的短语不一定是指同一个实施例。此外,当结合实施例描述特定特征、结构或特性时,认为结合无论是否明确描述的其他实施例来实施这样的特征、结构或特性在本领域技术人员的知识范围之内。
[0028] 在以下描述和权利要求书中,可使用术语“耦合”和“连接”及其派生词。应当理解,这些术语并不旨在作为彼此的同义词。“耦合”用于指示两个或多个元件彼此合作或相互作用,但它们可能或可能不直接物理或电接触。“连接”被用来指示在彼此耦合的两个或更多个元件之间建立通信。
[0029] 在本发明的一个实施例中,公开了用于在处理器中加载数据元素的处理器。处理器包括上级高速缓存和耦合到该上级高速缓存的至少一个处理器核。处理器核耦合到上级高速缓存,并且处理器核包括一个或多个寄存器以及包括解码器单元和执行单元的多个指令处理级。解码器单元配置为解码指令,其中指令需要多个数据元素的输入,并且其中多个数据元素中的每一个的大小小于处理器的高速缓存行的大小。执行单元配置为将多个数据元素加载到一个或多个寄存器,而不将空间上邻近所述多个数据元素的数据元素或所述多个数据元素加载到处理器的上级高速缓存中。
[0030] 在本发明的一个实施例中,公开了用于在处理器中加载数据元素的方法。方法包括解码指令,其中指令需要多个数据元素的输入,并且其中多个数据元素中的每一个的大小小于处理器的高速缓存行的大小。方法还包括在解码指令之后将多个数据元素加载到处理器的一个或多个寄存器,而不将空间上邻近所述多个数据元素的数据元素或所述多个数据元素加载到处理器的上级高速缓存中。
[0031] 在本发明的一个实施例中,公开了计算机系统。计算机系统包括用于存储指令的存储器、包括上级高速缓存的处理器以及用于处理指令的至少一个处理器核。处理器核耦合到上级高速缓存,并且处理器核包括一个或多个寄存器以及包括解码器单元和执行单元的多个指令处理级。解码器单元配置为解码指令,其中指令需要多个数据元素的输入,并且其中多个数据元素中的每一个的大小小于处理器的高速缓存行的大小。执行单元配置为将多个数据元素加载到一个或多个寄存器,而不将空间上邻近所述多个数据元素的数据元素或所述多个数据元素加载到处理器的上级高速缓存中。
[0032] 指令集
[0033] 指令集或指令集架构(ISA)是计算机架构中与编程有关的部分,并且可包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理以及外部输入和输出(I/O)。术语指令在本申请中一般表示宏指令——宏指令是被提供给处理器(或指令转换器,该指令转换器(例如利用静态二进制转换、包括动态编译的动态二进制转换)转换、变形、仿真或以其他方式将指令转换成将由处理器处理的一个或多个其他指令)以供执行的指令——作为对比,微指令或微操作(微op)是处理器的解码器解码宏指令的结果。
[0034] ISA与微架构不同,微架构是实现指令集的处理器的内部设计。具有不同的微架构的处理器可共享共同的指令集。例如, 奔腾四(Pentium 4)处理器、 酷睿(CoreTM)处理器、以及来自加利福尼亚州桑尼威尔(Sunnyvale)的超微半导体有限公司(Advanced Micro Devices,Inc.)的多个处理器执行几乎相同版本的x86指令集(在更新的版本中加入了一些扩展),但具有不同的内部设计。例如,可使用公知技术,在不同的微架构中,以不同的方式来实现ISA的相同寄存器架构,包括专用物理寄存器、使用寄存器重命名机制(诸如,使用寄存器别名表(RAT)、重排序缓冲器(ROB)以及引退寄存器堆;使用多个映射和寄存器池)的一个或多个动态分配物理寄存器等。除非另作说明,否则短语“寄存器架构”、“寄存器堆”和“寄存器”在本文中用于指代对软件/编程者以及对指令指定寄存器的方式可见的寄存器架构、寄存器堆和寄存器。在需要专用性的情况下,形容词“逻辑的”、“架构的”、或“软件可见的”将用于指示寄存器架构中的寄存器/寄存器堆,而不同的形容词将用于指定给定微架构中的寄存器(例如,物理寄存器、重排序缓冲器、引退寄存器、寄存器池)。
[0035] 指令集包括一个或多个指令格式。给定指令格式定义各种字段(位的数量、位的位置)以指定将要执行的操作(操作码)以及将对其执行该操作的操作数,等等。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,可将给定指令格式的指令模板定义为具有指令格式的字段的不同子集(所包括的字段通常按相同的顺序,但是至少一些字段具有不同的位的位置,因为有较少的字段被包括)和/或定义为具有以不同的方式来解释的给定字段。如此,ISA的每一条指令使用给定的指令格式来表达(并且如果经定义,则按照该指令格式的指令模板中的给定指令模板),并包括用于指定操作和操作数的字段。例如,示例性ADD指令具有特定的操作码和指令格式,该指令格式包括用于指定该操作码的操作码字段和用于选择操作数(源1/目的地以及源2)的操作数字段;并且该ADD指令在指令流中的出现将具有选择特定操作数的操作数字段中的特定内容。
[0036] 科学应用、金融应用、自动向量化通用应用、RMS(识别、挖掘和合成)应用以及视觉和多媒体应用(诸如,2D/3D图形、图像处理、视频压缩/解压缩、语音识别算法和音频处理)通常需要对大量数据项执行相同的操作(被称为“数据并行性”)。单指令多数据(SIMD)是指使处理器对多个数据项执行一个操作的指令类型。SIMD技术尤其适用于可以将寄存器中的多个位逻辑地划分成多个固定大小的数据元素(其中,每个数据元素表示单独的值)的处理器。例如,可将256位寄存器中的多个位指定为将以下列形式被操作的源操作数:四个单独的64位紧缩数据元素(四字(Q)大小数据元素)、八个单独的32位紧缩数据元素(双字(D)大小数据元素)、十六个单独的16位紧缩数据元素(字(W)大小数据元素)或三十二个单独的8位数据元素(字节(B)大小数据元素)。该数据类型被称为紧缩数据类型或向量数据类型,并且该数据类型的操作数被称为紧缩数据操作数或向量操作数。换言之,紧缩数据项或向量是指紧缩数据元素的序列,并且紧缩数据操作数或向量操作数是SIMD指令(也被称为紧缩数据指令或向量指令)的源操作数或目的地操作数。
[0037] 作为示例,一种类型的SIMD指令指定了将以垂直方式对两个源向量操作数执行单个向量操作以生成具有相同大小的、具有相同数量的数据元素的以及按照相同数据元素的顺序的目的地向量操作数(也被称为结果向量操作数)。源向量操作数中的数据元素被称为源数据元素,而目的地向量操作数中的数据元素被称为目的地或结果数据元素。这些源向量操作数具有相同大小,并包含相同宽度的数据元素,因此它们包含相同数量的数据元素。两个源向量操作数中的相同的位的位置中的源数据元素形成数据元素对(也称为对应的数据元素;即,每个源操作数的数据元素位置0中的数据元素相对应,每个源操作数的数据元素位置1中的数据元素相对应,以此类推)。分别对这些源数据元素对中的每一对执行由该SIMD指令所指定的操作,以生成匹配数量的结果数据元素,如此,每一对源数据元素都具有对应的结果数据元素。由于操作是垂直的,并且由于结果向量操作数大小相同、具有相同数量的数据元素、并且结果数据元素以与源向量操作数相同的数据元素顺序来存储,因此,结果数据元素处于与其对应的源数据元素对在源向量操作数中的位置相同的、结果向量操作数的位的位置处。除此示例性类型的SIMD指令之外,还有各种其他类型的SIMD指令(例如,仅有一个或具有多于两个的源向量操作数的SIMD指令;以水平方式操作的SIMD指令;生成不同大小的结果向量操作数的SIMD指令;具有不同大小的数据元素的SIMD指令;和/或具有不同的数据元素顺序的SIMD指令)。应当理解,术语目的地向量操作数(或目的地操作数)被定义为执行指令所指定的操作的直接结果,包括将该目的地操作数存储在某位置(其是寄存器或位于由该指令所指定的存储器地址处),以便可由另一指令将其作为源操作数来访问(通过由另一指令指定该同一个位置)。
[0038] 诸如由具有包括x86、MMXTM、流式SIMD扩展(SSE)、SSE2、SSE3、SSE4.1以及SSE4.2指令的指令集的 CoreTM处理器使用的SIMD技术之类的SIMD技术在应用性能方面实现了显著的改善。已经发布和/或公布了涉及高级向量扩展(AVX)(AVX1和AVX2)且使用向量扩展(VEX)编码方案的附加SIMD扩展集(例如,参见2011年10月的 64和IA-32架构软件开发者手册;并且参见2011年6月的 高级向量扩展编程参考)。
[0039] 系统架构
[0040] 图1示出根据本发明的一个实施例的处理器的系统架构。处理器100包括诸如处理器核150的一个或多个处理器核、预取器130和主存储器140。在一个实施例中,处理器100可任选地包括低级高速缓存(LLC)124、中级高速缓存(MLC)122和/或填充缓冲器120。在一个实施例中,处理器是计算系统的一部分。
[0041] 处理器核150可在单个集成电路芯片(或管芯)上实现。此外,该芯片可包括一个或多个共享的和/或私有的高速缓存(LLC 124或MLC 122)、互连、存储器控制器或其他组件。
[0042] 处理器核150可包括取出单元102用来取出指令以供处理器核执行。可以从任何存储设备中取出指令,诸如,主存储器140和/或参考图7-9所讨论的存储器设备。处理器核150可以任选地包括用于对被取出的指令进行解码的解码单元104。在实施例中,解码单元104可将被取出的指令解码为多个uop(微操作)。处理器核150的一些实施例可以不包括解码单元104。因此,核150可以在不对指令进行解码的情形下处理它们。此外,核150可包括调度单元106。调度单元106可执行与存储被解码的指令(例如,从解码单元104接收的指令)相关联的各种操作,直到这些指令准备好分派为止(例如,直到被解码指令的所有的源值变得可用)。在一个实施例中,调度单元106可将被解码的指令调度和/或发布(或分派)到执行单元108以供执行。
[0043] 执行单元108可在(例如,由解码单元104)解码并(例如,由调度单元106)分派指令之后,执行这些被分派的指令。执行单元108利用一个或多个寄存器107以供执行。寄存器107可以存储指令或要为指令执行的数据元素。在实施例中,执行单元108可包括多于一个执行单元,例如一个或多个存储器执行单元、一个或多个整数执行单元、一个或多个浮点执行单元或其他执行单元。执行单元108也可以执行各种算术操作(诸如,加法、减法、乘法,和/或除法),并可包括一个或多个算术逻辑单元(ALU)。在实施例中,协处理器(未示出)可以结合执行单元108来执行各种算术操作。此外,执行单元108可乱序地执行指令。因此,在一个实施例中,处理器核150可以是乱序处理器核。此外,每个核150可能能够同时执行多个线程(SMT或同时多线程)。
[0044] 处理器核150也可包括引退单元110。引退单元110可以在被执行的指令被提交之后引退它们(例如,按顺序)。在实施例中,引退这些被执行的指令会导致:通过对这些指令的执行,提交处理器状态;解除分配由这些指令使用的物理寄存器,等等。
[0045] 处理器核150还可以包括上级高速缓存(L1)112。L1 112接近处理器核150或在其内,并且是高速缓存层次结构中的最高级高速缓存,并且其通常存储指令/数据元素以便在诸如102-110的执行流水线中执行指令。L1 112专用于处理器核150,即使当处理器100中存在多个处理器核时。
[0046] MLC 122和LLC 124是高速缓存层次结构的较低层级中的高速缓存,并且它们存储指令/数据元素以促进处理器核执行指令。在一个实施例中,填充缓冲器120是用于存储和聚集数据元素以供执行的临时缓冲器。
[0047] 处理器还可以包括预取器130。在诸如处理器核150的处理器核请求指令/数据元素之前,预取器130从MLC 122、LLC 124和/或主存储器140中取出指令/数据元素。预取器130通过缩短对指令/数据的访问时间来加速处理器核的执行。
[0048] 高速缓存驻留得越接近执行单元,其性能通常提升。此外,更接近处理器的执行单元的高速缓存通常比较大的较高级高速缓存更小和更快(例如,L1 112比MLC 122和LLC 124更小和更快)。高速缓存的基本原理是,对于被高速缓存的数据,被高速缓存的数据越可能被重新使用越好。通常基于局部性的原理执行高速缓存,局部性的原理认为在任意时刻对指令的执行访问地址空间的相对较小部分。存在两种类型的局部性:时间局部性和空间局部性。时间局部性是时间上的局部性,其意味着如果引用了一项,则它往往很快将被再次引用。
[0049] 空间局部性是空间上的局部性。即,如果引用了一项,则地址接近(即,空间上邻近)的项往往很快被引用。对于具有大跨度的数组,跨度访问模式通常呈现低空间局部性,因此怎样加载这些数据元素值得进一步检查。
[0050] 在加载数据元素时考虑空间局部性的操作
[0051] 图2示出根据本发明的实施例对在加载数据元素时考虑和不考虑局部性的情形下的操作的比较。在主存储器140内,存储了矩阵A。假设对于指令,矩阵A的第一列的数据元素会被访问,即,A[0][0]、A[1][0]、A[2][0]和A[3][0]会被执行单元执行。此外,假设每个数据元素是4字节长,并且每个高速缓存行是64字节长。跟随参考编号202的在图示左侧的框示出本领域已知的加载,其中加载是在不考虑需要的数据元素的空间局部性的情形下执行的。跟随参考编号212的在图示右侧的框示出根据本发明的实施例的加载,其中加载是在考虑到需要的数据元素不存在空间局部性的情形下执行的。
[0052] 当在不考虑需要的数据元素的空间局部性的情形下执行加载时,根据需要将需要的数据元素A[0][0]-A[3][0]加载到处理器核的寄存器107中以供执行。然而,除此之外,处理器核对A[0][0]的请求导致将A[0][0]以及空间上邻近A[0][0]的数据元素加载到L1 108的高速缓存行202,空间上邻近的数据元素包括A[0][1]-A[0][3]。类似地,对A[1][0]的请求导致将A[1][0]-A[l][3]加载到L1 108的高速缓存行204,而且对A[2][0]和A[3][0]的请求导致分别将A[2][0]-A[2][3]和A[3][0]-A[3][3]加载到L1的高速缓存行。此外,对于启用第二扇区(下一行)预取的实现,加载MLC或LLC的另外4个高速缓存行(未示出)以用于对矩阵A的第一列的被请求的加载。即,对于访问4*4=16字节、64字节(高速缓存行长度)*8(在L1和MLC/LLC中的每一个的4个高速缓存行)=512字节,使用高速缓存空间和处理功率。即,实际上只使用了高速缓存数据中的数据的3.125%。
[0053] 虽然该说明是简单示例,但是对不具有空间局部性的多个数据元素的加载经常发生,尤其是对于数组具有大跨度(例如,大于64字节)的数组访问。任意地加载高速缓存行中的空间上邻近的数据元素对存储/计算资源的浪费是显著的。因此,本发明的实施例在考虑需要的数据元素的空间局部性的情形下执行加载。
[0054] 在参考编号212处,需要的数据元素A[0][0]-A[3][0]仅被加载到寄存器107中。它们未被加载到上级高速缓存(L1)或MLC中,因此不占用高速缓存空间。可选地,可以将需要的数据元素聚集在诸如填充缓冲器120的填充缓冲器或诸如LLC 124的低级高速缓存中。与参考编号202的一个区别在于,聚集在填充缓冲器或LLC中只应用于需要的数据元素,而且空间上相邻的数据元素未被加载到填充缓冲器或LLC。目标加载避免占据L1和/或MLC处的高速缓存空间/计算资源,并且对于更接近执行单元的较小/较快的高速缓存的所得的更多资源改善执行单元的性能,因此改善处理器的性能。
[0055] 在本发明的一个实施例中,处理器能够执行参考编号202和212指示的两种类型的加载操作。基于指令类型执行不同的加载操作。
[0056] 图3A-B是示出根据本发明的一个实施例的在处理器中加载用于执行的数据元素时考虑局部性的方法的流程图。可以由诸如处理器100的处理器执行方法300。
[0057] 在参考编号302处,解码指令,并且指令需要多个数据元素的输入。多个数据元素中的每一个的大小小于处理器的高速缓存行的大小。多个数据元素可以是数组或向量。指令可以是具体用于在不考虑数据元素的空间局部性的情形下加载多个数据元素的指令,例如下文中更具体地讨论的指令VGATHERNS(“向量聚集无空间的”的简称)和VMOVSTRIDENS(“向量移动跨度无空间的”的简称)的变型。
[0058] 在一个实施例中,指令(例如,VMOVSTRIDENS)指定多个数据元素的数据元素之间的跨度值。在一个实施例中,跨度值大于处理器的高速缓存行大小。在替代实施例中,指令(例如,VGATHERNSDPS)指定对应于多个数据元素中的每一个的位置的索引。
[0059] 在参考编号304处,在解码指令之后,将多个数据元素加载到处理器的一个或多个寄存器,而不将空间上邻近所述多个数据元素的数据元素或所述多个数据元素加载到处理器的上级(L1)高速缓存中。即,不为了执行被解码的指令而发起将任何数据元素加载到上级高速缓存,对被解码的指令的执行需要所述多个数据元素。在一个实施例中,也不为了执行被解码的指令而发起将任何数据元素加载到中级高速缓存(MLC)。
[0060] 在一个实施例中,如图3B所示,参考编号304中的操作通过至少两个步骤执行。在参考编号308处,将多个数据元素聚集到临时缓冲器或处理器的低级高速缓存(LLC)中。然后在参考编号310处,将多个数据元素从临时缓冲器或LLC加载到处理器的一个或多个寄存器。
[0061] 被加载的多个数据元素然后由后续指令执行。注意,在实施例中,处理器能够在不考虑空间局部性的情形下执行加载。例如,处理器可以将一个数据元素和其空间上邻近的数据元素一起加载到L1高速缓存。在加载多个数据元素时,被解码的指令可以使得处理器将多个数据元素和空间上邻近的数据元素一起加载到L1高速缓存。在一个实施例中,加载行为中的区别取决于根据本发明的一个实施例哪种指令被解码,并且如果加载指令未指定加载是用于无空间局部性的数据元素,则加载将使得处理器将数据元素和空间上邻近的数据元素一起加载。
[0062] 伪代码实现指令
[0063] 在一个实施例中,两种类型的指令用于指示指令的执行需要数据元素的输入,其中空间局部性不会被考虑。一种类型的指令是用于加载在连续的数据元素之间不具有固定距离(跨度)的多个数据元素,并且其被表示为VGATHERNS。另一种类型的指令是用于加载具有已知的跨度值的多个数据元素,并且其被表示为VMOVSTRIDENS。显然,指令的名称和对指令类型的划分可以以多种方式实现,而且本领域技术人员可以使用本发明的实施例公开的原理并且生成用于加载多个数据元素的不同的指令集,其中空间局部性不会被考虑。
[0064] 图4A是示出根据本发明的一个实施例的用于加载在连续数据元素之间不具有固定距离的多个数据元素并且不考虑空间局部性的指令类型的一个实现方式的伪代码。所示的VGATHERNS指令用于是双字整数(表示为“D”)的索引寄存器(vindex)以及是紧缩单精度浮点(表示为PS)的从存储器聚集的数据元素的数据类型,因此其是VGATHERNSDPS。索引寄存器还可以是四字(表示为“Q”);并且数据元素的数据类型还可以是PD(紧缩双精度)。
[0065] 如参考编号402处所示,VGATHERNSDPS需要若干输入参数:目的地寄存器地址,dest;索引寄存器,vindex;基础存储器地址,mem_addr,以及掩码寄存器,k1。使用基础地址(base_addr)、索引值(使用vindex的index)、比例值(scale)以及位移(disp)来提供基础存储器地址。在一个实施例中,参数mem_addr被指定为需要诸如base_addr、index、scale和disp的多个参数。
[0066] 在参考编号404处,(KL,VL)对描述给定的向量长度中存在多少数据元素。例如,(4,128)表示4个单精度数据元素可以适配在128位向量长度中,因此其是(KL,VL)值的有效选项。
[0067] 对于每个数据元素,基于掩码寄存器的指示(例如,k1[j]==1),如果加载要被执行,则NS_EM操作加载存储器地址中的被请求的数据(被指定为base_addr+SignExtend(vindex[i+31:i]*scale+disp)。SignExtend用于保存vindex的正/负符号,同时增加vindex的位的数量。注意,NS_EM仅将数据元素从末级高速缓存加载到目的地寄存器,而不将该数据加载到L1高速缓存中(除非数据元素已经存在于L1高速缓存中,在该情形下,从L1高速缓存读取数据)。如果基于掩码寄存器的指示,加载不会被执行,则目的地寄存器保持不变。为每个数据元素执行参考编号406的操作,并且基于掩码寄存器指示将数据元素加载到目的地寄存器。
[0068] 通过聚集操作,多个数据元素从存储器聚集。例如,如果mem_addr=1000且vindex={10,220,32,8},则在1010、1220、1032和1008处的数据元素将被加载到目的地寄存器dist中。
[0069] 尽管VGATHERNS可以聚集驻留在存储器中的各个位置中的数据元素(base_addr、index、scale、disp的组合可以定位存储器中的数据元素),但是对于访问具有已知跨度值的数据元素,可以使用不同的指令。图4B是示出根据本发明的一个实施例的用于加载在连续数据元素之间具有固定距离的多个数据元素并且不考虑空间局部性的指令类型的一个实现方式的另一伪代码。所示的VMOVSTRIDENSDPS指令用于是双字整数(表示为“D”)的跨度值(stride)以及是紧缩单精度浮点(表示为PS)的从存储器聚集的数据元素的数据类型,因此其是VMOVSTRIDENSDPS。
[0070] 如参考编号452处所示,VMOVSTRIDENSDPS需要若干输入参数:目的地寄存器地址,dest;跨度,stride;基础存储器地址,base_mem_addr,以及掩码寄存器,k1。参数dest和k1与VGATHERNSDPS定义的相同。基础存储器地址是常用的存储器地址,类似于上文的mem_addr。参数stride是存储在源寄存器中的标量整数值。
[0071] 在参考编号454处,(KL,VL)对描述给定的向量长度中存在多少数据元素,类似于参考编号404。
[0072] 对于每个数据元素,基于掩码寄存器的指示(例如,k1[j]==1),如果加载要被执行,则NS_EM操作加载存储器地址中的被请求的数据(被指定为base_addr+SignExtend(stride))。如果基于掩码寄存器的指示,加载不会被执行,则目的地寄存器保持不变。为每个数据元素执行参考编号456的操作,并且基于掩码寄存器指示将数据元素加载到目的地寄存器。
[0073] 示例性处理器架构和数据类型
[0074] 图5A是示出根据本发明的各实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线的框图。图5B是示出根据本发明的各实施例的要被包括在处理器中的有序架构核的和示例性寄存器重命名的乱序发布/执行架构核的示例性实施例的框图。图5A-B中的实线框示出了有序流水线和有序核,而可选增加的虚线框示出了寄存器重命名的、乱序发布/执行流水线和核。给定有序方面是乱序方面的子集的情况下,将描述乱序方面。
[0075] 在图5A中,处理器流水线500包括取出级502、长度解码级504、解码级506、分配级508、重命名级510、调度(也称为分派或发布)级512、寄存器读取/存储器读取级514、执行级
516、写回/存储器写入级518、异常处理级522以及提交级524。
[0076] 图5B示出了包括耦合到执行引擎单元550的前端单元530的处理器核590,且执行引擎单元和前端单元两者都耦合到存储器单元570。核590可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或混合或替代核类型。作为又一选项,核590可以是专用核,诸如例如网络或通信核、紧缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核、等等。
[0077] 前端单元530包括耦合至指令高速缓存单元534的分支预测单元532,指令高速缓存单元534耦合至指令转换后备缓冲器(TLB)536,指令转换后备缓冲器536耦合至指令取出单元538,指令取出单元538耦合至解码单元540。解码单元540(或解码器)可解码指令,并生成从原始指令解码出的、或以其它方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其它指令、或其它控制信号作为输出。解码单元540可使用各种不同的机制来实现。合适的机制的示例包括但不仅限于,查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等等。在一个实施例中,核590包括(例如,在解码单元540中或以其他方式在前端单元530内的)用于存储某些宏指令的微代码的微代码ROM或其他介质。解码单元540耦合至执行引擎单元550中的重命名/分配器单元552。
[0078] 执行引擎单元550包括耦合至引退单元554的重命名/分配器单元552以及一组一个或多个调度器单元556。调度器单元556表示任意数量的不同调度器,包括预留站、中心指令窗等。调度器单元556耦合到物理寄存器堆单元558。每个物理寄存器堆单元558表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)等。在一个实施例中,物理寄存器堆单元558包括向量寄存器单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、和通用寄存器。物理寄存器堆单元558与引退单元554重叠以示出可以用来实现寄存器重命名和乱序执行的各种方式(例如,使用重新排序缓冲器和引退寄存器堆;使用将来的文件、历史缓冲器和引退寄存器堆;使用寄存器映射和寄存器池等等)。引退单元554和物理寄存器堆单元558耦合到执行群集560。执行群集560包括一组一个或多个执行单元562和一组一个或多个存储器访问单元564。执行单元562可以对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。尽管一些实施例可以包括专用于特定功能或功能组的数个执行单元,但是其他实施例可以仅包括一个执行单元或全部都执行所有功能的多个执行单元。调度器单元556、物理寄存器堆单元558以及执行群集560示出为可能是复数个,因为某些实施例为某些类型的数据/操作创建单独的流水线(例如,各自都具有其自身的调度器单元、物理寄存器堆单元和/或执行群集的标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线和/或存储器访问流水线——并且在单独的存储器访问流水线的情况下,实现了其中仅此流水线的执行群集具有存储器访问单元564的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行的,而其余的是有序的。
[0079] 存储器访问单元564的集合耦合到存储器单元570,该存储器单元包括耦合到数据高速缓存单元574的数据TLB单元572,其中数据高速缓存单元耦合到第2级(L2)高速缓存单元576。在一个示例性实施例中,存储器访问单元564可以包括加载单元、存储地址单元以及存储数据单元,其中的每一个均耦合至存储器单元570中的数据TLB单元572。指令高速缓存单元534还耦合到存储器单元570中的第二级(L2)高速缓存单元576。L2高速缓存单元576被耦合到一个或多个其他级的高速缓存,并最终被耦合到主存储器。
[0080] 作为示例,示例性寄存器重命名的、乱序发布/执行核架构可以如下实现流水线500:1)指令取出538执行取出和长度解码级502和504;2)解码单元540执行解码级506;3)重命名/分配器单元552执行分配级508和重命名级510;4)调度器单元556执行调度级512;5)物理寄存器堆单元558和存储器单元570执行寄存器读取/存储器读取级514;执行群集560执行执行级516;6)存储器单元570和物理寄存器堆单元558执行写回/存储器写入级518;7)各单元可牵涉到异常处理级522;以及8)引退单元554和物理寄存器堆单元558执行提交级
524。
[0081] 核590可支持一个或多个指令集(例如,x86指令集(具有与较新版本一起添加的一些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集;加利福尼州桑尼维尔市的ARM控股的ARM指令集(具有诸如NEON等可选附加扩展)),其中包括本文中描述的各指令。在一个实施例中,核590包括用于支持紧缩数据指令集扩展(例如,AVX1、AVX2和/或下文描述的一些形式的通用向量友好指令格式(U=0和/或U=1))的逻辑,从而允许由许多多媒体应用使用的操作能够使用紧缩数据来执行。
[0082] 应当理解,核可以支持多线程操作(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程操作,各种方式包括时分多线程操作、同步多线程操作(其中,单个物理核为物理核正在同步进行多线程操作的多个线程中的每一个线程提供逻辑核)或其组合(例如,时分取出和解码以及此后诸如利用 超线程技术的同步多线程操作)。
[0083] 尽管在乱序执行的上下文中描述了寄存器重命名,但是,应当理解,寄存器重命名可以用于有序架构中。尽管所示出的处理器的实施例还包括分开的指令和数据高速缓存单元534/574以及共享L2高速缓存单元576,但替代实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如第1级(L1)内部高速缓存或多个级别的内部高速缓存。在一些实施例中,系统可以包括内部高速缓存以及在核和/或处理器外部的外部高速缓存的组合。或者,全部高速缓存都可以在核和/或处理器的外部。
[0084] 图6是根据本发明的各实施例的可具有多于一个的核、可具有集成存储器控制器、以及可具有集成图形器件的处理器600的框图。图6的实线框示出了处理器600,处理器600具有单个核602A、系统代理610、一组一个或多个总线控制器单元616,而可选附加的虚线框示出了替代处理器600,其具有多个核602A-N、系统代理单元610中的一组一个或多个集成存储器控制器单元614以及专用逻辑608。
[0085] 因此,处理器600的不同实现可包括:1)CPU,其中专用逻辑608是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核),并且核602A-N是一个或多个通用核(例如,通用的有序核、通用的乱序核、这两者的组合);2)协处理器,其中核602A-N是旨在主要用于图形和/或科学(吞吐量)的多个专用核;以及3)协处理器,其中核602A-N是多个通用有序核。因此,处理器600可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、紧缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量的集成众核(MIC)协处理器(包括30个或更多核)、或嵌入式处理器等。该处理器可以被实现在一个或多个芯片上。处理器600可以是一个或多个衬底的一部分,和/或可以使用诸如例如BiCMOS、CMOS或NMOS等的多个工艺技术中的任何一个技术将该处理器实现在一个或多个衬底上。
[0086] 存储器层次结构包括核内的一个或多个层级的高速缓存、一组或一个或多个共享高速缓存单元606以及耦合到集成存储器控制器单元614的集合的外部存储器(未示出)。共享高速缓存单元606的集合可以包括一个或多个中级高速缓存,诸如,第2级(L2)、第3级(L3)、第4级(L4),或其他层级的高速缓存,末级高速缓存(LLC),和/或上述各项的组合。尽管在一个实施例中,基于环的互连单元612将专用逻辑608(例如,集成图形逻辑)、共享高速缓存单元606的集合以及系统代理单元610/集成存储器控制器单元614互连,但替代实施例可使用任何数量的公知技术来将这些单元互连。在一个实施例中,可以维护一个或多个高速缓存单元606和核602-A-N之间的一致性。
[0087] 在一些实施例中,核602A-N中的一个或多个能够实现多线程。系统代理610包括协调和操作核602A-N的那些组件。系统代理单元610可包括例如功率控制单元(PCU)和显示单元。PCU可以是或可包括用于调节核602A-N和集成图形逻辑608的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个从外部连接的显示器。
[0088] 核602A-N在架构指令集方面可以是同构的或异构的;即,这些核602A-N中的两个或更多个核可能能够执行相同的指令集,而其它核可能能够执行该指令集的仅仅子集或不同的指令集。
[0089] 图7-9是适于执行本文中详细描述的指令的示例性计算机架构的框图。本领域已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其它电子设备的其它系统设计和配置也是合适的。一般地,能够包含本文中所公开的处理器和/或其它执行逻辑的多个系统或电子设备一般都是合适的。
[0090] 现在参考图7,所示出的是根据本发明的一个实施例的系统700的框图。系统700可以包括耦合至图形存储器控制器中枢(GMCH)720的一个或多个处理器710、715。附加的处理器715的任选性在图7中通过虚线来表示。
[0091] 每个处理处理器可以是单核,或可替代地包括多核。处理处理器可任选地包括除处理核之外的其它管芯上元件,诸如集成存储器控制器和/或集成I/O控制逻辑。此外,对于至少一个实施例,处理元件的(各)核可多线程化,因为它们对每个核可包括一个以上的硬件线程上下文。
[0092] 图7示出了GMCH 720可以耦合至存储器740,该存储器740可以是例如动态随机存取存储器(DRAM)。对于至少一个实施例,DRAM可以与非易失性高速缓存相关联。
[0093] GMCH 720可以是芯片组或芯片组的部分。GMCH 720可以与处理器710、715进行通信,并控制处理器710、715与存储器740之间的交互。GMCH 720还可担当处理器710、715和系统700的其他元件之间的加速总线接口。对于至少一个实施例,GMCH 720经由诸如前端总线(FSB)795之类的多点总线与处理器710、715进行通信。
[0094] 此外,GMCH 720耦合至显示器740(诸如平板显示器)。GMCH 720可包括集成图形加速器。GMCH 720还耦合至输入/输出(I/O)控制器中枢(ICH)750,该输入/输出(I/O)控制器中枢(ICH)750可用于将各种外围设备耦合至系统700。在图7的实施例中作为示例示出了外部图形设备760连同另一外围设备770,该外部图形设备760可以是耦合至ICH 750的分立图形设备。
[0095] 替代地,系统700中还可存在附加或不同的处理元件。例如,附加的处理器715可以包括与处理器710相同的附加的处理器、与处理器710异构的或不对称的附加的处理器、加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理元件。在物理资源710、715之间会存在包括架构、微架构、热、功耗特性等的一系列品质度量方面的各种差异。这些差异可以有效显示为处理器710和715之间的不对称性和异构性。对于至少一个实施例,各种处理器710和715可驻留在同一管芯封装中。
[0096] 现在参照图8,所示出的是根据本发明的实施例的第二系统800的框图。如图8所示,多处理器系统800是点对点互连系统,并且包括经由点对点互连850耦合的第一处理元件870和第二处理元件880。处理元件870和880中的每一个可以是多核处理器,包括第一和第二处理器核。
[0097] 替代地,处理元件870、880中的一个或多个可以是除处理器之外的元件,诸如加速器或现场可编程门阵列。
[0098] 虽然仅以两个处理元件870、880来示出,但应理解本发明的范围不限于此。在其他实施例中,一个或多个附加处理元件可存在于给定的处理器中。
[0099] 第一处理元件870还可包括存储器控制器中枢(MCH)872和点对点(P-P)接口876和878。类似地,第二处理元件880可包括MCH 882与P-P接口886和888。处理器870、880可经由使用点对点(PtP)接口电路878、888的点对点(PtP)接口850来交换数据。如图8所示,MCH 
872和882将处理器耦合到相应的存储器,即存储器842和存储器844,这些存储器可以是本地附连到相应处理器的主存储器部分。
[0100] 处理器870、880可各自经由使用点对点接口电路876、894、886、898的单独PtP接口852、854与芯片组890交换数据。芯片组890还可经由高性能图形接口839与高性能图形电路
838交换数据。本发明的实施例可以置于具有任意数目的处理核的任意处理器中,或置于图
8的PtP总线代理中的每一个中。在一个实施例中,任意处理器核可包括本地高速缓存存储器(未示出)或者以其它方式关联于本地高速缓存存储器(未示出)。此外,共享高速缓存(未示出)可被包括于在这两个处理器的外部但经由p2p互连与这些处理器连接的任一处理器中,从而如果一处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在该共享的高速缓存中。
[0101] 第一处理元件870和第二处理元件880可分别经由P-P互连876、886和884耦合到芯片组890。如图8中所示,芯片组890包括P-P接口894和898。此外,芯片组890包括将芯片组890与高性能图形引擎848耦合的接口892。在一个实施例中,总线849可被用于将图形引擎
848耦合到芯片组890。替代地,点对点互连849可以耦合这些组件。
[0102] 进而,芯片组890可以经由接口896被耦合到第一总线816。在一个实施例中,第一总线816可以是外围组件互连(PCI)总线或诸如PCI高速总线或另一第三代I/O互连总线之类的总线,但是本发明的范围不限于此。
[0103] 如图8所示,各种I/O设备814可以连同总线桥818被耦合至第一总线816,总线桥818将第一总线816耦合至第二总线820。在一个实施例中,第二总线820可以是低引脚计数(LPC)总线。各种设备可以被耦合至第二总线820,在一个实施例中,这些设备包括例如键盘/鼠标822、通信设备826以及诸如可包括代码830的盘驱动器或其他大容量存储设备的存储单元828。此外,音频I/O 824可以被耦合到第二总线820。注意,其他架构是可能的。例如,系统可实现多分支总线或者其他此类架构,而不是图8中的点对点架构。
[0104] 现在参考图9,所示为根据本发明的实施例的更具体的第二示例性系统900的框图。图8和9中的类似元件使用类似附图标记,且在图9中省略了图8的某些方面以避免混淆图9的其它方面。
[0105] 图9示出处理器870、880可以分别包括集成存储器和I/O控制逻辑(“CL”)872和882。因此,CL 872、882包括集成存储器控制器单元并包括I/O控制逻辑。图9示出不仅存储器832、834耦合到CL 872、882,而且I/O设备914也耦合到控制逻辑872、882。传统I/O设备
915被耦合至芯片组890。
[0106] 现在参照图10,所示出的是根据本发明的实施例的SoC 1000的框图。图2中相似的部件具有同样的附图标记。另外,虚线框是更先进的SoC的可选特征。在图10中,互连单元1002被耦合至:应用处理器1010,该应用处理器包括一个或多个核602A-N的集合以及共享高速缓存单元606;系统代理单元610;总线控制器单元616;集成存储器控制器单元614;一组或一个或多个协处理器1020,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元1030;直接存储器存取(DMA)单元1032;以及用于耦合至一个或多个外部显示器的显示单元1040。在一个实施例中,协处理器1020包括专用处理器,诸如例如网络或通信处理器、紧缩引擎、GPGPU、高吞吐量MIC处理器、或嵌入式处理器等等。
[0107] 本文公开的机制的各实施例可以被实现在硬件、软件、固件或这些实现方法的组合中。本发明的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
[0108] 可将程序代码(诸如图8中示出的代码830)应用于输入指令,以执行本文描述的各功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器之类的处理器的任何系统。
[0109] 程序代码可以用高级程序化语言或面向对象的编程语言来实现,以便与处理系统通信。在需要时,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定编程语言的范围。在任一情形下,该语言可以是编译语言或解释语言。
[0110] 至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,指令表示处理器中的各种逻辑,指令在被机器读取时使得该机器制作用于执行本文所述的技术的逻辑。被称为“IP核”的这些表示可以被存储在有形的机器可读介质上,并被提供给多个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
[0111] 这样的机器可读存储介质可以包括但不限于通过机器或设备制造或形成的物品的非瞬态的有形安排,其包括存储介质,诸如:硬盘;任何其它类型的盘,包括软盘、光盘、紧致盘只读存储器(CD-ROM)、紧致盘可重写(CD-RW)以及磁光盘;半导体器件,例如只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)之类的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM);相变存储器(PCM);磁卡或光卡;或适于存储电子指令的任何其它类型的介质。
[0112] 因此,本发明的各实施例还包括非暂态有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也被称为程序产品。
[0113] 在一些情况下,指令转换器可用来将指令从源指令集转换至目标指令集。例如,指令转换器可以变换(例如使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其它方式将指令转换成将由核来处理的一个或多个其它指令。指令转换器可以用软件、硬件、固件、或其组合实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。
[0114] 图11是根据本发明的各实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所示的实施例中,指令转换器是软件指令转换器,但作为替代,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图11示出可以使用x86编译器1104来编译高级语言1102的程序,以便生成可以由具有至少一个x86指令集核的处理器1116本地执行的x86二进制代码1106(假设指令中的一些指令是以诸如VGATHERNS和VMOVSTRIDENS的向量操作的指令格式编译)。具有至少一个x86指令集核的处理器1116表示能通过兼容地执行或以其他方式处理以下内容来执行与具有至少一个x86指令集核的英特尔处理器基本相同的功能的任何处理器:(1)英特尔x86指令集核的指令集的本质部分,或(2)目标为在具有至少一个x86指令集核的英特尔处理器上运行以实现与具有至少一个x86指令集核的英特尔处理器基本相同的结果的应用或其他软件的目标代码版本。x86编译器1104表示用于生成x86二进制代码1106(例如,目标代码)的编译器,该x86二进制代码1106可利用或不利用附加的链路处理而在具有至少一个x86指令集核的处理器1116上执行。
[0115] 类似地,图11示出可以使用替代的指令集编译器1108来编译高级语言1102的程序以生成可由不具有至少一个x86指令集核的处理器1114(例如,具有执行加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集和/或执行加利福尼州桑尼维尔市的ARM控股公司的ARM指令集的核的处理器)原生地执行的替代的指令集二进制代码1110。指令转换器1112用于将x86二进制代码1106转换成可以由不具有x86指令集核的处理器1114原生地执行的代码。该转换后的代码不大可能与替代的指令集二进制代码1110相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成通用操作,并且将由来自替代指令集的指令构成。因此,指令转换器1112表示软件、固件、硬件或它们的组合,这些软件、固件、硬件或它们的组合通过仿真、模拟或任何其他过程允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码1106。
[0116] 图12A-12B是示出根据本发明的各实施例的通用向量友好指令格式及其指令模板的框图。图12A是示出根据本发明的实施例的通用向量友好指令格式及其A类指令模板的框图;而图12B是示出根据本发明的实施例的通用向量友好指令格式及其B类指令模板的框图。具体而言,为通用向量友好指令格式1200定义了A类和B类指令模板,这两类指令模板都包括无存储器访问1205指令模板和存储器访问1220指令模板。在向量友好指令格式的上下文中的术语“通用”指不束缚于任何专用指令集的指令格式。
[0117] 尽管将描述其中向量友好指令格式支持以下情况的本发明的实施例,即:64字节向量操作数长度(或大小)与32位(4字节)或64位(8字节)数据元素宽度(或大小)(并且由此,64字节向量由16个双字大小的元素或者替代地8个四字大小的元素组成);64字节向量操作数长度(或大小)与16位(2字节)或8位(1字节)数据元素宽度(或大小);32字节向量操作数长度(或大小)与32位(4字节)、64位(8字节)、16位(2字节)、或8位(1字节)数据元素宽度(或大小);以及16字节向量操作数长度(或大小)与32位(4字节)、64位(8字节)、16位(2字节)、或8位(1字节)数据元素宽度(或大小);但是,替代实施例可支持更大、更小、和/或不同的向量操作数大小(例如,256字节向量操作数)与更大、更小或不同的数据元素宽度(例如,128位(16字节)数据元素宽度)。
[0118] 图12A中的A类指令模板包括:1)在无存储器访问1205的指令模板内,示出无存储器访问的完全舍入控制型操作1210的指令模板以及无存储器访问的数据变换型操作1215的指令模板;以及2)在存储器访问1220的指令模板内,示出存储器访问的时效性的1225的指令模板和存储器访问的非时效性的1230的指令模板。图12B中的B类指令模板包括:1)在无存储器访问1205的指令模板内,示出无存储器访问的写掩码控制的部分舍入控制型操作1212的指令模板以及无存储器访问的写掩码控制的vsize型操作1217的指令模板;以及2)在存储器访问1220的指令模板内,示出存储器访问的写掩码控制1227的指令模板。
[0119] 通用向量友好指令格式1200包括下文中按照图12A-12B中所示出的顺序列出的下列字段。
[0120] 格式字段1240-该字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,并且由此标识指令在指令流中以向量友好指令格式出现。由此,该字段对于仅具有通用向量友好指令格式的指令集是不需要的,在这个意义上该字段是任选的。
[0121] 基础操作字段1242-其内容区分不同的基础操作。
[0122] 寄存器索引字段1244-其内容直接或者通过地址生成来指定源和目的地操作数在寄存器中或者在存储器中的位置。这些字段包括足够数量的位以从PxQ(例如,32x512、16x128、32x1024、64x1024)个寄存器堆中选择N个寄存器。尽管在一个实施例中N可高达三个源和一个目的地寄存器,但是替代实施例可支持更多或更少的源和目的地寄存器(例如,可支持高达两个源,其中这些源中的一个源还用作目的地,可支持高达三个源,其中这些源中的一个源还用作目的地,可支持高达两个源和一个目的地)。
[0123] 修饰符(modifier)字段1246-其内容将指定存储器访问的以通用向量指令格式出现的指令与不指定存储器访问的以通用向量指令格式出现的指令区分开;即在无存储器访问1205的指令模板与存储器访问1220的指令模板之间进行区分。存储器访问操作读取和/或写入到存储器层次(在一些情况下,使用寄存器中的值来指定源和/或目的地地址),而非存储器访问操作不这样(例如,源和/或目的地是寄存器)。尽管在一个实施例中,该字段还在三种不同的方式之间选择以执行存储器地址计算,但是替代实施例可支持更多、更少或不同的方式来执行存储器地址计算。
[0124] 扩充操作字段1250-其内容区分除基础操作以外还要执行各种不同操作中的哪一个操作。该字段是针对上下文的。在本发明的一个实施例中,此字段被划分为类字段1268、α字段1252以及β字段1254。扩充操作字段1250允许在单条指令而非2条、3条或4条指令中执行多组共同的操作。
[0125] 比例字段1260-其内容允许用于存储器地址生成(例如,用于使用2比例*索引+基址的地址生成)的索引字段的内容的按比例缩放。
[0126] 位移字段1262A-其内容用作存储器地址生成的一部分(例如,用于使用2比例*索引+基址+位移的地址生成)。
[0127] 位移因数字段1262B(注意,位移字段1262A直接在位移因数字段1262B上的并置指示使用一个或另一个)-其内容用作地址生成的一部分,它指定通过存储器访问的大小(N)按比例缩放的位移因数,其中N是存储器访问中的字节数量(例如,用于使用2比例*索引+基址+按比例缩放的位移的地址生成)。忽略冗余的低阶位,并且因此将位移因数字段的内容乘以存储器操作数总大小(N)以生成要在计算有效地址时使用的最终位移。N的值由处理器硬件在运行时基于完整操作码字段1274(在本文中描述的)和数据操纵字段1254C确定。位移字段1262A和位移因数字段1262B不用于无存储器访问1205指令模板,和/或不同的实施例可以实现仅一者或两者都不实现,从这个意义上说,位移字段1262A和位移因数字段1262B是任选的。
[0128] 数据元素宽度字段1264-其内容区分将使用多个数据元素宽度中的哪一个(在一些实施例中用于所有指令,在其他实施例中仅用于指令中的一些)。如果支持仅一个数据元素宽度和/或使用操作码的某一方面来支持数据元素宽度,则该字段是不需要的,在这个意义上该字段是任选的。
[0129] 写掩码字段1270-其内容在每一数据元素位置的基础上控制目的地向量操作数中的数据元素位置是否反映基础操作和扩充操作的结果。A类指令模板支持合并-写掩码操作,而B类指令模板支持合并-写掩码操作和归零-写掩码操作两者。当合并时,向量掩码允许在执行任何操作期间保护目的地中的任何元素集免于更新(由基础操作和扩充操作指定);在另一实施例中,保持其中对应掩码位具有0的目的地的每一元素的旧值。相反,当归零时,向量掩码允许在执行任何操作期间使目的地中的元素的任何集合归零(由基础操作和扩充操作指定);在一个实施例中,目的地的元素在对应掩码位具有0值时被设为0。该功能的子集是控制执行的操作的向量长度的能力(即,从第一个到最后一个要修改的元素的跨度),然而,被修改的元素不一定要是连续的。如此,写掩码字段1270允许部分向量操作,包括加载、存储、算术、逻辑等等。尽管描述了其中写掩码字段1270的内容选择了多个写掩码寄存器中的包含要使用的写掩码的一个写掩码寄存器(并且由此写掩码字段1270的内容间接地标识了要执行的掩码操作)的本发明的实施例,但是替代实施例相反或另外允许掩码写字段1270的内容直接地指定要执行的掩码操作。
[0130] 立即数字段1272-其内容允许对立即数的指定。该字段在实现不支持立即数的通用向量友好格式中不存在且在不使用立即数的指令中不存在,在这个意义上该字段是任选的。
[0131] 类字段1268-其内容在不同类的指令之间进行区分。参考图12A-B,该字段的内容在A类和B类指令之间进行选择。在图12A-B中,使用圆角方形来指示在字段中存在专用值(例如,在图12A-B中,分别是针对类字段1268的A类1268A和B类1268B)。
[0132] A类指令模板
[0133] 在A类非存储器访问1205的指令模板的情况下,α字段1252被解释为RS字段1252A,其内容区分将执行不同的扩充操作类型中的哪一种(例如,分别为无存储器访问的舍入型操作1210以及无存储器访问的数据变换型操作1215指令模板指定的舍入1252A.1和数据变换1252A.2),而β字段1254区别将执行指定的类型的操作中的哪一个。在无存储器访问1205的指令模板中,比例字段1260、位移字段1262A以及位移比例字段1262B不存在。
[0134] 无存储器访问的指令模板-完全舍入控制型操作
[0135] 在无存储器访问的完全舍入控制型操作1210指令模板中,β字段1254被解释为舍入控制字段1254A,其内容提供静态舍入操作。尽管在本发明的所描述的实施例中,舍入控制字段1254A包括抑制所有浮点异常(SAE)字段1256和舍入操作控制字段1258,但是替代实施例可以支持将这两个概念编码为同一个字段,或仅具有这些概念/字段中的一个或另一个(例如,可以仅具有舍入操作控制字段1258)。
[0136] SAE字段1256-其内容区分是否禁用异常事件报告;当SAE字段1256的内容指示启用抑制时,给定的指令不报告任何种类的浮点异常标志,并且不唤起任何浮点异常处理程序。
[0137] 舍入操作控制字段1258-其内容区分执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。如此,舍入操作控制字段1258允许逐指令地改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段1250的内容优先于该寄存器值。
[0138] 无存储器访问的指令模板-数据变换型操作
[0139] 在无存储器访问的数据变换型操作1215指令模板中,β字段1254被解释为数据变换字段1254B,其内容区分将执行数个数据变换中的哪一个(例如,无数据变换、混合、广播)。
[0140] 在A类存储器访问1220的指令模板的情况下,α字段1252被解释为驱逐提示字段1252B,其内容区分要使用驱逐提示中的哪一个(在图12A中,为存储器访问时效性的1225指令模板和存储器访问非时效性的1230的指令模板分别指定时效性的1252B.1和非时效性的
1252B.2),而β字段1254被解释为数据操纵字段1254C,其内容区分要执行大量数据操纵操作(也称为基元(primitive))中的哪一个(例如,无操纵、广播、源的向上转换、以及目的地的向下转换)。存储器访问1220指令模板包括比例字段1260,并且任选地包括位移字段
1262A或位移比例字段1262B。
[0141] 向量存储器指令使用转换支持来执行来自存储器的向量加载并将向量存储到存储器。如同寻常的向量指令,向量存储器指令以数据元素式的方式与存储器来回传输数据,其中实际传输的元素由选为写掩码的向量掩码的内容规定。
[0142] 存储器访问的指令模板-时效性的
[0143] 时效性的数据是可能足够快地重新使用以从高速缓存受益的数据。然而,这是提示,且不同的处理器可以不同的方式实现它,包括完全忽略该提示。
[0144] 存储器访问的指令模板-非时效性的
[0145] 非时效性数据是不大可能足够快地重复使用以从第1级高缓存中的高速缓存操作获益且应当给予驱逐优先级的数据。然而,这是提示,且不同的处理器可以不同的方式实现它,包括完全忽略该提示。
[0146] B类指令模板
[0147] 在B类指令模板的情况下,α字段1252被解释为写掩码控制(Z)字段1252C,其内容区分由写掩码字段1270控制的写掩码应当是合并还是归零。
[0148] 在B类非存储器访问1205指令模板的情况下,β字段1254的部分被解释为RL字段1257A,其内容区分将执行不同的扩充操作类型中的哪一种(例如,分别为无存储器访问的写掩码控制部分舍入控制型操作1212指令模板和无存储器访问的写掩码控制VSIZE型操作
1217指令模板指定的舍入1257A.1和向量长度(VSIZE)1257A.2),而β字段1254的其余部分区分将执行指定类型的操作中的哪一个。在无存储器访问1205的指令模板中,比例字段
1260、位移字段1262A以及位移比例字段1262B不存在。
[0149] 在无存储器访问的写掩码控制部分舍入控制型操作1210指令模板中,β字段1254的其余部分被解释为舍入操作字段1259A,并且异常事件报告被禁用(给定的指令不报告任何种类的浮点异常标志,并且不引发任何浮点异常处理程序)。
[0150] 舍入操作控制字段1259A-正如舍入操作控制字段1258,其内容区分执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段1259A允许在每一指令的基础上改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段1250的内容优先于该寄存器值。
[0151] 在无存储器访问的写掩码控制VSIZE型操作1217指令模板中,β字段1254的其余部分被解释为向量长度字段1259B,其内容区分将执行数个数据向量长度中的哪一个(例如,128、256或512字节)。
[0152] 在B类存储器访问1220指令模板的情况下,β字段1254的部分被解释为广播字段1257B,其内容区分是否将执行广播类型数据操纵操作,而β字段1254的其余部分被解释为向量长度字段1259B。存储器访问1220指令模板包括比例字段1260,并且任选地包括位移字段1262A或位移比例字段1262B。
[0153] 就通用向量友好指令格式1200而言,完整操作码字段1274示出为包括格式字段1240、基础操作字段1242以及数据元素宽度字段1264。尽管示出了其中完整操作码字段
1274包括所有这些字段的一个实施例,但是,在不是支持所有这些字段的实施例中,完整操作码字段1274包括少于全部这些字段。完整操作码字段1274提供操作代码(操作码)。
[0154] 扩充操作字段1250、数据元素宽度字段1264以及写掩码字段1270允许以通用向量友好指令格式逐指令地指定这些特征。
[0155] 写掩码字段和数据元素宽度字段的组合创建各种类型的指令,因为这些指令允许基于不同的数据元素宽度应用该掩码。
[0156] 在A类和B类内出现的各种指令模板在不同的情形下是有益的。在本发明的一些实施例中,不同处理器或者处理器内的不同核可支持仅A类、仅B类、或者可支持两类。举例而言,旨在用于通用计算的高性能通用乱序核可仅支持B类,旨在主要用于图形和/或科学(吞吐量)计算的核可仅支持A类,并且旨在用于两者的核可支持两者(当然,具有来自两类的模板和指令的一些混合、但是并非来自两类的所有模板和指令的核在本发明的范围内)。同样,单一处理器可包括多个核,所有核支持相同的类或者其中不同的核支持不同的类。举例而言,在具有单独的图形和通用核的处理器中,图形核中的旨在主要用于图形和/或科学计算的一个核可仅支持A类,而通用核中的一个或多个可以是具有旨在用于通用计算的仅支持B类的乱序执行和寄存器重命名的高性能通用核。不具有单独的图形核的另一处理器可包括既支持A类又支持B类的一个或多个通用有序或乱序核。当然,在本发明的不同实施例中,来自一类的特征也可在其他类中实现。可使以高级语言撰写的程序成为(例如,及时编译或者静态编译)各种不同的可执行形式,包括:1)仅具有目标处理器支持以执行的类的指令的形式;或者2)具有使用所有类的指令的不同组合而编写的替代例程且具有选择这些例程以基于由当前正在执行代码的处理器支持的指令而执行的控制流代码的形式。
[0157] 图13A-D是示出根据本发明的各实施例的示例性专用向量友好指令格式的框图。图13示出专用向量友好指令格式1300,其指定位置、大小、解释、字段的次序、以及那些字段中的一些字段的值,在这个意义上专用向量友好指令格式1300是专用的。专用向量友好指令格式1300可以被用来扩展x86指令集,并且由此,这些字段中的一些与用于现有的x86指令集及其扩展(例如,AVX)中的那些字段类似或相同。该格式保持与具有扩展的现有x86指令集的前缀编码字段、实操作码字节字段、MOD R/M字段、SIB字段、位移字段、以及立即数字段一致。示出来自图12的字段,来自图13的字段映射到来自图12的字段。
[0158] 应当理解,虽然出于说明的目的在通用向量友好指令格式1200的上下文中,本发明的实施例参考专用向量友好指令格式1300进行了描述,但是本发明不限于专用向量友好指令格式1300,声明的地方除外。例如,通用向量友好指令格式1200构想了各种字段的各种可能的大小,而专用向量友好指令格式1300示出为具有特定大小的字段。作为具体示例,尽管数据元素宽度字段1264示出为专用向量友好指令格式1300中的一个位字段,但是本发明不限于此(也就是说,通用向量友好指令格式1200构想数据元素宽度字段1264的其他大小)。
[0159] 通用向量友好指令格式1200包括下文中按照图13A中所示出的顺序列出的字段。
[0160] EVEX前缀(字节0-3)1302——以四字节形式进行编码。
[0161] 格式字段1240(EVEX字节0,位[7:0])——第一字节(EVEX字节0)是格式字段1240,并且它包含0x62(在本发明的一个实施例中用于区分向量友好指令格式的唯一值)。
[0162] 第二-第四字节(EVEX字节1-3)包括提供专用能力的多个位字段。
[0163] REX字段1305(EVEX字节1,位[7-5])-由EVEX.R位字段(EVEX字节1,位[7]–R)、EVEX.X位字段(EVEX字节1,位[6]–X)以及(1257BEX字节1,位[5]–B)组成。EVEX.R、EVEX.X和EVEX.B位字段提供与对应VEX位字段相同的功能,并且使用1补码的形式进行编码,即ZMM0被编码为1211B,ZMM15被编码为0000B。这些指令的其他字段对如在本领域中已知的寄存器索引的较低三个位(rrr、xxx、以及bbb)进行编码,由此可通过增加EVEX.R、EVEX.X以及EVEX.B来形成Rrrr、Xxxx以及Bbbb。
[0164] REX’字段1210-这是REX’字段1210的第一部分,并且是用于对扩展的32个寄存器集合的较高16个或较低16个寄存器进行编码的EVEX.R’位字段(EVEX字节1,位[4]–R’)。在本发明的一个实施例中,该位与以下指示的其他位一起以位反转的格式存储以(在公知x86的32位模式下)与实操作码字节是62的BOUND指令进行区分,但是在MOD R/M字段(在下文中描述)中不接受MOD字段中的值11;本发明的替代实施例不以反转的格式存储该指示的位以及下文中其他指示的位。值1用于对较低16个寄存器进行编码。换言之,R'Rrrr是通过组合来自其他字段的EVEX.R'、EVEX.R以及其他RRR而形成的。
[0165] 操作码映射字段1315(EVEX字节1,位[3:0]–mmmm)–其内容对隐含的前导操作码字节(0F、0F 38、或0F 3)进行编码。
[0166] 数据元素宽度字段1264(EVEX字节2,位[7]–W)-由记号EVEX.W表示。EVEX.W用于定义数据类型的粒度(大小)(32位数据元素或64位数据元素)。
[0167] EVEX.vvvv 1320(EVEX字节2,位[6:3]-vvvv)——EVEX.vvvv的作用可包括如下:1)EVEX.vvvv编码第一源寄存器操作数且对具有两个或两个以上源操作数的指令有效,第一源寄存器操作数以反转(1补码)形式被指定;2)EVEX.vvvv编码目的地寄存器操作数,目的地寄存器操作数针对特定向量位移以1补码的形式被指定;或者3)EVEX.vvvv不编码任何操作数,保留该字段,并且应当包含1111b。由此,EVEX.vvvv字段1320对以反转(1补码)的形式存储的第一源寄存器说明符的4个低阶位进行编码。取决于该指令,额外不同的EVEX位字段用于将说明符大小扩展到32个寄存器。
[0168] EVEX.U 1268类字段(EVEX字节2,位[2]-U)——如果EVEX.U=0,则它指示A类或EVEX.U0;如果EVEX.U=1,则它指示B类或EVEX.U1。
[0169] 前缀编码字段1325(EVEX字节2,位[1:0]-pp)-提供了用于基础操作字段的附加位。除了对以EVEX前缀格式的传统SSE指令提供支持以外,这也具有紧缩SIMD前缀的益处(EVEX前缀只需要2位,而不是需要字节来表达SIMD前缀)。在一个实施例中,为了支持使用以传统格式和以EVEX前缀格式两者的SIMD前缀(66H、F2H、F3H)的传统SSE指令,将这些传统SIMD前缀编码为SIMD前缀编码字段;在提供给解码器的PLA之前,在运行时可被扩展为传统SIMD前缀(因此,PLA可执行传统和EVEX格式的这些传统指令,而无需修改)。虽然较新的指令可以直接将EVEX前缀编码字段的内容用作操作码扩展,但是某些实施例为了一致性而以类似的方式扩展,但是允许由这些传统SIMD前缀指定的不同含义。替代实施例可重新设计PLA以支持2位SIMD前缀编码,并且由此不需要扩展。
[0170] α字段1252(EVEX字节3,位[7]–EH;也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写掩码控制、以及EVEX.N;也以α示出)-如先前所述,该字段是针对上下文的。
[0171] β字段1254(EVEX字节3,位[6:4]-SSS,也称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也以βββ示出)-如先前所述,该字段是针对上下文的。
[0172] REX’字段1210-这是REX’字段的其余部分,并且是可用于对扩展的32个寄存器集合的较高16个或较低16个寄存器进行编码的EVEX.V’位字段(EVEX字节3,位[3]–V’)。该位以位反转的格式存储。值1用于对较低16个寄存器进行编码。换言之,V'VVVV是通过组合EVEX.V'、EVEX.vvvv而形成的。
[0173] 写掩码字段1270(EVEX字节3,位[2:0]-kkk)-其内容指定写掩码寄存器中的寄存器索引,如先前所述。在本发明的一个实施例中,特定值EVEX.kkk=000具有暗示没有写掩码用于特定指令的特殊行为(这可以各种方式实现,包括使用硬连线成全部为1的写掩码或者旁路掩码硬件的硬件来实现)。
[0174] 实操作码字段1330(字节4)也称为操作码字节。操作码的一部分在该字段中被指定。
[0175] MOD R/M字段1340(字节5)包括MOD字段1342、Reg字段1344以及R/M字段1346。如前所述,MOD字段1342的内容在存储器访问操作与非存储器访问操作之间进行区分。Reg字段1344的作用可被归结为两种情形:对目的地寄存器操作数或源寄存器操作数进行编码;或者被视为操作码扩展且不用于对任何指令操作数进行编码。R/M字段1346的作用可包括如下:对引用存储器地址的指令操作数进行编码,或者对目的地寄存器操作数或源寄存器操作数进行编码。
[0176] 比例、索引、基址(SIB)字节(字节6)-如先前所述的,比例字段1250的内容用于存储器地址生成。SIB.xxx 1354和SIB.bbb 1356-先前已经针对寄存器索引Xxxx和Bbbb提及了这些字段的内容。
[0177] 位移字段1262A(字节7-10)-当MOD字段1342包含10时,字节7-10是位移字段1262A,并且它以与传统32位位移(disp32)相同的方式工作,以字节粒度工作。
[0178] 位移因数字段1262B(字节7)-当MOD字段1342包含01时,字节7是位移因数字段1262B。该字段的位置与传统x86指令集8位位移(disp8)的位置相同,它以字节粒度工作。由于disp8是符号扩展的,因此它仅能在-128和127字节偏移量之间寻址;在64字节高速缓存行的方面,disp8使用可被设为仅四个真正有用的值-128、-64、0和64的8位;由于常常需要更大的范围,所以使用disp32;然而,disp32需要4个字节。与disp8和disp32对比,位移因数字段1262B是disp8的重新解释;当使用位移因数字段1262B时,通过将位移因数字段的内容乘以存储器操作数访问的大小(N)来确定实际位移。这种类型的位移被称为disp8*N。这减小了平均指令长度(用于位移的单个字节,但是具有大得多的范围)。这种压缩位移基于有效位移是存储器访问的粒度的倍数的假设,并且由此地址偏移量的冗余低阶位不需要被编码。换句话说,位移因数字段1262B替代传统x86指令集8位位移。由此,位移因数字段1262B以与x86指令集8位位移相同的方式(因此在ModRM/SIB编码规则中没有变化)进行编码,唯一的不同在于,将disp8超载至disp8*N。换句话说,在编码规则或编码长度中没有变化,而仅在通过硬件对位移值的解释中有变化(这需要按存储器操作数的大小按比例缩放位移量以获得字节式地址偏移量)。
[0179] 立即数字段1272如先前所述那样进行操作。
[0180] 完整操作码字段
[0181] 图13B是示出根据本发明的一个实施例的构成完整操作码字段1274的专用向量友好指令格式1300中的字段的框图。具体而言,完整操作码字段1274包括格式字段1240、基础操作字段1242以及数据元素宽度(W)字段1264。基础操作字段1242包括前缀编码字段1325、操作码映射字段1315以及实操作码字段1330。
[0182] 寄存器索引字段
[0183] 图13C是示出根据本发明的一个实施例的构成寄存器索引字段1244的专用向量友好指令格式1300中的字段的框图。具体地,寄存器索引字段1244包括REX字段1305、REX’字段1310、MODR/M.reg字段1344、MODR/M.r/m字段1346、VVVV字段1320、xxx字段1354以及bbb字段1356。
[0184] 扩充操作字段
[0185] 图13D是示出根据本发明的一个实施例的构成扩充操作字段1250的专用向量友好指令格式1300中的字段的框图。当类(U)字段1268包含0时,它表示EVEX.U0(A类1268A);当它包含1时,它表示EVEX.U1(B类1268B)。当U=0并且MOD字段1342包含11(表示无存储器访问操作)时,α字段1252(EVEX字节3,位[7]-EH)被解释为rs字段1252A。当rs字段1252A包含1(舍入1252A.1)时,β字段1254(EVEX字节3、位[6:4]-SSS)被解释为舍入控制字段1254A。舍入控制字段1254A包括一位的SAE字段1256和两位的舍入操作字段1258。当rs字段1252A包含0(数据变换1252A.2)时,β字段1254(EVEX字节3,位[6:4]-SSS)被解释为三位的数据变换字段1254B。当U=0且MOD字段1342包含00、01或10(表示存储器访问操作)时,α字段1252(EVEX字节3,位[7]–EH)被解释为驱逐提示(EH)字段1252B且β字段1254(EVEX字节3,位[6:4]-SSS)被解释为三位的数据操纵字段1254C。
[0186] 当U=1时,α字段1252(EVEX字节3,位[7]–EH)被解释为写掩码控制(Z)字段1252C。当U=1且MOD字段1342包含11(表明无存储器访问操作)时,β字段1254的一部分(EVEX字节
3,位[4]–S0)被解释为RL字段1257A;当它包含1(舍入1257A.1)时,β字段1254的其余部分(EVEX字节3,位[6-5]–S2-1)被解释为舍入操作字段1259A,而当RL字段1257A包含0(VSIZE 
1257.A2)时,β字段1254的其余部分(EVEX字节3,位[6-5]-S2-1)被解释为向量长度字段
1259B(EVEX字节3,位[6-5]–L1-0)。当U=1且MOD字段1342包含00、01或10(表示存储器访问操作)时,β字段1254(EVEX字节3,位[6:4]–SSS)被解释为向量长度字段1259B(EVEX字节3,位[6-5]–L1-0)和广播字段1257B(EVEX字节3,位[4]–B)。
[0187] 图14是根据本发明的一个实施例的寄存器架构1400的框图。在所示出的实施例中,有32个512位宽的向量寄存器1410;这些寄存器被引用为zmm0到zmm31。较低的16个zmm寄存器的较低阶256个位覆盖在寄存器ymm0-16上。较低的16个zmm寄存器的较低阶128个位(ymm寄存器的较低阶128个位)覆盖在寄存器xmm0-15上。专用向量友好指令格式1300按下表中所示方式对这些重叠寄存器堆进行操作。
[0188]
[0189]
[0190] 换句话说,向量长度字段1259B在最大长度与一个或多个其他较短长度之间进行选择,其中每一这种较短长度是前一长度的一半,并且不具有向量长度字段1259B的指令模板对最大向量长度操作。此外,在一个实施例中,专用向量友好指令格式1300的B类指令模板对紧缩或标量单/双精度浮点数据以及紧缩或标量整数数据操作。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的操作;取决于本实施例,较高阶数据元素位置保持与在指令之前相同或者归零。
[0191] 写掩码寄存器1415——在所示实施例中,有8个写掩码寄存器(k0到k7),每一个的尺寸都是64位。在替代实施例中,写掩码寄存器1415的大小为16位。如先前所述的,在本发明的一个实施例中,向量掩码寄存器k0无法用作写掩码;当正常指示k0的编码用作写掩码时,它选择硬连线的写掩码0xFFFF,从而有效地停用该指令的写掩码操作。
[0192] 通用寄存器1425——在所示实施例中,有十六个64位通用寄存器,这些寄存器与现有的x86寻址模式一起使用来对存储器操作数寻址。这些寄存器通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8到R15来引用。
[0193] 标量浮点栈寄存器堆(x87栈)1445,在其上重叠了MMX紧缩整数平坦寄存器堆1450——在所示出的实施例中,x87栈是用于使用x87指令集扩展来对32/64/80位浮点数据执行标量浮点操作的八元素栈;而使用MMX寄存器来对64位紧缩整数数据执行操作,以及为在MMX和XMM寄存器之间执行的某些操作保存操作数。
[0194] 本发明的替代实施例可以使用较宽的或较窄的寄存器。另外,本发明的替代实施例可以使用更多、更少或不同的寄存器堆和寄存器。
[0195] 图15A-B示出更具体的示例性有序核架构的框图,该核将是芯片中的多个逻辑块中的一个(包括相同类型和/或不同类型的其他核)。根据应用,这些逻辑块通过高带宽的互连网络(例如,环形网络)与一些固定的功能逻辑、存储器I/O接口和其它必要的I/O逻辑通信。
[0196] 图15A是根据本发明的各实施例的单个处理器核以及它与管芯上互连网络1502的连接及其第2级(L2)高速缓存的本地子集1504的框图。在一个实施例中,指令解码器1500支持具有紧缩数据指令集扩展的x86指令集。L1高速缓存1506允许对进入标量和向量单元中的高速缓存存储器的低等待时间访问。尽管在一个实施例中(为了简化设计),标量单元1508和向量单元1510使用分开的寄存器集合(分别为标量寄存器1512和向量寄存器1514),并且在这些寄存器之间转移的数据被写入到存储器并随后从第1级(L1)高速缓存1506读回,但是本发明的替代实施例可以使用不同的方法(例如使用单个寄存器集合或包括允许数据在这两个寄存器堆之间传输而无需被写入和读回的通信路径)。
[0197] L2高速缓存的本地子集1504是全局L2高速缓存的一部分,该全局L2高速缓存被划分成多个分开的本地子集,即每个处理器核一个本地子集。每个处理器核具有到其自己的L2高速缓存的本地子集1504的直接访问路径。被处理器核读出的数据被存储在其L2高速缓存子集1504中,并且可以与其它处理器核访问其自己的本地L2高速缓存子集并行地被快速访问。被处理器核写入的数据被存储在其自己的L2高速缓存子集1504中,并在必要的情况下从其它子集转储清除。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2高速缓存和其它逻辑块之类的代理在芯片内彼此通信。每个环形数据路径为每个方向1012位宽。
[0198] 图15B是根据本发明的各实施例的图15A中的处理器核的一部分的展开图。图15B包括L1高速缓存1504的L1数据高速缓存1506A部分,以及关于向量单元1510和向量寄存器1514的更多细节。具体地说,向量单元1510是16宽向量处理单元(VPU)(见16宽ALU 1528),该单元执行整型、单精度浮点以及双精度浮点指令中的一个或多个。该VPU通过混合单元
1520支持对寄存器输入的混合、通过数值转换单元1522A-B支持数值转换、并通过复制单元
1524支持对存储器输入的复制。写掩码寄存器1526允许断言所得的向量写入。
[0199] 本发明的多个实施例可包括上述各个步骤。可在可用于使通用或专用处理器执行这些步骤的机器可执行指令中具体化这些步骤。或者,可由包含用于执行这些步骤的硬连线逻辑的专用硬件组件,或可由被编程的计算机组件和自定义硬件组件的任何组合来执行这些步骤。
[0200] 本发明的各元素也可以作为计算机程序产品来提供,该计算机程序产品可包括其上存储有指令的计算机可读介质,这些指令可被用来对计算机(或其他电子设备)进行编程来执行过程。该机器可读介质可以包括,但不限于,软盘、光盘、CD-ROM、以及磁光盘、ROM、RAM、EPROM、EEPROM、磁卡或光卡、传播介质或适于存储电子指令的其它类型的介质/机器可读介质。例如,本发明可以作为计算机程序产品来下载,其中该程序可用具体化在载波或其它传播介质中的数据信号的方式经由通信链路(例如,调制解调器或网络连接)从远程计算机(例如,服务器)传输到请求计算机(例如,客户机)。
[0201] 示例性实施例包括加载数据元素的处理器,处理器包括上级高速缓存和耦合到上级高速缓存的至少一个处理器核,至少一个处理器核包括一个或多个寄存器以及多个指令处理级。多个级包括解码器单元,用于解码指令,指令需要多个数据元素的输入,其中多个数据元素中的每一个的大小小于处理器的高速缓存行的大小,以及执行单元,用于将多个数据元素加载到一个或多个寄存器,而不将空间上邻近所述多个数据元素的数据元素或所述多个数据元素加载到上级高速缓存中。
[0202] 在一些实施例中,对多个数据元素的加载用于将多个数据元素聚集到临时缓冲器中并且将多个数据元素从临时缓冲器加载到一个或多个寄存器。
[0203] 在一些实施例中,对多个数据元素的加载用于将多个数据元素聚集到处理器的低级高速缓存中并且将多个数据元素从低级高速缓存加载到一个或多个寄存器。
[0204] 在一些实施例中,指令具体用于在不考虑空间局部性的情形下对数据元素的执行。在那些实施例中,指令可以指定多个数据元素的数据元素之间的跨度值。跨度值可以大于处理器的高速缓存行的大小。在那些实施例中,指令可以指定对应于多个数据元素中的每一个的位置的索引。
[0205] 示例性实施例包括用于在处理器中加载数据元素的方法。方法包括解码指令,其中指令需要多个数据元素的输入,其中多个数据元素中的每一个的大小小于处理器的高速缓存行的大小。方法进一步包括在解码指令之后将多个数据元素加载到处理器的一个或多个寄存器以供执行,而不将空间上邻近所述多个数据元素的数据元素或所述多个数据元素加载到处理器的上级高速缓存中。
[0206] 在一些实施例中,将多个数据元素加载到一个或多个寄存器包括将多个数据元素聚集到临时缓冲器中并且将多个数据元素从临时缓冲器加载到一个或多个寄存器。
[0207] 在一些实施例中,将多个数据元素加载到一个或多个寄存器包括将多个数据元素聚集到处理器的低级高速缓存中并且将多个数据元素从低级高速缓存加载到一个或多个寄存器。
[0208] 在一些实施例中,指令具体用于在不考虑空间局部性的情形下对数据元素的执行。在那些实施例中,指令可以指定多个数据元素的数据元素之间的跨度值。跨度值可以大于处理器的高速缓存行的大小。在那些实施例中,指令可以指定对应于多个数据元素中的每一个的位置的索引。
[0209] 示例性实施例包括加载数据元素的计算机系统。计算机系统包括用于存储指令的存储器以及处理器。处理器包括上级高速缓存和耦合到上级高速缓存的至少一个处理器核,至少一个处理器核包括一个或多个寄存器以及多个指令处理级。多个指令处理级包括解码器单元,用于解码指令,其中指令需要多个数据元素的输入,其中多个数据元素中的每一个的大小小于处理器的高速缓存行的大小,以及执行单元,配置为将多个数据元素加载到一个或多个寄存器,而不将空间上邻近所述多个数据元素的数据元素或所述多个数据元素加载到处理器核的上级高速缓存中。
[0210] 在一些实施例中,对多个数据元素的加载用于将多个数据元素聚集到临时缓冲器中并且将多个数据元素从低级高速缓存加载到一个或多个寄存器。
[0211] 贯穿此具体实施方式,为了进行解释,陈述了众多具体细节以提供对本发明的透彻理解。然而,对本领域技术人员显而易见的是,没有这些具体细节中的一些细节也可实施本发明。在某些实例中,并不详细描述公知的结构和功能,以免使本发明的主题模糊。因此,本发明的范围和精神应根据所附权利要求书来确定。