背景技术
近年来,深度学习算法凭借其优异的性能开始替代传统的算法成为多个领域的主流算法。但当前主流的处理器(CPU、GPU、DSP等)还无法较好地适配其数据密集型的计算特点,因此学界以及工业界掀起了一波深度学习处理器的研究热潮。
全连接操作是神经网络算法中非常重要的一类操作,同时也是计算量非常大的一类操作。因此,高效地执行该类操作成为提升深度学习处理器的性能的关键。
全连接操作的计算量巨大是因为其连接参数众多。而研究发现,并不是所有连接都是必须的,全连接中存在大量冗余,而合理地删除这些冗余连接使之成为部分连接几乎不会影响网络性能。
删除冗余连接的方法称为剪枝。研究人员提出一种使用排列的块对角掩膜矩阵进行剪枝的方法,排列的块对角掩膜矩阵定义如下:将一个
的矩阵划分为
个子矩阵,每个子矩阵的元素
由以下公式定义:
这
个子矩阵即构成了排列的块对角掩膜矩阵。将排列的块对角掩膜矩阵与原始的权重矩阵对应元素相乘即可完成对原始权重矩阵的剪枝。该剪枝方法完全克服了现有剪枝方法所存在的剪枝后的结构不规则以及巨大的指针开销问题且剪枝后网络性能良好,因此十分有利于硬件实现。
该剪枝方法的作者也提供了一个针对该稀疏结构的矩阵向量乘法计算单元,但该计算单元存在三个弊端:(1)该计算单元只减少了对零值权重的存储开销,未消除对零值权重的计算开销。(2)该计算单元只支持静态利用输入激励的稀疏性,实际上输入激励的稀疏性在很多场景下非常小,增加跳零操作不会带来功耗的节省。相反,因为增加了额外的比较操作,还会带来整个系统的功耗增加。(3)该计算单元未考虑中间乘积的稀疏性,因为零值权重或者零值激励所产生的乘积也是零,因此中间乘积具备和权重矩阵相同或更大的稀疏性。充分利用中间乘积的稀疏性能大幅减少加法的操作,进一步提高整个系统的能效。
发明内容
本发明要解决技术问题是:克服上述技术的缺点,提供一种能够充分利用权重矩阵的稀疏性、中间乘积的稀疏性和动态利用输入激励的稀疏性的针对排列的块对角权重矩阵的稀疏矩阵向量乘法计算单元。
为了解决上述技术问题,本发明提出的技术方案是:一种针对排列的块对角权重矩阵的稀疏矩阵向量乘法计算单元,包括:若干处理单元和累加器;所述处理单元的输出连接所述累加器,所述累加器用于累加所有处理单元的输出;
若输入激励向量的长度为m,则所述处理单元的数量为
个;每个所述处理单元用于计算
个输入激励向量中的元素
与其对应列权重之间的乘法;
所述处理单元包括用于存储权重数据的存储器、乘法器阵列、指针生成器、稀疏累加器阵列、第一二选一选择器和第二二选一选择器;所述存储器和指针生成器的输入端连接地址信号,所述存储器的输出连接乘法器阵列,
个输入激励向量中的元素
输入至所述乘法器阵列;所述乘法器阵列的输出连接第一二选一选择器的第一输入端和第二二选一选择器的第一输入端;所述第一二选一选择器的第二输入端输入0;所述第二选择器的第二输入端连接所述第一二选一选择器的输出端;所述第二选择器的输出连接所述稀疏累加器阵列的输入;所述指针生成器的输出连接所述稀疏累加器阵列;所述稀疏累加器阵列输出即为所述处理单元的输出;所述指针生成器还输入有偏置信号;所述第一二选一选择器的选择信号为
个输入激励向量中的元素
是否为0,如果
=0,则输出0,如果不为0则输出所述乘法器阵列的输出;所述第二二选一选择器的选择信号位配置信号;当所述配置信号为0,则输出所述乘法器阵列的输出;如果所述配置信号为1,则输出所述第一二选一选择器的输出;当所述输入激励的稀疏性较大时,所述配置信号为1,当所述输入激励的稀疏性较小时,所述配置信号为0。
上述方案进一步的改进在于:当所述输入激励的稀疏性大于50%时,所述配置信号为1,当所述输入激励的稀疏性小于50%时,所述配置信号为0。
上述方案进一步的改进在于:所述稀疏累加器阵列由若干稀疏累加器并行构成,所述稀疏累加器包括译码器、累加单元、位拼接单元、D触发器和第三二选一选择器;所述译码器的输入连接所述指针生成器的输出和所述第二二选一选择器的输出;所述译码器的输出连接所述第三二选一选择器的第一输入端,所述第三二选一选择器的输出即为所述稀疏累加器,所述第三二选一选择器的输出还连接所述D触发器的D端,所述D触发器的Q端连接所述累加单元和所述未拼接单元,所述累加单元的输入还连接所述所述第二二选一选择器的输出。
上述方案进一步的改进在于:所述处理单元处于第一级,所述累加器处于第二级至第N级,两个所述处理单元的输出连接一个处于所述第二级的累加器,两个处于第n+1级的累加器的输出连接一个处于所述第n+2级的累加器,其中n∈(1,N-2),第N级含有1个累加器。
本发明提供的针对排列的块对角权重矩阵的稀疏矩阵向量乘法计算单元,充分利用了剪枝后权重矩阵的稀疏特性,避免了零值权重与对应的输入激励元素之间的乘法操作。能够结合输入激励的稀疏性动态地使能跳零操作。充分利用了权重与对应的输入激励相乘得到的中间乘积的稀疏性,避免了零值乘积与对应乘积之间的累加操作。设计的指针生成器消除了记录非零值位置信息的指针的存储开销。
具体实施方式
实施例
本实施例的针对排列的块对角权重矩阵的稀疏矩阵向量乘法计算单元,如图1,包括:若干处理单元和累加器;处理单元的输出连接累加器,累加器用于累加所有处理单元的输出;为了降低消耗,处理单元处于第一级,累加器处于第二级至第N级,两个处理单元的输出连接一个处于第二级的累加器,两个处于第n+1级的累加器的输出连接一个处于第n+2级的累加器,其中n∈(1,N-2),第N级含有1个累加器。如果处理单元或某一级中的累加器为单数, 则单独与下一级的累加器连接即可,相当于补一个0位。
假设输入激励向量的长度为m,则处理单元的数量为
个;每个处理单元用于计算
个输入激励向量中的元素
与其对应列权重之间的乘法。
如图2,处理单元包括用于存储权重数据的存储器、乘法器阵列、指针生成器、稀疏累加器阵列、第一二选一选择器和第二二选一选择器;存储器和指针生成器的输入端连接地址信号,存储器的输出连接乘法器阵列,
个输入激励向量中的元素
输入至乘法器阵列;乘法器阵列的输出连接第一二选一选择器的第一输入端和第二二选一选择器的第一输入端;第一二选一选择器的第二输入端输入0;第二选择器的第二输入端连接第一二选一选择器的输出端;第二选择器的输出连接稀疏累加器阵列的输入;指针生成器的输出连接稀疏累加器阵列;稀疏累加器阵列输出即为处理单元的输出;指针生成器还输入有偏置信号;第一二选一选择器的选择信号为
个输入激励向量中的元素
是否为0,如果
=0,则输出0,如果不为0则输出乘法器阵列的输出;第二二选一选择器的选择信号位配置信号;当配置信号为0,则输出乘法器阵列的输出;如果配置信号为1,则输出第一二选一选择器的输出;当输入激励的稀疏性较大时,配置信号为1,当输入激励的稀疏性较小时,配置信号为0。
具体的,当输入激励的稀疏性大于50%时,配置信号为1,当输入激励的稀疏性小于50%时,配置信号为0。
稀疏累加器阵列由若干稀疏累加器并行构成,如图3,稀疏累加器包括译码器、累加单元、位拼接单元、D触发器和第三二选一选择器;译码器的输入连接指针生成器的输出和第二二选一选择器的输出;译码器的输出连接第三二选一选择器的第一输入端,第三二选一选择器的输出即为稀疏累加器,第三二选一选择器的输出还连接D触发器的D端,D触发器的Q端连接累加单元和未拼接单元,累加单元的输入还连接第二二选一选择器的输出。
处理单元内部的存储器用于存储权重。为了充分利用权重的稀疏性,减少存储资源占用以及乘法操作。本实施例采用图4所示的访存方式,将权重矩阵中同一列的非零权重存储在存储器的同一行,然后在计算的时候一块读出。乘法器阵列用于并行计算权重矩阵中的一列非零权重与一个输入数据
之间的乘法操作。
右边相邻的两个二选一选择器用于实现动态利用输入激励的稀疏性。判别式
的结果作为第一二选一选择器的选择信号,当判别式的结果为1时,即
的值为0,则直接输出结果0,不需要进行乘法操作。反之则输出乘法器阵列的输出结果。配置信号
作为第二个二选一选择器的选择信号。当输入激励的稀疏性比较大时,跳零操作能够大幅减少系统功耗,则将信号
配置为1,输出第一二选一选择器的结果。当输入激励的稀疏性较低时,跳零操作不会带来太大的功耗收益,则将信号
配置为0,将第一二选一选择器旁路掉,直接输出乘法器阵列的结果。
如前面所分析的,乘积具备与权重相同或更大的稀疏性。因此,我们同样可利用其稀疏性,只对非零乘积进行累加。稀疏累加器阵列用于计算两列稀疏乘积的累加和。为实现只对非零乘积进行累加,需要知道非零乘积的位置。可通过权重矩阵中非零权重的位置来指示非零乘积的位置。根据排列的块对角矩阵的结构特点,非零权重在权重矩阵中的行与列满足如下关系式:
该公式即为指针生成器的实现原理,
为权重在各子矩阵中的行地址。由前面定义的存储器访存方式可知,
就是存储器的地址
。当块对角矩阵的秩
为2的n次方的时候,硬件实现取模运算就变得非常简单,直接取输入信号的低n位值就能得到取模结果。而块对角矩阵的秩p可以灵活的设置,在训练网络的时候我们可以强制将它限定为2的n次方。此外,通过分析排列的块对角权重矩阵的结构特点可知,每一列的非零权重在各个子矩阵中的行数都相同,因此整个稀疏累加器阵列共用一个行地址指针
。
如图3,稀疏累加器的结构所示,当累加控制信号
为0时,即不进行累加。该非零乘积
(
表示矩阵中某一列的第
个非零元素)只进行译码操作,即将其周围的零值乘积恢复出来。译码过程如图5所示,当
不为0时,该非零乘积
就和累加结果中行数相同的元素
进行相加,相加完成之后与其他行的结果
拼接到一起得到新的
。
本发明不局限于上述实施例。凡采用等同替换形成的技术方案,均落在本发明要求的保护范围。