CN116710912A - 一种矩阵乘法器及矩阵乘法器的控制方法 - Google Patents

一种矩阵乘法器及矩阵乘法器的控制方法 Download PDF

Info

Publication number
CN116710912A
CN116710912A CN202180089847.XA CN202180089847A CN116710912A CN 116710912 A CN116710912 A CN 116710912A CN 202180089847 A CN202180089847 A CN 202180089847A CN 116710912 A CN116710912 A CN 116710912A
Authority
CN
China
Prior art keywords
matrix
fractal
multiplexing
operation circuit
matrices
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.)
Pending
Application number
CN202180089847.XA
Other languages
English (en)
Inventor
李震桁
李明可
张一栋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN116710912A publication Critical patent/CN116710912A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Databases & Information Systems (AREA)
  • Algebra (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Biophysics (AREA)
  • Neurology (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Complex Calculations (AREA)

Abstract

一种矩阵乘法器及矩阵乘法器的控制方法,涉及计算机技术领域,该矩阵乘法器包括运算电路(403)和控制器(404)。其中,运算电路(403)与控制器(404)连接,控制器(404)用于控制运算电路(403)在n个连续时钟周期内复用一个左分形矩阵Asr,同时控制运算电路(403)在该n个连续时钟周期的每个时钟周期内使用n个右分形矩阵中的一个右分形矩阵Brt。运算电路(403)用于在n个连续的时钟周期中的每个时钟周期内,将左分形矩阵与n个右分形矩阵中的一个右分形矩阵进行相乘,以得到n个矩阵运算结果。

Description

一种矩阵乘法器及矩阵乘法器的控制方法 技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种矩阵乘法器及矩阵乘法器的控制方法。
背景技术
随着卷积神经网络在图像分类、图像识别等领域的不断发展,提升卷积神经网络的运行效率、缩短卷积神经网络的执行时间成为当前研究的热点。由于卷积神经网络的主要组成部分为卷积计算和全连接计算,这两者的计算量占据整个卷积神经网络总计算量的95%以上。而卷积计算和全连接计算又都可以转换为两个矩阵之间的乘法运算,因此,提高矩阵乘法处理器的性能将直接影响卷积神经网络的运算性能。
矩阵乘法器用于实现两个矩阵之间的乘法运算,涉及大量的乘累加操作。现有的矩阵乘法器一般采用向量相乘的方法,假设C=A*B,矩阵处理器可同时计算的元素个数为M个,矩阵乘法器就会将矩阵A的第i行向量加载到源寄存器中,再将矩阵B的第j列向量加载到另一寄存器中,然后实现两个寄存器之间对应元素的点乘运算,最后通过加法树来完成累加操作,计算出矩阵C的第i行第j列的元素C ij,最后通过多次向量乘法计算得到最后的矩阵C。
在上述矩阵乘法器中,若要完成两个N*N的矩阵的乘法运算,需要N^3次点乘运算,由于矩阵乘法处理器在一个时钟周期可计算M个元素之间的乘法,因此完成一次矩阵乘法所需的时长则为N^3/M个时钟,这将耗费大量的时间。同时矩阵乘法器的计算尺寸严格,计算效率很差,因此,设计运算性能更高的新矩阵乘法器成为亟需解决的问题。
发明内容
本申请实施例提供了一种矩阵乘法器及矩阵乘法器的控制方法,该矩阵乘法器执行基于矩阵分形的矩阵乘法运算,运算灵活且运算效率高。与此同时,该矩阵乘法器还可以节省功耗,进而提高整个卷积运算系统的性能。
本申请实施例的第一方面提供了一种矩阵乘法器,该矩阵乘法器包括有运算电路和控制器,运算电路和控制器连接。
其中,控制器用于执行以下动作,控制器需要控制运算电路在n个连续时钟周期内复用一个左分形矩阵A sr;还需要控制运算电路在该n个连续时钟周期的每个时钟周期内使用n个右分形矩阵中的一个右分形矩阵B rt。而左分形矩阵A sr是左矩阵包括的任意一个分形矩阵,该左矩阵为M*K矩阵,右分形矩阵B rt为右矩阵包括的第r行的一个分形矩阵,其中,n个右分形矩阵则是该右矩阵包括的第r行的n个连续的右分形矩阵,右矩阵的尺寸为K*N。其中,M、K、N、s、r和t均为大于0的正整数,n则为大于2的正整数。
而运算电路则用于在n个连续的时钟周期中的每个时钟周期内,将左分形矩阵A sr与n个右分形矩阵中的一个右分形矩阵B rt进行相乘,以便n个连续时钟周期得到n个矩阵运算结果。
上述矩阵乘法器,可以在一个时钟周期内完成一个左分形矩阵和一个右分形矩阵的运 算,最后再基于分形矩阵之间的相乘来获取最终左矩阵与右矩阵的相乘结果,这样可以避免单个数据元素进行点乘而带来的运算复杂程度,运算灵活且运算效率高,同时控制器还需要控制运算电路对左分形矩阵进行复用,这样,运算电路无需在每个时钟周期内都读取不同的左分形矩阵数据,每隔n个时钟周期才对刷新一次左分形矩阵数据,降低了因读取数据而带来的功耗,提高了整个矩阵乘法器的性能。
在一种可能的实施方式中,该运算电路具体用于:
在上述n个连续的时钟周期中的第i个时钟周期,计算A sr*B rt,以及,然后在第i+1个时钟周期,计算A sr*B r(t+1),其中,1≤i<n。
矩阵乘法器中的运算电路在复用左分型矩阵数据时,需要在n个连续时钟周期内完成一个左分形矩阵和n个右分形矩阵的矩阵乘法运算,因此,矩阵乘法器需要在依次输入r行连续的n个右分形矩阵B rt,在前一时钟周期内计算A sr*B rt,那么就需要在后一时钟周期计算A sr*B r(t+1),为后续获得左矩阵和右矩阵相乘结果提供运算中间值。
在一种可能的实施方式中,控制器还可以控制运算电路对右分形矩阵数据进行复用,具体的,控制器需要控制运算电路在n个连续时钟周期内复用一个右分形矩阵B rt,其中,该右分形矩阵B rt为右矩阵包括的任意一个分形矩阵。然后控制运算电路在该n个连续时钟周期的每个时钟周期内使用n个左分形矩阵中的一个左分形矩阵A sr,其中,该左分形矩阵A sr为右矩阵包括的第r列的一个分形矩阵,而n个左分形矩阵为右矩阵包括的第r列的n个连续的左分形矩阵。
运算电路则用于执行以下动作,在n个连续的时钟周期中的每个时钟周期,将n个左分形矩阵中的一个左分形矩阵A sr与右分形矩阵B rt进行相乘,以得到n个矩阵运算结果。
与上述实施例类似,矩阵乘法器,可以在一个时钟周期内完成一个左分形矩阵和一个右分形矩阵的运算,最后再基于分形矩阵之间的相乘来获取最终左矩阵与右矩阵的相乘结果,这样可以避免单个数据元素进行点乘而带来的运算复杂程度,运算灵活且运算效率高,同时控制器还需要控制运算电路对右分形矩阵进行复用,这样,运算电路无需在每个时钟周期内都读取不同的右分形矩阵数据,每隔n个时钟周期才对刷新一次右分形矩阵数据,降低了因读取数据而带来的功耗,提高了整个矩阵乘法器的性能。
在一种可能的实施方式中,运算电路具体用于:
在上述n个连续的时钟周期中的第i个时钟周期,计算A sr*B rt,在第i+1个时钟周期,计算A (s+1)r*B rt,其中,1≤i<n。
矩阵乘法器中的运算电路在复用右分型矩阵数据时,需要在n个连续时钟周期内完成n个左分形矩阵和一个右分形矩阵的矩阵乘法运算,因此,矩阵乘法器需要在依次输入r列连续的n个左分形矩阵A sr,在前一时钟周期内计算A sr*B rt,那么就需要在后一时钟周期计算A (s+1)r*B rt,为后续获得左矩阵和右矩阵相乘结果提供运算中间值。
在一种可能的实施方式中,由于该矩阵乘法器是基于将完整矩阵分块,得到分形矩阵后,根据分形矩阵之间运算结果获得中间值,再根据中间值获得两个完整矩阵相乘结果的,因此,首选需要对左矩阵和右矩阵进行分块处理,以得到左分形矩阵和右分形矩阵。控制器需要根据运算电路中的运算单元的分布情况对左分形矩阵和右分形矩阵进行分形。
其中,运算电路包括X行*Y列运算单元,每个运算单元都在一个时钟周期内完成左分形矩阵的一个行向量数据和右分形矩阵的一个列向量数据之间的向量乘法运算,并得到运算结果。并且,每个运算单元都包括L个乘法器,每个乘法器则用来执行行向量数据中的一个数据元素和列向量数据中的一个数据元素之间的乘法运算。
当运算电路中的运算单元按照上述情况分布时,控制器就需要以规模为X*L的子块为单位,对左矩阵进行分块,得到S*R个左分形矩阵,然后将S*R个左分形矩阵中的第s行第r列的左分形矩阵标记为A sr,其中,S和R均为大于0的正整数,s为1至S中的任意正整数,r为1至R中的任意正整数。
控制器还需要以规模为L*Y的子块为单位,对右矩阵进行分块,得到R*T个右分形矩阵,并将R*T个右分形矩阵中的第r行第t列的右分形矩阵标记为B rt,其中,R和T均为大于0的正整数,r为1至R中的任意正整数,t为1至T中的任意正整数。
当控制器按照运算电路中运算单元的分布对左矩阵和右矩阵进行分形后,得到的左分形矩阵和右分形矩阵就能够适应矩阵乘法器的尺寸,使得矩阵乘法器能在一个运算周期内完成两个分形矩阵之间的矩阵乘法运算,运算更加灵活简洁。
在一种可能的实施方式中,矩阵乘法器还包括第一存储器和第二存储器。
其中,第一存储器和第二存储器分别与运算电路相连,用来存储左矩阵和右矩阵,运算电路从第一存储器中获取左分形矩阵,从第二存储器中获取右分型矩阵。当控制器控制运算电路复用左分形矩阵A sr时,控制器需要先判断T能否被n整除,如果可以,控制器就需要控制运算电路将左矩阵中的每个左分形矩阵A sr均复用n次,并且若复用的前一个左分形矩阵为左分形矩阵A sr时,那么下一个复用的左分形矩阵则为左分形矩阵A s(r+1),并且需要将其复用n次。
在一个可能的实施方式中,当控制器控制运算电路复用左分形矩阵的过程中,控制器判断T不能被n整除,且余数c大于等于2。此时控制器若按照n次复用每一个左分形矩阵时,最终会剩余c列右分形矩阵,那么控制器就先控制运算电路将每一个左分形矩阵A sr复用n次,当剩余c列右分形矩阵B rt时,所述控制器再控制运算电路从第一个左分形矩阵开始,将每一个左分形矩阵A sr再复用c次。
在一种可能的实施方式中,当控制器控制运算电路复用左分形矩阵的过程中,控制器判断T不能被n整除,且余数c等于1时,控制器此时控制器若按照n次复用每一个左分形矩阵时,最终会剩余1列右分形矩阵,为了避免单拍累加的情况发生,控制器先控制运算电路将每一个左分形矩阵A sr复用n次,当剩余n+1列右分形矩阵B rt时,控制器再控制运算电路将每一个左分形矩阵A sr复用z次,其中,z为大于等于2小于等于n-1的正整数。最后,控制器再控制运算电路将每一个左分形矩阵A sr复用q次,其中,q为大于等于2的正整数。
在一种可能的实施方式中,当控制器控制运算电路复用右分形矩阵的过程中,当T能被n整除时,控制运算电路需要将每一个右分形矩阵B rt复用n次,并且若复用的前一个右分形矩阵为右分形矩阵B rt时,那么下一个复用的右分形矩阵则为左分形矩阵B (r+1)t
在一种可能的实施方式中,当控制器控制运算电路复用右分形矩阵的过程中,当控制 器判断S不能被n整除,且余数c大于等于2时,先控制运算电路将每一个右分形矩阵B rt复用n次,当剩余c行左分形矩阵A sr时,控制运算电路将每一个右分形矩阵B rt复用c次。
在一种可能的实施方式中,当控制器控制运算电路复用右分形矩阵的过程中,当控制器判断T不能被n整除,且余数c等于1时,先控制运算电路将每一个右分形矩阵B rt复用n次,当剩余n+1行左分形矩阵A sr时,控制运算电路将每一个右分形矩阵B rt复用p次,其中,p为大于等于2小于等于n-1的正整数。最后控制运算电路将一个右分形矩阵B rt复用f次,其中,f为大于等于2的正整数。
在一种可能的实施方式中,运算电路中包括L个乘法器,L个乘法器中的每个乘法器都包括输入端A,输入端B,控制模块,第一寄存器、第二寄存器和第三寄存器。其中,输入端A和输入端B与控制模块相连,控制模块与第一寄存器、第二寄存器和第三寄存器相连。输入端A用于向第一寄存器输入行向量中的第一数据元素,输入端B用于向第二寄存器输入列向量中的第二数据元素。
第一寄存器用于存储第一数据元素并向乘法器输入第一数据元素,第二寄存器用于存储第二数据元素并向乘法器输入第二数据元素,乘法器用于接收第一寄存器和第二寄存器输入的第一数据元素和第二数据元素,并对第一数据元素和第二数据元素进行乘法运算。
控制模块用于根据输入端A和输入端B接收到的第一数据元素和第一数据元素产生控制信号,控制信号用于控制第一寄存器、第二寄存器和第三寄存器的开关状态。
在一种可能的实施方式中,控制模块具体用于当输入端A接收到的第一数据元素或者输入段B接收到的第二数据元素为0时,控制模块控制第一寄存器和第二寄存器关断。控制器产生第一控制信号,第一控制信号用于向第三寄存器写入输出结果0,并将输出结果输出。当输入端A接收到的第一数据元素或者输入段B接收到的第二数据元素均不为0时,控制模块控制第一寄存器和第二寄存器闭合,并控制第三寄存器关断。
控制器控制第一寄存器读取第一数据元素,控制第二寄存器读取第二数据元素,并控制乘法器对第一数据元素和第二数据元素进行乘法运算,得到运算结果,并将运算结果输出。
本申请实施例的第二方面提供了一种矩阵乘法器,包括:
获取一个左分形矩阵A sr和n个右分形矩阵;其中,左分形矩阵A sr为左矩阵包括的任意一个分形矩阵,左矩阵为M*K矩阵;n个右分形矩阵为右矩阵包括的第r行的n个连续的右分形矩阵,右矩阵为K*N矩阵;其中,M、K、N、s、r和t均为大于0的正整数,n为大于2的正整数。
控制运算电路在n个连续时钟周期内复用一个左分形矩阵A sr
控制运算电路在n个连续时钟周期内使用n个右分形矩阵中的一个右分形矩阵B rt,其中,一个右分形矩阵B rt为右矩阵包括的第r行的一个分形矩阵。
在n个时钟连续周期中的每个时钟周期内,将左分形矩阵A sr与n个右分形矩阵中的一个右分形矩阵B rt进行相乘,以得到n个矩阵运算结果。
在一种可能的实施方式中,在n个时钟连续周期中的每个时钟周期内,将左分形矩阵A sr与n个右分形矩阵中的一个右分形矩阵B rt进行相乘,以得到n个矩阵运算结果,包括:
在n个连续的时钟周期中的第i个时钟周期,控制运算电路计算A sr*B rt
在n个连续的时钟周期中的第i+1个时钟周期,控制运算电路计算A sr*B r(t+1),其中,1≤i<n。
在一种可能的实施方式中,所述方法还包括:
控制运算电路在n个连续时钟周期内复用一个右分形矩阵B rt;其中,右分形矩阵B rt为右矩阵包括的任意一个分形矩阵。
控制运算电路在n个连续时钟周期的每个时钟周期内使用n个左分形矩阵中的一个左分形矩阵A sr,左分形矩阵A sr为右矩阵包括的第r列的一个分形矩阵,n个左分形矩阵为右矩阵包括的第r列的n个连续的左分形矩阵。
在n个连续的时钟周期中的每个时钟周期,将n个中的一个左分形矩阵A sr与右分形矩阵B rt进行相乘,以得到n个矩阵运算结果。
在一种可能的实施方式中,在n个连续的时钟周期中的每个时钟周期,将n个中的一个左分形矩阵A sr与右分形矩阵B rt进行相乘,以得到n个矩阵运算结果,包括:
在n个连续的时钟周期中的第i个时钟周期,控制运算电路计算A sr*B rt
在n个连续的时钟周期中的第i+1个时钟周期,控制运算电路计算A (s+1)r*B rt,其中,1≤i<n。
在一种可能的实施方式中,所述方法还包括:
以规模为X*L的子块为单位,对左矩阵进行分块,得到S*R个左分形矩阵。
将S*R个左分形矩阵中的第s行第r列的左分形矩阵标记为A sr,其中,S和R均为大于0的正整数,s为1至S中的任意正整数,r为1至R中的任意正整数。
以规模为L*Y的子块为单位,对右矩阵进行分块,得到R*T个右分形矩阵。
将R*T个右分形矩阵中的第r行第t列的右分形矩阵标记为B rt,其中,R和T均为大于0的正整数,r为1至R中的任意正整数,t为1至T中的任意正整数。
其中,运算电路包括X行*Y列运算单元,每个运算单元用于在一个时钟周期内对左分形矩阵A sr的一个行向量数据和右分形矩阵B rt的一个列向量数据进行向量乘法运算,并得到运算结果。其中,每个运算单元包括L个乘法器,L个乘法器中的每个乘法器用于执行行向量数据中的一个数据元素和列向量数据中的一个数据元素之间的乘法运算。
在一种可能的实施方式中,所述方法还包括:
当T能被n整除时,控制运算电路将每个左分形矩阵Asr复用n次。
当运算电路将一个左分形矩阵A sr复用n次后,控制运算电路将左分形矩阵A s(r+1)复用n次。
在一种可能的实施方式中,所述方法还包括:
当T不能被n整除,且余数c大于等于2时,先控制运算电路将一个左分形矩阵A sr复用n次。
当剩余c列右分形矩阵B rt时,再控制运算电路将一个左分形矩阵A sr复用c次。
在一种可能的实施方式中,所述方法包括:
当T不能被n整除,且余数c等于1时,先控制运算电路将一个左分形矩阵A sr复用n 次。
当剩余n+1列右分形矩阵B rt时,再控制运算电路将一个左分形矩阵A sr复用z次,其中,z为大于等于2小于等于n-1的正整数。
最后控制运算电路将一个左分形矩阵A sr复用q次,其中,q为大于等于2的正整数。
在一个可能的实施方式中,所述方法还包括:
当T能被n整除时,控制运算电路将一个右分形矩阵B rt复用n次。
当运算电路将一个右分形矩阵B rt复用n次后,控制运算电路将左分形矩阵B (r+1)t复用n次。
在一个可能的实施方式照片那个,所述方法还包括:
当S不能被n整除,且余数c大于等于2时,先控制运算电路将一个右分形矩阵B rt复用n次。
当剩余c行左分形矩阵A sr时,控制运算电路将一个右分形矩阵B rt复用c次。
在一个可能的实施方式中,所述方法还包括:
当T不能被n整除,且余数c等于1时,先控制运算电路将一个右分形矩阵B rt复用n次。
当剩余n+1行左分形矩阵A sr时,再控制运算电路将一个右分形矩阵B rt复用p次,其中,p为大于等于2小于等于n-1的正整数。
最后控制运算电路将一个右分形矩阵B rt复用f次,其中,f为大于等于2的正整数。
本申请的上述方面或其它方面将在以下的实施例中进行具体介绍。
附图说明
图1为本申请实施例提供的一种矩阵乘法计算公式的示意图;
图2为本申请实施例提供的一种矩阵乘法器的结构示意图;
图3为本申请实施例提供的一种矩阵乘法器的运算示意图;
图4为本申请实施例提供的另一种矩阵乘法器的结构示意图;
图5为本申请实施例提供的一种运算单元的结构示意图;
图6为本申请实施例提供的另一种运算单元的结构示意图;
图7为本申请实施例提供的一种矩阵分形示意图;
图8为本申请实施例提供的一种矩阵分形示意图;
图9为本申请实施例提供的一种左矩阵和右矩阵的示意图;
图10为本申请实施例提供的另一种左矩阵和右矩阵的示意图;
图11为本申请实施例提供的另一种左矩阵和右矩阵的示意图;
图12为本申请实施例提供的另一种左矩阵和右矩阵的示意图;
图13为本申请实施例提供的一种运算电路的布线示意图;
图14为本申请实施例提供的一种Booth乘法器的结构示意图;
图15为本申请实施例提供的一种矩阵乘法器的结构示意图。
具体实施方式
本申请实施例提供了一种矩阵乘法器及矩阵乘法器的控制方法,该矩阵乘法器执行基 于矩阵分形的矩阵乘法运算,运算灵活且运算效率高。与此同时,该矩阵乘法器还可以节省功耗,进而提高整个卷积运算系统的性能。
下面将结合本申请中的附图,对本申请中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
近些年卷积神经网络在图像分类、图像识别、音频识别以及其他相关领域均有不俗的表现,因此,通过专用集成电路的方法加速卷积神经网络的运算,提升卷积神经网络的运行效率,缩短卷积神经网络的执行时间,已然成为了研究热点。卷积神经网络的主要运算组成为卷积计算和全连接计算,这两者占据了整个卷积神经网总运算量的95%以上。
严格意义上讲,卷积运算不等同于矩阵乘法运算,但是通过合理的数据调整,可以将卷积运算转化为矩阵乘法运算。示例性的,卷积神经网络包括K个卷积核,其中,每个卷积核都是三维的,即每个卷积核包括三个维度的数据,数据的长、宽和深度。卷积核的本质为滤波器,用于提取特征,其实质是一系列权重的组合。将K个卷积核某一方向上同一位置的N个元素提取出来,就可以得到N*K的权重矩阵,这样就可以将多个卷积核以多个权重矩阵的形式存储,当进行相关的卷积运算时,就可以调用权重矩阵,完成与输入矩阵之间的乘法运算。
全连接(full connected,FC)运算的本质是向量与矩阵的乘法运算,其也可以转化为矩阵与矩阵之间的乘法运算,基于上述描述,矩阵乘法运算的运算状态将直接影响卷积神经网络的运算性能,设计更高效的矩阵乘法器是提高卷积神经网络性能的关键。
图1为本申请实施例提供的矩阵乘法计算公式的示意图。如图1所示,示出了矩阵C=A*B的计算公式,其中,A为尺寸为M*K的左矩阵,B为尺寸为K*N的右矩阵,其中,M、N和K均为正整数。矩阵A和矩阵B相乘得到C矩阵,需要矩阵A的一个行向量中的所有数据与矩阵B的一个列向量中对应的数据做点乘运算后再累加,因此要得到矩阵C中的一个数据,就需要进行K次乘法运算,这样,得到整个矩阵C则需要M*K*N次乘法运算。
现有的矩阵乘法器采用脉动阵列计算方式,图2为本申请实施例提供的一种矩阵乘法器的结构示意图。如图所示,图中每个cell都代表一个乘法器,其中,左矩阵中每个行向量包括的元素依次输入至每一行的cell中,右矩阵中的每个列向量包括的元素依次输入至每一列的cell中。当cell接收到两个数据元素后,会将两个数据元素相乘,并将相乘的结果传输至下方的累加单元,并与上一次累加结果进行累加。如此,当数据满负荷运转时,该脉冲阵列会在每一个时钟周期得到一个中间值。
示例性的,以3*3脉冲矩阵为例:如图3所示,矩阵乘法器包括9个乘法器和多个乘 累加单元,图3中数字“1”到“9”依次表示“乘法器1”到“乘法器9”。在第一个时钟周期内,矩阵A中的元素a[0,0]和矩阵B中的元素b[0,0]输入至乘法器1([i,j]表示矩阵第i行第j列的元素),乘法器1对a[0,0]和b[0,0]进行乘法运算,并将得到的中间值传入第一乘累加单元中。在第二个时钟周期内,矩阵A中的元素a[0,0]传入乘法器2,元素a[0,1]将传入乘法器1,而矩阵B中的元素b[0,0]将传入乘法器4,元素b[1,0]将传入乘法器1。同时矩阵A中第二行向量中的元素a[1,0]传入乘法器4,矩阵B中的元素b[0,1]将传入乘法器2,此时乘法器1计算a[0,1]和b[1,0]的乘积,并将该乘积输入至第一乘累加单元,完成a[0,0]*b[0,0]+a[0,1]*b[1,0]。同时乘法器2完成a[0,0]*b[0,1],并将其存储在第二乘累加单元中,而乘法器4完成a[1,0]*b[0,0],存储在第四乘累加单元中。
按照上述模式,在第三个时钟周期内,a[0,0]将进入乘法器3,a[0,1]将进入乘法器2,a[0,2]将进入乘法器1,同时a[1,0]将进入乘法器5,a[1,1]将进入乘法器4,a[2,0]将进入乘法器7;同时b[0,0]将进入乘法器7,b[1,0]将进入乘法器4,b[2,0]将进入乘法器1,同时b[0,1]将进入乘法器5,b[1,1]将进入乘法器2,a[0,2]将进入乘法器3,各乘法器完成乘法运算后,将得到的结果传输至对应的乘累加单元中,并与乘累加单元中存储的上一时钟周期中间值进行累加,得到累加值。以此类推,可以得出,要实现3*3矩阵相乘,需要7个时钟周期,同时从上述计算过程中可以看出,在靠前的几个时钟周期内,有很多乘法器并未工作,整个矩阵乘法器的计算密度很低,这将严重影响矩阵乘法器的运算效率,同时利用该结构来进行矩阵运算时,需要大尺寸的数据才可达到流水执行的效果。同时计算尺寸比较固定,不灵活,因此亟需一种更高效的矩阵乘法器。
基于上述内容,本申请提供一种基于分形矩阵计算的矩阵乘法器,可以高效率、灵活且低能耗的对卷积神经网络中大量数据进行计算。
可以理解的,本申请实施例提供的矩阵乘法器不仅可以应用于机器学习、深度学习以及卷积神经网络等领域,也可以应用到数据图像处理和数据信号处理等领域,还可以应用在其他涉及矩阵乘法运算的领域。
图4为本申请实施例提供的一种矩阵乘法器的结构示意图,如图4所示,矩阵乘法器包括:第一存储器401、第二存储器402、运算电路403以及控制器404。其中,运算电路403可以通过总线与第一存储器401、第二存储器402和控制器404进行通信,第一存储器401用于存储左矩阵数据,第二存储器402用于存储右矩阵数据,运算电路403包括多个运算单元4031,每个运算4031则用于对输入矩阵包括的向量进行向量乘法运算,控制器404则控制第一存储器401和第二存储器402中矩阵向量的输出,依据预设的程序或者指令控制运算电路403完成矩阵乘法运算。
其中,第一存储器401用于存储左矩阵A,其尺寸为M*K,在左矩阵A中,第i行第j列的数据可以标记为a ij,i可以在1到M之间的正整数中任意取值,j可以在1到K之间的正整数中任意取值。第二存储器402用于存储右矩阵B,其尺寸为K*N,在右矩阵B中,第i行第j列的数据可以标记为b ij,i可以在1到K之间的正整数中任意取值,j可以在1到N之间的正整数中任意取值。
而运算电路403,可以包括X行Y列的运算单元4031(乘累加单元MAC),其中,每 个运算单元都可以各自独立的进行向量乘法运算。图4以运算电路403包括4*5个运算单元4031为例绘制,即X等于4,Y等于5。其中,运算单元403包括有两个输入,分别接收第一存储器401发送的左矩阵A以及第二存储器402发送的右矩阵B,并对左矩阵A的行向量与右矩阵B列向量进行向量乘法运算。具体的,一个运算单元4031包括向量乘法电路和加法电路,乘法电路用于完成行向量与列向量中对应元素的点乘运算,加法电路则用于对点乘结果进行累加得到每个运算单元输出的向量乘法结果。
请参考图5,图5为本申请实施例提供的一种运算单元4031的结构示意图。在一个可能的实施方式中,一个运算单元包括L个乘法器(图中L=4),运算单元4031中的加法电路则为乘累加单元,该乘累加单元由输入端口为(L+1)的加法树和第三存储器405构成,该加法树用来累加L个点乘结果,得到不同时钟周期下该运算单元的计算结果。第三存储器405,用来存储运算单元在每个时钟周期内的运算结果。其中,第三存储器405包括多个存储单元,每个运算单元都有指定的存储单元,用于存储每次的运算结果。
为了降低运算单元的功耗,本申请实施例基于图5所示的运算单元4031,对运算单元4031的硬件结构进行了改进,图6为本申请实施例提供的一种运算单元的结构示意图,其中运算单元中包括乘法器601,而乘法器601的输入端连接控制模块602,控制模块602是由门电路构成。其中,输入端A连接有寄存器603,用于暂存行向量中的某一元素,输入端B也通过寄存器604与乘法器601相连,用于暂存列向量中的某一元素,其中乘法器601的输出端包括有寄存器605,用于暂存乘法器的输出结果,寄存器603、604和605统一受时钟门控控制。
基于图6所示的运算单元,当行向量和列向量对应的元素中,有一个元素为0时,即乘法器的两个输入端中,有一端输入矩阵元素0时,就可以通过或门电路,产生第一门控信号,该门控信号在门控条件A下,可以关闭寄存器603,使得输入端A输入的元素不写入寄存器603,同时该门控信号在门控条件B下,关闭寄存器604,使得输入端B输入的元素不写入寄存器604,这样,乘法器也不会进行后续计算,而是保持上一轮计算结果。同时,第一门控信号可以关闭寄存器605,将寄存器605中的数据变为无效数据,然后输入端可以通过非门得到第二门控信号,根据第二门控信号在寄存器606中写入计算结果0,最后寄存器605和寄存器606中的数据通过与门得到最终输出结果0。
从上述例子可以看出,由于元素0和任何数字相乘都为0,若不增加该控制模块602,寄存器603、604会无差别的向乘法器601输入数据,即寄存器603、604将会被刷新为0,若上一轮寄存器中的元素不为0时,寄存器的状态就会发生翻转。然后乘法器601也需要照常进行乘法运算,同时也会发生翻转,这样将产生大量的耗电。但是增加了控制模块602后,只要输入值中有一个为0,那么寄存器603、604和605将不会被刷新,乘法器601也不会工作,而是直接输出计算结果0,只有当输入值均不为0时,寄存器和乘法器才会按照正常的流程刷新,这样,将大大减少寄存器和乘法器的耗电量,从而降低整个运算单元的功耗,进而提高整个矩阵乘法器的运算性能。
下面,对控制器404控制矩阵乘法器的矩阵乘法运算进行详细的描述:
(一)对矩阵进行拆分,得到分形矩阵:
由于矩阵运算受矩阵乘法器中包括的运算单元4031的个数限制,当进行矩阵乘法的两个矩阵尺寸很大时,就需要将原矩阵进行拆分,得到分形矩阵(子矩阵),然后以分形矩阵为整体,依次进行分形矩阵之间的乘法运算得到中间矩阵,最后根据分形矩阵的位置,进行累加,得到最终的结果。
分形矩阵是指把原矩阵,沿着行方向和列方向,按照一定的尺寸分割成单位矩阵。以左矩阵为例,如图7所示,左矩阵A为M*K的矩阵,即左矩阵A包括M行K列元素。要使得左矩阵A适应矩阵乘法器的大小(矩阵乘法器包括X行Y列运算单元),那么就可以确定单位矩阵P的行数为X,由于每个运算单元包括L个乘法器,可以在一个时钟周期内实现L个元素的点乘,因此可以确定单位矩阵P的列数为L,即单位矩阵P的尺寸为X*L。这样,就可以沿着行方向和列方向将左矩阵A划分为多个分形矩阵,每个分形矩阵的尺寸均为X*L。
控制器404对左矩阵A进行拆分,可以得到S*R个分形矩阵,在S*R个分形矩阵中,第s行r列的分形矩阵可以标记为A sr,其中,s的取值范围为1到S之间的任意正整数,r的取值范围为1到R之间的任意正整数。在本申请实施例中,对矩阵进行分形的目的是为了把大矩阵拆分为很多个符合矩阵乘法器大小的小矩阵,再以小矩阵为单位进行分形矩阵乘法,得到中间值矩阵,然后再通过一定的顺序对中间值矩阵进行累加排序,最终得到大矩阵的乘法结果。这样,可以灵活的进行计算,便于后续的复用以及多级缓存,进一步提升计算效率,降低数据搬运带宽和能耗。
在对左矩阵A(M*K)进行划分时,可能存在不能刚好被X*L的单位矩阵P整数划分的情况,即M/X或者K/L不为整数。在这种情况下,可以用O元素来填充对分形矩阵Asr进行补全操作,例如左矩阵A的尺寸为9*13,而单位矩阵的尺寸为3*4列,那么在对左矩阵A进行分形时,左矩阵A的第13列元素将会被剩余,那么仍然需要根据第13列元素得到三个分形矩阵A13、A23、A33,可以理解的,这三个分形矩阵的第一列元素为左矩阵A的第13列元素中的元素,而第二列、第三列、第四列元素均为O。或者,也可以不对元素进行补全,而是直接不参与运算,将运算结果赋予0即可,这样就可以节省运算单元的读取和运算的功耗。
可以理解的,右矩阵的分割方法与做左矩阵类似,由于右矩阵B是通过列方向输入至矩阵乘法器的,且右矩阵的大小为K*N,因此,可以确定右矩阵对应的单位矩阵Q的尺寸为L*Y,这样就可以沿着行方向和列方向将右矩阵B划分为多个分形矩阵,每个分形矩阵B的尺寸均为L*Y。控制器404对右矩阵B进行拆分,可以得到R*T个分形矩阵,在R*T个分形矩阵中,第r行t列的分形矩阵可以标记为B rt,其中,r的取值范围为1到R之间的任意正整数,t的取值范围为1到T之间的任意正整数。
需要说明的是,在对右矩阵进行划分时,也可能出现不能刚好被L*Y的单位矩阵整数划分的情况,即K/L或者N/Y不为整数。同样的,也可以用O元素来填充对分形矩阵Brt进行补全操作,或者不对元素进行补全,而是直接不参与运算,将运算结果赋予0即可。
在将左矩阵和右矩阵分别进行分形后,便可以输入运算电路403中进行分形矩阵之间的矩阵乘法运算,在具体的计算过程中,控制器404可以先选中左矩阵A中的任意分形矩 阵A sr(X*L),然后将A sr包括的X个行向量全部输入至运算单元4031中,即可以将A sr中的第一个行向量输入至第一行的运算单元4031中,将Asr中的第i个行向量输入至第i行的运算单元4031中,其中,i从1至X中依次取值。然后将A sr对应的右矩阵B的某一分形矩阵B rt(L*Y)也输入至运算单元4031中,即可以将B rt中的第i个列向量输入至第i列的运算单元4031中,其中,i从1至Y中依次取值。其中,同时输入运算单元的A sr和B rt中,r的取值相同。这样,在一个运算周期内,就可以得到两个分形矩阵相乘后得到的中间结果矩阵,其中,运算周期为运算单元完成两个分形矩阵的乘法运算所需要的时间,而运算单元则包括乘法器和乘累加单元。
如图8所示,提供了一种矩阵分形示意图,其中,左矩阵A的尺寸为M*K,右矩阵B的尺寸为K*N,若M等于12、K等于6、N等于12,且X等于4、Y等于4、L等于3时,就可以得到分形后的矩阵A以及分形后的矩阵B。其中,矩阵A包括3*2个分形矩阵(A sr,例如A11,A12,A21,A22,A31,A32),每个分形矩阵均为4*3的矩阵,矩阵B包括2*3个分形矩阵(B rt,例如B11,B12,B13,B21,B22,B23),每个分形矩阵均为3*4的矩阵。
这样,矩阵A与B相乘的结果可以转换为矩阵A的分形矩阵与矩阵B的分形矩阵的乘积,即:
(二)确定分形矩阵的计算顺序:
基于上述分形矩阵的乘法运算公式,针对某一个分形矩阵而言,需要与多个分形矩阵进行矩阵乘法运算,而运算电路403在每个矩阵运算周期内,都只能对两个分形矩阵进行乘法运算,那么就需要确定输入运算电路403的分形矩阵的顺序。示例性的,在上述例子中,矩阵A与矩阵B相乘得到的结果矩阵C,其第一行第一个元素C11=A11*B11+A12*B21,即要得到该第一个元素,需要先得到左分型矩阵A11与右分型矩阵B11的矩阵相乘结果,再得到左分型矩阵A12与右分型矩阵B21的矩阵相乘结果,然后再将两个矩阵相乘结果相加,那么控制器404就可以在第一个运算周期内控制运算电路403从第一存储器401获取分形矩阵A11的数据,以及控制运算电路403从第二存储器402获取分形矩阵B11的数据,然后由运算电路403得到A11*B11的运算结果,该运算结果为两个分型矩阵的乘法结果,然后控制器需要控制运算电路将该运算结果存储在矩阵乘法器的相乘结果累加单元中。其中,相乘结果累加单元用来累加多个由分型矩阵相乘得到的矩阵乘法结果。接着,控制器404在第二个运算周期内控制从运算电路403从第一存储器401获取分形矩阵A12的数据,以及控制运算电路403从第二存储器402获取分形矩阵B21的数据,从而由运算电路403在第二个运算周期内计算A12*B21的运算结果,同时并将该运算结果输入至上述相乘结果累加单元中,同时相乘结果累加单元需要立即将A12*B21的运算结果与上一轮获得的A11*B11的运算结果累加,得到中间累加结果,其中,运算周期是指运算电路403完成两个分形矩阵之间的乘法运算所用的时间。
若控制器404按照矩阵乘法顺序进行分形矩阵的乘法运算,第一存储器401和第二存储器402需要在每一个矩阵运算周期写入新数据,即第一存储器401和第二存储器402会在每个矩阵运算周期内发生状态翻转,这将使得存储器带来很大的功耗;同时相乘结果累加单元的累加周期也只有一个矩阵运算周期,即前一拍的运算结果均为下一拍的累加值,要求矩阵乘法器实现单拍累加操作。由于单拍累加操作对浮点运算意味着要么需要支持更多的并行电路处理,这将极大的增加矩阵乘法器的成本和设计难度。因此,本申请实施例要解决的技术问题就是如何降低存储器的读取功耗以及避免相乘结果累加单元的单拍累加操作,即延长相乘结果累加单元的累加运算周期。
在本申请实施例中,控制器404可以按照一定的规则复用某一个分形矩阵,示例性的,当控制器404控制第一存储器401读取左矩阵的某一分形矩阵A sr后,就可以在多个矩阵运算周期内复用该分形矩阵A sr,即在多个连续的矩阵运算周期内都保持运算电路403中的分形矩阵A sr不变,然后改变第二存储器402中的右矩阵的分形矩阵,完成该分形矩阵A sr与多个右矩阵的分形矩阵的乘法,并将得到的相乘结果矩阵先存储在相乘结果累加单元,待多个矩阵运算周期后,相乘结果累加单元再进行累加操作,这样,就可以第一存储器401就可以在多个运算周期不刷新数据,大大降低读取分形矩阵的功耗,同时相乘结果累加单元也无需单拍累加,降低矩阵乘法器的设计难度。
下面结合不同的场景对本申请实施例中分形矩阵的运算顺序进行详细的介绍:
(一)复用左矩阵的分形矩阵A sr
1、右矩阵的分形矩阵的列数T能被复用次数n整除,即Ceil(N/Y)%n==0:
控制器首先确定对第一存储器401中存储的左矩阵的分形矩阵A sr进行复用,然后根据矩阵乘法器的硬件结构来确定复用次数,该复用次数决定了相乘结果累加单元的累加周期,可以理解的,相乘结果累加周期为矩阵运算周期的复用次数n倍。
如图9所示,为本申请实施例提供的一种左矩阵A和右矩阵B的示意图,如图所示,矩阵A是由7*8个分形矩阵组成的,矩阵B是由8*8个分形矩阵组成的,由矩阵运算公式可得,分形矩阵A11需要和矩阵B中第一行的所有分形矩阵B1t(t依次取值为1至T)分别进行点乘,分形矩阵A12需要和矩阵B中第一行的所有分形矩阵B2t(t依次取值为1至T)分别进行点乘,即左矩阵中第r列的分形矩阵A sr需要与右矩阵中第r行的分形矩阵B rt分别进行矩阵乘,那么在分形矩阵A sr被复用时,就需要确定右矩阵的分形矩阵的列数T能否被复用次数n整除,若可以整除,就直接根据复用次数来对A sr进行复用。
示例性的,在图9中,若复用次数为4,右矩阵的分形矩阵的列数T为8,能够刚好整除,那么在第一个矩阵运算周期内,控制器404控制第一存储器401读取分形矩阵A11,控制第二存储器402读取分形矩阵B11,并将分形矩阵A11的行向量和分形矩阵B11列向量分别输入至运算电路403,完成A11*B11。
在第二个矩阵运算周期内,控制器404控制第一存储器401中的分形矩阵A11不变,控制第二存储器402读取分形矩阵B12,并将分形矩阵A11的行向量和分形矩阵B12列向量分别输入至运算电路403,完成A11*B12。
在第三个矩阵运算周期内,控制器404控制第一存储器401中的分形矩阵A11不变, 控制第二存储器402读取分形矩阵B13,并将分形矩阵A11的行向量和分形矩阵B13列向量分别输入至运算电路403,完成A11*B13。
在第四个矩阵运算周期内,控制器404控制第一存储器401中的分形矩阵A11不变,控制第二存储器402读取分形矩阵B14,并将分形矩阵A11的行向量和分形矩阵B14列向量分别输入至运算电路403,完成A11*B14。
在第五个矩阵运算周期内,由于分形矩阵A11的复用次数达到了4次,那么控制器404就需要刷新第一存储器401中的数据,控制第一存储器401读取分形矩阵A12,然后第二存储器402读取分形矩阵B21,并将分形矩阵A12的行向量和分形矩阵B21列向量分别输入至运算电路403,完成A12*B21。同时,在第五周期内,根据矩阵乘法运算公式,需要完成A11*B11和A12*B21的累加,这样,在获取到前一累加值后,经历过四个矩阵运算周期后,相应的相乘结果累加单元才进行一次累加。
依此类推,在第六、第七和第八周期内,控制器404需要第一存储器401中的分形矩阵A12保持不变,然后第二存储器402依次读取分形矩阵B22、B23和B24,并将分形矩阵A21的行向量和分形矩阵B22、B23和B24列向量分别输入至运算电路403,完成对应的分形矩阵的乘法运算,并分别完成累加操作。
依此类推,控制器404可以沿矩阵A的行方向依次输入待复用的分形矩阵Asr,当计算完第一行分形矩阵A1r后,再输入第二行A2r,即控制器404控制第一存储器401读取分形矩阵时,可以先确定Asr中s的取值不变,依次增大r的取值,然后再依次增大s的值。
当控制器404完成最后一个分形矩阵A78的复用后,即计算完A78*B84时,则需要重新从A11开始复用,分别计算A11*B15到A11*B18,完成分形矩阵A11的所有分形乘法,一次类推,再复用A12与B25至B28的所有分形矩阵乘法,直到完成A78与B85至B88的所有分形矩阵乘法,最终完成矩阵A和矩阵B的乘法运算。为了更直观的展示分形矩阵的复用情况,在上述应用场景下,数据搬运步骤可以如下表1所示:
表1
矩阵运算周期 第一存储器 第二存储器 计算
1 A11 B11 A11*B11
2 B12 A11*B12
3 B13 A11*B13
4 B14 A11*B13
5 A12 B21 A12*B21,A11*B11+A12*B21
6 B22 A12*B22,A11*B12+A12*B22
... ... ... ...
... A18 B84 A18*B84,...
... A21 B11 A21*B11
... ... ... ...
... A11 B15 A11*B15
... A11 B16 A11*B16
... ... ... ...
... A78 B88 A78*B88,...
2、右矩阵的分形矩阵的列数T不能被复用次数n整除,且余数大于等于2,即Ceil(N/Y)%n>=2:
当分形矩阵的列数T不能被复用次数n整除时,就会产生在左矩阵所有分形矩阵与n列右矩阵分形矩阵完成矩阵乘法后,左矩阵所有分形矩阵还需要和剩下几列右矩阵分形矩阵完成矩阵乘法,此时,就可以按照剩下的右矩阵分形矩阵的列数,调整复用次数。
如图10所示,为本申请实施例提供的另一种左矩阵A和右矩阵B的示意图,如图所示,矩阵A是由7*8个分形矩阵组成的,矩阵B是由8*6个分形矩阵组成的,即T等于6,由矩阵运算公式可得,分形矩阵A11需要和矩阵B中第一行的所有分形矩阵B1t(t依次取值为1至T)分别进行矩阵乘,分形矩阵A12需要和矩阵B中第一行的所有分形矩阵B2t(t依次取值为1至T)分别进行矩阵乘,即左矩阵中第r列的分形矩阵A sr需要与右矩阵中第r行的分形矩阵B rt分别进行点乘,那么在分形矩阵A sr被复用时,就需要确定复用次数n是否能被右矩阵的分形矩阵的列数T整除,其中,T不能被复用次数4整除,那么就需要先确定A sr的复用次数为4,当完成4列分形矩阵乘法运算后,再确定A sr的复用次数为2,完成A sr与后两列右分形矩阵的乘法。
示例性的,在图10中,先确定复用次数为4,那么在第一个矩阵运算周期内,控制器404控制第一存储器401读取分形矩阵A11,控制第二存储器402读取分形矩阵B11,并将分形矩阵A11的行向量和分形矩阵B11列向量分别输入至运算电路403,完成A11*B11。
请参考上述实施例,控制器404将在第二、第三、第四周期内控制第一存储器401中的分形矩阵A11不变,控制第二存储器402分别读取分形矩阵B12、B13和B14,并将对应的左分形矩阵的行向量和分形矩阵右分形矩阵的列向量分别输入至运算电路403,完成A11*B12、A11*B13和A11*B14。
在第五个矩阵运算周期内,由于分形矩阵A11的复用次数达到了4次,那么控制器404就需要刷新第一存储器401中的数据,控制第一存储器401读取分形矩阵A12,然后第二存储器402读取分形矩阵B21,并将分形矩阵A12的行向量和分形矩阵B21列向量分别输入至运算电路403,完成A12*B21。
同时,在第五周期内,根据矩阵乘法运算公式,需要完成A11*B11和A12*B21的累加,这样,在获取到前一累加值后,经历过四个矩阵运算周期后,相应的累加单元才进行一次累加。
依此类推,在第六、第七和第八周期内,控制器404需要第一存储器401中的分形矩阵A12保持不变,然后第二存储器402依次读取分形矩阵B22、B23和B24,并将分形矩阵A21的行向量和分形矩阵B22、B23和B24列向量分别输入至运算电路403,完成对应的分形矩阵的乘法运算,并分别完成累加操作。
依此类推,控制器404可以先沿矩阵A的行方向依次输入待复用的分形矩阵A sr,当计算完第一行分形矩阵A1r后,再输入第二行A2r,即控制器404控制第一存储器401读取分形矩阵时,可以先确定A sr中s的取值不变,依次增大r的取值,然后再依次增大s的值。
当控制器404完成最后一个分形矩阵A78的4次复用之后,左矩阵还需要与剩下的两行右矩阵的分形矩阵B rt(t=5或t=6)进行矩阵相乘并累加,此时,控制器404控制第一存储器401重新从A11开始读取分形矩阵数据,并修改复用次数n为2,即控制器404在一个矩阵运算周期内控制A11和B15进行矩阵乘,在下一矩阵运算周期就需要确定A11不变,完成A11和B15的矩阵乘法运算,然后在下一矩阵运算周期控制第一存储器401读取A12,控制A12与B25相乘,同时相乘结果累加单元在该周期内完成A11*B15与A12*B25的累加。
由上述运算过程的描述可以看出,左分形矩阵在与后两列右分形相乘时,累加周期变成了两个矩阵运算周期,此时对应的后两列右分形累加单元也不是单拍累加,因此减少了相乘结果累加单元的功耗。为了更直观的展示分形矩阵的复用情况,在上述应用场景下,数据搬运步骤可以如下表2所示:
表2
矩阵运算周期 第一存储器 第二存储器 计算
1 A11 B11 A11*B11
2 B12 A11*B12
3 B13 A11*B13
4 B14 A11*B13
5 A12 B21 A12*B21,A11*B11+A12*B21
6 B22 A12*B22,A11*B12+A12*B22
... ... ... ...
... A18 B84 A18*B84,...
... A21 B11 A21*B11
... ... ... ...
... A11 B15 A11*B15
... A11 B16 A11*B16
... A12 B25 A12*B25,A11*B15+A12*B25
... A12 B26 A12*B26,A11*B15+A12*B26
... ... ... ...
... A78 B86 A78*B86,...
示例性的,如图11所示,为本申请实施例提供的另一种左矩阵A和右矩阵B的示意图,与图10所示实施例不同,在图11中,矩阵A是由7*8个分形矩阵组成的,而矩阵B是由8*7个分形矩阵组成的,即T等于7。而T不能被复用次数4整除且余数为3,那么就可以先确定A sr的复用次数为4,当完成4列分形矩阵乘法运算后,再确定A sr的复用次数为3,完成A sr与后三列右分形矩阵的乘法,即左分形矩阵的复用次数将在与右分形矩阵最后的剩余列相乘时才发生变化,并且重新确定的复用次数则为余数。
示例性的,在图11中,先确定复用次数为4,那么在第一个矩阵运算周期内,控制器404控制第一存储器401读取分形矩阵A11,控制第二存储器402读取分形矩阵B11,并将分形矩阵A11的行向量和分形矩阵B11列向量分别输入至运算电路403,完成A11*B11。
请参考上述实施例,控制器404将在第二、第三、第四周期内控制第一存储器401中的分形矩阵A11不变,控制第二存储器402分别读取分形矩阵B12、B13和B14,并将对应的左分形矩阵的行向量和分形矩阵右分形矩阵的列向量分别输入至运算电路403,完成A11*B12、A11*B13和A11*B14。
在第五个矩阵运算周期内,由于分形矩阵A11的复用次数达到了4次,那么控制器404就需要刷新第一存储器401中的数据,控制第一存储器401读取分形矩阵A12,然后第二存储器402读取分形矩阵B21,并将分形矩阵A12的行向量和分形矩阵B21列向量分别输入至运算电路403,完成A12*B21。
同时,在第五周期内,根据矩阵乘法运算公式,需要完成A11*B11和A12*B21的累加,这样,在获取到前一累加值后,经历过四个矩阵运算周期后,相应的累加单元才进行一次累加。
依此类推,在第六、第七和第八周期内,控制器404需要第一存储器401中的分形矩阵A12保持不变,然后第二存储器402依次读取分形矩阵B22、B23和B24,并将分形矩阵A21的行向量和分形矩阵B22、B23和B24列向量分别输入至运算电路403,完成对应的分形矩阵的乘法运算,并分别完成相乘结果累加操作。
依此类推,控制器404可以先沿矩阵A的行方向依次输入待复用的分形矩阵A sr,当计算完第一行分形矩阵A1r后,再输入第二行A2r,即控制器404控制第一存储器401读取分形矩阵时,可以先确定A sr中s的取值不变,依次增大r的取值,然后再依次增大s的值。
当控制器404完成最后一个分形矩阵A78的4次复用之后,左矩阵还需要与剩下的三行右矩阵的分形矩阵B rt(t=5、t=6或t=7)进行矩阵相乘并累加,此时,控制器404控制第一存储器401重新从A11开始读取分形矩阵数据,并修改复用次数n为3,即控制器404在一个矩阵运算周期内控制A11和B15进行矩阵乘,在下一矩阵运算周期就需要确定A11不变,完成A11和B16的矩阵乘法运算,然后再在下一矩阵运算周期确定A11不变,完成A11和B17的矩阵乘法运算,然后在下一矩阵运算周期控制第一存储器401读取A12,控制A12与B25相乘,同时累加单元在该周期内完成A11*B15与A12*B25的累加。
由上述运算过程的描述可以看出,左分形矩阵在与后两列右分形相乘时,累加周期变成了三个矩阵运算周期,此时对应的后两列右分形累加单元也不是单拍累加,因此减少了累加单元的功耗。为了更直观的展示分形矩阵的复用情况,在上述应用场景下,数据搬运步骤可以如下表3所示:
表3
矩阵运算周期 第一存储器 第二存储器 计算
1 A11 B11 A11*B11
2 B12 A11*B12
3 B13 A11*B13
4 B14 A11*B13
5 A12 B21 A12*B21,A11*B11+A12*B21
6 B22 A12*B22,A11*B12+A12*B22
... ... ... ...
... A18 B84 A18*B84,...
... A21 B11 A21*B11
... ... ... ...
... A11 B15 A11*B15
... A11 B16 A11*B16
... A11 B17 A11*B17
... A12 B25 A12*B25,A11*B15+A12*B25
... A12 B26 A12*B26,A11*B16+A12*B26
... A12 B27 A12*B27,A11*B17+A12*B27
... ... ... ...
... A78 B87 A78*B87,...
3、右矩阵的分形矩阵的列数T不能被复用次数n整除,且余数等于1,即Cei l(N/Y)%n=1:
通过上述描述,还存在一个特殊的场景,即T除以n后,余数为1,即只有一列右分形矩阵被留下,如果按照复用次数进行复用,那么当左分形矩阵与最后一列右分形矩阵相乘时,相乘结果累加单元就需要进行单拍累加,此时就需要更多的并行单元来支撑相乘结果累加单元的运行,为了避免相乘结果累计单元需要执行单拍累加,那么就可以调整复用次数n,即可以在左分形矩阵与最后n+1列右分形矩阵相乘时,调整复用次数,保证复用次数不小于2。
示例性的,如图12所示,为本申请实施例提供的另一种左矩阵A和右矩阵B的示意图,如图所示,矩阵A是由7*8个分形矩阵组成的,矩阵B是由8*5个分形矩阵组成的,即T等于5,其中,T不能被复用次数4整除且余数为1,那么为了避免累加单元需要单拍累加的情况出现,那么就可以先确定A sr的复用次数为3,当完成3列分形矩阵乘法运算后,再确定A sr的复用次数为2,完成A sr与后两列右分形矩阵的乘法。
在第一个矩阵运算周期内,控制器404控制第一存储器401读取分形矩阵A11,控制第二存储器402读取分形矩阵B11,并将分形矩阵A11的行向量和分形矩阵B11列向量分别输入至运算电路403,完成A11*B11。
请参考上述实施例,控制器404将在第二和第三周期内控制第一存储器401中的分形矩阵A11不变,控制第二存储器402分别读取分形矩阵B12和B13,并将对应的左分形矩阵的行向量和分形矩阵右分形矩阵的列向量分别输入至运算电路403,完成A11*B12和A11*B13。
在第四个矩阵运算周期内,由于分形矩阵A11的复用次数达到了3次,那么控制器404就需要刷新第一存储器401中的数据,控制第一存储器401读取分形矩阵A12,然后第二存储器402读取分形矩阵B21,并将分形矩阵A12的行向量和分形矩阵B21列向量分别输入至运算电路403,完成A12*B21。
同时,在第四周期内,根据矩阵乘法运算公式,需要完成A11*B11和A12*B21的累加,这样,在获取到前一累加值后,经历过三个矩阵运算周期后,相应的累加单元才进行一次累加。
依此类推,在第六和第七周期内,控制器404需要第一存储器401中的分形矩阵A12保持不变,然后第二存储器402依次读取分形矩阵B22和B23,并将分形矩阵A21的行向量和分形矩阵B22和B23列向量分别输入至运算电路403,完成对应的分形矩阵的乘法运算,并分别完成累加操作。
依此类推,控制器404可以先沿矩阵A的行方向依次输入待复用的分形矩阵A sr,当计算完第一行分形矩阵A1r后,再输入第二行A2r,即控制器404控制第一存储器401读取分形矩阵时,可以先确定A sr中s的取值不变,依次增大r的取值,然后再依次增大s的值。
当控制器404完成最后一个分形矩阵A78的3次复用之后,左矩阵还需要与剩下的两行右矩阵的分形矩阵B rt(t=4或t=5)进行矩阵相乘并累加,此时,控制器404控制第一存储器401重新从A11开始读取分形矩阵数据,并修改复用次数n为2,即控制器404在一个矩阵运算周期内控制A11和B14进行矩阵乘,在下一矩阵运算周期就需要确定A11不变,完成A11和B15的矩阵乘法运算,然后在下一矩阵运算周期控制第一存储器401读取A12,控制A12与B24相乘,同时累加单元在该周期内完成A11*B14与A12*B24的累加。
由上述运算过程的描述可以看出,左分形矩阵在与后两列右分形相乘时,累加周期从三个矩阵运算周期变成了两个矩阵运算周期,相乘结果累加单元均不是单拍累加,因此减少了相乘结果累加单元的功耗。为了更直观的展示分形矩阵的复用情况,在上述应用场景下,数据搬运步骤可以如下表4所示:
表4
矩阵运算周期 第一存储器 第二存储器 计算
1 A11 B11 A11*B11
2 B12 A11*B12
3 B13 A11*B13
4 A12 B21 A12*B21,A11*B11+A12*B21
5 A12 B22 A12*B22,A11*B12+A12*B22
... ... ... ...
... A18 B83 A18*B83,...
... A21 B11 A21*B11
... ... ... ...
... A11 B14 A11*B14
... A11 B15 A11*B15
... A12 B24 A12*B24,A11*B14+A12*B24
... A12 B25 A12*B25,A11*B15+A12*B25
... ... ... ...
... A78 B85 A78*B85,...
(二)复用右矩阵的分形矩阵Brt:
可以理解的,服务器404不仅可以复用第一存储器401读取的左矩阵的分形矩阵A sr,还可以复用右矩阵的分形矩阵B rt,即控制器404先确定复用次数n,当第二存储器402读取某一分形矩阵B rt后,控制器404控制第二存储器402中的B rt在n个矩阵运算周期内保持不变,控制第一存储器401在不同的矩阵运算周期内不断读取新的左矩阵的分形矩阵A sr,可以理解的,复用右矩阵的分形矩阵B rt和上述复用左矩阵的分形矩阵A sr原理类似,仅仅是复用对象不同。
可以理解的,复用右矩阵的分形矩阵B rt的场景也分为多种,从矩阵运算公式可以看出,右分形矩阵B rt需要与左分形矩阵A sr相乘,其中,r的值相同,s将从1至S取值,即每一个右分形矩阵都需要与一列左分形矩阵相乘,因此,复用右矩阵的分形矩阵B rt的场景可以分为:
1、左矩阵的分形矩阵的行数S能被复用次数n整除,即Ceil(M/X)%n==0。
2、左矩阵的分形矩阵的行数S不能被复用次数n整除,且余数大于等于2,即Ceil(M/X)%n>=2。
3、左矩阵的分形矩阵的行数S不能被复用次数n整除,且余数等于1,即Ceil(M/X)%n=1。
其中,若左矩阵的分形矩阵的行数S能被复用次数n整除,那么就保持复用次数n不变,即第二存储器402依次读取右分形矩阵B rt,并且每读一个右分形矩阵,就保持该分形矩阵在n个矩阵运算周期内保持不变,在第n+1个矩阵运算周期时,刷新一次数据,读取下一个右分形矩阵,而第一存储器401在需要在每个矩阵运算周期内分别读取不同的左分形矩阵,可以先依次输入前n行左分形矩阵,待全部的右分形矩阵B rt复用n次后,再依次输入后n行左分形矩阵。具体的复用过程可以参考左分形矩阵复用的情况,在此不做赘述。
若左矩阵的分形矩阵的行数S不能被复用次数n整除,并且余数大于等于2时,就可以先根据复用次数对右分形矩阵进行复用,当剩余余数行左分形矩阵时,就将复用次数更改为余数次,由于余数大于等于2,所以其对应的相乘结果累加单元也不会出现需要单拍累加的情况,这样就可以避免过多并行电路的设计。具体的复用过程可以参考左分形矩阵复用的情况,在此不做赘述。
若左矩阵的分形矩阵的行数S不能被复用次数n整除,并且余数等于1时,如果一直按照复用次数复用右分形矩阵,就会最后只剩下一行左分形矩阵,那么就需要调整复用次数,保证最后剩余的左分形矩阵的行数大于等于2,这样就可以保证相乘结果累加单元不出现需要单拍累加的情况。具体的复用过程可以参考左分形矩阵复用的情况,在此不做赘述。
可以理解的,在一种特殊的应用场景下,即左矩阵只包括一行分形矩阵,右矩阵只包括一列分形矩阵,这样,相乘结果累加单元势必需要单拍操作,这该种情况下,控制器404可以控制第一存储器401或者第二存储器402间歇性读取左分形矩阵或者右分形矩阵,示例性的,第一存储器401可以每隔两个矩阵运算周期才读取一次左分形矩阵A sr,这样,就可以避免累加单元需要单拍累加的情况发生,避免过多并行电路的设计。
基于图4所示的运算电路403中的运算单元的排布方式,以及上述控制器404的控制状态,图13为本申请实施例提供的一种具体的运算电路403中的布线示意图。
其中,BUFA是图4中左矩阵的第一存储器401,BUFB是图4中右矩阵的第二存储器402,BUFC为存储各个运算单元4031的运算结果的第三存储器,运算电路603中包括X行*Y列(假设X=4,Y=4)的运算单元即图中的MAC GRP R00COO至MAC GRP R03CO3,其中,每一个运算单元MAC GRP都可以进行一个左分形矩阵的一个行向量和一个右分形矩阵的一个列向量的乘积运算。
运算电路403是由3-D MAC阵列(MAC Cube)和累加器(Accumulator)组成的,用于执行分形的矩阵乘法指令,如下C=A*B或者C=A*B+C’,其中A、B、C和C’均为二维矩阵。在实际执行过程中,两个矩阵的乘法会以分形方式,控制器会控制大矩阵分解为适应乘法器硬件尺寸的分型矩阵,并按照特定的顺序(上述方式)组合完成。
其中,MAC的具体架构请参考上述图5和图6所示结构,包括乘法器和加法树。在矩阵乘法层面,该乘累加器可以运行一行乘一列并累加的运算,即结果矩阵中的一个元素。
可以理解的,图13所示的布线示意图,可以支持运算电路403在一个时钟周期(矩阵运算周期)内完成一个左分形矩阵和一个右分形矩阵的矩阵乘法运算,因此,Asr的所有X个行向量和Brt的所有Y个列向量均可以通过图13所示的布线方式,从对应的BUFA和BUFB中同时到达对应的运算单元4031,因此,控制器404可以控制运算电路403在一个时钟周期内一个左分形矩阵和一个右分形矩阵的矩阵乘法运算,同时,在下一个时钟周期内又完成下一个左分形矩阵和一个右分形矩阵的矩阵乘法运算。
下面对运算单元4031中的乘法器进行介绍,由图5和图6所示的运算单元的结构可以看出,运算单元1031中包含有L个乘法器和(L+1)个加法树,其中乘法器可以采用布斯算法Booth乘法器结构,图14为本申请实施例提供的一种Booth乘法器的结构示意图,如图所示,该Booth乘法器由三部分组成:Booth编码器(Booth Encoder)、加法树(Adder Tree)和进位加法器(Carry Propagate Adder)。
其中,乘法器包括两个输入端口,输入的两个数字一个需要输入至Booth编码器,另一个需要输入至xxx中,送到Booth编码器的数字,会产生一系列的部份积,会有一定动态功耗开销,频繁翻转Booth编码器的状态将会产生大量的功耗。因此,在本申请实施例中,可以选择低翻转率的信号送到乘法器中的Booth Encoder输入端,以此减低Booth Encoder及其相关逻辑的翻转率,因此最终降低动态功耗。示例性的,在上述控制器404控制分形矩阵运算顺序中,当控制器复用左分形矩阵A sr时,就需要将Asr输入至Booth Encoder,当控制器复用右分形矩阵B rt时,就需要将B rt输入至Booth Encoder。
其中,输入端的判断信号可以由控制器404来确定,控制器404实施判断分形矩阵的应用场景,根据分形矩阵的复用情况来生成控制信号送到MAC计算单元中,从而控制送到Booth编码器的数字。
下面对矩阵乘法器的整体结构进行说明,图15为本申请实施例提供的一种矩阵乘法器的结构示意图,如图15所示,矩阵乘法器包括还指令分发单元406、取值单元407、数据搬运单元408、矢量单元409、标量单元410和总线接口单元411。进一步的,本申请实施 例提供的矩阵乘法器可以作为协处理器挂载到中央处理器(central processing unit,CPU)80上,由CPU为矩阵乘法器分配计算任务,具体的,CPU80可以将左矩阵和右矩阵以及相关指令存储在外部存储器70上,矩阵乘法器通过读取外部存储器70上的左矩阵、右矩阵以及相关指令来完成矩阵乘法运算。其中,外部存储器70可以为双倍数据率同步动态随机存储器(double data rate synchronous dynamic random access memory,DDR)或者其他可读可写的存储器,外部存储器可以为私有于矩阵乘法器的存储器。具体的,第一存储器401、第二存储器402、第三存储器405以及外部存储器70一般都为片上存储器(On-Chip Buffer),其中:
矢量单元409(vector unit)为含有各类型多并行度的计算器件(如浮点乘法,浮点加法,浮点大小比较等……),其用于执行SIMD(Single Instruction multiple data)指令,并且负责统一缓存(Unified Buffer)与L0C缓存直接的数据搬运。
标量单元410(Scalar Unit)为含有各类型整形的基本运算器件(如加法,乘法,比较,移位等……)。
数据搬运单元408(direct memory access unit,DMA Unit)用于搬运各个存储单元中的数据,如将数据从外部存储器70搬运至第一存储器401中,具体的,数据搬运单元在从矩阵乘法器的外部存储器或者内部存储器搬运参与乘法运算的矩阵数据时,需要将矩阵按照分块后的结果进行存储。
取指单元407(instruction fetch unit,IFU)即为取指令的模块,内部集成了程序计数器和指令存储器,通过总线接口单元411从主存获取指令,并解码和控制执行流程。
其中,指令分发单元406(Dispatch Unit)用于取指单元407传输的指令进行解析,然后提交指令对应类型指令到4个流水线单元,其中,流水线单元即为图中所示的标量单元,数据搬运单元,矢量单元和分形矩阵乘法单元。指令分发单元有机制的控制4个流水线之间的执行保序。
需要说明的是,上述流水线单元有异步执行和同步执行两种类型,所有类型指令均为保序发射,区别是异步执行单元执行指令异步结束,同步执行单元执行指令同步结束。其中,标量单元为同步执行单元,分形矩阵乘法单元、数据搬运单元和矢量单元异步执行。
可以理解的,本申请实施例并不局限于矩阵乘法器内的数据搬运,从外部存储器到内部存储器的搬运也可以利用数据复用性来达到减少带宽,优化能耗的目的。本发明实施例不限定矩阵数据拆分的方式和搬运的顺序,数据搬运应当将数据复用最大化,已达到在每个单位时间,分型矩阵计算均在满负荷运行。
本申请实施例中通过多级缓存结构,利用矩阵分形的数据复用,分形指令的执行顺序以及分形指令以上的软件控制顺序,可以实现多级缓存数据重用,降低了对紧耦合片上存储器的依赖,优化了能效,降低了软件编程复杂度。
本申请提供了一种矩阵乘法器,通过对大尺寸矩阵按照矩阵乘法器中运算单元的规格进行分形,将大尺寸矩阵的乘法运算转化为多个分形矩阵的乘累加计算,同时,通过复用分形矩阵的方式,改变分形矩阵之间的运算顺序,达到降低存储器读取功耗,避免累加单元出现单拍累加的功能,这样,可以大大降低矩阵乘法器的运算功耗,并且降低矩阵乘法 器的设计难度,提高了矩阵乘法的运算效率。
以上对本申请实施例所提供的矩阵乘法器进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (24)

  1. 一种矩阵乘法器,其特征在于,所述矩阵乘法器包括:运算电路和控制器;
    所述运算电路与所述控制器连接;
    所述控制器用于执行以下动作:
    控制所述运算电路在n个连续时钟周期内复用一个左分形矩阵A sr;其中,所述左分形矩阵A sr为左矩阵包括的任意一个分形矩阵,所述左矩阵为M*K矩阵;
    控制所述运算电路在所述n个连续时钟周期的每个时钟周期内使用n个右分形矩阵中的一个右分形矩阵B rt;所述一个右分形矩阵B rt为右矩阵包括的第r行的一个分形矩阵,所述n个右分形矩阵为所述右矩阵包括的第r行的n个连续的右分形矩阵;所述右矩阵为K*N矩阵;其中,所述M、所述K、所述N、所述s、所述r和所述t均为大于0的正整数,所述n为大于2的正整数;
    所述运算电路用于执行以下动作:
    在所述n个连续的时钟周期中的每个时钟周期内,将所述左分形矩阵与所述n个右分形矩阵中的一个右分形矩阵进行相乘,以得到n个矩阵运算结果。
  2. 根据权利要求1所述的矩阵乘法器,其特征在于,所述运算电路具体用于:
    在所述n个连续的时钟周期中的第i个时钟周期,计算A sr*B rt;以及,
    在所述n个连续的时钟周期中的第i+1个时钟周期,计算A sr*B r(t+1),其中,1≤i<n。
  3. 根据权利要求1所述的矩阵乘法器,其特征在于,所述控制器还用于执行以下步骤:
    控制所述运算电路在n个连续时钟周期内复用一个右分形矩阵B rt;其中,所述右分形矩阵B rt为所述右矩阵包括的任意一个分形矩阵;
    控制所述运算电路在所述n个连续时钟周期的每个时钟周期内使用n个左分形矩阵中的一个左分形矩阵A sr;所述左分形矩阵A sr为右矩阵包括的第r列的一个分形矩阵,所述n个左分形矩阵为所述右矩阵包括的第r列的n个连续的左分形矩阵;
    所述运算电路还用于执行以下动作:
    在所述n个连续的时钟周期中的每个时钟周期,将所述n个左分形矩阵中的一个左分形矩阵A sr与所述右分形矩阵B rt进行相乘,以得到n个矩阵运算结果。
  4. 根据权利要求3所述的矩阵乘法器,其特征在于,所述运算电路具体用于:
    在所述n个连续的时钟周期中的第i个时钟周期,计算A sr*B rt;以及,
    在所述n个连续的时钟周期中的第i+1个时钟周期,计算A (s+1)r*B rt,其中,1≤i<n。
  5. 根据权利要求1至4任一项所述的矩阵乘法器,其特征在于,所述运算电路包括X行*Y列运算单元,所述每个运算单元用于在一个时钟周期内对所述左分形矩阵的一个行向量数据和所述右分形矩阵的一个列向量数据进行向量乘法运算,并得到运算结果;其中,所述每个运算单元包括L个乘法器,所述L个乘法器中的每个乘法器用于执行所述行向量数据中的一个数据元素和所述列向量数据中的一个数据元素之间的乘法运算;
    所述控制器还用于执行以下动作:
    以规模为X*L的子块为单位,对所述左矩阵进行分块,得到S*R个左分形矩阵,并将所述S*R个左分形矩阵中的第s行第r列的左分形矩阵标记为A sr,其中,S和R均为大于 0的正整数,s为1至S中的任意正整数,r为1至R中的任意正整数;
    以规模为L*Y的子块为单位,对所述右矩阵进行分块,得到R*T个右分形矩阵,并将所述R*T个右分形矩阵中的第r行第t列的右分形矩阵标记为B rt,其中,R和T均为大于0的正整数,r为1至R中的任意正整数,t为1至T中的任意正整数。
  6. 根据权利要求5所述的矩阵乘法器,其特征在于,所述矩阵乘法器还包括第一存储器和第二存储器;
    其中,所述第一存储器和所述第二存储器分别与所述运算电路相连;
    所述第一存储器用于存储所述左矩阵,读取所述左分形矩阵并将所述左分形矩阵输入至所述运算电路中;
    所述第二存储器用于存储所述右矩阵,读取所述右分形矩阵并将所述右分形矩阵输入至所述运算电路中;
    当所述控制器控制所述运算电路复用所述一个左分形矩阵A sr时,所述控制器具体执行以下步骤:
    当所述T能被所述n整除时,所述控制器控制所述运算电路将所述一个左分形矩阵A sr复用n次;
    当所述运算电路将所述一个左分形矩阵A sr复用n次后,控制所述运算电路将左分形矩阵A s(r+1)复用n次。
  7. 根据权利要求6所述的矩阵乘法器,其特征在于,当所述控制器控制所述运算电路复用所述一个左分形矩阵A sr时,所述控制器还用于执行以下步骤:
    当所述T不能被所述n整除,且余数c大于等于2时,所述控制器先控制所述运算电路将所述一个左分形矩阵A sr复用n次;
    当剩余c列右分形矩阵B rt时,所述控制器控制所述运算电路将所述一个左分形矩阵A sr复用c次。
  8. 根据权利要求6所述的矩阵乘法器,其特征在于,当所述控制器控制所述运算电路复用所述一个左分形矩阵A sr时,所述控制器还用于执行以下步骤:
    当所述T不能被所述n整除,且余数c等于1时,控制所述运算电路将所述一个左分形矩阵A sr复用n次;
    当剩余n+1列右分形矩阵B rt时,所述控制器再控制所述运算电路将所述一个左分形矩阵A sr复用z次;其中,z为大于等于2小于等于n-1的正整数;
    所述控制器最后控制所述运算电路将所述一个左分形矩阵A sr复用q次;其中,q为大于等于2的正整数。
  9. 根据权利要求6所述的矩阵乘法器,其特征在于,当所述控制器控制所述运算电路复用所述一个右分形矩阵B rt时,所述控制器还执行以下步骤:
    当所述T能被所述n整除时,控制所述运算电路将所述一个右分形矩阵B rt复用n次;
    当所述运算电路将所述一个右分形矩阵B rt复用n次后,控制所述运算电路将左分形矩阵B (r+1)t复用n次。
  10. 根据权利要求6所述的矩阵乘法器,其特征在于,当所述控制器控制所述运算电路 复用所述一个右分形矩阵B rt时,所述控制器还执行以下步骤:
    当所述S不能被所述n整除,且余数c大于等于2时,先控制所述运算电路将所述一个右分形矩阵B rt复用n次;
    当剩余c行左分形矩阵A sr时,控制所述运算电路将所述一个右分形矩阵B rt复用c次。
  11. 根据权利要求6所述的矩阵乘法器,其特征在于,当所述控制器控制所述运算电路复用所述一个右分形矩阵B rt时,所述控制器还执行以下步骤:
    当所述T不能被所述n整除,且余数c等于1时,先控制所述运算电路将所述一个右分形矩阵B rt复用n次;
    当剩余n+1行左分形矩阵A sr时,控制所述运算电路将所述一个右分形矩阵B rt复用p次;其中,p为大于等于2小于等于n-1的正整数;
    最后控制所述运算电路将所述一个右分形矩阵B rt复用f次,其中,f为大于等于2的正整数。
  12. 根据权利要求1至11任一项所述的矩阵乘法器,其特征在于,所述L个乘法器中的每个乘法器还包括:输入端A,输入端B,控制模块,第一寄存器、第二寄存器和第三寄存器;
    所述输入端A和所述输入端B与所述控制模块相连,所述控制模块与所述第一寄存器、所述第二寄存器和所述第三寄存器相连;
    所述输入端A用于向所述第一寄存器输入行向量中的第一数据元素;
    所述输入端B用于向所述第二寄存器输入列向量中的第二数据元素,所述第一数据元素和所述第二数据元素对应;
    所述第一寄存器用于存储所述第一数据元素并向所述乘法器输入所述第一数据元素;所述第二寄存器用于存储所述第二数据元素并向所述乘法器输入所述第二数据元素;
    所述乘法器用于接收所述第一寄存器和所述第二寄存器输入的所述第一数据元素和所述第二数据元素,并对所述第一数据元素和所述第二数据元素进行乘法运算;
    所述控制模块用于根据所述输入端A和所述输入端B接收到的所述第一数据元素和所述第一数据元素产生控制信号,所述控制信号用于控制所述第一寄存器、所述第二寄存器和所述第三寄存器的开关状态。
  13. 根据权利要求12所述的矩阵乘法器,其特征在于,所述控制模块具体用于:
    当所述输入端A接收到的所述第一数据元素或者所述输入段B接收到的所述第二数据元素为0时,所述控制模块控制所述第一寄存器和所述第二寄存器关断;所述控制器产生第一控制信号,所述第一控制信号用于向所述第三寄存器写入输出结果0,并将所述输出结果输出;
    当所述输入端A接收到的所述第一数据元素或者所述输入段B接收到的所述第二数据元素均不为0时,所述控制模块控制所述第一寄存器和所述第二寄存器闭合,并控制所述第三寄存器关断;
    所述控制器控制所述第一寄存器读取所述第一数据元素,控制所述第二寄存器读取所述第二数据元素,并控制所述所述乘法器对所述第一数据元素和所述第二数据元素进行乘 法运算,得到运算结果,并将所述运算结果输出。
  14. 一种矩阵乘的方法,其特征在于,所述方法包括:
    获取一个左分形矩阵A sr和n个右分形矩阵;其中,所述左分形矩阵A sr为左矩阵包括的任意一个分形矩阵,所述左矩阵为M*K矩阵;所述n个右分形矩阵为所述右矩阵包括的第r行的n个连续的右分形矩阵,所述右矩阵为K*N矩阵;其中,所述M、所述K、所述N、所述s、所述r和所述t均为大于0的正整数,所述n为大于2的正整数;
    控制运算电路在n个连续时钟周期内复用所述一个左分形矩阵A sr
    控制所述运算电路在所述n个连续时钟周期内使用所述n个右分形矩阵中的一个右分形矩阵B rt,其中,所述一个右分形矩阵B rt为右矩阵包括的第r行的一个分形矩阵;
    在所述n个时钟连续周期中的每个时钟周期内,将所述左分形矩阵A sr与所述n个右分形矩阵中的一个右分形矩阵B rt进行相乘,以得到n个矩阵运算结果。
  15. 根据权利要求14所述的方法,其特征在于,所述在所述n个时钟连续周期中的每个时钟周期内,将所述左分形矩阵A sr与所述n个右分形矩阵中的一个右分形矩阵B rt进行相乘,以得到n个矩阵运算结果,包括:
    在所述n个连续的时钟周期中的第i个时钟周期,控制所述运算电路计算A sr*B rt
    在所述n个连续的时钟周期中的第i+1个时钟周期,控制所述运算电路计算A sr*B r(t+1),其中,1≤i<n。
  16. 根据权利要求14所述的方法,其特征在于,所述方法还包括:
    控制所述运算电路在所述n个连续时钟周期内复用一个右分形矩阵B rt;其中,所述右分形矩阵B rt为所述右矩阵包括的任意一个分形矩阵;
    控制所述运算电路在所述n个连续时钟周期的每个时钟周期内使用n个左分形矩阵中的一个左分形矩阵A sr;所述一个左分形矩阵A sr为右矩阵包括的第r列的一个分形矩阵,所述n个左分形矩阵为所述右矩阵包括的第r列的n个连续的左分形矩阵;
    在所述n个连续的时钟周期中的每个时钟周期,将所述n个中的一个左分形矩阵A sr与所述右分形矩阵B rt进行相乘,以得到n个矩阵运算结果。
  17. 根据权利要求16所述的方法,其特征在于,所述在所述n个连续的时钟周期中的每个时钟周期,将所述n个中的一个左分形矩阵A sr与所述右分形矩阵B rt进行相乘,以得到n个矩阵运算结果,包括:
    在所述n个连续的时钟周期中的第i个时钟周期,控制所述运算电路计算A sr*B rt
    在所述n个连续的时钟周期中的第i+1个时钟周期,控制所述运算电路计算A (s+1)r*B rt,其中,1≤i<n。
  18. 根据权利要求14至17任一项所述的方法,其特征在于,所述方法还包括:
    以规模为X*L的子块为单位,对所述左矩阵进行分块,得到S*R个左分形矩阵;
    将所述S*R个左分形矩阵中的第s行第r列的左分形矩阵标记为A sr,其中,S和R均为大于0的正整数,s为1至S中的任意正整数,r为1至R中的任意正整数;
    以规模为L*Y的子块为单位,对所述右矩阵进行分块,得到R*T个右分形矩阵;
    将所述R*T个右分形矩阵中的第r行第t列的右分形矩阵标记为B rt,其中,R和T 均为大于0的正整数,r为1至R中的任意正整数,t为1至T中的任意正整数;
    其中,所述运算电路包括X行*Y列运算单元,所述每个运算单元用于在一个时钟周期内对左分形矩阵Asr的一个行向量数据和右分形矩阵Brt的一个列向量数据进行向量乘法运算,并得到运算结果;其中,所述每个运算单元包括L个乘法器,所述L个乘法器中的每个乘法器用于执行所述行向量数据中的一个数据元素和所述列向量数据中的一个数据元素之间的乘法运算。
  19. 根据权利要求18所述的方法,其特征在于,所述方法还包括:
    当所述T能被所述n整除时,控制所述运算电路将每个左分形矩阵Asr复用n次;
    当所述运算电路将所述一个左分形矩阵A sr复用n次后,控制所述运算电路将左分形矩阵A s(r+1)复用n次。
  20. 根据权利要求18所述的方法,其特征在于,所述方法还包括:
    当所述T不能被所述n整除,且余数c大于等于2时,先控制所述运算电路将所述一个左分形矩阵A sr复用n次;
    当剩余c列右分形矩阵B rt时,再控制所述运算电路将所述一个左分形矩阵A sr复用c次。
  21. 根据权利要求18所述的方法,其特征在于,所述方法还包括:
    当所述T不能被所述n整除,且余数c等于1时,先控制所述运算电路将所述一个左分形矩阵A sr复用n次;
    当剩余n+1列右分形矩阵B rt时,再控制所述运算电路将所述一个左分形矩阵A sr复用z次;其中,z为大于等于2小于等于n-1的正整数;
    最后控制所述运算电路将所述一个左分形矩阵A sr复用q次;其中,q为大于等于2的正整数。
  22. 根据权利要求18所述的方法,其特征在于,所述方法还包括:
    当所述T能被所述n整除时,控制所述运算电路将所述一个右分形矩阵B rt复用n次;
    当所述运算电路将所述一个右分形矩阵B rt复用n次后,控制所述运算电路将左分形矩阵B (r+1)t复用n次。
  23. 根据权利要求18所述的方法,其特征在于,所述方法还包括:
    当所述S不能被所述n整除,且余数c大于等于2时,先控制所述运算电路将所述一个右分形矩阵B rt复用n次;
    当剩余c行左分形矩阵A sr时,控制所述运算电路将所述一个右分形矩阵B rt复用c次.
  24. 根据权利要求18所述的方法,其特征在于,所述方法还包括:
    当所述T不能被所述n整除,且余数c等于1时,先控制所述运算电路将所述一个右分形矩阵B rt复用n次;
    当剩余n+1行左分形矩阵A sr时,再控制所述运算电路将所述一个右分形矩阵B rt复用p次;其中,p为大于等于2小于等于n-1的正整数;
    最后控制所述运算电路将所述一个右分形矩阵B rt复用f次,其中,f为大于等于2的正整数。
CN202180089847.XA 2021-04-26 2021-04-26 一种矩阵乘法器及矩阵乘法器的控制方法 Pending CN116710912A (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2021/089880 WO2022226721A1 (zh) 2021-04-26 2021-04-26 一种矩阵乘法器及矩阵乘法器的控制方法

Publications (1)

Publication Number Publication Date
CN116710912A true CN116710912A (zh) 2023-09-05

Family

ID=83847588

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202180089847.XA Pending CN116710912A (zh) 2021-04-26 2021-04-26 一种矩阵乘法器及矩阵乘法器的控制方法

Country Status (4)

Country Link
US (1) US20240119114A1 (zh)
EP (1) EP4318275A4 (zh)
CN (1) CN116710912A (zh)
WO (1) WO2022226721A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117573709A (zh) * 2023-10-23 2024-02-20 昆易电子科技(上海)有限公司 数据处理系统、电子设备及介质

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115878957B (zh) * 2022-12-29 2023-08-29 珠海市欧冶半导体有限公司 一种矩阵乘法加速装置及方法
CN116108902B (zh) * 2023-02-22 2024-01-05 成都登临科技有限公司 采样操作实现系统、方法、电子设备及存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104899182B (zh) * 2015-06-09 2017-10-31 中国人民解放军国防科学技术大学 一种支持可变分块的矩阵乘加速方法
CN109992743B (zh) * 2017-12-29 2020-06-16 华为技术有限公司 矩阵乘法器
US11501140B2 (en) * 2018-06-19 2022-11-15 International Business Machines Corporation Runtime reconfigurable neural network processor core
US11714875B2 (en) * 2019-12-28 2023-08-01 Intel Corporation Apparatuses, methods, and systems for instructions of a matrix operations accelerator
CN111581595B (zh) * 2020-04-24 2024-02-13 科大讯飞股份有限公司 一种矩阵乘法计算方法及计算电路

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117573709A (zh) * 2023-10-23 2024-02-20 昆易电子科技(上海)有限公司 数据处理系统、电子设备及介质

Also Published As

Publication number Publication date
EP4318275A4 (en) 2024-06-26
EP4318275A1 (en) 2024-02-07
WO2022226721A1 (zh) 2022-11-03
US20240119114A1 (en) 2024-04-11

Similar Documents

Publication Publication Date Title
KR102492477B1 (ko) 행렬 곱셈기
CN108805266B (zh) 一种可重构cnn高并发卷积加速器
CN106940815B (zh) 一种可编程卷积神经网络协处理器ip核
CN110222308B (zh) 一种矩阵乘矩阵运算方法及装置
CN107301456B (zh) 基于向量处理器的深度神经网络多核加速实现方法
CN116710912A (zh) 一种矩阵乘法器及矩阵乘法器的控制方法
CN112612521A (zh) 一种用于执行矩阵乘运算的装置和方法
WO2019205617A1 (zh) 一种矩阵乘法的计算方法及装置
US11983616B2 (en) Methods and apparatus for constructing digital circuits for performing matrix operations
CN114781632B (zh) 基于动态可重构脉动张量运算引擎的深度神经网络加速器
Que et al. Recurrent neural networks with column-wise matrix–vector multiplication on FPGAs
US5422836A (en) Circuit arrangement for calculating matrix operations in signal processing
CN113157638B (zh) 一种低功耗存储器内计算处理器和处理运算方法
CN109615061B (zh) 一种卷积运算方法及装置
US20220164137A1 (en) Memory for an Artificial Neural Network Accelerator
CN111178492B (zh) 计算装置及相关产品、执行人工神经网络模型的计算方法
CN111522776A (zh) 一种计算架构
CN113890508A (zh) 一种批处理fir算法的硬件实现方法和硬件系统
US12086453B2 (en) Memory for an artificial neural network accelerator
CN115081600A (zh) 执行Winograd卷积的变换单元、集成电路装置及板卡
CN115081603A (zh) 执行Winograd卷积的计算装置、集成电路装置及板卡
Wang et al. An FPGA-based reconfigurable CNN training accelerator using decomposable Winograd
WO2020059156A1 (en) Data processing system, method, and program
Chen et al. Edge FPGA-based onsite neural network training
CN113392959B (zh) 一种在计算系统中重构架构的方法及计算系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination