一种应用于三角矩阵与矩阵乘法的加速方法及其加速装置与流程

文档序号:12802097阅读:421来源:国知局
一种应用于三角矩阵与矩阵乘法的加速方法及其加速装置与流程

本发明涉及计算机体系结构领域,具体来说,设计一种能够加快对高性能数值分析计算中三角矩阵与矩阵或向量乘法的加速方法及其装置。



背景技术:

矩阵乘法是在高性能数值计算,如过程控制、图像处理、数值分析、科学计算、求解动态规划问题、信号处理、理论物理、固态物理、编码理论、密码学、线性预测和计算机时序分析等领域重要、基本的组成部分,是具有计算和访存密集型特点的典型应用。据统计,在高性能计算中,90%以上的时间都消耗在矩阵乘法上。三角矩阵作为方形矩阵的一种,是稀疏矩阵的典型代表。在上述应用中很多时候的矩阵都是以三角矩阵的形式存在,并且在blas库中,三角矩阵乘法也是最核心的函数之一。它的性能对数值计算中大部分操作的性能都有影响,尤其是当三角矩阵的阶数较高时,通常的计算过程需要占用较多的工作单元和较大的计算机内存,计算效率受到影响。因此,提高三角矩阵乘法的执行效率,减少三角矩阵占用的内存空间无论在理论上还是在实际应用上对整个数值计算领域有着重大而深远的意义。

在已报道和所能查阅到的国内外相关研究中,关于矩阵乘法的研究情况总结如下:

目前,提高三角矩阵乘法计算性能的方法包括硬件方法和软件方法,如基于多fpga的矩阵乘法并行计算系统,一种基于龙芯3a的单精度矩阵乘法优化方法,具有减少的带宽要求的矩阵乘法等。现有的硬件方法都是基于矩阵与矩阵乘法进行的优化加速。软件的方法往往计算效率较低,且大多也都是矩阵与矩阵的乘法,没有专门考虑三角矩阵与矩阵的乘法。与普通矩阵相乘比,三角矩阵有一半的矩阵元素为0,因此在存储上套用普通的矩阵乘法会有存储空间上的浪费,不能有效提升三角矩阵的计算性能。

同时,现有的对于矩阵与矩阵乘法的结构优化大都基于如数据流结构,将矩阵进行分块,通过硬件或软件多线程等方式对分块后的小矩阵块进行并行处理。但对三角矩阵的分块处理现阶段还没有相关工作。



技术实现要素:

本发明的目的在于,保证可以对三角矩阵并行处理的前提下,减少三角矩阵对存储空间的浪费,提高三角矩阵与矩阵乘法的计算效率。

为达上述目的,本发明提出如下技术方案:

一种应用于三角矩阵与矩阵乘法的加速方法,包括以下步骤:

s1:从内存中取出地址连续的三角矩阵,该三角矩阵的边长为n;

s2:以边长m对所述三角矩阵进行分块,得到多个小矩形阵和多个小三角阵;

s3:对所述小三角阵进行微量数据的扩展,使其成为边长为m的小矩形阵;

s4:对所有的小矩形阵并行进行矩阵乘法计算。

根据本发明提出的一种应用于三角矩阵与矩阵乘法的加速方法,其中,步骤s3中对所述小三角阵进行扩展,是指对所述小三角阵补零以得到边长为m的小矩形阵;具体包括:

对于已经划分出来的小三角阵,首先按照划分的地址空间连续取一个数据,并在该数据地址下增加m-1个连续数据空间,所述m-1个数据空间内补充数据0;接着连续取两个数据,并增加m-2个连续数据空间,所述m-2个数据空间内补充数据0;以此类推,直至不需要补充数据0。

根据本发明提出的一种应用于三角矩阵与矩阵乘法的加速方法,其中,若三角矩阵的边长n能被小矩形阵的边长m整除,则所述三角矩阵直接划分为(n2-nm)/2m2个小矩形阵和n/m个小三角阵;若n不能被m整除,则对n/m取整,并将余下行的数据与n/m取整的行整合到一起,再统一进行补零和计算。

本发明同时还提供一种根据上述任一项的方法制成的加速装置。

与现有技术相比,本发明具有以下有益效果:

本发明针对传统的矩阵与矩阵相乘为加快计算速度对矩阵进行分块并行处理出现的矩阵一半数据为0导致的存储空间浪费和增加了访存开销的问题,同时在方便计算的前提下,提出一种应用于高性能数值计算中的三角矩阵与矩阵乘法的方法、装置,既不过度增加存储空间浪费,又能够方便对三角矩阵与矩阵进行计算。

附图说明

图1为本发明中三角矩阵与矩阵乘法的加速方法的流程图;

图2为本发明中分块后的三角矩阵块扩展流程图;

图3为本发明一具体实施例中n=48,m=8的三角矩阵的分块示意图;

图4为本发明一具体实施例中n=48,m=8的三角矩阵补充数据后的形式示意图;

图5为本发明的三角矩阵数据扩展及执行逻辑示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示,本发明的总体思路是:在已知的三角矩阵的形式下,对n*n的三角矩阵进行横竖划分,以m大小作为一个块的边长,划分后的三角矩阵由内部的(n2-nm)/2m2个小矩阵块和边上的n/m个小三角矩阵块构成,对小三角矩阵块进行2倍数据量的扩展,扩展为大小与(n2-nm)/2m2个小矩阵块大小一致的小矩形块,然后对扩展后的所有(n2+nm)/2m2个小矩阵块进行并行的矩阵与矩阵相乘的计算。

对三角矩阵与矩阵乘法的执行过程的步骤如下:

步骤1:从内存中取出地址连续的n*n的三角矩阵。

步骤2:将取出的三角矩阵进行分块操作,每个小块的边长为m。

步骤3:对分块后的小三角矩阵进行微量数据的扩展,将分块后存在的小三角矩阵块扩展为小矩阵块。

步骤4:对扩展后,以及不需要扩展的小矩形块并行进行矩阵乘法计算。

其中对三角矩阵数据进行数据拆分,并将分块后小三角矩阵进行微量数据扩展,将扩展后的结果继续并行执行是三角矩阵与矩阵乘法的重要组成部分,具体逻辑处理方法如图2,步骤如下:

步骤1:输入端口输入分块后的矩阵。

步骤2:判断输入的矩阵是否为三角矩阵。

步骤3:若是三角矩阵,则将三角矩阵进行扩展,扩展出的值均为0;

步骤4:进入下一个数据块的判断。返回到步骤1。直至所有的数据块处理结束,进入矩阵乘法的计算。

下面结合附图,以n=48,m=8为例详细介绍本发明内容的过程。

首先图3为n=48,m=8的三角矩阵的分块示意图,对于48*48的三角矩阵于48*48的矩阵相乘的具体步骤如下:

步骤1:从内存中将48*48的三角矩阵按照地址连续取出。

步骤2:以边长为8进行分块,共划分为6个小三角矩阵块和15个小矩形块。

步骤3:对在内存连续存储的1176个数据按照块大小进行拆分,其中对于6个小三角矩阵块,每次按照1、2、3……8的顺序取数,在每次取到的数据后面补充7、6、5……0个数据0(地址连续),使小三角矩阵块转化为8*8的小矩阵块;对于已经被划分为的8*8的小矩形块,不用做处理。补充后的三角举证形式如图4。

步骤4:对所有扩展后,以及不需要进行扩展的8*8小矩形块打包进入到矩阵乘法的计算中。

以步骤3中对6个小三角矩阵块进行扩展处理为例,详细介绍本发明的逻辑的执行方式。如图5所示,具体步骤如下:

步骤1:输入1号数据块。

步骤2:判断1号数据块是否是小三角矩阵块,发现1号矩阵块的号数与其所在块的行数相等,则为小三角矩阵块。

步骤3:对于已经判断出来的1号小三角矩阵块按照连续地址空间进行取数。

步骤4:首先连续取1个数据,并在其连续地址下增加7个数据空间,数据空间内的数据补充为0;连续取2个数据,并增加6个数据0;连续取3个数据,并增加5个数据0;……连续取8个数据,并增加0个数据0,即最后一组连续数据后不需要补充新数据。

步骤5:将补充后的小矩阵块传到下一个矩阵与矩阵相乘的计算单元。

步骤6:返回步骤1,输入下一个号的数据块。

本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。

本领域普通技术人员可以理解:实施例中的装置中的模块可以按照实施例描述分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1