使用simd寄存器的小矩阵有效乘法的制作方法

文档序号:6375111阅读:267来源:国知局
专利名称:使用simd寄存器的小矩阵有效乘法的制作方法
技术领域
本发明涉及矩阵运算。更具体地说,本发明提供一种使用SIMD寄存器的矩阵的有效乘法的例子。
背景技术
传统m×n矩阵的运算处理是一种公用数据处理任务。m×n矩阵由m行和n列组成。被乘数矩阵c的维数是n×m,而乘数矩阵a是m×p。b的合成维数是n×p。b中的数值是使用关系式bij=Σkmcik*akj,]]>根据c的列中的数值和a的列中的数值的乘积和计算的;其中第一下标指的是行而第二下标指的是列。因此,根据c的行i和a的列的内积计算行i和列j中的b的元素的数值。乘积的总数为m*n*p并且加法的总数为(m-1)*n*p。
对于最佳结果而言,矩阵乘法设备已用于利用最少量的指令来执行乘法、加法和数据排序步骤。因为c是系数矩阵而a是数据矩阵,所以已研发出利用预存储c的元素的能力的各种技术,其适于有效实施矩阵乘法。但是,这种存储元素的灵活性对于矩阵a中的数据无效。a中的数据一般是以不为任何数据处理算法所知的逻辑顺序来存储的。
矩阵乘法用于像坐标和色彩转换、成像算法选择这样的应用和众多科学计算任务。矩阵乘法是一种计算集中操作,其可以借助于微处理器的单指令、多数据(SIMD)寄存器来执行,该微处理器支持进行SIMD矩阵乘法,其通过使用SIMD指令安排数据并根据由矩阵乘法等式指示的计算顺序来执行矩阵乘法bij=Σkmcik*akj]]>其中b(x)=c(x)*a(x)相应于
结果矩阵b的元素是根据被乘数矩阵c的行和乘数矩阵a的列的内积(点积)计算出来的。b的第一元素是b00=(c00*a00)+(c01*a10)+(c02*a20)+(c03*a30)其是c的第一行和a的第一列的乘积和。
接着是b01=(c00*a01)+(c01*a11)+(c02*a21)+(c03*a31)其是c的第一行和a的第二列的乘积和。继续进行计算直到全部得出第一行的结果。使用c的下一行计算b的下一行,以下式开始b10=(c10*a00)+(c11*a10)+(c12*a20)+(c13*a30)对于适当的变化(XOR而不是加法)而言,可将相同的模式用于模乘法和常规乘法。
使用SIMD指令的矩阵乘法的常规实施将乘法矩阵a的元素按它们存储在存储器中的顺序存储在SIMD寄存器中,并且将被乘数矩阵c的元素按行序存储在SIMD寄存器中,重复行直到c中列的数目。a的元素是按它们存储在存储器中的顺序存储在寄存器中的。例如,在c中的第一行的4列矩阵元素中被重复4次,这是因为c有4列。如果c的规模小于SIMD寄存器的规模,那么也可以将c的其他行的元素存储在SIMD寄存器中。如果c的规模大于SIMD寄存器的规模,则将需要附加的寄存器来存储其他行的数据。
使用存储在SIMD寄存器的数据的矩阵乘法的结果以c00*a00,c01*a10,...c03*a33开始将c中的元素和a中的元素相乘。接着,必须计算出在相同寄存器中彼此相邻的每行的这些乘积的和。如果使用了乘法累加(MAC)指令,则在乘法计算时计算乘积的某些和。一般而言,先计算b00,然后计算b01。之后,将矩阵c的下一行载入具有c的数值的寄存器,以便计算矩阵b的下一行的元素。
虽然准确,但是在操作中可以要求对模乘积进行有效的数据排序,以致它们可以计算b的单元(例如,通过在伽罗瓦域算术运算中提供加法运算的XOR)。此外,如果结果不适合在一个寄存器中,则可以在存储它们之前,必须在这些寄存器之间交换结果。上述两个问题导致了严重的计算开销,影响了矩阵乘法处理的速度。


根据以下给出的详细说明和本发明实施方式附图,将更充分地理解本发明,但是这仅用于说明和理解,而不应将此看作是对本发明的限制。
图1示意地说明支持SIMD寄存器的计算系统;图2是一种为有效矩阵乘法重排序数据的步骤;图3说明一般4×4模矩阵乘法;图4说明基于乘法的寄存器的数据重排序;图5说明根据图4重排序之后的寄存器;图6说明根据图4和图5重排序之后的矩阵乘法;图7说明其中被乘数矩阵c的对角线上的元素的数量不等于乘法矩阵的列中的元素数量的模矩阵乘法;图8说明基于寄存器的数据重排序的乘法;图9说明根据图7和图8重排序之后的矩阵乘法;图10说明其中被乘数矩阵c对角线小于使用2×3列c和3×4矩阵的乘数矩阵a的模矩阵乘法。
图11说明基于寄存器的数据重排序的乘法;图12说明根据图10和图11的重排序之后的矩阵乘法;图13说明规则矩阵的模矩阵乘法;图14说明基于寄存器的数据重排序的乘法;以及图15说明根据图13和图14的重排序之后的矩阵乘法。
具体实施例方式
图1大致地说明计算系统10,其具有处理器12和存储系统13(可以为任意的可访问存储器,包括外部高速缓冲存储器、外部RAM,和/或部分位于处理器内部的存储器),用于执行可以作为计算机程序产品以软件形式外部提供的、并存储在数据存储单元18内的指令。
计算系统10的处理器12还支持内存储寄存器14,包括单指令多数据(SIMD)寄存器16。寄存器14并不限于特定类型的存储器电路。更确切地说,本实施方式的寄存器需要存储并提供数据,以及执行在此所述功能的能力。在一个实施方式中,寄存器14包括多媒体寄存器,例如用于存储多媒体信息的SIMD寄存器。而在一个实施方式中,多媒体寄存器每一个都存储高达128位的压缩数据(packeddata)。多媒体寄存器可专门用于多媒体寄存器或用于存储多媒体信息及其他信息的寄存器。在一个实施方式中,多媒体寄存器在执行多媒体操作时存储多媒体数据,当执行浮点操作时存储浮点数据。
本发明的计算机系统10可以包括一个或多个I/O(输入/输出)装置15,包括像监视器这样的显示装置。I/O装置还可以包括输入装置,诸如键盘和像鼠标、轨迹球或轨迹板这样的光标控制器。此外,I/O装置还可以包括网络连接器使得计算机系统10成为局域网(LAN)或广域网(WAN)的一部分,I/O装置15,即用于声音记录和/或回放的装置,诸如与用于语音识别的录制话音输入的麦克风耦合的音频数字化器。I/O装置15还可以包括可用于捕获视频图像的视频数字化装置、像打印机这样的硬拷贝装置和CD-ROM装置。
在一个实施方式中,可由数据存储单元18读取的计算机程序产品可以包括机器或计算机可读介质,在该介质上已存储了可用于编程(即定义其操作)计算机(或其他电子设备)的指令,以便根据本发明执行处理。数据存储单元18的计算机可读介质可以包括(但不限于)软盘、光盘、CD、只读存储器(CD-ROM)和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁或光卡、快闪存储器,等等。
因此,计算机可读介质包括适于存储电子指令的任一类型的介质/机器可读介质。此外,还可以将本发明作为计算机程序产品下载。就这点而论,还可以将该程序从远程计算机(例如,服务器)传送到请求计算机(例如,客户端)。可以通过通信链路(例如,调制解调器、网络连接等等)将该程序作为包含在载波或其他传播介质中的数据信号传送。
计算系统10可以是具有适当寄存器结构的处理器的通用计算机,或可以被配置用于特定目的或嵌入式应用。在实施方式中,本发明的方法可包含在目的在于控制计算机系统的操作(尤其是处理器和寄存器的操作)的机器可执行指令中。这些指令可用于使被用指令编程的通用或专用处理器执行本发明的步骤。或者,可由包含执行步骤的硬连线逻辑的特定硬件元件执行本发明的步骤,或者由已编程计算机元件和常规的硬件元件的组合来执行本发明的步骤。
本领域中知识丰富的人应理解用于描述通信、协议、应用、实施、机制等的各项术语和技术。一种这样的技术是实现关于算法或数学表达式的技术的描述。也就是说,当该技术例如可以计算机上的执行代码来实施的时候,以公式、算法或数学表达式可更适当和简洁地表达和传达技术的表示。
因此,本领域熟练的技术人员将把指示A+B=C的块看作加性函数,以硬件和/或软件形式实施的加性函数将采用两个输入端(A和B)并产生总和输出(C)。因此,通过利用公式、算法或数学表达式来说明,应被理解为在至少硬件和/或软件中具有物理实施方式(诸如本发明的技术中的计算机系统可以作为实施方式实践和实施)。
图2显示根据本发明的诸如图3中示出的矩阵乘法的过程的一个实施方式。如图2所示,首先,通过重排序并载入用于有效矩阵乘法的存储器(在这个例子中,标为框21的寄存器)来组织数据。被乘数矩阵c的每个对角线被载入不同的寄存器中。通过使用位于邻近右列的矩阵的拷贝,具有非底行的最右列中的元素的这些对角线延伸至下一行中的元素。对角线的下一元素位于下一行。在寄存器中复制对角线,复制的次数等于乘数矩阵a中列的数目。对角线中元素的数目等于c中列的数目。以列顺序将乘数矩阵a的数据载入寄存器中,将顺序数据存储在存储器中。在每个乘法和加法之间,将寄存器中的每个列中的元素移动一个元素(框22)。一列中最后的元素被移动或旋转至该列的前面。被乘数c矩阵的对角线乘以乘数a矩阵的列(在长度上可能已被调整)(框23),并且它们的乘积与结果矩阵b的列的乘积之和相加(框24)。
如果一列中元素的数目不同于c的列的数目,那么将SIMD寄存器中a的列中元素的数目调整为与c的列中的元素的数目相等。一种确定要选择乘数矩阵a的哪一个元素的方式是首先将乘数矩阵a的拷贝堆叠在彼此之上,以致列对齐并且拷贝的首行低于底行和其他拷贝。这有效地扩展了每个列。由于从扩展的列取出的元素数目等于被乘数矩阵c的对角线中元素的数目。在每一乘法和加法操作之后,通过下移扩展列元素,为下一乘法和加法操作选择元素。如果被乘数对角线的长度大于乘数列的长度,则将从列中选择相等的值,而如果被乘数对角线短于乘数列的长度,则不将从列中选择任何值。
虽然上述例子利用了处理器内部寄存器,但是应理解,并不总是需要载入处理器内部寄存器来执行SIMD操作。可以将用于乘法或其他的操作数存储在存储器中,而不是首先将它们载入寄存器中。像RISC体系结构这样的某些结构首先载入寄存器,但是英特尔结构可以在存储器中具有操作数。使用寄存器和存储器操作数的比较为pmaddwd xmm0,xmm1和pmaddwd xmm0,[eax]如果存储在寄存器的地址eax中的存储数据与xmm1中的数据相同,那么它们在xmm0内产生相同的结果。如果代码在寄存器之外运行并且存储器访问较快,那么期望使用存储器操作数。
图3示出根据图2大致描述的过程的模乘法30。在这个例子中,模乘法是伽罗瓦域算法,其中XOR用于在没有进位(例如,没有进位的二进制加法,如1+1=0,0+0=0,0+1=1和1+0=1,并且具有通常通过XOR所计算的结果)的情况下相加数值。如图3所示,确定常规方矩阵的乘法30b(x)=c(x)a(x)。图4说明用于图3所示的矩阵乘法的寄存器数据载入模式40的确定。如图4的寄存器排序示意图40所示,用于下一步骤的寄存器中的数据为黑体。实线表示矩阵被复制的边界。在第一步骤中,a的列与c的对角线相乘。在第二步骤中,a的列被移动,并且与c的下一对角线相乘,如箭头所示。
图5说明由图4所示的移动所导致的寄存器中数据的顺序50。如图5中的时间步骤(A)所示,寄存器容纳c的主对角线,并且以其存储在存储器中的顺序保持a矩阵的数据。在图5的时间步骤(B)中,寄存器容纳移动后的a的对角线和列。列的移动是使用字节混洗(shuffle)操作来旋转元素而实施的。请注意,a的列可以上移,并且c中的选择对角线可以向左选择,而不是向右。
图6进一步说明用于相乘4×4矩阵a和c的操作60。如有关图4和图5所述的那样排序每个时间步骤的数据。在每个时间步骤C、D、E和F,计算a和c的模积。使用XOR将乘积加到其他步骤的乘积上。
以下伪代码片断提供矩阵乘法的示例实施(1)LOAD R3,MEMORY;c矩阵对角线1(2)LOAD R4,MEMORY;c矩阵对角线2(3)LOAD R5,MEMORY;c矩阵对角线3(4)LOAD R6,MEMORY;c矩阵对角线4(5)LOAD R7,MEMORY;数据混洗模式(6)LOAD R0,MEMORY;从存储器载入a数据(第一模式)(7)MOVE R1,R0;复制第一数据模式(8)MODMUL R0,R3 ;a数据乘以对角线1(主对角线)(9)SHUFFLE R1,R7 ;产生旋转列的第二a数据模式(10)MOVE R2,R1 ;复制第二a数据模式(11)MODMUL R1,R4 ;第二a数据模式乘以对角线2(12)XOR R0,R1;第一模式和第二模式相加(13)SHUFFLE R2,R7;产生旋转列的第三a数据模式(14)MOVE R1,R2 ;复制第三数据模式(15)MODMUL R2,R5 ;第三a数据模式乘以对角线3(16)XOR R0,R2;相加第三模式(17)SHUFFLE R1,R7;产生旋转列的第四a数据模式(18)MODMUL R1,R6 ;第四数据模式乘以对角线4(19)XOR R0,R1;相加第四模式(20)STORE MEMORY,R0 ;存储输出矩阵指令9-12表示这个方法的基本操作。在指令9中旋转乘数a矩阵的列。由于结果被指令11的乘法覆盖,因此在指令10中复制该结果,并且乘积加上指令12中的乘积的和。
非规则矩阵也可以实施本发明的处理过程的实施方式。例如,考虑图7的矩阵乘法70,其中被乘数矩阵c的对角线中元素的数目不等于乘数矩阵a的列的数目,并且被乘数矩阵c的对角线要大于乘数矩阵a的列。在这个例子中,模乘法为3×2的c矩阵和2×4的矩阵a。对于这个例子,用于在SIMD寄存器中选择和排序数据的方法在图8中说明。c的第一对角线是c00,c11,c20。这个对角线和a的已扩展列的前3个值相乘。由于a的列长度仅是2,因此如图8所示的顺序80那样,矩阵彼此互相堆叠以便有效地扩展列的长度。另一种方法是一旦检查到了列的末尾,绕回或旋转回第一个值。图9示出c的第一对角线和a的扩展列的值的数据排列90。请注意,右边a的前3个值是a00,a10,a00,因此重复a00。c的下一对角线是c01,c10,c21,而a的下一列是a10,a00,a10,这是通过下移如图8所示的每个扩展列中的一个元素而选择的。图9进一步说明了矩阵a和c相乘的操作。每个时间步骤的数据顺序90如对图7和8有关的描述。在每个时间步骤,计算a和c的模乘积。使用XOR将乘积加至其他步骤的乘积上。
图10示出使用2×3列的c和3×4矩阵a,被乘数矩阵c对角线少于乘数矩阵a的模乘法100。如图11所示,顺序选择110设置c的第一对角线为c00和c11。这个对角线乘以a的扩展列的最初的2个值a00和a10。a的列长度为3,但只选择了a列的2个值。图12示出寄存器中的值的数据排列120。由于矩阵c具有三个对角线,因此有三对寄存器,其具有相乘在一起的矩阵a和c的值。只有第一列a00和a10的最初的2个值存储在第一寄存器中。在下一对寄存器中,c的对角线是c01和c12,a的下一个值是通过向下移动来选择。例如,从第一列中的值是a10和a20。三对寄存器容纳第三对角线和下移a的列的下一值。在这种情况下,第一列的值为a20和a00。
应理解,上述图3-12描述了不需要乘法/累加(MAC)指令的算术操作。作为替代,描述了使用模乘法的伽罗瓦域算法和用于加法的XOR。如果一行被乘数和一列乘数的元素的乘积和由相同于原矩阵元素的数据类型表示,那么常规算法和伽罗瓦域算法之间的差异仅存在于用于加法和乘法的方法。所有模式保持相同。如果结果所需的数据类型在大小上大于原始数据,那么在进行矩阵乘法之前增大矩阵元素的数据类型-大小通常加倍。在这种情况下,将不变的被乘数矩阵存为较大的数据类型。例如字节长度的因数被存为16位整数。在图3-12所示的计算之前,改变乘数矩阵的数据类型。SIMD拆开操作通常用于改变数据类型。这将增加所需寄存器的数量,但是相对于伽罗瓦域或传统算法而言,图3-图12所描述的操作是不变的。
如果MAC指令有效,那么可以如以下图12-15所述的那样处理矩阵乘法。当MAC指令可用于任何形式的算法时(包括伽罗瓦域算法),在传统固定点算法的情况下,MAC计算2个乘积,并相加这些乘积,而且一般将结果写为原始被乘数和乘数的长度的2倍(典型的是16位字的字节和双32位字的16位字)。在伽罗瓦域算法的情况下,MAC使用模乘法计算2个乘积,并使用XOR操作相加这些乘积,而且写相同数据类型的结果。在伽罗瓦域算法中,表示和或乘积所需要的位的数目与表示原始数据所需的位的数目相同。在所有SIMD指令集(即Inter结构指令集中的madd)中会发现常规算法的MAC。因此,图13示出具有规则矩阵并使用了适当的MAC指令的乘法130。如图14所示,排序140以黑体字表示寄存器中的用于连续步骤的数据。实线表示复制矩阵的边界。请注意,规则矩阵乘法元素是两个值并且每次移动也是两个值。在规则乘法的情况下,c矩阵对角线中的值的数目是图18所示的矩阵列(在这个例子中排序了8个值)的2倍。如图15a和15b的寄存器排序150所示的那样,复制每个a矩阵列。因此,a矩阵的最初的两个列保持在一个寄存器中,而随后的两个保持在另一个寄存器中。除了在规则情况下,元素为两个值之外,对规则矩阵乘法的数据排序的方法与模乘法中的数据排序相同。下一步骤的数据顺序的移动为两个值,并且复制乘数列。将相乘-相加操作应用于a和c中相邻的值上。这个操作相乘a和c中的值,并且相加相邻的结果。将相乘-相加结果存储在两倍于初始数据的长度的空间内。例如,在步骤(1)中,madd操作计算a00和c00以及a10和c01的乘积,并且将这两个乘积相加。类似地,在步骤(2)中,madd操作计算a20和c02以及a30和c03的乘积,并将这个两个乘积相加。将madd操作的结果相加,以便给处矩阵方法的结果b00。
使用16位字和128位寄存器的规则矩阵乘法的伪代码如下所示(1)LOAD R5,MEMEORY ;系数对角线1(2)LOAD R6,MEMEORY ;系数对角线2(3)LOAD R7,MEMEORY ;数据混洗模式(4)LOAD R0,MEMEORY ;从存储器中载入数据(第一模式)(5)MOVE R2,R0 ;复制第一数据模式(6)UNPACKLDQ R0,R0 ;复制数据列1和2(7)MOVE R1,R2 ;复制列1和2
(8)MADD R0,R5 ;乘法累加1和2(9)SHUFFLE R1,R7 ;产生第二数据模式(10)MADD R1,R6 ;乘法累加模式2列1和2(11)ADDW R0,R1 ;结果列1和2(12)STORE MEMORY,R0;存储结果列1和2(13)UNPACKHDQ R2,R2;复制列3和4(14)MOVE R3,R2 ;拷贝列3和4(15)MADD R2,R5 ;乘法累加列3和4(16)SHUFFLE R3,R7 ;产生第二数据模式(17)MADD R3,R6 ;乘法累加模式2列3和4(18)ADDW R2,R3 ;结果列3和4(19)STORE MEMORY,R2;存储结果列3和4每个结果都通过两次相乘-相加操作,一次变换和一次相乘-相加结果的相加产生的。结果是16位的,因此16个结果需要两个128位的寄存器。
虽然本发明尤其适用于使用SIMD指令实施的字节数据的矩阵的乘法,本发明并不限于这种乘法。可以使用较大的数据类型,只要求减少可存储在寄存器中的元素的数目,并且较大的矩阵具有更多的必须要存储的元素。如果被乘数矩阵c的对角线,或者乘数矩阵的列不适合SIMD寄存器SIMD寄存器,则可将它们延伸至附加的寄存器。在使用较大寄存器的一些情况下,列中数据的旋转需要寄存器之间的交换元素。
应理解,在本说明书中所提到的“具体实实例”,“一个实施方式”,“某些实施方式”或者“其它实施方式”,意指与这些实施方式有关地描述的特定特征、结构或特性包括在本发明的至少一些实施方式中,但未必包括在所有实施方式中。各种外观“实施方式”,“一个实施方式”,“某些实施方式”没必要全指相同的实施方式。
如果说明书声明了部件、特征、结构或特性,包括“可以”,“可能”,或“能够”,则不要求包括特定部件、特征、结构或特性。如果说明书或权利要求书提到“a”或“an”,其并不意味着仅有一个元件。如果说明书或权利要求书提供“附加”元件,其不排除存在一个以上的附加元件。
已受益于这个公开内容的本领域熟练的技术人员将理解在本发明的范围内可以根据上述说明和附图做出各种变化。因此,下列权利要求,包括对它的任何修正,定义本发明的范围。
权利要求
1.一种矩阵乘法方法,包括将被乘数矩阵c的每个对角线载入处理器可访问存储器,将乘数矩阵a按列的顺序载入处理器可访问存储器,通过移动一个元素来移动寄存器中乘数矩阵a的每列中的元素,一列的最后一个元素移动至该列的开头,并将被乘数c矩阵的对角线与乘数a矩阵的列相乘,它们的乘积与结果矩阵的列的乘积之和相加。
2.根据权利要求1所述的方法,其中处理器可访问寄存器是SIMD寄存器。
3.根据权利要求2所述的方法,还包括将对角线载入处理器的多个SIMD寄存器。
4.根据权利要求1所述的方法,其中通过将乘数矩阵a的拷贝堆叠在彼此之上,在与被乘数c矩阵的对角线相乘之前,调整乘数a矩阵的长度,以致使得列对齐并且拷贝的首行低于底行以及其他任何拷贝以延伸每个列。
5.根据权利要求1所述的方法,其中被乘数矩阵c对角线短于乘数矩阵a的列。
6.根据权利要求1所述的方法,其中被乘数矩阵c对角线长于乘数矩阵a的列。
7.根据权利要求1所述的方法,其中移动元素还包括将a的列与c的对角线相乘;以及以预定的顺序移动并相乘a的列和c的下一对角线。
8.根据权利要求1所述的方法,其中移动元素还包括使用字节混洗操作来旋转元素。
9.根据权利要求1所述的方法,其中每个元素是字节。
10.根据权利要求1所述的方法,其中乘以对角线还包括应用MAC操作。
11.一种产品,包括存储介质,在其上存储有指令,当机器执行指令时导致将被乘数矩阵c的每个对角线载入处理器可访问存储器,将乘数矩阵a按列的顺序载入处理器可访问存储器,通过移动一个元素来移动寄存器中乘数矩阵a的每列中的元素,一列的最后一个元素移动至该列的开头,以及将被乘数c矩阵的对角线与乘数a矩阵的列相乘,它们的乘积与结果矩阵的列的乘积之和相加。
12.权利要求11的包括其上存储有指令的存储介质的产品,其中处理器可访问存储器是SIMD寄存器。
13.权利要求11的包括其上存储有指令的存储介质的产品,其中将对角线载入处理器的多个SIMD寄存器。
14.权利要求11的包括其上存储有指令的存储介质的产品,其中通过将乘数矩阵a的拷贝堆叠在彼此之上,在与被乘数c矩阵的对角线相乘之前,调整乘数a矩阵的长度,以致使列对齐并且拷贝的首行低于底行以及其他任何拷贝以延伸每个列,。
15.权利要求11的包括其上存储有指令的存储介质的产品,其中被乘数矩阵c对角线短于乘数矩阵a的列。
16.权利要求11的包括其上存储有指令的存储介质的产品,其中被乘数矩阵c对角线长于乘数矩阵a的列。
17.权利要求11的包括其上存储有指令的存储介质的产品,其中移动乘法和加法元素还包括将a的列与c的对角线相乘;以及按预定顺序移动并将a的列与c的下一对角线相乘。
18.权利要求11的包括其上存储有指令的存储介质的产品,其中移动乘法和加法元素还包括使用字节混洗操作旋转元素。
19.权利要求11的包括其上存储有指令的存储介质的产品,其中乘以对角线还包括应用MAC操作。
20.权利要求11的包括其上存储有指令的存储介质的产品,其中每个元素是字节。
21.一种系统,包括处理器,具有寄存器,该寄存器将被乘数矩阵c的每个对角线载入处理器可访问存储器,并按列的顺序将乘数矩阵a载入处理器可访问存储器,以及控制逻辑,通过移动一个元素来移动寄存器中乘数矩阵a的每列中的乘法和加法元素,一列的最后一个元素移动至该列的开头,并将被乘数c矩阵的对角线与乘数a矩阵的列相乘,它们的乘积与结果矩阵的列的乘积之和相加。
22.根据权利要求21所述的系统,其中处理器可访问存储器是SIMD寄存器。
23.根据权利要求22所述的系统,还包括将对角线载入处理器的多个SIMD寄存器中。
24.根据权利要求21所述的系统,其中通过将乘数矩阵a的拷贝堆叠在彼此之上,在与被乘数c矩阵的对角线相乘之前,调整乘数a矩阵的长度,以致使得列对齐并且拷贝的首行低于底行以及其他任何拷贝以延伸每个列。
25.根据权利要求21所述的系统,其中被乘数矩阵c对角线短于乘数矩阵a的列。
26.根据权利要求21所述的系统,其中被乘数矩阵c对角线长于乘数矩阵a的列。
27.根据权利要求21所述的系统,其中移动乘法和加法元素的控制逻辑还包括将a的列与c的对角线相乘;以及按预定的顺序移动并将a的列与c的下一对角线相乘。
28.根据权利要求21所述的系统,其中移动乘法和加法元素的控制逻辑还包括使用字节混洗操作旋转元素。
29.根据权利要求21所述的系统,其中每个元素是字节。
30.根据权利要求21所述的系统,其中乘以对角线还包括应用MAC操作。
全文摘要
公开了一种减少在SIMD处理器上的计算时间的矩阵乘法方法的例子。矩阵乘法需要将被乘数矩阵c的对角线载入处理器的不同寄存器中,并且需要将乘数矩阵a载入至少一个在纵向按序排列的寄存器中。通过移动一个元素,有选择地将寄存器中的乘数矩阵a的每列中的乘法和加法元素同已移动的一列中的上个元素一起移动至该列的前端。被乘数c矩阵的对角线乘以乘数a矩阵的列,它们的结果被加到结果矩阵的列的结果和上。
文档编号G06F7/32GK1774709SQ200380107095
公开日2006年5月17日 申请日期2003年11月21日 优先权日2002年12月20日
发明者W·小梅西 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1