一种矩阵乘法器的实现方法及矩阵乘法器装置转让专利

申请号 : CN202110568171.4

文献号 : CN113032723B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈钦树孙继芬智扬刘玉佳廖述京

申请人 : 广东省新一代通信与网络创新研究院

摘要 :

本发明公开了一种矩阵乘法器的实现方法,方法包括:配置第一乘法运算模块、第二乘法运算模块、保留进位加法运算模块和超前进位加法运算模块;将待运算的多个乘数根据矩阵乘法运算的需求分割成满足第一乘法运算模块和第二乘法运算模块所需的小矩阵;通过小矩阵进行矩阵的乘法运算生成多个部分积;通过保留进位加法运算模块对多个部分积根据不同的权重进行压缩至两个部分积;通过超前进位加法运算模块对两个部分积进行运算生成用于组成矩阵乘法结果的元素。根据本发明公开的方法能够减少矩阵运算所需的时钟周期,提高了计算模块的利用效率,减少了运算资源的浪费。

权利要求 :

1.一种矩阵乘法器的实现方法,其特征在于,所述方法包括:配置第一乘法运算模块、第二乘法运算模块、保留进位加法运算模块和超前进位加法运算模块;

将待运算的多个乘数根据乘法运算的需求分割成满足所述第一乘法运算模块和第二乘法运算模块所需的小矩阵;

通过所述小矩阵进行矩阵的乘法运算生成多个部分积,包括对小矩阵的乘数的偶数位及其相邻位交替编码生成多个部分积和部分积对应的权重;

根据所述部分积的权重进行组合生成多个部分积;

通过保留进位加法运算模块对所述多个部分积根据不同的权重进行压缩至两个部分积;

通过所述超前进位加法运算模块对两个部分积进行运算生成用于组成矩阵乘法结果的元素。

2.根据权利要求1所述的矩阵乘法器的实现方法,其特征在于,所述乘数包括矩阵,所述配置第一乘法运算模块、第二乘法运算模块、保留进位加法运算模块和超前进位加法运算模块,之后还包括:

将待运算的多个矩阵根据矩阵乘法运算的需求分割成满足所述第一乘法运算模块和第二乘法运算模块所需的小矩阵。

3.根据权利要求2所述的矩阵乘法器的实现方法,其特征在于,所述方法还包括:将待运算的多个乘数和通过用于组成矩阵乘法结果的元素组成的矩阵乘法结果根据行的方式进行存储。

4.根据权利要求2所述的矩阵乘法器的实现方法,其特征在于,所述方法还包括:将待运算的多个乘数和通过用于组成矩阵乘法结果的元素组成的矩阵乘法结果根据分割后的小矩阵的方式分块列进行存储。

5.一种矩阵乘法器装置,其特征在于,所述装置包括:矩阵运算控制模块,用于将待运算的多个乘数根据矩阵乘法运算的需求分割成满足第一乘法运算模块和第二乘法运算模块所需的小矩阵;

第一乘法运算模块和第二乘法运算模块,用于通过所述小矩阵进行矩阵的乘法运算生成多个部分积;

保留进位加法运算模块,用于对所述多个部分积根据不同的权重进行压缩至两个部分积;

超前进位加法运算模块,用于对两个部分积进行运算生成用于组成矩阵乘法结果的元素;

其中,所述第一乘法运算模块和第二乘法运算模块实现为:对所述小矩阵的乘数的偶数位及其相邻位交替编码生成多个部分积和所述部分积对应的权重;

根据所述部分积的权重进行组合生成多个部分积。

6.根据权利要求5所述的矩阵乘法器装置,其特征在于,所述装置还包括:第一存储模块,用于将待运算的多个乘数和通过用于组成矩阵乘法结果的元素组成的乘法结果根据行的方式进行存储。

7.根据权利要求5所述的矩阵乘法器装置,其特征在于,所述装置还包括:第二存储模块,用于将待运算的多个乘数和通过用于组成矩阵乘法结果的元素组成的乘法结果根据分割后的小矩阵的方式分块列进行存储。

8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至4中任一项所述的矩阵乘法器的实现方法中的步骤。

说明书 :

一种矩阵乘法器的实现方法及矩阵乘法器装置

技术领域

[0001] 本发明涉及计算机算法技术领域,尤其涉及一种矩阵乘法器的实现方法及矩阵乘法器装置。

背景技术

[0002] 矩阵乘法在深度学习,图像识别,自动驾驶,5G/B5G无线基带信号处理等领域有着广泛的应用。随着这些领域的快速发展,特别是人工智能和5G在垂直行业的应用,对矩阵乘
法的运算速度的要求越来越高。现有的矩阵乘法的实现一般是采用通用CPU处理器来实现
的,由于CPU处理器主要是应用于控制,并不擅长矩阵乘法运算,需要根据人工的编入的算
法按照矩阵乘法的运算规则逐个将两个矩阵的每个元素多次读出并进行乘法计算,会存在
计算缓慢不能满足深度学习,5G信号处理等需求的问题。
[0003] 为了解决这一问题,有根据深度学习的需求研究了脉动阵列来实现矩阵乘法,通过脉动阵列实现矩阵乘法运算确实解决了传统处理器运算速度低下的问题,但是由于脉动
阵列实现的方式实质是大矩阵阵列的运算,需要的乘法器资源多,成本高昂,并且并不能满
足小矩阵的运算速度,存在资源浪费的问题。

发明内容

[0004] 本发明所要解决的技术问题在于,提供一种矩阵乘法器的实现方法及矩阵乘法器装置,能够减少矩阵运算所需的时钟周期,提高了计算模块的利用效率,减少了运算资源的
浪费。
[0005] 为了解决上述技术问题,本发明第一方面公开了一种矩阵乘法器的实现方法,所述方法包括:配置第一乘法运算模块、第二乘法运算模块、保留进位加法运算模块和超前进
位加法运算模块;将待运算的多个乘数根据乘法运算的需求分割成满足所述第一乘法运算
模块和第二乘法运算模块所需的小矩阵;通过所述小矩阵进行矩阵的乘法运算生成多个部
分积;通过保留进位加法运算模块对所述多个部分积根据不同的权重进行压缩至两个部分
积;通过所述超前进位加法运算模块对两个部分积进行运算生成用于组成矩阵乘法结果的
元素。
[0006] 在一些实施方式中,矩阵乘法器的实现方法,所述乘数包括矩阵,在配置第一乘法运算模块、第二乘法运算模块、保留进位加法运算模块和超前进位加法运算模块之后,还将
待运算的多个矩阵根据矩阵乘法运算的需求分割成满足所述第一乘法运算模块和第二乘
法运算模块所需的小矩阵。
[0007] 在一些实施方式中,通过所述小矩阵进行矩阵的乘法运算生成多个部分积,包括:对所述小矩阵的乘数的偶数位及其相邻位交替编码生成多个部分积和所述部分积对应的
权重;根据所述部分积的权重进行组合生成多个部分积。
[0008] 在一些实施方式中,还包括:将待运算的多个乘数和通过用于组成矩阵乘法结果的元素组成的乘法结果根据行的方式进行存储。
[0009] 在一些实施方式中,还包括:将待运算的多个乘数和通过用于组成矩阵乘法结果的元素组成的乘法结果根据分割后的小矩阵的方式分块列进行存储。
[0010] 根据本发明的第二个方面,公开了一种矩阵乘法器装置,所述装置包括:矩阵运算控制模块,用于将待运算的多个乘数根据矩阵乘法运算的需求分割成满足所述第一乘法运
算模块和第二乘法运算模块所需的小矩阵;第一乘法运算模块和第二乘法运算模块,用于
通过所述小矩阵进行矩阵的乘法运算生成多个部分积;保留进位加法运算模块,用于对所
述多个部分积根据不同的权重进行压缩至两个部分积;超前进位加法运算模块,用于对两
个部分积进行运算生成用于组成矩阵乘法结果的元素。
[0011] 在一些实施方式中,第一乘法运算模块和第二乘法运算模块实现为:对所述小矩阵的乘数的偶数位及其相邻位交替编码生成多个部分积和所述部分积对应的权重;根据所
述部分积的权重进行组合生成多个部分积。
[0012] 在一些实施方式中,还包括:第一存储模块,用于将待运算的多个乘数和通过用于组成矩阵乘法结果的元素组成的乘法结果根据行的方式进行存储。
[0013] 在一些实施方式中,还包括:第二存储模块,用于将待运算的多个乘数和通过用于组成矩阵乘法结果的元素组成的乘法结果根据分割后的小矩阵的方式分块列进行存储。
[0014] 根据本发明的第三个方面,公开了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如上述的矩阵乘法器的实现方法中的步骤。
[0015] 与现有技术相比,本发明的有益效果在于:
[0016] 实施本发明通过一个单时钟周期就能够完成一次矩阵乘加运算,然后根据不同的矩阵乘法需求将两个大矩阵根据矩阵自动分割成满足运算单元所需的小矩阵进行矩阵的
乘法运算,并且巧妙的利用了部分积进行压缩节约了运算时间,大大的提高了矩阵乘法运
算的性能。

附图说明

[0017] 图1为本发明实施例公开的一种矩阵乘法器的实现方法的流程示意图;
[0018] 图2为本发明实施例公开的一种矩阵乘法器的实现方法应用示意图;
[0019] 图3为本发明实施例公开的又一种矩阵乘法器的实现方法应用示意图;
[0020] 图4为本发明实施例公开的又一种矩阵乘法器的实现方法应用示意图;
[0021] 图5为本发明实施例公开的一种矩阵乘法器装置示意图;
[0022] 图6为本发明实施例公开的一种矩阵乘法器实现装置结构示意图。

具体实施方式

[0023] 为了更好地理解和实施,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不
是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前
提下所获得的所有其他实施例,都属于本发明保护的范围。
[0024] 本发明实施例的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、系统、产品或设备不必限于清楚地列
出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固
有的其它步骤或模块。
[0025] 现有的脉动阵列实现矩阵乘法运算确实解决了传统处理器运算速度低下的问题,但是脉动阵列由于实现大矩阵运算,需要乘法器资源多,成本高昂,并且对于小矩阵来说,
运算速度还是不能满足。例如谷歌的TPU的脉动阵列是一个256x256的矩阵,对于一个小于
或等于256x256的矩阵乘法运算,需要的计算时间是511个时钟周期,对于一个16x16的小矩
阵的矩阵乘法运算也是需要511个时钟周期。
[0026] 本发明实施例公开了一种矩阵乘法器的实现方法及矩阵乘法器装置,通过一个单时钟周期就能够完成一次矩阵乘加运算,然后根据不同的矩阵乘法需求将两个大矩阵根据
矩阵自动分割成满足运算单元所需的小矩阵进行矩阵的乘法运算,并且巧妙的利用了部分
积进行压缩节约了运算时间,大大的提高了矩阵乘法运算的性能。
[0027] 实施例一
[0028] 请参阅图1,图1为本发明实施例公开的一种矩阵乘法器实现方法的流程示意图。其中,该矩阵乘法器可以应用于不同的矩阵运算组合,对于该矩阵乘法器的应用运算组合
本发明实施例不做限制。如图1所示,该矩阵乘法器实现方法可以包括以下操作:
[0029] 101、配置第一乘法运算模块、第二乘法运算模块、保留进位加法运算模块和超前进位加法运算模块。
[0030] 为了满足矩阵运算所需的乘加运算,为此,在本实施例中首先需要配置可以用于矩阵乘法运算的第一乘法运算模块、第二乘法运算模块,以及可以用于矩阵加法运算的保
留进位加法运算模块和超前进位加法运算模块。
[0031] 102、将待运算的多个乘数根据矩阵乘法运算的需求分割成满足第一乘法运算模块和第二乘法运算模块所需的小矩阵。
[0032] 为了便于举例如何通过需求分割矩阵,在本实施例中通过两个整数的乘法运算进行说明,假设待运算的乘数为p*q,其中,p和q的位宽都是n,如果n是奇数,那么q进行符号位
扩展,扩展一位,如果n是偶数,那么q不变,这样经过处理后乘数的位宽一定是偶数的可以
便于进行矩阵的运算,将处理后的乘数命名为r,位宽为h。那么r可以用二进制表示为:
[0033] r= ‑rh‑1*2h‑1+ rh‑2*2h‑2+……+ r1*21+r0*20
[0034] =(‑rh‑1+ rh‑2)*2h‑1+(‑rh‑2+ rh‑3)*2h‑2+……+(‑r1+r0)*21+(‑r0+0)*20
[0035] =(‑2*rh‑1+ rh‑2+rh‑3)*2h‑2+(‑2*rh‑3+ rh‑4)+ rh‑5)*2h‑4+……+(‑2*r3+r2 +r1)*22+0
(‑2*r1+r0 +0)*2
[0036] =  (其中r‑1=0)
[0037] =  其中en=‑2* r2n+1+ r2n+r2n‑1, 0≤n≤(h/2‑1), r‑1=0
[0038] 那么两个乘数相乘所得的小矩阵就可以表示为:
[0039] p*r=p*(  )=
[0040] 其真值表如下所示:
[0041]
[0042] 103、通过小矩阵进行矩阵的乘法运算生成多个部分积。
[0043] 通过上述步骤所得到的矩阵化后的乘数,对小矩阵的乘数的偶数位及其相邻位交替编码生成多个部分积和部分积对应的权重,例如p*r可以分解成p*4n乘以‑2,‑1,0,1,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。
[0044] 104、通过保留进位加法运算模块对多个部分积根据不同的权重进行压缩至两个部分积。
[0045] 再获取到多个由上述步骤生成的部分积后,将所有部分积按照权重加起来就可以得到乘法运算的结果。现有技术中一般采用超前进位加法器进行相加,但是会产生从最低
位到最高位进位延迟传递,所有在本实施例中采用了保留进位加法器进行压缩,直至最后
形成2个部分积后才用超前进位加法器相加得到乘法的结果。最终压缩至只有两个部分积
后再用超前进位加法器相加就可以得到乘法结果。该保留进位加法运算模块有三输入端口
I1、I2和Ci,分别是被加数、加数和相邻的低位进位,两个输出端口Co和SUM,其中SUM具有与
I1、I2、Ci相同的权重,是本位的累加结果,而Co的权重是SUM权重的2倍,是向高位的进位信
号。其中,该运算器的真值表如下表所示:
[0046]
[0047] 示例性地,如图2所示,将多个CSA32加法器(CSA:Carry Save Adder,保留进位加法器)排成一行就可以实现对部分积进行压缩,如果部分积的位宽是32位,那么就需要32个
CSA32排成一行,将三个部分积压缩成两个部分积,此时Co的权重是2。
[0048] 作为一种其他实施方式,保留进位加法运算模块还可以实现为CSA53计数器,其具有五个输入端: I1、I2、I3、I4、Ci;三个输出端:SUM、C、Co。将CSA53编码器并成一行,即为
CSA53计数行;若将相邻低位之Co接入本位之Ci,则成为CSA42压缩器。这样可以减少二个操
作数。
[0049] 其中,计数器代数运算式如下:
[0050] SUM + C * 2 + Co * 2 = I1 + I2 + I3 + I4 + Ci
[0051] 即:I1、I2、I3、I4、Ci、SUM权值为1;C、Co权值为2。
[0052] 其中,该运算器的真值表如下表所示:
[0053]
[0054] SUM = I1 ^ I2 ^ I3 ^ I4 ^ Ci
[0055] C = (I1 ^ I2 ^ I3 ^ I4) & Ci | ( (I1 ^ I2 ^ I3 ^ I4)) & (I1 & I2 | ~
I3 & I4)
[0056] = (I1 ^ I2 ^ I3 ^ I4) & Ci | ( ((I1 ^ I2 ^ I3 ^ I4) | ( (I1 & I2 | ~ ~
I3 & I4))))
[0057] Co = (I1 | I2) & (I3 | I4)
[0058] 由上述公式可以看出:用作CSA42 压缩器时,将相邻低位之Co接入本位的Ci,对延迟并无影响。因为Ci在被用到时,Co正好形成。4个输入数据经过42压缩器处理后得到两个
输出,一个权重为1的结果SUM,一个是权重为2的数据C。由于Co信号不需要根据Ci信号译码
得到,所以不会产生进位链传递延迟。同理将多个CSA42排成一列,可以将4个部分积进行压
缩,压缩后可以得到两个部分积结果,一个是权重为2的部分积结果。
[0059] 105、通过超前进位加法运算模块对压缩后最终的两个部分积进行运算生成用于组成矩阵乘法结果的元素。每一个乘法结果的元素都按照上述步骤进行运算就可以在效率
高且不占用资源的情况下进行高效的矩阵运算。
[0060] 根据另一种优选实施方式中,特别是在实际应用中可以有两种方法来存储两个乘数矩阵例如A和B,第一种方法是将A矩阵和B矩阵按照行的方式存储到DDR内存中,进行运算
的时候需要按照矩阵的行来取出各个元素,这个时候可以在矩阵运算控制器内部设置一个
缓存,每次预取多个小矩阵,具体小矩阵的数目可以根据运算速度和成本平衡的需求来确
定,然后控制各个小矩阵按照上述描述的方式送入到各个运算模块中进行运算。运算的结
果也可以按照小矩阵分块的方式存储到DDR缓存中,可以根据配置将小矩阵块按照行或列
的方式进行存储,或者先缓存在矩阵运算控制器内部,等多个运算结果小矩阵拼接成矩阵
行才存储到DDR缓存中。第二种方法是将A矩阵根据矩阵乘加模块的要求分成小矩阵块,然
后按照行存储各个小矩阵块,B矩阵也根据矩阵乘加单元的要求分成小矩阵块,按照列的方
式存储各个小矩阵块。至于需求使用哪种方式存储在设计矩阵运算控制器的时候可以做成
可配置的,根据用户实际需求配置相关寄存器选择其中的一种方式来实现矩阵的乘法运
算。
[0061] 根据本实施例提供的方法,通过一个单时钟周期就能够完成一次矩阵乘加运算,然后根据不同的矩阵乘法需求将两个大矩阵根据矩阵自动分割成满足运算单元所需的小
矩阵进行矩阵的乘法运算,并且巧妙的利用了部分积进行压缩节约了运算时间,大大的提
高了矩阵乘法运算的性能。
[0062] 实施例二
[0063] 请参阅图3,图3为本发明实施例公开的一种矩阵乘法器实现方法的应用示意图。如图3所示,待运算的多个乘数可以实现为多个矩阵,具体包括为由A、B、C组成,将D设为乘
法结果,矩阵规则即需求为D=A*B+C,其中,A,B,C可以是任意元素的矩阵,只要A,B的行列要
满足矩阵乘法规则即可。在本实施例中,为了表述方便,假设A,B,C,D都是32x32的方阵。
[0064] 可见,对于D矩阵的第一个元素d0,0可以用A矩阵第一行和B矩阵第一列的对应元素进行乘运算,再累加上C矩阵的第一个元素,具体元素的运算如表达式(1)所示。
[0065] d0,0=a0,0*b0,0+a0,1*b1,0+…+a0,31*b31,0+c0,0               (1)
[0066] d0,1=a0,0*b0,1+a0,1*b1,1+…+a0,31*b31,1+c0,1               (2)
[0067] …
[0068] d31,31=a31,0*b0,31+a31,1*b1,31+…+a31,31*b31,31+c31,31         (3)
[0069] 通过D矩阵的运算规则可以看出,A矩阵第一行和B矩阵第一列的对应元素进行乘法运算时则一共需要32个乘法器,在具体实现上则需要根据实施例一中所描述的方法将A
和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个乘法器。
[0070] 在其他实施方式中,还可以采用流水线的方式提高矩阵乘法运算单元的运算能力。由于采用保留进位加法器完成部分积的压缩没有进位传递延迟,所以实际组合逻辑路
径非常短,可以在一个时钟周期内将32个乘法运算产生的部分积和C矩阵的一个元素进行
压缩,压缩后得到最终的两个部分积。32位乘法运算最终得到64位的结果,考虑到64位超前
进位加法器的进位链的延迟需要从最低位传递到最高位,组合逻辑延迟过大,所以将64位
超前进位加法器采用两级流水实现,第一个时钟周期实现低32位超前进位加法器运算,第
二个时钟周期实现高32位超前进位加法器运算,所以D矩阵的一个元素需要三个时钟周期
才能完成。对于D矩阵的所有元素采用并行计算实现,所以整个D矩阵只需三个时钟周期就
能够完成所有元素的运算得到运算结果。由于是采用流水线的方式实现矩阵乘加运算,在
第一个时钟周期送入A,B,C三个矩阵的数据,在下一个时钟周期可以送入新的A,B,C三个矩
阵的数据。即第一次送入的数据需要等到第三个时钟周期才能得到运算结果,第二次送入
的数据需要等到第四个时钟周期才能得到运算结果,等效一个时钟周期就可以完成一次矩
阵乘累加运算,只是运算的结果延迟是三个时钟周期而已。由此可见本申请在实现32x32矩
阵的乘累加运算完成一次矩阵乘累加等效只需一个时钟周期,大大提高了矩阵乘法运算的
性能。
[0071] 实施例三
[0072] 请参阅图4,图4为本发明实施例公开的一种矩阵乘法器实现方法的应用示意图。对于其他任意行列的矩阵如果矩阵的行列数不是32整数倍,则需要对矩阵的行和列进行补
零操作,直至补到矩阵的行数和列数为32的整数倍;若矩阵行列是32的整数倍则直接进入
下一步。先按照矩阵乘法运算的要求按照行或列进行分割,分别送入到矩阵乘法运算单元
进行乘加运算。例如A矩阵是一个64x96的矩阵,B矩阵是一个64x64的矩阵,那么在做矩阵乘
法运算可以将A矩阵按照32x32进行分割,分割成6个小矩阵,分别是A00, A01……A21,具体分
割如下图4所示。
[0073] B矩阵也按照32x32进行分割,分割成4个小矩阵,分别是B00, B01, B10,和B11,具体分割如图4所示。那么在计算A矩阵和B的乘法运算时候,先计算结果矩阵D的第一个小矩阵
D00,D00是一个32x32的矩阵。首先取出A00和B00送入矩阵乘加运算单元,完成A00和B00的计算,
由于不需要累加,所以C00的值全为0。然后取A01和B10及上一次运算结果C= A00*B00送入到矩
阵乘加运算单元得到了D矩阵的第一个小矩阵的结果。D矩阵的其他小矩阵如图4所示,实现
方式参照上述,这样就得到了完整的乘法结果。
[0074] 在现有技术例如设计的矩阵乘加单元支持一个时钟周期完成A*B+C,其中A, B, C都是32x32的小矩阵。采用处理器方法完成256x256矩阵乘法运算,即便处理器一个时钟周
期完成一次乘法运算,那么最少也需要65536个时钟周期,还没有计算存取数据和加法的计
算时间;如果采用脉动整列方法做矩阵乘法运算需要511个时钟周期;但是,如果采用本实
施例的方法完成矩阵乘法运算则需要514个时钟周期即可。而脉动阵列需要65536个乘法
器,而本发明只需要1024个乘法器就可以实现了。由此,根据本实施例提供的方法,通过一
个单时钟周期就能够完成一次矩阵乘加运算,然后根据不同的矩阵乘法需求将两个大矩阵
根据矩阵自动分割成满足运算单元所需的小矩阵进行矩阵的乘法运算,并且巧妙的利用了
部分积进行压缩节约了运算时间,大大的提高了矩阵乘法运算的性能。
[0075] 实施例四
[0076] 请参阅图5,图5为本发明实施例公开的一种矩阵乘法器装置示意图。其中,该矩阵乘法器装置可以应用于不同的矩阵运算组合,对于该矩阵乘法器的应用运算组合本发明实
施例不做限制。如图5所示,该矩阵乘法器装置包括:
[0077] 矩阵运算控制模块1,用于将待运算的多个乘数或多个矩阵根据矩阵乘法运算的需求分割成满足第一乘法运算模块和第二乘法运算模块所需的小矩阵。为了便于举例如何
通过需求分割矩阵,在本实施例中首先设计两个整数的乘法运算。假设为p*q,其中,p和q的
位宽都是n,如果n是奇数,那么q进行符号位扩展,扩展一位,如果n是偶数,那么q不变,这样
经过处理后乘数的位宽一定是偶数的可以便于进行矩阵的运算,将处理后的乘数命名为r,
位宽为h。那么r可以用二进制表示为:
[0078] r = ‑rh‑1*2h‑1+ rh‑2*2h‑2+……+ r1*21+r0*20
[0079] =(‑rh‑1+ rh‑2)*2h‑1+(‑rh‑2+ rh‑3)*2h‑2+……+(‑r1+r0)*21+(‑r0+0)*20
[0080] =(‑2*rh‑1+ rh‑2+rh‑3)*2h‑2+(‑2*rh‑3+ rh‑4)+ rh‑5)*2h‑4+……+(‑2*r3+r2 +r1)*22+0
(‑2*r1+r0 +0)*2
[0081] =  (其中r‑1=0)
[0082] =  其中en=‑2* r2n+1+ r2n+r2n‑1, 0≤n≤(h/2‑1), r‑1=0
[0083] 那么两个乘数相乘所得的小矩阵就可以表示为:
[0084] p*r=p*(  )=
[0085] 其真值表如下所示:
[0086]
[0087] 第一乘法运算模块2和第二乘法运算模块3,用于通过小矩阵进行矩阵的乘法运算生成多个部分积。通过上述步骤所得到的矩阵化后的乘数,对小矩阵的乘数的偶数位及其
相邻位交替编码生成多个部分积和部分积对应的权重,例如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。
[0088] 保留进位加法运算模块3,用于对多个部分积根据不同的权重进行压缩至两个部分积。再获取到多个由上述步骤生成的部分积后,将所有部分积按照权重加起来就可以得
到乘法运算的结果。现有技术中一般采用超前进位加法器进行相加,但是会产生从最低位
到最高位进位延迟传递,所有在本实施例中采用了保留进位加法器进行压缩,直至最后形
成2个部分积后才用超前进位加法器相加得到乘法的结果。最终压缩至只有两个部分积后
再用超前进位加法器相加就可以得到乘法结果。该保留进位加法运算模块有三输入端口
I1、I2和Ci,分别是被加数、加数和相邻的低位进位,两个输出端口Co和SUM,其中SUM具有与
I1、I2、Ci相同的权重,是本位的累加结果,而Co的权重是SUM权重的2倍,是向高位的进位信
号。其中,该运算器的真值表如下表所示:
[0089]
[0090] SUM = I1 ^ I2 ^ Ci
[0091] Co = I1 & I2 | I1 & Ci | I2 & Ci
[0092] = I1 & I2 | (I1 | I2) & Ci
[0093] 示例性地,如图2所示,将多个CSA32加法器(CSA:Carry Save Adder,保留进位加法器)排成一行就可以实现对部分积进行压缩,如果部分积的位宽是32位,那么就需要32个
CSA32排成一行,将三个部分积压缩成两个部分积,此时Co的权重是2。
[0094] 作为一种其他实施方式,保留进位加法运算模块还可以实现为CSA53计数器,其具有五个输入端: I1、I2、I3、I4、Ci;三个输出端:SUM、C、Co。将CSA53编码器并成一行,即为
CSA53计数行;若将相邻低位之Co接入本位之Ci,则成为CSA42压缩器。这样可以减少二个操
作数。
[0095] 其中,计数器代数运算式如下:
[0096] SUM + C * 2 + Co * 2 = I1 + I2 + I3 + I4 + Ci
[0097] 即:I1、I2、I3、I4、Ci、SUM权值为1;C、Co权值为2。
[0098] 其中,该运算器的真值表如下表所示:
[0099]
[0100] SUM = I1 ^ I2 ^ I3 ^ I4 ^ Ci
[0101] C = (I1 ^ I2 ^ I3 ^ I4) & Ci | ( (I1 ^ I2 ^ I3 ^ I4)) & (I1 & I2 | ~
I3 & I4)
[0102] = (I1 ^ I2 ^ I3 ^ I4) & Ci | ( ((I1 ^ I2 ^ I3 ^ I4) | ( (I1 & I2 | ~ ~
I3 & I4))))
[0103] Co = (I1 | I2) & (I3 | I4)
[0104] 由上述公式可以看出:用作CSA42 压缩器时,将相邻低位之Co接入本位的Ci,对延迟并无影响。因为Ci在被用到时,Co正好形成。4个输入数据经过42压缩器处理后得到两个
输出,一个权重为1的结果SUM,一个是权重为2的数据C。由于Co信号不需要根据Ci信号译码
得到,所以不会产生进位链传递延迟。同理将多个CSA42排成一列,可以将4个部分积进行压
缩,压缩后可以得到两个部分积结果,一个是权重为2的部分积结果。
[0105] 超前进位加法运算模块4,用于对两个部分积进行运算生成用于组成矩阵乘法结果的元素。当获取到最后的两个部分积之后就可以直接运用超前进位加法运算模块进行运
算。每一个乘法结果的元素都按照上述步骤进行运算就可以在效率高且不占用资源的情况
下进行高效的矩阵运算。
[0106] 在其他实施方式中,该装置还包括两个存储模块:第一存储模块(图中未示),用于将待运算的多个矩阵和通过用于组成矩阵乘法结果的元素组成的乘法结果根据行的方式
进行存储。第二存储模块(图中未示),用于将待运算的多个矩阵和通过用于组成矩阵乘法
结果的元素组成的乘法结果根据分割后的小矩阵的方式分块列进行存储。在实际应用中第
一存储模块5是将A矩阵和B矩阵按照行的方式存储到DDR内存中,进行运算的时候需要按照
矩阵的行来取出各个元素,这个时候可以在矩阵运算控制器内部设置一个缓存,每次预取
多个小矩阵,具体小矩阵的数目可以根据运算速度和成本平衡的需求来确定,然后控制各
个小矩阵按照上述描述的方式送入到各个运算模块中进行运算。运算的结果也可以按照小
矩阵分块的方式存储到DDR缓存中,可以根据配置将小矩阵块按照行或列的方式进行存储,
或者先缓存在矩阵运算控制器内部,等多个运算结果小矩阵拼接成矩阵行才存储到DDR缓
存中。第二存储模块6是将A矩阵根据矩阵乘加模块的要求分成小矩阵块,然后按照行存储
各个小矩阵块,B矩阵也根据矩阵乘加单元的要求分成小矩阵块,按照列的方式存储各个小
矩阵块。至于需求使用哪种方式存储在设计矩阵运算控制器的时候可以做成可配置的,根
据用户实际需求配置相关寄存器选择其中的一种方式来实现矩阵的乘法运算。
[0107] 根据本实施例提供的装置,通过一个单时钟周期就能够完成一次矩阵乘加运算,然后根据不同的矩阵乘法需求将两个大矩阵根据矩阵自动分割成满足运算单元所需的小
矩阵进行矩阵的乘法运算,并且巧妙的利用了部分积进行压缩节约了运算时间,大大的提
高了矩阵乘法运算的性能。
[0108] 实施例五
[0109] 请参阅图6,图6是本发明实施例公开的一种矩阵乘法器实现装置的结构示意图。其中,图6所描述的矩阵乘法器实现装置可以应用在系统,对于该矩阵乘法器实现装置的应
用系统本发明实施例不做限制。如图6所示,该装置可以包括:
[0110] 存储有可执行程序代码的存储器601;
[0111] 与存储器601耦合的处理器602;
[0112] 处理器602调用存储器601中存储的可执行程序代码,用于执行实施例一所描述的矩阵乘法器的实现。
[0113] 实施例六
[0114] 本发明实施例公开了一种计算机可读存储介质,其存储用于电子数据交换的计算机程序,其中,该计算机程序使得计算机执行实施例一所描述的矩阵乘法器的实现方法。
[0115] 实施例七
[0116] 本发明实施例公开了一种计算机程序产品,该计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,且该计算机程序可操作来使计算机执行实施例一或
实施例二中所描述的矩阵乘法器实现方法。
[0117] 以上所描述的实施例仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可
以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部
分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动
的情况下,即可以理解并实施。
[0118] 通过以上的实施例的具体描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,
上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,
该计算机软件产品可以存储在计算机可读存储介质中,存储介质包括只读存储器(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)或其他光盘存储器、磁盘存储器、磁带存储器、或者能够
用于携带或存储数据的计算机可读的任何其他介质。
[0119] 最后应说明的是:本发明实施例公开的一种矩阵乘法器实现方法及装置所揭露的仅为本发明较佳实施例而已,仅用于说明本发明的技术方案,而非对其限制;尽管参照前述
实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解;其依然可以对前述
各项实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些
修改或替换,并不使相应的技术方案的本质脱离本发明各项实施例技术方案的精神和范
围。