运算装置及方法与流程

文档序号:17327493发布日期:2019-04-05 21:53阅读:147来源:国知局
运算装置及方法与流程

本公开涉及人工智能技术领域,尤其涉及一种可在线配置的神经网络运算装置及方法。



背景技术:

深度神经网络是目前许多人工智能应用的基础,其在语音识别、图像处理、数据分析、广告推荐系统、汽车自动驾驶等多方面得到了突破性的应用,使得深度神经网络被应用在了生活的各个方面。但是,深度神经网络的运算量巨大,一直制约着其更快速的发展和更广泛的应用。当考虑运用处理器设计来加速深度神经网络的运算时,巨大的运算量,必然会带了很大的能耗开销,同样制约着处理器的进一步的广泛应用。

为了解决神经网络算法计算量巨大,运算耗时过长的问题,神经网络的硬件处理器应运而生。由于处理器针对某种配置或者某种目的而进行设计的,从而能够获得较高的加速比、较低的能耗。然后处理器的可扩展性较低,其结构无法随着计算需求的改变而进行改变。



技术实现要素:

(一)要解决的技术问题

为了解决或者至少部分缓解上述技术问题,本公开提供了一种运算装置及方法,其为可在线配置的神经网络运算装置及方法,能够有效的对神经网络算法进行加速,并且耗能较低;同时可以根据计算需求的不同来进行在线配置,从而提高了处理器的各组成部件的利用率,扩展了处理器的应用范围,具有较高的灵活性和一定的可扩展性。

(二)技术方案

根据本公开的一个方面,提供了一种运算装置,包括:控制模块;以及运算模块,其包括多个运算单元;其中,所述控制模块,用于发送指令给所述多个运算单元并控制运算单元之间的数据传递。

在本公开的一些实施例中,每个所述运算单元用于接收所述指令,并根据指令将待运算数据或中间结果沿一个或多个的方向传递至该运算单元之外的运算单元。

在本公开的一些实施例中,所述方向包括向左/右相邻或不相邻的运算单元传递方向、向上/下相邻或不相邻的运算单元传递方向、沿对角线相邻或不相邻的运算单元传递方向。

在本公开的一些实施例中,所述沿对角线相邻或不相邻的运算单元传递方向包括左上对角线、左下对角线、右上对角线、右下对角线相邻或不相邻的运算单元传递方向。

在本公开的一些实施例中,所述的运算装置还包括:存储模块,其包括数据存储单元和临时缓存,用于将待运算的数据或中间结果存储到同一个区域或分开存储。

在本公开的一些实施例中,所述控制模块包括,存储控制单元,用于控制存储模块存储或读取所需的数据;以及,运算控制单元,用于对运算单元内部的运算方式及运算单元间的数据传递进行控制。

在本公开的一些实施例中,每个运算单元包括多个输入端口,该多个输入端口包括用于接收存储模块传来的数据的端口以及用于接收所述其他运算单元传来的数据的端口。

在本公开的一些实施例中,每个运算单元还包括输出端口,用于将数据传送回存储模块或者传递给指定的运算单元。

在本公开的一些实施例中,每个运算单元包括至少一个乘法器、至少一个加法器。

在本公开的一些实施例中,每个运算单元还包括至少一个存储器。

在本公开的一些实施例中,所述运算模块包括n*n个运算单元和1个alu,该n*n个运算单元之间数据传递方向为s形,n为正整数。

在本公开的一些实施例中,所述n*n个运算单元中的各运算单元用于将接收的神经元数据,并将该神经元数据和本运算单元存储器中对应的突触权值数据进行相乘得到乘积结果;所述n*n个运算单元中的第2至第n*n运算单元还分别用于接收各自前一运算单元传递的运算结果,并将该运算结果与本单元的乘积结果相加;所述alu用于接收第n*n个运算单元传递的运算结果并进行激活运算。

在本公开的一些实施例中,所述运算模块包括n*n个运算单元和n-1个alu,所述n*n运算单元用于沿不同的方向传递运算数据,n为正整数。

在本公开的一些实施例中,所述n*n个运算单元呈n行n列的阵列排布,第1列的运算单元用于接收从所述存储模块传来的待运算数据完成平方操作,并向右和向右对角线相邻的运算单元传递平方值;第1行的运算单元用于接收从存储模块传来的待运算数据完成平方操作,并向右对角相邻的运算单元传递平方值;第n列的运算单元用于接收来自左对角和左向的数据并完成累加;所述alu用于接收第n*n个运算单元传递的运算结果并进行指数操作。

根据本公开的另一个方面,提供了一种运算方法,包括:控制模块发送指令;以及运算模块的多个运算单元接收所述指令,并根据指令进行数据传递。

在本公开的一些实施例中,每个所述运算单元接收所述指令,并根据指令将待运算数据或中间结果沿一个或多个的方向传递至该运算单元之外的其他运算单元。

在本公开的一些实施例中,所述方向包括向左/右相邻或不相邻的运算单元传递方向、向上/下相邻或不相邻的运算单元传递方向、沿对角线相邻或不相邻的运算单元传递方向。

在本公开的一些实施例中,所述沿对角线相邻或不相邻的运算单元传递方向包括左上对角线、左下对角线、右上对角线、右下对角线相邻或不相邻的运算单元传递方向。

在本公开的一些实施例中,控制模块的存储控制单元控制存储模块读取待运算的神经元数据等待传递,以及读取突触权值数据并将突触权值数据分别保存到各运算单元中的存储器;控制模块的运算控制单元发出待运算的运算信号给各运算单元,初始化各运算单元。

在本公开的一些实施例中,控制模块的存储控制单元发出指令,存储模块将待运算的神经元数据传递给各运算单元;控制模块的运算控制单元发出指令,各个运算单元接收所述神经元数据,并将该神经元数据和本运算单元存储器中对应的突触权值数据进行相乘,得到乘积结果。

在本公开的一些实施例中,n*n阵列排布的运算单元中,第1行第1列的运算单元将运算结果向右传递给第1行第2列的运算单元,第1行第2列的运算单元将接收到的运算结果和本单元的运算乘积相加,得到部分和,再向右传递,直至传递至第n行第n列的运算单元,形成s型传递路线,使部分和累加,n为正整数。

在本公开的一些实施例中,运算模块中的alu接收所述累加结果,并进行激活运算,之后将激活运算结果写回存储模块。

在本公开的一些实施例中,每个运算单元接收其前一运算单元的运算结果,并将该运算结果和本单元的运算乘积相加,得到部分和,再向后传递。

在本公开的一些实施例中,所述多个运算单元按s型路线传递并累加部分和。

在本公开的一些实施例中,运算模块的alu在累加之后接收所述多个运算单元的运算结果,并进行激活运算。

在本公开的一些实施例中,将激活运算结果写到存储模块。

在本公开的一些实施例中,在计算lrn层时,多个运算单元对输入数据的平方的累加,alu对累加结果指数操作。

在本公开的一些实施例中,运算模块的第1列的运算单元接收从存储模块传来的待运算数据,完成平方操作后向右和右下相邻的运算单元传递平方值;运算模块的第1行的运算单元接收从存储模块传来的待运算数据,完成平方操作后向右下相邻的运算单元传递平方值;运算模块的第n列的运算单元接收来自左上和左侧的数据后,完成累加,n为正整数。

在本公开的一些实施例中,运算模块的除第1行、第1列及第n列之外的运算单元接收来自左上相邻的运算单元传来的数据后向右下相邻的运算单元传递,同时将该数据与从左相邻的运算单元传来的数据进行累加,将累加后的和向右侧传递。

在本公开的一些实施例中,若所有累加完成,则运算模块的第n列的运算单元则向右将累加结果传递给alu完成指数操作。

(三)有益效果

从上述技术方案可以看出,本公开可在线配置的神经网络运算装置及方法至少具有以下有益效果其中之一:

(1)本公开可在线配置的神经网络运算装置及方法,能够有效的对神经网络算法进行加速,并且耗能较低。

(2)本公开可在线配置的神经网络运算装置及方法,可以根据计算需求的不同来进行在线配置,从而提高了处理器的各组成部件的利用率,扩展了处理器的应用范围,具有较高的灵活性和一定的可扩展性。

附图说明

图1是本公开可在线配置的神经网络运算装置第一功能模块图。

图2是本公开可在线配置的神经网络运算装置第二功能模块图。

图3是本公开可在线配置的神经网络运算装置第三功能模块图。

图4是本公开可在线配置的神经网络运算装置第四功能模块图。

图5是本公开可在线配置的神经网络运算装置第五功能模块图。

具体实施方式

为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开作进一步的详细说明。

需要说明的是,在附图或说明书描述中,相似或相同的部分都使用相同的图号。附图中未绘示或描述的实现方式,为所属技术领域中普通技术人员所知的形式。另外,虽然本文可提供包含特定值的参数的示范,但应了解,参数无需确切等于相应的值,而是可在可接受的误差容限或设计约束内近似于相应的值。此外,以下实施例中提到的方向用语,例如“上”、“下”、“前”、“后”、“左”、“右”等,仅是参考附图的方向。因此,使用的方向用语是用来说明并非用来限制本公开。

本公开提供了一种可在线配置的神经网络运算装置,即可在线配置的神经网络硬件处理器。图1为本公开神经网络运算装置功能模块示意图。如图1所示,本公开神经网络处理器,包括:控制模块和运算模块。可选的,还包括存储模块。

所述运算模块可包括多个运算单元,每个运算单元包括至少一乘法器、至少一加法器。可选的,所述每个运算单元还包括至少一存储器。所述存储器可包括存储空间和/或临时缓存;所述存储空间例如为sram、所述临时缓存例如为寄存器。

其中,所述控制模块,用于发送指令给所述多个运算单元并控制运算单元之间的数据传递。

对于每个运算单元可以通过配置指令以一个或多个的方向传递待运算数据或者中间结果值给另一或多个运算单元,该传递方向包括向左/右相邻或不相邻的运算单元传递、向上/下相邻或不相邻的运算单元传递、沿对角线方向向相邻或不相邻的运算单元传递以及向多个方向的多个相邻或不相邻的运算单元传递。所述沿对角线相邻或不相邻的运算单元传递方向包括左上对角线、左下对角线、右上对角线、右下对角线相邻或不相邻的运算单元传递方向。

每个运算单元具有多个输入端口,该多个输入端口包括:连接存储模块、用于接收存储模块传来的数据的端口,以及连接其他运算单元用于接收运算单元传来的数据的接口。每个运算单元也具有输出端口,用于将数据传送回存储模块或者传递给指定的运算单元。

存储模块包括数据存储单元和/或临时缓存,可以根据需求有一个或者多个数据存储单元和/或临时缓存,即可以将待运算的数据存储到同一个区域,也可以分开存储;中间结果可以存储到同一个区域,也可以分开存储。所述数据存储单元,例如是sram;所述临时缓存,例如是寄存器。

可选的,如图2所示,所述控制模块,包括存储控制单元以及运算控制单元。其中,存储控制单元用于控制存储模块存储或读取所需要的数据;运算控制单元是根据待运算的运算种类和运算要求对运算模块进行控制,其中包括对运算单元内部的具体运算方式进行控制和对运算单元间的数据传递进行控制。

本公开还提供了一种运算方法,包括:

控制模块发送指令;以及

运算模块的多个运算单元接收所述指令,并根据指令进行数据传递。

其中,每个所述运算单元接收所述指令,并根据指令将待运算数据或中间结果沿一个或多个的方向传递至该运算单元之外的其他运算单元。

所述方向包括向左/右相邻或不相邻的运算单元传递方向、向上/下相邻或不相邻的运算单元传递方向、沿对角线相邻或不相邻的运算单元传递方向。

所述沿对角线相邻或不相邻的运算单元传递方向包括左上对角线、左下对角线、右上对角线、右下对角线相邻或不相邻的运算单元传递方向。

在本公开的一具体实施例中,所述运算模块包括n*n(n为正整数)个运算单元和1个alu,能够依次以s形的方向传递数据,如图3所示。可选的,所述alu为轻量级alu。每个运算单元包括一个乘法器、一个加法器、一个存储空间和一个临时缓存,运算单元之间传递的是每次运算单元运算得到的中间结果。

本实施例处理器主要运算流程如下,存储控制单元发出读取控制信号给存储模块读取待运算的神经元数据和突触权值数据,分别保存到运算单元中的存储空间,等待传递。而后,运算控制单元发出待运算的运算信号给各个运算单元,初始化运算单元,例如将缓存置零等。而后,存储控制单元发出指令,将待运算的神经元传递给各个运算单元,运算控制单元发出指令,各个运算单元接受神经元数据和自己存储空间中对应的突触权值数据进行相乘。而后左上角的运算单元将运算结果向右传递给第二个运算单元,第二个运算单元将接收到的结果和本单元的运算乘积相加,得到部分和,再向右传递,以此类推,如图3所示按照s型路线传递部分和并不断累加。若累加完毕,则传入alu中进行激活等运算,而后将结果写到存储模块,否则,暂时将结果保存回存储模块,等待后续的调度并继续运算。这种结构能够在每次运算的时候充分利用神经网络的权值共享的特性,权值数据只需要在最初被载入一次,从而大大减少了访存次数,减少了功耗开销。

在本公开的一具体实施例中,如图4所示,所述运算模块包括n*n(n为正整数)个运算单元和m-1个alu(m为正整数),可选的m=n,不同的运算单元可以不同的方向传递运算数据,即不要求在同一个运算模块中保持所有运算单元统一的传递方向。每个运算单元包括一乘法器、一加法器、和一临时缓存,运算单元之间传递的是每次运算单元运算得到的中间结果。可选的,所述alu为轻量级alu。

在局部响应归一化层(localresponsenormalization,lrn)中,其输出值为当计算lrn层时,可以通过运算单元完成对输入数据的平方的累加,而后通过alu完成后续的指数操作。这里配置运算单元进行的操作以及数据传递方向为:最左侧一列的运算单元用于接收从存储模块传来的待运算数据,完成平方操作后向右侧和右下侧相邻的运算单元传递平方值;最上一行的运算单元用于接收从存储模块传来的待运算数据,完成平方操作后向右下侧相邻的运算单元传递平方值,最右侧一列的运算单元接收来自左上和左侧的数据后,完成累加,根据指令,如果所有累加完毕,则向右传递给alu完成后续的指数操作;其他运算单元接收来自左上的运算单元传来的数据后向右下侧的运算单元传递,同时将该数据与从左侧运算单元传来的数据进行累加,将累加后的和向右侧传递。以此类推,直到完成了所有运算。

下面以n=3为例进行具体说明。如图5所示,其中横线上的是传递的具体数据,方框表示每个运算单元中完成的运算结果。该过程中可以流水完成相关操作。利用本公开处理器,能够有效利用片上已被读取出的数据,有效降低了访存次数,节省了功耗开销,降低了数据读取带来的延时,加快了运算速度。

本公开中,各功能单元/模块都是硬件,比如该硬件可以是电路,包括数字电路,模拟电路等等。硬件结构的物理实现包括但不局限于物理器件,物理器件包括但不局限于晶体管,忆阻器等等。所述计算装置中的计算模块可以是任何适当的硬件处理器,比如cpu、gpu、fpga、dsp和asic等等。所述存储元件可以是任何适当的磁存储介质或者磁光存储介质,比如rram,dram,sram,edram,hbm,hmc等等。

另外,本公开神经网络可以是卷积神经网络,还可以是全连接神经网络、rbm神经网络、及循环神经网络(rnn,recurrentneuralnetworks)等。在另外一些实施例中,针对的计算可以是卷积计算之外的其他神经网络中的操作,如全连接等。

以上所述的具体实施例,对本公开的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本公开的具体实施例而已,并不用于限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。

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