使用三个标量项的超级乘加(超级madd)指令的制作方法
【专利摘要】本发明描述了具有执行单元逻辑电路的处理核,所述执行单元逻辑电路使第一寄存器存储第一向量输入操作数,使第二寄存器存储第二向量输入操作数,以及第三寄存器存储包含标量输入操作数a、b、c的打包数据结构。所述执行单元逻辑电路还包括用于执行操作(a*(第一向量输入操作数))+(b*(第二向量操作数))+c的乘法器。
【专利说明】使用三个标量项的超级乘加(超级MADD)指令
【技术领域】
[0001]本发明的领域一般涉及计算系统,且尤其涉及使用三个标量项的超级多次加法指令。
【背景技术】
[0002]图1示出了用O来实现的处理核100的高级示图。
[0003]半导体芯片上的逻辑电路。该处理核包括流水线101。该流水线由各自被设计成在完全执行程序代码指令所需的多步骤过程中执行特定步骤的多个级组成。这些通常至少包括:1)指令取出和解码;2)数据取出;3)执行;4)写回。执行级对由相同指令标识出并在另一上述先前级(例如,步骤2)中被取出的数据执行由上述先前步骤(例如在步骤I)中所取出和解码的指令所标识出的特定操作。被操作的数据通常是从(通用)寄存器存储空间102中取出的。在该操作完成时所创建的新数据通常也被“写回”到寄存器存储空间(例如,在级4处)。
[0004]与执行级相关联的逻辑电路通常由多个“执行单元”或“功能单元” 103_1至103_N构成,这些单元各自被设计成执行其自身的独特的操作子集(例如,第一功能单元执行整数数学操作,第二功能单元执行浮点指令,第三功能单元执行自/至高速缓存/存储器的加载/存储操作等等)。由所有这些功能单元执行的所有操作的集合与处理核100所支持的“指令集”相对应。
[0005]两种类型的处理器架构在计算机科学领域中被广泛认可:“标量”和“向量”。标量处理器被设计成执行对单个数据集进行操作的指令,而向量处理器被设计成执行对多个数据集进行操作的指令。图2A和图2B示出比较示例,其例示了标量处理器和向量处理器之间的基本不同之处。
[0006]图2A示出标量AND (与)指令的示例,其中单个操作数集A和B被加在一起以产生奇异(或“标量”)结果C(S卩,AB = C)。相比之下,图2B示出向量AND指令的示例,其中两个操作数集A/B和D/E并行地分别加在一起以同时产生向量结果C和F(即,A.AND.B =C和D.AND.E = F)。根据术语学,“向量”是具有多个“元素”的数据元素。例如,向量V =Q,R,S,T,U具有五个不同元素:Q,R,S,T和U。示例性向量V的“大小”为五(因为它具有五个元素)。
[0007]图1还不出与通用寄存器空间102不同的向量寄存器空间107的存在。具体而目,通用寄存器空间102名义上用于存储标量值。由此,当执行单元中的任一个执行标量操作时,它们名义上执行从通用寄存器存储空间102中调用的操作数(并且将结果写回到通用寄存器存储空间102)。相比之下,当执行单元中的任一个执行向量操作时,它们名义上执行从向量寄存器空间107调用的操作数(并且将结果写回向量寄存器空间107)。存储器的不同区域可类似地被分配以供存储标量值和向量值。
[0008]还注意到,在到功能单元103_1至103_N的相应输入以及来自功能单元103_1至103_N的相应输出处,存在掩码逻辑104_1至104_N以及105_1至105_N。在各种实现中,对于向量操作,这些层中只有一层实际上被实现一尽管这并不是严格的要求(尽管图1中未描绘,但可以想到,仅执行标量操作而非向量操作的执行单元不需要具有任何掩码层)。对于采用掩码的任何向量指令,输入掩码逻辑104_1至104_N和/或输出掩码逻辑105_1至105_N可用于控制针对该向量指令对哪些元素进行有效地操作。这里,掩码向量是从掩码寄存器空间106中被读取(例如,连同从向量寄存器存储空间107中被读取的输入操作数向量一起)并且被呈现给掩码逻辑104、105层中的至少一者。
[0009]在执行向量程序代码的过程中,每一个向量指令无需要求全数据字。例如,用于某些指令的输入向量可以仅是8个元素,用于其他指令的输入向量可以是16个元素,用于其他指令的输入向量可以是32个元素等等。因此,掩码层104/105被用于标识全向量数据字的一元素集合,该元素集合应用于特定指令以便实现跨指令的不同向量大小。通常,对于每一个向量指令,掩码寄存器空间106中所保持的特定掩码图案被该指令调出,从掩码寄存器空间中被取出,并且被提供给掩码层104/105中的任一者或两者,以“启用”针对该特定向量操作的正确的元素集合。
[0010]附图简述
[0011]本发明是作为示例说明的,而不仅限制于各个附图的图形,在附图中,类似的参考编号表示类似的元件,其中:
[0012]图1示出处理器流水线;
[0013]图2A和2B比较标量和向量操作;
[0014]图3示出了在可执行VPLANE指令的执行单元之内的逻辑电路的实施例;
[0015]图4示出了用于VPLANE指令的操作的方法;
[0016]图5示出了在控制字段中包括标量操作数数据的指令格式;
[0017]图6A是示出根据本发明的实施例的通用向量友好指令格式及其A类指令模板的方框图。
[0018]图6B是示出根据本发明的实施例的通用向量友好指令格式及其B类指令模板的方框图。
[0019]图7A-C是示出根据本发明的实施例的示例性专用向量友好指令格式的方框图。
[0020]图8是根据本发明的一个实施例的寄存器架构的方框图。
[0021]图9A是根据本发明的实施例的连接到管芯上(on-die)互联网络且具有第二级(L2)高速缓存的本地子集的单CPU核的框图。
[0022]图9B是根据本发明的各实施例的图9A中的CPU核的一部分的展开图。
[0023]图10是示出根据本发明的实施例的示例性无序架构的框图。
[0024]图11示出根据本发明一个实施例的系统的框图。
[0025]图12示出根据本发明的实施例的第二系统的框图。
[0026]图13是根据本发明的实施例的第三系统的框图。
[0027]图14是根据本发明的实施例的SoC的框图。
[0028]图15是根据本发明的实施例的单核处理器和多核处理器的框图,具有集成的存储器控制器和图形器件。
[0029]图16是根据本发明的实施例的对比使用软件指令变换器将源指令集中的二进制指令变换成目标指令集中的二进制指令的框图。[0030]详细描述
[0031]图3和4示出了用于执行“超级”MADD指令VPLANE的方法和对应的逻辑电路,该指令执行如下操作:Vl[] = (a*V2[]) + (b*V3[])+c,其中,Vl[]是结果向量,V2[]和V3[]是输入向量,并且a、b以及c是标量401。如图3中所观察到的那样,执行该操作的执行单元可采用一种以VPLANE Rl ;R2 ;R3 ;R4/M为形式的指令格式技术。在这样做的过程中,指令格式单独地是指:i)用于存储结果Vl []的目的地寄存器的地址Rl ;ii)两个分开的输入操作数寄存器地址R2和R3,分别用于存储输入操作数V2[]、V3[];以及iii)第三输入操作数地址R3或M,用于定义在其中找到标量a、b以及c中的每一个的寄存器或存储器存储位置。或者,该指令格式可以采取VPLANE Rl ;R2 ;R3/M的形式,其中Rl保持源操作数之一和目的地。VPLANE指令的更正式的格式可包括写掩码(例如,VPLANE Rl ;k ;R2 ;R3 ;R4/M,其中k对应于掩码向量)。在又一个实施例中,仅仅写入掩码(图1的层105)被用作该架构的一部分。为了简单,本说明书的其余部分将主要参照这种VPLANE Rl ;R2 ;R3 ;R4/M格式。
[0032]在一实施例中,标号R1、R2、R3和R4中的每一个对应于图1的向量寄存器空间107中的位置。相似的是,M对应于在存储器中存储了向量值的位置。在一实施例中,标量值a、b以及c是从名义上被用于存储向量的存储空间R4/M中调用的。即,该VPLANE指令具有五个输入操作数(V2[],V3[],a,b以及C),但是仅仅消耗三个输入数据源(例如,三个寄存器或两个寄存器和一存储器位置)。
[0033]为了实现输入信息的压缩,正如图3中所观察到的那样,标量a、b、c被“打包”到同一输入数据结构中,以有效地从单个源中提供了这三个标量。特别是,“经打包”的或像向量的数据结构包含在R4/M中的标量值a、b、c,该数据结构并不必然地具有与该指令所调出的其它向量相同的向量大小。由此,不像典型的向量指令那样(其中,每一个输入操作数是相同大小的向量),VPLANE指令的结构接受这样一种可能:一组输入操作数V2 [],V3 []将都是第一大小(由机器支持的任何向量大小)的向量,同时另一个输入操作数基本上是不同的第二大小(三)的向量。
[0034]如在图3和4中观察到的,VPLANE指令的执行逻辑电路包括分别保持V2 [],V3 []以及a、b、c标量的寄存器310、311以及312。这些执行单元资源还包括熔合的乘法器313。输出结果被从该乘法器313传递到结果寄存器319。在一实施例中,熔合的乘法器313基本上包括两个“并排的”乘法器,每一个乘法器由其自己的各个选择逻辑314、316(以产生部分乘积项)及其自己的各个华莱士树电路315、317 (或其它合适的加法器电路,以添加该部分乘积)构成。通过使用这种“并排的”方式,(a*V2[])和(b*V3[])这两项可以被基本上同时计算出。
[0035]参照图3,“左半边”乘法器是由选择逻辑314和华莱士树电路315构成的。选择逻辑314构造用于(a*V2[])乘法的部分乘积,并且华莱士树电路315对这些部分乘积求和以确定(a*V2[])最终乘积。相似的是,“右半边”乘法器是由选择逻辑316和华莱士树电路317构成的。选择逻辑316构造用于(b*V3[])乘法的部分乘积,并且华莱士树电路317对这些部分乘积求和以确定(b*V3[])最终乘积。然后,由“底部”加法器318将(a*V2[])和(b*V3[])最终乘积与标量项c相加,以产生最终结果Vl []。
[0036]如上所述的熔合的乘法对应于在加法器318处的单次绕行。此处,至少为了浮点操作数,图3中所观察到的V2[],V3[],a,b, c输入值对应于尾数值。指数加法以实现该乘法是通过图3中未示出的加法电路来实现的。考虑到执行单元作为一个整体可对其进行操作的不同的输入值的动态范围,图3的尾数值在考虑到其各自的指数值的情况下可能需要被移动以实现正确的对准。在加法级(比如底部加法器318)中,这种移动可以产生取整误差。
[0037]与通过同一乘法累加电路而“循环两次”由此使两个单独的取整误差(例如,第一循环确定了(a*V2[])+c(所创建的第一取整误差),以及第二循环确定了(b*V3[])并将其加到(a*V2[])+c (所创建的第二取整误差))级联起来的方法相比,如上所述的熔合的乘法可以使加法取整误差最小化至单次取整误差。指出下列这一点是恰当的:尽管使取整误差级联起来,但是通过同一乘法电路而循环两次的方法可能对于各种应用而言是足够的了,因此,可以被视为本发明的一实施例。在一实施例中,两个不同的操作码被底层的指令集使用,以指定熔合的乘法或“循环两次”是否要被使用。
[0038]在图3中,加数标量c被提供到底部加法器318,但是可以两者择一地被输入到华莱士树315、316之一中(这取决于华莱士树的大小)。也可想像的是,某些另外的或备选的方法可以选择将来自左边和右边部分乘积的部分乘积混合到同一华莱士树结构中,使得左边和右边的华莱士树315、317之间的区别变模糊了(例如,具有预先对准的尾数和额外的流水线级)。
[0039]如下文进一步描述的,VPLANE指令可被扩展为包括单精度版本和双精度版本。一般而言,双精度的数据路径是单精度的数据路径的两倍宽度。在一实施例中,华莱士树315、317两者各自包括一对各自具有单精度宽度的华莱士树。即,熔合乘法器313中存在四个单独的单精度宽度华莱士树加法器。
[0040]一对这样的华莱士树被用来按双精度模式对单个双精度值求和。在一实施例中,这四个单独的华莱士树也被用来支持单精度模式的双超级MADD指令(例如,Vl [] = ((a*V2L[]) + (b*V3L[])+c) + ((a*V2R[]) + (b*V3R[])+c)。在此,V2L[]对应于寄存器 R2 的左半部且V2R[]对应于寄存器R2的右半部。V3L[]和V3R[]被类似地格式化。在又一实施例中,使用对乘法器的适当输入,附加标量值(例如,d、e、f)可连同a、b、c 一起打包到R4/M,使得使用同一单精度指令计算两个分开且独立的超级MADD。
[0041]在一实施例中,基于数据类型,有不同“风格”的VPLANE指令。例如,根据一个实施例,可应用的处理器的指令集架构被设计成支持用于向量操作的VPLANEPS(向量单精度)和VPLANESro (向量双精度)。
[0042]在又一实施例中,执行单元资源被设计成不仅支持向量指令还支持标量指令PLANE。即,这些执行资源也执行函数(a*A) + (b*B)+c,其中,A和B是标量输入操作数。此处,向量寄存器的低阶位(图3中未示出)可与寄存器309,311,312中的每一个以及寄存器319相关联,并且按与图3中所观察到的相同方式被路由到熔合乘法器逻辑。在又一实施例中,对于标量指令而言,支持单精度(PLANESS)和双精度(PLANESD)两者。
[0043]将五个输入操作数打包到考虑到提供最多三个输入操作数而设计的指令格式中的问题是指定了 “额外的”操作数的编码。具体地讲,该指令执行逻辑需要知道a、b以及c标量中的每一个的大小和/或它们的边界在从R4/M中提取出的数据结构内的何处。在一实施例中,如在图5中观察到的那样,该信息被呈现在立即操作数中(例如,χ86或兼容指令格式中的imm8)。立即操作数是一变量,该变量是已知的预先运行时间,因此,可以在编译/代码构建过程中被直接地嵌入该指令中。这样,在VPLANE指令的编译期间,用于定义在从R4/M中取出的打包的数据结构中哪里可以单独找到a、b以及c标量的信息在立即操作数字段中被直接地嵌入到该指令中。
[0044]上述指令的各实施例可按“通用向量友好指令格式”来实现,如下详细描述的。在其他实施例中,不使用这样的格式而使用另一指令格式,然而,下文对写掩码寄存器、各种数据变换(混合、广播等等)、寻址等的描述一般适用于以上指令的各实施例的描述。另外,在下文中详述示例性系统、架构、以及流水线。上述指令的实施例可在这些系统、架构、以及流水线上执行,但是不限于详述的系统、架构、以及流水线。
[0045]向量友好指令格式是适于向量指令(例如,存在专用于向量操作的某些字段)的指令格式。尽管描述了其中通过向量友好指令格式支持向量和标量运算两者的实施例,但是替换实施例只通过向量友好指令格式使用向量运算。
[0046]示例性通用向量友好指令格式——图6A-B
[0047]图6A-B是示出了根据本发明的实施例的通用向量友好指令格式及其指令模板的方框图。图6A是示出了根据本发明的实施例的通用向量友好指令格式及其A类指令模板的框图;而图6B是示出了根据本发明的实施例的通用向量友好指令格式及其B类指令模板的框图。具体地,针对通用向量友好指令格式600定义A类和B类指令模板,两者包括无存储器存取605的指令模板和存储器存取620的指令模板。在向量友好指令格式的上下文中的通用术语是指不绑定到任何专用指令集的指令格式。尽管描述了其中向量友好指令格式的指令操作源自寄存器(无存储器存取605指令模板)或寄存器/存储器(存储器存取620指令模板)的向量,但本发明的替换实施例可只支持这些之一。同样,尽管将描述其中存在向量指令格式的加载和存储指令的本发明实施例,但作为替换或补充,替换实施例具有将向量移入和移出寄存器(例如,从存储器到寄存器、从寄存器到存储器、在寄存器之间)的不同指令格式的指令。此外,尽管将描述支持两类指令模板的本发明实施例,但替换实施例可只支持这些之一或两类以上。
[0048]尽管将描述其中向量友好指令格式支持64字节向量操作数长度(或大小)与32位(4字节)或64位(8字节)数据元素宽度(或大小)(并且由此,64字节向量由16双字大小的元素或者替换地8四字大小的元素组成)、64字节向量操作数长度(或大小)与16位(2字节)或8位(I字节)数据元素宽度(或大小)、32字节向量操作数长度(或大小)与32位(4字节)、64位(8字节)、16位(2字节)、或8位(I字节)数据元素宽度(或大小)、以及16字节向量操作数长度(或大小)与32位(4字节)、64位(8字节)、16位(2字节)、或8位(I字节)数据元素宽度(或大小)的本发明的实施例,但是替换实施例可支持更大、更小、和/或不同的向量操作数大小(例如,656字节向量操作数)与更大、更小或不同的数据元素宽度(例如,128位(16字节)数据元素宽度)。
[0049]图6A中的A类指令模板包括:1)在无存储器存取605的指令模板内,示出了无存储器存取、全部取整控制型操作610的指令模板以及无存储器存取、数据变换型操作615的指令模板;以及2)在存储器存取620的指令模板内,示出存储器存取、时间625的指令模板和存储器存取、非时间630的指令模板。图6B中的B类指令模板包括:1)在无存储器存取605的指令模板内,示出了无存储器存取、写掩码控制、部分取整控制型操作612的指令模板以及无存储器存取、写掩码控制、vsize型操作617的指令模板;以及2)在存储器存取620的指令模板内,示出了存储器存取、写掩码控制627指令模板。
[0050]格式
[0051]通用向量友好指令格式600包括以下列出以在图6A-B中示出顺序的如下字段。结合以上涉及VPLANE指令的讨论,在一实施例中,参考以下在图6A-B和7中提供的格式细节,可利用非存储器存取指令类型605或存储器存取指令类型620。用于第一、第二和第三输入操作数R2R3R4/M和目的地Rl的地址可以是在下述寄存器地址字段644中指定的。在又一实施例中,第一源操作数Vl[]的大小是在Reg_Field744中被编码的;第二源操作数V2 []的大小是在VVVV字段720中被编码的,并且标量a,b, c的大小/位置是在i_8字段772中被编码的。在一实施例中,imm8的位[3]和[7:4]被用于按上文所述那样对a、b以及c标量进行编码,并且i_8的位[2:0]被用于符号控制。
[0052]格式字段640-该字段中的特定值(指令格式标识符值)唯一地标识了向量友好指令格式,并且由此标识了指令在指令流中以向量友好指令格式的出现。因此,格式字段640的内容将第一指令格式的指令与其他指令格式的指令进行区分,从而允许向量友好指令格式的指令进入具有其他指令格式的指令集。由此,该字段在无需只有通用向量友好指令格式的指令集的意义上是任选的。
[0053]基础操作字段642-其内容区分了不同的基础操作。如本文稍后描述的,基础操作字段642可包括操作码字段或者是操作码字段的一部分。
[0054]寄存器索引字段644-其内容直接或者通过地址生成指定了源或目的地操作数在寄存器中或者在存储器中的位置。这些包括足够数量的位以从PxQ(例如,32x1012)个寄存器文件中选择N个寄存器。尽管在一个实施例中N可多达三个源和一个目的地寄存器,但是替换实施例可支持更多或更少的源和目的地寄存器(例如,可支持高达两个源,其中这些源中的一个源还用作目的地,可支持高达三个源,其中这些源中的一个源还用作目的地,可支持高达两个源和一个目的地)。尽管在一实施例中P = 32,但替换实施例可以支持更多或更少寄存器(例如,16)。尽管在一实施例中Q= 1012位,但替换实施例可以支持更多或更少位(例如,128、1024)。
[0055]修饰符(modifier)字段646 —其内容将以指定存储器存取的通用向量指令格式出现的指令与不指定存储器存取的通用向量指令格式出现的指令区分开;即在无存储器存取605的指令模板与存储器存取620的指令模板之间。存储器存取操作读取和/或写入到存储器层次(在一些情况下,使用寄存器中的值来指定源和/或目的地址),而非存储器存取操作不这样(例如,源和/或目的地是寄存器)。尽管在一个实施例中,该字段还在三种不同的方式之间选择以执行存储器地址计算,但是替换实施例可支持更多、更少或不同的方式来执行存储器地址计算。
[0056]扩充操作字段650 —其内容区分了除基础操作以外要执行的各种不同操作中的哪一个操作。该字段是上下文专用的。在本发明的一个实施例中,该字段被分成类字段668、α字段652、以及β字段654。扩充操作字段允许在单一指令而非2、3或4个指令中执行多组共同的操作。以下是使用扩充字段650来减少所需指令的数量的指令(其命名法在本文中稍后更详细地描述)的一些示例。
[0057]
【权利要求】
1.一种处理核,包括: 执行单元逻辑电路,具有: a)第一寄存器,用于存储第一向量输入操作数V2[]; b)第二寄存器,用于存储第二向量输入操作数V3[]; c)第三寄存器,用于存储打包数据结构,所述打包数据结构包含标量输入操作数a、b、c d)乘法器,用于执行操作(a*V2[])+ (b*V3[])+c。
2.如权利要求1所述的处理核,其特征在于,所述乘法器具有用于接收V2[]的第一输入、用于接收a的第二输入、用于接收V3[]的第三输入以及用于接收b的第四输入,使得(a*V2[])和(b*V3[])是基本上同时被计算的。
3.如 权利要求1所述的处理核,其特征在于,所述执行单元包括用于循环通过所述乘法器两次的微代码,第一次循环计算(a*V2[])而第二次循环计算(b*V3[])。
4.如权利要求1所述的处理核,其特征在于,所述乘法器包括第四单独的加法器结构,用于按单精度模式计算((a*V2L[]) + (b*V3L[])+c) + ((d*V2R[]) + (e*V3R[]) +f)。
5.如权利要求4所述的处理核,其特征在于,d、e、f与a、b、c一起被打包在所述打包数据结构中。
6.如权利要求1所述的处理核,其特征在于,a、b以及c在所述打包数据结构内的各自位置是能从用于所述操作的指令的立即操作数中所放置的信息中确定的。
7.一种方法,包括: 在流水线中执行单个指令,所述单个指令的执行包括: 加载第一向量操作数V2[]; 加载第二向量操作数V3[]; 加载打包数据结构,所述打包数据结构包含标量值a、b、c ;以及 计算 Vl[] = (a*V2[]) + (b*V3[])+c。
8.如权利要求7所述的方法,其特征在于,还包括基本上同时计算(a*V2[]) + (b*V3[])。
9.如权利要求7所述的方法,其特征在于,还包括在第一微代码循环中计算(a*V2[]),并在第二微代码循环中计算(b*V3[])。
10.如权利要求7所述的方法,其特征在于,还包括将写掩码应用于Vl[]。
11.如权利要求7所述的方法,其特征在于,所述指令在立即值中提供足以从所述打包数据结构中单独地提取a、b以及c中的每一个的信息。
12.如权利要求7所述的方法,其特征在于,所述指令是从也允许两个向量源操作数和一目的地的指令格式中构建的。
13.—种处理核,包括: 执行单元逻辑电路,具有: a)第一寄存器,用于存储第一向量输入操作数; b)第二寄存器,用于存储第二向量输入操作数; c)第三寄存器,用于存储打包数据结构,所述打包数据结构包含标量输入操作数a、b、Cd)乘法器,用于执行操作: (a* (第一向量输入操作数))+ (b* (第二向量操作数))+c
14.如权利要求13所述的处理核,其特征在于,所述乘法器具有用于接收第一向量输入操作数的第一输入、用于接收a的第二输入、用于接收第二向量输入操作数的第三输入以及用于接收b的第四输入,使得基本上同时计算(a*(第一向量输入操作数))和(b*(第二向量输入操作数))。
15.如权利要求13所述的处理核,其特征在于,所述执行单元包括用于循环通过所述乘法器两次的微代码,第一次循环计算(a*(第一向量输入操作数))而第二次循环计算(b*(第二向量输入操作数))。
16.如权利要求13所述的处理核,其特征在于,所述乘法器包括四个单独的加法器结构,以用于按单精度模式执行两个单独的超级MADD计算。
17.如权利要求13所述的处理核,其特征在于,附加标量d、e、f与a、b、c一起按所述单精度模式被打包在所述打包数据结构中。
18.如权利要求1所述的处理核,其特征在于,a、b以及c在所述打包数据结构内的各自位置是能从所述指令的 立即操作数中所放置的信息中确定的。
【文档编号】G06F9/302GK104011664SQ201180075792
【公开日】2014年8月27日 申请日期:2011年12月23日 优先权日:2011年12月23日
【发明者】J·考博尔圣阿德里安, A·T·福塞斯, T·D·弗莱切, L·K·吴, E·斯普林格 申请人:英特尔公司