CN112579971B - 矩阵运算电路、矩阵运算装置及矩阵运算方法 - Google Patents
矩阵运算电路、矩阵运算装置及矩阵运算方法 Download PDFInfo
- Publication number
- CN112579971B CN112579971B CN201910935231.4A CN201910935231A CN112579971B CN 112579971 B CN112579971 B CN 112579971B CN 201910935231 A CN201910935231 A CN 201910935231A CN 112579971 B CN112579971 B CN 112579971B
- Authority
- CN
- China
- Prior art keywords
- matrix
- data
- instruction
- matrix operation
- memory
- 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.)
- Active
Links
- 239000011159 matrix material Substances 0.000 title claims abstract description 438
- 238000000034 method Methods 0.000 title claims abstract description 27
- 239000013598 vector Substances 0.000 claims description 38
- 230000004044 response Effects 0.000 abstract description 6
- 238000010586 diagram Methods 0.000 description 15
- 238000012545 processing Methods 0.000 description 5
- 238000004590 computer program Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Advance Control (AREA)
Abstract
本发明提供了一种矩阵运算电路、矩阵运算装置及矩阵运算方法,矩阵运算电路包括:控制单元和以阵列方式排布的多个运算单元;所述控制单元用于接收矩阵运算指令,并响应于所述矩阵运算指令控制所述多个运算单元中的每个运算单元执行所述矩阵运算指令所指示的运算操作,其中,所述矩阵运算指令为单条指令。在这种情况下,控制单元响应于接收的一条指令控制运算单元进行指令所指示的运算操作,矩阵运算电路能够根据指令以及输入的数据进行运算,各个运算单元之间的能够进行独立的运算,由此,能够提高矩阵运算电路的整体运算效率。
Description
技术领域
本发明涉及一种矩阵运算电路、矩阵运算装置及矩阵运算方法。
背景技术
随着科学技术的发展,人类社会正在快速进入智能时代。智能时代的重要特点,就是人们获得数据的种类越来越多,获得数据的量越来越大,而对处理数据的速度要求越来越高。由于智能时代的数据种类繁多且数量巨大,所以要求芯片既具有极高的灵活性,能处理不同领域且日新月异的算法,又具有极强的处理能力,能快速处理极大的且急剧增长的数据量。
矩阵运算作为计算机的重要运算能力之一,以目前的运算方式,如果是单核处理器(CPU,Central Processing Unit),会将矩阵拆解成标量进行运算,通过组合标量指令实现矩阵的运算;如果是多核处理器(CPU,Central Processing Unit),可能会通过多个核并行执行各自的标量指令,组合实现整个矩阵运算。如果是图形处理器(GPU,GraphicsProcessing Unit)会将矩阵运算拆解成多条指令运算,这些指令主要是向量指令,通过组合执行向量指令实现矩阵的运算。
然而,上述运算方法都有着底层程序复杂,一般需要多层循环实现矩阵运算、缓存大小受到限制、需要指令分支跳转或者多次组合等缺陷,这极大的影响了矩阵运算的速度和效率。
发明内容
本发明有鉴于上述现有技术的状况而完成,其目的在于提供一种底层程序简单、缓存依赖低和运算效率高的矩阵运算电路、矩阵运算装置及矩阵运算方法。
为此,本公开的一个方面提供了一种矩阵运算电路,其特征在于,包括:控制单元和以阵列方式排布的多个运算单元;所述控制单元用于接收矩阵运算指令,并响应于所述矩阵运算指令控制所述多个运算单元中的至少两个运算单元执行所述矩阵运算指令所指示的矩阵运算,其中,所述矩阵运算指令为单条指令。
在本公开的一个方面所涉及的矩阵运算电路中,运算单元以阵列的方式排布在矩阵运算电路中,控制单元响应与接收的指令并控制运算单元进行指令所指示的运算操作,在这种情况下,矩阵运算电路能够根据指令以及输入的数据进行运算,各个运算单元之间的能够进行独立的运算,由此,能够提高矩阵运算电路的整体运算效率。
另外,在本公开的一个方面所涉及的矩阵运算电路中,可选地,所述矩阵运算指令包括指令名、目的地址寄存器、第一源地址寄存器和第二源地址寄存器。在这种情况下,一条指令可以指向存储有目的地址、第一数据地址和第二数据地址的寄存器,由此,矩阵运算电路能够根据存储在寄存器中的地址获取相应的数据信息。
另外,在本公开的一个方面所涉及的矩阵运算电路中,可选地,所述控制单元用于接收所述矩阵运算指令,并响应于所述矩阵运算指令控制所述多个运算单元中的至少两个运算单元执行所述矩阵运算指令所指示的矩阵运算,包括:所述控制单元用于从所述矩阵运算指令中所述第一源地址寄存器所指向的存储器位置,以第一预设的读取方式读取第一数据,将所述读取的所述第一数据逐个依序分配至所述多个运算单元中参与运算的运算单元;从所述矩阵运算指令中所述第二源地址寄存器所指向的存储器位置,以第二预设的读取方式读取第二数据,将所述读取的所述第二数据逐个依序分配至所述参与运算的运算单元;每个所述参与运算的运算单元分别对分配的数据进行运算。在这种情况下,控制单元从指令中指向的第一源地址寄存器和第二源地址寄存器中分别得到第一矩阵地址和第二矩阵地址,获取存储于上述地址中的第一数据和第二数据,并将第一数据和第二数据依序分配给矩阵运算电路中的各个运算单元,运算单元的第一输入寄存器能够获取被分配的第一数据,第二输入寄存器能够获取被分配的第二数据,由此,运算单元能够根据第一数据和第二数据进行计算。
另外,在本公开的一个方面所涉及的矩阵运算电路中,可选地,所述第一数据为矩阵数据,所述第二数据为矩阵数据、向量数据、标量数据或常数;所述运算包括对所述第一数据中的每个点与所述第二数据之间的乘、加或比较。由此,能够实现矩阵的多种类型的运算。
另外,在本公开的一个方面所涉及的矩阵运算电路中,可选地,所述运算单元包括第一输入寄存器、第二输入寄存器以及输出寄存器,所述第一输入寄存器用于保存第一数据;所述第二输入寄存器用于保存第二数据;所述输出寄存器用于保存所述运算操作的结果。由此,运算单元能够通过第一输入寄存器和第二输入寄存器获取数据,并通过输出寄存器存储和输出运算结果。
另外,在本公开的一个方面所涉及的矩阵运算电路中,可选地,所述矩阵运算指令基于RISC-V的指令格式编码。由此,能够基于通用RISC-V基础指令和扩展指令进行灵活的编程。
另外,在本公开的一个方面所涉及的矩阵运算电路中,可选地,所述运算单元包括加法电路、乘法电路和比较电路。由此,能够实现矩阵的加法运算、乘法运算和比较运算。
另外,在本公开的一个方面所涉及的矩阵运算电路中,可选地,若所述第一数据的维度大于所述以阵列方式排布的多个运算单元的阵列的维度,则将所述第一数据划分为多个第一子数据,所述第一子数据的维度小于或等于所述多个运算单元的阵列的维度,所述参与运算的运算单元为所述多个运算单元的一部分或所述多个运算单元的每一个;若所述第一数据的维度小于所述以阵列方式排布的多个运算单元的阵列的维度,所述参与运算的运算单元为所述多个运算单元的一部分;或若所述第一数据的维度等于所述以阵列方式排布的多个运算单元的阵列的维度,所述参与运算的运算单元为所述多个运算单元的每一个。由此,矩阵运算电路能够适用于任意大小的矩阵。
另外,在本公开的一个方面所涉及的矩阵运算电路中,可选地,所述输出寄存器还用于保存针对部分所述第一数据与部分所述第二数据运算的中间结果。由此,能够提高矩阵运算电路的大矩阵运算的能力。
此外,本公开的另一方面提供了一种矩阵运算装置,其特征在于,包括:执行模块,其具有如上所述的矩阵运算电路;存储模块,其包括用于存储矩阵运算指令的指令存储器、以及用于存储所述第一数据、所述第二数据及所述目的数据的数据存储器;取指模块,其用于从所述指令存储器中取出矩阵运算指令;以及解码模块,其用于接收并解码由所述取指模块取出的矩阵运算指令,所述解码模块将解码后的矩阵运算指令发送至所述执行模块,其中,所述执行模块响应于所述解码后的矩阵运算指令,通过所述矩阵运算电路执行所述解码后的矩阵运算指令,并在执行完成后将运算结果通过所述输出寄存器发送到所述数据存储器中。
在本公开的另一方面所涉及的矩阵运算装置中,取指模块能够将从存储模块中取出的指令发送至解码模块进行解码,执行模块再根据指令信息从存储模块中获取矩阵数据并进行运算,在这种情况下,矩阵运算电路能够在执行模块中进行运算,由此,矩阵运算装置能够对各种类型的矩阵进行运算。
另外,在本公开的另一方面所涉及的矩阵运算装置中,可选地,所述执行模块被实施为算数运算单元、逻辑运算单元、存取单元和浮点运算单元中的至少一个。由此,矩阵运算装置能够对矩阵进行多种类型的运算。
另外,在本公开的另一方面所涉及的矩阵运算装置中,可选地,还包括用于向量运算的向量寄存器和用于表示矩阵数据属性的定制寄存器。由此,能够提高矩阵运算装置的灵活性,从而适应更多不同的应用场景。
另外,在本公开的另一方面所涉及的矩阵运算装置中,可选地,所述矩阵数据属性包括输入到所述矩阵运算电路的输入矩阵的行数、所述输入矩阵的列数、从所述矩阵运算电路输出的输出矩阵的行数、所述输出矩阵的列数、以及所述输入矩阵与所述输出矩阵的行向量间隔和列向量间隔。由此,能够根据矩阵数据属性更好地分配矩阵运算电路的运算方式。
另外,本公开的第3方面提供了一种矩阵运算方法,是基于矩阵运算电路的矩阵运算方法,其特征在于,包括:从指令存储器中取出指令;对所述矩阵运算指令进行解码,并将解码后的指令发送至所述矩阵运算电路;基于解码后的指令,所述矩阵运算电路从数据存储器中获取所述第一数据和所述第二数据并进行运算,在运算完成后将运算结果存储到所述数据存储器中。
在本公开的第3方面所涉及的矩阵运算方法中,矩阵运算电路能够基于解码后的指令获取矩阵数据并进行计算,由此,能够通过指令控制矩阵运算电路的运算过程。
另外,本公开的第4方面提供了一种芯片,其特征在于,包括如上所述的矩阵运算电路。
另外,本公开的第5方面提供了一种装置,其特征在于,包括如上所述的芯片。
另外,本公开的第6方面提供了一种计算设备,其特征在于:包括处理器和存储器,所述处理器执行所述存储器存储的计算机指令,使得所述计算设备执行如上所述的矩阵运算方法。
另外,本公开的第7方面提供了一种计算机可读存储介质,其特征在于:存储有计算机程序,并且当所述计算机程序被处理器执行时实现包括如上所述矩阵运算方法的步骤。
另外,本公开的第8方面提供了一种计算机程序产品,其特征在于:包括计算机指令,当所述计算机指令被计算设备执行时,所述计算设备可以执行如上所述的矩阵运算方法。
根据本发明,能够提供一种底层程序简单、缓存依赖低和运算效率高的矩阵运算电路、矩阵运算装置及矩阵运算方法。
附图说明
现在将仅通过参考附图的例子进一步详细地解释本公开的实施例,其中:
图1是示出了本公开的实施方式所涉及的矩阵运算电路的***示意框图。
图2是示出了本公开的实施方式所涉及的矩阵运算电路的运算单元阵列11结构示意图。
图3是示出了本公开的实施方式所涉及的矩阵运算电路的运算单元功能示意图。
图4是示出了本公开的实施方式所涉及的矩阵运算电路的运算单元结构示意图。
图5是示出了本公开的实施方式所涉及的矩阵运算电路的矩阵运算实施例。
图6是示出了本公开的实施方式所涉及的矩阵运算电路的数据存取示意图。
图7是示出了本公开的实施方式所涉及的矩阵运算装置的装置框图。
图8是示出了本公开的实施方式所涉及的矩阵运算装置的执行模块的示意框图。
图9是示出了本公开的实施方式所涉及的矩阵运算电路的方法流程图。
附图标号说明:
1…矩阵运算装置,10…执行模块,20…取指模块,30…解码模块,40…存储模块,41…指令存储器,42…数据存储器,50…控制模块,100…矩阵运算电路,11…运算单元阵列,110…运算单元,111…第一输入寄存器,112…第二输入寄存器,113…输出寄存器,120…控制单元,2…外部控制程序。
具体实施方式
下面,结合附图和具体实施方式,进一步详细地说明本发明。在附图中,相同的部件或具有相同功能的部件采用相同的符号标记,省略对其的重复说明。
图1是示出了本公开的实施方式所涉及的矩阵运算电路100的***示意框图。图2是示出了本公开的实施方式所涉及的矩阵运算电路100的运算单元阵列11结构示意图。
如图1所示,本公开的实施方式所涉及的矩阵运算电路100,其包括控制单元120和以阵列方式排布的多个运算单元110(有时也称为“运算单元阵列11”)(参见图2)。控制单元120用于接收矩阵运算指令,并响应于矩阵运算指令控制多个运算单元110中的至少两个运算单元110执行矩阵运算指令所指示的矩阵运算,其中,矩阵运算指令为单条指令。
在本公开的实施方式所涉及的矩阵运算电路100中,运算单元110以阵列的方式排布在矩阵运算电路100中,控制单元120响应与接收的指令并控制运算单元110进行指令所指示的运算操作,在这种情况下,矩阵运算电路100能够根据指令以及输入的数据进行运算,各个运算单元110之间的能够进行独立的运算,由此,能够提高矩阵运算电路100的整体运算效率。
在一些示例中,矩阵运算电路100可以是多核或众核***中的一个核上的运算电路。
图3是示出了本公开的实施方式所涉及的矩阵运算电路100的运算单元110功能示意图。图4是示出了本公开的实施方式所涉及的矩阵运算电路100的运算单元110结构示意图。
如图4所示,在本实施方式中,运算单元110可以包括运算电路、第一输入寄存器111以及第二输入寄存器112,第一输入寄存器用于保存第一数据,第二输入寄存器用于保存第二数据。其中,第一数据为矩阵数据,第二数据可以为矩阵数据、向量数据、标量数据或常数。
为了描述方便,下面以第一数据和第二数据均为矩阵为例进行描述,并将第一数据表述为第一矩阵,第二数据表述为第二矩阵。
在一些示例中,运算单元110还可以包括输出寄存器113,输出寄存器113用于保存运算操作的结果。由此,能够通过输出寄存器113存储和输出运算结果。
在一些示例中,输出寄存器113还可以用于保存针对部分第一矩阵与部分第二矩阵运算的中间结果。由此,能够提高矩阵运算电路100的大矩阵运算的能力。
如图3所示,在一些示例中,运算单元可以包括加法电路、乘法电路和比较电路。由此,能够实现矩阵的加法运算、乘法运算和比较运算。在一些示例中,根据控制单元120可以通过控制运算电路对输入In1和输入In2进行加法、乘法或比较中的一种或多种运算。
在一些示例中,运算单元110所形成的阵列的行数可以大于或等于1,列数可以大于或等于2。由此,运算电路中能够包括形成为阵列的多个运算单元110。在另一些示例中,行数可以大于或等于2,列数可以大于或等于1。
在一些示例中,运算单元110中所包括的加法电路可以为半加器或全加器。
在本实施方式中,控制单元120可以用于接收矩阵运算指令并响应于矩阵运算指令控制多个运算单元110中的至少两个运算单元110执行矩阵运算指令所指示的矩阵运算,包括:控制单元120用于从矩阵运算指令指示的第一源地址寄存器(稍后描述)指向的存储器位置,以预设的读取方式读取第一矩阵,将读取的第一矩阵逐个依序分配给多个运算单元110,并存储在对应的第一输入寄存器111中;从矩阵运算指令指示第二源地址寄存器(稍后描述)指向的存储器位置读取第二矩阵,以预设的读取方式读取第二矩阵,将读取的第二矩阵逐个依序分配给多个运算单元110,并存储在对应的第二输入寄存器112中;多个运算单元110中的每个运算单元110对第一输入寄存器111中的数据和第二输入寄存器112中的数据进行算术运算。在这种情况下,控制单元120从矩阵运算指令中的第一源地址寄存器和第二源地址寄存器中分别得到存储器中第一矩阵的存储地址和第二矩阵的存储地址,根据第一矩阵和第二矩阵的存储地址获取存储于上述地址中的第一矩阵和第二矩阵,并将第一矩阵和第二矩阵逐个依序分配给矩阵运算电路100中的各个运算单元110,运算单元110的第一输入寄存器111能够获取被分配的第一矩阵,第二输入寄存器112能够获取被分配的第二矩阵,由此,运算单元110能够将第一输入寄存器111中的第一矩阵和第二输入寄存器112中的第二矩阵作为运算单元110中的加法电路、乘法电路或比较电路的输入进行加法、乘法或比较运算。
在一些示例中,第一矩阵可以以连续存储的方式存储于数据存储器42(稍后描述)中。由此,能够便于控制单元120进行存取,从而提高控制单元120的存取效率。
在另一些示例中,第一矩阵可以以不连续存储的方式存储于数据存储器42中,例如,第一矩阵的第一行可以与第二行之间的地址存在间隔。在这种情况下,控制单元120需要根据定制寄存器(稍后描述)中第一矩阵的参数中的行间隔参数得到第二行在数据存储器42中的地址,由此,能够准确的获取第一矩阵中的数据。此外,第二矩阵可以以与第一矩阵相同的存储方式存储或与第一矩阵不同的存储方式存储。
在本实施方式中,若第一数据的维度大于以阵列方式排布的多个运算单元110的阵列的维度,则将第一数据划分为多个第一子数据,第一子数据的维度小于或等于多个运算单元110的阵列的维度,参与运算的运算单元110为多个运算单元110的一部分或多个运算单元110的每一个;若第一数据的维度小于以阵列方式排布的多个运算单元110的阵列的维度,参与运算的运算单元110为多个运算单元110的一部分;或若第一数据的维度等于以阵列方式排布的多个运算单元110的阵列的维度,参与运算的运算单元110为多个运算单元110的每一个。由此,矩阵运算电路能够适用于任意大小的矩阵。
具体而言,以第一矩阵为例,当第一矩阵中的行或列大于矩阵运算电路100中多个运算单元110所排列成的阵列的行或列的时候,控制单元120可以设定第一矩阵的读取方式,并存储与定制寄存器中。在这种情况下,第一矩阵可以被控制单元120划分为能够被矩阵运算电路100处理的矩阵大小,由此,矩阵运算电路100能够对任意大小的矩阵进行运算。此外,第二矩阵可以以与第一矩阵相对应的方式被控制单元120输入矩阵运算电路100。
在一些示例中,矩阵运算包括第一数据中的每个点与所述第二数据之间的乘、加或比较。当第一数据和第二数据均为矩阵时,运算包括两个矩阵的点对点相乘、点对点相加或点对点比较。例如:对第一矩阵和第二矩阵中相同行列位置上两个数据相乘、相加或比较;当第一数据为矩阵,第二数据为行向量时,第一矩阵中的各列上的点与相同维度的行向量中的每个点相乘、相加或比较;或当第一数据为矩阵,第二数据为列向量时,第一矩阵中各行上的点与相同维度的列向量中的每个点相乘、相加或比较。具体而言,矩阵中的点可以是指排列成矩阵的多个元素中的一个元素。由此,能够实现矩阵的多种类型的运算。
在一些示例中,预设的读取方式可以包括:根据多个运算单元110的数量,读取与多个运算单元110的数量相应数量的矩阵数据。由此,矩阵运算电路100能够适用于任意大小的矩阵。
在一些示例中,预设的读取方式还可以包括:根据定制寄存器中的矩阵属性读取矩阵数据,矩阵属性包括:输入到矩阵运算电路100的输入矩阵的行数、输入矩阵的列数、从矩阵运算电路100输出的输出矩阵的行数、输出矩阵的列数、以及输入矩阵与输出矩阵的行向量间隔和列向量间隔。由此,控制单元120能够根据矩阵数据属性控制矩阵数据的提取方式,并获取地址之间的间隔。在这种情况下,如果第一矩阵和第二矩阵属性不同,则,预设的读取方式也不同;如果第一矩阵和第二矩阵属性相同,则,预设的读取方式相同。
在一些示例中,逐个依序分配是指控制单元120将取出的多个数据,按顺序为每一个运算单元分配一个数据。在一些示例中,控制单元120可以同时提取多个数据。在另一些示例中,控制单元120可以一次提取一个数据。
在一些示例中,矩阵运算指令可以由控制模块50(稍后描述)发出,并由具有矩阵运算电路100的执行模块10(稍后描述)接收。在这种情况下,矩阵运算电路100可以接收来自控制模块50的矩阵运算指令,由此,矩阵运算电路100能够受到控制模块50的控制。
在一些示例中,矩阵运算指令可以包括指令名、目的地址寄存器、第一源地址寄存器和第二源地址寄存器。具体而言,矩阵运算装置中包括寄存器60(参见图7),目的地址寄存器、第一源地址寄存器和第二源地址寄存器属于寄存器60中的通用寄存器。在这种情况下,一条矩阵运算指令可以指向存储有目的地址、第一源地址和第二源地址的寄存器,由此,矩阵运算电路100能够根据存储在寄存器中的地址获取相应的信息。
具体而言,第一源地址寄存器中保存的是在存储器中存储的第一矩阵的地址,通过该地址可以定位到第一矩阵的首地址;第二源地址寄存器中保存的是存储器中存储的第二矩阵的地址,通过该地址可以定位到第二矩阵的首地址;目的地址寄存器中保存的是存储器中即将保存的目的矩阵的地址,通过该地址可以定位到目的矩阵的首地址。
在一些示例中,上面均以第二数据为矩阵为例进行了描述,但是,在本发明实施方式中,与第二数据的类型相对应,第二源地址寄存器可以存储有矩阵地址、向量地址、标量地址或常数地址中的一种或多种。由此,第二输入寄存器能够通过第二源地址寄存器获取不同类型的数据。
在另一些示例中,矩阵运算指令还可以包括指令功能和控制指令。在这种情况下,一条矩阵运算指令可以包括有更多的信息,由此,能够提高矩阵运算指令的信息容量以及传输效率。在一些示例中,控制指令可以用于控制运算电路执行预定的运算操作。由此,能够通过矩阵运算指令控制运算单元阵列11中的各个运算单元110的运算情况。具体而言,运算操作包括乘法、加法或比较中的一种或多种的组合。
在一些示例中,运算单元110还包括用于接收矩阵运算指令并响应于矩阵运算指令控制运算电路的控制电路。由此,能够通过控制电路对运算电路进行控制。在一些示例中,运算单元110接收的矩阵运算指令可以来自于控制模块50。
在一些示例中,运算单元阵列11中的运算单元110可以数据存储器42直接相连。由此,能够提高运算单元阵列11整体的数据传输效率。在另一些示例中,运算单元110可以通过总线与数据存储器42通信连接。
在一些示例中,控制单元120根据矩阵运算指令所指示的地址,在数据存储器42中找到对应的第一矩阵存储的位置并取出预定的数据,并将每个数据分配给一个运算单元并存储于运算单元的第一输入寄存器中。在另一些示例中,设置第一寄存器组,寄存器组中的寄存器可以与运算单元阵列11中相对应的运算单元110依次连接。由此,能够便于寄存器存取运算单元110中的数据。
在一些示例中,在运算过程中,控制单元120将第一矩阵依次输送至对应的运算单元阵列110中的第一输入寄存器111中,并将第二矩阵逐个依次输送至对应的运算单元阵列110中的第二输入寄存器112中。在这种情况下,运算单元阵列110中的每个运算单元计算第一矩阵和第二矩阵中的对应的一个点的运算,由多个运算单元同时共同完成两个矩阵的运算,控制单元120能够无需等待运算单元110运算完成后再输入数据,由此,能够从整体上实现运算的同时进行数据的输入。
在一些示例中,矩阵运算指令基于RISC-V的指令格式编码。由此,能够基于通用RISC-V基础指令和扩展指令进行灵活的编程。
在一些示例中,基于RISC-V的指令规则,可编码数为32比特,其中,0-6位是主码Custom-3,7-11位是目的寄存器名称,12-14位是可选控制位,15-19位是源操作数1寄存器,20-24位是源操作数2寄存器,25位也是可选控制位,26-31位是指令功能编码位。
另外,矩阵运算指令格式也完全遵循RISC-V的指令格式,不同的矩阵运算指令格式如下表1所示:
表1矩阵运算指令格式
其中,目的地址寄存器可以为目的矩阵地址寄存器,第一源地址寄存器可以为第一矩阵地址寄存器,第二源地址寄存器可以为第二矩阵地址寄存器、向量地址寄存器或常数寄存器。
如上所述,当需要进行矩阵与矩阵之间的运算时,矩阵运算指令中需要包含指令名、目的地址寄存器、第一源地址寄存器和第二源地址寄存器。
当需要进行矩阵与向量之间的运算时,矩阵运算指令中需要包含指令名、目的地址寄存器、第一源地址寄存器和向量地址寄存器。
当需要进行矩阵与常数之间的运算时,矩阵运算指令中需要包含指令名、目的地址寄存器、第一源地址寄存器和常数寄存器。
当需要进行单矩阵的运算时,矩阵运算指令中需要包含指令名、目的地址寄存器和第一源地址寄存器。
在一些示例中,当需要进行矩阵与向量之间的运算时,控制单元120从向量地址寄存器中获取向量地址,通过向量地址获取存储于数据存储器42中的向量数据,其中,当该向量是行向量,且其长度等于第一矩阵的宽度时,将该向量数据中的各个元素依序分配至第一矩阵中与该元素对应的那一列中的各个运算单元110,由此,第二输入寄存器112能够获取被分配的向量数据,再通过运算单元110中的加法电路、乘法电路或比较电路进行运算;当向量是列向量,且其长度等于第一矩阵的高度时,将该向量数据中的各个元素依序分配至第一矩阵中与该元素对应的那一行中的各个运算单元110,由此,第二输入寄存器112能够获取被分配的向量数据,再通过运算单元110中的加法电路、乘法电路或比较电路进行运算。
在一些示例中,当需要进行矩阵与常数之间的运算时,控制单元120从常数寄存器中获取常数,并将该常数分配至与第一矩阵对应的每个运算单元110中,再通过运算单元110中的加法电路、乘法电路或比较电路进行运算。
以下,结合图5和图6对本实施方式所涉及的矩阵运算电路100进行进一步的详细描述。图5是示出了本公开的实施方式所涉及的矩阵运算电路100的矩阵运算实施例。图6是示出了本公开的实施方式所涉及的矩阵运算电路100的数据存取示意图。
下面以待计算的矩阵维度小于或等于运算单元阵列11维度为例,描述矩阵运算的过程。
如图5所示,第一矩阵M1为具有a11至aM1行,a11至a1N列的矩阵,也即具有M行N列的矩阵,第一矩阵M1按照从上至下的顺序将每一行中的数据依次存储的方式存入数据存储器42中,第二矩阵M2为具有b11至bM1行,b11至b1N列的矩阵,第二矩阵M2按照从上至下的顺序将每一行中的数据依次存储的方式存入数据存储器42中(参见图6)。运算单元阵列11由X行Y列的运算单元组成,X大于或等于M,Y大于或等于N,X、Y、M、N均为正整数。
控制单元接收矩阵运算指令,根据矩阵运算指令,矩阵运算电路100执行第一矩阵M1与第二矩阵M2之间的加法运算,此时,控制单元120根据矩阵运算指令中指向的第一矩阵地址R1寄存器得到第一矩阵地址R1,该第一矩阵地址R1为第一矩阵M1在数据存储器42中的存储从首地址,控制单元120根据第一矩阵地址R1在数据存储器42中找到第一矩阵M1中的a11至aMN的数据,将第一矩阵M1的数据逐个依序分配至运算单元阵列PU11至PUXY中的与该第一矩阵M1对应的参与运算的运算单元。当X=M,Y=N,则全部运算单元参与运算,如果X>M,Y>N,则部分运算单元参与运算。
例如,如果第一矩阵按照行方向依序保存,则取出第一矩阵后,在运算单元阵列11行方向上将第一数据依次分配给每个运算单元,从而,在与第一数据aij对应位置上的运算单元PUij将获得数据aij,aij存储于该运算单元的第一输入寄存器中。
类似的,控制单元120根据矩阵运算指令中指向的第二矩阵地址R2寄存器得到第二矩阵地址R2,该第二矩阵地址R2为第二矩阵M2在数据存储器42中的存储从首地址,控制单元120并根据第二矩阵地址R2在数据存储器42中找到第二矩阵M2中的b11至bMN的数据,将第二矩阵M2的数据逐个依次输送至运算单元阵列PU11至PUXY中的与该第二矩阵M2对应的参与运算的运算单元110。
例如,如果第二矩阵按照列方向依序保存,则取出第一数据后,在运算单元阵列11列方向上将第二数据依次分配给每个运算单元,从而,在与第二数据bij对应位置上的运算单元PUij将获得数据bij,bij存储在该运算单元的第二输入寄存器中。
当然,第一矩阵和第二矩阵可以按照相同的方式存储,也可以按照不同的方式存储,只要采用与存储方式对应的数据分配方式即可,在本实施例中不做限定。
最后,运算单元阵列11中的参与运算的各个运算单元将数据相加的结果发送至矩阵运算指令所指示的目的矩阵地址Rd寄存器中的目的矩阵地址Rd所指示的数据存储器42中的位置,并依序排列,形成为c11至cMN的目的矩阵M。
如果待计算的矩阵维度大于运算单元阵列11的维度,则会根据所述运算单元阵列11的维度读取与所述运算单元阵列11的维度相应维度的部分矩阵数据,即,根据运算单元阵列11能够计算的矩阵大小,对矩阵进行拆分,并根据拆分后的矩阵进行取数。
例如,第一矩阵和第二矩阵均为9*9的矩阵,运算单元阵列11由3*3的运算单元构成,那么将两个矩阵拆分为3*3的子矩阵,由运算单元进行计算,此时,取数的方式由程序设定,间隔一定地址取出相应子矩阵的数据。在此不做详细描述。
图7是示出了本公开的实施方式所涉及的矩阵运算装置1的装置框图。
此外,如图7所示,本公开的实施方式还涉及的矩阵运算装置1,其特征在于,包括:执行模块10,其具有矩阵运算电路100;存储模块40,其包括用于存储矩阵运算指令的指令存储器41、以及用于存储第一数据和第二数据的数据存储器42;取指模块20,其用于从指令存储器41中取出矩阵运算指令;以及解码模块30,其用于接收并解码由取指模块20取出的矩阵运算指令,解码模块30将解码后的矩阵运算指令发送至执行模块10,其中,执行模块10响应于解码后的矩阵运算指令,通过矩阵运算电路100从数据存储器42中取出第一数据和第二数据并进行运算,并在运算完成后将运算结果存储到数据存储器42中。
在本公开的实施方式所涉及的矩阵运算装置1中,取指模块20能够将从存储模块40中取出的矩阵运算指令发送至解码模块30进行解码,执行模块10再根据矩阵运算指令信息从存储模块40中获取矩阵数据并进行运算,在这种情况下,矩阵运算电路100能够在执行模块10中进行运算,由此,矩阵运算装置1能够对各种类型的矩阵进行运算。
在一些示例中,存储模块40可以包括闪速(flash)存储器、硬盘类型存储器、微型多媒体卡型存储器、卡式存储器(例如SD或XD存储器)、随机存取存储器(random accessmemory,RAM)、静态随机存取存储器(static RAM,SRAM)、只读存储器(read only memory,ROM)、电可擦除可编程只读存储器(electrically erasable programmable read-onlymemory,EEPROM)、可编程只读存储器(programmable ROM,PROM)、回滚保护存储块(replayprotected memory block,RPMB)、磁存储器、磁盘或光盘中的至少一种或多种。出于从运算速率的角度考虑,存储模块40所使用的物理内存优选采用随机存取存储器或静态随机存取存储器。
在一些示例中,矩阵运算装置1还可以包括控制模块50,其中,控制模块50可以用于接收来自外部控制程序2的命令,并根据外部控制程序2的命令控制取指模块20、解码模块30、执行模块10等矩阵运算装置1(参见图1、图7)。由此,外部控制程序2能够通过控制模块50对矩阵运算装置1进行控制。
在一些示例中,数据存储器42能够用于存储第一矩阵、第二矩阵、目的矩阵。
图8是示出了本公开的实施方式所涉及的矩阵运算装置1的执行模块10的示意框图。
如图8所示,在一些示例中,执行模块10可以被实施为算数运算单元、逻辑运算单元、存取单元和浮点运算单元中的至少一个。由此,矩阵运算装置1能够对矩阵进行多种类型的运算。
在一些示例中,矩阵运算装置1可以包括用于向量运算的向量寄存器和用于表示矩阵数据属性的定制寄存器。由此,能够提高矩阵运算装置1的灵活性,从而适应更多不同的应用场景。在另一些示例中,矩阵运算装置1还可以包括用于存储第一矩阵地址、第二矩阵地址或目的矩阵地址的通用寄存器。
在一些示例中,矩阵数据属性包括输入到矩阵运算电路100的输入矩阵的行数、输入矩阵的列数、从矩阵运算电路100输出的输出矩阵的行数、输出矩阵的列数、以及输入矩阵与输出矩阵的行向量间隔和列向量间隔。由此,控制单元120能够根据矩阵数据属性控制矩阵数据的提取方式,并获取地址之间的间隔。具体而言,以矩阵数据以行方向依序存储于数据存储器42中时为例,行向量间隔能够使得数据存储器42中的矩阵数据在一行结束的地址与下一行开始的地址之间存在间隔,列向量间隔能够使得一行中的每个数据的地址之间都存在间隔。
图9是示出了本公开的实施方式所涉及的矩阵运算电路100的方法流程图。
如图9所示,基于矩阵运算电路100的矩阵运算方法包括如下步骤:从指令存储器41中取出矩阵运算指令(步骤S100);对矩阵运算指令进行解码,并将解码后的矩阵运算指令发送至矩阵运算电路100(步骤S200);基于解码后的矩阵运算指令,矩阵运算电路100从数据存储器42中获取第一矩阵和第二矩阵并进行运算,并在运算完成后将运算结果存储到数据存储器42中(步骤S300)。
在本公开的实施方式所涉及的矩阵运算方法中,矩阵运算电路100能够基于解码后的矩阵运算指令获取矩阵数据并进行计算,由此,能够通过矩阵运算指令控制矩阵运算电路100的运算过程。
在步骤S100中,从指令存储器41中取出矩阵运算指令。这里,指令存储器41中的存储方式具体可以参见上述指令存储器41的描述,这里不再赘述。
在步骤S200中,对矩阵运算指令进行解码,并将解码后的矩阵运算指令发送至矩阵运算电路100。这里,解码的实施方式具体参见上述解码模块30的描述,这里不再赘述。
在步骤S300中,基于解码后的矩阵运算指令,矩阵运算电路100从数据存储器42中获取第一矩阵和第二矩阵并进行运算,并在运算完成后将运算结果存储到数据存储器42中。这里,运算的实施方式具体参见上述执行模块10的描述,这里不再赘述。
另外,在一些示例中,本公开还提供了一种芯片,其特征在于,包括如上所述的矩阵运算电路。
另外,在一些示例中,本公开还提供了一种装置,其特征在于,包括如上所述的芯片。
另外,在一些示例中,本公开还提供了一种计算设备,其特征在于:包括处理器和存储器,处理器执行存储器存储的计算机指令,使得计算设备执行如上所述的矩阵运算方法。
另外,在一些示例中,本公开还提供了一种计算机可读存储介质,其特征在于:存储有计算机程序,并且当计算机程序被处理器执行时实现包括如上所述矩阵运算方法的步骤。
另外,在一些示例中,本公开还提供了一种计算机程序产品,其特征在于:包括计算机指令,当计算机指令被计算设备执行时,计算设备可以执行如上所述的矩阵运算方法。
虽然以上结合附图和实施例对本发明进行了具体说明,但是可以理解,上述说明不以任何形式限制本发明。本领域技术人员在不偏离本发明的实质精神和范围的情况下可以根据需要对本发明进行变形和变化,这些变形和变化均落入本发明的范围内。
Claims (10)
1.一种矩阵运算电路,其特征在于,包括:控制单元和以阵列方式排布的多个运算单元;
所述控制单元用于接收矩阵运算指令,并响应于所述矩阵运算指令控制所述多个运算单元中的至少两个运算单元执行所述矩阵运算指令所指示的矩阵运算,其中,所述矩阵运算指令为单条指令,
所述控制单元用于从所述矩阵运算指令中第一源地址寄存器所指向的存储器位置,以第一预设的读取方式读取第一数据,将所述读取的所述第一数据逐个依序分配至所述多个运算单元中参与运算的运算单元并保存在所述参与运算的运算单元的第一输入寄存器;
从所述矩阵运算指令中第二源地址寄存器所指向的存储器位置,以第二预设的读取方式读取第二数据,将所述读取的所述第二数据逐个依序分配至所述参与运算的运算单元并保存在所述参与运算的运算单元的第二输入寄存器;
多个所述参与运算的运算单元同时对各自的第一输入寄存器和第二输入寄存器中的数据进行运算。
2.根据权利要求1所述的矩阵运算电路,其特征在于,所述矩阵运算指令还包括指令名和目的地址寄存器。
3.根据权利要求2所述的矩阵运算电路,其特征在于,所述第一数据为矩阵数据,所述第二数据为矩阵数据、向量数据、标量数据或常数;
所述运算包括对所述第一数据中的每个点与所述第二数据之间的乘、加或比较。
4.如权利要求1-3任一项所述的矩阵运算电路,其特征在于,所述运算单元还包括输出寄存器,
所述输出寄存器用于保存所述运算操作的结果。
5.根据权利要求1-3任一项所述的矩阵运算电路,其特征在于,
所述矩阵运算指令基于RISC-V的指令格式编码。
6.根据权利要求5所述的矩阵运算电路,其特征在于,
若所述第一数据的维度大于所述以阵列方式排布的多个运算单元的阵列的维度,则将所述第一数据划分为多个第一子数据,所述第一子数据的维度小于或等于所述多个运算单元的阵列的维度,所述参与运算的运算单元为所述多个运算单元的一部分或所述多个运算单元的每一个;
若所述第一数据的维度小于所述以阵列方式排布的多个运算单元的阵列的维度,所述参与运算的运算单元为所述多个运算单元的一部分;或
若所述第一数据的维度等于所述以阵列方式排布的多个运算单元的阵列的维度,所述参与运算的运算单元为所述多个运算单元的每一个。
7.一种矩阵运算装置,其特征在于,包括:
执行模块,其具有如权利要求1至6中的任一项所述的矩阵运算电路;
存储模块,其包括用于存储矩阵运算指令的指令存储器、以及用于存储所述第一数据、所述第二数据及所述目的数据的数据存储器;
取指模块,其用于从所述指令存储器中取出矩阵运算指令;以及
解码模块,其用于接收并解码由所述取指模块取出的矩阵运算指令,所述解码模块将解码后的矩阵运算指令发送至所述执行模块,
其中,所述执行模块响应于所述解码后的矩阵运算指令,通过所述矩阵运算电路执行所述解码后的矩阵运算指令,并在执行完成后将运算结果通过所述输出寄存器发送到所述数据存储器中。
8.一种矩阵运算方法,是基于权利要求1至6中的任一项所述的矩阵运算电路的矩阵运算方法,其特征在于,
包括:
从指令存储器中取出指令;
对所述矩阵运算指令进行解码,并将解码后的指令发送至所述矩阵运算电路;
基于解码后的指令,所述矩阵运算电路从数据存储器中获取所述第一数据和所述第二数据并进行运算,在运算完成后将运算结果存储到所述数据存储器中。
9.一种芯片,其特征在于,包括如权利要求1-6任一项所述的矩阵运算电路。
10.一种装置,其特征在于,包括如权利要求9所述的芯片。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910935231.4A CN112579971B (zh) | 2019-09-29 | 2019-09-29 | 矩阵运算电路、矩阵运算装置及矩阵运算方法 |
PCT/CN2020/096389 WO2021057112A1 (zh) | 2019-09-29 | 2020-06-16 | 矩阵运算电路、矩阵运算装置及矩阵运算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910935231.4A CN112579971B (zh) | 2019-09-29 | 2019-09-29 | 矩阵运算电路、矩阵运算装置及矩阵运算方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112579971A CN112579971A (zh) | 2021-03-30 |
CN112579971B true CN112579971B (zh) | 2024-04-16 |
Family
ID=75110779
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910935231.4A Active CN112579971B (zh) | 2019-09-29 | 2019-09-29 | 矩阵运算电路、矩阵运算装置及矩阵运算方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN112579971B (zh) |
WO (1) | WO2021057112A1 (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107315574A (zh) * | 2016-04-26 | 2017-11-03 | 北京中科寒武纪科技有限公司 | 一种用于执行矩阵乘运算的装置和方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017181419A1 (zh) * | 2016-04-22 | 2017-10-26 | 北京中科寒武纪科技有限公司 | 一种子矩阵运算装置及方法 |
CN107315567B (zh) * | 2016-04-26 | 2020-08-07 | 中科寒武纪科技股份有限公司 | 一种用于执行向量最大值最小值运算的装置和方法 |
CN111651206B (zh) * | 2016-04-26 | 2024-05-07 | 中科寒武纪科技股份有限公司 | 一种用于执行向量外积运算的装置和方法 |
US10817587B2 (en) * | 2017-02-28 | 2020-10-27 | Texas Instruments Incorporated | Reconfigurable matrix multiplier system and method |
US10963246B2 (en) * | 2018-11-09 | 2021-03-30 | Intel Corporation | Systems and methods for performing 16-bit floating-point matrix dot product instructions |
-
2019
- 2019-09-29 CN CN201910935231.4A patent/CN112579971B/zh active Active
-
2020
- 2020-06-16 WO PCT/CN2020/096389 patent/WO2021057112A1/zh active Application Filing
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107315574A (zh) * | 2016-04-26 | 2017-11-03 | 北京中科寒武纪科技有限公司 | 一种用于执行矩阵乘运算的装置和方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112579971A (zh) | 2021-03-30 |
WO2021057112A1 (zh) | 2021-04-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102443546B1 (ko) | 행렬 곱셈기 | |
EP3832499B1 (en) | Matrix computing device | |
US9632777B2 (en) | Gather/scatter of multiple data elements with packed loading/storing into/from a register file entry | |
US7451293B2 (en) | Array of Boolean logic controlled processing elements with concurrent I/O processing and instruction sequencing | |
CN111656367A (zh) | 神经网络加速器的***和体系结构 | |
CN109952559B (zh) | 具有单独可选元素及成组复制的流式传输引擎 | |
CN115562729A (zh) | 具有带读取和读取/前进操作数编码的流引擎的数据处理设备 | |
EP3716102A1 (en) | Machine learning architecture support for block sparsity | |
CN111324294B (zh) | 存取张量数据的方法和装置 | |
EP3482288B1 (en) | An apparatus and method for performing a rearrangement operation | |
CN112784973A (zh) | 卷积运算电路、装置以及方法 | |
US9575756B2 (en) | Predication in a vector processor | |
CN110050259B (zh) | 矢量处理器及其控制方法 | |
CN112348182A (zh) | 一种神经网络maxout层计算装置 | |
CN112579971B (zh) | 矩阵运算电路、矩阵运算装置及矩阵运算方法 | |
BR102020019656A2 (pt) | sistema e método para arranjo sistólico reconfigurável com leitura/gravação parcial | |
EP3447690A1 (en) | Maxout layer operation apparatus and method | |
CN112463218B (zh) | 指令发射控制方法及电路、数据处理方法及电路 | |
CN111798363B (zh) | 图形处理器 | |
US20020156992A1 (en) | Information processing device and computer system | |
US20060101240A1 (en) | Digital signal processing circuit and digital signal processing method | |
CN112579042B (zh) | 计算装置及方法、芯片、电子设备及计算机可读存储介质 | |
US20230195651A1 (en) | Host device performing near data processing function and accelerator system including the same | |
JP5025521B2 (ja) | 半導体装置 | |
CN113836481B (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 | ||
CB02 | Change of applicant information |
Country or region after: China Address after: Room 201, No. 6 Fengtong Heng Street, Huangpu District, Guangzhou City, Guangdong Province, 510700 Applicant after: Guangzhou Ximu Semiconductor Technology Co.,Ltd. Address before: 100089 202-24, building 6, yard 1, gaolizhang Road, Haidian District, Beijing Applicant before: Beijing SIMM Computing Technology Co.,Ltd. Country or region before: China |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |