神经网络矩阵乘法运算方法及相关产品与流程

文档序号:17929480发布日期:2019-06-15 00:42阅读:493来源:国知局
神经网络矩阵乘法运算方法及相关产品与流程

本申请涉及人工智能领域,具体涉及一种神经网络矩阵乘法运算方法及相关产品。



背景技术:

现有技术中,人工智能已经应用到很多领域,例如人脸识别、分类处理等等。人工智能中神经网络目前的潜力最大,大部分的研究人员均将研发的反向投入到该领域。

对于神经网络中,矩阵乘法运算比较常见,现有的中央处理器或图像处理器的处理效率低,功耗高。

申请内容

本申请实施例提供了一种神经网络矩阵乘法运算方法及相关产品,提高了运算速度,降低了功耗。

第一方面,本申请实施例提供一种神经网络矩阵乘法运算方法,神经网络矩阵乘法运算方法,所述方法应用运算器,与所述方法包括如下步骤:

运算单元接收第一矩阵h*w以及第二矩阵w*p;运算单元确定w为非4的倍数时,分配m个线程,

运算单元将第一矩阵h*w拆分成m个第一区块,其中m-1个第一区块中每个区块包含4行元素,最后一个区块中包含r行元素;将第二矩阵w*p拆分成m个第二区块,其中m-1个第二区块中每个区块包含4列元素,最后一个区块中包含r列元素,其中r为w除以4的余数;

运算单元将m个第二区块按顺序分配给多个线程,每个线程以线程标号对应的第一区块为首个获取区块,按序号递加方式将m个第一区块提取完毕,每提取一次第一区块,将第一区块与该线程分配的第二区块进行运算得到内积结果,将所有线程的所有内积结果排列得到矩阵乘积结果;

可选的,所述将所有线程的运算结果排列得到矩阵乘积结果的排列方式具体包括:

确定线程x的运算结果α1、α2、α3、α4,确定第一区块x的元素的行的值h1、h2、h3、h4;确定第二区块x的元素的4列元素的列的值,p1、p2、p3、p4;确定第一区块x与第二区块x的运算结果α1、α2、α3、α4、α5、α6、α7、α8、α9、α10、α11、α12、α13、α14、α15、α16、在矩阵乘积结果的位置为,α1的行值为h1、列值为p1;α2的行值为h1、列值为p2;α3的行值为h1、列值为p3;α4的行值为h1、列值为p4;α5的行值为h2、列值为p1;α6的行值为h2、列值为p2;α7的行值为h2、列值为p3;α8的行值为h2、列值为p4;α9的行值为h3、列值为p1;α10的行值为h3、列值为p2;α11的行值为h3、列值为p3;α12的行值为h3、列值为p4;α13的行值为h4、列值为p1;α14的行值为h4、列值为p2;α15的行值为h4、列值为p3;α16的行值为h4、列值为p4。

可选的,所述方法在运算单元将第一矩阵h*w拆分成m个第一区块之前还包括:

将第一矩阵h*w按行方向存储,将第二矩阵w*p按列方向存储。

可选的,所述将第一矩阵h*w按行方向存储具体包括:

将第一矩阵h*w沿列方向划分为m个输入数据块,m中前m-1个输入数据块为4列元素,最后一个输入数据块为r列元素,将前m-1个输入数据块先行后列方式存储,依据r的值确定最后一个输入数据块的存储方式。

可选的,所述将第二矩阵w*p按列方向存储具体包括:

将第二矩阵w*p沿列方向划分为m个输入数据块,m中前m-1个输入数据块为4行元素,最后一个输入数据块为r行元素,将前m-1个输入数据块先列后行方式存储,如r=1,将最后1行元素按行方向存储,如r=2,将最后2行元素按先列后行方式存储,如r=3,在边缘添加一行零元素后得到添加数据块,将添加数据块按先列后行方式存储。

第二方面,提供一种计算机可读存储介质,其存储用于电子数据交换的计算机程序,其中,所述计算机程序使得计算机执行第一方面提供的所述的方法。

第三方面,提供一种计算机程序产品,所述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,所述计算机程序可操作来使计算机执行第一方面提供的方法。

实施本申请实施例,具有如下有益效果:

可以看出,本申请提供的技术方案通过多个线程来实现并行的运算,这样并行的运算能够极大的提高计算速度,减少运算时间,从而降低功耗。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例提供的一种计算装置的结构示意图。

图2是本申请实施例公开的一种神经网络矩阵乘法运算方法的流程示意图。

具体实施方式

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

本申请的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。

参阅图1,图1为一种计算装置的结构示意图,如图1所示,该计算装置可以包括:控制器101、存储器102以及运算器103,其中该控制器101用于从外部设备提取运算数据(例如输入数据、权值等等),上述运算器103用于执行数据的运算,该存储器用于存储数据。上述运算器103具有多个线程,为每个线程分配有独立的运算器件,即每个线程具有单独的运算能力。

对于矩阵乘法运算为神经网络的全连接运算中最耗运算资源的运算,其效率的高低直接影响了全连接层的运算效率,现有的中央处理器、图像处理器在计算中实现的是整体的运算,此种方式使得运算的时间比较长,因为单一的运算十分影响速度,增加运算时间,而增加运算时间直接影响了功耗,因此如何加快运算速度成为了需要解决的问题。对于中央处理器、图像处理器,多线程并行运算是常用的加快运算速度的方法,但是如何将多线程并行运算来解决矩阵乘矩阵的实际运算成为急需解决的问题。

本申请提供的一种神经网络矩阵乘法运算方法,该方法采用如图1所示的运算单元来实现,当然该方法还可以通过中央处理器或图像处理器来完成,该方法如图2所示,包括如下步骤:

步骤s201、运算单元接收第一矩阵h*w以及第二矩阵w*p;

步骤s202、运算单元确定w为非4的倍数时,分配m个线程,

其中,

步骤s203、运算单元将第一矩阵h*w拆分成m个第一区块,其中m-1个第一区块中每个区块包含4行元素,最后一个区块中包含r行元素;将第二矩阵w*p拆分成m个第二区块,其中m-1个第二区块中每个区块包含4列元素,最后一个区块中包含r列元素,其中r为w除以4的余数;

步骤s204、运算单元将m个第二区块按顺序分配给多个线程,每个线程以线程标号对应的第一区块为首个获取区块,按序号递加方式将m个第一区块提取完毕,每提取一次第一区块,将第一区块与该线程分配的第二区块进行运算得到内积结果,将所有线程的所有内积结果排列得到矩阵乘积结果。

本申请提供的技术方案通过多个线程来实现并行的运算,这样并行的运算能够极大的提高计算速度,减少运算时间,从而降低功耗。

上述将所有线程的运算结果排列得到矩阵乘积结果的排列方式具体可以包括:

确定线程x的运算结果α1、α2、α3、α4,确定第一区块x的元素的行的值h1、h2、h3、h4;确定第二区块x的元素的4列元素的列的值,p1、p2、p3、p4;确定第一区块x与第二区块x的运算结果α1、α2、α3、α4、α5、α6、α7、α8、α9、α10、α11、α12、α13、α14、α15、α16、在矩阵乘积结果的位置为,α1的行值为h1、列值为p1;α2的行值为h1、列值为p2;α3的行值为h1、列值为p3;α4的行值为h1、列值为p4;α5的行值为h2、列值为p1;α6的行值为h2、列值为p2;α7的行值为h2、列值为p3;α8的行值为h2、列值为p4;α9的行值为h3、列值为p1;α10的行值为h3、列值为p2;α11的行值为h3、列值为p3;α12的行值为h3、列值为p4;α13的行值为h4、列值为p1;α14的行值为h4、列值为p2;α15的行值为h4、列值为p3;α16的行值为h4、列值为p4。

上述每个线程以线程标号对应的第一区块为首个获取区块,按序号递加方式将m个第一区块提取完毕,每提取一次第一区块,将第一区块与该线程分配的第二区块进行运算得到内积结果具体可以包括:

例如线程1,其分配第二区块为第二区块1;则线程1以第一区块1为首个区块,将首个区块与第二区块1进行内积运算,然后递加一次,即获取第一区块2与第一区块1执行内积运算得到内积结果,这样每次递加1个直至所有的第一区块提取完毕,此种方式好处在于,因为每个线程在一个时间区间提取的第一区块标号不一致,那么可以避免同一个标号的第一区块在同一时间被2个线程获取,避免线程之间发生冲突,因此其提高了计算的效率。

可选的,上述方法在步骤s203与步骤s202之间还可以包括:

将第一矩阵h*w按行方向存储,将第二矩阵w*p按列方向存储。

可选的,上述将第一矩阵h*w按行方向存储具体可以包括:

将第一矩阵h*w沿列方向划分为m个输入数据块,m中前m-1个输入数据块为4列元素,最后一个输入数据块为r列元素,将前m-1个输入数据块先行后列方式存储,依据r的值确定最后一个输入数据块的存储方式。

具体可以包括:

如r=1,将最后1列元素按列方向存储,如r=2,将最后2列元素按先行后列方式存储,如r=3,在边缘添加一列零元素后得到添加数据块,将添加数据块按先行后列方式存储。

上述先列后行方式存储具体可以为,如输入数据块为

那么先行后列方式存储即存储顺序为:先存储第一行的数据以后在按列的顺序存储,具体的存储顺序为:1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16。

这里需要重点说明一下r=3的情况,对于r=3,无论其怎么存储,其提取都比较复杂,此时,本申请人在最后一个输入数据块的边缘列(一般添加的一列零元素为最后一列)添加零组成新的添加数据块,这样每次还是提取一行元素,只是一行元素的最后一个零元素提取后可以丢弃。

未添加的最后一个数据块如下:

添加以后的添加数据块如下:

上述将第二矩阵w*p按列方向存储具体可以包括:

计算w/4的余数r,则将第二矩阵w*p沿列方向划分为m个输入数据块,m中前m-1个输入数据块为4行元素,最后一个输入数据块为r行元素,将前m-1个输入数据块先列后行方式存储,如r=1,将最后1行元素按行方向存储,如r=2,将最后2行元素按先列后行方式存储,如r=3,在边缘添加一行零元素后得到添加数据块,将添加数据块按先列后行方式存储。

那么先列后行方式存储即存储顺序为:先存储第一列的数据以后在按行的顺序存储,以上述第一个矩形为例,具体的存储顺序为:1、5、9、13、2、6、10、14、3、7、11、15、4、8、12、16。

本申请实施例还提供一种计算机存储介质,其中,该计算机存储介质存储用于电子数据交换的计算机程序,该计算机程序使得计算机执行如上述方法实施例中记载的任何一种神经网络矩阵乘法运算方法的部分或全部步骤。

本申请实施例还提供一种计算机程序产品,所述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,所述计算机程序可操作来使计算机执行如上述方法实施例中记载的任何一种神经网络矩阵乘法运算方法的部分或全部步骤。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本申请所必须的。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。

所述集成的单元如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储器包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储器中,存储器可以包括:闪存盘、只读存储器(英文:read-onlymemory,简称:rom)、随机存取器(英文:randomaccessmemory,简称:ram)、磁盘或光盘等。

以上对本申请实施例进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

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