CN102375721A - 一种矩阵乘法运算方法、图形处理器和电子设备 - Google Patents
一种矩阵乘法运算方法、图形处理器和电子设备 Download PDFInfo
- Publication number
- CN102375721A CN102375721A CN2010102612377A CN201010261237A CN102375721A CN 102375721 A CN102375721 A CN 102375721A CN 2010102612377 A CN2010102612377 A CN 2010102612377A CN 201010261237 A CN201010261237 A CN 201010261237A CN 102375721 A CN102375721 A CN 102375721A
- Authority
- CN
- China
- Prior art keywords
- matrix
- unit
- matrix unit
- selection area
- multiplication
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Abstract
本发明提供一种矩阵乘法运算方法、图形处理器和电子设备,在第一矩阵和第二矩阵之间执行矩阵乘法的过程中:第一重运算,将第一矩阵的N个矩阵单元,与第二矩阵的N个矩阵单元,依次进行N次相乘;第二重运算,该寄存结果矩阵单元通过累加相乘结果矩阵单元Cj得到;当寄存结果矩阵单元累加了第一预定次数的相乘结果矩阵单元Cj时,将该寄存结果矩阵单元作为中间结果矩阵单元;其中,将所述中间结果矩阵单元进行累加得到所述第一重运算的最终结果矩阵单元。应用本发明所提供的技术,由于在若干次结束第二重运算后临时累加结果都清零,保证了临时累加结果与矩阵元素的小数位数相差很小,保留了更多的精度。
Description
技术领域
本发明涉及图形技术,特别是指一种矩阵乘法运算方法、图形处理器和电子设备。
背景技术
图形处理器(GPU,Graphic Processing Unit)具有远多于CPU的运算单元,因此在高性能计算领域得到了越来越多的应用。矩阵乘法是数值计算中最重要的操作之一,从某种意义上说,它是数值计算操作的一个共同基础,因此,研究如何实现高效精确的GPU矩阵乘法是研究GPU通用计算的一个重要问题。
由于GPU内部的大量运算都是单精度浮点运算,当矩阵规模增大时累积误差增加很快。经测试,矩阵规模超过5000后,GPU计算结果与CPU计算结果之间的误差已经超过10-6。
发明人发现现有技术存在如下问题:在应用GPU对矩阵乘法进行运算的过程中,由于没有对矩阵乘法的中间结果所产生的误差进行处理,导致最终的GPU计算结果误差过大,影响了运算的准确性。
发明内容
本发明要解决的技术问题是,现有技术中由于没有对矩阵乘法的中间结果所产生的误差进行处理,导致最终的GPU计算结果误差过大,影响了运算的准确性的缺陷。
为解决上述技术问题,本发明的实施例提供一种矩阵乘法运算方法,应用于图形处理器,存在第一矩阵和第二矩阵;所述方法包括:在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程中,包含两重运算:第一重运算,将所述第一矩阵的第一选定区域中的N个矩阵单元,与所述第二矩阵的第二选定区域中的N个矩阵单元,根据矩阵乘法规则依次进行N次相乘;第二重运算,在每一次矩阵单元相乘中,采用寄存器存放寄存结果矩阵单元Dmatrix,所述寄存结果矩阵单元Dmatrix通过累加相乘结果矩阵单元Cj得到,所述相乘结果矩阵单元Cj为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元;当采用寄存结果矩阵单元Dmatrix累加所述相乘结果矩阵单元Cj的次数达到第一预定次数时,将累加了所述相乘结果矩阵单元Cj的所述第一预定次数的寄存结果矩阵单元Dmatrix作为中间结果矩阵单元C,且此时对寄存器清零;其中,j表示所述N次相乘中的第j次相乘,且大于等于1小于等于N;其中,将所述中间结果矩阵单元C进行累加得到所述第一重运算的最终结果矩阵单元。
上述的方法中,所述第一矩阵和所述第二矩阵均为行数超过16行,且列数超过16列的矩阵;所述矩阵单元为16行16列的方阵。
上述的方法中,所述第一选定区域为所述第一矩阵中由多个矩阵单元占据的区域,且各个所述矩阵单元位于同一行;所述第二选定区域为所述第二矩阵中由多个矩阵单元占据的区域,且各个所述矩阵单元位于同一列。
上述的方法中,所述第一预定次数大于1,且小于等于N;所述第一预定次数能够通过设置进行改变。
上述的方法中,还包括:在第一重运算过程中,设置两个矩阵单元指针:矩阵单元指针A和矩阵单元指针B;当判定所述第二选定区域中仍然有未参加矩阵乘法的矩阵单元时,在所述第一选定区域中,矩阵单元指针A指向下一个矩阵单元;在所述第二选定区域中,矩阵单元指针B指向下一个矩阵单元。
一种实现矩阵乘法的图形处理器,包括:存储单元,用于存放两个矩阵第一矩阵和第二矩阵;矩阵乘法逻辑单元,用于在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程中,包含两重运算:矩阵乘法第一执行单元,用于实现第一重运算,将所述第一矩阵的第一选定区域中的N个矩阵单元,与所述第二矩阵的第二选定区域中的N个矩阵单元,根据矩阵乘法规则依次进行N次相乘;矩阵乘法第二执行单元,用于实现第二重运算,在每一次矩阵单元相乘中,采用寄存器存放寄存结果矩阵单元Dmatrix,所述寄存结果矩阵单元Dmatrix通过累加相乘结果矩阵单元Cj得到,所述相乘结果矩阵单元Cj为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元;矩阵乘法第一执行单元,还用于当采用所述寄存结果矩阵单元Dmatrix累加所述相乘结果矩阵单元Cj的次数达到第一预定次数时,将累加了所述相乘结果矩阵单元Cj的所述第一预定次数的寄存结果矩阵单元Dmatrix作为中间结果矩阵单元C,且此时对寄存器清零;其中,j表示所述N次相乘中的第j次相乘,且大于等于1小于等于N;其中,将所述中间结果矩阵单元C进行累加得到所述第一重运算的最终结果矩阵单元。
所述的图形处理器中,所述第一矩阵和所述第二矩阵均为行数超过16行,且列数超过16列的矩阵;矩阵单元为16行16列的方阵;所述第一选定区域为所述第一矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一行;所述第二选定区域为所述第二矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一列。
所述的图形处理器中,所述第一预定次数大于1,且小于等于N;所述第一预定次数能够通过设置进行改变。
一种实现矩阵乘法的电子设备,包含一个图形处理器,所述图形处理器包括:存储单元,用于存放两个矩阵第一矩阵和第二矩阵;矩阵乘法逻辑单元,用于在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程中,包含两重运算:矩阵乘法第一执行单元,用于实现第一重运算,将所述第一矩阵的第一选定区域中的N个矩阵单元,与所述第二矩阵的第二选定区域中的N个矩阵单元,根据矩阵乘法规则依次进行N次相乘;矩阵乘法第二执行单元,用于实现第二重运算,在每一次矩阵单元相乘中,采用寄存器存放寄存结果矩阵单元Dmatrix,所述寄存结果矩阵单元Dmatrix通过累加相乘结果矩阵单元Cj得到,所述相乘结果矩阵单元Cj为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元;矩阵乘法第一执行单元,还用于当采用所述寄存结果矩阵单元Dmatrix累加所述相乘结果矩阵单元Cj的次数达到第一预定次数时,将累加了所述相乘结果矩阵单元Cj的所述第一预定次数的寄存结果矩阵单元Dmatrix作为中间结果矩阵单元C,且此时对寄存器清零;其中,j表示所述N次相乘中的第j次相乘,且大于等于1小于等于N;其中,将所述中间结果矩阵单元C进行累加得到所述第一重运算的最终结果矩阵单元。
所述的电子设备中,还包括:矩阵单元设定单元,用于设定矩阵单元为16行16列的方阵;矩阵乘法规划单元,用于在所述第一矩阵中选定所述第一选定区域,在所述第二矩阵中选定所述第二选定区域;所述第一矩阵和所述第二矩阵均为行数超过16行,且列数超过16列的矩阵;所述第一选定区域为所述第一矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一行;所述第二选定区域为所述第二矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一列。
本发明的上述技术方案的有益效果如下:应用本发明所提供的技术,由于在若干次结束最内层循环-即第二重运算后临时累加结果都清零,因此保证了临时累加结果与矩阵元素的小数位数不致相差过大,从而为计算结果保留了更多的精度。提高了GPU单精度矩阵乘法运算的精度,经测试当矩阵规模达到10000时,与CPU计算结果的误差仍然在10-7数量级。同时保持了原算法的高性能,经比较测试,性能损失在1%以内。
附图说明
图1为本发明实施例矩阵乘法的实现原理示意图;
图2为本发明实施例矩阵单元之间相乘的原理示意图;
图3为本发明实施例大规模矩阵之间实现矩阵乘法的原理示意图;
图4为本发明实施例两个4阶矩阵之间实现矩阵乘法的原理示意图一;
图5为本发明实施例两个4阶矩阵之间实现矩阵乘法的原理示意图二;
图6为本发明实施例一种矩阵乘法运算方法流程示意图;
图7为本发明实施例图形处理器的结构示意图。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
为帮助技术人员理解本发明实施例所提供的技术方案,以下描述了矩阵乘法的实现原理,如图1所示,存在两个矩阵:第一矩阵(S*T)、第二矩阵(T*S);第一矩阵与第二矩阵相乘会得到一个最终结果矩阵(S*S)。根据公知的矩阵乘法运算规则:第一矩阵第1行的各个元素与第二矩阵第1列的各个元素分别对应相乘,会得到最终结果矩阵的第一行第一列的元素。
在矩阵乘法中,经常会遇到大矩阵甚至超大矩阵,例如雷达采集到的数据会以超大矩阵的方式进行存放和处理,此时,需要将超大矩阵分割为若干个矩阵单元,习惯上为满足计算机硬件的需要,矩阵单元是16*16的方阵,但是并不表示矩阵单元必须是16*16的方阵。
如图2所示,实现两个超大矩阵之间的矩阵乘法应当遵循如下计算原理:
(1),不失一般性,本申请中,元素是标量,设定a[1:16],c[1:16]为16元素的矢量;其中,a指向矩阵单元A的一个行,b指向矩阵单元B的一个行;c指向矩阵单元C的一个行。
一个矩阵单元是16*16的方阵,因此能存放256个元素;矩阵单元A与矩阵单元B相乘,能够得到矩阵单元C。
(2),在循环过程中,将当前两个矩阵单元-矩阵单元A与矩阵单元B相乘;
设置一个运算边界(local barrier)。
(3),在一个16次的循环过程中;
(4),将a指向矩阵单元A的当前行的下一行;
(5),计算矩阵单元C的某一行c的各个元素分别对应的数值。
其中,一行有16个元素,在计算每一个元素的过程中,a与b相乘,其中的元素进行了16次乘法,以及16次加法。
对应(3),由于矩阵单元C有16行,每一行对应一个矢量c,因此实际上存在16个矢量c需要通过计算得到;如本步骤所记载的方式,在16次循环中计算出每一个矢量c的具体值。
(6),对应(2)中所设置的运算边界,关闭该运算边界。
这是因为在运算边界内部的计算通常不允许被打断,即不允许GPU在这一段时间内出现中断,以避免出现不可控制的错误。
并且在运算边界内部,计算出了一个完整的矩阵单元C的所有元素的数值。
(7),由于已知矩阵单元A、矩阵单元B均是大的第一矩阵、第二矩阵中的一个矩阵单元,矩阵单元C则是第一矩阵、第二矩阵对应的结果矩阵中的一个矩阵单元,因此在计算出C的全部元素之后,将A和B分别指向第一矩阵、第二矩阵中的下一个矩阵单元。
(8),一直到B越界,则第一矩阵、第二矩阵之间的矩阵乘法运算结束。
上述方法中,由于GPU内部的大量运算都是单精度浮点运算,当矩阵规模增大的时候累积误差增加很快。经测试,矩阵规模超过5000后,与CPU计算结果的误差已经超过10-6。
为帮助技术人员理解本发明的技术思想,如图3所示,提供了在大规模第一矩阵和大规模第二矩阵之间进行矩阵乘法的过程中,如何运用矩阵单元A、矩阵单元B,以及矩阵单元C实现大规模矩阵之间的乘法运算的技术。其中,矩阵单元指针A指向一个矩阵单元,矩阵单元指针B指向一个矩阵单元;由于矩阵单元指针A与矩阵单元A实质上是指同一个矩阵单元,两者之间的区别仅在编写代码的过程中有实际意义,因此为描述方便,不再区分两者之间的差异,同理,由于矩阵单元指针B与矩阵单元B实际上是指同一个矩阵单元,因此为描述方便,也不再区分两者之间的差异。
图3中的每一个方格表示存放了一个矩阵单元,在第一矩阵中,粗线标识的区域存放了S个矩阵单元,不失一般性,此处S具体为11;第二矩阵中,粗线标识的区域存放了T个矩阵单元,不失一般性,此处T具体为17,因此相乘后得到的结果矩阵中,是一个每一行/每一列均有11个矩阵单元的结果矩阵,换言之,结果矩阵的每一行/每一列均有11*16=176个元素。两个区域中的各个矩阵单元相乘,会得到结果矩阵中粗线标识的区域所存放的各个矩阵单元。其中不失一般性,矩阵单元的规模如前所述,是16*16的方阵。
为描述方便,将第一矩阵中粗线标识的区域中的一个矩阵单元称为矩阵单元A;将第二矩阵中粗线标识的区域中的一个矩阵单元称为矩阵单元B;将结果矩阵中粗线标识的区域中的一个矩阵单元称为矩阵单元C。由于在计算机中,可以以一个矩阵指针指向粗线标识的区域中的一个矩阵单元,因此上述规定是完全无误且确实可行的。
当GPU对粗线标识的区域中的各个矩阵单元进行乘法运算的过程中,根据步骤(1)至步骤(8)中所描述的矩阵单元进行乘法运算的原理,对图3中粗线标识的区域中的各个矩阵单元进行相乘,相乘过程包含了两重运算,其中:
第一重运算,将第一矩阵中粗线标识的第一选定区域中的每一个矩阵单元A,与第二矩阵中粗线标识的第二选定区域中的每一个矩阵单元B,对应相乘后再相加得到相乘结果矩阵单元Cj,根据S为11,T为17可以知道,1=<j<=17,因此会执行17次矩阵单元之间的乘法。
第二重运算,根据步骤(1)至步骤(8)中所描述的矩阵单元进行乘法运算的原理,对当前指向的矩阵单元A、当前指向的矩阵单元B进行相乘是上述17次矩阵单元之间的乘法中的特定的一次,得到相乘结果矩阵单元Cj,不失一般性,令j=1,则得到相乘结果矩阵单元C1。
之后,根据第一重运算,会指向下一个矩阵单元A、下一个矩阵单元B,根据第二重运算得到相乘结果矩阵单元C2,此时在第一重运算中执行累加操作则矩阵单元C=C1+C2。
之后,根据第一重运算,会指向下一个矩阵单元A、下一个矩阵单元B,根据第二重运算得到相乘结果矩阵单元C3,此时执行累加操作则矩阵单元C=C1+C2+C3。
同理可知,最终经过17次累加操作之后,矩阵单元C=C1+C2+C3+.......+Cj+.......+C17,其中,在计算机中,通常是设置了C的原始数值为C=C0,C0为所有元素为0的矩阵单元,因此需要执行17次累加操作而非16次。
可以看出因为当矩阵规模很大时,矩阵单元C的累加过程中,累加结果与矩阵元素的小数位数相差很大,每次进行累加操作时都会引入舍入误差,累积起来造成误差增长过快。
为帮助技术人员更为直观的理解本发明的技术方案和发明思想,且考虑到所描述的超大矩阵难以在规定格式的纸质文件中得到直观的体现,因此如图4所示,以下实施例中,分别以4阶方阵M代替第一矩阵,以4阶方阵N代替第二矩阵。
在如图4和图5所示的具体实施例中,为描述简便且由于矩阵单元的阶数也是能够预先通过设置进行改变的,因此此实施例中的矩阵单元不再是16*16的方阵,而是2*2的方阵,其中,4阶方阵M包括4个矩阵单元,分别是:M11、M12、M21和M22,4阶方阵N包括4个矩阵单元,分别是:N11、N12、N21和N22。
如图5所示,设定方阵M和方阵N的乘积结果矩阵P可表示为上述矩阵单元乘积的线性组合,即:
P11=M11N11+M12N21;
P12=M11N12+M12N22;
P21=M21N11+M22N21;
P22=M21N12+M22N22。
如此,则获取结果矩阵P的计算过程包括:分别对P11、P12、P21和P22进行计算,其中,计算上述各个矩阵的过程各包含两重运算,以P11为例:
第一重运算中,将M11、M12、M21和M22,以及N11、N12、N21和N22对应相乘后再相加,会得到相乘结果矩阵单元Pjj,可以知道,1=<j<=2,因此会执行2次矩阵单元之间的乘法。
会将方阵M和方阵N相乘时得到的M11N11和M12N21相加。其中,M11N11=(m11n11+m12n21)+(m21n12+m22n22);
M12N21=(m13n31+m14n41)+(m23n32+m24n42)。
第二重运算中,分别计算M11N11的第一个元素m11n11+m12n21和第二个元素m21n12+m22n22,以及M12N21的第一个元素m13n31+m14n41和第二个元素m23n32+m24n42。
对于P12、P21和P22,采取如同计算P11的过程即可。
在本发明实施例中,提供一种矩阵乘法运算方法,如图6所示,应用于GPU,包括:
步骤401,存在第一矩阵和第二矩阵;
在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程中,包含两重运算:
步骤402,第一重运算,将所述第一矩阵的第一选定区域中的N个矩阵单元,与所述第二矩阵的第二选定区域中的N个矩阵单元,根据矩阵乘法规则依次进行N次相乘;
步骤403,第二重运算,在每一次矩阵单元相乘中,采用寄存器存放寄存结果矩阵单元Dmatrix,所述寄存结果矩阵单元Dmatrix通过累加相乘结果矩阵单元Cj得到,所述相乘结果矩阵单元Cj为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元;
步骤404,当采用寄存结果矩阵单元Dmatrix累加所述相乘结果矩阵单元Cj的次数达到第一预定次数时,将累加了所述相乘结果矩阵单元Cj的所述第一预定次数的寄存结果矩阵单元Dmatrix作为中间结果矩阵单元C,且此时对寄存器清零;其中,j表示所述N次相乘中的第j次相乘,且大于等于1小于等于N;
其中,将所述中间结果矩阵单元C进行累加得到所述第一重运算的最终结果矩阵单元。
应用本发明所提供的技术,由于在若干次结束最内层循环运算-即第二重运算后临时累加结果都清零,因此保证了临时累加结果与矩阵元素的小数位数不致相差过大,从而为计算结果保留了更多的精度。提高了GPU单精度矩阵乘法运算的精度,经测试当矩阵规模达到10000时,与CPU计算结果的误差仍然在10-7数量级。同时保持了原算法的高性能,经比较测试得知其性能损失在1%以内。
其中,所述第一预定次数大于1,且小于等于N;所述第一预定次数能够通过设置进行改变。进一步的,所述第一预定次数可以动态变化,由于N并不总是能够被第一预定次数整除,因此在采用寄存结果矩阵单元Dmatrix对所述相乘结果矩阵单元Cj进行累加的过程中,可能余下的相乘结果矩阵单元少于第一预定次数。例如N=10,且第一预定次数为3;则在上述累加过程中,最后会只存在一个相乘结果矩阵单元C10累加到寄存结果矩阵单元Dmatrix上,此时应当判定寄存结果矩阵单元Dmatrix能够作为中间结果矩阵单元C,且能够将所述中间结果矩阵单元C进行累加得到所述第一重运算的最终结果矩阵单元。
由所提供的技术方案可以得知步骤404中,在执行第一重运算的过程中,如果判定完成了所述N次相乘,则结束该第一重运算;即,所述第一矩阵的第一选定区域中的N个矩阵单元,与所述第二矩阵的第二选定区域中的N个矩阵单元,如果已经根据矩阵乘法规则完成了依次进行N次相乘的运算,则结束第一重运算。实际上,在技术人员实现的过程中,由于第二重运算是第一重运算的组成部分,因此只需要满足能够在第一重运算中完成上述判定过程即可,这包括在步骤402中完成上述判定过程。
为帮助技术人员理解本发明的技术思想,如图3所示,提供了在大规模第一矩阵和大规模第二矩阵进行矩阵乘法的过程中,如何运用矩阵单元A、矩阵单元B,以及矩阵单元C实现大规模矩阵之间的矩阵乘法运算的技术。
当GPU对粗线标识的区域中的各个矩阵单元进行乘法运算的过程中,根据步骤(1)至步骤(8)中所描述的矩阵单元进行乘法运算的原理,对图3中粗线标识的区域中的各个矩阵单元进行相乘,包含了两重运算,其中:
第一重运算,将第一矩阵中粗线标识的区域中的每一个矩阵单元A,与第二矩阵中粗线标识的区域中的每一个矩阵单元B,对应相乘。根据M为11,N具体为17可以知道,会出现17次矩阵单元之间的乘法。
第二重运算,根据步骤(1)至步骤(8)中所描述的矩阵单元进行乘法运算的原理,对当前指向的矩阵单元A、当前指向的矩阵单元B进行相乘,得到相乘结果矩阵单元Cj,不失一般性,j=1,则得到相乘结果矩阵单元C1。
之后,根据第一重运算,矩阵单元指针A会指向下一个矩阵单元A、矩阵单元指针B会指向下一个矩阵单元B,由根据第二重运算得到相乘结果矩阵单元C2,此时执行累加操作则矩阵单元C=C1+C2。
之后,根据第一重运算,会指向下一个矩阵单元A和矩阵单元B,由根据第二重运算得到相乘结果矩阵单元C3,此时执行累加操作则矩阵单元C=C1+C2+C3。
同理可知,最终经过17次累加操作之后,矩阵单元C=C1+C2+C3+.......+Cj+.......+C17。
但是,为消除累加过程中,由于累加结果与矩阵元素的小数位数相差很大所导致的计算机对于累加结果尾数的自动抛弃,对寄存器进行设置,使得设置之后的寄存器能够存放寄存结果矩阵单元Dmatrix,寄存结果矩阵单元Dmatrix用以累加相乘结果矩阵单元Cj,所述相乘结果矩阵单元Cj中存放所述N次相乘的过程中,所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元。这包括:
Dmatrixmatrix清零;
Dmatrixmatrix=C1+C2,然后Dmatrixmatrix对中间结果矩阵单元C进行第一次赋值;
之后,Dmatrix清零;
Dmatrix=C3+C4,然后将Dmatrix累加到矩阵单元C,即C=C+Dmatrix;
之后,Dmatrix清零;
Dmatrix=C5+C6+C7+C8,然后将Dmatrix累加到矩阵单元C,即C=C+Dmatrix;
之后,Dmatrix清零;
Dmatrix=C9+C10+C11+C12,然后将Dmatrix累加到矩阵单元C,即C=C+Dmatrix;
之后,Dmatrix清零;
Dmatrix=C13+C14+C15+C16+C17,然后将Dmatrix累加到矩阵单元C,即C=C+Dmatrix;
之后,Dmatrix清零。
可以看出,寄存器每次清零之前,可以经过若干次的累加,如果仅接收来自相乘结果矩阵单元Cj的赋值,而不做累加操作,那么与现有的技术方案雷同。
在本发明实施例中,寄存器在每次清零之后所存放的相乘结果矩阵单元Cj的数目是可以变化的。寄存器每一次能够存放若干个矩阵单元Cj累加的结果,在这一过程中,寄存器将s个矩阵单元Cj累加之后,得到一个第一临时结果矩阵Ds,此时,需要在第一临时结果矩阵Ds上再次加上Cj+1,则,由于Ds中的各个元素与Cj+1之间的差距不是很大,因此在执行Dmatrix=Ds+Cj+1时,不会在累加之后由于计算机精度的限制而导致丢弃尾数。
不失一般性,以Dmatrix=C13+C14+C15+C16+C17为例描述其应用场景,j=16时,Ds=C13+C14+C15+C16,则,由于Ds中的各个元素与Cj+1=C17之间的差距不是很大,因此在执行Dmatrix=Ds+C17时,不会在累加之后由于计算机精度的限制而导致丢弃尾数,从而为计算结果保留了更多的精度。
一种实现矩阵乘法的图形处理器,如图7所示,包括:
存储单元501,用于存放两个矩阵第一矩阵和第二矩阵;
矩阵乘法逻辑单元502,用于在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程中,包含两重运算:
矩阵乘法第一执行单元503,用于实现第一重运算,将所述第一矩阵的第一选定区域中的N个矩阵单元,与所述第二矩阵的第二选定区域中的N个矩阵单元,根据矩阵乘法规则依次进行N次相乘;
矩阵乘法第二执行单元504,用于实现第二重运算,在每一次矩阵单元相乘中,采用寄存器存放寄存结果矩阵单元Dmatrix,所述寄存结果矩阵单元Dmatrix通过累加相乘结果矩阵单元Cj得到,所述相乘结果矩阵单元Cj为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元;
矩阵乘法第一执行单元503,还用于当采用所述寄存结果矩阵单元Dmatrix累加所述相乘结果矩阵单元Cj的次数达到第一预定次数时,将累加了所述相乘结果矩阵单元Cj的所述第一预定次数的寄存结果矩阵单元Dmatrix作为中间结果矩阵单元C,且此时对寄存器清零;其中,j表示所述N次相乘中的第j次相乘,且大于等于1小于等于N;
其中,将所述中间结果矩阵单元C进行累加得到所述第一重运算的最终结果矩阵单元。
应用本发明所提供的技术,由于在若干次结束最内层循环-即第二重运算后临时累加结果都清零,因此保证了临时累加结果与矩阵元素的小数位数不致相差过大,从而为计算结果保留了更多的精度。提高了GPU单精度矩阵乘法运算的精度,经测试当矩阵规模达到10000时,与CPU计算结果的误差仍然在10-7数量级。同时保持了原算法的高性能,经比较测试,性能损失在1%以内。
所述的图形处理器中,
所述第一矩阵和第二矩阵均为行数超过16行,且列数超过16列的矩阵;
矩阵单元为16行16列的方阵;所述第一选定区域为第一矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一行;所述第二选定区域为第二矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一列。
第一预定次数大于1,且小于等于N;所述第一预定次数能够通过设置进行改变。
对应的,本发明实施例还提供一种实现矩阵乘法的电子设备,该电子设备包含一个图形处理器,所述图形处理器包括:
存储单元501,用于存放两个矩阵第一矩阵和第二矩阵;
矩阵乘法逻辑单元502,用于在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程中,包含两重运算:
矩阵乘法第一执行单元503,用于实现第一重运算,将所述第一矩阵的第一选定区域中的N个矩阵单元,与所述第二矩阵的第二选定区域中的N个矩阵单元,根据矩阵乘法规则依次进行N次相乘;
矩阵乘法第二执行单元504,用于实现第二重运算,在每一次矩阵单元相乘中,采用寄存器存放寄存结果矩阵单元Dmatrix,所述寄存结果矩阵单元Dmatrix通过累加相乘结果矩阵单元Cj得到,所述相乘结果矩阵单元Cj为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元;
矩阵乘法第一执行单元503,还用于当采用所述寄存结果矩阵单元Dmatrix累加所述相乘结果矩阵单元Cj的次数达到第一预定次数时,将累加了所述相乘结果矩阵单元Cj的所述第一预定次数的寄存结果矩阵单元Dmatrix作为中间结果矩阵单元C,且此时对寄存器清零;其中,j表示所述N次相乘中的第j次相乘,且大于等于1小于等于N;
其中,将所述中间结果矩阵单元C进行累加得到所述第一重运算的最终结果矩阵单元。
电子设备中,还包括:
矩阵单元设定单元,用于设定矩阵单元为16行16列的方阵;矩阵乘法规划单元,用于在所述第一矩阵中选定第一选定区域,在所述第二矩阵中选定第二选定区域;所述第一矩阵和第二矩阵均为行数超过16行,且列数超过16列的矩阵;所述第一选定区域为第一矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一行;所述第二选定区域为第二矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一列。
应用本发明所提供的技术,寄存器在每次清零之后所存放的相乘结果矩阵单元Cj的数目是可以变化的。寄存器每一次能够存放若干个相乘结果矩阵单元Cj累加的结果,在这一过程中,寄存器将s个相乘结果矩阵单元Cj累加之后,得到一个第一临时结果矩阵Ds,此时,需要在第一临时结果矩阵Ds上再次加上相乘结果矩阵单元Cj+1,则,由于Ds中的各个元素与相乘结果矩阵单元Cj+1之间的差距不是很大,因此在执行Dmatrix=Ds+Cj+1时,不会在累加之后由于计算机精度的限制而导致丢弃尾数。提高了GPU单精度矩阵乘法运算的精度,经测试当矩阵规模达到10000时,与CPU计算结果的误差不超过10-7数量级。同时保持了原算法的高性能,经比较测试,性能损失在1%以内。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种矩阵乘法运算方法,应用于图形处理器,其特征在于,存在第一矩阵和第二矩阵;所述方法包括:
在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程中,包含两重运算:
第一重运算,将所述第一矩阵的第一选定区域中的N个矩阵单元,与所述第二矩阵的第二选定区域中的N个矩阵单元,根据矩阵乘法规则依次进行N次相乘;
第二重运算,在每一次矩阵单元相乘中,采用寄存器存放寄存结果矩阵单元Dmatrix,所述寄存结果矩阵单元Dmatrix通过累加相乘结果矩阵单元Cj得到,所述相乘结果矩阵单元Cj为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元;当采用寄存结果矩阵单元Dmatrix累加所述相乘结果矩阵单元Cj的次数达到第一预定次数时,将累加了所述相乘结果矩阵单元Cj的所述第一预定次数的寄存结果矩阵单元Dmatrix作为中间结果矩阵单元C,且此时对寄存器清零;其中,j表示所述N次相乘中的第j次相乘,且大于等于1小于等于N;
其中,将所述中间结果矩阵单元C进行累加得到所述第一重运算的最终结果矩阵单元。
2.根据权利要求1所述的方法,其特征在于,
所述第一矩阵和所述第二矩阵均为行数超过16行,且列数超过16列的矩阵;
所述矩阵单元为16行16列的方阵。
3.根据权利要求2所述的方法,其特征在于,
所述第一选定区域为所述第一矩阵中由多个矩阵单元占据的区域,且各个所述矩阵单元位于同一行;
所述第二选定区域为所述第二矩阵中由多个矩阵单元占据的区域,且各个所述矩阵单元位于同一列。
4.根据权利要求1所述的方法,其特征在于,
所述第一预定次数大于1,且小于等于N;
所述第一预定次数能够通过设置进行改变。
5.根据权利要求1所述的方法,其特征在于,还包括:
在第一重运算过程中,设置两个矩阵单元指针:矩阵单元指针A和矩阵单元指针B;
当判定所述第二选定区域中仍然有未参加矩阵乘法的矩阵单元时,在所述第一选定区域中,矩阵单元指针A指向下一个矩阵单元;在所述第二选定区域中,矩阵单元指针B指向下一个矩阵单元。
6.一种实现矩阵乘法的图形处理器,其特征在于,包括:
存储单元,用于存放两个矩阵第一矩阵和第二矩阵;
矩阵乘法逻辑单元,用于在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程中,包含两重运算:
矩阵乘法第一执行单元,用于实现第一重运算,将所述第一矩阵的第一选定区域中的N个矩阵单元,与所述第二矩阵的第二选定区域中的N个矩阵单元,根据矩阵乘法规则依次进行N次相乘;
矩阵乘法第二执行单元,用于实现第二重运算,在每一次矩阵单元相乘中,采用寄存器存放寄存结果矩阵单元Dmatrix,所述寄存结果矩阵单元Dmatrix通过累加相乘结果矩阵单元Cj得到,所述相乘结果矩阵单元Cj为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元;
矩阵乘法第一执行单元,还用于当采用所述寄存结果矩阵单元Dmatrix累加所述相乘结果矩阵单元Cj的次数达到第一预定次数时,将累加了所述相乘结果矩阵单元Cj的所述第一预定次数的寄存结果矩阵单元Dmatrix作为中间结果矩阵单元C,且此时对寄存器清零;其中,j表示所述N次相乘中的第j次相乘,且大于等于1小于等于N;
其中,将所述中间结果矩阵单元C进行累加得到所述第一重运算的最终结果矩阵单元。
7.根据权利要求6所述的图形处理器,其特征在于,
所述第一矩阵和所述第二矩阵均为行数超过16行,且列数超过16列的矩阵;
矩阵单元为16行16列的方阵;
所述第一选定区域为所述第一矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一行;
所述第二选定区域为所述第二矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一列。
8.根据权利要求6所述的图形处理器,其特征在于,
所述第一预定次数大于1,且小于等于N;
所述第一预定次数能够通过设置进行改变。
9.一种实现矩阵乘法的电子设备,其特征在于,包含一个图形处理器,所述图形处理器包括:
存储单元,用于存放两个矩阵第一矩阵和第二矩阵;
矩阵乘法逻辑单元,用于在所述第一矩阵和所述第二矩阵之间执行矩阵乘法的过程中,包含两重运算:
矩阵乘法第一执行单元,用于实现第一重运算,将所述第一矩阵的第一选定区域中的N个矩阵单元,与所述第二矩阵的第二选定区域中的N个矩阵单元,根据矩阵乘法规则依次进行N次相乘;
矩阵乘法第二执行单元,用于实现第二重运算,在每一次矩阵单元相乘中,采用寄存器存放寄存结果矩阵单元Dmatrix,所述寄存结果矩阵单元Dmatrix通过累加相乘结果矩阵单元Cj得到,所述相乘结果矩阵单元Cj为所述第一选定区域中的一个矩阵单元与所述第二选定区域中的一个矩阵单元相乘后得到的矩阵单元;
矩阵乘法第一执行单元,还用于当采用所述寄存结果矩阵单元Dmatrix累加所述相乘结果矩阵单元Cj的次数达到第一预定次数时,将累加了所述相乘结果矩阵单元Cj的所述第一预定次数的寄存结果矩阵单元Dmatrix作为中间结果矩阵单元C,且此时对寄存器清零;其中,j表示所述N次相乘中的第j次相乘,且大于等于1小于等于N;
其中,将所述中间结果矩阵单元C进行累加得到所述第一重运算的最终结果矩阵单元。
10.根据权利要求9所述的电子设备,其特征在于,还包括:
矩阵单元设定单元,用于设定矩阵单元为16行16列的方阵;
矩阵乘法规划单元,用于在所述第一矩阵中选定所述第一选定区域,在所述第二矩阵中选定所述第二选定区域;
所述第一矩阵和所述第二矩阵均为行数超过16行,且列数超过16列的矩阵;
所述第一选定区域为所述第一矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一行;
所述第二选定区域为所述第二矩阵中由多个矩阵单元占据的区域,且各个矩阵单元位于同一列。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010261237.7A CN102375721B (zh) | 2010-08-23 | 2010-08-23 | 一种矩阵乘法运算方法、图形处理器和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010261237.7A CN102375721B (zh) | 2010-08-23 | 2010-08-23 | 一种矩阵乘法运算方法、图形处理器和电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102375721A true CN102375721A (zh) | 2012-03-14 |
CN102375721B CN102375721B (zh) | 2016-03-30 |
Family
ID=45794370
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010261237.7A Active CN102375721B (zh) | 2010-08-23 | 2010-08-23 | 一种矩阵乘法运算方法、图形处理器和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102375721B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108780441A (zh) * | 2016-03-18 | 2018-11-09 | 高通股份有限公司 | 用于定点矩阵乘法的内存减少方法 |
CN108875958A (zh) * | 2017-05-11 | 2018-11-23 | 广州异构智能科技有限公司 | 使用外积单元的原生张量处理器 |
CN111079081A (zh) * | 2019-12-16 | 2020-04-28 | 海光信息技术有限公司 | 一种矩阵乘法器、数据处理方法、集成电路器件及处理器 |
WO2020103883A1 (zh) * | 2018-11-20 | 2020-05-28 | 华为技术有限公司 | 执行矩阵乘法运算的方法、电路及soc |
WO2020211049A1 (zh) * | 2019-04-18 | 2020-10-22 | 深圳市大疆创新科技有限公司 | 数据处理方法和设备 |
CN113076521A (zh) * | 2021-06-03 | 2021-07-06 | 沐曦集成电路(上海)有限公司 | 一种基于gpgpu可重构架构的方法及计算系统 |
WO2021212972A1 (zh) * | 2020-04-21 | 2021-10-28 | 中科寒武纪科技股份有限公司 | 运算方法、处理器以及相关产品 |
WO2022218374A1 (zh) * | 2021-04-16 | 2022-10-20 | 中科寒武纪科技股份有限公司 | 用于优化片上系统的矩阵乘操作的方法和相关产品 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6055556A (en) * | 1997-08-15 | 2000-04-25 | Motorola, Inc. | Apparatus and method for matrix multiplication |
US20050193050A1 (en) * | 2001-03-21 | 2005-09-01 | Apple Computer Inc. | Matrix multiplication in a vector processing system |
CN101086699A (zh) * | 2007-07-12 | 2007-12-12 | 浙江大学 | 基于单fpga的矩阵乘法器装置 |
CN101794210A (zh) * | 2010-04-07 | 2010-08-04 | 上海交通大学 | 基于fpga的通用矩阵浮点乘法器 |
-
2010
- 2010-08-23 CN CN201010261237.7A patent/CN102375721B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6055556A (en) * | 1997-08-15 | 2000-04-25 | Motorola, Inc. | Apparatus and method for matrix multiplication |
US20050193050A1 (en) * | 2001-03-21 | 2005-09-01 | Apple Computer Inc. | Matrix multiplication in a vector processing system |
CN101086699A (zh) * | 2007-07-12 | 2007-12-12 | 浙江大学 | 基于单fpga的矩阵乘法器装置 |
CN101794210A (zh) * | 2010-04-07 | 2010-08-04 | 上海交通大学 | 基于fpga的通用矩阵浮点乘法器 |
Non-Patent Citations (1)
Title |
---|
张育欣等: "基于LonWorks总线技术构建工厂能源计量管理系统", 《工业控制计算机》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108780441A (zh) * | 2016-03-18 | 2018-11-09 | 高通股份有限公司 | 用于定点矩阵乘法的内存减少方法 |
CN108875958A (zh) * | 2017-05-11 | 2018-11-23 | 广州异构智能科技有限公司 | 使用外积单元的原生张量处理器 |
WO2020103883A1 (zh) * | 2018-11-20 | 2020-05-28 | 华为技术有限公司 | 执行矩阵乘法运算的方法、电路及soc |
US11263292B2 (en) | 2018-11-20 | 2022-03-01 | Huawei Technologies Co., Ltd. | Method, circuit, and SOC for performing matrix multiplication operation |
US11397791B2 (en) | 2018-11-20 | 2022-07-26 | Huawei Technologies Co., Ltd. | Method, circuit, and SOC for performing matrix multiplication operation |
US11860970B2 (en) | 2018-11-20 | 2024-01-02 | Huawei Technologies Co., Ltd. | Method, circuit, and SOC for performing matrix multiplication operation |
WO2020211049A1 (zh) * | 2019-04-18 | 2020-10-22 | 深圳市大疆创新科技有限公司 | 数据处理方法和设备 |
CN111079081A (zh) * | 2019-12-16 | 2020-04-28 | 海光信息技术有限公司 | 一种矩阵乘法器、数据处理方法、集成电路器件及处理器 |
WO2021120711A1 (zh) * | 2019-12-16 | 2021-06-24 | 成都海光微电子技术有限公司 | 一种矩阵乘法器、数据处理方法、集成电路器件及处理器 |
WO2021212972A1 (zh) * | 2020-04-21 | 2021-10-28 | 中科寒武纪科技股份有限公司 | 运算方法、处理器以及相关产品 |
WO2022218374A1 (zh) * | 2021-04-16 | 2022-10-20 | 中科寒武纪科技股份有限公司 | 用于优化片上系统的矩阵乘操作的方法和相关产品 |
CN113076521A (zh) * | 2021-06-03 | 2021-07-06 | 沐曦集成电路(上海)有限公司 | 一种基于gpgpu可重构架构的方法及计算系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102375721B (zh) | 2016-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102375721A (zh) | 一种矩阵乘法运算方法、图形处理器和电子设备 | |
CN103988171B (zh) | 在数据处理系统中用于执行浮点算术运算的方法和装置 | |
CN101960291B (zh) | 基于降低复杂度的超谱处理的目标检测方法 | |
CN106951211B (zh) | 一种可重构定浮点通用乘法器 | |
CN107273090A (zh) | 面向神经网络处理器的近似浮点乘法器及浮点数乘法 | |
CN103914276A (zh) | 利用浮点架构的定点除法电路 | |
CN110168493A (zh) | 在128位宽的操作数上的融合乘加浮点运算 | |
CN104462755A (zh) | 基于可靠性模型的电子设备备件配置计算方法 | |
US20170102942A1 (en) | Variable Length Execution Pipeline | |
CN104572587A (zh) | 数据矩阵相乘的加速运算方法和装置 | |
CN104679719A (zh) | 一种基于fpga的浮点运算方法 | |
CN105139282A (zh) | 一种电网指标数据处理方法、装置以及计算设备 | |
CN106250499A (zh) | 一种视频对挖掘方法及装置 | |
JP6031995B2 (ja) | シミュレーション方法、プログラム、及び情報処理システム | |
CN104679721A (zh) | 一种fft处理器的运算方法 | |
Malakar et al. | Performance evaluation and optimization of nested high resolution weather simulations | |
CN104169866A (zh) | 运算处理装置以及运算处理装置的控制方法 | |
CN102930158A (zh) | 基于偏最小二乘的变量选择方法 | |
Malakar et al. | A divide and conquer strategy for scaling weather simulations with multiple regions of interest | |
US9779524B2 (en) | Visualization that indicates event significance represented by a discriminative metric computed using a contingency calculation | |
CN104750398A (zh) | 基于水文图纸的图形交互系统及水文数据的处理方法 | |
JP6547342B2 (ja) | 分散処理制御装置 | |
RU2698413C1 (ru) | Устройство для сравнения чисел в системе остаточных классов | |
Poromaa | Parallel algorithms for triangular sylvester equations: Design, scheduling and scalability issues | |
CN102693118A (zh) | 一种标量浮点运算加速器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |