面向向量处理器的大矩阵相乘的向量化实现方法

文档序号:6436971阅读:370来源:国知局
专利名称:面向向量处理器的大矩阵相乘的向量化实现方法
技术领域
本发明主要涉及向量处理器以及数据处理领域,尤其涉及一种大矩阵相乘的向量化实现方法。
背景技术
在许多科学计算任务和应用中都会涉及到矩阵乘法运算,如图像处理,通信系统中的信号编解码等,对于规模较大的矩阵相乘计算任务,由于涉及到大量的乘法和加法运算,需要占用大量的计算时间。如何在处理器上简单而高效的实现矩阵乘法运算一直是业界的研究热点。在传统的标量处理器上,研究人员已经提出了多种有效的矩阵相乘实现方法,以减少数据在运算过程中的排序操作对完成整个矩阵相乘的运算的影响。但是,随着高清视频编解码、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 η行依次排序为第1 η列;(2)将被乘数矩阵A —行中的元素和乘数矩阵B中一列中的元素分别加载到K个并行处理单元中,并一一对应相乘;将相乘的结果在一指定的并行处理单元中归约求和; 将求和结果作为一个结果矩阵元素存储到向量存储单元中;(3)顺移到被乘数矩阵A的下一行和乘数矩阵B的下一列,重复步骤( 直至完成所有数据帧的计算,得到由结果矩阵元素组成的结果矩阵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中的乘数矩阵B的元素在图2所示的向量数据存储单元中的存放形式示意图。图6为本发明实施例2的被乘数矩阵A (16 X 16)和乘数矩阵B (16 X 16)加载到K 个并行处理单元中的示意图。图7是本发明实施例2的被乘数矩阵A (16 X 16)和乘数矩阵B (16 X 16)的矩阵乘法实现步骤示意图。图8为本发明实施例3中的被乘数矩阵A和乘数矩阵B的元素在图2所示的向量数据存储单元中的存放形式示意图;图8(1)为本发明实施例3中的被乘数矩阵A的元素在图2所示的向量数据存储单元中的存放形式示意图;图8( 为本发明实施例3中的乘数矩阵B的元素在图2所示的向量数据存储单元中的存放形式示意图。图9是本发明实施例3的被乘数矩阵A (26 X 22)和乘数矩阵B (22 X 27)加载到K 个并行处理单元中的示意图。图10是本发明实施例3的被乘数矩阵A 06X22)和乘数矩阵B (22 X 27)的矩阵乘法实现步骤示意图。
具体实施例方式以下将结合说明书附图和具体实施例对本发明作进一步详细说明。实施例1 如图3所示,本发明的面向向量处理器的大矩阵相乘的向量化实现方法,包括以下步骤1、输入被乘数矩阵A和乘数矩阵B ;通过DMA控制器将被乘数矩阵A和乘数矩阵 B分别搬运到向量存储单元中,搬运过程中,如图4所示,将乘数矩阵B进行重排序,即将乘数矩阵B中的第1 η行依次排序为第1 η列。通过DMA控制器的配置,可以将被乘数矩阵A的每一行组织成一个数据帧,乘数矩阵B的每一列组织成一个数据帧,整个乘数矩阵B共可分成ρ个数据帧。当数据帧的元素个数不等于向量处理器中并行处理单元的个数K的倍数时,在数据帧尾部补0使得每个数据帧的元素个数等于并行处理单元的个数K的倍数。2、将被乘数矩阵A的一行数据帧和乘数矩阵B的一列数据帧中的元素分别加载到 K个并行处理单元中,并一一对应相乘;相乘的结果在一指定的并行处理单元中归约求和; 求和结果作为一个结果矩阵元素存储到向量存储单元中。3、顺移到被乘数矩阵A的下一行和乘数矩阵B的下一列,重复步骤2到3直至完成所有数据帧的计算,得到由结果矩阵元素组成的结果矩阵C。对于m*n的被乘数矩阵A乘以n*p的乘数矩阵B的运算,可得到m*p的矩阵C。其
在数学公式上可表示为:
权利要求
1.一种面向向量处理器的大矩阵相乘的向量化实现方法,具特征在于包括以下步骤(1)输入被乘数矩阵A和乘数矩阵B;通过DMA控制器将被乘数矩阵A和乘数矩阵B分别搬运到向量存储单元中;在搬运过程中,将乘数矩阵B进行重排序,即将乘数矩阵B中的第1 η行依次排序为第1 η列;(2)将被乘数矩阵A—行中的元素和乘数矩阵B中一列中的元素分别加载到K个并行处理单元中,并一一对应相乘;将相乘的结果在一指定的并行处理单元中归约求和;将求和结果作为一个结果矩阵元素存储到向量存储单元中;(3)顺移到被乘数矩阵A的下一行和乘数矩阵B的下一列,重复步骤( 直至完成所有数据帧的计算,得到由结果矩阵元素组成的结果矩阵C。
2.根据权利要求1所述的面向向量处理器的大矩阵相乘的向量化实现方法,其特征在于,所述搬运过程中,被乘数矩阵A的每一行组织成一个数据帧,乘数矩阵B的每一列组织成一个数据帧,当所述数据帧的元素个数不等于向量处理器中并行处理单元的个数K的倍数时,在数据帧尾部补0使得每个数据帧的元素个数等于并行处理单元的个数K的倍数。
全文摘要
本发明公开了一种面向向量处理器的大矩阵相乘的向量化实现方法,包括以下步骤(1)输入被乘数矩阵A和乘数矩阵B;通过DMA控制器将被乘数矩阵A和乘数矩阵B分别搬运到向量存储单元中;搬运时,将乘数矩阵B中的第1~n行依次排序为第1~n列;(2)将被乘数矩阵A的一行和乘数矩阵B的一列中的元素分别加载到K个并行处理单元中,并一一对应相乘;相乘的结果在一指定的并行处理单元中归约求和;求和结果作为一个结果矩阵元素存储到向量存储单元中;(3)顺移到被乘数矩阵A的下一行和乘数矩阵B的下一列,重复步骤(2)直至完成所有数据帧的计算,得到由结果矩阵元素组成的结果矩阵C。本发明原理简单且操作方便,能提高计算效率。
文档编号G06F17/16GK102411558SQ201110338108
公开日2012年4月11日 申请日期2011年10月31日 优先权日2011年10月31日
发明者刘仲, 刘衡竹, 彭元喜, 曾咏涛, 陈书明, 陈海燕, 陈胜刚, 陈跃跃, 龚国辉 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1