一种面向稀疏递归神经网络的均衡运算加速方法与系统与流程

文档序号:23628533发布日期:2021-01-12 10:42阅读:83来源:国知局
一种面向稀疏递归神经网络的均衡运算加速方法与系统与流程

本发明属于稀疏递归神经网络硬件加速器技术领域,更具体地,涉及一种面向稀疏递归神经网络的均衡运算加速方法与系统。



背景技术:

与前馈神经网络的静态网络、信息单向传递、网络输出只依赖当前输入等特点相比,稀疏递归神经网络是一种特殊的神经网络结构,这是因为其输出序列不仅与当前的输入有关还与前面的输出有关,具体的表现为稀疏递归神经网络会对前面的输出信息进行记忆并将其用于当前输出的计算中。因此,在稀疏递归神经网络中,隐藏层之间的节点不再是无连接的而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。目前,稀疏递归神经网络的应用主要聚焦于需要考虑时间先后顺序的技术问题上,涉及自然语言处理、机器翻译、语音识别、图像描述生成等多个技术领域。

在稀疏递归神经网络的运算过程中,主要计算操作是一系列的矩阵乘法,其中,又以向量和矩阵的乘法为核心计算操作。在面对大量的乘法操作时,稀疏递归神经网络不仅需要设计一个很大数量级的运算阵列,而且还要对这个运算阵列进行频繁的访存操作。然而,稀疏递归神经网络中神经元的权值有很大一部分为“0”,因此权重矩阵中会存在许多“0”元素权重,这使得不同的权重矩阵之间存在稀疏性差异。现有技术中,稀疏递归神经网络的运算中,并没有考虑权重矩阵的稀疏性,因此运算过程中的所有时刻向运算阵列供给相同的电压和时钟频率,这必然造成运算阵列功耗上的浪费,从而给运算模块带来功耗高、性能波动不稳定等问题。

因此,在开展稀疏递归神经网络运算时,对于权重矩阵的稀疏性做出判断,从而动态的调整运算阵列的电压和时钟频率,以实现降低功耗的效果,具有很高的实际应用价值。



技术实现要素:

本发明的目的是为了克服现有技术所存在的不足而提出了一种面向稀疏递归神经网络的均衡运算加速方法与系统,根据权重矩阵的稀疏性的仲裁结果确定调度信息,选择工作电压和运行频率与调度信息相匹配的运算子模块或工作电压和运行频率经过调整后与调度信息相匹配的运算子模块,采用选定的运算子模块依次进行跳零运算和乘加运算,实现均衡运算加速。在提升运算速度的情况下,通过均衡调度的方式来减少功耗,并减少计算时电压的波动。

本发明提出如下技术方案。

面向稀疏递归神经网络的均衡运算加速方法具体步骤如下:

步骤1,输入计算矩阵和权重矩阵;

步骤2,对权重矩阵的稀疏性进行仲裁,根据仲裁结果确定调度信息;

调度信息包括实际工作电压和实际运行频率;

实际工作电压满足如下关系式:

ureal=u0-δ·uδ

式中,

ureal为实际工作电压,

u0为基准工作电压,

uδ为与权重矩阵的稀疏性相关的调整电压,且满足uδ<α·u0,其中α是根据计算场景和硬件配置情况设定的经验值,一般0.1<α<0.5,

δ为权重矩阵的稀疏性仲裁结果;

步骤3,判断运算子模块的工作状态;

运算子模块的工作状态包括空闲状态和非空闲状态;

步骤4,结合步骤3的判断结果,选择工作电压和运行频率与调度信息相匹配的运算子模块或工作电压和运行频率经过调整后与调度信息相匹配的运算子模块;

步骤5,采用步骤4中选定的运算子模块依次进行跳零运算和乘加运算,实现均衡运算加速;

优选地,

在步骤2中,权重矩阵的稀疏性仲裁结果,就是权重矩阵内数值为“0”的元素的占比,满足如下关系式:

式中,

δ为权重矩阵中“0”元素的占比,

n0为权重矩阵中“0”元素的数量,

为权重矩阵中非“0”元素的数量。

优选地,

步骤4具体包括:

步骤4.1,对处于空闲状态的运算子模块,选择工作电压和运行频率与调度信息相匹配的运算子模块或工作电压和运行频率经过调整后与调度信息相匹配的运算子模块;

步骤4.2,对处于非空闲状态的运算子模块,先判断该运算模块的输入队列状态,然后选择工作电压和运行频率与调度信息相匹配的运算子模块或工作电压和运行频率经过调整后与调度信息相匹配的运算子模块;

优选地,在步骤4.1中,

对于工作电压和运行频率与调度信息相匹配的空闲状态的运算子模块,将计算矩阵和权重矩阵直接输入到该运算子模中;

对于工作电压或运行频率与调度信息不匹配的空闲状态的运算子模块,将计算矩阵和权重矩阵输入到该运算子模块中,并对该运算子模块的工作电压或运行频率进行调整;

优选地,在步骤4.2中,

处于非空闲状态的运算模块的输入队列状态包括空间足够和空间不足;

对于工作电压和运行频率与调度信息相匹配的非空闲状态的运算子模块,其输入队列状态为空间足够,则将计算矩阵和权重矩阵直接输入到该运算子模中;

对于工作电压或运行频率与调度信息不匹配的非空闲运算子模块,其输入队列状态为空间足够,则将计算矩阵和权重矩阵直接输入到该运算子模中,并对该运算子模块的工作电压或运行频率进行调整;

对于任意非空闲状态的运算子模块,其输入队列状态均为空间不足,则运算暂停;

优选地,

步骤5具体包括:

步骤5.1,进行跳零运算,即查找并存储权重矩阵中非零元素的数值和相对位置;

步骤5.2,进行乘加运算,即乘法运算和累加运算;

优选地,运算子模块的工作电压和运行频率的调整,先选择工作电压或运行频率接近的运算子模块,然后对其工作电压进行升高或降低的调整,对其运行频率进行重新分频;

运算子模块的工作电压和运行频率的调整过程包括:将工作电压和运行频率上升到最大值,由分频器产生新的时钟频率;判断当前时钟频率下是否存在总预误差,若存在总预误差则升高工作电压,若不存在总预误差则降低工作电压;经过多次调整后,在当前时钟频率下,若连续两次或两次以上判断为不存在总预误差,则保持当前工作电压,结束调整。

面向稀疏递归神经网络的均衡运算加速系统,包括数据传输模块、均衡运算调度模块、电压可调均衡运算模块;

数据传输模块用于向均衡运算调度模块输入计算矩阵和权重矩阵,并存储和输出计算结果;数据传输模块内置读/写存储器和权重存储器,读/写存储器用于读取或写入计算矩阵,还用于读取或写入计算结果;权重存储器用于存储权重矩阵;

均衡运算调度模块用于仲裁权重矩阵的稀疏性,并根据仲裁结果向电压可调均衡运算模块发出调度指令;

均衡运算调度模块包括运算稀疏性仲裁子模块和均衡调度子模块;神经网络的权重矩阵先进入运算稀疏性仲裁子模块进行稀疏性仲裁,然后仲裁结果输入到均衡调度子模块中,再由均衡调度子模块向电压可调均衡运算模块发送调度信息;

电压可调均衡运算模块包括多个相互独立的运算子模块,运算子模块的实际工作电压和实际运行频率各不相同,电压可调均衡运算模块用于根据调度指令匹配运算子模块;

每个运算子模块内置跳零运算子模块和乘加运算子模块,分别用于跳零运算和乘加运算;每个运算子模块还内置错误监视器,用于调整运算子模块的工作电压和运行频率;

读/写存储器包括第一区块和第二区块,在当前层计算开始之前,均衡运算调度模块从第一区块中读取计算矩阵;在当前层计算完成后,电压可调均衡运算模块向第二区块写入计算结果,并且交换第一区块和第二区块的读写配置,在下一层计算开始之前,均衡运算调度模块从第二区块中读取计算矩阵,电压可调均衡运算模块向第一区块写入计算结果;

每个运算子模块有第一数据输入端口、第二数据输入端口和数据输出端口;其中,第一数据输入端口接收权重矩阵数据,第二数据输入端口接收计算矩阵数据,数据输出端口发送计算结果数据;

对于一个运算子模块来说,权重矩阵、计算矩阵分别由第一数据输入端口和第二数据输入端口进入运算子模块,首先由跳零运算子模块对权重矩阵进行跳零运算;经过跳零运算后的数据再进入乘加运算子模块实现乘法运算和累加运算;最终的计算结果由数据输出端口送出;

乘加运算子模块包括:计算单元阵列、临时数据寄存器阵列、输入队列、输出队列;

首先,权重矩阵经过跳零运算后和计算矩阵进入输入队列,再由输入队列按运算顺序输入到计算单元阵列中;计算结果由计算单元阵列输入到输出队列;计算过程中,产生的中间数据会被存储在临时数据寄存器阵列中;

计算单元阵列包括m×n个计算单元,每个计算单元包括:权重寄存器、输入数据寄存器、输出数据寄存器、运算器;

其中,运算器包括:乘法算术逻辑单元和累加算术逻辑单元;

权重寄存器和输入数据寄存器分别向运算器中的乘法算术逻辑单元提供权重矩阵和计算矩阵;乘法运算所得的数据以及临时数据寄存器阵列中的数据均输入到累加算术逻辑单元中,累加运算所得结果输入到输出数据寄存器中,并作为最终运算结果输出;

计算单元阵列的不同位置分布着n个错误监视器,用于监测电压和温度的变化;

当错误监视器管辖区域内的计算单元没有足够的时间裕度以保证正常工作时,该错误监视器将发出预误差;各个错误监视器出发的预误差经过或门链后得到总预误差,总预误差输入到调压器中,再由调压器向电压转换器发出电压调整信号;

调压器发出的电压调整信号包括:电压上升信号、电压保持信号以及电压降低信号;电压转换器根据信号去调整计算单元阵列的电压。

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

(1)可以动态调整不同加速模块之间的计算能力,实现最优化的硬件配置,在满足实际计算和应用场景需求的前提下,充分压缩所消耗的硬件资源和代价;

(2)针对稀疏递归神经网络的加速,提供了一套完整而有具有高能效特征的解决方案,相比较现有的技术,硬件资源的使用方式在动态调整下更加合理,最终体现为能效表现更优。

附图说明

图1为本发明的面向稀疏递归神经网络的均衡运算加速方法的流程图;

图2为本发明的面向稀疏递归神经网络的均衡运算加速系统的均衡调度模块的流程图;

图3为本发明的面向稀疏递归神经网络的均衡运算加速系统的动态电压调整的功能配置的示意图;

图4为本发明的面向稀疏递归神经网络的均衡运算加速系统的结构示意图;

图5为本发明的面向稀疏递归神经网络的均衡运算加速系统的电压可调均衡运算模块的结构示意图;

图6为本发明的面向稀疏递归神经网络的均衡运算加速系统的计算单元的结构示意图。

具体实施方式

以下结合实施例子对本发明作进一步的详细描述。

如图1所示,面向稀疏递归神经网络的均衡运算加速方法具体步骤如下:

步骤1,输入计算矩阵和权重矩阵。

步骤2,对权重矩阵的稀疏性进行仲裁,根据仲裁结果确定调度信息。

具体地,

实际工作电压满足如下关系式:

ureal=u0-δ·uδ

式中,

ureal为实际工作电压,

u0为基准工作电压,

uδ为与权重矩阵的稀疏性相关的调整电压,且满足uδ<α·u0,其中α是根据计算场景和硬件配置情况设定的经验值,一般0.1<α<0.5,

δ为权重矩阵的稀疏性仲裁结果;

权重矩阵的稀疏性仲裁结果,就是权重矩阵内数值为“0”的元素的占比,满足如下关系式:

式中,

δ为权重矩阵中“0”元素的占比,

n0为权重矩阵中“0”元素的数量,

为权重矩阵中非“0”元素的数量。

可见,权重矩阵内“0”元素占比越高,实际工作电压越低,反之,实际工作电压越高。

步骤3,判断运算子模块的工作状态,运算子模块的工作状态包括空闲状态和非空闲状态。

步骤4,结合步骤3的判断结果,选择工作电压和运行频率与调度信息相匹配的运算子模块或工作电压和运行频率经过调整后与调度信息相匹配的运算子模块。

如图2,步骤4具体包括:

步骤4.1,对处于空闲状态的运算模块,选择工作电压和运行频率与调度信息相匹配的运算子模块或工作电压和运行频率经过调整后与调度信息相匹配的运算子模块。

步骤4.2,对处于非空闲状态的运算模块,先判断该运算模块的输入队列状态,然后选择工作电压和运行频率与调度信息相匹配的运算子模块或工作电压和运行频率经过调整后与调度信息相匹配的运算子模块。

具体地,

在步骤4.1中,

对于工作电压和运行频率与调度信息相匹配的空闲状态的运算子模块,将计算矩阵和权重矩阵直接输入到该运算子模中。

对于工作电压或运行频率与调度信息不匹配的空闲状态的运算子模块,将计算矩阵和权重矩阵输入到该运算子模块中,并对该运算子模块的工作电压或运行频率进行调整。

在步骤4.2中,

处于非空闲状态的运算模块的输入队列状态包括空间足够和空间不足。

对于工作电压和运行频率与调度信息相匹配的非空闲状态的运算子模块,其输入队列状态为空间足够,则将计算矩阵和权重矩阵直接输入到该运算子模中。

对于工作电压或运行频率与调度信息不匹配的非空闲运算子模块,其输入队列状态为空间足够,则将计算矩阵和权重矩阵直接输入到该运算子模中,并对该运算子模块的工作电压或运行频率进行调整。

对于任意非空闲状态的运算子模块,其输入队列状态均为空间不足,则运算暂停。

具体地,

运算子模块的工作电压和运行频率的调整,先选择工作电压或运行频率接近的运算子模块,然后对其工作电压进行升高或降低的调整,对其运行频率进行重新分频;

本优选实施例的运算子模块的工作电压和运行频率调整过程如图3所示,具体如下:

(1)开始,所有计算单元的工作电压和运行频率均上升到最大值;

(2)分频,即由分频器产生新的时钟频率;

(3)判断当前时钟频率下,是否存在总预误差,即判断总预误差是否为1,如果为1则升高工作电压,如果不为1则降低工作电压、并且再次重复本步骤;

(4)经过多次调整后,在当前时钟频率下,若连续两次或两次以上判断为不存在总预误差,则保持当前工作电压,结束调整。

步骤5,采用步骤4中选定的运算子模块依次进行跳零运算和乘加运算,实现均衡运算加速。

步骤5具体包括:

步骤5.1,进行跳零运算,即使用指针cp来查找权重矩阵中的每一个非零元素。

具体来说,对于每一列元素,仅存储非零元素的数值nv和相对位置ri,其中,向量nv表示非零元素的数值,向量ri表示非零元素的相对位置。

对于权重矩阵数据非零的情况,继续通过乘加运算器进行计算;对于权重矩阵数据有零的情况,直接跳转并输出0。

步骤5.2,进行乘加运算,即乘法运算和累加运算。

面向稀疏递归神经网络的均衡运算加速系统,如图4所示,包括数据传输模块10、均衡运算调度模块20、电压可调均衡运算模块30。

数据传输模块10用于向均衡运算调度模块20输入计算矩阵和权重矩阵,并存储和输出计算结果;数据传输模块10内置读/写存储器和权重存储器,读/写存储器用于读取或写入计算矩阵,还用于读取或写入计算结果;权重存储器用于存储权重矩阵。

均衡运算调度模块20用于仲裁权重矩阵的稀疏性,并根据仲裁结果向电压可调均衡运算模块30发出调度指令。

均衡运算调度模块20包括运算稀疏性仲裁子模块和均衡调度子模块;神经网络的权重矩阵先进入运算稀疏性仲裁子模块进行稀疏性仲裁,然后仲裁结果输入到均衡调度子模块中,再由均衡调度子模块向电压可调均衡运算模块30发送调度信息。

本发明优选实施例中,采用一种工作负载传感器作为运算稀疏性仲裁子模块,该传感器首先对权重矩阵中的“0”元素个数进行统计,并根据“0”元素数量,划分出对应的工作电压和运行频率。权重矩阵中“0”元素数量越多,调度指令中的工作电压越低;反之,权重矩阵中“0”元素数量越少,调度指令中的工作电压越高。

本发明优选实施例中,采用电压-频率范围控制器作为均衡调度子模块,实现运算子模块的调度操作。

值得注意的是,所属技术领域的人员可以任意设计运算稀疏性仲裁子模块和均衡调度子模块,本发明优选实施例采用的工作负载传感器和电压-频率范围控制器是非限制性的较优选择。

结合图2,本发明优选实施例中,均衡运算调度模块的调度操作流程具体如下:

(1)工作负载传感器对权重矩阵的稀疏性进行仲裁,然后划分出所需的工作电压和运行频率;

(2)再由电压-频率范围控制器判断是否有空闲状态的运算子模块,如果有则判断空闲状态的运算子模块中是否存在电压频率匹配的运算子模块,并进入下一步,如果没有则寻找电压或频率最接近的运算子模块,当寻找到所需的运算子模块后进入下一步;

(3)判断上一步匹配的运算子模的缓冲区队列是否还有空间,如果有则将输入数据发送到匹配的运算子模的缓冲区队列,如果没有则运算暂停。

电压可调均衡运算模块30用于根据调度指令匹配运算子模块;如图5,电压可调均衡运算模块30包括多个相互独立的运算子模块,本发明优选实施例的电压可调均衡运算模块30包括四个运算子模块,分别是:第一运算子模块301、第二运算子模块302、第三运算子模块303、第四运算子模块304,这些运算子模块的实际工作电压和实际运行频率各不相同。

每个运算子模块内置跳零运算子模块和乘加运算子模块,分别用于跳零运算和乘加运算;每个运算子模块还内置错误监视器,用于调整运算子模块的工作电压和运行频率。

读/写存储器包括第一区块101和第二区块102,在当前层计算开始之前,均衡运算调度模块20从第一区块101中读取计算矩阵;在当前层计算完成后,电压可调均衡运算模块20向第二区块102写入计算结果,并且交换第一区块101和第二区块102的读写配置,在下一层计算开始之前,均衡运算调度模块20从第二区块102中读取计算矩阵,电压可调均衡运算模块20向第一区块101写入计算结果。因此,计算矩阵和向量数据传输过程中,通过快速交换读/写存储器的配置,减少额外的数据传输。

每个运算子模块有第一数据输入端口、第二数据输入端口和数据输出端口;其中,第一数据输入端口接收权重矩阵数据,第二数据输入端口接收计算矩阵数据,数据输出端口发送计算结果数据。

对于一个运算子模块来说,权重矩阵、计算矩阵分别由第一数据输入端口和第二数据输入端口进入运算子模块,首先由跳零运算子模块对权重矩阵进行跳零运算;经过跳零运算后的数据再进入乘加运算子模块实现乘法运算和累加运算;最终的计算结果由数据输出端口送出。

乘加运算子模块包括:计算单元阵列、临时数据寄存器阵列、输入队列、输出队列。

首先,权重矩阵经过跳零运算后和计算矩阵进入输入队列,再由输入队列按运算顺序输入到计算单元阵列中;计算结果由计算单元阵列输入到输出队列;计算过程中,产生的中间数据会被存储在临时数据寄存器阵列中,因此可以提高计算单元阵列的数据吞吐能力,减小时延,满足神经网络数据处理量巨大的需求。

计算单元阵列包括m×n个计算单元,如图6,每个计算单元包括:权重寄存器、输入数据寄存器、输出数据寄存器、运算器。其中,运算器包括:乘法算术逻辑单元1a和累加算术逻辑单元1b。

权重寄存器和输入数据寄存器分别向运算器中的乘法算术逻辑单元提供权重矩阵和计算矩阵;乘法运算所得的数据以及临时数据寄存器阵列中的数据均输入到累加算术逻辑单元中,累加运算所得结果输入到输出数据寄存器中,并作为最终运算结果输出。

计算单元阵列的不同位置分布着n个错误监视器,用于监测电压和温度的变化。每个错误监视器由寄存器和反相器链组成。

当错误监视器管辖区域内的计算单元没有足够的时间裕度以保证正常工作时,该错误监视器将发出预误差;各个错误监视器出发的预误差经过或门链后得到总预误差,总预误差输入到调压器中,再由调压器向电压转换器发出电压调整信号。

调压器发出的电压调整信号包括:电压上升信号、电压保持信号以及电压降低信号;电压转换器根据信号去调整计算单元阵列的电压。

权重寄存器和输入数据寄存器分别向运算器中的乘法算术逻辑单元提供输入数据;乘法运算所得的数据以及临时数据寄存器阵列中的数据均输入到累加算术逻辑单元中,累加运算所得结果输入到输出数据寄存器中,并作为最终运算结果输出。因此,乘法运算和累加运算通过一个计算单元即可实现,其结构简单,提高运算效率。

实施例4。本发明提出的一种面向稀疏递归神经网络的均衡运算加速模块中,计算单元阵列的不同位置分布着错误监视器,用于监测电压和温度的变化。根据图5可以看出,一个计算单元阵列中分布布置着n个错误监视器,分别是第一错误监视器、第二错误监视器、……第n-1错误监视器和第n错误监视器。

以上具体实施方式及实施例是对本发明提出的一种面向稀疏递归神经网络的均衡运算加速模块与方法技术思想的具体支持,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在本技术方案基础上所做的任何等同变化或等效的改动,均仍属于本发明技术方案保护的范围。

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