BFLOAT16缩放和/或化简指令的制作方法

文档序号:33319200发布日期:2023-03-03 19:09阅读:25来源:国知局
bfloat16缩放和/或化简指令
技术领域
:1.本公开总体涉及bfloat16缩放和/或化简指令。
背景技术
::2.近年来,具有较低精度乘法和较高精度累加的融合乘法累加(fused-multiply-accumulate,fma)单元已被证明在机器学习/人工智能应用中是有用的,尤其是在训练深度神经网络方面,因为其计算强度极高。与经典的ieee-75432比特(fp32)和64比特(fp64)算术相比,这种降低精度的算术自然可以与其缩短的宽度不成比例地被加快速度。技术实现要素:3.根据本公开的第一实施例,提供了一种装置,包括:解码设备,用于对单个指令的实例进行解码,所述单个指令包括用于以下各项的字段:操作码、第一紧缩数据源操作对象的位置的标识、第二紧缩数据源操作对象的位置的标识、以及紧缩数据目的地操作对象的标识,其中,所述操作码用于指示执行设备要对于所述紧缩数据源操作对象的每个数据元素位置,通过将所述第一紧缩数据源操作对象的bf16数据元素乘以2的幂值来执行该数据元素的浮点缩放操作,其中,所述2的幂值的指数的值是所述第二紧缩数据源操作对象的bf16数据元素的向下取整值,并且将所述浮点缩放操作的结果存储到所述紧缩数据目的地操作对象的相应数据元素位置中;以及所述执行设备,用于根据所述操作码来执行经解码的指令。4.根据本公开的第二实施例,提供了一种系统,包括:存储器,用于存储单个指令的实例;解码设备,用于对所述单个指令的实例进行解码,所述单个指令包括用于以下各项的字段:操作码、第一紧缩数据源操作对象的位置的标识、第二紧缩数据源操作对象的位置的标识、以及紧缩数据目的地操作对象的标识,其中,所述操作码用于指示执行设备要对于所述紧缩数据源操作对象的每个数据元素位置,通过将所述第一紧缩数据源操作对象的bf16数据元素乘以2的幂值来执行该数据元素的浮点缩放操作,其中,所述2的幂值的指数的值是所述第二紧缩数据源操作对象的bf16数据元素的向下取整值,并且将所述浮点缩放操作的结果存储到所述紧缩数据目的地操作对象的相应数据元素位置中;以及所述执行设备,用于根据所述操作码来执行经解码的指令。5.根据本公开的第三实施例,提供了一种非暂态机器可读介质,至少存储有特定单个指令的实例,其中,所述特定单个指令的实例将被处理器通过执行一种方法来处理,该方法包括:对所述单个指令的实例进行解码,所述单个指令包括用于以下各项的字段:操作码、第一紧缩数据源操作对象的位置的标识、第二紧缩数据源操作对象的位置的标识、以及紧缩数据目的地操作对象的标识,其中,所述操作码用于指示执行模块要对于所述紧缩数据源操作对象的每个数据元素位置,通过将所述第一紧缩数据源操作对象的bf16数据元素乘以2的幂值来执行该数据元素的浮点缩放操作,其中,所述2的幂值的指数的值是所述第二紧缩数据源操作对象的bf16数据元素的向下取整值,并且将所述浮点缩放操作的结果存储到所述紧缩数据目的地操作对象的相应数据元素位置中;以及根据所述操作码来执行经解码的指令。6.根据本公开的第四实施例,提供了一种方法,包括:将特定单个指令从第一指令集体系结构转化成不同的第二指令集体系结构的一个或多个指令,所述特定单个指令包括用于以下各项的字段:操作码、第一紧缩数据源操作对象的位置的标识、第二紧缩数据源操作对象的位置的标识、以及紧缩数据目的地操作对象的标识,其中,所述操作码用于指示执行模块要对于所述紧缩数据源操作对象的每个数据元素位置,通过将所述第一紧缩数据源操作对象的bf16数据元素乘以2的幂值来执行该数据元素的浮点缩放操作,其中,所述2的幂值的指数的值是所述第二紧缩数据源操作对象的bf16数据元素的向下取整值,并且将所述浮点缩放操作的结果存储到所述紧缩数据目的地操作对象的相应数据元素位置中;对所述不同的第二指令集体系结构的一个或多个指令进行解码;执行经解码的不同的第二指令集体系结构的一个或多个指令。附图说明7.将参考附图来描述根据本公开的各种实施例,其中:8.图1示出了不同的浮点表示格式。9.图2示出了计算bf16数据元素的缩放的指令的示例性执行。10.图3示出了由处理器执行以处理计算bf16数据元素的缩放的指令的方法的实施例。11.图4示出了表示计算bf16数据元素的缩放的指令的执行和格式的伪代码的示例性实施例。12.图5示出了根据一些实施例的提取bf16数据元素的化简参量(reducedargument)的指令的执行的实施例。13.图6示出了根据一些实施例的由处理器执行以处理提取bf16数据元素的化简参量的指令的示例性方法的实施例。14.图7示出了表示提取bf16数据元素的化简参量的指令的执行和格式的伪代码的示例性实施例。15.图8示出了根据一些实施例的舍入bf16数据元素指令的执行的实施例。16.图9示出了根据一些实施例的由处理器执行以处理舍入bf16数据元素的指令的示例性方法的实施例。17.图10示出了表示舍入bf16数据元素指令的执行和格式的伪代码的示例性实施例。18.图11示出了处理诸如vscalefnepbf16、vreducenepbf16和/或vrndscalenepbf16指令之类的指令的硬件的实施例。19.图12示出了示例性系统的实施例。20.图13示出了处理器的实施例的框图,该处理器可以具有多于一个核心,可以具有集成的存储器控制器,并且可以具有集成的图形。21.图14(a)是示出根据本发明的实施例的示例性有序管线和示例性寄存器重命名、无序发出/执行管线两者的框图。22.图14(b)是示出根据本发明的实施例的要被包括在处理器中的有序体系结构核心architecture,isa)转化成第二isa的一个或多个指令,并且第二isa的一个或多个指令的执行会执行那些计算。38.在一些实施例中,指令中的一个或多个被定义为例如它们的执行会将非正规的输入或输出视为零,支持任何舍入模式,和/或报告或抑制浮点数值标志。39.图2示出了计算bf16数据元素的缩放的指令的示例性执行。虽然这幅图采取的是低位优先格式,但本文论述的原理在高位优先格式中也是可行的。具体地,这个指令的执行使得通过将第一源操作对象中的紧缩bf16浮点值乘以第二源操作对象中的bf16的2的幂值来计算第一源操作对象中的紧缩bf16浮点值的浮点缩放,并且将其存储在目的地操作对象中。40.计算bf16数据元素的缩放的指令(这里用vscalefnepbf的示例性操作码助记符(mnemonic)示出)包括一个或多个字段来定义该指令的操作码,一个或多个字段用于引用或指示第一和第二紧缩数据源(例如,寄存器或存储器位置),和/或一个或多个字段用于引用或指示紧缩数据目的地(例如,寄存器或存储器位置)。在一些实施例中,该指令还包括一个或多个字段,用于引用或指示写入掩码或谓词寄存器,该寄存器用来存储写入掩码或谓词值,如后文所述。41.计算bf16数据元素的缩放的指令的格式的一实施例是vscalefnepbfdst{k},src1,src2。在一些实施例中,vscalefnepbf是该指令的操作码助记符。dst是用于紧缩数据目的地寄存器操作对象的字段。src1和src2是用于源的一个或多个字段,例如紧缩数据寄存器和/或存储器。源操作对象和目的地操作对象可以有一个或多个大小,例如128比特、256比特、512比特,等等。当使用写入掩蔽或者谓词时,使用了{k}。42.在这个示例中,第一紧缩数据源201包括8个紧缩数据元素,每个是bf16格式。第一紧缩数据源201可以是寄存器或者存储器位置。第二紧缩数据源203包括8个紧缩数据元素,每个是bf16格式。第二紧缩数据源203可以是寄存器或者存储器位置。43.紧缩数据源201和203被馈送到执行电路209中,以便对其进行操作以计算浮点缩放。在一些实施例中,执行电路209根据以下公式使用缩放/化简电路211来计算缩放:目的地=源1*2(floor(源2)。在一些实施例中,该指令的这个执行使用舍入到最接近的(偶数)舍入模式。在一些实施例中,输出非正规数总是被冲刷到零,并且输入非正规数总是被视为零。44.紧缩数据目的地231被写入,以在与紧缩数据源201相应的紧缩数据元素中存储所得缩放值。在一些实施例中,当指令要求使用谓词或写入掩蔽时,写入掩码(或谓词)寄存器223规定了如何使用写入掩码电路221来使得所得缩放值被存储和/或归零。45.图3示出了由处理器执行以处理计算bf16数据元素的缩放的指令的方法的实施例。例如,如图14(b)所示的处理器核心、如下文详述的管线等等执行此方法。46.在301,取得指令,该指令具有用于以下各项的字段:操作码、第一紧缩数据源操作对象的位置的标识、第二紧缩数据源操作对象的位置的标识、以及紧缩数据目的地操作对象的标识,其中,操作码用于指示执行电路对于紧缩数据源操作对象的每个数据元素位置,通过将第一紧缩数据源的数据元素乘以2的幂值来执行该数据元素的浮点缩放操作,其中,2的幂值的指数值是第二紧缩数据源的数据元素的向下取整值,并且将浮点缩放操作的结果存储到紧缩数据目的地操作对象的相应数据元素位置中。47.在一些实施例中,在303,所取得的第一isa的指令被转化成不同的第二isa的一个或多个指令。不同的第二isa的一个或多个指令在被执行时提供了与好像所取得的指令已被执行那样的相同结果。注意,可以用硬件、软件或者其组合来执行该转化。48.在305,指令(或者经转化的一个或多个指令)被解码。这个解码可以使得生成要被执行的一个或多个微操作。49.在307,取回与经解码的指令的源操作对象相关联的数据值。例如,当源操作对象被存储在存储器中时,从指示的存储器位置取回数据。50.在309,经解码的(一个或多个)指令被执行电路(硬件)执行,例如本文所详述的执行电路。执行电路对于紧缩数据源操作对象的每个数据元素位置,通过将第一紧缩数据源的数据元素乘以2的幂值来执行该数据元素的浮点缩放操作,其中,2的幂值的指数值是第二紧缩数据源的数据元素的向下取整值,并且将浮点缩放操作的结果存储到紧缩数据目的地操作对象的相应数据元素位置中。51.在一些实施例中,在311,该指令被提交或引退。52.图4示出了表示计算bf16数据元素的缩放的指令的执行和格式的伪代码的示例性实施例。注意,evex.b对应到前缀1701(c)的b。daz、ftz、rne和sae的注释指的是使用对冲刷到零(flush-to-zero,ftz)、非正规数为零(denormals-are-zero,daz)、抑制所有异常(suppressallexceptions,sae)和舍入到偶数(round-to-even,rne)舍入的支持。53.图5示出了根据一些实施例的提取bf16数据元素的化简参量的指令的执行的实施例。虽然这幅图采取的是低位优先格式,但本文论述的原理在高位优先格式中也是可行的。提取bf16数据元素的化简参量的指令(这里用vreducenepbf16的示例性操作码助记符示出)包括一个或多个字段来定义该指令的操作码,一个或多个字段用于引用或指示bf16紧缩数据源(例如,寄存器或存储器位置),一个或多个字段用于指示缩放值(例如,立即数的一些部分或者存储在寄存器或存储器位置中的缩放值),和/或一个或多个字段用于引用或指示紧缩数据目的地(例如,寄存器或存储器位置)。在一些实施例中,该指令还包括一个或多个字段,该一个或多个字段用于引用或指示写入掩码或谓词寄存器,该寄存器用来存储写入掩码或谓词值,如后文所述。54.提取bf16数据元素的化简参量的指令的格式的一实施例是vreducenepbf16dst{k},src1imm8。在一些实施例中,vreducenepbf16是该指令的操作码助记符。dst是用于紧缩数据目的地寄存器操作对象的字段。src1是用于源的一个或多个字段,例如紧缩数据寄存器和/或存储器。imm8指的是立即数。源操作对象和目的地操作对象可以有一个或多个大小,例如128比特、256比特、512比特,等等。当使用写入掩蔽或者谓词时,使用了{k}。55.在这个示例中,紧缩数据源501包括8个紧缩数据元素,每个是bf16格式。紧缩数据源501可以是寄存器或者存储器位置。56.紧缩数据源501和立即数505被馈送到执行电路509中以对其进行操作。具体地,执行电路509(例如,缩放/化简电路511)根据立即数505提供的缩放比例,执行对紧缩数据源501的bf16数据元素的化简参量的提取。在一些实施例中,执行电路509是根据以下公式使用缩放/化简电路511来计算的:目的地=源1-(round(2m*源1))*2-m。缩放值m来自立即数505。57.在一些实施例中,该指令的这个执行使用舍入到最接近的(偶数)舍入模式。在一些实施例中,输出非正规数总是被冲刷到零,并且输入非正规数总是被视为零。58.紧缩数据目的地531被写入,以在与紧缩数据源501相应的紧缩数据元素中存储所得化简值。在一些实施例中,当指令要求使用谓词或写入掩蔽时,写入掩码(或谓词)寄存器523规定了如何使用写入掩码电路521来使得所得bf16格式的化简值被存储和/或归零。59.图6示出了根据一些实施例的由处理器执行以处理提取bf16数据元素的化简参量的指令的示例性方法的实施例。例如,如图14(b)所示的处理器核心、如下文详述的管线等等执行此方法。60.在601,取得指令,该指令具有用于以下各项的字段:操作码、紧缩数据源操作对象的位置的标识、以及紧缩数据目的地操作对象的标识,其中,操作码用于指示执行电路对于紧缩数据源操作对象的每个数据元素位置,使用缩放/化简电路511按照立即数505中指定的比特数目,来执行对紧缩数据源501的数据元素的化简参量的提取,并且将所提取的化简参量存储到紧缩数据目的地操作对象531的相应数据元素位置中。61.在一些实施例中,所取得的第一isa的指令在603处被转化成不同的第二isa的一个或多个指令。不同的第二isa的一个或多个指令在被执行时提供了与好像取得的指令已经被执行那样的相同结果。注意,可以用硬件、软件或者其组合来执行该转化。62.在605,指令(或者经转化的一个或多个指令)被解码。这个解码可以使得生成要被执行的一个或多个微操作。63.在607,取回与经解码的指令的源操作对象相关联的数据值。例如,当源操作对象被存储在存储器中时,从指示的存储器位置取回数据。64.在609,经解码的(一个或多个)指令被执行电路(硬件)来执行,例如本文所详述的执行电路。执行电路对于紧缩数据源操作对象的每个数据元素位置,按照立即数中指定的比特数目,来执行对紧缩数据源的数据元素的化简参量的提取,并且将所提取的化简参量存储到紧缩数据目的地操作对象的相应数据元素位置中。65.在一些实施例中,在611,该指令被提交或引退。66.图7示出了表示提取bf16数据元素的化简参量的指令的执行和格式的伪代码的示例性实施例。注意,evex.b对应到前缀1701(c)的b。daz、ftz、rne和sae的注释指的是使用对冲刷到零(ftz)、非正规数为零(daz)、抑制所有异常(sae)和舍入到偶数(rne)舍入的支持。67.图8示出了根据一些实施例的舍入bf16数据元素指令的执行的实施例。虽然这幅图采取的是低位优先格式,但本文论述的原理在高位优先格式中也是可行的。舍入bf16数据元素指令(这里用vrndscalenepbf16的示例性操作码助记符示出)包括一个或多个字段来定义该指令的操作码,一个或多个字段用于引用或指示bf16紧缩数据源(例如,寄存器或存储器位置),一个或多个字段用于指示舍入模式(例如,立即数的一些部分或存储在寄存器或存储器位置中的舍入模式),和/或一个或多个字段用于引用或指示紧缩数据目的地(例如,寄存器或存储器位置)。在一些实施例中,该指令还包括一个或多个字段,该一个或多个字段用于引用或指示写入掩码或谓词寄存器,该寄存器用来存储写入掩码或谓词值,如后文所述。68.舍入bf16数据元素指令的格式的一实施例是vrndscalenepbf16dst{k},src1imm。在一些实施例中,vrndscalenepbf16是该指令的操作码助记符。dst是用于紧缩数据目的地寄存器操作对象的字段。src1是用于源的一个或多个字段,例如紧缩数据寄存器、存储器位置和/或从存储器位置广播的向量。imm指的是对舍入模式进行编码的立即数。源操作对象和目的地操作对象可以有一个或多个大小,例如128比特、256比特、512比特,等等。当使用写入掩蔽或者谓词时,使用了{k}。69.在这个示例中,紧缩数据源801包括8个紧缩数据元素,每个是bf16格式。紧缩数据源801可以是寄存器或者存储器位置。70.紧缩数据源801和立即数805被馈送到执行电路809中以对其进行操作。具体地,执行电路809(例如,缩放/化简电路811)按照立即数805指定的舍入模式来执行对源操作对象801中的bf16数据元素的舍入。该舍入将输入舍入到整数值,再加上由立即数指定的分数的比特数目(要被包括在结果中),以生成每个数据元素的结果,并且将结果作为bf16值存储在目的地831中。在一些实施例中,该舍入被定义为目的地=2-m*舍入到最接近的偶数整数(2m*源)。m由立即数设置,例如8比特立即数的比特7:4。在一些实施例中,执行电路809的缩放/化简电路811执行这个操作。71.在一些实施例中,如果任何数据元素是发信号非数字(signalingnon-a-number,snan),那么它将被转换为安静非数字(quietnot-a-number,qnan)。在一些实施例中,该指令的这个执行使用舍入到最接近的(偶数)舍入模式。在一些实施例中,输出非正规数总是被冲刷到零,并且输入非正规数总是被视为零。这个指令的结果的符号被保留,包括零的符号。72.紧缩数据目的地831被写入,以在与紧缩数据源801相应的紧缩数据元素中存储所得值。在一些实施例中,当指令要求使用谓词或写入掩蔽时,写入掩码(或谓词)寄存器823规定了如何使用写入掩码电路821来使得所得值被存储和/或归零。73.图9示出了根据一些实施例的由处理器执行以处理舍入bf16数据元素的指令的示例性方法的实施例。例如,如图14(b)所示的处理器核心、如下文详述的管线等等执行此方法。74.在901,取得指令,该指令具有用于以下各项的字段:操作码、紧缩数据源操作对象的位置的标识、对舍入模式的指示、以及紧缩数据目的地操作对象的标识,其中,操作码用于指示执行电路对于紧缩数据源操作对象的每个紧缩数据元素位置,按照所指示的舍入模式来舍入该位置的紧缩数据元素,并且将舍入的结果存储在紧缩数据目的地操作对象的相应紧缩数据元素位置中。75.在一些实施例中,在903,所取得的第一isa的指令被转化成不同的第二isa的一个或多个指令。不同的第二isa的一个或多个指令在被执行时提供了与好像所取得的指令已经被执行那样的相同结果。可以用硬件、软件或者其组合来执行该转化。76.在905,指令(或者经转化的一个或多个指令)被解码。这个解码可以使得生成要被执行的一个或多个微操作。77.在907,取回与经解码的指令的源操作对象相关联的数据值。例如,当源操作对象被存储在存储器中时,从指示的存储器位置取回数据。78.在909,经解码的(一个或多个)指令被执行电路(硬件)执行,例如本文所详述的执行电路。执行电路对于紧缩数据源操作对象的每个紧缩数据元素位置,按照所指示的舍入模式来舍入该位置的紧缩数据元素,并且将舍入的结果存储在紧缩数据目的地操作对象的相应紧缩数据元素位置中。79.在一些实施例中,在911,该指令被提交或引退。1272和1282将处理器1270、1280耦合到各自的存储器,即存储器1232和存储器1234,这些存储器可以是在本地附接到各个处理器的主存储器的一些部分。92.处理器1270、1280可以各自利用点到点接口电路1276、1294、1286、1298经由个体p-p互连1252、1254来与芯片组1290交换信息。芯片组1290可以可选地经由高性能接口1292与协处理器1238交换信息。在一些实施例中,协处理器1238是专用处理器,例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器,等等。93.共享缓存(未示出)可以被包括在任一处理器1270、1280中,或者在两个处理器之外,但经由p-p互连与处理器连接,从而使得在处理器被置于低功率模式中的情况下任一个或两个处理器的本地缓存信息可以被存储在该共享缓存中。94.芯片组1290可以经由接口1296耦合到第一互连1216。在一些实施例中,第一互连1216可以是外围组件互连(peripheralcomponentinterconnect,pci)互连,或者诸如pci快速互连或另一i/o互连之类的互连。在一些实施例中,互连之一耦合到功率控制单元(powercontrolunit,pcu)1217,它可以包括电路、软件和/或固件,以执行与处理器1270、1280和/或协处理器1238有关的功率管理操作。pcu1217向电压调节器提供控制信息以使得电压调节器生成适当的调节电压。pcu1217还提供控制信息以控制所生成的操作电压。在各种实施例中,pcu1217可以包括多种功率管理逻辑单元(电路)来执行基于硬件的功率管理。这种功率管理可以是完全受处理器控制的(例如,由各种处理器硬件控制,并且可以由工作负载和/或功率约束、热约束或其他处理器约束来触发),和/或功率管理可以响应于外部源(例如,平台或功率管理源或系统软件)而被执行。95.pcu1217被图示为作为与处理器1270和/或处理器1280分开的逻辑而存在。在其他情况下,pcu1217可以在处理器1270或1280的核心(未示出)中的给定的一个或多个上执行。在一些情况下,pcu1217可以被实现为微控制器(专用或通用)或者被配置为执行其自己的专用功率管理代码(有时称为p代码)的其他控制逻辑。在另外的其他实施例中,pcu1217要执行的功率管理操作可以在处理器外部实现,例如通过单独的功率管理集成电路(powermanagementintegratedcircuit,pmic)或者位于处理器外部的另一组件来实现。在另外的其他实施例中,pcu1217要执行的功率管理操作可以被实现在bios或其他系统软件内。96.各种i/o设备1214可以耦合到第一互连1216,互连(总线)桥1218将第一互连1216耦合到第二互连1220。在一些实施例中,一个或多个额外的处理器1215,例如协处理器、高吞吐量mic处理器、gpgpu、加速器(例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列(fpga)、或者任何其他处理器,耦合到第一互连1216。在一些实施例中,第二互连1220可以是低引脚数(lowpincount,lpc)互连。各种设备可以耦合到第二互连1220,包括例如键盘和/或鼠标1222、通信设备1227、和存储单元电路1228。存储单元电路1228可以是磁盘驱动器或其他大容量存储设备,在一些实施例中,它可以包括指令/代码和数据1230。另外,音频i/o1224可以耦合到第二互连1220。注意,除了上述的点到点体系结构以外其他体系结构也是可能的。例如,取代点到点体系结构,诸如多处理器系统1200之类的系统可以实现多分支互连或者其他这种体系结构。97.示例性核心体系结构、处理器和计算机体系结构98.可以按不同的方式、为了不同的目的、在不同的处理器中实现处理器核心。例如,这种核心的实现方式可以包括:1)旨在用于通用计算的通用有序核心;2)旨在用于通用计算的高性能通用无序核心;3)主要旨在用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现方式可以包括:1)包括旨在用于通用计算的一个或多个通用有序核心和/或旨在用于通用计算的一个或多个通用无序核心的cpu;以及2)包括主要旨在用于图形和/或科学(吞吐量)的一个或多个专用核心的协处理器。这样的不同处理器导致不同的计算机系统体系结构,这些体系结构可以包括:1)位于与cpu分开的芯片上的协处理器;2)位于与cpu相同的封装件中、分开的管芯上的协处理器;3)位于与cpu相同的管芯上的协处理器(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可以在与所描述的cpu(有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)相同的管芯上包括上述协处理器以及额外的功能。接下来描述示例性核心体系结构,然后是对示例性处理器和计算机体系结构的描述。99.图13示出了处理器1300的实施例的框图,该处理器可以具有多于一个核心,可以具有集成的存储器控制器,并且可以具有集成的图形。实线框示出了具有单个核心1302a、系统代理1310和一组一个或多个互连控制器单元电路1316的处理器1300,而虚线框的可选添加示出了具有多个核心1302a-n、系统代理单元电路1310中的一组一个或多个集成存储器控制器单元电路1314、专用逻辑1308以及一组一个或多个互连控制器单元电路1316的替换处理器1300。注意,处理器1300可以是图12的处理器1270或1280或者协处理器1238或1215之一。100.因此,处理器1300的不同实现方式可以包括:1)cpu,其中专用逻辑1308是集成图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核心,未示出),并且核心1302a-n是一个或多个通用核心(例如,通用有序核心、通用无序核心、或者两者的组合);2)协处理器,其中核心1302a-n是大量的主要旨在用于图形和/或科学(吞吐量)的专用核心;以及3)协处理器,其中核心1302a-n是大量的通用有序核心。因此,处理器1300可以是通用处理器、协处理器或者专用处理器,例如,网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元电路)、高吞吐量集成众核(manyintegratedcore,mic)协处理器(包括30个或更多个核心)、嵌入式处理器,等等。处理器可以被实现在一个或多个芯片上。处理器1300可以是一个或多个衬底的一部分和/或可以利用若干个工艺技术中的任何一者被实现在一个或多个衬底上,这些技术例如是bicmos、cmos或nmos。101.存储器层次体系包括核心1302a-n内的一级或多级缓存单元电路1304a-n、一组一个或多个共享缓存单元电路1306、以及耦合到该组集成存储器控制器单元电路1314的外部存储器(未示出)。该组一个或多个共享缓存单元电路1306可以包括一个或多个中间级别缓存(例如第2级(l2)、第3级(l3)、第4级(4)或者其他级别的缓存),比如最后一级缓存(lastlevelcache,llc),和/或这些项的组合。虽然在一些实施例中基于环的互连网络电路1312互连专用逻辑1308(例如,集成图形逻辑)、该组共享缓存单元电路1306和系统代理单元电路1310,但替换实施例使用任何数目的公知技术来互连这种单元。在一些实施例中,在共享缓存单元电路1306中的一个或多个和核心1302a-n之间维持一致性。102.在一些实施例中,核心1302a-n中的一个或多个能够进行多线程处理。系统代理单元电路1310包括协调和操作核心1302a-n的那些组件。系统代理单元电路1310可以包括例如功率控制单元(powercontrolunit,pcu)电路和/或显示单元电路(未示出)。pcu可以是purposecomputinggraphicsprocessingunit,gpgpu)核心、图形核心,等等。110.前端单元电路1430可以包括分支预测单元电路1432,其耦合到指令缓存单元电路1434,指令缓存单元电路1434耦合到指令转化后备缓冲器(translationlookasidebuffer,tlb)1436,指令tlb1436耦合到指令取得单元电路1438,指令取得单元电路1438耦合到解码单元电路1440。在一个实施例中,指令缓存单元电路1434被包括在存储器单元电路1470中,而不是前端单元电路1430。解码单元电路1440(或解码器)可以对指令进行解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或者其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或者其他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。解码单元电路1440还可以包括地址生成单元电路(agu,未示出)。在一个实施例中,agu使用转发的寄存器端口来生成lsu地址,并且可以进一步执行分支转发(例如,立即数偏移分支转发,lr寄存器分支转发,等等)。可以利用各种不同的机制来实现解码单元电路1440。适当机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(programmablelogicarray,pla)、微代码只读存储器(readonlymemory,rom),等等。在一个实施例中,核心1490包括微代码rom(未示出)或其他介质,其为某些宏指令来存储微代码(例如,在解码单元电路1440中或者以其他方式在前端单元电路1430内)。在一个实施例中,解码单元电路1440包括微操作(micro-op)或操作缓存(未示出),以保持/缓存在解码或处理器管线1400的其他阶段期间生成的经解码的操作、微标记或微操作。解码单元电路1440可以耦合到执行引擎单元电路1450中的重命名/分配器单元电路1452。111.执行引擎电路1450包括重命名/分配器单元电路1452,其耦合到引退单元电路1454和一组一个或多个调度器电路1456。(一个或多个)调度器电路1456表示任何数目的不同调度器,包括预留站、中央指令窗口,等等。在一些实施例中,(一个或多个)调度器电路1456可以包括算术逻辑单元(arithmeticlogicunit,alu)调度器/调度电路、alu队列、算术生成单元(arithmeticgenerationunit,agu)调度器/调度电路、agu队列,等等。(一个或多个)调度器电路1456耦合到(一个或多个)物理寄存器文件电路1458。(一个或多个)物理寄存器文件电路1458中的每一者表示一个或多个物理寄存器文件,这些物理寄存器文件中的不同物理寄存器文件存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针),等等。在一个实施例中,(一个或多个)物理寄存器文件单元电路1458包括向量寄存器单元电路、写入掩码寄存器单元电路、以及标量寄存器单元电路。这些寄存器单元可以提供体系结构式向量寄存器、向量掩码寄存器、通用寄存器,等等。(一个或多个)物理寄存器文件单元电路1458与引退单元电路1454(也称为退役队列或引退队列)重叠以说明可以用来实现寄存器重命名和无序执行的各种方式(例如,利用(一个或多个)重排序缓冲器(reorderbuffer,rob)和(一个或多个)引退寄存器文件;利用(一个或多个)未来文件、(一个或多个)历史缓冲器、以及(一个或多个)引退寄存器文件;利用寄存器图谱和寄存器的池;等等)。引退单元电路1454和(一个或多个)物理寄存器文件电路1458耦合到(一个或多个)执行集群1460。(一个或多个)执行集群1460包括一组一个或多个执行单元电路1462和一组一个或多个存储器访问电路1464。执行单元电路1462可以对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种算术、逻辑、浮点或其他类型的操作(例如,移位、加法、减法、乘法)。虽然一些实施例可以包括专用于特定功能或功能集合的若干个执行单元或执行单元电路,但是其他实施例可能只包括一个执行单元电路或者全部执行所有功能的多个执行单元/执行单元电路。(一个或多个)调度器电路1456、(一个或多个)物理寄存器文件单元电路1458、以及(一个或多个)执行集群1460被示出为可能是多个,因为某些实施例为某些类型的数据/操作创建单独的管线(例如,标量整数管线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点管线和/或存储器访问管线,它们各自具有其自己的调度器电路、(一个或多个)物理寄存器文件单元电路和/或执行集群—并且在单独的存储器访问管线的情况下,实现了某些实施例,其中只有此管线的执行集群具有(一个或多个)存储器访问单元电路1464)。还应当理解,在使用分开的管线的情况下,这些管线中的一个或多个可以是无序发出/执行的,而剩余的是有序的。112.在一些实施例中,执行引擎单元电路1450可以执行到高级微控制器总线(ahb)接口(未示出)的加载存储单元(lsu)地址/数据管线化,以及地址阶段和写回、数据阶段加载、存储、以及分支。113.该组存储器访问电路1464耦合到存储器单元电路1470,存储器单元电路1470包括数据tlb单元电路1472,数据tlb单元电路1472耦合到数据缓存电路1474,数据缓存电路1474耦合到第2级(l2)缓存电路1476。在一个示例性实施例中,存储器访问单元电路1464可以包括加载单元电路、存储地址单元电路、以及存储数据单元电路,它们中的每一者耦合到存储器单元电路1470中的数据tlb电路1472。指令缓存电路1434进一步耦合到存储器单元电路1470中的第2级(l2)缓存单元电路1476。在一个实施例中,指令缓存1434和数据缓存1474在l2缓存单元电路1476、第3级(l3)缓存单元电路(未示出)和/或主存储器中被组合成单个指令和数据缓存(未示出)。l2缓存单元电路1476耦合到一个或多个其他级别的缓存并且最终耦合到主存储器。114.核心1490可以支持一个或多个指令集(例如,x86指令集(带有已随着较新版本添加的一些扩展);mips指令集;arm指令集(带有可选的额外扩展,例如neon)),包括本文描述的(一个或多个)指令。在一个实施例中,核心1490包括逻辑来支持紧缩数据指令集扩展(例如,avx1、avx2),从而允许了被许多多媒体应用使用的操作被利用紧缩数据来执行。115.(一个或多个)示例性执行单元电路116.图15示出了(一个或多个)执行单元电路的实施例,例如图14(b)的(一个或多个)执行单元电路1462。如图所示,(一个或多个)执行单元电路1462可以包括一个或多个alu电路1501、向量/simd单元电路1503、加载/存储单元电路1505、和/或分支/跳转单元电路1507。alu电路1501执行整数算术和/或布尔操作。向量/simd单元电路1503对紧缩数据(例如,simd/向量寄存器)执行向量/simd操作。加载/存储单元电路1505执行加载和存储指令,以将数据从存储器加载到寄存器中,或者从寄存器存储到存储器。加载/存储单元电路1505也可以生成地址。分支/跳转单元电路1507依据指令引起到某个存储器地址的分支或跳转。浮点单元(floating-pointunit,fpu)电路1509执行浮点算术。(一个或多个)执行单元电路1462的宽度依据实施例而有所不同,并且可以在从16比特到1024比特的范围内。在一些实施例中,两个或更多个更小的执行单元被从逻辑上组合以形成更大的执行单元(例如,两个128比特执行单元被从逻辑上组合以形成256比特执行单元)。117.示例性寄存器体系结构118.图16是根据一些实施例的寄存器体系结构1600的框图。如图所示,存在向量/simd寄存器1610,其宽度从128比特到1024比特不等。在一些实施例中,向量/simd寄存器1610在物理上是512比特的,并且取决于映射,只有一些低位比特被使用。例如,在一些实施例中,向量/simd寄存器1610是512比特的zmm寄存器:低位256比特被用于ymm寄存器,并且低位128比特被用于xmm寄存器。因此,存在寄存器的覆盖。在一些实施例中,向量长度字段在最大长度和一个或多个其他更短的长度之间做出选择,其中每个这种更短长度是前一长度的一半长度。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素位置上执行的操作;更高阶数据元素位置或者被保持与其在该指令之前的位置相同,或者被归零,这取决于实施例。119.在一些实施例中,寄存器体系结构1600包括写入掩码/谓词寄存器1615。例如,在一些实施例中,有8个写入掩码/谓词寄存器(有时称为k0至k7),其中每一者是16比特、32比特、64比特或128比特大小的。写入掩码/谓词寄存器1615可以允许合并(例如,允许目的地中的任何元素集合在任何操作的执行期间免受更新)和/或归零(例如,归零向量掩码允许目的地中的任何元素集合在任何操作的执行期间被归零)。在一些实施例中,给定的写入掩码/谓词寄存器1615中的每个数据元素位置对应于目的地的一个数据元素位置。在其他实施例中,写入掩码/谓词寄存器1615是可缩放的,并且由给定向量元素的设定数目的使能比特组成(例如,每个64比特向量元素有8个使能比特)。120.寄存器体系结构1600包括多个通用寄存器1625。这些寄存器可以是16比特、32比特、64比特等等,并且可以被用于标量操作。在一些实施例中,这些寄存器被用名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp以及r8至r15来引用。121.在一些实施例中,寄存器体系结构1600包括标量浮点寄存器1645,它被用于使用x87指令集扩展对32/64/80比特浮点数据进行标量浮点操作,或者用作mmx寄存器以对64比特紧缩整数数据执行操作,以及保持用于在mmx和xmm寄存器之间执行的一些操作的操作对象。122.一个或多个标志寄存器1640(例如,eflags,rflags,等等)存储用于算术、比较和系统操作的状态和控制信息。例如,一个或多个标志寄存器1640可以存储条件代码信息,例如进位、奇偶性、辅助进位、零、符号、以及溢出。在一些实施例中,一个或多个标志寄存器1640被称为程序状态和控制寄存器。123.分段寄存器1620包含用于访问存储器的分段点。在一些实施例中,这些寄存器由名称cs、ds、ss、es、fs和gs来引用。124.机器特定寄存器(machine-specificregister,msr)1635控制和报告处理器性能。大多数msr1635处理与系统有关的功能,并且是应用程序不可访问的。机器检查寄存器1660由用于检测和报告硬件错误的控制、状态和错误报告msr组成。125.一个或多个指令指针寄存器1630存储指令指针值。(一个或多个)控制寄存器1655(例如,cr0-cr4)确定处理器(例如,处理器1270、1280、1238、1215和/或1300)的操作模式和当前执行任务的特性。调试寄存器1650控制并允许监视处理器或核心的调试操作。126.存储器管理寄存器1665指定用在保护模式存储器管理中的数据结构的位置。这些寄存器可以包括gdtr、idrt、任务寄存器、以及ldtr寄存器。127.本发明的替换实施例可以使用更宽或更窄的寄存器。此外,本发明的替换实施例可以使用更多、更少或不同的寄存器文件和寄存器。128.指令集129.指令集体系结构(instructionsetarchitecture,isa)可以包括一个或多个指令格式。给定的指令格式可以定义各种字段(例如,比特的数目、比特的位置)来指定要执行的操作(例如,操作码)和要在其上执行该操作的(一个或多个)操作对象和/或其他(一个或多个)数据字段(例如,掩码),等等。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可以被定义为具有该指令格式的字段的不同子集(包括的字段通常是按相同顺序的,但至少一些具有不同的比特位置,因为包括的字段更少)和/或被定义为具有以不同方式解读的给定字段。因此,isa的每个指令是利用给定的指令格式来表达的(并且如果定义了的话,则以该指令格式的指令模板中的给定一个指令模板来表达)并且包括用于指定操作和操作对象的字段。例如,示例性add指令具有特定的操作码和指令格式,该指令格式包括操作码字段来指定该操作码并且包括操作对象字段来选择操作对象(源1/目的地和源2);并且这个add指令在指令流中的出现将在选择特定操作对象的操作对象字段中具有特定内容。130.示例性指令格式131.可按不同的格式来实现本文描述的(一个或多个)指令的实施例。此外,下文详述了示例性系统、体系结构和管线。可以在这种系统、体系结构和管线上执行(一个或多个)指令的实施例,但不限于详述的那些。132.图17示出了指令格式的实施例。如图所示,指令可以包括多个成分,包括但不限于用于以下各项的一个或多个字段:一个或多个前缀1701、操作码1703、寻址信息1705(例如,寄存器标识符、存储器寻址信息,等等)、位移值1707、和/或立即数1709。注意,一些指令利用了该格式的一些或所有字段,而其他指令可能只使用操作码1703的字段。在一些实施例中,图示的顺序是这些字段要被编码的顺序,然而,应当明白,在其他实施例中,这些字段可以被以不同的顺序来编码、组合,等等。133.(一个或多个)前缀字段1701在被使用时会修改指令。在一些实施例中,一个或多个前缀被用于重复字符串指令(例如,0xf0、0xf2、0xf3,等等),以提供片段覆盖(例如,0x2e、0x36、0x3e、0x26、0x64、0x65、0x2e、0x3e,等等),以执行总线锁定操作,和/或改变操作对象(例如,0x66)和地址大小(例如,0x67)。某些指令要求强制性的前缀(例如,0x66、0xf2、0xf3,等等)。这些前缀中的某些可能被认为是“传统”前缀。其他前缀——其一个或多个示例在此详述——指示出和/或提供了进一步的能力,例如指定特定的寄存器,等等。其他前缀通常跟随在“传统”前缀之后。134.操作码字段1703被用于至少部分地定义在指令的解码时要执行的操作。在一些实施例中,在操作码字段1703中编码的主操作码的长度为1、2或3个字节。在其他实施例中,主操作码可以是不同的长度。额外的3比特操作码字段有时被编码在另一个字段中。135.寻址字段1705被用于寻址指令的一个或多个操作对象,例如存储器或者一个或多个寄存器中的位置。图18示出了寻址字段1705的实施例。在这个图示中,示出了可选的modr/m字节1802和可选的缩放比例、索引、基址(scale,index,base,sib)字节1804。modr/m字节1802和sib字节1804被用于编码一指令的多达两个操作对象,每个操作对象是直接寄存器或有效存储器地址。注意,这些字段中的每一者是可选的,即,不是所有的指令都包括这些字段中的一个或多个。modr/m字节1802包括mod字段1842、寄存器字段1844、和r/m字段1846。136.mod字段1842的内容区分存储器访问和非存储器访问模式。在一些实施例中,当mod字段1842的值为b11时,就利用了寄存器直接寻址模式,否则就使用寄存器间接寻址。137.寄存器字段1844可以编码目的地寄存器操作对象或者源寄存器操作对象,或者可以编码操作码扩展,并且可以不被用于编码任何指令操作对象。寄存器索引字段1844的内容直接指定或者通过地址生成来指定源或目的地操作对象的位置(在寄存器中或者在存储器中)。在一些实施例中,寄存器字段1844被补充有来自前缀(例如,前缀1701)的额外比特,以允许更大的寻址。138.r/m字段1846可以被用于对引用存储器地址的指令操作对象进行编码,或者可以被用于对目的地寄存器操作对象或源寄存器操作对象进行编码。注意,在一些实施例中,r/m字段1846可以与mod字段1842相组合以规定寻址模式。139.sib字节1804包括用于生成地址的缩放比例字段1852、索引字段1854、以及基址字段1856。缩放比例字段1852指示缩放因子。索引字段1854指定要使用的索引寄存器。在一些实施例中,索引字段1854被补充有来自前缀(例如,前缀1701)的额外比特,以允许更大的寻址。基址字段1856指定了要使用的基址寄存器。在一些实施例中,基址字段1856被补充有来自前缀(例如,前缀1701)的额外比特,以允许更大的寻址。在实践中,缩放比例字段1852的内容允许对索引字段1854的内容进行缩放以用于存储器地址生成(例如,用于使用2缩放比例*索引+基址的地址生成)。140.一些寻址形式利用位移值来生成存储器地址。例如,可以根据2缩放比例*索引+基址+位移、索引*缩放比例+位移、r/m+位移、指令指针(rip/eip)+位移、寄存器+位移等等来生成存储器地址。该位移可以是1字节、2字节、4字节等等的值。在一些实施例中,位移字段1707提供这个值。此外,在一些实施例中,在寻址字段1705的mod字段中编码了位移因子用法,其指示出压缩位移方案,对于该方案,位移值是通过将disp8与缩放因子n结合相乘来计算的,该缩放因子n是基于向量长度、b比特的值和指令的输入元素大小而确定的。该位移值被存储在位移字段1707中。141.在一些实施例中,立即数字段1709为指令指定立即数。立即数可以被编码为1字节值、2字节值、4字节值,等等。142.图19示出了第一前缀1701(a)的实施例。在一些实施例中,第一前缀1701(a)是rex前缀的实施例。使用这个前缀的指令可以指定通用寄存器、64比特紧缩数据寄存器(例如,单指令多数据(simd)寄存器或向量寄存器)、和/或控制寄存器和调试寄存器(例如,cr8-cr15和dr8-dr15)。143.使用第一前缀1701(a)的指令可以使用3比特字段来指定最多达三个寄存器,这取决于格式:1)使用modr/m字节1802的reg字段1844和r/m字段1846;2)使用modr/m字节1802与sib字节1804,包括使用reg字段1844和基址字段1856和索引字段1854;或者3)使用操作码的寄存器字段。144.在第一前缀1701(a)中,比特位置7:4被设置为0100。比特位置3(w)可以被用于确定操作对象大小,但可能不会单独确定操作对象宽度。因此,当w=0时,操作对象大小由代码段描述符(codesegmentdescriptor,cs.d)决定,而当w=1时,操作对象大小为64比特。145.注意,添加另一个比特则允许寻址16(24)个寄存器,而单独的modr/mreg字段1844和modr/mr/m字段1846各自只能寻址8个寄存器。146.在第一前缀1701(a)中,比特位置2(r)可以是modr/mreg字段1844的扩展,并且当该字段对通用寄存器、64比特紧缩数据寄存器(例如,sse寄存器)或者控制或调试寄存器进行编码时,比特位置2(r)可以被用来修改modr/mreg字段1844。当modr/m字节1802指定其他寄存器或定义扩展操作码时,r被忽略。147.比特位置1(x)x比特可以修改sib字节索引字段1854。148.比特位置b(b)b可以修改modr/mr/m字段1846中的基址或sib字节基址字段1856;或者它可以修改用于访问通用寄存器(例如,通用寄存器1625)的操作码寄存器字段。149.图20(a)至图20(d)示出了如何使用第一前缀1701(a)的r、x和b字段的实施例。图20(a)示出了当sib字节1804不被用于存储器寻址时,来自第一前缀1701(a)的r和b被用来扩展modr/m字节1802的reg字段1844和r/m字段1846。图20(b)示出了当不使用sib字节1804(寄存器-寄存器寻址)时,来自第一前缀1701(a)的r和b被用来扩展modr/m字节1802的reg字段1844和r/m字段1846。图20(c)示出了当sib字节1804被用于存储器寻址时,来自第一前缀1701(a)的r、x和b被用于扩展modr/m字节1802的reg字段1844以及索引字段1854和基址字段1856。图20(d)示出了当寄存器被编码在操作码1703中时来自第一前缀1701(a)的b被用来扩展modr/m字节1802的reg字段1844。150.图21(a)至图20(b)示出了第二前缀1701(b)的实施例。在一些实施例中,第二前缀1701(b)是vex前缀的实施例。第二前缀1701(b)编码允许指令具有多于两个操作对象,并且允许simd向量寄存器(例如,向量/simd寄存器1610)长于64比特(例如,128比特和256比特)。第二前缀1701(b)的使用提供了三操作对象(或更多)的语法。例如,先前的两操作对象指令执行诸如a=a+b之类的操作,这覆写了源操作对象。对第二前缀1701(b)的使用使得操作对象能够执行非破坏性操作,例如a=b+c。151.在一些实施例中,第二前缀1701(b)有两种形式——两字节形式和三字节形式。两字节的第二前缀1701(b)被主要用于128比特、标量和一些256比特指令;而三字节的第二前缀1701(b)提供了对第一前缀1701(a)的紧凑替换和3字节操作码指令。152.图21(a)示出了第二前缀1701(b)的两字节形式的实施例。在一个示例中,格式字段2101(字节02103)包含值c5h。在一个示例中,字节12105在比特[7]中包括“r”值。这个值是第一前缀1701(a)的相同值的补码。比特[2]被用来规定向量的长度(l)(其中值0是标量或者128比特向量,而值1是256比特向量)。比特[1:0]提供等同于一些传统前缀的操作码外延性(例如,00=无前缀,01=66h,10=f3h,并且11=f2h)。被示为vvvv的比特[6:3]可以被用于:1)对第一源寄存器操作对象进行编码,该第一源寄存器操作对象以反转(1s补码)形式来指定并且对于具有2个或更多个源操作对象的指令是有效的;2)编码对于某些向量移位以1s补码形式指定的目的地寄存器操作对象;或者3)不对任何操作对象进行编码,该字段被保留并且应当包含某个值,例如1111b。[0153]使用这个前缀的指令可以使用modr/mr/m字段1846来对引用存储器地址的指令操作对象进行编码,或者对目的地寄存器操作对象或源寄存器操作对象进行编码。[0154]使用这个前缀的指令可以使用modr/mreg字段1844来对目的地寄存器操作对象或者源寄存器操作对象进行编码,被作为操作码扩展来对待,而不被用于对任何指令操作对象进行编码。[0155]对于支持四个操作对象的指令语法,vvvv,modr/mr/m字段1846和modr/mreg字段1844编码了四个操作对象中的三个。然后立即数1709的比特[7:4]被用来编码第三源寄存器操作对象。[0156]图21(b)示出了第二前缀1701(b)的三字节形式的实施例。在一个示例中,格式字段2111(字节02113)包含值c4h。字节12115在比特[7:5]中包括“r”、“x”和“b”,它们是第一前缀1701(a)的相同值的补码。字节12115的比特[4:0](示为mmmmm)包括内容来根据需要编码一个或多个隐含的前导操作码字节。例如,00001意味着0fh前导操作码,00010意味着0f38h前导操作码,00011意味着前导0f3ah操作码,等等。[0157]字节22117的比特[7]与第一前缀1701(a)的w被类似地使用,包括帮助确定可提升的操作对象大小。比特[2]被用来规定向量的长度(l)(其中值0是标量或者128比特向量,而值1是256比特向量)。比特[1:0]提供等同于一些传统前缀的操作码外延性(例如,00=无前缀,01=66h,10=f3h,并且11=f2h)。被示为vvvv的比特[6:3]可以被用于:1)对第一源寄存器操作对象进行编码,该第一源寄存器操作对象以反转(1s补码)形式来指定并且对于具有2个或更多个源操作对象的指令是有效的;2)编码对于某些向量移位以1s补码形式指定的目的地寄存器操作对象;或者3)不对任何操作对象进行编码,该字段被保留并且应当包含某个值,例如1111b。[0158]使用这个前缀的指令可以使用modr/mr/m字段1846来对引用存储器地址的指令操作对象进行编码,或者对目的地寄存器操作对象或源寄存器操作对象进行编码。[0159]使用这个前缀的指令可以使用modr/mreg字段1844来对目的地寄存器操作对象或者源寄存器操作对象进行编码,被作为操作码扩展来对待,而不被用于对任何指令操作对象进行编码。[0160]对于支持四个操作对象的指令语法,vvvv,modr/mr/m字段1846和modr/mreg字段1844编码了四个操作对象中的三个。然后立即数1709的比特[7:4]被用来编码第三源寄存器操作对象。[0161]图22示出了第三前缀1701(c)的实施例。在一些实施例中,第一前缀1701(a)是evex前缀的实施例。第三前缀1701(c)是四字节前缀。[0162]第三前缀1701(c)可以在64比特模式中编码32个向量寄存器(例如,128比特、256比特和512比特寄存器)。在一些实施例中,利用写入掩码/操作掩码(参见先前图中对于寄存器的论述,例如图16)或谓词的指令利用这个前缀。操作掩码寄存器允许进行条件处理或选择控制。操作掩码指令——其源/目的地操作对象是操作掩码寄存器并且将操作掩码寄存器的内容视为单个值——是使用第二前缀1701(b)来编码的。[0163]第三前缀1701(c)可以编码特定于指令类别的功能(例如,具有“加载+操作”语义的紧缩指令可以支持嵌入式广播功能,具有舍入语义的浮点指令可以支持静态舍入功能,具有非舍入算术语义的浮点指令可以支持“抑制所有异常”功能,等等)。[0164]第三前缀1701(c)的第一字节是格式字段2211,它在一个示例中具有值62h。随后的字节被称为有效载荷字节2215-2219,并且共同形成p[23:0]的24比特值,从而以一个或多个字段的形式来提供特定的能力(在此详述)。[0165]在一些实施例中,有效载荷字节2219的p[1:0]与低位的两个mm比特相同。在一些实施例中,p[3:2]被保留。比特p[4](r’)在与p[7]和modr/mreg字段1844相组合时允许对高16个向量寄存器集合的访问。当不需要sib类型寻址时,p[6]也可以提供对高16个向量寄存器的访问。p[7:5]由r、x和b构成,它们是用于向量寄存器、通用寄存器、存储器寻址的操作对象指定符修饰符比特,并且当与modr/m寄存器字段1844和modr/mr/m字段1846相组合时,允许对低8个寄存器之外的下一组8个寄存器的访问。p[9:8]提供等同于一些传统前缀的操作码外延性(例如,00=无前缀,01=66h,10=f3h,并且11=f2h)。p[10]在一些实施例中是固定值1。被示为vvvv的p[14:11]可以被用于:1)对第一源寄存器操作对象进行编码,该第一源寄存器操作对象以反转(1s补码)形式来指定并且对于具有2个或更多个源操作对象的指令是有效的;2)编码对于某些向量移位以1s补码形式指定的目的地寄存器操作对象;或者3)不对任何操作对象进行编码,该字段被保留并且应当包含某个值,例如1111b。[0166]p[15]类似于第一前缀1701(a)和第二前缀1701(b)的w,并且可以用作操作码扩展比特或操作对象大小提升。[0167]p[18:16]指定操作掩码(写入掩码)寄存器(例如,写入掩码/谓词寄存器1615)中的一寄存器的索引。在本发明的一个实施例中,特定值aaa=000具有特殊行为,暗示着没有操作掩码被用于特定指令(这可以按多种方式来实现,包括使用硬连线到全一的操作掩码或者绕过掩蔽硬件的硬件)。当合并时,向量掩码允许目的地中的任何元素集合在(由基本操作和增强操作指定的)任何操作的执行期间被保护免于更新;在其他的一个实施例中,保留目的地中的相应的掩码比特具有0的每个元素的旧值。与之不同,当归零向量掩码允许目的地中的任何元素集合在(由基本操作和增强操作指定的)任何操作的执行期间被归零时;在一个实施例中,目的地的元素在相应的掩码比特具有0值时被设置为0。这个功能的子集是控制被执行的操作的向量长度(即,被修改的元素的跨度,从第一个到最后一个)的能力;然而,被修改的元素不必是连续的。因此,操作掩码字段允许部分向量操作,包括加载、存储、算术、逻辑,等等。虽然描述了其中操作掩码字段的内容选择了若干个操作掩码寄存器中包含要使用的操作掩码的那一个操作掩码寄存器(从而操作掩码字段的内容间接标识要执行的该掩蔽)的本发明实施例,但替换实施例替代地或附加地允许掩码写入字段的内容直接指定要执行的掩蔽。[0168]p[19]可以与p[14:11]相组合,来以非破坏性源语法对第二源向量寄存器进行编码,该语法可以利用p[19]来访问高16个向量寄存器。p[20]编码多种功能,这些功能在不同类别的指令中有所不同,并且可以影响向量长度/舍入控制指定符字段(p[22:21])的含义。p[23]指示出对合并-写入掩蔽的支持(例如,当被设置为0时)或者对归零和合并-写入掩蔽的支持(例如,当被设置为1时)。[0169]在下面的表格中详述了在使用第三前缀1701(c)的指令中对寄存器的编码的示例性实施例。[0170][0171]表格1:64比特模式中的32寄存器支持[0172][2:0]寄存器类型通常用途寄存器modr/mreggpr,向量目的地或源vvvvvvvvgpr,向量第2源或目的地rmmodr/mr/mgpr,向量第1源或目的地基址modr/mr/mgpr存储器寻址索引sib.索引gpr存储器寻址vidxsib.索引向量vsib存储器寻址[0173]表格2:32比特模式中的编码寄存器指定符[0174][0175][0176]表格3:操作掩码寄存器指定符编码[0177]程序代码可以被应用到输入指令以执行本文描述的功能并且生成输出信息。输出信息可以按已知的方式被应用到一个或多个输出设备。对于本技术而言,处理系统包括任何具有处理器的系统,例如数字信号处理器(digitalsignalprocessor,dsp)、微控制器、专用集成电路(applicationspecificintegratedcircuit,asic)、或者微处理器。[0178]可以用高级别过程式或面向对象的编程语言来实现程序代码以与处理系统进行通信。如果希望,也可以用汇编或机器语言来实现程序代码。实际上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况下,该语言可以是经编译或者经解译的语言。[0179]可以用硬件、软件、固件或者这种实现方案的组合来实现本文公开的机制的实施例。本发明的实施例可以被实现为在包括以下项的可编程系统上执行的计算机程序或程序代码:至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备。[0180]至少一个实施例的一个或多个方面可以由被存储在机器可读介质上的表示处理器内的各种逻辑的代表性指令来实现,这些指令在被机器读取时,使得该机器制作逻辑来执行本文描述的技术。这种被称为“ip核心”的表现形式可以被存储在有形机器可读介质上并且被提供到各种客户或制造设施以加载到实际制作该逻辑或处理器的制作机器中。[0181]这种机器可读存储介质可以包括——但不限于——由机器或设备制造或形成的物品的非暂态有形布置,包括诸如以下各项之类的存储介质:硬盘,任何其他类型的盘(包括软盘、光盘、光盘只读存储器(compactdiskread-onlymemory,cd-rom)、可改写光盘(compactdiskrewritable,cd-rw)、和磁光盘),半导体器件(例如,只读存储器(read-onlymemory,rom),诸如动态随机存取存储器(dynamicrandomaccessmemory,dram)、静态随机存取存储器(staticrandomaccessmemory,sram)之类的随机存取存储器(randomaccessmemory,ram),可擦除可编程只读存储器(erasableprogrammableread-onlymemory,eprom),闪速存储器,电可擦除可编程只读存储器(electricallyerasableprogrammableread-onlymemory,eeprom),相变存储器(phasechangememory,pcm)),磁卡或光卡,或者适合用于存储电子指令的任何其他类型的介质。[0182]因此,本发明的实施例还包括非暂态有形机器可读介质,其包含指令或者包含定义本文描述的结构、电路、装置、处理器和/或系统特征的设计数据,例如硬件描述语言(hardwaredescriptionlanguage,hdl)。这种实施例也可以被称为程序产品。[0183]仿真(包括二进制转化、代码变形,等等)[0184]在一些情况下,指令转换器可以被用于将指令从源指令集转换到目标指令集。例如,指令转换器可以将指令转化(例如,利用静态二进制转化、包括动态编译的动态二进制转化)、变形、仿真或者以其他方式转换为要被核心处理的一个或多个其他指令。可以用软件、硬件、固件或者其组合来实现指令转换器。指令转换器可以在处理器上、在处理器外、或者一部分在处理器上且一部分在处理器外。[0185]图23示出了根据本发明的实施例的与使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。在图示的实施例中,指令转换器是软件指令转换器,但是可替换地,可以用软件、固件、硬件或者其各种组合来实现指令转换器。图23示出了高级别语言2302的程序可以被利用第一isa编译器2304来编译以生成第一isa二进制代码2306,第一isa二进制代码2306可以由具有至少一个第一指令集核心的处理器2316原生执行。具有至少一个第一isa指令集核心的处理器2316表示任何这样的处理器:这种处理器可以通过兼容地执行或以其他方式处理以下项来执行与具有至少一个第一isa指令集核心的isa指令集核心的处理器基本上相同的功能,以便实现与具有至少一个第一isa指令集核心的处理器基本上相同的结果:(1)第一isa指令集核心的指令集的实质部分或者(2)目标为在具有至少一个第一isa指令集核心的英特尔处理器上运行的应用或其他软件的目标代码版本。第一isa编译器2304表示可操作来生成第一isa二进制代码2306(例如,目标代码)的编译器,第一isa二进制代码2306在带有或不带有额外的链接处理的情况下可以在具有至少一个第一isa指令集核心的处理器2316上被执行。类似地,图23示出了高级别语言2302的程序可以被利用替换指令集编译器2308来编译以生成替换指令集二进制代码2310,该替换指令集二进制代码2310可以由没有第一isa指令集核心的处理器2314原生执行。指令转换器2312用于将第一isa二进制代码2306转换成可以由没有第一isa指令集核心的处理器2314原生执行的代码。这个转换后的代码不太可能与替换指令集二进制代码2310相同,因为能够做到这一点的指令转换器是难以制作的;然而,转换后的代码将实现一般操作并且由来自替换指令集的指令构成。因此,指令转换器2312表示通过仿真、模拟或任何其他过程而允许不具有第一isa指令集处理器或核心的处理器或其他电子设备执行第一isa二进制代码2306的软件、固件、硬件或者其组合。[0186]提及“一个实施例”、“一实施例”、“一示例实施例”等等表明描述的实施例可以包括特定的特征、结构或特性,但可能不一定每个实施例都包括该特定特征、结构或特性。此外,这种短语不一定指的是同一实施例。另外,当结合一实施例来描述特定的特征、结构或特性时,认为结合其他实施例(无论是否明确描述)来实现这种特征、结构或特性,是在本领域技术人员的知识范围内的。[0187]此外,在上文描述的各种实施例中,除非另有特别说明,否则诸如短语“a、b或c中的至少一者”之类的连接语言旨在被理解为意指a、b或c,或者其任何组合(例如,a、b和/或c)。因此,连接语言并不旨在也不应当被理解为暗示给定的实施例要求至少一个a、至少一个b或者至少一个c各自都存在。[0188]用于涉及紧缩bf16数据元素的操作的示例性支持包括但不限于:[0189]1.一种装置,包括:[0190]解码电路,用于对单个指令的实例进行解码,所述单个指令包括用于以下各项的字段:操作码、第一紧缩数据源操作对象的位置的标识、第二紧缩数据源操作对象的位置的标识、以及紧缩数据目的地操作对象的标识,其中,所述操作码用于指示执行电路要对于所述紧缩数据源操作对象的每个数据元素位置,通过将所述第一紧缩数据源的数据元素乘以2的幂值来执行该数据元素的浮点缩放操作,其中,所述2的幂值的指数的值是所述第二紧缩数据源的数据元素的向下取整值,并且将所述浮点缩放操作的结果存储到所述紧缩数据目的地操作对象的相应数据元素位置中;以及[0191]所述执行电路,用于根据所述操作码来执行经解码的指令。[0192]2.如示例1所述的装置,其中,用于第一源操作对象的标识的字段用于标识向量寄存器。[0193]3.如示例1所述的装置,其中,用于第一源操作对象的标识的字段用于标识存储器位置。[0194]4.如示例1所述的装置,其中,所述执行电路用于在所述经解码的指令的执行期间使用舍入到最接近的偶数舍入模式。[0195]5.如示例1所述的装置,其中,当所述第二紧缩数据源的数据元素是非正规数时,所述向下取整值是零。[0196]6.如示例1所述的装置,其中,当所述第一紧缩数据源的数据元素是非正规数时,所述第一紧缩数据源的数据元素是零。[0197]7.如示例1所述的装置,其中,所述指令还包括用于写入掩码寄存器的一个或多个字段。[0198]8.一种系统,包括:[0199]存储器,用于存储单个指令的实例;[0200]解码电路,用于对所述单个指令的实例进行解码,所述单个指令包括用于以下各项的字段:操作码、第一紧缩数据源操作对象的位置的标识、第二紧缩数据源操作对象的位置的标识、以及紧缩数据目的地操作对象的标识,其中,所述操作码用于指示执行电路要对于所述紧缩数据源操作对象的每个数据元素位置,通过将所述第一紧缩数据源的数据元素乘以2的幂值来执行该数据元素的浮点缩放操作,其中,所述2的幂值的指数的值是所述第二紧缩数据源的数据元素的向下取整值,并且将所述浮点缩放操作的结果存储到所述紧缩数据目的地操作对象的相应数据元素位置中;以及[0201]所述执行电路,用于根据所述操作码来执行经解码的指令。[0202]9.如示例8所述的系统,其中,用于第一源操作对象的标识的字段用于标识向量寄存器。[0203]10.如示例8所述的系统,其中,用于第一源操作对象的标识的字段用于标识储器位置。[0204]11.如示例8所述的系统,其中,所述执行电路用于在所述经解码的指令的执行期间使用舍入到最接近的偶数舍入模式。[0205]12.如示例8所述的系统,其中,当所述第二紧缩数据源的数据元素是非正规数时,所述向下取整值是零。[0206]13.如示例8所述的系统,其中,所述指令还包括用于写入掩码寄存器的一个或多个字段。[0207]14.如示例8所述的系统,其中,当所述第一紧缩数据源的数据元素是非正规数时,所述第一紧缩数据源的数据元素是零。[0208]15.一种至少存储特定单个指令的实例的非暂态机器可读介质,其中,所述特定单个指令的实例将被处理器通过执行一种方法来处理,该方法包括:[0209]对所述单个指令的实例进行解码,所述单个指令包括用于以下各项的字段:操作码、第一紧缩数据源操作对象的位置的标识、第二紧缩数据源操作对象的位置的标识、以及紧缩数据目的地操作对象的标识,其中,所述操作码用于指示执行电路要对于所述紧缩数据源操作对象的每个数据元素位置,通过将所述第一紧缩数据源的数据元素乘以2的幂值来执行该数据元素的浮点缩放操作,其中,所述2的幂值的指数的值是所述第二紧缩数据源的数据元素的向下取整值,并且将所述浮点缩放操作的结果存储到所述紧缩数据目的地操作对象的相应数据元素位置中;以及[0210]根据所述操作码来执行经解码的指令。[0211]16.如示例15所述的非暂态机器可读介质,其中,用于第一源操作对象的标识的字段用于标识向量寄存器。[0212]17.如示例15所述的非暂态机器可读介质,其中,用于第一源操作对象的标识的字段用于标识存储器位置。[0213]18.如示例15所述的非暂态机器可读介质,其中,所述执行用于在所述经解码的指令的执行期间使用舍入到最接近的偶数舍入模式。[0214]19.如示例15所述的非暂态机器可读介质,其中,当所述第二紧缩数据源的数据元素是非正规数时,所述向下取整值是零。[0215]20.如示例15所述的非暂态机器可读介质,其中,所述指令还包括用于写入掩码寄存器的一个或多个字段。[0216]21.如示例15所述的非暂态机器可读介质,其中,当所述第一紧缩数据源的数据元素是非正规数时,所述第一紧缩数据源的数据元素是零。[0217]22.一种至少存储特定单个指令的实例的非暂态机器可读介质,其中,所述特定单个指令的实例将被处理器通过执行一种方法来处理,该方法包括:[0218]将所述特定单个指令从第一指令集体系结构转化成不同的第二指令集体系结构的一个或多个指令,所述特定单个指令包括用于以下各项的字段:操作码、第一紧缩数据源操作对象的位置的标识、第二紧缩数据源操作对象的位置的标识、以及紧缩数据目的地操作对象的标识,其中,所述操作码用于指示执行电路要对于所述紧缩数据源操作对象的每个数据元素位置,通过将所述第一紧缩数据源的数据元素乘以2的幂值来执行该数据元素的浮点缩放操作,其中,所述2的幂值的指数的值是所述第二紧缩数据源的数据元素的向下取整值,并且将所述浮点缩放操作的结果存储到所述紧缩数据目的地操作对象的相应数据元素位置中;[0219]对所述不同的第二指令集体系结构的一个或多个指令进行解码;[0220]执行经解码的不同的第二指令集体系结构的一个或多个指令。[0221]23.如示例22所述的非暂态机器可读介质,其中,用于第一源操作对象的标识的字段用于标识向量寄存器。[0222]24.如示例22所述的非暂态机器可读介质,其中,用于第一源操作对象的标识的字段用于标识存储器位置。[0223]25.如示例22所述的非暂态机器可读介质,其中,所述执行用于在所述经解码的指令的执行期间使用舍入到最接近的偶数舍入模式。[0224]26.如示例22所述的非暂态机器可读介质,其中,当所述第二紧缩数据源的数据元素是非正规数时,所述向下取整值是零。[0225]27.如示例22所述的非暂态机器可读介质,其中,当所述第一紧缩数据源的数据元素是非正规数时,所述第一紧缩数据源的数据元素是零。[0226]28.如示例22所述的非暂态机器可读介质,其中,所述指令还包括用于写入掩码寄存器的一个或多个字段。[0227]29.一种方法,包括:[0228]将特定单个指令从第一指令集体系结构转化成不同的第二指令集体系结构的一个或多个指令,所述特定单个指令包括用于以下各项的字段:操作码、第一紧缩数据源操作对象的位置的标识、第二紧缩数据源操作对象的位置的标识、以及紧缩数据目的地操作对象的标识,其中,所述操作码用于指示执行电路要对于所述紧缩数据源操作对象的每个数据元素位置,通过将所述第一紧缩数据源的数据元素乘以2的幂值来执行该数据元素的浮点缩放操作,其中,所述2的幂值的指数的值是所述第二紧缩数据源的数据元素的向下取整值,并且将所述浮点缩放操作的结果存储到所述紧缩数据目的地操作对象的相应数据元素位置中;[0229]对所述不同的第二指令集体系结构的一个或多个指令进行解码;[0230]执行经解码的不同的第二指令集体系结构的一个或多个指令。[0231]30.如示例29所述的非暂态机器可读介质,其中,用于第一源操作对象的标识的字段用于标识向量寄存器。[0232]31.如示例29所述的非暂态机器可读介质,其中,用于第一源操作对象的标识的字段用于标识存储器位置。[0233]32.如示例29所述的非暂态机器可读介质,其中,所述执行用于在所述经解码的指令的执行期间使用舍入到最接近的偶数舍入模式。[0234]33.如示例29所述的非暂态机器可读介质,其中,当所述第二紧缩数据源的数据元素是非正规数时,所述向下取整值是零。[0235]34.如示例29所述的非暂态机器可读介质,其中,所述指令还包括用于写入掩码寄存器的一个或多个字段。[0236]35.如示例29所述的非暂态机器可读介质,其中,当所述第一紧缩数据源的数据元素是非正规数时,所述第一紧缩数据源的数据元素是零。[0237]36.一种方法,包括:[0238]对单个指令的实例进行解码,所述单个指令包括用于以下各项的字段:操作码、紧缩数据源操作对象的位置的标识、立即数、以及紧缩数据目的地操作对象的标识,其中,所述操作码用于指示执行电路要对于所述紧缩数据源操作对象的每个数据元素位置,按照所述立即数中指定的比特数目来执行对所述紧缩数据源的数据元素的化简参量的提取,并且将所提取的化简参量存储到所述紧缩数据目的地操作对象的相应数据元素位置中;以及[0239]根据所述操作码来执行经解码的指令。[0240]37.如示例36所述的方法,还包括:[0241]将所述单个指令转化成不同的第二指令集体系结构的一个或多个指令,其中,所述执行包括执行所述不同的第二指令集体系结构的一个或多个指令。[0242]38.一种装置,用于执行如示例3至37中的一个或多个所述的方法。[0243]39.一种方法,包括:[0244]对单个指令的实例进行解码,所述单个指令包括用于以下各项的字段:操作码、紧缩数据源操作对象的位置的标识、对舍入模式的指示、以及紧缩数据目的地操作对象的标识,其中,所述操作码用于指示执行电路要对于所述紧缩数据源操作对象的每个紧缩数据元素位置,按照所指示的舍入模式来舍入该位置的紧缩数据元素,并且将舍入的结果存储在所述紧缩数据目的地操作对象的相应紧缩数据元素位置中;以及[0245]根据所述操作码来执行经解码的指令。[0246]40.如示例39所述的方法,还包括:[0247]将所述单个指令转化成不同的第二指令集体系结构的一个或多个指令,其中,所述执行包括执行所述不同的第二指令集体系结构的一个或多个指令。[0248]41.一种装置,用于执行如示例40至41中的一个或多个所述的方法。[0249]说明书和附图因此应被认为是说明性的,而不是限制性的。然而,很明显,在不脱离如权利要求中记载的本公开的更宽精神和范围的情况下,可以对其进行各种修改和改变。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1