从3D坐标计算3DZ曲线索引的机器级指令的制作方法

文档序号:12512612阅读:649来源:国知局
从3D坐标计算3D Z曲线索引的机器级指令的制作方法与工艺

实施例大体涉及计算机处理器的领域。更特定地,涉及包括机器级指令以从3D坐标计算3D Z曲线索引的装置。



背景技术:

Z序曲线是一类空间填充曲线,它是域为单位区间[0,1]的连续函数。Z排序(例如,Morton排序)可以对大的数据集提供明显的性能提高,在该大的数据集中多维局部性是重要的,包括疏和密矩阵运算(尤其是矩阵乘法)、有限元分析、图像分析、地震分析、光线跟踪及其他。然而,从坐标计算Z序曲线索引可能是计算密集型的。

附图说明

可以从下列详细描述结合下列图获得对本实施例的更好理解,其中:

图1A-B图示对于8×8矩阵的示范性Z序映射;

图2A-B图示根据实施例对于硬件Z曲线索引实现的示范性多级逻辑;

图3示出根据实施例实现32位3D Z曲线索引指令的多级逻辑设置的框图;

图4示出根据实施例实现64位3D Z曲线索引指令的多级逻辑设置的框图;

图5是根据实施例从三个坐标计算3D Z曲线索引的指令的操作数和逻辑的框图;

图6是根据实施例用于处理3D Z曲线索引指令的流程图;

图7A-B是图示根据实施例的通用向量友好指令格式及其指令模板的框图;

图8A-D是图示根据实施例的示范性特定向量友好指令格式的框图;

图9是根据一个实施例的寄存器架构的框图;

图10A是图示示范性有序提取、解码、引退流水线和示范性寄存器重命名、无序发出/执行流水线两者的框图;

图10B是图示要包括在实施例中的有序提取、解码、引退核的示范性实施例和示范性寄存器重命名、无序发出/执行架构核两者的框图;

图11A-B图示示范性有序核架构的框图;

图12是根据实施例具有超过一个核、集成存储器控制器和集成图形的处理器的框图;

图13图示示范性计算系统的框图;

图14图示第二示范性计算系统的框图;

图15图示第三示范性计算系统的框图;

图16图示根据实施例的芯片上系统(SoC)的框图;以及

图17图示对比软件指令转换器的使用的框图,软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令。

具体实施方式

在下列描述中,为了解释目的,阐述许多特定细节以便提供对下文描述的实施例的全面解释。然而,实施例可以在没有这些特定细节中的一些的情况下实践,这对于本领域内技术人员将是明显的。在其它实例中,以框图的形式示出众所周知的结构和设备以避免使实施例的基本原理难以理解。在一个实施例中,描述架构扩展,其扩展Intel架构(IA),但基本原理不限于任何特定ISA。

向量和SIMD指令综览

某些类型的应用通常需要对大量数据项执行相同操作(称为“数据并行性”)。单指令多数据(SIMD)指促使处理器对多个数据项执行操作的一类指令。SIMD技术尤其适合于处理器,其可以将寄存器中的位逻辑分成许多大小固定的数据元素,其中的每个代表单独值。例如,256位寄存器中的位可以规定为源操作数,其要作为四个单独64位紧缩(packed)数据元素(四字(Q)大小数据元素)、八个单独32位紧缩数据元素(双字(D)大小数据元素)、十六个单独16位紧缩数据元素(字(W)大小数据元素)或三十二个单独8位数据元素(字节(B)大小数据元素)而被操作。该类型的数据称为“紧缩”数据类型或“向量”数据类型,并且该数据类型的操作数称为紧缩数据操作数或向量操作数。也就是说,紧缩数据项或向量指紧缩数据元素序列,并且紧缩数据操作数或向量操作数是SIMD指令的源或目的地操作数(也称为紧缩数据指令或向量指令)。

SIMD技术(例如由具有指令集的Intel® Core™处理器采用的技术,该指令集包括x86、MMX™、流播SIMD扩展(SSE)、SSE2、SSE3、SSE4.1和SSE4.2指令)在应用性能方面实现明显提高。已发布额外SIMD扩展集(称为高级向量扩展(AVX)(AVX1和AVX2)并且使用向量扩展(VEX)编码方案)(参见,例如参见2014年9月的Intel® 64和IA-32架构软件开发商手册;以及参见2014年9月的Intel® Intel®架构指令集扩展编程参考)。

Z曲线索引化综览

图1A图示对于图示的8×8矩阵100的每个元素的Z序键映射(Z-order key mapping)。在显示的每个元素内,较高阶位在顶部并且较低阶位在底部。Z曲线排序的一个实现通过使每个维度中原始索引中的每个的位交织(例如,洗牌)来执行。在图示的矩阵100的每个元素中示出的Z排序通过矩阵100中每个元素的dimension_1 101和dimension_2 102的逐位交织而生成。

例如,通过使每个维度的坐标的位交织可以确定坐标[2,3](例如,在dimension_1 101的二进制010以及在dimension_2 102的二进制011)处元素的Z曲线索引,从而得到001101(例如,0x0D)的二进制Z曲线索引。示范性Z曲线索引值指示坐标[2,3]处的矩阵元素是示范性矩阵100的Z序曲线中的第13个(零索引,以10为基)索引。

图1B是通过相继跟踪Z序中元素的矩阵元素所创建的Z曲线200的图形图示。为了示范性目的,在图1B中示出简单的2D Z曲线和关联的索引。对于具有有限位长的有限数量的坐标,用预先计算的值填充的查找表可以用于快速确定坐标集的Z曲线索引。这可能因为坐标的数量和大小在增加而变得不切实际。在一个实施例中,处理器包括32位和64位机器级指令来计算3D Z曲线索引以在分析较大数据集时降低计算开销并且提高应用性能。

计算3D Z曲线索引的机器级指令

在一个实施例中,机器指令促使处理器通过对输入坐标值执行位操纵操作来计算3D Z曲线索引。

下面的表1示出示范性32位3D Z曲线索引的位操作。

表1 - 32位Z曲线位洗牌

如在表1中示出的,32位z曲线索引指令将每个源坐标的10个低阶位洗牌到32位目的地。在一个实施例中,每个源的这10个低阶位交错分布到目的地,其中每源具有三位跨步且在源之间具有一位偏移,使得这些位分布到零位,然后在规定范围内每三个位。例如,src1位分布到位0、3、6…27;src2位分布到位1、4、7…28;并且src3位分布到位2、5、8…29。

下文的表2示出64位3D Z曲线索引指令的位操作。

表2 - 64位Z曲线位洗牌

如在表2中示出的,64位z曲线索引指令将每个源坐标的20个低阶位洗牌到64位目的地。在一个实施例中,每个源的这20个低阶位交错分布到目的地,其中每源具有三位跨步且在源之间具有一位偏移,使得这些位分布到零位,然后在规定范围内每三个位。例如,src1位分布到位0、3、6…57;src2位分布到位1、4、7…58;并且src3位分布到位2、5、8…59。

用于计算32位Z曲线索引的示范性高级伪代码在下文的表3中示出。用于计算64位Z曲线索引的示范性高级伪代码在下文的表4中示出。伪代码证实可以用于执行在上文的表1和表2中示出的位分布的示范性高级逻辑。

表3 - 32位Z曲线索引伪代码

表4 - 64位Z曲线索引伪代码

图2A-B图示根据实施例对于硬件Z曲线索引实现的示范性多级逻辑。图2A示出单级逻辑210,其包括XOR门212、移位电路214和AND门216。源输入202可以是来自之前的逻辑级的源操作数或输入。临时寄存器集(例如,temp_A 204、temp_2 306)用于供应控制值,其中temp_A 204向移位电路供应移位值并且temp_B 206供应位掩蔽,其将在经由stage_out 218输出数据之前施加。stage_out 218值对除最后的级以外的每个逻辑级供应SRC 202。对于最后的级,stage_out 218是对应于作为源(例如,SRC 202)提供的初始坐标的目的地输出的一部分。

图2B示出根据实施例实现3D Z曲线索引指令的多级逻辑设置的框图。在这样的实施例中,处理器包括执行单元,其配置成对每个源输入执行逻辑操作并且使每坐标分量组合成单个输出。在一个实施例中,单级逻辑210的多个实例220(例如,对于32位是220A-E、对于64位是220A-F)设置成对单个输入坐标计算3D Z曲线索引的一部分。除最后的级以外的所有级的stage_out 218提供后续级的源。最后的级的stage_out 218提供与单个初始输入坐标关联的Z曲线索引的部分。在一个实施例中,相应坐标的输出则在输出到目的地寄存器之前组合。

在执行单元中可以串行或并行执行计算每个Z曲线索引的相应分量的操作。例如,计算Z曲线索引的单个宏指令可以解码成多个微操作,其各自促使一个或多个执行单元在使单独中间值组合之前对每个源坐标执行操作。

图3示出根据实施例实现32位3D Z曲线索引指令的多级逻辑设置的框图。在一个实施例中,在图2A中示出的逻辑210的多个实例可以耦合,如由图2B中示出的逻辑级220A-E示出的。多级逻辑可以用于对每个坐标执行Z曲线索引位洗牌。第一逻辑级220A接受32位源输入302,连同零左移位304和0x000003ff的掩蔽值306。第一逻辑级220A输出308作为第二逻辑级220B的源而提供,该第二逻辑级220B接受16位左移位314和0xff0000ff的掩蔽值316作为输入。第二逻辑级220B输出318作为第三逻辑级220C的源而提供,该第三逻辑级220C接受八位左移位324和0x0300f00f的掩蔽值326作为输入。第三逻辑级220C输出328作为第四逻辑级220D的源而提供,该第四逻辑级220D接受四位左移位334和0x030c30c3的掩蔽值336作为输入。第四逻辑级220D输出338作为第五逻辑级220E的源而提供,该第五逻辑级220E接受两位左移位344和0x030c30c3的掩蔽值346作为输入。第五逻辑级220E的输出348移位并且与其他源坐标的处理输出组合并且作为3D Z曲线索引结果而返回。每个源输入经历相似逻辑流水线。在一个实施例中,对每个输入并行执行微操作。

图4示出根据实施例实现64位3D Z曲线索引指令的多级逻辑设置的框图。图2B中示出的每个逻辑级220A-F可以用于对每个坐标执行Z曲线索引位洗牌。在一个实施例中,逻辑级配置成以至少64位的精度执行操作来产生64位输出。第一逻辑级220A接受64位源输入402,连同零左移位404和0x000fffff的掩蔽值406。第一逻辑级220A输出408作为第二逻辑级220B的源而提供,该第二逻辑级220B接受32位左移位414和0x1f00000000ffff的掩蔽值416作为输入。第二逻辑级220B输出418作为第三逻辑级220C的源而提供,该第三逻辑级220C接受16位左移位424和0x1f0000ff0000ff的掩蔽值426作为输入。第三逻辑级220C输出428作为第四逻辑级220D的源而提供,该第四逻辑级220D接受八位左移位434和0x100f00f00f00f00f的掩蔽值436作为输入。第四逻辑级220D输出438作为第五逻辑级220E的源而提供,该第五逻辑级220E接受四位左移位444和0x10c30c30c30c30c3的掩蔽值446作为输入。第五逻辑级220E输出448作为第五逻辑级220E的源而提供,该第五逻辑级220E接受2位左移位454和0x1249249249249249的掩蔽值456作为输入。第六逻辑级220F的输出458移位并且与其他源坐标的输出组合并且作为3D Z曲线索引而输出。每个源输入经历相似逻辑流水线。在一个实施例中,对每个输入并行执行微操作。

图5是根据实施例从三个坐标计算3D Z曲线索引的指令的操作数和逻辑的框图。指令的实施例包括三个源操作数。第一源操作数502与X维度关联,第二源操作数504与Y维度关联,并且第三源操作数506与Z维度关联。根据实施例,在宏指令级,源操作数是存储相应坐标值的寄存器、存储相应坐标值的存储器地址或立即坐标值。在微指令级,与操作数关联的坐标在被执行单元处理之前存储在处理器寄存器中。在一个实施例中,复用器(例如,mux 508)使源寄存器耦合于处理器执行单元中的z序逻辑510,其从源坐标计算Z序索引。32位预输出寄存器和最后结果寄存器的示范性位布局的表示在下文的表5中示出。

表5 - Z序逻辑输出

上文的表5示出每个源输入的32位预输出。表5中的每个x、y或z值指示所指示的坐标值的单个位,其中向右是最低有效位并且左边是最高有效位。在一个实施例中,SRC1’预输出值从由SRC1 502指示的值生成,SRC2’预输出值从由SRC2 504指示的值生成,并且SRC3’预输出值从由SRC3 506指示的值生成。在这样的实施例中,Z序索引通过使SRC2’预输出左移位一个位、使SRC3’预输出左移位两个位并且对移位的预输出值执行逐位OR操作而创建。计算的索引然后输出给由指令的目的地操作数512规定的DEST位点。在一个实施例中,示出的寄存器是SIMD/向量寄存器并且指令是执行向量操作的SIM指令。

图6是根据实施例用于处理3D Z曲线索引指令的流程图。如在框602处示出的,指令流水线在处理器提取单个z曲线索引指令来计算3D Z曲线索引时开始。指令具有第一、第二和第三源操作数以及目的地操作数,如还在框602处示出的。

如在框604处示出的,处理器将Z曲线索引指令解码为解码指令。在一个实施例中,解码指令是单个操作。在一个实施例中,解码指令包括一个或多个逻辑微操作来执行指令的每个子元素。微操作可以是硬接线或微代码操作以可以促使处理器的部件(例如执行单元)执行各种操作来实现指令。

在一个实施例中,解码指令促使处理器的部件(例如执行单元)执行各种操作,其包括提取由源操作数指示的源操作数值的操作,如在框606处示出的。在各种实施例中,源操作数可以包括寄存器、存储器地址或立即值(immediate values)。微操作可以从存储器提取值或将值加载到内部处理器寄存器内。

如在框608处示出的,一个或多个处理器执行单元执行解码指令以通过使源坐标值的构成位交织来计算3D Z曲线索引。在一个实施例中,通过使每个源值的10个低阶位交织成长度为至少32个位的Z曲线索引来计算Z曲线索引。在一个实施例中,通过使每个源值的20个低阶位交织成长度为至少60个位的Z曲线索引来计算Z曲线索引。

如在框610处示出的,处理器将Z曲线索引指令的结果存储到目的地操作数所指示的位点内。对于32位指令,Z曲线索引存储到32位输出寄存器。对于64位指令,Z曲线索引存储在64位输出寄存器中。

本文描述的实施例指使用X、Y和Z坐标的操作,它们是用于在三维空间内定义位置的笛卡尔坐标。本领域内普通技术人员将理解,使用的坐标是示范性的并且X、Y和Z坐标一般指用于在Z曲线排序能适用的三维空间中定义第一、第二或第三维度的位点的任何坐标集。

本文描述的实施例可以在处理装置或数据处理系统中实现。在前面的描述中,阐述许多特定细节以便提供对本文描述的实施例的全面理解。然而,实施例可以在没有这些特定细节中的一些的情况下实践,如对于本领域内普通技术人员将显而易见的。描述的架构特征中的一些是Intel架构(IA)的扩展。然而,基本原理不限于任何特定ISA。

本文描述的指令的实施例对源坐标值内的高阶或低阶位操作。如本文使用的,高阶和低阶位定义为最高有效和最低有效位,与在构成数据字的字节存储在计算机存储器中时用于解释那些字节的约定无关。也就是说,根据在使用中的字节顺序约定,低阶或最低有效位可以存储在数据字内的最小地址或最大地址中。

为了提供更完整理解,在下文提供示范性指令格式、处理器核架构、处理器和计算机架构的综览。

示范性指令格式

本文描述的指令的实施例可以采用不同格式体现。另外,示范性系统、架构和流水线在下文详述。指令的实施例可以在这样的系统、架构和流水线上执行,但不限于详述的那些。

向量友好指令格式是适合于向量指令的指令格式(例如,存在向量操作特定的某些字段)。尽管描述其中通过向量友好指令格式支持向量和标量操作两者的实施例,备选实施例仅使用向量友好指令格式的向量操作。

图7A-7B是图示根据实施例的通用向量友好指令格式及其指令模板的框图。图7A是图示根据实施例的通用向量友好指令格式及其类别A指令模板的框图;而图7B是图示根据实施例的通用友好指令格式及其类别B指令模板的框图。具体地,针对通用向量友好指令格式700定义类别A和类别B指令模板,这两个都包括无存储器访问705指令模板和存储器访问720指令模板。术语通用在向量友好指令格式的上下文中指未与任何特定指令集绑定的指令格式。

将描述其中向量友好指令格式支持以下内容的实施例:具有32位(4字节)或64位(8字节)数据元素宽(或大小)的64字节向量操作数长度(或大小)(并且从而,64字节向量由16个双字大小的元素或备选地8个四字大小的元素组成);具有16位(2字节)或8位(1字节)数据元素宽(或大小)的64字节向量操作数长度(或大小);具有32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽(或大小)的32字节向量操作数长度(或大小);以及具有32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽(或大小)的16字节向量操作数长度(或大小)。然而,备选实施例支持具有更多、更少或不同数据元素宽(例如,128位(16字节)数据元素宽)的更多、更少和/或不同向量操作数大小(例如,256字节向量操作数)。

图7A中的类别A指令模板包括:1)在无存储器访问705指令模板内示出无存储器访问的全舍入控制型操作710指令模板和无存储器访问的数据变换型操作715指令模板;和2)在存储器访问720指令模板内示出存储器访问的暂时725指令模板和存储器访问的非暂时730指令模板。图7B中的类别B指令模板包括:1)在无存储器访问705指令模板内示出无存储器访问的写掩蔽控制的部分舍入控制型操作712指令模板和无存储器访问的写掩蔽控制的vsize型操作717指令模板;和2)在存储器访问720指令模板内示出存储器访问的写掩蔽控制727指令模板。

通用向量友好指令格式700包括在下文按图7A-7B中图示的顺序列出的下列字段。

格式字段740-该字段中的特定值(指令格式标识符值)唯一识别向量友好指令格式,并且从而识别指令流中采用向量友好指令格式的指令的发生。如此,该字段在对于仅具有通用向量友好指令格式的指令集不需要它这一意义上是可选的。

基本操作字段742-它的内容区分不同基本操作。

寄存器索引字段744-它的内容直接或通过地址生成而规定源和目的地操作数的位点,不论它们是在寄存器中还是存储器中。这些包括足够数量的位来从P×Q(例如,32×512、16×128、32×1024、64×1024)寄存器堆选择N个寄存器。尽管在一个实施例中N可以多至三个源和一个目的地寄存器,备选实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持多至两个源,其中这些源中的一个也充当目的地,可以支持多至三个源,其中这些源中的一个也充当目的地,可以支持多至两个源和一个目的地)。

修改字段(modifier field)746-它的内容将采用通用向量指令格式的规定存储器访问的指令的发生从没有存储器访问的那些指令区分;即,在无存储器访问705指令模板与存储器访问720指令模板之间进行区分。存储器访问操作读和/或写入存储器层级(在一些情况下使用寄存器中的值规定源和/或目的地地址),而非存储器访问操作则不这样(例如,源和目的地是寄存器)。尽管在一个实施例中该字段也在执行存储器地址计算的三个方式之间选择,备选实施例可以支持执行存储器地址计算的更多、更少或不同方式。

增广操作字段750-它的内容区分除基本操作外还要执行的多种不同操作中的哪一个。该字段是上下文特定的。在本发明的一个实施例中,该字段分成类别字段768、alpha字段752和beta字段754。增广操作字段750允许在单指令而不是2、3或4个指令中执行共用操作组。

标度字段760-它的内容允许定标索引字段的内容用于存储器地址生成(例如,用于使用2scale*索引+基址的地址生成)。

位移字段762A-它的内容用作存储器地址生成(例如,用于使用2scale*索引+基址+位移的地址生成)的部分。

位移因数字段762B(注意位移字段762A直接在位移因数字段762B上的并置指示使用一个或另一个)-它的内容用作地址生成的部分;它规定要通过存储器访问的大小(N)来定标的位移因数-其中N是存储器访问中字节的数量(例如,对于使用2scale*索引+基址+定标位移的地址生成)。冗余低阶位被忽略,并且因此位移因数字段的内容乘以存储器操作数总大小(N)以便生成要在计算有效地址方面使用的最终位移。N的值由在运行时的处理器硬件基于全操作码字段774(稍后在本文描述)和数据操纵字段754C确定。位移字段762A和位移因数字段762B在它们未用于无存储器访问705指令模板这一意义上是可选的和/或不同的实施例可以仅实现两个中的一个或两个都未实现。

数据元素宽度字段764-它的内容区分要使用的许多数据元素宽度中的哪一个(在一些实施例中对于所有指令;在其他实施例中仅对于指令中的一些)。该字段在如果使用操作码的某一方面支持数据元素宽度和/或仅支持一个数据元素宽度则不需要该字段这一意义上是可选的。

写掩蔽字段770-它的内容在每数据元素位置基础上控制目的地向量操作数中的数据元素位置是否反映基本操作和增广操作的结果。类别A指令模板支持合并-写掩蔽,而类别B指令模板既支持合并也支持归零-写掩蔽。在合并时,向量掩蔽允许保护目的地中的任何元素集以在执行任何操作(由基本操作和增广操作规定)期间免于更新;在另一个实施例中,保留目的地的每个元素的旧值,其中对应掩蔽位具有0。相比之下,在归零时,向量掩蔽允许目的地中的任何元素集在执行任何操作(由基本操作和增广操作规定)期间归零;在一个实施例中,在对应掩蔽位具有0值时,目的地的元素设置为0。该功能性的子集是控制正在执行的操作的向量长度的能力(即,正在修改的元素的跨度,从第一个到最后一个);然而,修改的元素是连续的,这不是必要的。从而,写掩蔽字段770允许部分向量操作,包括加载、存储、算术、逻辑等。尽管描述其中写掩蔽字段770的内容选择包含要使用的写掩蔽的许多写掩蔽寄存器中的一个(并且从而写掩蔽字段770的内容间接识别要执行的掩蔽)的实施例,备选实施例相反或另外允许掩蔽写字段770的内容直接规定要执行的掩蔽。

立即字段772-它的内容允许规定立即。该字段在它在不支持立即的通用向量友好格式的实现中不存在并且它在未使用立即的指令中不存在这一意义上是可选的。

类别字段768-它的内容区分不同类别的指令。参考图7A-B,该字段的内容在类别A和类别B指令之间选择。在图8A-B中,圆角方形用于指示在字段中存在特定值(例如,在图7A-B中分别是类别字段768的类别A 768A和类别B 768B)。

类别A的指令模板

在类别A的非存储器访问705指令模板的情况下,alpha字段752解释为RS字段752A,它的内容区分要执行的不同增广操作类型中的哪一个(例如,舍入752A.1和数据变换752A.2分别对无存储器访问的舍入型操作710和无存储器访问的数据变换类型操作715指令模板规定),而beta字段754区分要执行规定类型的操作中的哪个。在无存储器访问705指令模板中,标度字段760、位移字段762A和位移标度字段762B不存在。

无存储器访问指令模板-全舍入控制型操作

在无存储器访问全舍入控制型操作701指令模板中,beta字段754解释为舍入控制字段754A,它的内容提供静态舍入。尽管在描述的实施例中舍入控制字段754A包括抑制所有浮点异常(SAE)字段756和舍入操作控制字段758,备选实施例可以支持这些概念、可以将这些概念编码为相同字段或仅具有这些概念/字段中的一个或另一个(例如,可以仅具有舍入操作控制字段758)。

SAE字段756-它的内容区分是否停用异常事件报告;在SAE字段756的内容指示启用抑制时,给定指令未报告任何种类的浮点异常标志并且未引发任何浮点异常处理程序。

舍入操作控制字段758-它的内容区分执行一组舍入操作中的哪一个(例如,上舍入、下舍入、朝零舍入和舍入到最接近)。从而,舍入操作控制字段758允许在每指令基础上改变舍入模式。在本发明的一个实施例(其中处理器包括用于规定舍入模式的控制寄存器)中,舍入操作控制字段750的内容覆盖寄存器值。

无存储器访问指令模板-数据变换型操作

在无存储器访问数据变换型操作715指令模板中,beta字段754解释为数据变换字段754B,它的内容区分要执行许多数据变换中的哪一个(例如,无数据变换、搅合(swizzle)、广播)。

在类别A的存储器访问720指令模板的情况下,alpha字段752解释为驱逐提示字段752B,它的内容区分要使用驱逐提示中的哪一个(在图7A中,暂时752B.1和非暂时752B.2分别对存储器访问的暂时725指令模板和存储器访问的非暂时730指令模板规定),而beta字段754解释为数据操纵字段754C,它的内容区分要执行许多数据操纵操作(也称为基元)中的哪一个(例如,无操纵;广播;源的上转换;和目的地的下转换)。存储器访问720指令模板包括标度字段760,并且可选地包括位移字段762A或位移标度字段762B。

向量存储器指令利用转换支持来执行从存储器的向量加载和到存储器的向量存储。如与常规向量指令一样,向量存储器指令采用逐数据元素方式将数据传输到存储器/从存储器传输,其中实际上传输的元素由选为写掩蔽的向量掩蔽的内容指定。

存储器访问指令模板-暂时

暂时数据是可能很快被重用以足以从高速缓存获益的数据。然而,这是提示,并且不同处理器可以采用不同方式实现它,包括完全忽略提示。

存储器访问指令模板-非暂时

非暂时数据是不太可能很快被重用以足以从第1级高速缓存中的高速缓存获益的数据并且就驱逐来说应给予优先级。然而这是提示并且不同处理器可以采用不同方式实现它,包括完全忽略提示。

类别B的指令模板

在类别B的指令模板的情况下,alpha字段752解释为写掩蔽控制(Z)字段752C,它的内容区分由写掩蔽字段770控制的写掩蔽是应合并还是应归零。

在类别B的非存储器访问705指令模板的情况下,beta字段754的部分解释为RL字段757A,它的内容区分要执行不同增广操作类型中的哪一个(例如,舍入757A.1和向量长度(VSIZE)757A.2分别对无存储器访问的写掩蔽控制的部分舍入控制型操作712指令模板和无存储器访问的写掩蔽控制的VSIZE型操作717指令模板规定),而beta字段754的余下部分区分要执行规定类型的操作中的哪个。在无存储器访问705指令模板中,标度字段760、位移字段762A和位移标度字段762B不存在。

在无存储器访问的写掩蔽控制的部分舍入控制型操作710指令模板中,beta字段754的余下部分解释为舍入操作字段759A并且停用异常事件报告(给定指令未报告任何种类的浮点异常标志并且未引发任何浮点异常处理程序)。

舍入操作控制字段759A-正如舍入操作控制字段758那样,它的内容区分执行一组舍入操作中的哪一个(例如,上舍入、下舍入、朝零舍入和舍入到最接近)。从而,舍入操作控制字段759A允许在每指令基础上改变舍入模式。在本发明的一个实施例(其中处理器包括用于规定舍入模式的控制寄存器)中,舍入操作控制字段750的内容覆盖该寄存器值。

在无存储器访问的写掩蔽控制的VSIZE型操作717指令模板中,beta字段754的余下部分解释为向量长度字段759B,它的内容区分要对许多数据向量长度中的哪一个(例如,128、256或512字节)执行。

在类别B的存储器访问720指令模板的情况下,beta字段754的部分解释为广播字段757B,它的内容区分是否要执行广播型数据操纵操作,而beta字段754的余下部分解释为向量长度字段759B。存储器访问720指令模板包括标度字段760,并且可选地包括位移字段762A或位移标度字段762B。

关于通用向量友好指令格式700,示出全操作码字段774,其包括格式字段740、基本操作字段742,和数据元素宽度字段764。尽管示出其中全操作码字段774包括这些字段中的全部的一个实施例,全操作码字段774在不支持这些字段中的全部的实施例中包括少于全部的这些字段。全操作码字段774提供操作代码(操作码)。

增广操作字段750、数据元素宽度字段764和写掩蔽字段770允许采用通用向量友好指令格式在每指令基础上规定这些特征。

写掩蔽字段和数据元素宽度字段的组合创建类型化指令,因为它们允许基于不同数据元素宽度施加掩蔽。

在类别A和类别B内发现的各种指令模板在不同情形中是有益的。在一些实施例中,不同处理器或处理器内的不同核可以仅支持类别A、仅支持类别B或支持两个类别。例如,预计用于通用计算的高性能通用无序核可以仅支持类别B,主要预计用于图形和/或科学(吞吐量)计算的核可以仅支持类别A,并且预计用于两者的核可以支持两者(当然,具有来自两个类别的模板和指令某一混合但不是来自两个类型的所有模板和指令的核在本发明的范围内)。

单个处理器还可以包括多个核,其中的全部支持相同类别或其中不同核支持不同类别。例如,在具有单独的图形和通用核的处理器中,主要预计用于图形和/或科学计算的图形核中的一个可以仅支持类别A,而通用核中的一个或多个可以是仅支持类别B的具有预计用于通用计算的无序执行和寄存器重命名的高性能通用核。不具有单独图形核的另一个处理器可以包括既支持类别A也支持类别B的一个或多个通用有序或无序核。

当然,来自一个类别的特征在不同实施例中还可以在其他类别中实现。用高级语言编写的程序将被置入(例如,适时编译或静态编译)多个不同可执行形式,其包括:1)仅具有得到目标处理器支持的类别的指令以用于执行的形式;或2)具有使用所有类别的指令的不同组合编写的备用例程并且具有控制流代码的形式,该控制流代码基于当前执行代码的处理器所支持的指令来选择例程来执行。

示范性特定向量友好指令格式

图8是图示根据实施例的示范性特定向量友好指令格式的框图。图8示出特定向量友好指令格式800,其在它规定字段的位点、大小、解释和顺序以及对于那些字段中的一些的值这一意义上是特定的。特定向量友好指令格式800可以用于扩展x86指令集,并且从而字段中的一些与在现有x86指令集及其扩展(例如,AVX)中使用的那些相似或相同。该格式与具有扩展的现有x86指令集的前缀编码字段、实际操作码字节字段、MOD R/M字段、SIB字段、位移字段和立即字段保持一致。图示来自图8的字段映射成的来自图7的字段。

应理解,尽管为了说明目的在通用向量友好指令格式700的上下文中参考特定向量友好指令格式800描述实施例,本发明不限于特定向量友好指令格式800,但要求保护的情况下除外。例如,通用向量友好指令格式700对各种字段预想多种可能大小,而特定向量友好指令格式800示出为具有特定大小的字段。通过特定示例,尽管数据元素宽度字段764图示为采用特定向量友好指令格式800的一位字段,本发明并不受此限制(即,通用向量友好指令格式700预想数据元素宽度字段764的其他大小)。

通用向量友好指令格式700包括在下文按图8A中图示的顺序列出的下列字段。

EVEX前缀(字节0-3)802-采用四字节形式编码。

格式字段740(EVEX字节0,位[7:0])-第一字节(EVEX字节0)是格式字段740并且它包含0x62(在本发明的一个实施例中用于区分向量友好指令格式的唯一值)。

第二-第四字节(EVEX字节1-3)包括提供特定能力的许多位字段。

REX字段805(EVEX字节1,位[7-5])-由EVEX.R位字段(EVEX字节1,位[7]-R)、EVEX.X位字段(EVEX字节1,位[6]-X)和757B EX字节1、位[5]-B)组成。EVEX.R、EVEX.X和EVEX.B位字段提供与对应VEX位字段相同的功能性,并且使用1s补码形式编码,即ZMM0编码为1111B,ZMM15编码为0000B。如本领域内众所周知的,指令的其他字段对寄存器索引的较低三个位编码(rrr、xxx和bbb),使得Rrrr、Xxxx和Bbbb可以通过添加EVEX.R、EVEX.X和EVEX.B而形成。

REX’字段710-这是REX’字段710的第一部分并且是用于对扩展32寄存器集的较高16或较低16编码的EVEX.R’位字段(EVEX字节1,位[4]-R’)。在本发明的一个实施例中,该位连同如下文指示的其他采用位反转格式存储来与BOUND指令区分开(采用众所周知的x86 32位模式),该BOUND指令的实际操作码字节是62,但在MOD R/M字段(下文描述)中未接受MOD字段中的值11;备选实施例未存储此以及下文其他采用反转格式的其他指示位。值1用于对较低16寄存器编码。也就是说,R’Rrrr通过使EVEX.R’、EVEX.R和来自其他字段的其他RRR组合而形成。

操作码映射字段815(EVEX字节1,位[3:0]-mmmm)-它的内容对暗指的前导操作码字节(0F、0F 38或0F 3)编码。

数据元素宽度字段764(EVEX字节2,位[7]-W)由标记EVEX.W表示。EVEX.W用于定义数据类型(32位数据元素或64位数据元素)的粒度(大小)。

EVEX.vvvv 820(EVEX字节2,位[6:3]-vvvv)-EVEX.vvvv的作用可以包括以下:1)EVEX.vvvv对采用反转(1s补码)形式规定的第一源寄存器操作数编码并且对于具有2个或以上源操作数的指令有效;2)EVEX.vvvv对目的地寄存器操作数(对于某些向量移位采用1s补码形式规定)编码;或3)EVEX.vvvv未对任何操作数编码,字段被保留并且应包含1111b。从而,EVEX.vvvv字段820对采用反转(1s补码)形式存储的第一源寄存器说明符的4个低阶位编码。根据指令,附加的不同EVEX位字段用于将说明符大小扩展到32个寄存器。

EVEX.U 768类别字段(EVEX字节2,位[2]-U)-如果EVEX.U=0,它指示类别A或EVEX.U0;如果EVEX.U=1,它指示类别B或EVEX.U1。

前缀编码字段825(EVEX字节2,位[1:0]-pp)-为基本操作字段提供额外位。除对采用EVEX前缀格式的遗留SSE指令提供支持外,这还具有使SIMD前缀紧凑的益处(而不需要字节来表达SIMD前缀,EVEX前缀仅需要2个位)。在一个实施例中,为了支持使用采用遗留格式和采用EVEX前缀格式两者的SIMD前缀(66H、F2H、F3H)的遗留SSE指令,这些遗留SIMD前缀编码为SIMD前缀编码字段;并且在运行时间在提供给解码器的PLA(因此PLA可以执行这些遗留指令的遗留和EVEX格式两者而没有修改)之前扩充成遗留SIMD前缀。尽管较新指令可以直接使用EVEX前缀编码字段的内容作为操作码扩展,某些实施例为了一致性采用相似方式扩充但允许由这些遗留SIMD前缀规定的不同含义。备选实施例可以重新设计PLA来支持2位SIMD前缀编码,并且从而不需要扩充。

Alpha字段752(EVEX字节3,位[7]-EH;也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.write mask control和EVEX.N;同样用α图示)-如之前描述的,该字段是上下文特定的。

Beta字段754(EVEX字节3,位[6:4]-SSS,也称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;同样用图示βββ)-其之前描述的,该字段是上下文特定的。

REX’字段710-这是REX’字段的剩余部分并且是可以用于对扩展32寄存器集的较高16或较低16编码的EVEX.V’位字段(EVEX字节3,位[3]-V’)。该位采用位反转格式存储。值1用于对较低16寄存器编码。也就是说,V’VVVV通过使EVEX.V’、EVEX.vvvv组合而形成。

写掩蔽字段770(EVEX字节3,位[2:0]-kkk)-它的内容规定如之前描述的写掩蔽寄存器中寄存器的索引。在本发明的一个实施例中,特定值EVEX.kkk=000具有暗指对于特定指令使用无写掩蔽的特殊行为(这可以采用多种方式实现,包括使用硬接线到所有绕过掩蔽硬件的硬件的写掩蔽)。

实际操作码字段830(字节4)也称为操作码字节。操作码的部分在该字段中规定。

MOD R/M字段840(字节5)包括MOD字段842、Reg字段844和R/M字段846。如之前描述的,MOD字段842的内容区分存储器访问和非存储器访问操作。Reg字段844的作用可以总结为两个情形:对目的地寄存器操作数或源寄存器操作数编码,或被视为操作码扩展且未用于对任何指令操作数编码。R/M字段846的作用可以包括以下:对引用存储器地址的指令操作数编码,或对目的地寄存器操作数或源寄存器操作数编码。

标度、索引、基址(Base)(SIB)字节(字节6)-如之前描述的,标度字段750的内容用于存储器地址生成。SIB.xxx 854和SIB.bbb 856-这些字段的内容之前关于寄存器索引Xxxx和Bbbb而被引用。

位移字段762A(字节7-10)-在MOD字段842包含10时,字节7-10是位移字段762A,并且它与遗留32位移位(disp32)相同地运作并且以字节粒度运作。

位移因数字段762B(字节7)-在MOD字段842包含01时,字节7是位移因数字段762B。该字段的位点与遗留x86指令集8位位移(disp8)的相同,该遗留x86指令集8位位移(disp8)以字节粒度运作。因为disp8带符号扩展,它可以仅在-128与127字节偏移之间寻址;从64字节高速缓存行方面来看,disp8使用8个位,其可以设置成仅仅四个实际使用值-128、-64、0和64;因为通常需要较大范围,使用disp32;然而,disp32需要4个字节。与disp8和disp32相比之下,位移因数字段762B是disp8的重新解释;在使用位移因数字段762B时,实际位移通过位移因数字段的内容乘以存储器操作数访问的大小(N)来确定。该类型的位移称为disp8*N。这使平均指令长度减少(单个字节用于位移但具有大得多的范围)。这样的压缩位移基于有效位移是存储器访问的粒度的倍数并且因此不需要对地址偏移的冗余低阶位编码这一假设。也就是说,位移因数字段762B替换遗留x86指令集8位位移。从而,采用与x86指令集8位位移相同的方式对位移因数字段862B编码(因此在ModRM/SIB编码规则中没有改变),唯一例外是disp8过载成disp8*N。也就是说,在编码规则或编码长度方面没有改变而仅在由硬件解释位移值方面(这需要通过存储器操作数的大小来定标位移以获得逐字节地址偏移)有改变。

立即字段772如之前描述的那样操作。

全操作码字段

图8B是图示根据本发明的一个实施例构成全操作码字段774的特定向量友好指令格式800的字段的框图。具体地,全操作码字段774包括格式字段740、基本操作字段742和数据元素宽度(W)字段764。基本操作字段742包括前缀编码字段825、操作码映射字段815和实际操作码字段830。

寄存器索引字段

图8C是图示根据本发明的一个实施例构成寄存器索引字段744的特定向量友好指令格式800的字段的框图。具体地,寄存器索引字段744包括REX字段805、REX’字段810、MODR/M.reg字段844、MODR/M.r/m字段846、VVVV字段820、xxx字段854和bbb字段856。

增广操作字段

图8D是图示根据本发明的一个实施例构成增广操作字段750的特定向量友好指令格式800的框图。在类别(U)字段768包含0时,它表示EVEX.U0(类别A 768A);在它包含1时,它表示EVEX.U1(类别B 768B)。在U=0并且MOD字段842包含11(其表示无存储器访问操作)时,alpha字段752(EVEX字节3,位[7]-EH)解释为rs字段752A。在rs字段752A包含1(舍入752A.1)时,beta字段754(EVEX字节3,位[6:4]-SSS)解释为舍入控制字段754A。舍入控制字段754A包括一位SAE字段756和两位舍入操作字段758。在rs字段752A包含0(数据变换752A.2)时,beta字段754(EVEX字节3,位[6:4]-SSS)解释为三位数据变换字段754B。在U=0并且MOD字段842包含00、01或10(其表示存储器访问操作)时,alpha字段752(EVEX字节3,位[7]-EH)解释为驱逐提示(EH)字段752B并且beta字段754(EVEX字节3,位[6:4]-SSS)解释为三位数据操纵字段754C。

