一种矩阵乘法器的实现方法及矩阵乘法器装置转让专利
申请号 : CN202110568171.4
文献号 : CN113032723B
文献日 : 2021-08-10
发明人 : 陈钦树 , 孙继芬 , 智扬 , 刘玉佳 , 廖述京
申请人 : 广东省新一代通信与网络创新研究院
摘要 :
权利要求 :
1.一种矩阵乘法器的实现方法,其特征在于,所述方法包括:配置第一乘法运算模块、第二乘法运算模块、保留进位加法运算模块和超前进位加法运算模块;
将待运算的多个乘数根据乘法运算的需求分割成满足所述第一乘法运算模块和第二乘法运算模块所需的小矩阵;
通过所述小矩阵进行矩阵的乘法运算生成多个部分积,包括对小矩阵的乘数的偶数位及其相邻位交替编码生成多个部分积和部分积对应的权重;
根据所述部分积的权重进行组合生成多个部分积;
通过保留进位加法运算模块对所述多个部分积根据不同的权重进行压缩至两个部分积;
通过所述超前进位加法运算模块对两个部分积进行运算生成用于组成矩阵乘法结果的元素。
2.根据权利要求1所述的矩阵乘法器的实现方法,其特征在于,所述乘数包括矩阵,所述配置第一乘法运算模块、第二乘法运算模块、保留进位加法运算模块和超前进位加法运算模块,之后还包括:
将待运算的多个矩阵根据矩阵乘法运算的需求分割成满足所述第一乘法运算模块和第二乘法运算模块所需的小矩阵。
3.根据权利要求2所述的矩阵乘法器的实现方法,其特征在于,所述方法还包括:将待运算的多个乘数和通过用于组成矩阵乘法结果的元素组成的矩阵乘法结果根据行的方式进行存储。
4.根据权利要求2所述的矩阵乘法器的实现方法,其特征在于,所述方法还包括:将待运算的多个乘数和通过用于组成矩阵乘法结果的元素组成的矩阵乘法结果根据分割后的小矩阵的方式分块列进行存储。
5.一种矩阵乘法器装置,其特征在于,所述装置包括:矩阵运算控制模块,用于将待运算的多个乘数根据矩阵乘法运算的需求分割成满足第一乘法运算模块和第二乘法运算模块所需的小矩阵;
第一乘法运算模块和第二乘法运算模块,用于通过所述小矩阵进行矩阵的乘法运算生成多个部分积;
保留进位加法运算模块,用于对所述多个部分积根据不同的权重进行压缩至两个部分积;
超前进位加法运算模块,用于对两个部分积进行运算生成用于组成矩阵乘法结果的元素;
其中,所述第一乘法运算模块和第二乘法运算模块实现为:对所述小矩阵的乘数的偶数位及其相邻位交替编码生成多个部分积和所述部分积对应的权重;
根据所述部分积的权重进行组合生成多个部分积。
6.根据权利要求5所述的矩阵乘法器装置,其特征在于,所述装置还包括:第一存储模块,用于将待运算的多个乘数和通过用于组成矩阵乘法结果的元素组成的乘法结果根据行的方式进行存储。
7.根据权利要求5所述的矩阵乘法器装置,其特征在于,所述装置还包括:第二存储模块,用于将待运算的多个乘数和通过用于组成矩阵乘法结果的元素组成的乘法结果根据分割后的小矩阵的方式分块列进行存储。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至4中任一项所述的矩阵乘法器的实现方法中的步骤。
说明书 :
一种矩阵乘法器的实现方法及矩阵乘法器装置
技术领域
背景技术
法的运算速度的要求越来越高。现有的矩阵乘法的实现一般是采用通用CPU处理器来实现
的,由于CPU处理器主要是应用于控制,并不擅长矩阵乘法运算,需要根据人工的编入的算
法按照矩阵乘法的运算规则逐个将两个矩阵的每个元素多次读出并进行乘法计算,会存在
计算缓慢不能满足深度学习,5G信号处理等需求的问题。
阵列实现的方式实质是大矩阵阵列的运算,需要的乘法器资源多,成本高昂,并且并不能满
足小矩阵的运算速度,存在资源浪费的问题。
发明内容
浪费。
位加法运算模块;将待运算的多个乘数根据乘法运算的需求分割成满足所述第一乘法运算
模块和第二乘法运算模块所需的小矩阵;通过所述小矩阵进行矩阵的乘法运算生成多个部
分积;通过保留进位加法运算模块对所述多个部分积根据不同的权重进行压缩至两个部分
积;通过所述超前进位加法运算模块对两个部分积进行运算生成用于组成矩阵乘法结果的
元素。
待运算的多个矩阵根据矩阵乘法运算的需求分割成满足所述第一乘法运算模块和第二乘
法运算模块所需的小矩阵。
权重;根据所述部分积的权重进行组合生成多个部分积。
算模块和第二乘法运算模块所需的小矩阵;第一乘法运算模块和第二乘法运算模块,用于
通过所述小矩阵进行矩阵的乘法运算生成多个部分积;保留进位加法运算模块,用于对所
述多个部分积根据不同的权重进行压缩至两个部分积;超前进位加法运算模块,用于对两
个部分积进行运算生成用于组成矩阵乘法结果的元素。
述部分积的权重进行组合生成多个部分积。
乘法运算,并且巧妙的利用了部分积进行压缩节约了运算时间,大大的提高了矩阵乘法运
算的性能。
附图说明
具体实施方式
是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前
提下所获得的所有其他实施例,都属于本发明保护的范围。
出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固
有的其它步骤或模块。
运算速度还是不能满足。例如谷歌的TPU的脉动阵列是一个256x256的矩阵,对于一个小于
或等于256x256的矩阵乘法运算,需要的计算时间是511个时钟周期,对于一个16x16的小矩
阵的矩阵乘法运算也是需要511个时钟周期。
矩阵自动分割成满足运算单元所需的小矩阵进行矩阵的乘法运算,并且巧妙的利用了部分
积进行压缩节约了运算时间,大大的提高了矩阵乘法运算的性能。
本发明实施例不做限制。如图1所示,该矩阵乘法器实现方法可以包括以下操作:
留进位加法运算模块和超前进位加法运算模块。
扩展,扩展一位,如果n是偶数,那么q不变,这样经过处理后乘数的位宽一定是偶数的可以
便于进行矩阵的运算,将处理后的乘数命名为r,位宽为h。那么r可以用二进制表示为:
(‑2*r1+r0 +0)*2
n
五种操作,p*4 即将p左移2n位即可,乘于2即左移1位,乘以1不变,乘于0将部分积结果设置
为0,乘以‑1可以将被乘数各个比特位取反再加1,乘以‑2可以将被乘数各个比特位取反左
移一位再加2实现。对于加1或加2的操作,可以通过将各个部分积产生的加1或加2组合到一
起,由于产生部分积的权重是4,而加1或加2只需占用2比特,因此各个部分积产生的加1或
加2可以两位两位拼接成一个部分积,其权重为0。所以如果乘数是h位的,那么最后通过编
码可以产生h/2+1个部分积,相邻的部分积的权重相差4。
位到最高位进位延迟传递,所有在本实施例中采用了保留进位加法器进行压缩,直至最后
形成2个部分积后才用超前进位加法器相加得到乘法的结果。最终压缩至只有两个部分积
后再用超前进位加法器相加就可以得到乘法结果。该保留进位加法运算模块有三输入端口
I1、I2和Ci,分别是被加数、加数和相邻的低位进位,两个输出端口Co和SUM,其中SUM具有与
I1、I2、Ci相同的权重,是本位的累加结果,而Co的权重是SUM权重的2倍,是向高位的进位信
号。其中,该运算器的真值表如下表所示:
CSA32排成一行,将三个部分积压缩成两个部分积,此时Co的权重是2。
CSA53计数行;若将相邻低位之Co接入本位之Ci,则成为CSA42压缩器。这样可以减少二个操
作数。
I3 & I4)
I3 & I4))))
输出,一个权重为1的结果SUM,一个是权重为2的数据C。由于Co信号不需要根据Ci信号译码
得到,所以不会产生进位链传递延迟。同理将多个CSA42排成一列,可以将4个部分积进行压
缩,压缩后可以得到两个部分积结果,一个是权重为2的部分积结果。
高且不占用资源的情况下进行高效的矩阵运算。
的时候需要按照矩阵的行来取出各个元素,这个时候可以在矩阵运算控制器内部设置一个
缓存,每次预取多个小矩阵,具体小矩阵的数目可以根据运算速度和成本平衡的需求来确
定,然后控制各个小矩阵按照上述描述的方式送入到各个运算模块中进行运算。运算的结
果也可以按照小矩阵分块的方式存储到DDR缓存中,可以根据配置将小矩阵块按照行或列
的方式进行存储,或者先缓存在矩阵运算控制器内部,等多个运算结果小矩阵拼接成矩阵
行才存储到DDR缓存中。第二种方法是将A矩阵根据矩阵乘加模块的要求分成小矩阵块,然
后按照行存储各个小矩阵块,B矩阵也根据矩阵乘加单元的要求分成小矩阵块,按照列的方
式存储各个小矩阵块。至于需求使用哪种方式存储在设计矩阵运算控制器的时候可以做成
可配置的,根据用户实际需求配置相关寄存器选择其中的一种方式来实现矩阵的乘法运
算。
矩阵进行矩阵的乘法运算,并且巧妙的利用了部分积进行压缩节约了运算时间,大大的提
高了矩阵乘法运算的性能。
法结果,矩阵规则即需求为D=A*B+C,其中,A,B,C可以是任意元素的矩阵,只要A,B的行列要
满足矩阵乘法规则即可。在本实施例中,为了表述方便,假设A,B,C,D都是32x32的方阵。
和B相乘后的所有部分积通过保留进位加法器(CSA32或CSA42)进行压缩,同时把作为加法
的C矩阵的第一个元素也当作一个部分积进行压缩,最后得到两个压缩后部分积结果,之后
再用一个超前进位加法器完成累加得到了D矩阵的第一个元素。示例性地,以乘法结果D矩
阵的第一个元素为例,先把a0,0*b0,0,a0,1*b1,0,…,a0,31*b31,0,权重为0的32个部分积和32个
由于加1或加2组合产生的部分采用CSA42行进行压缩,每四个用一个CSA42行压缩器进行压
缩产生一个权重为0的第一级部分积P1_0Pj和权重为2的第一级部分积P1_2Pj,0≤j≤15。
将16个P1_0Pj和C00一共是17个权重为0的部分积,采用3个CSA42和2个CSA32进行压缩,可
以得到权重为0的第二级部分积P2_0Pk和权重为2的第二级部分积P2_2Pk,0≤k≤4。把第一
级压缩得到的16个权重为2的部分积P1_2Pj和5个权重为2的第二级部分积P2_2Pk用4个
CSA42和2个CSA32进行压缩,得到6个权重为4的P3_4Pl和6个权重为2的P3_2Pl,0≤l≤5。把
a0,0*b0,0,a0,1*b1,0,…,a0,31*b31,0权重为4的32个部分积和6个权重为4的P3_4Pl用8个CSA42
和2个CSA32进行压缩,得到第四级部分积,其中包含10个权重为6的部分积P3_6Pm和权重为
4的部分积P4_4Pm,0≤m≤9。其他的部分积的压缩如上描述类似,最后将a0,0*b0,0+ a0,1*b1,0
+…+ a0,31*b31,0+ c0,0所有部分积压缩到只剩2个部分积后,通过超前进位加法器相加可得
到表达式(1)的计算结果。可见,在本实施例中运算表达式(1)只需要一个乘法器就可以实
现了,所以完成整个D矩阵乘法结果的计算只需1024个乘法器即可,而按照传统的设计方法
计算表达式(1)则需要32个乘法器,完成D矩阵的计算需要32768个乘法器。
径非常短,可以在一个时钟周期内将32个乘法运算产生的部分积和C矩阵的一个元素进行
压缩,压缩后得到最终的两个部分积。32位乘法运算最终得到64位的结果,考虑到64位超前
进位加法器的进位链的延迟需要从最低位传递到最高位,组合逻辑延迟过大,所以将64位
超前进位加法器采用两级流水实现,第一个时钟周期实现低32位超前进位加法器运算,第
二个时钟周期实现高32位超前进位加法器运算,所以D矩阵的一个元素需要三个时钟周期
才能完成。对于D矩阵的所有元素采用并行计算实现,所以整个D矩阵只需三个时钟周期就
能够完成所有元素的运算得到运算结果。由于是采用流水线的方式实现矩阵乘加运算,在
第一个时钟周期送入A,B,C三个矩阵的数据,在下一个时钟周期可以送入新的A,B,C三个矩
阵的数据。即第一次送入的数据需要等到第三个时钟周期才能得到运算结果,第二次送入
的数据需要等到第四个时钟周期才能得到运算结果,等效一个时钟周期就可以完成一次矩
阵乘累加运算,只是运算的结果延迟是三个时钟周期而已。由此可见本申请在实现32x32矩
阵的乘累加运算完成一次矩阵乘累加等效只需一个时钟周期,大大提高了矩阵乘法运算的
性能。
零操作,直至补到矩阵的行数和列数为32的整数倍;若矩阵行列是32的整数倍则直接进入
下一步。先按照矩阵乘法运算的要求按照行或列进行分割,分别送入到矩阵乘法运算单元
进行乘加运算。例如A矩阵是一个64x96的矩阵,B矩阵是一个64x64的矩阵,那么在做矩阵乘
法运算可以将A矩阵按照32x32进行分割,分割成6个小矩阵,分别是A00, A01……A21,具体分
割如下图4所示。
D00,D00是一个32x32的矩阵。首先取出A00和B00送入矩阵乘加运算单元,完成A00和B00的计算,
由于不需要累加,所以C00的值全为0。然后取A01和B10及上一次运算结果C= A00*B00送入到矩
阵乘加运算单元得到了D矩阵的第一个小矩阵的结果。D矩阵的其他小矩阵如图4所示,实现
方式参照上述,这样就得到了完整的乘法结果。
期完成一次乘法运算,那么最少也需要65536个时钟周期,还没有计算存取数据和加法的计
算时间;如果采用脉动整列方法做矩阵乘法运算需要511个时钟周期;但是,如果采用本实
施例的方法完成矩阵乘法运算则需要514个时钟周期即可。而脉动阵列需要65536个乘法
器,而本发明只需要1024个乘法器就可以实现了。由此,根据本实施例提供的方法,通过一
个单时钟周期就能够完成一次矩阵乘加运算,然后根据不同的矩阵乘法需求将两个大矩阵
根据矩阵自动分割成满足运算单元所需的小矩阵进行矩阵的乘法运算,并且巧妙的利用了
部分积进行压缩节约了运算时间,大大的提高了矩阵乘法运算的性能。
施例不做限制。如图5所示,该矩阵乘法器装置包括:
通过需求分割矩阵,在本实施例中首先设计两个整数的乘法运算。假设为p*q,其中,p和q的
位宽都是n,如果n是奇数,那么q进行符号位扩展,扩展一位,如果n是偶数,那么q不变,这样
经过处理后乘数的位宽一定是偶数的可以便于进行矩阵的运算,将处理后的乘数命名为r,
位宽为h。那么r可以用二进制表示为:
(‑2*r1+r0 +0)*2
相邻位交替编码生成多个部分积和部分积对应的权重,例如p*r可以分解成p*4n乘以‑2,‑
n
1,0,1,2这五种操作,p*4 即将p左移2n位即可,乘于2即左移1位,乘以1不变,乘于0将部分
积结果设置为0,乘以‑1可以将被乘数各个比特位取反再加1,乘以‑2可以将被乘数各个比
特位取反左移一位再加2实现。对于加1或加2的操作,可以通过将各个部分积产生的加1或
加2组合到一起,由于产生部分积的权重是4,而加1或加2只需占用2比特,因此各个部分积
产生的加1或加2可以两位两位拼接成一个部分积,其权重为0。所以如果乘数是h位的,那么
最后通过编码可以产生h/2+1个部分积,相邻的部分积的权重相差4。
到乘法运算的结果。现有技术中一般采用超前进位加法器进行相加,但是会产生从最低位
到最高位进位延迟传递,所有在本实施例中采用了保留进位加法器进行压缩,直至最后形
成2个部分积后才用超前进位加法器相加得到乘法的结果。最终压缩至只有两个部分积后
再用超前进位加法器相加就可以得到乘法结果。该保留进位加法运算模块有三输入端口
I1、I2和Ci,分别是被加数、加数和相邻的低位进位,两个输出端口Co和SUM,其中SUM具有与
I1、I2、Ci相同的权重,是本位的累加结果,而Co的权重是SUM权重的2倍,是向高位的进位信
号。其中,该运算器的真值表如下表所示:
CSA32排成一行,将三个部分积压缩成两个部分积,此时Co的权重是2。
CSA53计数行;若将相邻低位之Co接入本位之Ci,则成为CSA42压缩器。这样可以减少二个操
作数。
I3 & I4)
I3 & I4))))
输出,一个权重为1的结果SUM,一个是权重为2的数据C。由于Co信号不需要根据Ci信号译码
得到,所以不会产生进位链传递延迟。同理将多个CSA42排成一列,可以将4个部分积进行压
缩,压缩后可以得到两个部分积结果,一个是权重为2的部分积结果。
算。每一个乘法结果的元素都按照上述步骤进行运算就可以在效率高且不占用资源的情况
下进行高效的矩阵运算。
进行存储。第二存储模块(图中未示),用于将待运算的多个矩阵和通过用于组成矩阵乘法
结果的元素组成的乘法结果根据分割后的小矩阵的方式分块列进行存储。在实际应用中第
一存储模块5是将A矩阵和B矩阵按照行的方式存储到DDR内存中,进行运算的时候需要按照
矩阵的行来取出各个元素,这个时候可以在矩阵运算控制器内部设置一个缓存,每次预取
多个小矩阵,具体小矩阵的数目可以根据运算速度和成本平衡的需求来确定,然后控制各
个小矩阵按照上述描述的方式送入到各个运算模块中进行运算。运算的结果也可以按照小
矩阵分块的方式存储到DDR缓存中,可以根据配置将小矩阵块按照行或列的方式进行存储,
或者先缓存在矩阵运算控制器内部,等多个运算结果小矩阵拼接成矩阵行才存储到DDR缓
存中。第二存储模块6是将A矩阵根据矩阵乘加模块的要求分成小矩阵块,然后按照行存储
各个小矩阵块,B矩阵也根据矩阵乘加单元的要求分成小矩阵块,按照列的方式存储各个小
矩阵块。至于需求使用哪种方式存储在设计矩阵运算控制器的时候可以做成可配置的,根
据用户实际需求配置相关寄存器选择其中的一种方式来实现矩阵的乘法运算。
矩阵进行矩阵的乘法运算,并且巧妙的利用了部分积进行压缩节约了运算时间,大大的提
高了矩阵乘法运算的性能。
用系统本发明实施例不做限制。如图6所示,该装置可以包括:
实施例二中所描述的矩阵乘法器实现方法。
以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部
分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动
的情况下,即可以理解并实施。
上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,
该计算机软件产品可以存储在计算机可读存储介质中,存储介质包括只读存储器(Read‑
Only Memory,ROM)、随机存储器(Random Access Memory,RAM)、可编程只读存储器
(Programmable Read‑only Memory,PROM)、可擦除可编程只读存储器(Erasable
Programmable Read Only Memory,EPROM)、一次可编程只读存储器(One‑time
Programmable Read‑Only Memory,OTPROM)、电子抹除式可复写只读存储器
(Electrically‑Erasable Programmable Read‑Only Memory,EEPROM)、只读光盘(Compact
Disc Read‑Only Memory,CD‑ROM)或其他光盘存储器、磁盘存储器、磁带存储器、或者能够
用于携带或存储数据的计算机可读的任何其他介质。
实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解;其依然可以对前述
各项实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些
修改或替换,并不使相应的技术方案的本质脱离本发明各项实施例技术方案的精神和范
围。