CN114356417B 实行16位浮点矩阵点积指令的系统和方法 (英特尔公司)_第1页
CN114356417B 实行16位浮点矩阵点积指令的系统和方法 (英特尔公司)_第2页
CN114356417B 实行16位浮点矩阵点积指令的系统和方法 (英特尔公司)_第3页
CN114356417B 实行16位浮点矩阵点积指令的系统和方法 (英特尔公司)_第4页
CN114356417B 实行16位浮点矩阵点积指令的系统和方法 (英特尔公司)_第5页
已阅读5页,还剩143页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

(19)国家知识产权局(12)发明专利地址美国加利福尼亚州R.萨德M.阿德尔曼Z.斯珀伯司31100artificialintelligencedatatyhigher-precisioncomputations.226thsymposiumonc(ARITH).2019,第69-76页.本申请公开了实行16位浮点矩阵点积指令过将指定的第一源矩阵的双字元素(M,K)的每个1国1国m中AX2解码电路,用于对所述指令解码,所述指令具有操作码、第一字段、第二字段和第三字段,所述第一字段用于指定与具有M行乘N列的32位单精度浮点数据元素的第一矩阵对应的多个数据元素的第一存储位置,所述第二字段用于指定与具有M行乘K列的、具有bfloat16格式的16位浮点数据元素的第二矩阵对应的多个数据元素的第二存储位置,所述第三字段用于指定与具有K行乘N列的、具有bfloat16格式的16位浮点数据元素的第三矩阵对应的多个数据元素的第三存储位置;以及执行电路,与所述解码电路耦合,所述执行电路用于针对所述第二矩阵的M行中的每个行m且针对所述第三矩阵的N列中的每个列n执行与所述指令对应的操作,以:从与所述第二矩阵的行m对应的K个16位浮点数据元素和与所述第三矩阵的列n对应的K个16位浮点数据元素生成点积;将所述点积与对应于所述第一矩阵的M行中的行m且对应于N列中的列n的32位单精度浮点数据元素累加,以生成结果32位单精度浮点数据元素;以及将所述结果32位单精度浮点数据元素存储在所述第一存储位置的、与所述第一矩阵的其中,所述执行电路用于执行与所述指令对应的操作,以将所述第二矩阵和所述第三矩阵的非正常值处理为零。2.如权利要求1所述的处理单元,进一步包括用于指定舍入模式的控制寄存器,其中,生成所述点积和累加所述点积各自都包括:无论由所述控制寄存器指定的所述舍入模式如3.如权利要求2所述的处理单元,其中,所述处理单元由于所述指令将不咨询所述控制4.如权利要求1至3中的任一项所述的处理单元,其中,所述处理单元由于所述指令将不更新控制寄存器。5.如权利要求1至3中的任一项所述的处理单元,其中,所述处理单元由于所述指令将不表示例外。6.如权利要求1至3中的任一项所述的处理单元,其中,所述执行电路用于执行与所述指令对应的操作,以将非正常值转储清除为零。7.如权利要求1至3中的任一项所述的处理单元,其中,所述第二矩阵的M行和所述第三矩阵的N列在数量上相等。8.如权利要求1至3中的任一项所述的处理单元,其中,所述第一存储位置、所述第二存储位置和所述第三存储位置在128位向量寄存器中。9.如权利要求1至3中的任一项所述的处理单元,其中,每个点积都是32位单精度浮点点积。10.如权利要求1至3中的任一项所述的处理单元,进一步包括:分支预测电路;调度器电路,用于调度经解码的指令以供执行。311.如权利要求1至3中的任一项所述的处理单元,其中,所述处理单元是通用中央处理单元核。12.如权利要求1至3中的任一项所述的处理单元,其中,所述处理单元是精简指令集计13.如权利要求2所述的处理单元,其中,所述单个舍入模式针对所述指令是固定的。通用中央处理单元核,与所述存储器控制器耦合,所述通用中央处理单元核是如权利要求1至13中的任一项所述的处理单元。15.如权利要求14所述的片上系统,进一步包括以下一个或多个:与所述通用中央处理单元核耦合的网络处理器、与所述通用中央处理单元核耦合的协处理器、以及与所述通用中央处理单元核耦合的图像处理器。通用中央处理单元核,与所述存储器耦合,所述通用中央处理单元核是如权利要求1至13中的任一项所述的处理单元。17.如权利要求16所述的系统,进一步包括以下一个或多个:耦合至所述通用中央处理单元核的大容量存储设备、耦合至所述通用中央处理单元核的外围部件互连PCI快速总线、耦合至所述通用中央处理单元核的通信设备。18.一种用于在处理单元中处理数据的方法,包括:获取指令;对所述指令解码,所述指令具有操作码、第一字段、第二字段和第三字段,所述第一字段指定与具有M行乘N列的32位单精度浮点数据元素的第一矩阵对应的多个数据元素的第一存储位置,所述第二字段指定与具有M行乘K列的、具有bfloat16格式的16位浮点数据元素的第二矩阵对应的多个数据元素的第二存储位置,所述第三字段指定与具有K行乘N列的、具有bfloat16格式的16位浮点数据元素的第三矩阵对应的多个数据元素的第三存储位针对所述第二矩阵的M行中的每个行m且针对所述第三矩阵中的N列中的每个列n,执行与所述指令对应的操作:从与所述第二矩阵的行m对应的K个16位浮点数据元素和与所述第三矩阵的列n对应的K个16位浮点数据元素生成点积;将所述点积与对应于所述第一矩阵的M行中的行m且对应于N列中的列n的32位单精度浮点数据元素累加,以生成结果32位单精度浮点数据元素;以及将所述结果32位单精度浮点数据元素存储在所述第一存储位置的、与所述第一矩阵的行m和列n对应的位置中,其中,执行操作包括:执行与所述指令对应的操作以将所述第二矩阵和所述第三矩阵的非正常值处理为零。19.一种计算机可读介质,具有存储于其上的指令,所述指令当由处理器执行时使所述处理器执行如权利要求18所述的方法。4实行16位浮点矩阵点积指令的系统和方法[0001]本申请是2019年10月9日提交的优先权日为2018年11月9日、申请号为背景技术理。深度学习是一类机器学习算法。深度学习架构(诸如深[0005]矩阵-矩阵乘法(又名GEMM或通用矩阵乘法)是现代处理器上常见的计算繁重的运[0006]只要输出元素具有足够的位(即,多于输入),附图说明5法器的输入的输入大小;[0019]图12图示了利用矩阵运算电路的系统的实施例;[0020]图13图示了支持使用图块的矩阵运算的处理器核心流水线的实施例;[0021]图14图示了支持使用图块的矩阵运算的处理器核心流水线的实施例;[0022]图15图示了以行主要格式和列主要格式表达的矩阵的示例;[0023]图16图示了矩阵(图块)的使用示例;[0024]图17图示了矩阵(图块)的使用方法的实施例;[0025]图18图示了根据实施例的对图块使用的配置的支持;[0026]图19图示了要支持的矩阵(图块)的描述的实施例;[0027]图20(A)-(D)图示了(一个或多个)寄存器的示例;[0028]图21是图示了根据一些实施例的使用TILE16BDP指令来加速矩阵乘法的框图;[0029]图22A是图示了根据一些实施例的TILE16BDP指令的执行的伪代码;[0030]图22B是图示了根据一些实施例的TILE16BDP指令的执行的伪代码;[0031]图22C是图示了根据一些实施例的用于由图22A和22B的伪代码使用的辅助函数的伪代码;[0032]图23图示了处理器执行流程以处理TILE16BDP指令的实施例;[0033]图24是图示了根据一些实施例的TILE16BDP指令的格式的框图;[0034]图25A-25B是图示了根据实施例的通用矢量友好指令格式及其指令模板的框图;[0035]图25A是图示了根据实施例的通用矢量友好指令格式及其类别A指令模板的框图;[0036]图25B是图示了根据实施例的通用矢量友好指令格式以及其类别B指令模板的框[0037]图26A是图示了根据实施例的示例性特定矢量友好指令格式的框图;[0038]图26B是图示了根据一个实施例的构成完整操作码字段的特定矢量友好指令格式的字段的框图;[0039]图26C是图示了根据一个实施例的构成寄存器索引字段的特定矢量友好指令格式的字段的框图;[0040]图26D是图示了根据一个实施例的构成扩充操作字段的特定矢量友好指令格式的字段的框图;[0041]图27是根据一个实施例的寄存器架构的框图;[0042]图28A是图示了根据实施例的示例性有序流水线和示例性寄存器重命名、无序发布/执行流水线二者的框图;[0043]图28B是图示了根据实施例的要被包括在处理器中的有序架构核心的示例性实施例和示例性寄存器重命名、无序发布/执行架构核心二者的框图;[0044]图29A-B图示了更特定的示例性有序核心架构的框图,该核心将是芯片中的若干个逻辑块(包括相同类型和/或不同类型的其他核心)中的一个;[0045]图29A是根据实施例的单个处理器核心,以及其到管芯上互连网络的连接并且与其2级(L2)高速缓存本地子集的连接的框图;[0046]图29B是根据实施例的图29A中的处理器核心的一部分的展开图;[0047]图30是根据实施例的可以具有多于一个核心、可以具有集成存储器控制器以及可6以具有集成图形部件(integratedgraphics)的处理器的框图;[0048]图31-34是示例性计算机架构的框图;[0049]图31示出了根据本发明的一个实施例的系统的框图;[0050]图32是根据本发明的实施例的第一更加具体的示例性系统的框图;[0051]图33是根据本发明的实施例的第二更加具体的示例性系统的框图;[0052]图34是根据本发明的实施例的片上系统(SoC)的框图;以及[0053]图35是根据实施例的对比使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。具体实施方式[0054]在以下描述中阐述了众多具体细节。然而,理解的是可以在没有这些具体细节的情况下实践实施例。在其它实例中,没有详细地示出公知的电路、结构和技术,以免使本描述的理解晦涩难懂。施例可以包括特定特征、结构或特性,但是可能不是每个实施例都一定包括该特定特征、结构或特性。此外,这样的短语不一定指代同一实施例。另外,当与实施例相结合地来描述特定的特征、结构或特性时,主张的是,结合其它实施例影否明确地描述了)是在本领域技术人员的知识范围内的。[0056]在许多主流处理器中,处理矩阵是一项困难和/或指令密集型任务。例如,矩阵的行可以被放入多个打包数据(例如,SIMD或矢量)寄存器中,然后单独地对它们进行操作。例如,取决于数据大小,添加两个8×2矩阵可能需要加载或聚集到四个打包数据寄存器中。然后,实行与来自每个矩阵的第一行相对应的打包数据寄存器的第一添加,并且实行与来自每个矩阵的第二行相对应的打包数据寄存器的第二添加。然后,所得到的打包数据寄存器被往回分散到存储器。虽然对于小矩阵,这种情境可能是可接受的,但对于较大的矩阵,这通常是不可接受的。[0057]讨论[0058]本文中描述的是支持诸如中央处理单元(CPU)、图形处理单元(GPU)和加速器之类的计算机硬件中的矩阵运算的机制。矩阵运算利用表示存储器(诸如寄存器)的一个或多个打包区域的二维(2-D)数据结构。遍及该说明书,这些2-D数据结构被称为图块(tile)。注意的是,矩阵可以小于图块(使用少于图块的全部)或者利用多个图块(矩阵大于任何一个图块的大小)。遍及说明书,矩阵(图块)语言被用来指示使用影响矩阵的图块所实行的运算;该矩阵是否大于任何一个图块通常并不相关。[0059]每个图块可以通过不同的运算(诸如本文中详述的那些)来起作用,并且包括但不加地,对诸如使用缩放(scale)和/或偏差的运算符(operator)的支持可以与这些运算一起还描述了用于实行矩阵(图块)16位图块点积(TILE16BDP)指令的指令。[0060]存储装置的部分(诸如存储器(非易失性和易失性的)、寄存器、高速缓存等)被布7置成具有不同水平和垂直尺寸的图块。例如,图块的水平尺寸可以是4(例如,矩阵的四行),[0061]配置的图块的示例性使用[0062]在一些实施例中,可以配置图块参数。例如,给定的图块可以被配置成提供图块选项。示例性图块选项包括但不限于:图块的多个行、图块的多个列,图块是否是有效的(VALID),以及图块是否由相等大小的图块的对(PAIR)组成。[0063]图1A图示了配置的图块的实施例。如所示的,应用存储器102的4kB具有存储在其图块不由对组成,并且每个图块具有按行和列布置的元素。图块t0104和图块t1106具有K行和N列的4字节元素(例如,单精度数据),其中K等于8且N=32。图块t2108和图块t3110具有K行和N/2列的8字节元素(例如,双精度数据)。由于双精度操作数是单精度宽度的两倍,因此该配置与调色板(palette)一致,被用来提供图块选项,从而为至少4kB的总存储提供至少4个名称。在操作中,可以使用加载和存储操作从存储器加载图块以及将图块存储到存储器。取决于所使用的指令编码方案,可用应用存储器的量以及可用图块的大小、数量和配置会有所不同。[0064]图1B图示了配置的图块的实施例。如所示的,4kB的应用存储器122具有存储于其上的2对1kB标题,第一对是图块t4L124和图块t4R126,并且第二对是图块t5L128和图块图块和奇图块。在该示例中,4个图块均具有按行和列布置的元素。图块t4L124和图块t4R126具有K行和N列的4字节元素(例如,单精度浮点数据),其中K等于8且N等于32。图块t5L128和图块t5R130具有K行和N/2列的8字节元素(例如,双精度浮点数据)。由于双精度操作数是单精度宽度的两倍,因此该配置与调色板一致,被用来提供图块选项,从而为至少4kB的总存储提供至少2个名称。图1A的四个图块使用4个名称,每个名称命名1kB图块,而图1B中的2对图块可以使用2个名称来指定配对图块。在一些实施例中,图块指令接受配对图块的名称作为操作数。在操作中,可以使用加载和存储操作从存储器加载图块以及将图块存储到存储器。取决于所使用的指令编码方案,可用应用存储器的量以及可用图块的大小、数量和配置会有所不同。例性选项包括但不限于:图块名称的数量、存储的行中的字节数、图块中的行数和列数等。[0066]图块最大行=所架构的存储/(调色板名称数*每行的字节数)。[0067]照此,可以编写应用程序,使得名称的固定使用将能够跨实现方式而利用不同的存储大小。[0068]使用矩阵(图块)配置(“TILECONFIG”)指令来完成图块的配置,其中在选定的调色板中定义特定的图块使用。该声明包括:要使用的图块名称的数量、每个名称(图块)所请求的行数和列数,以及在一些实施例中,每个图块所请求的数据类型。在一些实施例中,在执行TILECONFIG指令期间实行一致性检查以确定其匹配调色板条目的限制。8[0069]示例性图块存储类型[0070]图2图示了矩阵存储的若干个示例。在(A)中,图块被存储在存储器中。如所示的,续存储在存储器中。当图块存储并不映射底层存储器阵列行宽时,跨步式存储器访问允许访问一个行至然后下一个行。[0071]从存储器加载图块和将图块存储到存储器通常是从应用存储器到打包的数据行指令引用(作为加载操作指令中的TILE操作数)是可重新启动的,以处理(至多)2*页面错误[0072]在(B)中,矩阵被存储在由多个寄存器组成的图块中,该寄存器诸如打包数据寄存器(单指令、多数据(SIMD)或矢量寄存器)。在此示例中,图块覆盖在三个物理寄存器上。通[0073]在(C)中,矩阵被存储在非寄存器存储中的图块中,该存储可用于图块操作中所使一些实施例中,存储可以针对数据元素而非整个行或图块。高度和最大SIMD尺寸。配置TMMA架构需要指定每个图块的尺寸、每个图块的元素大小和调[0075]TILECONFIG指令的成功执行启用了后续TILE运算符。位对应于实际的图块有效载荷数据。[0077]TILECONFIG不仅配置图块使用,还设置了状态变量,其指示了该程序处于具有已配置图块的代码区域中。实现方式可以列举对可以与图块区域一起使用的其他指令的限[0078]退出图块区域通常利用TILERELEASEALL指令来完成。它不需要任何参数,并且可以迅速使全部图块无效(指示的是数据不再需要任何保存或恢复),并且清除与处于图块区域中相对应的内部状态。[0079]在一些实施例中,图块操作将使超出由图块配置所指定的尺寸的任何行和任何列置零。例如,在写入每个行时,图块操作将使超出配置的列数(将元素的大小计算在内)的数据置零。例如,在64字节行和被配置有10行和12列的图块的情况下,写入FP32元素的操作将利用输出/结果数据来写入具有12*4字节的前10行中的每一行,并且将每一行中的剩余4*4字节置零。图块操作也将前10个配置的行之后的任何行完全置零。当使用具有64字节的行[0080]在一些实施例中,上下文恢复指令(例如,XRSTOR)在加载数据时强制的是,超出为图块所配置的行的数据将被维持为零。如果没有有效配置,则全部行都被置零。图块数据的XRSTOR可以在超出所配置的列的列中加载垃圾。XRSTOR应当没有可能超出所配置的列数来进行清除,因为没有与图块配置相关联的元素宽度。9[0081]上下文保存(例如,XSAVE)在将整个TILE存储区写入存储器时公开该整个TILE存将为超出为每个图块所指定的数量的行写入零。[0082]在一些实施例中,图块指令是可重新启动的。访问存储器的操作允许在页面发生故障之后重新启动。处理浮点运算的计算指令还允许未屏蔽的浮点异常,其中屏蔽了由控制和/或状态寄存器控制的异常。[0083]为了支持在这些事件之后重新启动指令,指令将信息存储在下面详述的启动寄存器中。[0084]矩阵(图块)操作系统[0085]示例性硬件支持[0086]图3图示了利用矩阵(图块)运算加速器的系统的实施例。在该图示中,主处理器/处理系统301将命令311(例如,诸如算术或矩阵操纵操作之类的矩阵操纵操作,或者加载和存储操作)传送到矩阵运算加速器307。然而,这仅出于讨论目的而以这种方式示出。如之后详述的,该加速器307可以是处理核心的一部分。通常,作为图块操纵运算符指令的命令311将作为寄存器-寄存器(“reg-reg”)或寄存器-存储器("reg-mem”)格式来指代图块。其他命的指令(例如,微操作)或宏指令以供加速器307来处理。[0087]在该示例中,一致存储器接口303耦合到主处理器/处理系统301和矩阵运算加速器307,使得它们可以共享存储器。图4和5示出了如何使用矩阵运算加速器来共享存储器的不同实施例。如图4所示,主处理器401和矩阵运算加速器电路405共享同一存储器403。图5图示了其中主处理器501和矩阵运算加速器505不共享存储器但可以访问彼此的存储器的实施例。例如,处理器501可以访问图块存储器507并且照常阵运算加速器505可以访问主存储器503,但更典型地使用其自己的存储器507。注意,这些存储器可以是属于不同类型的。[0088]在一些实施例中,使用物理寄存器上的覆盖(overlay)来支持图块。例如,取决于实现方式,图块可以利用16个1,024位寄存器、32个512位寄存器等。在一些实施例中,矩阵运算利用表示存储器(诸如寄存器)的一个或多个打包区域的2维(2-D)数据结构。遍及该说明书,这些2-D数据结构被称为图块或图块寄[0089]在一些实施例中,矩阵运算加速器307包括耦合到数据缓冲器305的多个FMA309据缓冲器305缓冲了从存储器加载的图块和/或要存储到存储器的图块(例如,使用图块加和T2来实行矩阵乘法运算。至少一个图块被容纳在FMA网格309中。在一些实施例中,运算中或可以不占据图块的整个空间。[0090]图6图示了使用图块(“TMMA”)的矩阵乘法累加运算的实施例。[0091]矩阵(图块A601)中的行数与包括计算的等待时间的串行(链式)FMA的数量相匹配。一种实现方式可以在具有较小高度的网格上自由再循环,而计算保持不变。[0092]源/目的地矢量来自于具有N行的图块(图块C605),并且FMA的网格611实行N个矢量矩阵运算,从而导致了实行图块的矩阵乘法的完整指令。图块B603是另一个矢量源,并尺寸相配。在网格中的每个FMA处,将A和B的元素相乘并且添加于传入的被加数(在图中从上面),并且传出的和被传递到FMA的下一行(或最终输出)。[0094]单个步骤的等待时间与K(矩阵B的行高度)成比例,并且从属的TMMA通常具有足够的源-目的地行(在单个图块中或者跨图块)以隐藏该等待时间。一种实现方式还可以跨时间步骤来拆分SIMD(打包数据元素)尺寸M(矩阵A的行高),但是这仅仅改变了K乘以的常数。当程序指定的K小于由TMACC列举的最大值时,一种实现方式就利用“屏蔽”或“早期输出 (earlyouts)”来自由实现这一点。N*K*M。[0096]图7图示了链式融合乘法累加指令的迭代执行的子集的实施例。特别地,这图示了目的地的一个打包数据元素方位的迭代的执行电路。在该实施例中,链式融合乘法累加在有符号(signed)源上操作,其中累加器是输入数据大小的2倍。[0097]第一有符号源(源1701)和第二有符号源(源2703)均具有四个打包数据元素。这些打包数据元素中的每一个都存储诸如浮点数据之类的有符号数据。第三有符号源(源3709)具有两个打包数据元素,每个元素都存储有符号数据。第一和第二有符号源701和703的大小是第三有符号源(初始值或先前结果)709的大小的一半。例如,第一有符号源701和第二有符号源703可以具有32位打包数据元素(例如,单精度浮点数),而第三有符号源709可以具有64位打包数据元素(例如,双精度浮点数)。[0098]在该图示中,仅示出了第一有符号源701和第二有符号源703的两个最高有效打包数据元素方位以及第三有符号源709的最高有效打包数据元素方位。当然,还将处理其他打包数据元素方位。[0099]如图示的,成对处理打包数据元素。例如,使用乘法器电路705将第一有符号源701和第二有符号源703的最高有效打包数据元素方位的数据相乘,并且使用乘法器电路707将来自第一有符号源701和第二有符号源703的第二最高有效打包数据元素方位的数据相乘。在一些实施例中,这些乘法器电路705和707被重新用于其他打包数据元素方位。在其他实施例中,使用附加的乘法器电路,以使得并行处理打包数据元素。在一些上下文中,使用具有有符号第三源709的大小的通道来完成并行执行。使用加法电路711来将每一个乘法的结果加起来。[0100]将乘法结果的加法结果加到来自有符号源3709的最高有效打包数据元素方位的数据中(使用不同的加法器713或相同的加法器711)。[0101]最后,第二加法的结果被存储到打包数据元素方位中的有符号目的地715中,该打包数据元素方位对应于来自有符号第三源709的所使用的打包数据元素方位,或者如果存在下一次迭代的话,被传递给下一次迭代。在一些实施例中,将写掩码应用于该存储,使得11如果设置了对应的写掩码(位),则发生存储,而如果未设置,则不发生存储。[0102]图8图示了链式融合乘法累加指令的迭代执行的子集的实施例。特别地,这图示了目的地的一个打包数据元素方位的迭代的执行电路。在该实施例中,链式融合乘法累加在有符号源上操作,其中累加器是输入数据大小的2倍。[0103]第一有符号源(源1801)和第二有符号源(源2803)均具有四个打包数据元素。这些打包数据元素中的每一个都存储诸如整数数据之类的有符号数据。第三有符号源(源3809)具有两个打包数据元素,每个元素都存储有符号数据。第一有符号源801和第二有符号源803的大小是第三有符号源809的大小的一半。例如,第一有符号源801和第二有符号源803可以具有32位打包数据元素(例如,单精度浮点数),并且第三有符号源809可以具有64位打包数据元素(例如,双精度浮点数)。[0104]在该图示中,仅示出了第一有符号源801和第二有符号源803的两个最高有效打包数据元素方位以及第三有符号源809的最高有效打包数据元素方位。当然,还将处理其他打包数据元素方位。[0105]如图示的,成对处理打包数据元素。例如,使用乘法器电路805将第一有符号源801和第二有符号源803的最高有效打包数据元素方位的数据相乘,并且使用乘法器电路807将来自第一有符号源801和第二有符号源803的第二最高有效打包数据元素方位的数据相乘。在一些实施例中,乘法器电路805和807在没有饱和的情况下以无限精度实行乘法,并且使用加法器/饱和电路813来将累加的结果:在溢出的情况下饱和至正或负无穷大,以及在任何下溢的情况下饱和至零。在其他实施例中,乘法器电路805和807自身实行饱和。在一些实施例中,这些乘法器电路805和807被重新用于其他打包数据元素方位。在其他实施例中,使用附加的乘法器电路,以使得并行处理打包数据元素。在一些上下文中,使用具有有符号第三源(初始值或先前迭代结果)809的大小的通道来完成并行执行。使用加法/饱和电路813将每一个乘法的结果添加到有符号第三源809。[0106]当加法导致过大的值时,加法/饱和(累加器)电路813保留操作数的符号。特别地,饱和度评估发生在多路添加与写入目的地或下一次迭代之间的无限精度结果上。当累加器813是浮点的并且输入项是整数时,乘积之和以及浮点累加器输入值被变为无限精度值(数百个位的固定点数量),实行乘法结果与第三输入的加法,并且实行到实际累加器类型的单个舍入。[0107]无符号饱和意味着输出值被限制成该元素宽度的最大无符号数量(全为1)。有符号饱和意味着一个值被限制成处于针对该元素宽度的最小负数与最大正数之间的范围内(例如,对于字节,该范围是从-128(=-2^7)到127(=2^7-1))。[0108]加法和饱和检查的结果被存储到打包数据元素方位中的有符号结果815中,其对应于来自有符号第三源809的所使用的或者如果有下一次迭代的话被传递到下一次迭代的打包数据元素方位。在一些实施例中,将写掩码应用于该存储,使得如果设置了对应的写掩[0109]图9图示了链式融合乘法累加指令的迭代执行的子集的实施例。特别地,这图示了目的地的一个打包数据元素方位的迭代的执行电路。在该实施例中,链式融合乘法累加在有符号源和无符号源上操作,其中累加器是输入数据大小的4倍。[0110]第一有符号源(源1901)和第二无符号源(源2903)均具有四个打包数据元素。这些打包数据元素中的每一个都具有诸如浮点数或整数数据之类的数据。第三有符号源(初始值或结果915)具有存储有符号数据的打包数据元素。第一源901和和第二源903的大小是第三有符号源915的四分之一。例如,第一源901和第二源903可以具有16位打包数据元素(例如,字),并且第三有符号源915可以具有64位打包数据元素(例如,双精度浮点数或64位整数)。[0111]在该图示中,示出了第一源901和第二源903的四个最高有效打包数据元素方位和第三有符号源915的最高有效打包数据元素方位。当然,如果存在任何其他打包数据元素方[0112]如图示的,按四元组来处理打包数据元素。例如,使用乘法器电路905将第一源901和第二源903的最高有效打包数据元素方位的数据相乘,使用乘法器电路907将来自第一源901和第二源903的第二最高有效打包数据元素方位的数据相乘,使用乘法器电路909将来自第一源901和第二源903的第三最高有效打包数据元素方位的数据相乘,并且使用乘法器电路911将来自第一源901和第二源903的最低有效打包数据元素方位的数据相乘。在一些实施例中,第一源901的有符号打包数据元素被符号扩展,并且第二源903的无符号打包数据元素在乘法之前被零扩展(zeroextended)。[0113]在一些实施例中,这些乘法器电路905-911被重新用于其他打包数据元素方位。在其他实施例中,使用附加的乘法器电路,使得并行处理打包数据元素。在一些上下文中,使用具有有符号第三源915的大小的通道来完成并行执行。使用加法电路913来将每一个乘法的结果加起来。[0114]将乘法结果的加法结果加到来自有符号源3915的最高有效打包数据元素方位的数据中(使用不同的加法器917或相同的加法器913)。[0115]最后,第二加法的结果919或者被存储到打包数据元素方位中的有符号目的地中,该打包数据元素方位对应于来自有符号第三源915的所使用的打包数据元素方位,或者被传递给下一次迭代。在一些实施例中,将写掩码应用于该存储,使得如果设置了对应的写掩[0116]图10图示了链式融合乘法累加指令的迭代执行的子集的实施例。特别地,这图示了目的地的一个打包数据元素方位的迭代的执行电路。在该实施例中,链式融合乘法累加在有符号源和无符号源上操作,其中累加器是输入数据大小的4倍。[0117]第一有符号源1001和第二无符号源1003均具有四个打包数据元素。这些打包数据元素中的每一个都存储诸如浮点数或整数数据之类的数据。第三有符号源1015(初始的或先前结果)具有存储有符号数据的打包数据元素。第一源和第二源的大小是第三有符号源1015的四分之一(初始的或先前结果)。例如,第一源和第二源可以具有16位打包数据元素(例如,字),并且第三有符号源1015(初始的或先前结果)可以具有64位打包数据元素(例[0118]在该图示中,示出了第一有符号源1001和第二无符号源1003的四个最高有效打包数据元素方位和第三有符号源1015的最高有效打包数据元素方位。当然,如果存在任何其他打包数据元素方位,则也将处理它们。[0119]如图示的,按四元组来处理打包数据元素。例如,使用乘法器电路1005将第一有符号源1001和第二无符号源1003的最高有效打包数据元素方位的数据相乘,使用乘法器电路1007将来自第一有符号源1001和第二无符号源1003的第二最高有效打包数据元素方位的数据相乘,使用乘法器电路1009将来自第一有符号源1001和第二无符号源1003的第三最高有效打包数据元素方位的数据相乘,并且使用乘法器电路1011将来自第一有符号源1001和第二无符号源1003的最低有效打包数据元素方位的数据相乘。在一些实施例中,第一有符号源1001的有符号打包数据元素被符号扩展,并且第二无符号源1003的无符号打包数据元素在乘法之前被零扩展。[0120]在一些实施例中,这些乘法器电路1005-1011被重新用于其他打包数据元素方位。在其他实施例中,使用附加的乘法器电路,以使得并行处理打包数据元素。在一些上下文中,使用具有第三有符号源1015(初始的或先前结果)的大小的通道来完成并行执行。使用加法器/饱和1013电路将乘法结果的加法结果加到来自第三有符号源1015(初始的或先前结果)的最高有效打包数据元素方位的数据中。[0121]当加法导致对于有符号饱和而言过大或过小的值时,加法/饱和(累加器)电路1013保留操作数的符号。特别地,饱和评估发生在多路添加与写入目的地之间的无限精度结果上。当累加器1013是浮点的并且输入项是整数时,乘积之和以及浮点累加器输入值被变为无限精度值(数百个位的固定点数量),实行乘法结果与第三输入的加法,并且实行到实际累加器类型的单个舍入。[0122]加法和饱和检查的结果1019被存储到打包数据元素方位中的有符号目的地,其对应于来自第三有符号源1015(初始的或先前结果)的所使用的或被传递到下一次迭代的打包数据元素方位。在一些实施例中,将写掩码应用于该存储,使得如果设置了对应的写掩码[0123]图11图示了根据实施例的两次幂大小的SIMD实现方式,其中累加器使用大于对乘法器的输入的输入大小。注意,源(对于乘法器)和累加器值可以是有符号值或无符号值。对于具有2倍输入大小的累加器(换言之,累加器输入值的大小是源的打包数据元素大小的两倍),表1101图示了不同的配置。对于字节大小的源,累加器使用16位大小的字或半精度浮点(HPFP)值。对于字大小的源,累加器使用32位整数或32位大小的单精度浮点(SPFP)值。对于SPFP或32位整数大小的源,累加器使用64位整数或64位大小的双精度浮点(DPFP)值。[0124]对于具有4倍输入大小的累加器(换言之,累加器输入值的大小是源的打包数据元素大小的四倍),表1103图示了不同的配置。对于字节大小的源,累加器使用32位整数或32位大小的单精度浮点(SPFP)值。对于字大小的源,在一些实施例中,累加器使用64位整数或64位大小的双精度浮点(DPFP)值。[0125]对于具有8倍输入大小的累加器(换言之,累加器输入值的大小是源的打包数据元素大小的八倍),表1105图示了一种配置。对于字节大小的源,累加器使用64位整数。[0126]如先前暗示的,矩阵运算电路可以被包括在核心中,或者作为外部加速器。图12图示了利用矩阵运算电路的系统的实施例。在该图示中,多个实体与环形互连1245耦合。[0127]多个核心——核心01201、核心11203、核心21205和核心N1207——提供非基于图块的指令支持。在一些实施例中,矩阵运算电路1251在核心1203中提供,并且在其他实施例中,矩阵运算电路1211和1213可在环形互连1245上访问。[0128]附加地,提供一个或多个存储器控制器1223-1225以代表核心和/或矩阵运算电路来与存储器1233和1231通信。[0129]图13图示了支持使用图块的矩阵运算的处理器核心流水线的实施例。分支预测和解码电路1303根据存储在指令存储1301中的指令来实行指令的分支预测、指令的解码和/或两者。例如,本文中详述的指令可以被存储在指令存储中。在一些实现方式中,单独的电路被用于分支预测,并且在一些实施例中,使用微代码1305将至少一些指令解码成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号。可以使用各种不同的机制来实现分支预测和解码电路1303。适合的机制的示例包括但不限于查找表、硬件实现方式、[0130]分支预测和解码电路1303耦合到分配/重命名1307电路,在一些实施例中,该分配/重命名1307电路耦合到调度器电路1309。在一些实施例中,这些电路通过实行下述各项中的一个或多个来提供寄存器重命名、寄存器分配和/或调度功能:1)将逻辑操作数值重命名为物理操作数值(例如,在一些实施例中为寄存器别名表),2)将状态位和标记分配给经解码的指令,以及3)(例如,在一些实施例中,使用保留站)从指令池中调度出经解码的指令以供在执行电路上执行。[0131]调度器电路1309表示任何数量的不同调度器,包括保留站、中央指令窗口等。调度器电路1309耦合到或包括(一个或多个)物理寄存器堆1315.该(一个或多个)物理寄存器堆1315中的每一个表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一个或多个个)物理寄存器堆1315包括矢量寄存器电路、写掩码寄存器电路以及标量寄存器电路。这些寄存器硬件可以提供架构矢量寄存器、矢量掩码寄存器以及通用寄存器。(一个或多个)物理寄存器堆1315被退休电路1317重叠以图示可以实现寄存器重命名和无序执行的各种方式(例如,使用(一个或多个)重新排序缓冲器和(一个或多个)退休寄存器堆;使用(一个或多个)未来堆、(一个或多个)历史缓冲器以及(一个或多个)退休寄存器堆;使用寄存器图和寄存器池等)。退休电路1317和(一个或多个)物理寄存器堆1315耦合到执行电路1311[0132]虽然在无序执行的上下文中描述了寄存器重命名,但是应当理解的是,可以在有序架构中使用寄存器重命名。虽然所图示的处理器的实施例也可以包括单独的指令和数据高速缓存单元以及共享L2高速缓存单元,但是替换的实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如1级(L1)内部高速缓存,或多级内部高速缓存。在一些实施例中,系统可以包括内部高速缓存和在核心和/或处理器外部的外部高速缓存的组合。替换地,全部的高速缓存都可以在核心和/或处理器外部。[0133]执行电路1311是一组一个或多个执行电路,包括标量电路1321、矢量/SIMD电路1323和矩阵运算电路1327,以及用以访问高速缓存1313的存储器访问电路1325.执行电路能集的许多执行单元,但是其他实施例可以包括仅一个执行单元或全部都实行所有功能的多个执行单元。标量电路1321实行标量运算,矢量/SIMD电路1323实行矢量/SIMD运算,并且矩阵运算电路1327实行本文中详述的矩阵(图块)运算。[0134]作为示例,示例性寄存器重命名无序发布/执行核心架构可以实现流水线如下:1)指令获取电路实行获取和长度解码阶段;2)分支和解码电路1303实行解码阶段;3)分配/重命名1307电路实行分配阶段和重命名阶段;4)调度器电路1309实行调度阶段;5)(一个或多个)物理寄存器堆(耦合到或被包括在调度器电路1309和分配/重命名1307电路中)和存储器单元实行寄存器读取/存储器读取阶段;执行电路1311实行执行阶段;6)存储器单元和(一个或多个)物理寄存器堆(一个或多个)单元实行写回/存储器写入阶段;7)各个单元可能涉及异常处理阶段;以及8)退休单元和(一个或多个)物理寄存器堆(一个或多个)单元实行提交阶段。[0135]核心可以支持一个或多个指令集(例如,x86指令集(具有已经被添加有更新版本的一些扩展);加利福尼亚州森尼维尔市的MIPS科技的MIPS指令集;加利福尼亚州森尼维尔市的ARM控股的ARM指令集(具有诸如NEON之类的可选的附加扩展),包括本文中描述的(一个或多个)指令。在一个实施例中,核心1390包括用以支持打包数据指令集扩展(例如AVX1、AVX2)的逻辑,由此允许使用打包数据来实行被许多多媒体应用使用的操作。[0136]应当理解的是,核心可以支持多线程(执行操作或线程的两个或更多个并行集合),并且可以用各种各样的方式这么做,该方式包括时间分片多线程、同时多线程(在单个物理核心为线程中的每一个提供逻辑核心的情况下,该物理核心是同时多线程的)或它们的组合(例如,时间分片获取和解码,以及其后诸如在英特尔⑧超线程技术中的同时多线程)。[0137]图14图示了支持使用图块的矩阵运算的处理器核心流水线的实施例。分支预测和解码电路1403根据存储在指令存储1401中的指令来实行指令的分支预测、指令的解码和/或两者。例如,本文中详述的指令可以存储在指令存储中。在一些实现方式中,单独的电路被用于分支预测,并且在一些实施例中,使用微代码1405将至少一些指令解码成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号。分支预测和解码电路1403可以使用各种不同的机制来实现。适合的机制的示例包括但不限于查找表、硬件实现方式、可[0138]分支预测和解码电路1403耦合到分配/重命名1407电路,在一些实施例中,该分配/重命名1407电路耦合到调度器电路1409。在一些实施例中,这些电路通过实行下述各项中的一个或多个来提供寄存器重命名、寄存器分配和/或调度功能:1)将逻辑操作数值重命名为物理操作数值(例如,在一些实施例中是寄存器别名表),2)将状态位和标记分配给经解码的指令,以及3)(例如,在一些实施例中,使用保留站)从指令池中调度出经解码的指令以供在执行电路上执行。[0139]调度器电路1409表示任何数量的不同调度器,包括保留站、中央指令窗口等。(一个或多个)调度器单元调度器电路1409耦合到或包括(一个或多个)物理寄存器堆1415。(一个或多个)物理寄存器堆1415中的每一个表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一个或多个不同的数据类型,诸如标量整数一个实施例中,(一个或多个)物理寄存器堆1415包括矢量寄存器电路、写掩码寄存器电路以及标量寄存器电路。这些寄存器硬件可以提供架构矢量寄存器、矢量掩码寄存器以及通用寄存器。(一个或多个)物理寄存器堆1415被退休电路1417重叠以图示可以实现寄存器重命名和无序执行的各种方式(例如,使用(一个或多个)重新排序缓冲器和(一个或多个)退休寄存器堆;使用(一个或多个)未来堆、(一个或多个)历史缓冲器以及(一个或多个)退休寄存器堆;使用寄存器图和寄存器池等)。退休电路1417和(一个或多个)物理寄存器堆1415耦合到执行电路1411。[0140]虽然在无序执行的上下文中描述了寄存器重命名,但是应当理解的是,可以在有序架构中使用寄存器重命名。虽然所图示的处理器的实施例也可以包括单独的指令和数据高速缓存单元以及共享L2高速缓存单元,但是替换的实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如1级(L1)内部高速缓存,或多级内部高速缓存。在一些实施例中,系统可以包括内部高速缓存和在核心和/或处理器外部的外部高速缓存的组合。替换地,全部的高速缓存都可以在核心和/或处理器外部。[0141]执行电路1411包括一组一个或多个执行电路1427和一组一个或多个存储器访问电路以访问高速缓存1413.执行电路1427实行本文中详述的矩阵(图块)运算。[0142]作为示例,示例性寄存器重命名无序发布/执行核心架构可以实现流水线如下:1)指令获取电路实行获取和长度解码阶段;2)分支和解码电路1403实行解码阶段;3)分配/重命名1407电路实行分配阶段和重命名阶段;4)调度器电路1409实行调度阶段;5)(一个或多个)物理寄存器堆(耦合到或被包括在调度器电路1409和分配/重命名1407电路中)和存储器单元实行寄存器读取/存储器读取阶段;执行电路1411实行执行阶段;6)存储器单元和(一个或多个)物理寄存器堆(一个或多个)单元实行写回/存储器写入阶段;7)各个单元可能涉及异常处理阶段;以及8)退休单元和(一个或多个)物理寄存器堆(一个或多个)单元实行提交阶段。[0143]核心可以支持一个或多个指令集(例如,x86指令集(具有已经被添加有更新版本的一些扩展);加利福尼亚州森尼维尔市的MIPS科技的MIPS指令集;加利福尼亚州森尼维尔市的ARM控股的ARM指令集(具有诸如NEON之类的可选的附加扩展),包括本文中描述的(一个或多个)指令。在一个实施例中,核心1490包括用以支持打包数据指令集扩展(例如AVX1、AVX2)的逻辑,由此允许使用打包数据来实行被许多多媒体应用使用的操作。[0144]应当理解的是,核心可以支持多线程(执行操作或线程的两个或更多个并行集合),并且可以用各种各样的方式这么做,该方式包括时间分片多线程、同时多线程(在单个物理核心为线程中的每一个提供逻辑核心的情况下,该物理核心是同时多线程的)或它们的组合(例如,时间分片获取和解码,以及其后诸如在英特尔超线程技术中的同时多线程)。[0145]布局[0146]遍及该说明书,使用行主要数据布局来表达数据。列主要用户应当根据其取向来转换各项。图15图示了以行主要格式和列主要格式表达的矩阵的示例。如所示的,矩阵A是2×3矩阵。当该矩阵以行主要格式存储时,行的数据元素是连续的。当此矩阵以列主要格式存储时,列的数据元素是连续的。矩阵的一个众所周知的属性是A*B¹=(BA),其中上标T意指变换。作为行主要数据来读取列主要数据导致了矩阵看起来像变换矩阵。[0147]在一些实施例中,在硬件中利用行主要语义,并且列主要数据要交换操作数次序,其具有的结果是矩阵的变换,但是对于后续的来自存储器的列主要读取来说,它是正确的非变换矩阵。CN114356417B说明书14/38页1707处,将至少一个矩阵(图块)向外存储到存储器中,并且可以在1709处发生上下文切换。[0166]示例性配置[0167]图块配置硬件支持[0168]如上面讨论的,通常需要在使用之前配置图块使用。例如,可能不需要完全使用所有行和列。在一些实施例中,不仅不配置这些行和列节省电力,而且该配置可以被用来确定操作是否将生成错误。例如,如果M和L不相同,则形式为(N×M)*(L×N)的矩阵乘法通常不起作用。[0169]在使用利用了图块的矩阵之前,在一些实施例中,要配置图块支持。例如,配置每个图块的行数和列数、要使用的图块等。TILECONFIG指令是对计算机本身的改进,因为它提供了对配置计算机以使用矩阵加速器(作为处理器核心的一部分,或者作为外部设备)的支持。特别地,TILECONFIG指令的执行使得要从存储器中检索配置并且将其应用于矩阵加速器内的矩阵(图块)设置。[0170]图块使用配置[0171]图18图示了根据实施例的对图块使用的配置的支持。存储器1801包含要支持的矩阵(图块)的图块描述1803。[0172]处理器/核心1805的指令执行资源1811将图块描述1803的各方面存储到图块配置1817中。图块配置1817包括调色板表1813以详述针对调色板的什么图块被配置(每个图块中的行数和列数)以及矩阵支持正在使用的标记。特别地,指令执行资源1811被配置成如由图块配置1817所指定的那样来使用图块。指令执行资源1811还可以包括机器专用寄存器或配置寄存器以指示图块使用。还设置了附加的值,诸如使用中和起初始值。图块配置1817利用(一个或多个)寄存器1819来存储图块使用和配置信息。[0173]图19图示了要支持的矩阵(图块)的描述的实施例。这是在执行STTILECFG指令时调色板ID被用来索引调色板表1813,该调色板表1813按照调色板ID存储了图块中的字节数,以及与由该配置所定义的该ID相关联的图块的每行字节数。[0174]字节1存储要存储在“startRow”寄存器1903中的值,并且字节2存储要存储在寄存器startP1905中的值。为了支持在这些事件之后重新启动指令,指令存储这些寄存器的信息。为了支持在诸如上面详述的中断事件之后重新启动指令,指令将信息存储在这些寄存器中。startRow值指示了应该被用于重新启动的行。startP值指示了当使储操作的行内的方位,并且在一些实施例中,指示了行的下半部分(在一对的下部图块中)或行的较高一半(在一对中的较高图块中)。通常,不需要行(列)中的方位。二者都设置为零。[0176]在任何时候没有重新启动中断的矩阵(图块)指令,软件都有责任将startRow和startP值置零。例如,未屏蔽的浮点异常处理程序可能决定在软件中完成操作,并且将程序计数器值改到另一指令,通常是下一条指令。在这种情况下,软件异常处理程序必须将操作系统呈现给它的异常中的startRow和startP值置零,然后使用恢复指令来重新加载这些值。[0177]字节3存储了图块1907的对(每个图块1b)的指示。[0178]字节16-17存储了针对图块0的行1913数和列1915数,字节18-19存储了针对图块1的行数和列数等。换言之,每个2字节组指定了针对图块的行数和列数。如果不将2字节的组用来指定图块参数,则它们的值应当为零。为比实现限制或调色板限制更多的图块指定图块参数会导致故障。未配置的图块被设置成具有0行0列的初始状态。[0179]最后,存储器中的配置通常以结束描绘来结束,诸如若干个连续字节全部为零。[0180]示例性图块和图块配置存储[0181]图20(A)-(D)图示了(一个或多个)寄存器1819的示例。图20(A)图示了多个寄存器1819.如所示的,每个图块(TMMO2001...TMMN2003)具有单独的寄存器,其中每个寄存器存储该特定图块的行和列大小。StartP2011和StartRow2013被存储在单独的寄存器中。设置一个或多个状态寄存器2015(例如,TILES_CONFIGURED=1)以指示图块被配置以供使[0182]图20(B)图示了多个寄存器1819.如所示的,每个图块的行和列都具有单独的寄存的寄存器中。设置一个或多个状态寄存器20配置以供使用。[0183]图20(C)图示了单个寄存器1819.如所示的,该寄存器存储了图块配置(每个图块的行和列)2031,StartP2011和StartRow2013被存储在作为打包数据寄存器的单个寄存器中。设置一个或多个状态寄存器2015(例如,TILES_CO供使用。[0184]图20(D)图示了多个寄存器1819.如所示的,单个寄存器存储了图块配置(每个图块的行和列)2031.StartP和StartRow被存储在单独的寄存器2011和2013中。设置一个或多[0185]可以考虑其他组合,诸如将初始寄存器组合成单个寄存器,其中它们被分别示出,[0187]如上面提到的,通用矩阵乘法(又称GEMM)的特殊硬件是改进某些应用(诸如,深度学习)的峰值计算性能(和能量效率)的好选项。只要输出元素具有足够的位(即,多于输入),这些应用中的一些(包括深度学习)可以对具有相对较少位的输入数据元素进行操作而不会损失精确度。[0188]因此,所公开的方法和系统实行16位浮点矩阵点积运算(TILE16BDP),其采用具有16位浮点元素的源矩阵(图块),实行点积乘法,并且将所得到的乘积与32位单精度目的地进行累加。[0189]所公开的TILE16BDP指令要由处理器执行,该处理器包括获取电路以获取具有字段的指令,该字段用以指定操作码和具有单精度元素的M×N目的地矩阵(图块)、M×K第一源矩阵(图块)和K×N第二源矩阵(图块)的位置,指定的第一和第二源矩阵的元素包括一对偶数和奇数16位浮点值,其中该操作码要指示执行电路对于指定的目的地矩阵(图块)的每个元素(M,N)而言,将来自指定的第一源矩阵(图块)的行M的K对元素和来自指定的第二源矩阵(图块)的列N的对应的K对元素转换成单精度值,将来自两个指定的源矩阵(图块)的经转换的偶数元素相乘,并且将来自指定的源矩阵(图块)的经转换的奇数元素分别相乘,并且然后将那些乘积与元素(M,N)的先前内容分别累加成偶数乘积的一个和以及奇数乘积的一个和。处理器还将包括其他支持硬件,诸如用以解码所获取的指令的解码电路,以及用以如由操作码指定的那样响应于经解码的指令的执行电路。[0190]图21是图示了根据一些实施例的使用TILE16BDP指令来加速矩阵乘法的框图。如所示的,指令2101包括下述字段,该字段用以指定操作码2102(例如,TILE16BDP)和具有单精度元素的M×N目的地矩阵(图块)2104、M×K第一源矩阵(图块)2106以及K×N第二源矩阵(图块)2108的位置,指定的源矩阵具有包括一对16位浮点值的元素。根据一些实施例,至少[0191]此处,指定的第一源矩阵(图块)2112A具有M=4乘K=3的尺寸。指定的第二源矩阵在其他实施例中,它们可以是相等的。[0192]在操作中,处理器2100要响应于操作码2102(TILE16BDP),对于指定的目的地矩阵(图块)2122的每个元素(M,N),该响应通过使用转换电路2116A将来自指定的第一源矩阵(图块)2112A的行M的K对元素,以及使用转换电路2116B将来自指定的第二源矩阵(图块)然后,处理器2100要使用乘法电路2118将K个经转换的偶数值相乘在一起,并且将K个经转换的奇数值相乘在一起,并且使用累加电路2120将K个乘积与元素(M,N)的先前内容进行累[0193]在这里说明了TILE16BDP指令的性能,以用于在矩阵(图块)位置(1,0)处设置目的地元素。因此,处理器2100要使用转换电路2116A和2116B来将来自指定的第一源矩阵(图块)2112A的行M(=1)的K(=3)对元素和来自指定的第二源矩阵(图块)2112B的列N(=0)的K(=3)对元素转换成单精度的。然后,处理器2100要使用乘法电路2118将来自两个指定的源矩阵(图块)的经转换的偶数元素相乘,并且将来自指定的源矩阵(图块)的经转换的奇数元素分别相乘,并且然后使用累加电路2120来将这些乘积与元素(M,N)的先前内容分别累加成偶数乘积的一个和以及奇数乘积的一个和,该元素(M,N)在这里是元素C(1,0)。[0194]如所示的,三个箭头从指定的第一和第二源矩阵(图块)中的每一个行进,以指示转换和乘法并行发生。在一些实施例中,处理器通过并行地生成结果并将结果存储到指定的目的地矩阵(图块)的每个元素中来响应于经解码的指令。在一些实施例中,生成新值并将其一次一行或一次一列地存储到目的地中。[0195]所公开的实施例通过允许软件来实行具有减小的源元素大小的TILE16BDP指令来改进替换的方法,这允许使用更少的存储器空间和更少的存储器带宽,并且改进了某些应用的峰值计算性能(和能量效率)。在一些应用中(诸如深度学习),只要输出元素具有足够的位(即,多于输入),就可以对具有相对较少位的输入数据元素进行操作而不会损失精确[0196]至少参照图22A-C、23和28A-B来进一步说明和描述用以执行TILE16BDP指令的系统和方法。[0197]示例性执行[0198]图22A是图示了根据一些实施例的TILE16BDP指令的示例性执行的伪代码。如所示的,指令2201包括操作码2202(例如,TILE16BDP)和具有单精度元素的M×N目的地矩阵2204、M×K第一源矩阵2206以及K乘N第二源矩阵2208的位置,指定的源矩阵具有包括一对16位浮点值的元素。操作码2202(TILE16BDP)指示处理器要如伪代码2200所示的那样,对于指定的目的地矩阵(图块)的每个元素(M,N),将来自指定的第一源矩阵(图块)的行M的K对元素以及来自指定的第二源矩阵(图块)的列N的K对元素转换成单精度的,将来自两个指定的源矩阵(图块)的经转换的偶数元素相乘,并且将来自两个指定的源矩阵(图块)的经转换的奇数元素分别相乘,并且然后将这些乘积与元素(M,N)的先前内容分别累加成偶数乘积的一个和以及奇数乘积的一个和。在未示出的其他实施例中,乘法发生在转换之前。的操作数(如此处),作为对指定的操作码的后缀或前缀(星号在本文中被用作指代那些可选的后缀和前缀的缩写),作为被提供有指令的立即数的部分(例如,K、M和N均要被指定为32位立即数中的不同的8位),作为由软件进行编程的控制寄存器的部分(例如,XTILECONFIG是由任一矩阵配置指令(诸如TILECFG或XRSTORE*指令)加载的寄存器,并且通过矩阵保存指令(诸如XSAVE*)存储),或者甚至作为架构默认值。[0200]指令2201进一步指定目的地矩阵(图块)位置2204、第一源矩阵(图块)位置2206和第二源矩阵(图块)位置2208。每个指定的矩阵(图块)位置可以指向存储器位置、矢量寄存器的集合和图块寄存器的集合中的任何一个。[0201]图22B是图示了根据一些实施例的TILE16BDP指令的示例性执行的伪代码。如所示的,指令2211包括操作码2212(例如,TILE16BDP)和具有单精度元素的M×N目的地矩阵2214、M×K第一源矩阵2216和K×N第二源矩阵2218的位置,指定的源矩阵具有包括一对16位浮点值的元素。伪代码2210类似于伪代码2200(图22A),除了奇数源元素的乘积在偶数源元素的乘积之前与目的地元素一起累加之外。照图24-26进一步说明和描述了TILE16BDP指令的格式。[0203]图22C是根据一些实施例的用于与TILE16BDP指令一起使用的示例性辅助函数的伪代码。如所示的,伪代码2220定义了make_fp32()函数、write_row_and_zero()函数、zero_upper_rows()函数和zero_tileconfig_start()函数,全部的这些函数都由图22A的TILE16BDP伪代码使用。照图24-26进一步说明和描述了TILE16BDP指令的格式。[0205]示例性(一个或多个)执行方法[0206]图23是图示了响应于TILE16BDP指令的处理器的方框流程图。如流程图2300所示,在2301处,处理器要使用获取电路来获取具有字段的指令,该字段用以指定操作码和具有单精度元素的M×N目的地矩阵、M×K第一源矩阵和K×N第二源矩阵的位置,指定的源矩阵具有包括一对16位浮点值的元素。[0207]在使用处理器的物理寄存器堆来存储矩阵(图块)的实施例中,由于目的地元素是源元素宽度的两倍,因此在源中具有一对16位浮点格式允许进行有效使用,当矩阵(图块)是矢量寄存器的集合,具有相同类型的矢量寄存器,其是128位xmm寄存器、256位ymm寄存器或512位zmm寄存器。当矩阵被存储在图块寄存器中时出的其他实施例中,具有16位浮点元素的单个源矢量被转换为存储在宽度为源矢量宽度的一半的目的地矢量中的32位元素。[0208]指定的操作码要指示执行电路对于指定的目的地矩阵的每个元素(M,N),将来自指定的第一源矩阵的行M的k对元素和来自指定的第二源矩阵的列n的k对元素转换成单精度的,将来自两个指定的源矩阵(图块)的经转换的偶数元素相乘,并且将来自两个指定的源矩阵(图块)的经转换的奇数元素分别相乘,并且然后将那些乘积与元素(m,n)的先前内容分别累加成偶数乘积的一个和以及奇数乘积的一个和。[0209]在2303处,处理器要使用解码电路来解码所获取的指令。例如,由诸如在本文中详述的解码电路之类的解码电路来解码所获取的TILE16BDP指令。在图示系统的上下文中,解码电路类似于至少参照图13、14和28A-B所说明和描述的解码电路。[0210]在2305处,(按照需要)对经解码的指令的执行进行调度,在它可以在不同时间发生或者根本不发生的范围内,这是可选的(如其虚线边界指示的)。在2307处,处理器要使用执行电路如由操作码所指定的那样来响应于经解码的指令。[0211]在一些实施例中,指令在2309处被提交或退出,在它可以在不同时间发生或者根本不发生的范围内,这是可选的(如其虚线边界指示的)。[0212]参照图3-14进一步说明和描述了执行电路。在一些实施例中,执行电路是矩阵运算加速器,诸如被图示和描述为加速器307(图3)的加速器。在一些实施例中,执行电路是矩阵运算电路,诸如矩阵运算电路405(图4)、505(图5)或1213(图12)以及1327(图13)。[0213]示例性(一个或多个)指令格式[0214]图24是图示了根据一些实施例的TILE16BDP指令的格式的框图。如所示的,TILE16BDP指令2400包括字段,该字段用以指定操作码2402(TILE16BDP*),其指示处理器要对于指定的目的地矩阵的每个元素(M,N)将来自指定的第一源矩阵的行M的K对元素和来自指定的第二源矩阵的列N的K对元素转换成单精度的,将来自两个指定的源矩阵(图块)的经转换的偶数元素相乘,并且将来自两个指定的源矩阵(图块)的经转换的奇数元素分别相乘,并且然后将这些乘积与元素(m,n)的先前内容分别累加成偶数乘积的一个和以及奇数乘积的一个和。[0215]指令2400进一步包括目的地矩阵(图块)位置2404、第一源矩阵(图块)位置2406和第二源矩阵(图块)位置2408。指定的源矩阵位置和目的地矩阵位置中的每一个可以处于存储器位置、矢量寄存器的集合和图块寄存器的集合中的任一个中。[0216]TILE16BDP指令2400进一步包括若干个可选参数以控制处理器的行为,该参数包均是大于或等于4的整数。[0217]操作码2402被示出为包括星号,其要传达的是可以添加附加的前缀和/或后缀以指定指令行为。可以使用对操作码2402的前缀或后缀来指定指令修饰符2410、2412、2414和2416中的一个或多个。[0218]在一些实施例中,可选指令修饰符2410、2412、2414和2416中的一个或多个被编码在被可选地包括在指令2400中的立即数字段(未示出)中。在一些实施例中,经由配置/状态寄存器(例如,XTILECONFIG)来指定可选指令修饰符2410、2412、2414和2416中的一个或多[0219]当指令没有指定任何一个或多个可选修饰符2410、2412、2414和2416时,它们有时使用从图块架构的其他部分继承的默认值或隐式参数。[0220]详细的示例性系统、处理器和仿真[0221]本文中详述的是用以执行上述指令的硬件、软件等的示例。例如.下面描述的内容[0222]指令集[0223]指令集可以包括一个或多个指令格式。给定的指令格式可以定义各种字段(例如,位的数量、位的位置)以除了其他之外指定了要被实行的操作(例如,操作码)和要在其上实行操作的(一个或多个)操作数和/或(一个或多个)其他数据字段(例如,掩码)。一些指令格式通过指令模板(或子格式)的定义而被进一步分解。例如,具有给定指令格式的指令模板可以被定义为具有指令格式的字段的不同子集(所包括的字段通常以相同的次序,但是至少一些具有不同的位方位,因为所包括的字段较少)和/或被定义为具有被不同地解释的给定字段。因此,ISA的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论