在U=1时,alpha字段752(EVEX字节3,位[7]-EH)解释为写掩蔽控制(Z)字段752C。在U=1并且MOD字段842包含11(其表示无存储器访问操作)时,beta字段754(EVEX字节3,位[4]-S0)的部分解释为RL字段757A;在它包含1(舍入757A.1)时,beta字段754的余下部分(EVEX字节3,位[6-5]-S2-1)解释为舍入操作字段759A,而在RL字段757A包含0(VSIZE 757.A2)时,beta字段754的余下部分(EVEX字节3,位[6-5]-S2-1)解释为向量长度字段759B(EVEX字节3,位[6-5]-L1-0)。在U=1并且MOD字段842包含00、01或10(其表示存储器访问操作)时,beta字段754(EVEX字节3,位[6:4]-SSS)解释为向量长度字段759B(EVEX字节3,位[6-5]-L1-0)和广播字段757B(EVEX字节3,位[4]-B)。

示范性寄存器架构

图9是根据本发明的一个实施例的寄存器架构900的框图。在图示的实施例中,存在32个向量寄存器910,其是512位宽;这些寄存器引用为zmm0至zmm31。较低16个zmm寄存器的较低阶356个位覆盖在寄存器ymm0-16上。较低16个zmm寄存器的较低阶128个位(ymm寄存器的较低阶128个位)覆盖在寄存器xmm0-15上。特定向量友好指令格式800对如在下文的表6中图示的这些覆盖寄存器堆操作。

表6-寄存器

也就是说,向量长度字段759B在最大长度与一个或多个其他较短长度之间选择,其中每个这样的较短长度是预编码长度的长度的一半;并且没有向量长度字段759B的指令模板对最大向量长度操作。此外,在一个实施例中,特定向量友好指令格式800的类别B指令模板对紧缩或标量单/双精度浮点数据和紧缩或标量整数数据操作。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的操作;较高阶数据元素位置保留为与它们在指令之前一样或者归零,这取决于实施例。

写掩蔽寄存器915-在图示的实施例中,存在8个写掩蔽寄存器(k0至k7),每个的大小是64个位。在备选实施例中,写掩蔽寄存器915的大小是16个位。如之前描述的,在本发明的一个实施例中,向量掩蔽寄存器k0无法用作写掩蔽;在通常将指示k0的编码用于写掩蔽时,它选择硬接线写掩蔽0xFFFF,从而有效地对该指令停用写掩蔽。

通用寄存器925-在图示的实施例中,存在十六个64位通用寄存器,其连同现有x86寻址模式一起使用来对存储器操作数寻址。这些寄存器通过它们的名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8至R15来引用。

标量浮点堆栈寄存器堆(x87堆栈)945,在其上混叠MMX紧缩整数平面寄存器堆950-在图示的实施例中,x87堆栈是用于使用x87指令集扩展对32/64/80位浮点数据执行标量浮点运算的八元素堆栈;而MMX寄存器用于对64位紧缩整数数据执行操作,以及用于对在MMX与XMM寄存器之间执行的某些操作保持操作数。

备选实施例可以使用更宽或更窄寄存器。另外,备选实施例可以使用更多、更少或不同的寄存器堆和寄存器。

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

处理器核可以由于不同目的采用不同方式以及在不同处理器中实现。例如,这样的核的实现可以包括:1)预计用于通用计算的通用有序核;2)预计用于通用计算的高性能通用无序核;3)主要预计用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可以包括:1)CPU,其包括预计用于通用计算的一个或多个通用有序核和/或预计用于通用计算的一个或多个通用无序核;以及2)协处理器,其包括主要预计用于图形和/或科学(吞吐量)的一个或多个专用核。这样的不同处理器导致不同的计算机系统架构,其可以包括:1)与CPU在单独芯片上的协处理器;2)与CPU在相同的封装件中的单独晶片上的协处理器;3)与CPU在相同晶片上的协处理器(在该情况下,这样的协处理器有时称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或称为专用核);以及4)芯片上系统,其在相同晶片上可以包括描述的CPU(有时称为应用核或应用处理器)、上文描述的协处理器和额外功能性。接着描述示范性核架构,后跟示范性处理器和计算机架构的描述。

示范性核架构

有序和无序核框图

图10A是图示根据实施例的示范性有序流水线和示范性寄存器重命名、无序发出/执行流水线两者的框图。图10B是图示有序架构核的示范性实施例和根据实施例在处理器中要包括的示范性寄存器重命名、无序发出/执行架构核两者的框图。图10A-B中的实线框图示有序流水线和有序核,而虚线框的可选添加图示寄存器重命名、无序发出/执行流水线和核。考虑到有序方面是无序方面的子集,将描述无序方面。

在图10A中,处理器流水线1000包括提取段1002、长度解码段1004、解码段1006、分配段1008、重命名段1010、调度(也称为调派或发出)段1012、寄存器读取/存储器读取段1014、执行段1016、写回/存储器写入段1018、异常处理段1022和提交段1024。

图10B示出处理器核1090,其包括耦合于执行引擎单元1050的前端单元1030,并且这两者都耦合于存储器单元1070。核1090可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或混合或备选核类型。作为再另一个选项,核1090可以是专用核,例如网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核或类似物。

前端单元1030包括分支预测单元1032,其耦合于指令高速缓存行1034,该指令高速缓存单元1034耦合于指令翻译后备缓冲器(TLB)1036,其耦合于指令提取单元1038,该指令提取单元1038耦合于解码单元1040。解码单元1040(或解码器)可以对指令解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号作为输出,其从原始指令解码或另外反映原始指令或从原始指令得出。解码单元1040可以使用各种不同机制实现。适合机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核1090包括微代码ROM或存储对于某些宏指令(例如,在解码单元1040中或另外在前端单元1030内)的微代码的其他介质。解码单元1140耦合于执行引擎单元1050中的重命名/分配器单元1052。

执行引擎单元1050包括重命名/分配器单元1052,其耦合于引退单元1054和一个或多个调度器单元的集1056。调度器单元1056代表任意数量的不同调度器,其包括保留站、中央指令窗口等。调度器单元1056耦合于物理寄存器堆单元1058。物理寄存器堆单元1058中的每个代表一个或多个物理寄存器堆,其中的不同物理寄存器堆存储一个或多个不同数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,指令指针,其是要执行的下一个指令的地址)等。在一个实施例中,物理寄存器堆单元1058包括向量寄存器单元、写掩蔽寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩蔽寄存器和通用寄存器。物理寄存器堆单元1058与引退单元1054重叠来图示可以实现寄存器重命名和无序执行所采用的各种方式(例如,使用重排序缓冲器和引退寄存器堆;使用未来文件、历史缓冲器和引退寄存器堆;使用寄存器映射和寄存器池;等)。引退单元1054和物理寄存器堆单元1058耦合于执行集群1060。执行集群1060包括一个或多个执行单元的集1062和一个或多个存储器访问单元的集1064。执行单元1062可以对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。尽管一些实施例可以包括专用于特定功能或功能集的许多执行单元,其他实施例可以仅包括一个执行单元或多个执行单元,其全部执行所有功能。因为某些实施例对某些类型的数据/操作创建单独流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线,和/或存储器访问流水线,每个具有它们自身的调度器单元、物理寄存器堆单元和/或执行集群-并且在单独存储器访问流水线的情况下,实现其中仅该流水线的执行集群具有存储器访问单元1064的某些实施例),调度器单元1056、物理寄存器堆单元1058和执行集群1060示出为可能是复数个。还应理解,在使用单独流水线的情况下,这些流水线中的一个或多个可以是无序发出/执行并且余下的是有序的。

存储器访问单元集1064耦合于存储器单元1070,其包括耦合于数据高速缓存单元1074的数据TLB单元1072,该数据高速缓存单元1074耦合于2级(L2)高速缓存单元1076。在一个示范性实施例中,存储器访问单元1064可以包括负载单元、存储地址单元和存储数据单元,其中的每个耦合于存储器单元1070中的数据TLB单元1072。指令高速缓存单元1034进一步耦合于存储器单元1070中的2级(L2)高速缓存单元1076。L2高速缓存单元1076耦合于一个或多个其他级高速缓存并且最终耦合于主存储器。

通过示例,示范性寄存器重命名无序发出/执行核架构可以如下实现流水线1000:1)指令提取1138执行提取和长度解码段1002和1004;2)解码单元1040执行解码段1006;3)重命名/分配器单元1052执行分配段1008和重命名段1010;4)调度器单元1056执行调度段1012;5)物理寄存器堆单元1058和存储器单元1070执行寄存器读取/存储器读取段1014;执行集群1060执行执行段1016;6)存储器单元1070和物理寄存器堆单元1058执行写回/存储器写入段1018;7)在异常处理段1022中可以牵涉各种单元;以及8)引退单元1054和物理寄存器堆单元1058执行提交段1024。

核1090可以支持:一个或多个指令集(例如,x86指令集(具有添加有较新版本的一些扩展);加利福尼亚州Sunnyvale市的MIPS Technologies的MIPS指令集;加利福尼亚州San Jose市的ARM Holdings的ARM指令集(具有可选的额外扩展,例如NEON)),其包括本文描述的指令。在一个实施例中,核1090包括支持紧缩数据指令集扩展(例如,AVX1、AVX2,和/或某一形式的通用向量友好指令格式(U=0和/或U=1))的逻辑,由此允许被许多多媒体应用使用的操作使用紧缩数据来执行。

应理解,核可以支持多线程(执行两个或以上并行集的操作或线程),并且可以采用多种方式这样做,包括时间分片多线程、同时多线程(其中单个物理核对线程中的每个提供逻辑核,该物理核是同时多线程的)或其组合(例如,时间分片提取和解码以及之后的同时多线程,例如在Intel® Hyperthreading技术中)。

尽管在无序执行的上下文中描述寄存器重命名,应理解,寄存器重命名可以在有序架构中使用。尽管处理器的图示实施例还包括单独指令和数据高速缓存单元1034/1074和共享L2高速缓存单元1076,备选实施例可以对于指令和数据两者具有单个内部高速缓存,例如1级(L1)内部高速缓存,或多级内部高速缓存。在一些实施例中,系统可以包括内部高速缓存以及在核和/或处理器外部的外部高速缓存的组合。备选地,所有高速缓存可以在核和/或处理器外部。

特定示范性有序核架构

图11A-B图示更特定的示范性有序核架构的框图,该核将是芯片中的若干逻辑块(其包括具有相同类型和/或不同类型的其他核)中的一个。逻辑块通过根据应用具有某种固定功能逻辑、存储器I/O接口和其他必要I/O逻辑的高带宽互连网络(例如,环型网络)来通信。

图11A是根据实施例的单个处理器核连同它到晶片上互连网络1102的连接以及它的2级(L2)高速缓存1104的本地子集的框图。在一个实施例中,指令解码器1100支持具有紧缩数据指令集扩展的x86指令集。L1高速缓存1106允许对高速缓存存储器直至标量和向量单元的低延迟访问。尽管在一个实施例中(为了简化设计),标量单元1108和向量单元1110使用单独寄存器集(分别地,标量寄存器1112和向量寄存器1114)并且在它们之间传输的数据被写入存储器并且然后从1级(L1)高速缓存1106读回,备选实施例可以使用不同的方法(例如,使用单个寄存器集或包括通信路径,其允许数据在两个寄存器堆之间传输而不被写回和读回)。

L2高速缓存1104的本地子集是全局L2高速缓存的部分,其分成单独本地子集,每个处理器核一个。每个处理器核具有到它自己的L2高速缓存1104的本地子集的直接访问路径。处理器核读取的数据存储在它的L2高速缓存子集1104中并且可以与其他处理器核访问它们自己的本地L2高速缓存子集并行地被快速访问。处理器核写入的数据存储在它自己的L2高速缓存子集1104中并且如必要的话从其他子集刷新(flush)。环型网络对共享数据确保一致性。环型网络是双向的,以允许例如处理器核、L2高速缓存和其他逻辑块等代理在芯片内彼此通信。每个环型数据路径每个方向是1012位宽。

图11B是根据实施例的图11A中的处理器核的部分的展开图。图11B包括L1高速缓存1104的L1数据高速缓存1106A部分,以及关于向量单元1110和向量寄存器1114的更多细节。具体地,向量单元1110是16宽向量处理单元(VPU)(参见16宽ALU 1228),其执行整数、单精度浮点和双精度浮点指令中的一个或多个。VPU支持用搅和单元1120搅合寄存器输入、利用数值转换单元1122A-B的数值转换以及对存储器输入用复制单元1124复制。写掩蔽寄存器1126允许预测所得的向量写入。

具有集成存储器控制器和专用逻辑的处理器

图12是根据实施例可以具有超过一个核、可以具有集成存储器控制器并且可以具有集成图形的处理器1200的框图。图12中的实线框图示处理器1200,其具有单核1202A、系统代理1210、一个或多个总线控制器单元的集1216,而虚线框的可选添加图示备选处理器1200,其具有多个核1202A-N、系统代理单元1210中的一个或多个集成存储器控制器单元的集1214和专用逻辑1208。

从而,处理器1200的不同实现可以包括:1)CPU,其中专用逻辑1208是集成图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核),并且核1202A-N是一个或多个通用核(例如,通用有序核、通用无序核、两者的组合);2)协处理器,其中核1202A-N是主要预计用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核1202A-N是大量通用有序核。从而,处理器1200可以是通用处理器、协处理器或专用处理器,例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量的许多集成核(MIC)协处理器(其包括30个或以上的核)、嵌入式处理器或类似物。处理器可以在一个或多个芯片上实现。处理器1200可以是一个或多个衬底的一部分和/或可以在一个或多个衬底上使用许多工艺技术中的任一个来实现,例如BiCMOS、CMOS或NMOS。

存储器层级包括在核内的一个或多个级别的高速缓存、一个或多个共享高速缓存单元的集1206和耦合于集成存储器控制器单元集1214的外部存储器(未示出)。共享高速缓存单元集1206可以包括一个或多个中间级别的高速缓存,例如2级(L2)、3级(L3)、4级(L4)或其他级别的高速缓存、最后级别的高速缓存(LLC)和/或其组合。尽管在一个实施例中基于环的互连单元1212使集成图形逻辑1208、共享高速缓存单元集1206和系统代理单元1210/集成存储器控制器单元1214互连,备选实施例可以使用任意数量的众所周知的技术用于互连这样的单元。在一个实施例中,维持一个或多个高速缓存单元1206与核1202-A-N之间的一致性。

在一些实施例中,核1202A-N中的一个或多个能够多线程。系统代理1210包括协调并且操作核1202A-N的那些部件。系统代理单元1210可包括例如功率控制单元(PCU)和显示单元。PCU可以是或包括用于调节核1202A-N和集成图形逻辑1208的功率状态所需要的逻辑和部件。显示单元用于驱动一个或多个外部连接的显示器。

核1202A-N从架构指令集方面来看可以是同构或异构的;即,核1202A-N中的两个或以上可以能够执行相同指令集,而其他可以仅能够执行该指令集的子集或不同指令集。

示范性计算机架构

图13-16是示范性计算机架构的框图。本领域内已知的对于便携式电脑、台式机、手持PC、个人数字助理、工程化工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、手机、便携式媒体播放器、手持设备和各种其他电子设备的其他系统设计和配置也是适合的。一般,能够包含如本文公开的处理器和/或其他执行逻辑的很多种系统或电子设备一般是适合的。

现在参考图13,示出根据本发明的一个实施例的系统1300的框图。该系统1300可以包括一个或多个处理器1310、1315,其耦合于控制器中枢1320。在一个实施例中,控制器中枢1320包括图形存储器控制器中枢(GMCH)1390和输入/输出中枢(IOH)1350(其可以在单独芯片上);GMCH 1390包括存储器和图形控制器,存储器1340和协处理器1345耦合于这些存储器和图形控制器;IOH 1350使输入/输出(I/O)设备1360耦合于GMCH 1390。备选地,存储器和图形控制器中的一个或两个在处理器内集成(如本文描述的),存储器1340和协处理器1345直接耦合于处理器1310和在具有IOH 1350的单芯片中的控制器中枢1320。

额外处理器1315的可选性质在图13中用折线指示。每个处理器1310、1315可以包括本文描述的处理核中的一个或多个并且可以是某一版本的处理器1200。

存储器1340可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或两者的组合。对于至少一个实施例,控制器中枢1320经由多点总线(例如前端总线(FSB))、点到点接口(例如QuickPath互连(QPI))或相似连接1395与处理器1310、1315通信。

在一个实施例中,协处理器1345是通用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器或类似物。在一个实施例中,控制器中枢1320可以包括集成图形加速器。

从品质(包括架构、微架构、热、功耗特性及类似物)的度量谱方面来看,在物理资源1310、1315之间可以存在多种差异。

在一个实施例中,处理器1310执行指令,其控制通用类型的数据处理操作。协处理器指令可以嵌入指令内。处理器1310将这些协处理器指令识别为应由附连协处理器1345执行的类型。因此,处理器1310在协处理器总线或其他互连上向协处理器1345发出这些协处理器指令(或代表协处理器指令的控制信号)。协处理器1345接受并且执行接收的协处理器指令。

现在参考图14,示出根据本发明的实施例的第一更具体示范性系统1400的框图。如在图14中示出的,多处理器系统1400是点到点互连系统,并且包括经由点到点互连1450而耦合的第一处理器1470和第二处理器1480。处理器1470和1480中的每个可以是某一版本的处理器1200。在本发明的一个实施例中,处理器1470和1480分别是处理器1310和1315,而协处理器1438是协处理器1345。在另一个实施例中,处理器1470和1480分别是处理器1410和协处理器1345。

示出处理器1470和1480,其分别包括集成存储器控制器(IMC)单元1472和1482。处理器1470还包括点到点(P-P)接口1476和1478作为它的总线控制器单元的部分;相似地,第二处理器1480包括P-P接口1486和1488。处理器1470、1480可经由点到点(P-P)接口1450使用P-P接口电路1478、1488交换信息。如在图14中示出的,IMC 1472和1482使处理器耦合于相应的存储器,即存储器1432和存储器1434,其可以是本地附连到相应处理器的主存储器的部分。

处理器1470、1480每个可以使用点到点接口电路1476、1494、1486、1498经由个体P-P接口1452、1454与芯片集1490交换信息。芯片集1490可以可选地经由高性能接口1439与协处理器1438交换信息。在一个实施例中,协处理器1438是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器或类似物。

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

芯片集1490可以经由接口1496耦合于第一总线1416。在一个实施例中,第一总线1416可以是外围部件互连(PCI)总线,或例如PCI Express总线或另一个第三代I/O互连总线等总线,但本发明的范围不受此限制。

如在图14中示出的,各种I/O设备1414连同总线桥1418可以耦合于第一总线1416,该总线桥1418使第一总线1416耦合于第二总线1420。在一个实施例中,例如协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器等一个或多个额外处理器1415耦合于第一总线1416。在一个实施例中,第二总线1420可以是低引脚计数(LPC)总线。各种设备可以耦合第二总线1420,其包括例如键盘和/或鼠标1422、通信设备1427和存储单元1428,例如盘驱动器或其他大容量存储设备,其在一个实施例中可以包括指令/代码和数据1430。此外,音频I/O 1424可以耦合于第二总线1420。注意其他架构是可能的。例如,代替图14的点到点架构,系统可以实现多点总线或其他这样的架构。

现在参考图15,示出根据本发明的实施例的第二更具体的示范性系统1500的框图。图14和图15中的类似元件具有类似的标号,并且图14的某些方面已经从图15省略以避免混淆图15的其他方面。

图15图示处理器1470、1480可以分别包括集成存储器和I/O控制逻辑(“CL”)1472和1482。从而,CL 1472、1482包括集成存储器控制器单元并且包括I/O控制逻辑。图15图示不仅存储器1432、1434耦合于CL 1472、1482,而且I/O设备1514也耦合于控制逻辑1472、1482。遗留I/O设备1515耦合于芯片集1490。

现在参考图16,示出根据本发明的实施例的SoC 1600的框图。图12中的相似元件具有类似的标号。虚线框也是更先进SoC上的可选特征。在图16中,互连单元1602耦合于:应用处理器1610,其包括:一个或多个核的集202A-N和共享高速缓存单元1206;系统代理单元1210;总线控制器单元1216;集成存储器控制器单元1214;一个或多个协处理器的集1620,其可以包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元1630;直接存储器访问(DMA)单元1632;和显示单元1640,用于耦合于一个或多个外部显示器。在一个实施例中,协处理器1620包括专用处理器,例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器或类似物。

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

程序代码(例如在图14中图示的代码1430)可以应用于输入指令来执行本文描述的功能并且生成输出信息。该输出信息可以采用已知方式应用于一个或多个输出设备。为了该申请,处理系统包括具有处理器的任何系统,例如;数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。

[程序代码可以采用高级程序式或面向对象的编程语言实现来与处理系统通信。根据期望,程序代码还可以采用汇编或机器语言实现。实际上,本文描述的机构在范围上不限于任何特定编程语言。在任何情况下,语言可以是编译或解释语言。

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

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

因此,本发明的实施例还包括非暂时性有形机器可读介质,其包含指令或包含设计数据,例如硬件描述语言(HDL),其定义本文描述的结构、电路、装置、处理器和/或系统特征。这样的实施例还可以称作程序产品。

仿真(其包括二进制翻译、代码变形等)

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

图17是根据实施例对比软件指令转换器使用的框图,软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令。在图示的实施例中,指令转换器是软件指令转换器,但备选地,指令转换器可在软件、固件、硬件或其各种组合中实现。图17示出采用高级语言1702的程序可使用x86编译器1704编译来生成x86二进制代码1706,其可以由具有至少一个x86指令集核1716的处理器本机执行。

具有至少一个x86指令集核1716的处理器代表任何处理器,其可以通过以下步骤而执行与具有至少一个x86指令集核的Intel处理器大致相同的功能以便实现与具有至少一个x86指令集核的Intel处理器大致相同的结果:兼容地执行或另外处理(1)Intel x86指令集核的指令集的相当大一部分或(2)以在具有至少一个x86指令集核的Intel处理器上运行为目的地的应用或其他软件的目标代码版本。x86编译器1704代表能操作成生成x86二进制代码1706(例如,目标代码)的编译器,这些x86二进制代码1706可以在具有或没有额外链接处理的情况下在具有至少一个x86指令集核1716的处理器上执行。相似地,图17示出采用高级语言1702的程序可使用备选指令集编译器1708编译来生成备选指令集二进制代码1710,其可以由没有至少一个x86指令集核1714的处理器(例如,具有执行加利福尼亚州Sunnyvale市的MIPS Technologies的MIPS指令集和/或执行加利福尼亚州San Jose市的ARM Holdings的ARM指令集的核的处理器)本机执行。

指令转换器1712用于将x86二进制代码1706转换成可以由没有x86指令集核1714的处理器本机执行的代码。该转换代码因为有此能力的指令转换器难以制造而不太可能与备选指令集二进制代码1710相同;然而,转换代码将完成一般操作并且由来自备选指令集的指令构成。从而,指令转换器1712代表软件、固件、硬件或其组合,其通过仿真、模拟或任何其他过程而允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码1706。

在前面的说明中,参考本发明的特定示范性实施例来描述本发明。然而,可以对其做出各种修改和改变而不偏离如在附上的权利要求中阐述的本发明的更广泛精神和范围,这将是显而易见的。说明和附图因此要在说明性而非限制性意义上来看待。

本文描述的指令指硬件的特定配置,例如专用集成电路(ASIC),其配置成执行某些操作或具有预定功能性。这样的电子设备典型地包括一个或多个处理器的集,其耦合于一个或多个其他部件,例如一个或多个存储设备(非暂时性机器可读存储介质)、用户输入/输出设备(例如,键盘、触屏和/或显示器)和网络连接。处理器集与其他部件的耦合典型地通过一个或多个总线和桥(也称作总线控制器)。存储设备和承载网络业务的信号分别代表一个或多个机器可读存储介质和机器可读通信介质。从而,给定电子设备的存储设备典型地存储代码和/或数据以供在该电子设备的一个或多个处理器的集上执行。

当然,本发明的实施例的一个或多个部分可以使用软件、固件和/或硬件的不同组合来实现。在该整个详细描述中,为了解释目的,阐述许多特定细节以便提供对本发明的全面理解。然而,本发明可以在没有这些特定细节中的一些的情况下实践,这对于本领域技术人员将是明显的。在某些实例中,未详尽描述众所周知的结构和功能以避免使本发明的主旨难以理解。因此,本发明的范围和精神应从附上的权利要求方面来判定。

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