CN102411558B - 面向向量处理器的大矩阵相乘的向量化实现方法 - Google Patents
面向向量处理器的大矩阵相乘的向量化实现方法 Download PDFInfo
- Publication number
- CN102411558B CN102411558B CN201110338108.8A CN201110338108A CN102411558B CN 102411558 B CN102411558 B CN 102411558B CN 201110338108 A CN201110338108 A CN 201110338108A CN 102411558 B CN102411558 B CN 102411558B
- Authority
- CN
- China
- Prior art keywords
- matrix
- multiplier
- vector
- multiplicand
- elements
- 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
Landscapes
- Complex Calculations (AREA)
Abstract
本发明公开了一种面向向量处理器的大矩阵相乘的向量化实现方法,包括以下步骤:(1)输入被乘数矩阵A和乘数矩阵B;通过DMA控制器将被乘数矩阵A和乘数矩阵B分别搬运到向量存储单元中;搬运时,将乘数矩阵B中的第1~n行依次排序为第1~n列;(2)将被乘数矩阵A的一行和乘数矩阵B的一列中的元素分别加载到K个并行处理单元中,并一一对应相乘;相乘的结果在一指定的并行处理单元中归约求和;求和结果作为一个结果矩阵元素存储到向量存储单元中;(3)顺移到被乘数矩阵A的下一行和乘数矩阵B的下一列,重复步骤(2)直至完成所有数据帧的计算,得到由结果矩阵元素组成的结果矩阵C。本发明原理简单且操作方便,能提高计算效率。
Description
技术领域
本发明主要涉及向量处理器以及数据处理领域,尤其涉及一种大矩阵相乘的向量化实现方法。
背景技术
在许多科学计算任务和应用中都会涉及到矩阵乘法运算,如图像处理,通信系统中的信号编解码等,对于规模较大的矩阵相乘计算任务,由于涉及到大量的乘法和加法运算,需要占用大量的计算时间。如何在处理器上简单而高效的实现矩阵乘法运算一直是业界的研究热点。
在传统的标量处理器上,研究人员已经提出了多种有效的矩阵相乘实现方法,以减少数据在运算过程中的排序操作对完成整个矩阵相乘的运算的影响。但是,随着高清视频编解码、3G无线通信、雷达信号处理等高密集、实时运算应用的不断涌现,单芯片难以满足这类应用的高密度实时计算需求,向量处理器得到了广泛应用。如图1所示,为一个向量处理器的典型结构,其具有处理器和程序存储器和数据存储器(两者均可以为任意的可访问存储器,包括外部高速缓冲存储器、外部RAM等)。向量处理器的处理器分为标量处理部件和向量处理部件两个部分,通常向量处理部件内有K个并行处理单元(PE),这些处理单元都有各自的运算部件和寄存器,处理单元间能通过规约指令进行的数据交互,如并行处理单元之间的数据相加、比较等。标量处理单元主要负责流控和逻辑判断指令的处理,而向量处理单元主要负责密集型的数据计算。向量处理单元运算所用的数据由向量数据存储单元提供。一般地,如图2所示,向量数据存储单元的BANK(存储体)的个数与向量处理单元的处理单元个数K是一致的。
申请号为“200380107095.7”的专利文献,公开了英特尔公司提出的一个专利使用SIMD寄存器的小矩阵有效乘法,将被乘数矩阵A的对角线载入处理器的不同寄存器中,并将乘数矩阵B载入至少一个在纵向按序排列的寄存器中。通过移动一个元素,有选择地将寄存器中的乘数矩阵B的每列中的乘法和加法元素同已移动的一列中的上个元素一起移动至该列的前端。将被乘数矩阵A的对角线乘以乘数矩阵B的列,它们的结果被加到结果矩阵C的列的结果和上。该方法在矩阵规模较小的情况下是能获得比较好的效果,但是随着矩阵规模的逐渐增大,难以取得好的性能表现。因此,如何在向量处理器上实现高效的大矩阵乘法运算是当前面临的一个困难。
发明内容
本发明所要解决的技术问题是:针对现有技术存在的问题,本发明提供一种原理简单、操作方便、能充分利用向量处理器的多级并行性特点且易于实现的面向向量处理器的大矩阵相乘的向量化实现方法。
为解决上述技术问题,本发明采用以下技术方案:
一种面向向量处理器的大矩阵相乘的向量化实现方法,包括以下步骤:
(1)输入被乘数矩阵A和乘数矩阵B;通过DMA控制器将被乘数矩阵A和乘数矩阵B分别搬运到向量存储单元中;在搬运过程中,将乘数矩阵B进行重排序,即将乘数矩阵B中的第1~n行依次排序为第1~n列;
(2)将被乘数矩阵A一行中的元素和乘数矩阵B中一列中的元素分别加载到K个并行处理单元中,并一一对应相乘;将相乘的结果在一指定的并行处理单元中归约求和;将求和结果作为一个结果矩阵元素存储到向量存储单元中;
(3)顺移到被乘数矩阵A的下一行和乘数矩阵B的下一列,重复步骤(2)直至完成所有数据帧的计算,得到由结果矩阵元素组成的结果矩阵C。
作为本发明的进一步改进:
所述搬运过程中,被乘数矩阵A的每一行组织成一个数据帧,乘数矩阵B的每一列组织成一个数据帧,当所述数据帧的元素个数不等于向量处理器中并行处理单元的个数K的倍数时,在数据帧尾部补0使得每个数据帧的元素个数等于并行处理单元的个数K的倍数。
与现有技术相比,本发明的优点在于:
本发明的面向向量处理器的大矩阵相乘的向量化实现方法,通过在DMA控制器搬运数据的过程中实现乘数矩阵B的数据重排序,同时还充分利用向量处理器中的向量部件多个并行处理单元能同时进行相同运算操作的特点来进行大量的同类型操作,从而大大的提高了计算矩阵乘法的效率,且步骤简单,易于实现。
附图说明
图1是典型的向量处理器结构示意图。
图2是图1的向量处理器中的向量数据存储单元的结构示意图。
图3是本发明的总流程示意图。
图4是本发明实施例1中用DMA控制器实现乘数矩阵B元素重排序示意图。
图5是本发明实施例2中的被乘数矩阵A和乘数矩阵B的元素在图2所示的向量数据存储单元中的存放形式示意图;图5(1)为本发明实施例2中的被乘数矩阵A的元素在图2所示的向量数据存储单元中的存放形式示意图;图5(2)为本发明实施例2中的乘数矩阵B的元素在图2所示的向量数据存储单元中的存放形式示意图。
图6为本发明实施例2的被乘数矩阵A(16×16)和乘数矩阵B(16×16)加载到K个并行处理单元中的示意图。
图7是本发明实施例2的被乘数矩阵A(16×16)和乘数矩阵B(16×16)的矩阵乘法实现步骤示意图。
图8为本发明实施例3中的被乘数矩阵A和乘数矩阵B的元素在图2所示的向量数据存储单元中的存放形式示意图;图8(1)为本发明实施例3中的被乘数矩阵A的元素在图2所示的向量数据存储单元中的存放形式示意图;图8(2)为本发明实施例3中的乘数矩阵B的元素在图2所示的向量数据存储单元中的存放形式示意图。
图9是本发明实施例3的被乘数矩阵A(26×22)和乘数矩阵B(22×27)加载到K个并行处理单元中的示意图。
图10是本发明实施例3的被乘数矩阵A(26×22)和乘数矩阵B(22×27)的矩阵乘法实现步骤示意图。
具体实施方式
以下将结合说明书附图和具体实施例对本发明作进一步详细说明。
实施例1:
如图3所示,本发明的面向向量处理器的大矩阵相乘的向量化实现方法,包括以下步骤:
1、输入被乘数矩阵A和乘数矩阵B;通过DMA控制器将被乘数矩阵A和乘数矩阵B分别搬运到向量存储单元中,搬运过程中,如图4所示,将乘数矩阵B进行重排序,即将乘数矩阵B中的第1~n行依次排序为第1~n列。
通过DMA控制器的配置,可以将被乘数矩阵A的每一行组织成一个数据帧,乘数矩阵B的每一列组织成一个数据帧,整个乘数矩阵B共可分成p个数据帧。当数据帧的元素个数不等于向量处理器中并行处理单元的个数K的倍数时,在数据帧尾部补0使得每个数据帧的元素个数等于并行处理单元的个数K的倍数。
2、将被乘数矩阵A的一行数据帧和乘数矩阵B的一列数据帧中的元素分别加载到K个并行处理单元中,并一一对应相乘;相乘的结果在一指定的并行处理单元中归约求和;求和结果作为一个结果矩阵元素存储到向量存储单元中。
3、顺移到被乘数矩阵A的下一行和乘数矩阵B的下一列,重复步骤2到3直至完成所有数据帧的计算,得到由结果矩阵元素组成的结果矩阵C。
对于m*n的被乘数矩阵A乘以n*p的乘数矩阵B的运算,可得到m*p的矩阵C。其在数学公式上可表示为:(0≤i<m,0≤j<p)。结果矩阵C的元素Cij是由被乘数矩阵A相应的行元素Aik和乘数矩阵B相应的列元素Bkj进行点积操作计算求得。
实施例2:
如图7所示,采用本发明的面向向量处理器的大矩阵相乘的向量化实现方法,计算规模为16×16的矩阵乘以规模为16×16的矩阵(向量处理单元个数K为8),包括以下步骤:
1、如图6所示,输入被乘数矩阵A(16×16)和乘数矩阵B(16×16);通过DMA搬运被乘数矩阵A和乘数矩阵B到向量存储单元,这个过程中实现乘数矩阵B的重排序(重排序方法与实施例1相同),被乘数矩阵A和乘数矩阵B在向量单元的存放方式如图5(1)和图5(2)所示。
2、将被乘数矩阵A的一行元素和乘数矩阵B的一列的元素加载到向量处理单元中,由于被乘数矩阵A和乘数矩阵B的规模都为16×16,所以要分两次将被乘数矩阵A和乘数矩阵B加载。加载入向量处理单元的对应的元素进行乘法操作,由于向量处理单元的个数是8,而被乘数元素和乘数元素的个数是分别16,这个步骤的乘法操作应进行两次。
3、用归约指令将步骤2中每个向量处理单元所计算出的结果进行相加操作,所得的结果归约到指定的处理单元X,同样的这个步骤的操作也应进行两次。
4、将上述在X单元所得的两个结果进行相加操作,得出一个结果矩阵元素并存入向量存储单元。
5、顺移到被乘数矩阵A的下一行和乘数矩阵B的下一列,重复上述过程中的步骤2到步骤4以计算得到整个结果矩阵C=A×B。
实施例3:
如图10所示,本发明的面向向量处理器的大矩阵相乘的向量化实现方法,计算规模为26×22的矩阵乘以规模为22×27的矩阵(向量处理单元个数K为8),包括以下步骤:
1、如图9所示,通过DMA搬运被乘数矩阵A和乘数矩阵B到向量存储单元,这个过程中实现乘数矩阵B的重排序(重排序方法与实施例1相同),而且还对被乘数矩阵A和乘数矩阵B进行了补0操作,被乘数矩阵A和乘数矩阵B在向量单元的存放方式如图8(1)和图8(2)。
2、将被乘数矩阵A的一行元素和乘数矩阵B的一列的元素加载到向量处理单元中,这里被乘数矩阵A的行和乘数矩阵B的列是已经经过补0了,所以要分3次将被乘数矩阵A和乘数矩阵B加载。加载入向量处理单元的对应的元素进行乘法操作,由于向量处理单元的个数是8,而补0后被乘数元素和乘数元素的个数都为24,这个步骤的乘法操作应进行3次。
3、用归约指令将步骤2中每个向量处理单元所计算出的结果进行相加操作,所得的结果归约到指定的处理单元X,同样的这个步骤的操作也应进行3次。
4、将上述在X单元所得的3个结果进行相加操作,得出一个结果矩阵元素并存入向量存储单元。
5、顺移到被乘数矩阵A的下一行和乘数矩阵B的下一列,重复上述过程中的步骤2到步骤4可以计算得到整个结果矩阵C=A×B。
可以根据具体的向量处理器的结构和指令集按照以上的步骤编写出简单高效的代码实现大矩阵的相乘。本发明的方法对于程序员来说,是简单易懂的,有利于程序员编码实现。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
Claims (1)
1.一种面向向量处理器的大矩阵相乘的向量化实现方法,其特征在于包括以下步骤:
(1)输入被乘数矩阵A和乘数矩阵B;通过DMA控制器将被乘数矩阵A和乘数矩阵B分别搬运到向量存储单元中;在搬运过程中,将乘数矩阵B进行重排序,即将乘数矩阵B中的第1~n列依次排序为第1~n行;
所述搬运过程中,被乘数矩阵A的每一行组织成一个数据帧,乘数矩阵B的每一列组织成一个数据帧,当所述数据帧的元素个数不等于向量处理器中并行处理单元的个数K的倍数时,在数据帧尾部补0使得每个数据帧的元素个数等于并行处理单元的个数K的倍数;
(2)将被乘数矩阵A一行中的元素和乘数矩阵B中一行中的元素分别加载到K个并行处理单元中,并一一对应相乘;将相乘的结果在一指定的并行处理单元中归约求和;将求和结果作为一个结果矩阵元素存储到向量存储单元中;
(3)顺移到乘数矩阵B的下一行,重复步骤(2)(3),直至完成被乘数矩阵A的一行和乘数矩阵B所有行的计算,计算得到结果矩阵C的一行元素;
(4)顺移到被乘数矩阵A的下一行,重复步骤(2)(3)(4),直至完成被乘数矩阵A所有行的的计算,得到结果矩阵C的所有行元素。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110338108.8A CN102411558B (zh) | 2011-10-31 | 2011-10-31 | 面向向量处理器的大矩阵相乘的向量化实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110338108.8A CN102411558B (zh) | 2011-10-31 | 2011-10-31 | 面向向量处理器的大矩阵相乘的向量化实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102411558A CN102411558A (zh) | 2012-04-11 |
CN102411558B true CN102411558B (zh) | 2015-05-13 |
Family
ID=45913637
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110338108.8A Active CN102411558B (zh) | 2011-10-31 | 2011-10-31 | 面向向量处理器的大矩阵相乘的向量化实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102411558B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109165733A (zh) * | 2018-07-11 | 2019-01-08 | 中国人民解放军国防科技大学 | 多输入多输出矩阵最大值池化向量化实现方法 |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104461449B (zh) * | 2014-11-14 | 2018-02-27 | 中国科学院数据与通信保护研究教育中心 | 基于向量指令的大整数乘法实现方法及装置 |
CN104636316B (zh) * | 2015-02-06 | 2018-01-12 | 中国人民解放军国防科学技术大学 | 面向gpdsp的大规模矩阵乘法计算的方法 |
CN104899182B (zh) * | 2015-06-09 | 2017-10-31 | 中国人民解放军国防科学技术大学 | 一种支持可变分块的矩阵乘加速方法 |
CN106445471B (zh) | 2016-10-13 | 2018-06-01 | 北京百度网讯科技有限公司 | 处理器和用于在处理器上执行矩阵乘运算的方法 |
CN106411519B (zh) | 2016-11-01 | 2019-01-25 | 北京百度网讯科技有限公司 | 用于rsa解密的处理器及用于rsa解密处理器的控制方法 |
JP6912703B2 (ja) * | 2017-02-24 | 2021-08-04 | 富士通株式会社 | 演算方法、演算装置、演算プログラム及び演算システム |
EP4053695A1 (en) | 2017-03-20 | 2022-09-07 | INTEL Corporation | Systems, methods, and apparatuses for dot production operations |
CN106970896B (zh) * | 2017-03-30 | 2020-05-12 | 中国人民解放军国防科学技术大学 | 面向向量处理器的二维矩阵卷积的向量化实现方法 |
CN106959937B (zh) * | 2017-03-30 | 2019-03-29 | 中国人民解放军国防科学技术大学 | 一种面向gpdsp的反卷积矩阵的向量化实现方法 |
US10338919B2 (en) | 2017-05-08 | 2019-07-02 | Nvidia Corporation | Generalized acceleration of matrix multiply accumulate operations |
DE102018110607A1 (de) | 2017-05-08 | 2018-11-08 | Nvidia Corporation | Verallgemeinerte Beschleunigung von Matrix-Multiplikations-und-Akkumulations-Operationen |
CN107256203A (zh) * | 2017-06-28 | 2017-10-17 | 郑州云海信息技术有限公司 | 一种矩阵向量乘法的实现方法和装置 |
US10747844B2 (en) * | 2017-12-12 | 2020-08-18 | Tesla, Inc. | Systems and methods for converting a matrix input to a vectorized input for a matrix processor |
CN107977231B (zh) * | 2017-12-15 | 2020-10-27 | 安徽寒武纪信息科技有限公司 | 一种计算方法及相关产品 |
CN110377877B (zh) * | 2019-07-26 | 2022-12-23 | 苏州浪潮智能科技有限公司 | 一种数据处理方法、装置、设备及存储介质 |
CN113536220A (zh) * | 2020-04-21 | 2021-10-22 | 中科寒武纪科技股份有限公司 | 运算方法、处理器及相关产品 |
CN112433760B (zh) * | 2020-11-27 | 2022-09-23 | 海光信息技术股份有限公司 | 数据排序方法和数据排序电路 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1155117A (zh) * | 1996-01-19 | 1997-07-23 | 张胤微 | 一种高速乘法器 |
CN1394314A (zh) * | 2000-11-02 | 2003-01-29 | 索尼计算机娱乐公司 | 并行运算设备、娱乐设备、处理方法、计算机程序和半导体设备 |
CN101061474A (zh) * | 2004-06-10 | 2007-10-24 | 哈桑·塞希托格鲁 | 信号处理的矩阵定值方法和装置 |
CN101089840A (zh) * | 2007-07-12 | 2007-12-19 | 浙江大学 | 基于多fpga的矩阵乘法并行计算系统 |
CN101163240A (zh) * | 2006-10-13 | 2008-04-16 | 国际商业机器公司 | 一种滤波装置及其方法 |
EP2017743A2 (en) * | 2007-07-19 | 2009-01-21 | Itt Manufacturing Enterprises, Inc. | High speed and efficient matrix multiplication hardware module |
-
2011
- 2011-10-31 CN CN201110338108.8A patent/CN102411558B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1155117A (zh) * | 1996-01-19 | 1997-07-23 | 张胤微 | 一种高速乘法器 |
CN1394314A (zh) * | 2000-11-02 | 2003-01-29 | 索尼计算机娱乐公司 | 并行运算设备、娱乐设备、处理方法、计算机程序和半导体设备 |
CN101061474A (zh) * | 2004-06-10 | 2007-10-24 | 哈桑·塞希托格鲁 | 信号处理的矩阵定值方法和装置 |
CN101163240A (zh) * | 2006-10-13 | 2008-04-16 | 国际商业机器公司 | 一种滤波装置及其方法 |
CN101089840A (zh) * | 2007-07-12 | 2007-12-19 | 浙江大学 | 基于多fpga的矩阵乘法并行计算系统 |
EP2017743A2 (en) * | 2007-07-19 | 2009-01-21 | Itt Manufacturing Enterprises, Inc. | High speed and efficient matrix multiplication hardware module |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109165733A (zh) * | 2018-07-11 | 2019-01-08 | 中国人民解放军国防科技大学 | 多输入多输出矩阵最大值池化向量化实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102411558A (zh) | 2012-04-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102411558B (zh) | 面向向量处理器的大矩阵相乘的向量化实现方法 | |
CN106970896A (zh) | 面向向量处理器的二维矩阵卷积的向量化实现方法 | |
CN109992743B (zh) | 矩阵乘法器 | |
KR102353241B1 (ko) | 가속화된 수학 엔진 | |
EP3479302B1 (en) | Convolutional neural network on programmable two dimensional image processor | |
US10585621B2 (en) | Statically-schedulable feed and drain structure for systolic array architecture | |
CN207895435U (zh) | 神经网络计算模组 | |
CN104899182B (zh) | 一种支持可变分块的矩阵乘加速方法 | |
US10120649B2 (en) | Processor and method for outer product accumulate operations | |
CN107729989A (zh) | 一种用于执行人工神经网络正向运算的装置及方法 | |
JP3639323B2 (ja) | メモリ分散型並列計算機による連立1次方程式計算処理方法および計算機 | |
CN110188869B (zh) | 一种基于卷积神经网络算法的集成电路加速计算的方法及系统 | |
US8195733B2 (en) | Systolic array | |
CN103440121B (zh) | 一种面向向量处理器的三角矩阵乘法向量化方法 | |
CN110705703B (zh) | 基于脉动阵列的稀疏神经网络处理器 | |
CN110851779B (zh) | 用于稀疏矩阵运算的脉动阵列架构 | |
CN105426345A (zh) | 一种矩阵求逆运算方法 | |
Liu et al. | WinoCNN: Kernel sharing Winograd systolic array for efficient convolutional neural network acceleration on FPGAs | |
CN103902507A (zh) | 一种面向可编程代数处理器的矩阵乘法计算装置及方法 | |
CN108710505A (zh) | 一种基于fpga的可扩展稀疏矩阵向量乘处理器 | |
CN113496279A (zh) | 使用点对点连接的通道卷积引擎的分组卷积 | |
WO2021057111A1 (zh) | 计算装置及方法、芯片、电子设备、存储介质及程序 | |
US8667043B2 (en) | Method and apparatus for multiplying binary operands | |
CN108595379A (zh) | 一种基于多级缓存的并行化卷积运算方法及系统 | |
CN116151334A (zh) | 一种基于多通道脉动阵列的神经网络加速器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |