CN111198670B - 执行矩阵乘法运算的方法、电路及soc - Google Patents

执行矩阵乘法运算的方法、电路及soc Download PDF

Info

Publication number
CN111198670B
CN111198670B CN201811384503.8A CN201811384503A CN111198670B CN 111198670 B CN111198670 B CN 111198670B CN 201811384503 A CN201811384503 A CN 201811384503A CN 111198670 B CN111198670 B CN 111198670B
Authority
CN
China
Prior art keywords
matrix
index
columns
rows
row
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
Application number
CN201811384503.8A
Other languages
English (en)
Other versions
CN111198670A (zh
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
Priority to CN201811384503.8A priority Critical patent/CN111198670B/zh
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to ES19888082T priority patent/ES2943886T3/es
Priority to EP22188228.5A priority patent/EP4102354B1/en
Priority to EP19888082.5A priority patent/EP3876092B1/en
Priority to CN202111444099.0A priority patent/CN114138231B/zh
Priority to CN201980076521.6A priority patent/CN113168309A/zh
Priority to PCT/CN2019/119794 priority patent/WO2020103883A1/zh
Publication of CN111198670A publication Critical patent/CN111198670A/zh
Application granted granted Critical
Publication of CN111198670B publication Critical patent/CN111198670B/zh
Priority to US17/324,533 priority patent/US11263292B2/en
Priority to US17/568,538 priority patent/US11397791B2/en
Priority to US17/841,162 priority patent/US11860970B2/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/06Arrangements for sorting, selecting, merging, or comparing data on individual record carriers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Complex Calculations (AREA)
  • Stabilization Of Oscillater, Synchronisation, Frequency Synthesizers (AREA)

Abstract

本申请公开一种执行矩阵乘法运算的方法,属于数据处理领域。该方法包括:获取矩阵A1、矩阵B2和索引矩阵;根据索引矩阵和矩阵A1生成n个矩阵A2,n个矩阵A2与索引矩阵的n列按顺序一一对应,每个矩阵A2的t列与对应的索引矩阵中的一列的t个元素按顺序一一对应,每个矩阵A2的每一列为对应的索引矩阵中的一个元素在矩阵A1中指示的一列;根据n个矩阵A2和矩阵B2生成矩阵C,矩阵C的n列与n个矩阵A2按顺序一一对应,矩阵C的n列与矩阵B2的n列按顺序一一对应,矩阵C的每一列为对应的一个矩阵A2与对应的矩阵B2中的一列的乘积。本申请只需从矩阵A1中读取一次数据就能完成矩阵乘法运算,实现了数据复用性的最大化。

Description

执行矩阵乘法运算的方法、电路及SOC
技术领域
本申请涉及数据处理领域,特别涉及一种执行矩阵乘法运算的方法、电路及片上***(System on Chip,SOC)。
背景技术
人工智能技术广泛应用于终端、边缘侧、云端等,用来实现图像识别、目标检测、语音翻译等功能,人工智能技术往往通过深度学习网络实现。对于深度学习网络,其中较影响性能、计算量较大的算子,如卷积、内积(inner product)等算子的计算量占比可达99%,这些算子均可以展开成矩阵乘矩阵的运算。当然,矩阵作为一种常见的数据表达形式,矩阵乘矩阵的运算也常常应用于其它领域中。
目前,在执行矩阵乘法运算时,往往是将矩阵乘矩阵的运算拆分成向量乘矩阵的运算。假设矩阵A是m行k列的矩阵,矩阵B是k行n列的矩阵,m、k和n均为正整数,在将矩阵A乘以矩阵B时,是将矩阵A的m行依次乘以矩阵B。其中,将矩阵A中的某一行乘以矩阵B时,n个处理元件(Process Element,PE)一一获取矩阵B的n列的索引模块(用来定位非零元素),然后该n个PE中的每个PE根据其获取到的矩阵B中的一列的索引模块从矩阵A中的这一行中读取数据,并将读取到的数据乘以矩阵B中的这一列。
上述运算方式中,由于是将矩阵A的m行依次乘以矩阵B,所以整个运算过程需要耗费较长时间,运算效率较低。其次,由于矩阵B的每一列中非零元素的分布没有规律,所以每个PE根据矩阵B中的一列的索引模块从矩阵A中的一行中读取数据时,是读取矩阵A中的这一行中分布较为离散的多个数据,而由于矩阵A往往是分散地存储到存储器中的多个地址上,所以如果PE是一次性从矩阵A中读取数据,则很有可能会因同时读取存储器中的多个地址上的数据而出现地址冲突,导致无法读取到数据。再者,由于在将矩阵A的m行中的每一行乘以矩阵B时均需读取一次矩阵B,整个运算过程共需读取m次矩阵B,所以导致数据复用性较低,消耗的处理资源较多。
发明内容
本申请提供了一种执行矩阵乘法运算的方法、电路及SOC,可以解决相关技术中矩阵乘法运算的运算效率较低、读取数据时地址冲突且数据复用性较低的问题。所述技术方案如下:
第一方面,提供了一种执行矩阵乘法运算的方法,所述方法包括:获取矩阵A1、矩阵B2和索引矩阵,所述矩阵A1是m行k列的矩阵,所述矩阵B2是t行n列的矩阵,所述索引矩阵是t行n列的矩阵,所述m、所述k、所述t和所述n均为正整数,所述t小于或等于所述k;根据所述索引矩阵和所述矩阵A1,生成n个矩阵A2,所述n个矩阵A2均是m行t列的矩阵,所述n个矩阵A2与所述索引矩阵的n列按顺序一一对应,每个矩阵A2的t列与对应的所述索引矩阵中的一列的t个元素按顺序一一对应,所述每个矩阵A2的每一列为对应的所述索引矩阵中的一个元素在所述矩阵A1中指示的一列;根据所述n个矩阵A2和所述矩阵B2,生成矩阵C,所述矩阵C是m行n列的矩阵,所述矩阵C的n列与所述n个矩阵A2按顺序一一对应,所述矩阵C的n列与所述矩阵B2的n列按顺序一一对应,所述矩阵C的每一列为对应的一个矩阵A2与对应的所述矩阵B2中的一列的乘积。
需要说明的是,矩阵B2中包含矩阵B1中所有的非零元素(有效数据)。索引矩阵为矩阵B2中的元素在矩阵B1中的索引,即包括矩阵B1中所有的非零元素在矩阵B1中的索引。
在本申请实施例中,根据索引矩阵可以一次性从矩阵A1中读取出n个矩阵A2,继而可以将该n个矩阵A2一一乘以矩阵B2的n列,来得到矩阵C。由于只需从矩阵A1中读取一次数据就能够完成矩阵乘法运算,所以可以实现数据复用性的最大化,节省处理资源。并且,将该n个矩阵A2一一乘以矩阵B2的n列时,由于该n个矩阵A2的大小相同,所以该n个矩阵A2与矩阵B2的n列的乘法运算可以并行执行,且可以在相同的时间内执行完成,从而可以节省运算时间,提高运算效率。
其中,所述获取矩阵B2和索引矩阵,包括:获取矩阵B1,所述矩阵B1是k行n列的矩阵,所述矩阵B1的n列中每一列的元素均按顺序划分到预设数值个组,每组元素的数量均为k1,且所述每组元素中非零元素的数量均小于或等于k2,所述预设数值是所述t除以所述k2后得到的数值,所述k大于或等于所述k1且所述k能够被所述k1整除,所述k1大于或等于所述k2且所述k1能够被所述k2整除;根据所述矩阵B1,生成所述矩阵B2,所述矩阵B2的n列与所述矩阵B1的n列按顺序一一对应,所述矩阵B2的每一列的元素包括对应的所述矩阵B1中的一列中按顺序排列的预设数值个组中所有的非零元素;根据所述矩阵B1和所述矩阵B2,生成所述索引矩阵,所述索引矩阵的n列与所述矩阵B2的n列按顺序一一对应,所述索引矩阵的每一列的元素为对应的所述矩阵B2中的一列中按顺序排列的所有元素在所述矩阵B1中的行标。
需要说明的是,矩阵B1为满足条件稀疏的矩阵,矩阵B1可以通过神经网络训练得到,例如,在深度学习场景下,可以通过控制深度学习网络的训练过程,将卷积、Innerproduct等算子的参数的分布训练成符合条件稀疏的分布规律,以得到满足条件稀疏的参数矩阵作为矩阵B1。
在本申请实施例中,将矩阵B1的n列中每一列的非零元素的数量均控制在一定的范围内,如此可以有效控制数据索引的范围,从而可以有效降低索引矩阵的规模,保证工程上的可实现性。并且,本申请实施例中仅使用这一个索引矩阵就可以完成矩阵乘法运算,因而消耗的逻辑资源较少。
其中,对于所述矩阵B2中的任意一个元素,当所述矩阵B2中的一个元素非零时,所述矩阵B2中的一个元素在所述矩阵B1中的行标是所述矩阵B2中的一个元素在所述矩阵B1中所属的一行的行号;当所述矩阵B2中的一个元素为零时,所述矩阵B2中的一个元素在所述矩阵B1中的行标是第一字符。
其中,对于所述索引矩阵中的任意一个元素,当所述索引矩阵中的一个元素不是所述第一字符时,所述索引矩阵中的一个元素在所述矩阵A1中指示的一列是所述矩阵A1的所有列中列号为所述索引矩阵中的一个元素的一列;当所述索引矩阵中的一个元素是所述第一字符时,所述索引矩阵中的一个元素对应的一个矩阵A2中的一列的元素是m个第二字符。
需要说明的是,引入第一字符和第二字符可以满足矩阵元素对齐的要求。
在本申请实施例中,是根据索引矩阵的每一列的t个元素,直接读取矩阵A1中t列的元素来构成一个矩阵A2。这种情况下,由于所要读取的数据在矩阵A1中的分布比较规则且集中,所以在将矩阵A1存储到存储器中时,可以将矩阵A1的k列分别存储到存储器中的多个地址上,这种情况下,根据索引矩阵可以一次性从存储器中读取到所需的数据,从而不仅可以大大降低读取数据时所需的存储器访问带宽,而且可以消除从存储器中读取数据时可能出现的地址冲突问题。
第二方面,提供了一种执行矩阵乘法运算的方法,所述方法包括:获取矩阵B1、矩阵A2和索引矩阵,所述矩阵B1是k行n列的矩阵,所述矩阵A2是m行t列的矩阵,所述索引矩阵是m行t列的矩阵,所述k、所述n、所述m和所述t均为正整数,所述t小于或等于所述k;根据所述索引矩阵和所述矩阵B1,生成m个矩阵B2,所述m个矩阵B2均是t行n列的矩阵,所述m个矩阵B2与所述索引矩阵的m行按顺序一一对应,每个矩阵B2的t行与对应的所述索引矩阵中的一行的t个元素按顺序一一对应,所述每个矩阵B2的每一行为对应的所述索引矩阵中的一个元素在所述矩阵B1中指示的一行;根据所述矩阵A2和所述m个矩阵B2,生成矩阵C,所述矩阵C是m行n列的矩阵,所述矩阵C的m行与所述矩阵A2的m行按顺序一一对应,所述矩阵C的m行与所述m个矩阵B2按顺序一一对应,所述矩阵C的每一行为对应的所述矩阵A2中的一行与对应的一个矩阵B2的乘积。
需要说明的是,矩阵A2中包含矩阵A1中所有的非零元素(有效数据)。索引矩阵为矩阵A2中的元素在矩阵A1中的索引,即包括矩阵A1中所有的非零元素在矩阵A1中的索引。
在本申请实施例中,根据索引矩阵可以一次性从矩阵B1中读取出m个矩阵B2,继而可以将矩阵A2的m行一一乘以该m个矩阵B2,来得到矩阵C。由于只需从矩阵B1中读取一次数据就能够完成矩阵乘法运算,所以可以实现数据复用性的最大化,节省处理资源。并且,将矩阵A2的m行一一乘以该m个矩阵B2时,由于该m个矩阵B2的大小相同,所以矩阵A2的m行与该m个矩阵B2的乘法运算可以并行执行,且可以在相同的时间内执行完成,从而可以节省运算时间,提高运算效率。
其中,所述获取矩阵A2和索引矩阵,包括:获取矩阵A1,所述矩阵A1是m行k列的矩阵,所述矩阵A1的m行中每一行的元素均按顺序划分到预设数值个组,每组元素的数量均为k1,且所述每组元素中非零元素的数量均小于或等于k2,所述预设数值是所述t除以所述k2后得到的数值,所述k大于或等于所述k1且所述k能够被所述k1整除,所述k1大于或等于所述k2且所述k1能够被所述k2整除;根据所述矩阵A1,生成所述矩阵A2,所述矩阵A2的m行与所述矩阵A1的m行按顺序一一对应,所述矩阵A2的每一行的元素包括对应的所述矩阵A1中的一行中按顺序排列的预设数值个组中所有的非零元素;根据所述矩阵A1和所述矩阵A2,生成所述索引矩阵,所述索引矩阵的m行与所述矩阵A2的m行按顺序一一对应,所述索引矩阵的每一行的元素为对应的所述矩阵A2中的一行中按顺序排列的所有元素在所述矩阵A1中的列标。
需要说明的是,矩阵A1为满足条件稀疏的矩阵,矩阵A1可以通过神经网络训练得到,例如,在深度学习场景下,可以通过控制深度学习网络的训练过程,将卷积、Innerproduct等算子的参数的分布训练成符合条件稀疏的分布规律,以得到满足条件稀疏的参数矩阵作为矩阵A1。
在本申请实施例中,将矩阵A1的m行中每一行的非零元素的数量均控制在一定的范围内,如此可以有效控制数据索引的范围,从而可以有效降低索引矩阵的规模,保证工程上的可实现性。并且,本申请实施例中仅使用这一个索引矩阵就可以完成矩阵乘法运算,因而消耗的逻辑资源较少。
其中,对于所述矩阵A2中的任意一个元素,当所述矩阵A2中的一个元素非零时,所述矩阵A2中的一个元素在所述矩阵A1中的列标是所述矩阵A2中的一个元素在所述矩阵A1中所属的一列的列号;当所述矩阵A2中的一个元素为零时,所述矩阵A2中的一个元素在所述矩阵A1中的列标是第一字符。
其中,对于所述索引矩阵中的任意一个元素,当所述索引矩阵中的一个元素不是所述第一字符时,所述索引矩阵中的一个元素在所述矩阵B1中指示的一行是所述矩阵B1的所有行中行号为所述索引矩阵中的一个元素的一行;当所述索引矩阵中的一个元素是所述第一字符时,所述索引矩阵中的一个元素对应的一个矩阵B2中的一行的元素是n个第二字符。
需要说明的是,引入第一字符和第二字符可以满足矩阵元素对齐的要求。
在本申请实施例中,根据索引矩阵的每一行的t个元素,直接读取矩阵B1中t行的元素来构成一个矩阵B2。这种情况下,由于所要读取的数据在矩阵B1中的分布比较规则且集中,所以在将矩阵B1存储到存储器中时,可以将矩阵B1的k行分别存储到存储器中的多个地址上,这种情况下,根据索引矩阵可以一次性从存储器中读取到所需的数据,从而不仅可以大大降低读取数据时所需的存储器访问带宽,而且可以消除从存储器中读取数据时可能出现的地址冲突问题。
第三方面,提供了一种执行矩阵乘法运算的电路,所述电路包括:
获取电路,用于获取矩阵A1、矩阵B2和索引矩阵,所述矩阵A1是m行k列的矩阵,所述矩阵B2是t行n列的矩阵,所述索引矩阵是t行n列的矩阵,所述m、所述k、所述t和所述n均为正整数,所述t小于或等于所述k;
数据选择电路,用于根据所述索引矩阵和所述矩阵A1,生成n个矩阵A2,所述n个矩阵A2均是m行t列的矩阵,所述n个矩阵A2与所述索引矩阵的n列按顺序一一对应,每个矩阵A2的t列与对应的所述索引矩阵中的一列的t个元素按顺序一一对应,所述每个矩阵A2的每一列为对应的所述索引矩阵中的一个元素在所述矩阵A1中指示的一列;
计算单元阵列,用于根据所述n个矩阵A2和所述矩阵B2,生成矩阵C,所述矩阵C是m行n列的矩阵,所述矩阵C的n列与所述n个矩阵A2按顺序一一对应,所述矩阵C的n列与所述矩阵B2的n列按顺序一一对应,所述矩阵C的每一列为对应的一个矩阵A2与对应的所述矩阵B2中的一列的乘积。
进一步地,所述电路还包括第一存储器,所述第一存储器用于存储所述矩阵A1、所述矩阵B2和所述索引矩阵;相应地,所述获取电路用于:从所述第一存储器中读取所述矩阵A1、所述矩阵B2和所述索引矩阵。
第四方面,提供了一种执行矩阵乘法运算的电路,所述电路包括:
获取电路,用于获取矩阵B1、矩阵A2和索引矩阵,所述矩阵B1是k行n列的矩阵,所述矩阵A2是m行t列的矩阵,所述索引矩阵是m行t列的矩阵,所述k、所述n、所述m和所述t均为正整数,所述t小于或等于所述k;
数据选择电路,用于根据所述索引矩阵和所述矩阵B1,生成m个矩阵B2,所述m个矩阵B2均是t行n列的矩阵,所述m个矩阵B2与所述索引矩阵的m行按顺序一一对应,每个矩阵B2的t行与对应的所述索引矩阵中的一行的t个元素按顺序一一对应,所述每个矩阵B2的每一行为对应的所述索引矩阵中的一个元素在所述矩阵B1中指示的一行;
计算单元阵列,用于根据所述矩阵A2和所述m个矩阵B2,生成矩阵C,所述矩阵C是m行n列的矩阵,所述矩阵C的m行与所述矩阵A2的m行按顺序一一对应,所述矩阵C的m行与所述m个矩阵B2按顺序一一对应,所述矩阵C的每一行为对应的所述矩阵A2中的一行与对应的一个矩阵B2的乘积。
进一步地,所述电路还包括第一存储器,所述第一存储器用于存储所述矩阵B1、所述矩阵A2和所述索引矩阵;相应地,所述获取电路用于:从所述第一存储器中读取所述矩阵B1、所述矩阵A2和所述索引矩阵。
第五方面,提供了一种SOC,所述SOC包括上述第三方面所述的执行矩阵乘法运算的电路。
进一步地,所述SOC还包括第二存储器,所述第二存储器用于存储所述矩阵A1、所述矩阵B2和所述索引矩阵;相应地,所述获取电路用于:从所述第二存储器中读取所述矩阵A1、所述矩阵B2和所述索引矩阵。
第六方面,提供了一种SOC,所述SOC包括上述第四方面所述的执行矩阵乘法运算的电路。
进一步地,所述SOC还包括第二存储器,所述第二存储器用于存储所述矩阵B1、所述矩阵A2和所述索引矩阵;相应地,所述获取电路用于:从所述第二存储器中读取所述矩阵B1、所述矩阵A2和所述索引矩阵。
第七方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的执行矩阵乘法运算的方法。
第八方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第二方面所述的执行矩阵乘法运算的方法。
第九方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的执行矩阵乘法运算的方法。
第十方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第二方面所述的执行矩阵乘法运算的方法。
上述第三方面、第五方面、第七方面和第九方面所获得的技术效果与上述第一方面中对应的技术手段获得的技术效果近似,在这里不再赘述。
上述第四方面、第六方面、第八方面和第十方面所获得的技术效果与上述第二方面中对应的技术手段获得的技术效果近似,在这里不再赘述。
本申请提供的技术方案至少可以带来以下有益效果:获取矩阵B1、矩阵A2和索引矩阵。之后,根据索引矩阵和矩阵B1,生成m个矩阵B2,由于根据索引矩阵可以一次性从存储器中存储的矩阵B1中读取到所需的数据,所以不仅可以大大降低读取数据时所需的存储器访问带宽,而且可以消除从存储器中读取数据时可能出现的地址冲突问题。最后,根据矩阵A2和m个矩阵B2,生成矩阵C,由于m个矩阵B2的大小相同,所以将矩阵A2的m行一一乘以该m个矩阵B2时,矩阵A2的m行与该m个矩阵B2的乘法运算可以并行执行,且可以在相同的时间内执行完成,从而可以节省运算时间,提高运算效率。本申请实施例中只需从矩阵B1中读取一次数据就能够完成矩阵乘法运算,因而可以实现数据复用性的最大化,节省处理资源。
附图说明
图1是本申请实施例提供的一种矩阵B1的示意图;
图2是本申请实施例提供的一种矩阵A1的示意图;
图3是本申请实施例提供的一种执行矩阵乘法运算的方法的流程图;
图4是本申请实施例提供的另一种矩阵B1的示意图;
图5是本申请实施例提供的一种矩阵B2的示意图;
图6是本申请实施例提供的一种索引矩阵的示意图;
图7是本申请实施例提供的另一种矩阵A1的示意图;
图8是本申请实施例提供的一种n个矩阵A2的示意图;
图9是本申请实施例提供的一种矩阵C的示意图;
图10是本申请实施例提供的另一种执行矩阵乘法运算的方法的流程图;
图11是本申请实施例提供的又一种矩阵A1的示意图;
图12是本申请实施例提供的一种矩阵A2的示意图;
图13是本申请实施例提供的另一种索引矩阵的示意图;
图14是本申请实施例提供的又一种矩阵B1的示意图;
图15是本申请实施例提供的一种m个矩阵B2的示意图;
图16是本申请实施例提供的另一种矩阵C的示意图;
图17是本申请实施例提供的一种执行矩阵乘法运算的电路的结构示意图;
图18是本申请实施例提供的另一种执行矩阵乘法运算的电路的结构示意图;
图19是本申请实施例提供的一种计算单元阵列的结构示意图;
图20是本申请实施例提供的一种SOC的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请的实施方式作进一步地详细描述。
在对本申请实施例进行详细地解释说明之前,对本申请实施例涉及的应用场景予以说明。
目前,人工智能技术广泛应用于终端、边缘侧、云端等,用来实现图像识别、目标检测、语音翻译等功能,人工智能技术往往通过深度学习网络实现。对于深度学习网络,其中较影响性能、计算量较大的算子,如卷积、inner product等算子的计算量占比可达99%,这些算子均可以展开成矩阵乘矩阵的运算。当然,矩阵作为一种常见的数据表达形式,矩阵乘矩阵的运算也常常应用于其它领域中。本申请实施例提供的执行矩阵乘法运算的方法就应用于深度网络学习或其它领域中的矩阵乘矩阵的运算场景中。
接下来对本申请实施例提供的执行矩阵乘法运算的方法予以说明。
值得注意的是,在进行本申请实施例提供的执行矩阵乘法运算的方法之前,可以先获得满足条件稀疏的矩阵。例如,开发人员可以通过控制深度学习网络的训练过程,来得到满足条件稀疏的矩阵,当然,也可以通过其它方式得到满足条件稀疏的矩阵,本申请实施例对此不作限定。
对于矩阵A1乘以矩阵B1的情况,假设矩阵A1是m行k列的矩阵,矩阵B1是k行n列的矩阵,m、k和n均为正整数。
矩阵B1满足条件稀疏是指:矩阵B1的n列中每一列的元素均按顺序划分到预设数值个组,每组元素的数量均为k1,且每组元素中非零元素的数量均小于或等于k2,预设数值为正整数,k大于或等于k1且k能够被k1整除,k1大于或等于k2且k1能够被k2整除。例如,k=16,n=16,k1=8,k2=2,预设数值为2,即矩阵B1为16行16列的矩阵,矩阵B1的16列中每一列的元素均按顺序划分到两个组,每组元素的数量为8,且每组元素中非零元素的数量均小于或等于2,此时矩阵B1可以如图1所示,这种情况下,矩阵B1的16列中每一列的每8个连续的元素均被稀疏成不超过2个非零元素,对应的条件稀疏率是25%。
矩阵A1满足条件稀疏是指:矩阵A1的m行中每一行的元素均按顺序划分到预设数值个组,每组元素的数量均为k1,且每组元素中非零元素的数量均小于或等于k2,预设数值为正整数,k大于或等于k1且k能够被k1整除,k1大于或等于k2且k1能够被k2整除。例如,m=5,k=4,k1=2,k2=1,预设数值为2,即矩阵A1为5行4列的矩阵,矩阵A1的5行中每一行的元素均按顺序划分到两个组,每组元素的数量为2,且每组元素中非零元素的数量均小于或等于1,此时矩阵A1可以如图2所示,这种情况下,矩阵A1的5行中每一行的每2个连续的元素均被稀疏成不超过1个非零元素,对应的条件稀疏率是50%。
需要说明的是,对于矩阵A1乘以矩阵B1的情况,如果矩阵B1为满足条件稀疏的矩阵,则可以通过下文图3实施例提供的执行矩阵乘法运算的方法来确定矩阵A1与矩阵B1的乘积;如果矩阵A1为满足条件稀疏的矩阵,则可以通过下文图10实施例提供的执行矩阵乘法运算的方法来确定矩阵A1与矩阵B1的乘积。
图3是本申请实施例提供的一种执行矩阵乘法运算的方法的流程图。参见图3,该方法包括:
步骤301:获取矩阵A1、矩阵B2和索引矩阵。
需要说明的是,矩阵A1是m行k列的矩阵,m和k均为正整数。矩阵A1可以为深度学习网络中的任意算子(如卷积、Inner product等)展开后的矩阵乘矩阵的运算中的被乘数,且矩阵A1可以为数据矩阵,当然,矩阵A1也可以为其它应用中的矩阵乘矩阵的运算中的被乘数,本申请实施例对此不作限定。
另外,矩阵B2是t行n列的矩阵,t和n均为正整数,t小于或等于k。矩阵B2中包含矩阵B1中所有的非零元素(有效数据)。矩阵B1是k行n列的矩阵,矩阵B1可以为深度学习网络中的任意算子展开后的矩阵乘矩阵的运算中的乘数,且矩阵B1可以为参数矩阵,当然,矩阵B1也可以为其它应用中的矩阵乘矩阵的运算中的乘数,本申请实施例对此不作限定。
再者,索引矩阵是t行n列的矩阵。索引矩阵为矩阵B2中的元素在矩阵B1中的索引,即包括矩阵B1中所有的非零元素在矩阵B1中的索引。
具体地,在获取矩阵A1时,可以直接从存储器中读取矩阵A1。在获取矩阵B2和索引矩阵时,可以直接从存储器中读取矩阵B2和索引矩阵;或者,可以先获取矩阵B1,再根据矩阵B1生成矩阵B2,然后根据矩阵B1和矩阵B2生成索引矩阵。
其中,获取矩阵B1时,可以直接从存储器中读取矩阵B1。
需要说明的是,矩阵B1可以为满足条件稀疏的矩阵,即矩阵B1的n列中每一列的元素均按顺序划分到预设数值个组,每组元素的数量均为k1,且每组元素中非零元素的数量均小于或等于k2,预设数值是t除以k2后得到的数值,k大于或等于k1且k能够被k1整除,k1大于或等于k2且k1能够被k2整除。
另外,矩阵B1可以通过神经网络训练得到,例如,在深度学习场景下,可以通过控制深度学习网络的训练过程,将卷积、Inner product等算子的参数的分布训练成符合条件稀疏的分布规律,以得到满足条件稀疏的参数矩阵作为矩阵B1;当然,矩阵B1也可以通过其它方式得到,本申请实施例对此不作限定。
再者,矩阵A1和矩阵B1中的元素的数据类型可以根据实际需求预先进行设置,如可以是整形、浮点或任意的自定义格式,且m、k、n、k1、k2和预设数值的取值也可以根据实际需求预先进行设置,如可以根据神经网络的稀疏程度及硬件的计算能力合理确定,本申请实施例对此不作限定。
例如,k=16,n=16,k1=16,k2=4,预设数值为1,即矩阵B1为16行16列的矩阵,矩阵B1的16列中每一列的元素均按顺序划分到一个组,每组元素的数量为16,且每组元素中非零元素的数量均小于或等于4,此时矩阵B1可以如图4所示。这种情况下,矩阵B1的16列中每一列的每16个连续的元素均被稀疏成不超过4个非零元素,对应的条件稀疏率是25%。
其中,矩阵B2的n列与矩阵B1的n列按顺序一一对应,矩阵B2的每一列的元素包括对应的矩阵B1中的一列中按顺序排列的预设数值个组中所有的非零元素。也即是,对于矩阵B1的n列中的每一列,如对于矩阵B1的n列中的第i列,是按顺序从矩阵B1的第i列的预设数值个组中的每组元素中选择包含有所有的非零元素的k2个元素作为矩阵B2的第i列,来得到矩阵B2,i为大于或等于1且小于或等于n的整数。
例如,k=16,n=16,k1=16,k2=4,预设数值为1,此时矩阵B1可以如图4所示。之后,可以按顺序从矩阵B1的第1列的一组元素中选择包含有这一组元素中所有的非零元素的4个元素作为矩阵B2的第1列;按顺序从矩阵B1的第2列的一组元素中选择包含有这一组元素中所有的非零元素的4个元素作为矩阵B2的第2列;以此类推,直至按顺序从矩阵B1的第16列的一组元素中选择包含有这一组元素中所有的非零元素的4个元素作为矩阵B2的第16列为止,如此可以得到如图5所示的矩阵B2,此时矩阵B2是4行16列的矩阵,且包含有矩阵B1中所有的非零元素。
其中,索引矩阵的n列与矩阵B2的n列按顺序一一对应,索引矩阵的每一列的元素为对应的矩阵B2中的一列中按顺序排列的所有元素在矩阵B1中的行标。也即是,对于矩阵B2的n列中的每一列,如对于矩阵B2的n列中的第i列,是按顺序将矩阵B2的第i列的所有元素中每个元素在矩阵B1中的行标作为索引矩阵的第i列,来得到索引矩阵。
值得说明的是,本申请实施例中引入了条件稀疏的概念,使得矩阵B1的n列中每一列的非零元素的数量均可以控制在一定的范围内,如此可以有效控制数据索引的范围,从而可以有效降低索引矩阵的规模,保证工程上的可实现性。并且,本申请实施例中后续仅使用这一个索引矩阵就可以完成矩阵乘法运算,因而消耗的逻辑资源较少。
需要说明的是,对于矩阵B2中的任意一个元素,当矩阵B2中的一个元素非零时,矩阵B2中的这一个元素在矩阵B1中的行标是矩阵B2中的这一个元素在矩阵B1中所属的一行的行号;当矩阵B2中的一个元素为零时,矩阵B2中的这一个元素在矩阵B1中的行标是第一字符。
另外,引入第一字符可以满足矩阵元素对齐的要求,第一字符可以预先进行设置,具体实现时第一字符可以为任意值,如第一字符可以为X、Y等,本申请实施例对此不作限定。
例如,k=16,n=16,k1=16,k2=4,预设数值为1,第一字符为X,此时矩阵B1可以如图4所示,矩阵B2可以如图5所示。之后,按顺序将矩阵B2的第1列的4个元素中每个元素在矩阵B1中的行标作为索引矩阵的第1列,按顺序将矩阵B2的第2列的4个元素中每个元素在矩阵B1中的行标作为索引矩阵的第2列,以此类推,直至按顺序将矩阵B2的第16列的4个元素中每个元素在矩阵B1中的行标作为索引矩阵的第16列为止,如此可以得到如图6所示的索引矩阵,此时索引矩阵是4行16列的矩阵,且包括矩阵B1中所有的非零元素在矩阵B1中的索引。
步骤302:根据索引矩阵和矩阵A1,生成n个矩阵A2。
需要说明的是,n个矩阵A2均是m行t列的矩阵,n个矩阵A2与索引矩阵的n列按顺序一一对应,每个矩阵A2的t列与对应的索引矩阵中的一列的t个元素按顺序一一对应,每个矩阵A2的每一列为对应的索引矩阵中的一个元素在矩阵A1中指示的一列。也即是,对于索引矩阵的n列中的每一列的t个元素中的每一个元素,如对于索引矩阵的第i列的第j个元素,是将索引矩阵的第i列的第j个元素在矩阵A1中指示的一列作为n个矩阵A2中的第i个矩阵A2的第j列,来得到n个矩阵A2,j为大于或等于1且小于或等于t的整数。
值得说明的是,本申请实施例中是根据索引矩阵的每一列的t个元素,直接读取矩阵A1中t列的元素来构成一个矩阵A2。这种情况下,由于所要读取的数据在矩阵A1中的分布比较规则且集中,所以在将矩阵A1存储到存储器中时,可以将矩阵A1的k列分别存储到存储器中的多个地址上,这种情况下,根据索引矩阵可以一次性从存储器中读取到所需的数据,从而不仅可以大大降低读取数据时所需的存储器访问带宽,而且可以消除从存储器中读取数据时可能出现的地址冲突问题。
需要说明的是,对于索引矩阵中的任意一个元素,当索引矩阵中的一个元素不是第一字符时,索引矩阵中的这一个元素在矩阵A1中指示的一列是矩阵A1的所有列中列号为索引矩阵中的这一个元素的一列;当索引矩阵中的一个元素是第一字符时,索引矩阵中的这一个元素对应的一个矩阵A2中的一列的元素是m个第二字符。也即是,当索引矩阵的第i列的第j个元素不是第一字符时,可以将矩阵A1的所有列中列号为该第j个元素的一列作为第i个矩阵A2的第j列;当索引矩阵的第i列的第j个元素是第一字符时,将m个第二字符作为第i个矩阵A2的第j列。
另外,第二字符可以预先进行设置,具体实现时第二字符可以为任意值,如第二字符可以为0、X、矩阵A1中的任意元素等,本申请实施例对此不作限定。
例如,m=16,k=16,n=16,t=4,第一字符和第二字符均为X,此时索引矩阵可以如图6所示,矩阵A1可以如图7所示。之后,将索引矩阵的第1列的第1个元素在矩阵A1中指示的一列作为第1个矩阵A2的第1列,将索引矩阵的第1列的第2个元素在矩阵A1中指示的一列作为第1个矩阵A2的第2列,将索引矩阵的第1列的第3个元素在矩阵A1中指示的一列作为第1个矩阵A2的第3列,将索引矩阵的第1列的第4个元素在矩阵A1中指示的一列作为第1个矩阵A2的第4列,得到第1个矩阵A2,以此类推,直至将索引矩阵的第16列的第1个元素在矩阵A1中指示的一列作为第16个矩阵A2的第1列,将索引矩阵的第16列的第2个元素在矩阵A1中指示的一列作为第16个矩阵A2的第2列,将索引矩阵的第16列的第3个元素在矩阵A1中指示的一列作为第16个矩阵A2的第3列,将索引矩阵的第16列的第4个元素在矩阵A1中指示的一列作为第16个矩阵A2的第4列,得到第16个矩阵A2为止,如此可以得到如图8所示的16个矩阵A2,该16个矩阵A2均是16行4列的矩阵。
步骤303:根据n个矩阵A2和矩阵B2,生成矩阵C。
需要说明的是,矩阵C是m行n列的矩阵,矩阵C为矩阵A1与矩阵B1的乘积。矩阵C的n列与n个矩阵A2按顺序一一对应,矩阵C的n列与矩阵B2的n列按顺序一一对应,矩阵C的每一列为对应的一个矩阵A2与对应的矩阵B2中的一列的乘积。也即是,对于矩阵C的n列中的每一列,如对于矩阵C的第i列,是将第i个矩阵A2与矩阵B2的第i列的乘积作为矩阵C的第i列,来得到矩阵C。
值得说明的是,本申请实施例中根据索引矩阵可以一次性从矩阵A1中读取出n个矩阵A2,继而可以将该n个矩阵A2一一乘以矩阵B2的n列,来得到矩阵C。由于只需从矩阵A1中读取一次数据就能够完成矩阵乘法运算,所以可以实现数据复用性的最大化,节省处理资源。并且,将该n个矩阵A2一一乘以矩阵B2的n列时,由于该n个矩阵A2的大小相同,所以该n个矩阵A2与矩阵B2的n列的乘法运算可以并行执行,且可以在相同的时间内执行完成,从而可以节省运算时间,提高运算效率。
例如,m=16,n=16,t=4,此时矩阵B2可以如图5所示,16个矩阵A2可以如图8所示。之后,可以将第1个矩阵A2与矩阵B2的第1列的乘积作为矩阵C的第1列,将第2个矩阵A2与矩阵B2的第2列的乘积作为矩阵C的第2列,以此类推,直至将第16个矩阵A2与矩阵B2的第16列的乘积作为矩阵C的第16列,如此可以得到如图9所示的矩阵C,此时矩阵C为16行16列的矩阵。
值得注意的是,本申请实施例在矩阵乘法运算过程中,引入了条件稀疏的概念,然后通过上述方式来进行矩阵A1与满足条件稀疏的矩阵B1的乘法运算,从而可以大大提升计算性能,计算性能的提升倍数为矩阵B1的条件稀疏率的倒数,例如,矩阵B1的条件稀疏率为25%,则计算性能可以提升4倍。
在本申请实施例中,获取矩阵A1、矩阵B2和索引矩阵。之后,根据索引矩阵和矩阵A1,生成n个矩阵A2,由于根据索引矩阵可以一次性从存储器中存储的矩阵A1读取到所需的数据,所以不仅可以大大降低读取数据时所需的存储器访问带宽,而且可以消除从存储器中读取数据时可能出现的地址冲突问题。最后,根据n个矩阵A2和矩阵B2,生成矩阵C,由于n个矩阵A2的大小相同,所以将该n个矩阵A2一一乘以矩阵B2的n列时,该n个矩阵A2与矩阵B2的n列的乘法运算可以并行执行,且可以在相同的时间内执行完成,从而可以节省运算时间,提高运算效率。本申请实施例中只需从矩阵A1中读取一次数据就能够完成矩阵乘法运算,因而可以实现数据复用性的最大化,节省处理资源。
图10是本申请实施例提供的一种执行矩阵乘法运算的方法的流程图。参见图10,该方法包括:
步骤1001:获取矩阵B1、矩阵A2和索引矩阵。
需要说明的是,矩阵B1是k行n列的矩阵,k和n均为正整数。矩阵B1可以为深度学习网络中的任意算子(如卷积、Inner product等)展开后的矩阵乘矩阵的运算中的乘数,且矩阵B1可以为数据矩阵,当然,矩阵B1也可以为其它应用中的矩阵乘矩阵的运算中的乘数,本申请实施例对此不作限定。
另外,矩阵A2是m行t列的矩阵,m和t均为正整数,t小于或等于所述k。矩阵A2中包含矩阵A1中所有的非零元素(有效数据)。矩阵A1是m行k列的矩阵,矩阵A1可以为深度学习网络中的任意算子展开后的矩阵乘矩阵的运算中的被乘数,且矩阵A1可以为参数矩阵,当然,矩阵A1也可以为其它应用中的矩阵乘矩阵的运算中的被乘数,本申请实施例对此不作限定。
再者,索引矩阵是m行t列的矩阵。索引矩阵为矩阵A2中的元素在矩阵A1中的索引,即包括矩阵A1中所有的非零元素在矩阵A1中的索引。
具体地,在获取矩阵B1时,可以直接从存储器中读取矩阵B1。在获取矩阵A2和索引矩阵时,可以直接从存储器中读取矩阵A2和索引矩阵;或者,可以先获取矩阵A1,再根据矩阵A1生成矩阵A2,然后根据矩阵A1和矩阵A2生成索引矩阵。
其中,获取矩阵A1时,可以直接从存储器中读取矩阵A1。
需要说明的是,矩阵A1可以为满足条件稀疏的矩阵,即矩阵A1的m行中每一行的元素均按顺序划分到预设数值个组,每组元素的数量均为k1,且每组元素中非零元素的数量均小于或等于k2,预设数值是t除以k2后得到的数值,k大于或等于k1且k能够被k1整除,k1大于或等于k2且k1能够被k2整除。
另外,矩阵A1可以通过神经网络训练得到,例如,在深度学习场景下,可以通过控制深度学习网络的训练过程,将卷积、Inner product等算子的参数的分布训练成符合条件稀疏的分布规律,以得到满足条件稀疏的参数矩阵作为矩阵A1;当然,矩阵A1也可以通过其它方式得到,本申请实施例对此不作限定。
再者,矩阵A1和矩阵B1中的元素的数据类型可以根据实际需求预先进行设置,如可以是整形、浮点或任意的自定义格式,且m、k、n、k1、k2和预设数值的取值也可以根据实际需求预先进行设置,如可以根据神经网络的稀疏程度及硬件的计算能力合理确定,本申请实施例对此不作限定。
例如,m=5,k=4,k1=4,k2=2,预设数值为1,即矩阵A1为5行4列的矩阵,矩阵A1的5行中每一行的元素均按顺序划分到一个组,每组元素的数量为4,且每组元素中非零元素的数量均小于或等于2,此时矩阵A1可以如图11所示。这种情况下,矩阵A1的5行中每一行的每4个连续的元素均被稀疏成不超过2个非零元素,对应的条件稀疏率是50%。
其中,矩阵A2的m行与矩阵A1的m行按顺序一一对应,矩阵A2的每一行的元素包括对应的矩阵A1中的一行中按顺序排列的预设数值个组中所有的非零元素。也即是,对于矩阵A1的m行中的每一行,如对于矩阵A1的m行中的第i行,是按顺序从矩阵A1的第i行的预设数值个组中的每组元素中选择包含有所有的非零元素的k2个元素作为矩阵A2的第i行,来得到矩阵A2,i为大于或等于1且小于或等于m的整数。
例如,m=5,k=4,k1=4,k2=2,预设数值为1,此时矩阵A1可以如图11所示。之后,可以按顺序从矩阵A1的第1行的一组元素中选择包含有这一组元素中所有的非零元素的2个元素作为矩阵A2的第1行;按顺序从矩阵A1的第2行的一组元素中选择包含有这一组元素中所有的非零元素的2个元素作为矩阵A2的第2行,以此类推,直至按顺序从矩阵A1的第5行的一组元素中选择包含有这一组元素中所有的非零元素的2个元素作为矩阵A2的第5行为止,如此可以得到如图12所示的矩阵A2,此时矩阵A2是5行2列的矩阵,且包含有矩阵A1中所有的非零元素。
其中,索引矩阵的m行与矩阵A2的m行按顺序一一对应,索引矩阵的每一行的元素为对应的矩阵A2中的一行中按顺序排列的所有元素在矩阵A1中的列标。也即是,对于矩阵A2的m行中的每一行,如对于矩阵A2的m行中的第i行,是按顺序将矩阵A2的第i行的所有元素中每个元素在矩阵A1中的列标作为索引矩阵的第i行,来得到索引矩阵。
值得说明的是,本申请实施例中引入了条件稀疏的概念,使得矩阵A1的m行中每一行的非零元素的数量均可以控制在一定的范围内,如此可以有效控制数据索引的范围,从而可以有效降低索引矩阵的规模,保证工程上的可实现性。并且,本申请实施例中后续仅使用这一个索引矩阵就可以完成矩阵乘法运算,因而消耗的逻辑资源较少。
需要说明的是,对于矩阵A2中的任意一个元素,当矩阵A2中的一个元素非零时,矩阵A2中的这一个元素在矩阵A1中的列标是矩阵A2中的这一个元素在矩阵A1中所属的一列的列号;当矩阵A2中的一个元素为零时,矩阵A2中的这一个元素在矩阵A1中的列标是第一字符。
另外,引入第一字符可以满足矩阵元素对齐的要求,第一字符可以预先进行设置,具体实现时第一字符可以为任意值,如第一字符可以为X、Y等,本申请实施例对此不作限定。
例如,m=5,k=4,k1=4,k2=2,预设数值为1,第一字符为X,此时矩阵A1可以如图11所示,矩阵A2可以如图12所示。之后,按顺序将矩阵A2的第1行的2个元素中每个元素在矩阵A1中的列标作为索引矩阵的第1行,按顺序将矩阵A2的第2行的2个元素中每个元素在矩阵A1中的列标作为索引矩阵的第2行,以此类推,直至按顺序将矩阵A2的第5行的2个元素中每个元素在矩阵A1中的列标作为索引矩阵的第5行为止,如此可以得到如图13所示的索引矩阵,此时索引矩阵是5行2列的矩阵,且包括矩阵A1中所有的非零元素在矩阵A1中的索引。
步骤1002:根据索引矩阵和矩阵B1,生成m个矩阵B2。
需要说明的是,m个矩阵B2均是t行n列的矩阵,m个矩阵B2与索引矩阵的m行按顺序一一对应,每个矩阵B2的t行与对应的索引矩阵中的一行的t个元素按顺序一一对应,每个矩阵B2的每一行为对应的索引矩阵中的一个元素在矩阵B1中指示的一行。也即是,对于索引矩阵的m行中的每一行的t个元素中的每一个元素,如对于索引矩阵的第i行的第j个元素,是将索引矩阵的第i行的第j个元素在矩阵B1中指示的一行作为m个矩阵B2中的第i个矩阵B2的第j行,来得到m个矩阵B2,j为大于或等于1且小于或等于t的整数。
值得说明的是,本申请实施例中是根据索引矩阵的每一行的t个元素,直接读取矩阵B1中t行的元素来构成一个矩阵B2。这种情况下,由于所要读取的数据在矩阵B1中的分布比较规则且集中,所以在将矩阵B1存储到存储器中时,可以将矩阵B1的k行分别存储到存储器中的多个地址上,这种情况下,根据索引矩阵可以一次性从存储器中读取到所需的数据,从而不仅可以大大降低读取数据时所需的存储器访问带宽,而且可以消除从存储器中读取数据时可能出现的地址冲突问题。
需要说明的是,对于索引矩阵中的任意一个元素,当索引矩阵中的一个元素不是第一字符时,索引矩阵中的这一个元素在矩阵B1中指示的一行是矩阵B1的所有行中行号为索引矩阵中的这一个元素的一行;当索引矩阵中的一个元素是第一字符时,索引矩阵中的这一个元素对应的一个矩阵B2中的一行的元素是n个第二字符。也即是,当索引矩阵的第i行的第j个元素不是第一字符时,可以将矩阵B1的所有行中行号为该第j个元素的一行作为第i个矩阵B2的第j行;当索引矩阵的第i行的第j个元素是第一字符时,将n个第二字符作为第i个矩阵B2的第j行。
另外,第二字符可以预先进行设置,具体实现时第二字符可以为任意值,如第二字符可以为0、X、矩阵B1中的任意元素等,本申请实施例对此不作限定。
例如,m=5,k=4,n=3,t=2,第一字符和第二字符均为X,此时索引矩阵可以如图13所示,矩阵B1可以如图14所示。之后,将索引矩阵的第1行的第1个元素在矩阵B1中指示的一行作为第1个矩阵B2的第1行,将索引矩阵的第1行的第2个元素在矩阵B1中指示的一行作为第1个矩阵B2的第2行,得到第1个矩阵B2,以此类推,直至将索引矩阵的第5行的第1个元素在矩阵B1中指示的一行作为第5个矩阵B2的第1行,将索引矩阵的第5行的第2个元素在矩阵B1中指示的一行作为第5个矩阵B2的第2行,得到第5个矩阵B2为止,如此可以得到如图15所示的5个矩阵B2,该5个矩阵B2均是2行3列的矩阵。
步骤1003:根据矩阵A2和m个矩阵B2,生成矩阵C。
需要说明的是,矩阵C是m行n列的矩阵,矩阵C为矩阵A1与矩阵B1的乘积。矩阵C的m行与矩阵A2的m行按顺序一一对应,矩阵C的m行与m个矩阵B2按顺序一一对应,矩阵C的每一行为对应的矩阵A2中的一行与对应的一个矩阵B2的乘积。也即是,对于矩阵C的m行中的每一行,如对于矩阵C的第i行,是将矩阵A2的第i行与第i个矩阵B2的乘积作为矩阵C的第i行,来得到矩阵C。
值得说明的是,本申请实施例中根据索引矩阵可以一次性从矩阵B1中读取出m个矩阵B2,继而可以将矩阵A2的m行一一乘以该m个矩阵B2,来得到矩阵C。由于只需从矩阵B1中读取一次数据就能够完成矩阵乘法运算,所以可以实现数据复用性的最大化,节省处理资源。并且,将矩阵A2的m行一一乘以该m个矩阵B2时,由于该m个矩阵B2的大小相同,所以矩阵A2的m行与该m个矩阵B2的乘法运算可以并行执行,且可以在相同的时间内执行完成,从而可以节省运算时间,提高运算效率。
例如,m=5,n=3,t=2,此时矩阵A2可以如图12所示,5个矩阵B2可以如图15所示。之后,可以将矩阵A2的第1行与第1个矩阵B2的乘积作为矩阵C的第1行,将矩阵A2的第2行与第2个矩阵B2的乘积作为矩阵C的第2行,以此类推,直至将矩阵A2的第5行与第5个矩阵B2的乘积作为矩阵C的第5行为止,如此可以得到如图16所示的矩阵C,此时矩阵C为5行3列的矩阵。
值得注意的是,本申请实施例在矩阵乘法运算过程中,引入了条件稀疏的概念,然后通过上述方式来进行满足条件稀疏的矩阵A1与矩阵B1的乘法运算,从而可以大大提升计算性能,计算性能的提升倍数为矩阵A1的条件稀疏率的倒数,例如,矩阵A1的条件稀疏率为50%,则计算性能可以提升2倍。
在本申请实施例中,获取矩阵B1、矩阵A2和索引矩阵。之后,根据索引矩阵和矩阵B1,生成m个矩阵B2,由于根据索引矩阵可以一次性从存储器中存储的矩阵B1中读取到所需的数据,所以不仅可以大大降低读取数据时所需的存储器访问带宽,而且可以消除从存储器中读取数据时可能出现的地址冲突问题。最后,根据矩阵A2和m个矩阵B2,生成矩阵C,由于m个矩阵B2的大小相同,所以将矩阵A2的m行一一乘以该m个矩阵B2时,矩阵A2的m行与该m个矩阵B2的乘法运算可以并行执行,且可以在相同的时间内执行完成,从而可以节省运算时间,提高运算效率。本申请实施例中只需从矩阵B1中读取一次数据就能够完成矩阵乘法运算,因而可以实现数据复用性的最大化,节省处理资源。
接下来对本申请实施例提供的执行矩阵乘法运算的电路进行说明。
图17是本申请实施例提供的一种执行矩阵乘法运算的电路的结构示意图。该执行矩阵乘法运算的电路可以通过现场可编程门阵列((Field-Programmable Gate Array,FPGA)、ASIC等实现。参见图17,该执行矩阵乘法运算的电路包括:获取电路1701、数据选择电路1702和计算单元阵列1703。
下面结合图17所示的执行矩阵乘法运算的电路分别对上述图3和图10实施例提供的执行矩阵乘法运算的方法进行说明。
其中,该执行矩阵乘法运算的电路实现图3实施例提供的执行矩阵乘法运算的方法的过程可以包括如下步骤(1)-(3):
(1)获取电路1701获取矩阵A1、矩阵B2和索引矩阵。
需要说明的是,参见图18,该执行矩阵乘法运算的电路还可以包括第一存储器1704,第一存储器用于存储矩阵A1、矩阵B2和索引矩阵,这种情况下,获取电路1701可以从第一存储器1704中读取矩阵A1、矩阵B2和索引矩阵。或者,获取电路1701可以先获取矩阵A1和矩阵B1,再根据矩阵B1生成矩阵B2,然后根据矩阵B1和矩阵B2生成索引矩阵。
(2)数据选择电路1702根据索引矩阵和矩阵A1,生成n个矩阵A2。
(3)计算单元阵列1703根据n个矩阵A2和矩阵B2,生成矩阵C。
需要说明的是,如图19所示,计算单元阵列1703包括多个三维计算单元,该多个三维计算单元可以分布在m行n列上,每个三维计算单元中包括多个乘法单元和加法单元,如三维计算单元可以为乘累加单元(multiply and accumulate,mac)。1个三维计算单元可以用于计算1个矩阵A2的1行与矩阵B2的1列的乘积,1列三维计算单元(m个三维计算单元)可以用于计算1个矩阵A2与矩阵B2的1列的乘积,即1列三维计算单元可以计算出矩阵C的1列的元素,从而n列三维计算单元可以计算出矩阵C的n列的元素,如此可以得到矩阵C。
另外,计算单元阵列1703得到矩阵C后,还可以将矩阵C保存到寄存器组中,该寄存器组可以包含于第一存储器1704中,也可以包含于其它存储器中,本申请实施例对此不作限定。
其中,该执行矩阵乘法运算的电路实现图10实施例提供的执行矩阵乘法运算的方法的过程可以包括如下步骤(4)-(6):
(4)获取电路1701获取获取矩阵B1、矩阵A2和索引矩阵。
需要说明的是,参见图18,该执行矩阵乘法运算的电路还可以包括第一存储器1704,第一存储器用于存储矩阵B1、矩阵A2和索引矩阵,这种情况下,获取电路1701可以从第一存储器1704中读取矩阵B1、矩阵A2和索引矩阵。或者,获取电路1701可以先获取矩阵A1和矩阵B1,再根据矩阵A1生成矩阵A2,然后根据矩阵A1和矩阵A2生成索引矩阵。
(5)数据选择电路1702根据索引矩阵和矩阵B1,生成m个矩阵B2。
(6)计算单元阵列1703根据矩阵A2和m个矩阵B2,生成矩阵C。
需要说明的是,如图19所示,计算单元阵列1703包括多个三维计算单元,该多个三维计算单元可以分布在m行n列上,每个三维计算单元中包括多个乘法单元和加法单元,如三维计算单元可以为mac。1个三维计算单元可以用于计算矩阵A2的1行与一个矩阵B2的1列的乘积,1行三维计算单元(n个三维计算单元)可以用于计算矩阵A2的1行与一个矩阵B2的乘积,即1行三维计算单元可以计算出矩阵C的1行的元素,从而m行三维计算单元可以计算出矩阵C的m行的元素,如此可以得到矩阵C。
另外,计算单元阵列1703得到矩阵C后,还可以将矩阵C保存到寄存器组中,该寄存器组可以包含于第一存储器1704中,也可以包含于其它存储器中,本申请实施例对此不作限定。
接下来对本申请实施例提供的SOC进行说明。
本申请实施例提供的一种SOC可以包括上述实施例中所述的执行矩阵乘法运算的电路,除此之外,还可以包括其它部件。
例如,图20是本申请实施例提供的一种SOC的结构示意图。参见图20,该SOC包括:处理器2001、第二存储器2002、互联总线2003和执行矩阵乘法运算的电路2004,执行矩阵乘法运算的电路2004可以为上述实施例中所述的执行矩阵乘法运算的电路。
需要说明的是,第二存储器2002中存储的数据与上述第一存储器1704中存储的数据相同,即用于存储矩阵A1、矩阵B2和索引矩阵,或者用于存储矩阵B1、矩阵A2和索引矩阵。第一存储器1704可以为RAM等,第二存储器2002可以为双倍速率同步动态随机存储器(Double Data Rate,DDR)等。
具体地,该SOC执行矩阵乘法运算时,处理器2001通过互联总线2003控制执行矩阵乘法运算的电路2004启动,执行矩阵乘法运算的电路2004启动后其中的获取电路1701通过互联总线2003从第二存储器2002中读取数据(读取矩阵A1、矩阵B2和索引矩阵,或者读取矩阵B1、矩阵A2和索引矩阵),之后,执行矩阵乘法运算的电路2004中的数据选择电路1702和计算单元阵列1703根据获取电路1701从第二存储器2002中读取到的数据完成矩阵乘法运算,并将运算结果返回到第二存储器2002。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络或其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如:同轴电缆、光纤、数据用户线(Digital Subscriber Line,DSL))或无线(例如:红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质,或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如:软盘、硬盘、磁带)、光介质(例如:数字通用光盘(Digital Versatile Disc,DVD))或半导体介质(例如:固态硬盘(Solid State Disk,SSD))等。
以上所述为本申请提供的实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (18)

1.一种执行矩阵乘法运算的方法,其特征在于,应用于包括获取电路、选择电路以及计算单元阵列的电路,所述方法包括:
所述获取电路获取矩阵A1、矩阵B2和索引矩阵,所述矩阵A1是m行k列的矩阵,所述矩阵B2是t行n列的矩阵,所述索引矩阵是t行n列的矩阵,所述m、所述k、所述t和所述n均为正整数,所述t小于或等于所述k;
所述选择电路根据所述索引矩阵和所述矩阵A1,生成n个矩阵A2,所述n个矩阵A2均是m行t列的矩阵,所述n个矩阵A2与所述索引矩阵的n列按顺序一一对应,每个矩阵A2的t列与对应的所述索引矩阵中的一列的t个元素按顺序一一对应,所述每个矩阵A2的每一列为对应的所述索引矩阵中的一个元素在所述矩阵A1中指示的一列;
所述计算单元阵列根据所述n个矩阵A2和所述矩阵B2,生成矩阵C,所述矩阵C是m行n列的矩阵,所述矩阵C的n列与所述n个矩阵A2按顺序一一对应,所述矩阵C的n列与所述矩阵B2的n列按顺序一一对应,所述矩阵C的每一列为对应的一个矩阵A2与对应的所述矩阵B2中的一列的乘积。
2.如权利要求1所述的方法,其特征在于,所述获取电路获取矩阵B2和索引矩阵,包括:
所述获取电路获取矩阵B1,所述矩阵B1是k行n列的矩阵,所述矩阵B1的n列中每一列的元素均按顺序划分到预设数值个组,每组元素的数量均为k1,且所述每组元素中非零元素的数量均小于或等于k2,所述预设数值是所述t除以所述k2后得到的数值,所述k大于或等于所述k1且所述k能够被所述k1整除,所述k1大于或等于所述k2且所述k1能够被所述k2整除;
所述获取电路根据所述矩阵B1,生成所述矩阵B2,所述矩阵B2的n列与所述矩阵B1的n列按顺序一一对应,所述矩阵B2的每一列的元素包括对应的所述矩阵B1中的一列中按顺序排列的预设数值个组中所有的非零元素;
所述获取电路根据所述矩阵B1和所述矩阵B2,生成所述索引矩阵,所述索引矩阵的n列与所述矩阵B2的n列按顺序一一对应,所述索引矩阵的每一列的元素为对应的所述矩阵B2中的一列中按顺序排列的所有元素在所述矩阵B1中的行标。
3.如权利要求2所述的方法,其特征在于,
对于所述矩阵B2中的任意一个元素,当所述矩阵B2中的一个元素非零时,所述矩阵B2中的一个元素在所述矩阵B1中的行标是所述矩阵B2中的一个元素在所述矩阵B1中所属的一行的行号;当所述矩阵B2中的一个元素为零时,所述矩阵B2中的一个元素在所述矩阵B1中的行标是第一字符。
4.如权利要求3所述的方法,其特征在于,
对于所述索引矩阵中的任意一个元素,当所述索引矩阵中的一个元素不是所述第一字符时,所述索引矩阵中的一个元素在所述矩阵A1中指示的一列是所述矩阵A1的所有列中列号为所述索引矩阵中的一个元素的一列;当所述索引矩阵中的一个元素是所述第一字符时,所述索引矩阵中的一个元素对应的一个矩阵A2中的一列的元素是m个第二字符。
5.如权利要求2-4任一所述的方法,其特征在于,所述矩阵B1是通过神经网络训练得到。
6.一种执行矩阵乘法运算的电路,其特征在于,所述电路包括:
获取电路,用于获取矩阵A1、矩阵B2和索引矩阵,所述矩阵A1是m行k列的矩阵,所述矩阵B2是t行n列的矩阵,所述索引矩阵是t行n列的矩阵,所述m、所述k、所述t和所述n均为正整数,所述t小于或等于所述k;
数据选择电路,用于根据所述索引矩阵和所述矩阵A1,生成n个矩阵A2,所述n个矩阵A2均是m行t列的矩阵,所述n个矩阵A2与所述索引矩阵的n列按顺序一一对应,每个矩阵A2的t列与对应的所述索引矩阵中的一列的t个元素按顺序一一对应,所述每个矩阵A2的每一列为对应的所述索引矩阵中的一个元素在所述矩阵A1中指示的一列;
计算单元阵列,用于根据所述n个矩阵A2和所述矩阵B2,生成矩阵C,所述矩阵C是m行n列的矩阵,所述矩阵C的n列与所述n个矩阵A2按顺序一一对应,所述矩阵C的n列与所述矩阵B2的n列按顺序一一对应,所述矩阵C的每一列为对应的一个矩阵A2与对应的所述矩阵B2中的一列的乘积。
7.如权利要求6所述的电路,其特征在于,所述电路还包括第一存储器,所述第一存储器用于存储所述矩阵A1、所述矩阵B2和所述索引矩阵;
相应地,所述获取电路用于:从所述第一存储器中读取所述矩阵A1、所述矩阵B2和所述索引矩阵。
8.一种片上***SOC,其特征在于,所述SOC包括上述权利要求6或7所述的执行矩阵乘法运算的电路。
9.如权利要求8所述的SOC,其特征在于,所述SOC还包括第二存储器,所述第二存储器用于存储所述矩阵A1、所述矩阵B2和所述索引矩阵;
相应地,所述获取电路用于:从所述第二存储器中读取所述矩阵A1、所述矩阵B2和所述索引矩阵。
10.一种执行矩阵乘法运算的方法,其特征在于,应用于包括获取电路、选择电路以及计算单元阵列的电路,所述方法包括:
所述获取电路获取矩阵B1、矩阵A2和索引矩阵,所述矩阵B1是k行n列的矩阵,所述矩阵A2是m行t列的矩阵,所述索引矩阵是m行t列的矩阵,所述k、所述n、所述m和所述t均为正整数,所述t小于或等于所述k;
所述选择电路根据所述索引矩阵和所述矩阵B1,生成m个矩阵B2,所述m个矩阵B2均是t行n列的矩阵,所述m个矩阵B2与所述索引矩阵的m行按顺序一一对应,每个矩阵B2的t行与对应的所述索引矩阵中的一行的t个元素按顺序一一对应,所述每个矩阵B2的每一行为对应的所述索引矩阵中的一个元素在所述矩阵B1中指示的一行;
所述计算单元阵列根据所述矩阵A2和所述m个矩阵B2,生成矩阵C,所述矩阵C是m行n列的矩阵,所述矩阵C的m行与所述矩阵A2的m行按顺序一一对应,所述矩阵C的m行与所述m个矩阵B2按顺序一一对应,所述矩阵C的每一行为对应的所述矩阵A2中的一行与对应的一个矩阵B2的乘积。
11.如权利要求10所述的方法,其特征在于,所述获取电路获取矩阵A2和索引矩阵,包括:
所述获取电路获取矩阵A1,所述矩阵A1是m行k列的矩阵,所述矩阵A1的m行中每一行的元素均按顺序划分到预设数值个组,每组元素的数量均为k1,且所述每组元素中非零元素的数量均小于或等于k2,所述预设数值是所述t除以所述k2后得到的数值,所述k大于或等于所述k1且所述k能够被所述k1整除,所述k1大于或等于所述k2且所述k1能够被所述k2整除;
所述获取电路根据所述矩阵A1,生成所述矩阵A2,所述矩阵A2的m行与所述矩阵A1的m行按顺序一一对应,所述矩阵A2的每一行的元素包括对应的所述矩阵A1中的一行中按顺序排列的预设数值个组中所有的非零元素;
所述获取电路根据所述矩阵A1和所述矩阵A2,生成所述索引矩阵,所述索引矩阵的m行与所述矩阵A2的m行按顺序一一对应,所述索引矩阵的每一行的元素为对应的所述矩阵A2中的一行中按顺序排列的所有元素在所述矩阵A1中的列标。
12.如权利要求11所述的方法,其特征在于,
对于所述矩阵A2中的任意一个元素,当所述矩阵A2中的一个元素非零时,所述矩阵A2中的一个元素在所述矩阵A1中的列标是所述矩阵A2中的一个元素在所述矩阵A1中所属的一列的列号;当所述矩阵A2中的一个元素为零时,所述矩阵A2中的一个元素在所述矩阵A1中的列标是第一字符。
13.如权利要求12所述的方法,其特征在于,
对于所述索引矩阵中的任意一个元素,当所述索引矩阵中的一个元素不是所述第一字符时,所述索引矩阵中的一个元素在所述矩阵B1中指示的一行是所述矩阵B1的所有行中行号为所述索引矩阵中的一个元素的一行;当所述索引矩阵中的一个元素是所述第一字符时,所述索引矩阵中的一个元素对应的一个矩阵B2中的一行的元素是n个第二字符。
14.如权利要求11-13任一所述的方法,其特征在于,所述矩阵A1是通过神经网络训练得到。
15.一种执行矩阵乘法运算的电路,其特征在于,所述电路包括:
获取电路,用于获取矩阵B1、矩阵A2和索引矩阵,所述矩阵B1是k行n列的矩阵,所述矩阵A2是m行t列的矩阵,所述索引矩阵是m行t列的矩阵,所述k、所述n、所述m和所述t均为正整数,所述t小于或等于所述k;
数据选择电路,用于根据所述索引矩阵和所述矩阵B1,生成m个矩阵B2,所述m个矩阵B2均是t行n列的矩阵,所述m个矩阵B2与所述索引矩阵的m行按顺序一一对应,每个矩阵B2的t行与对应的所述索引矩阵中的一行的t个元素按顺序一一对应,所述每个矩阵B2的每一行为对应的所述索引矩阵中的一个元素在所述矩阵B1中指示的一行;
计算单元阵列,用于根据所述矩阵A2和所述m个矩阵B2,生成矩阵C,所述矩阵C是m行n列的矩阵,所述矩阵C的m行与所述矩阵A2的m行按顺序一一对应,所述矩阵C的m行与所述m个矩阵B2按顺序一一对应,所述矩阵C的每一行为对应的所述矩阵A2中的一行与对应的一个矩阵B2的乘积。
16.如权利要求15所述的电路,其特征在于,所述电路还包括第一存储器,所述第一存储器用于存储所述矩阵B1、所述矩阵A2和所述索引矩阵;
相应地,所述获取电路用于:从所述第一存储器中读取所述矩阵B1、所述矩阵A2和所述索引矩阵。
17.一种片上***SOC,其特征在于,所述SOC包括上述权利要求15或16所述的执行矩阵乘法运算的电路。
18.如权利要求17所述的SOC,其特征在于,所述SOC还包括第二存储器,所述第二存储器用于存储所述矩阵B1、所述矩阵A2和所述索引矩阵;
相应地,所述获取电路用于:从所述第二存储器中读取所述矩阵B1、所述矩阵A2和所述索引矩阵。
CN201811384503.8A 2018-11-20 2018-11-20 执行矩阵乘法运算的方法、电路及soc Active CN111198670B (zh)

Priority Applications (10)

Application Number Priority Date Filing Date Title
CN201811384503.8A CN111198670B (zh) 2018-11-20 2018-11-20 执行矩阵乘法运算的方法、电路及soc
EP22188228.5A EP4102354B1 (en) 2018-11-20 2019-11-20 Method, circuit, and soc for performing matrix multiplication operation
EP19888082.5A EP3876092B1 (en) 2018-11-20 2019-11-20 Method for executing matrix multiplication, circuit and soc
CN202111444099.0A CN114138231B (zh) 2018-11-20 2019-11-20 执行矩阵乘法运算的方法、电路及soc
CN201980076521.6A CN113168309A (zh) 2018-11-20 2019-11-20 执行矩阵乘法运算的方法、电路及soc
PCT/CN2019/119794 WO2020103883A1 (zh) 2018-11-20 2019-11-20 执行矩阵乘法运算的方法、电路及soc
ES19888082T ES2943886T3 (es) 2018-11-20 2019-11-20 Método, Circuito y SOC para ejecutar multiplicación de matrices
US17/324,533 US11263292B2 (en) 2018-11-20 2021-05-19 Method, circuit, and SOC for performing matrix multiplication operation
US17/568,538 US11397791B2 (en) 2018-11-20 2022-01-04 Method, circuit, and SOC for performing matrix multiplication operation
US17/841,162 US11860970B2 (en) 2018-11-20 2022-06-15 Method, circuit, and SOC for performing matrix multiplication operation

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811384503.8A CN111198670B (zh) 2018-11-20 2018-11-20 执行矩阵乘法运算的方法、电路及soc

Publications (2)

Publication Number Publication Date
CN111198670A CN111198670A (zh) 2020-05-26
CN111198670B true CN111198670B (zh) 2021-01-29

Family

ID=70744057

Family Applications (3)

Application Number Title Priority Date Filing Date
CN201811384503.8A Active CN111198670B (zh) 2018-11-20 2018-11-20 执行矩阵乘法运算的方法、电路及soc
CN202111444099.0A Active CN114138231B (zh) 2018-11-20 2019-11-20 执行矩阵乘法运算的方法、电路及soc
CN201980076521.6A Pending CN113168309A (zh) 2018-11-20 2019-11-20 执行矩阵乘法运算的方法、电路及soc

Family Applications After (2)

Application Number Title Priority Date Filing Date
CN202111444099.0A Active CN114138231B (zh) 2018-11-20 2019-11-20 执行矩阵乘法运算的方法、电路及soc
CN201980076521.6A Pending CN113168309A (zh) 2018-11-20 2019-11-20 执行矩阵乘法运算的方法、电路及soc

Country Status (5)

Country Link
US (3) US11263292B2 (zh)
EP (2) EP4102354B1 (zh)
CN (3) CN111198670B (zh)
ES (1) ES2943886T3 (zh)
WO (1) WO2020103883A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112182496B (zh) * 2020-09-24 2022-09-16 成都海光集成电路设计有限公司 用于矩阵乘法的数据处理方法及装置
CN116888591A (zh) * 2021-03-31 2023-10-13 华为技术有限公司 一种矩阵乘法器、矩阵计算方法及相关设备
US12007885B2 (en) * 2022-04-26 2024-06-11 Microsoft Technology Licensing, Llc Fetching non-zero data

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1553577A (zh) * 2003-12-19 2004-12-08 清华大学 一种时序逻辑数字电路的设计方法
CN1702991A (zh) * 2004-03-04 2005-11-30 智邦科技股份有限公司 多速率多载波多码分工***的通讯方法与装置
CN103902507A (zh) * 2014-03-28 2014-07-02 中国科学院自动化研究所 一种面向可编程代数处理器的矩阵乘法计算装置及方法
CN106126481A (zh) * 2016-06-29 2016-11-16 华为技术有限公司 一种计算引擎和电子设备
CN106415552A (zh) * 2014-06-17 2017-02-15 云发明M·L·有限公司 用于确定具有一实体集合并满足一组约束集合的模型的配置的方法和***
WO2018154273A1 (en) * 2017-02-23 2018-08-30 Arm Limited Element by vector operations in a data processing apparatus
CN108763163A (zh) * 2018-08-02 2018-11-06 北京知存科技有限公司 模拟向量-矩阵乘法运算电路
CN108805273A (zh) * 2018-05-20 2018-11-13 复旦大学 一种lstm中门控单元加速运算的硬件实现电路

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4914615A (en) 1987-09-04 1990-04-03 At&T Bell Laboratories Calculator of matrix products
US7321915B2 (en) * 2002-10-29 2008-01-22 Broadcom Corporation Method and apparatus for efficient matrix multiplication in a direct sequence CDMA system
CN101488761B (zh) * 2009-02-27 2011-01-19 北京交通大学 一种无短环无低码重码的ldpc码构造方法
WO2011156247A2 (en) * 2010-06-11 2011-12-15 Massachusetts Institute Of Technology Processor for large graph algorithm computations and matrix operations
CN102375721B (zh) * 2010-08-23 2016-03-30 联想(北京)有限公司 一种矩阵乘法运算方法、图形处理器和电子设备
CN102541814B (zh) * 2010-12-27 2015-10-14 北京国睿中数科技股份有限公司 用于数据通信处理器的矩阵计算装置和方法
CN102141976B (zh) * 2011-01-10 2013-08-14 中国科学院软件研究所 稀疏矩阵的对角线数据存储方法及基于该方法的SpMV实现方法
CN103235711A (zh) * 2013-04-19 2013-08-07 荣成市鼎通电子信息科技有限公司 基于查找表的准循环矩阵高速乘法器
US9367519B2 (en) * 2013-08-30 2016-06-14 Microsoft Technology Licensing, Llc Sparse matrix data structure
CN103984527B (zh) * 2014-04-01 2017-12-15 杭州电子科技大学 优化稀疏矩阵向量乘提升不可压缩管流模拟效率的方法
US9830302B1 (en) 2014-04-16 2017-11-28 Knowles Electronics, Llc Sparse matrix vector multiplication
CN105512723B (zh) 2016-01-20 2018-02-16 南京艾溪信息科技有限公司 一种用于稀疏连接的人工神经网络计算装置和方法
CN107704433A (zh) * 2016-01-20 2018-02-16 南京艾溪信息科技有限公司 一种矩阵运算指令及其方法
CN107239823A (zh) 2016-08-12 2017-10-10 北京深鉴科技有限公司 一种用于实现稀疏神经网络的装置和方法
CN108875956B (zh) * 2017-05-11 2019-09-10 广州异构智能科技有限公司 原生张量处理器
JP2019148969A (ja) * 2018-02-27 2019-09-05 富士通株式会社 行列演算装置、行列演算方法および行列演算プログラム
US10936311B1 (en) * 2019-07-09 2021-03-02 Xilinx, Inc. Sparse matrix processing circuitry
US20210065005A1 (en) * 2019-08-29 2021-03-04 Alibaba Group Holding Limited Systems and methods for providing vector-wise sparsity in a neural network

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1553577A (zh) * 2003-12-19 2004-12-08 清华大学 一种时序逻辑数字电路的设计方法
CN1702991A (zh) * 2004-03-04 2005-11-30 智邦科技股份有限公司 多速率多载波多码分工***的通讯方法与装置
CN103902507A (zh) * 2014-03-28 2014-07-02 中国科学院自动化研究所 一种面向可编程代数处理器的矩阵乘法计算装置及方法
CN106415552A (zh) * 2014-06-17 2017-02-15 云发明M·L·有限公司 用于确定具有一实体集合并满足一组约束集合的模型的配置的方法和***
CN106126481A (zh) * 2016-06-29 2016-11-16 华为技术有限公司 一种计算引擎和电子设备
WO2018154273A1 (en) * 2017-02-23 2018-08-30 Arm Limited Element by vector operations in a data processing apparatus
CN108805273A (zh) * 2018-05-20 2018-11-13 复旦大学 一种lstm中门控单元加速运算的硬件实现电路
CN108763163A (zh) * 2018-08-02 2018-11-06 北京知存科技有限公司 模拟向量-矩阵乘法运算电路

Also Published As

Publication number Publication date
EP4102354B1 (en) 2024-06-19
US11263292B2 (en) 2022-03-01
CN113168309A (zh) 2021-07-23
EP3876092A1 (en) 2021-09-08
CN114138231A (zh) 2022-03-04
CN111198670A (zh) 2020-05-26
US20220391471A1 (en) 2022-12-08
US11397791B2 (en) 2022-07-26
EP3876092A4 (en) 2021-12-29
EP3876092B1 (en) 2023-04-12
WO2020103883A1 (zh) 2020-05-28
US20220129523A1 (en) 2022-04-28
CN114138231B (zh) 2022-07-22
US20210271736A1 (en) 2021-09-02
EP4102354A1 (en) 2022-12-14
ES2943886T3 (es) 2023-06-16
US11860970B2 (en) 2024-01-02

Similar Documents

Publication Publication Date Title
CN114138231B (zh) 执行矩阵乘法运算的方法、电路及soc
US20180107630A1 (en) Processor and method for executing matrix multiplication operation on processor
US20230026006A1 (en) Convolution computation engine, artificial intelligence chip, and data processing method
US20220083857A1 (en) Convolutional neural network operation method and device
CN109767000A (zh) 基于Winograd算法的神经网络卷积方法及装置
US20230068450A1 (en) Method and apparatus for processing sparse data
CN110390075B (zh) 矩阵预处理方法、装置、终端及可读存储介质
CN112765540A (zh) 数据处理方法、装置及相关产品
CN109844774B (zh) 一种并行反卷积计算方法、单引擎计算方法及相关产品
CN113094899B (zh) 一种随机潮流计算方法、装置、电子设备及存储介质
CN113918120A (zh) 计算装置、神经网络处理设备、芯片及处理数据的方法
CN111178513B (zh) 神经网络的卷积实现方法、卷积实现装置及终端设备
CN110245706B (zh) 一种针对嵌入式应用的轻量化目标检测方法
CN115346099A (zh) 基于加速器芯片的图像卷积方法、芯片、设备及介质
US20210224632A1 (en) Methods, devices, chips, electronic apparatuses, and storage media for processing data
CN112163612B (zh) 基于fpga的大模板卷积图像匹配方法、装置及***
CN111260046B (zh) 运算方法、装置及相关产品
CN113705784A (zh) 一种基于矩阵共享的神经网络权重编码方法及硬件***
KR20210014897A (ko) 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법
CN111258641A (zh) 运算方法、装置及相关产品
CN112464157B (zh) 向量排序方法与排序***
CN111178505B (zh) 卷积神经网络的加速方法和计算机可读存储介质
CN118113972A (zh) 一种运算资源处理方法以及相关设备
CN116955906A (zh) 一种哈密顿矩阵正交归一化方法及装置
CN118052283A (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
GR01 Patent grant
GR01 Patent grant