一种神经网络存储组织结构及其可配置管理方法与流程

    专利2022-07-08  108


    本发明属于人工智能技术领域,具体涉及一种神经网络存储组织结构。



    背景技术:

    在嵌入式平台下进行神经网络的部署时,需要考虑到资源分配的问题。片上有限的存储资源包括bram,寄存器量和计算资源dsp是直接影响网络是否能够部署,以及部署后计算性能是否能有所提高的关键。目前的嵌入式平台上部署的网络结构,其存储量和计算量也越来越大,片上有限的资源如何进行合理的部署和使用是设计的关键。

    在不同的图像处理的深度神经网络中,每层计算量和存储量均被网络宽度提高,同时网络层数的增加使得整个系统的存储需求提高。它需要高并行性来提高数据吞吐量和计算性能。然而,由于对数据移动的巨大需求,导致了更为严重的带宽瓶颈。另一方面,这种网络在嵌入式平台上的部署带来了一些新的挑战,资源有限。当数据传输时,带宽需求会急剧波动。带宽被认为是nn部署的主要瓶颈。高并行性对提高吞吐量和性能有明显的好处,由于在短时间内对数据的大量需求,所以会带来在带宽约束上的巨大挑战。

    因此,为了减少数据传输所带来的压力,现有技术对参数压缩进行了一系列的研究,包括剪枝,权重共享,低秩分解,编码,二值化等等。但是这些操作忽略了数据存储调度上的复杂性,压缩的数据仍然超过百万位,有限的缓冲区依旧不能容纳所有的数据,同时还会带来更大的调度需求。在这种情况下,带宽压力可能会恶化,因为数据需要不可避免地在本地部分传输,并以循环的方式反复移动。这种存储资源受限导致的带宽约束会导致片内外的数据交互时间远高于实际片上数据有效利用时间和计算单元的有效计算时间,导致整个加速系统的计算性能无法得到提升。



    技术实现要素:

    为了克服现有技术的不足,本发明提供了一种神经网络存储组织结构及其可配置管理方法,针对深度神经网络的片内外多级存储方式和复杂的数据流特征进行研究设计,即适应嵌入式领域中的神经计算网络结构进行片上不同加速计算方式和不同数据需求的存储模型设计。该方法针对片上的存储调度主要分为四个环节:数据拆分,数据拼接,地址计算,数据分发。通过这种流水线式的存储组织调度能够对嵌入式环境下神经计算涉及到的片上数据存储进行动态的可配置的管理和部署。一方面,能够缓解卷积计算后数据维度变换所带来的地址索引复杂问题和数据交织的问题,另一方面能够缓解片上存储资源的压力。

    本发明解决其技术问题所采用的技术方案如下:

    一种神经网络存储组织结构,包括对以下四部分的处理:

    第一部分:片外ddr数据存储;

    将ddr存储部分由三部分变换成五部分,分别为:

    1、输入数据存储空间:存储该层神经网络计算所需要的全部层输入数据,其存储量为:chin*w*h;

    2、权重存储空间:存储该层神经网络计算所需要的全部权重数据,其存储量为:chin*chout*k*k;

    3、输出数据存储空间:存储该层神经网络计算的输出特征图信息,其存储量为:chout*r*c;

    4、输入特征图对应的编码信息mask;

    5、输出特征图对应的编码信息;

    其中,chin表示输入通道量,chout表示输出通道量,w和h分别表示该层输入特征图的宽和高,r和c分别表示该层输出特征图的宽和高;

    第二部分:数据流特征不匹配问题处理;

    在神经网络当前层的下一层中取出当前层数据后进行降维操作,将数据的一维特征恢复;针对升维后的数据,利用片内外数据传输的突发时间差进行数据降维,将传输的数据流进行跳地址bram存储,利用地址访问的随机性进行数据块的跳变存储;在数据传输过程中,当片外开始传输高维的数据时进行地址的跳变控制,在存储过程中将数据的升维特征分解;

    第三部分:数据交织和地址交织问题处理;

    当数据从存储单元取出进行分发时,进行数据二次中间缓存处理交织,当数据经过第一级处理存入bram中后,进行二次跳地址取数,按照固定的分发顺序进行数据取数,并针对地址单元数据进行解析,获取相应特征像素值信息;

    第四部分:存储组织调度分割方案;

    对输入数据进行分级存储,将针对输入数据的片上存储组织分为四级:

    第一级:数据拆分,按输入块方式适应pe并行度的数据流组织;

    针对输入数据的处理第一级将读取出来的数据按照数据组织关系进行拆分重排,一一对应的存储到相应的缓存bram中;

    第二级:数据拼接,按照一次并行计算完整的计算量进行数据的存储;

    一次并行计算输入块的部分输入子块,按照各部分输入子块进行数据的拼接,分子块存储到第二级缓存bram中;

    第三级:地址计算,按最小计算单元计算方式获取实际数据和控制信息;

    按照pe最小卷积计算方式,根据前一级存储时候记录的地址信息以及bram中数据存储的标志位信息,按照卷积窗口取出相应数据并获取相应数据对应卷积窗口的位置信息;再按照位置组织形式重新存储数据值,并存储与之对应的卷积窗口位置值;根据bram中地址能存储的有效神经元数据个数获取对应的地址间隔量;计算公式如下:

    其中addr_sub表示对应一个bram中存储的相同特征图上相邻像素点之间的存储地址间隔,neuron_num表示bram中一个地址单元上所能存储的神经元个数,n_bwidth表示神经元数据的位宽,bram_bwidth表示缓存bram的存储位宽,line表示计算单元中每个计算子单元的计算现场数;

    第四级:数据分发,按照各计算子单元数据需求,发送有效信息;

    第四级负责最后的数据分发;接收到数据分发信号之后,针对pe计算所需要的输入控制相关信息进行提取、配置和发送,包括具体的有效像素值、卷积窗口位置信息和相应输入通道值;

    一种神经网络存储组织结构的可配置管理方法,包括以下步骤:

    步骤1:将所有需要进行配置的参数分为以下几类:

    第一类:计算单元并行计算参数:并行度,并行计算方式;

    第二类:维度变化功能算子参数:depthtospace,spacetodepth,上采样,降采样;

    第三类:一般网络功能参数:层输入通道数,层输出通道数,kernel_size,padding;

    第四类:数据流特征参数:去零;

    步骤2:片上各级缓存bram量动态设置;

    片上各级缓存bram的使用量依据并行度和层输入/输出通道数;当网络的输入通道数固定时且加速器单元的并行度不同时,相应的预处理输入数据中间缓存bram个数是随并行度变化进行量化,表示如下:

    其中,chin表示当前层输入通道数,chout表示当前层输出通道数,n表示计算单元的并行度;num_in1是将输入通道量按并行计算通道量进行划分后的block数量,当向下取整结果不等于零时,num_in1的数量加1;num_out1是将层输出通道量按照并行计算通道量进行划分后的block数量,当向下取整结果不等于零时,num_out1数量加1;

    步骤3:地址区域划分,公式如下:

    addr_n=num_in1或者num_in1 1

    其中,addr_m表示每一个存储小区对应的存储空间大小,addr_n表示总共存储小区的个数,width_i表示当前层的输入特征图宽度,kernel_size表示当前层计算的卷积核尺寸;

    步骤4:动态计算数据分发基地址

    按照存储组织调度分割方式获取bram中同张特征图上相应像素点间的地址间隔差,适应于pe计算需求,预先得到所有卷积窗口位置上起始数据的地址,当获取当前层的分发顺序以及kernel_size、padding和stride信息,通过addr_sub得到像素点对应的起始地址位置。

    本发明的有益效果如下:

    1、通过可配置方式对存储结构进行适应性优化。

    2、将计算序列化索引需求进行线性分级映射,实现高维度数据访问优化。

    3、按照深度网络功能点层次顺序调度。

    4、通过层次化存储结构缓解数据存储资源压力。

    附图说明

    图1为本发明片外ddr存储组织分级划分方式。

    图2本发明块内数据交织和地址交织现象分析。

    图3本发明存储组织结构模块划分。

    图4本发明数据拆分示意图。

    图5本发明数据拼接示意图。

    图6本发明地址计算示意图。

    图7本发明可配置管理方案通路分析。

    图8本发明实施例基于cnn的图像编解码网络结构图。

    具体实施方式

    下面结合附图和实施例对本发明进一步说明。

    一种神经网络存储组织结构,该系统主要包括片上的四级流水存储组织模块数据拆分、数据拼接、地址计算以及数据分发,以及片外ddr的存储空间管理。从系统存储方式上可以分为片外存储和片内存储。片外存储主要指的是ddr存储,负责整个系统的中间层数据存储和权重的暂存。核心主要面对的是片上数据的存储调度管理,由于片上存储数据的处理通常需要适应pe加速计算模块的复杂计算特征,尤其针对输入数据的处理,可能需要多级中间缓存,来进行数据的降维以及地址索引计算等操作,将输入重新组织成pe需要的数据流组织方式。因此,片上四级的流水存储组织方式主要在进行加速计算过程中对数据和权重以及输出的各级存储和数据处理,能够针对各模块设计和计算需求进行数据的合理分块存储,中间处理和分发传输。

    本发明针对需要部署的网络结构比较深或者网络参数量比较大的情况进行层次化的存储系统结构设计,经过分析数据流和控制流通路与功能实现的关系,设计多级的存储组织管理模式和数据重组方案,有效缓解片上数据交互带来的带宽压力。将单重串行的流水线存储结构进行多级的并行分支处理,一方面缓解串并转换带来的节拍限制,另一方面,不同网络的功能需求甚至同网络不同层的并行计算方式也会依据原始网络配置和片上资源分配情况而不同,通过多级存储控制和中间数据缓存,能够处理不同并行计算方式,不同功能需求下的多路控制选择。从而形成多级的可配置的数据存储组织系统架构。

    一种神经网络存储组织结构,包括对以下四部分的处理:

    第一部分:片外ddr数据存储,如图1所示;

    改变原始的存储模式,将ddr存储部分由三部分变换成五部分,分别为:

    1、输入数据存储空间:存储该层神经网络计算所需要的全部层输入数据,其存储量为:chin*w*h;

    2、权重存储空间:存储该层神经网络计算所需要的全部权重数据,其存储量为:chin*chout*k*k;

    3、输出数据存储空间:存储该层神经网络计算的输出特征图信息,其存储量为:chout*r*c;

    4、输入特征图对应的编码信息mask;

    5、输出特征图对应的编码信息;

    其中,chin表示输入通道量,chout表示输出通道量,w和h分别表示该层输入特征图的宽和高,r和c分别表示该层输出特征图的宽和高;

    特殊情况下,针对去零操作处理,需要对输入输出信息流进行复用,则需要对应的空间存储与数据相对应的控制信息,即编码后的mask特征信息。此处在以上三部分的基础上增加两部分的控制信息,即输入特征图对应的编码信息mask,以及输出特征图对应的编码信息。

    实质上,针对层输入数据和权重数据的存储,需要按照当前设计的系统计算粒度进行更深层次更细粒度的划分。按照网络层—输入块/权重块间—输入块/权重块内分级方式进行划分,逐级进行计算数据的加载。

    第二部分:数据流特征不匹配问题处理;

    在一般的网络结构中,当前层通过计算单元计算后的输出数据流特征和下一层的输入数据流特征是相同的,因此输入数据不需要进行特殊的操作,只需要按照pe输入需求进行地址重组,数据重排的操作。但是,某些复杂的网络中比如超分,编解码等网络结构中,当前层后处理的某些操作可能会带来下一层输入数据的维度变换问题,比如将一维的输出变成二维或者多维的输出,这种操作便会引起层与层之间,针对pe计算的输入数据和层输出数据的数据流特征不匹配的问题。

    此时在神经网络当前层的下一层中取出当前层数据后进行降维操作,将数据的一维特征恢复;针对升维后的数据,利用片内外数据传输的突发时间差进行数据降维,将传输的数据流进行跳地址bram存储,利用地址访问的随机性进行数据块的跳变存储;在数据传输过程中,当片外开始传输高维的数据时进行地址的跳变控制,在存储过程中将数据的升维特征分解;

    第三部分:数据交织和地址交织问题处理,如图3所示;

    当采用卷积窗口计算的方式进行数据加载时候,若数据流无特征比较复杂的时候,在数据存储和分发时数据交织和地址交织的现象就会异常明显。对于这种情况需要从两方面进行处理,包括模块内部的数据交织和地址交织问题以及模块间的数据交织问题进行处理。模块间的数据交织现象主要是为了适应于计算单元的通道并行度,将层输入特征图和层权重信息按照并行计算通道量进行分block处理,按照并行计算方式进行逐次的复用重载,并且重载次数是可以进行量化的。这种交织现象受限于片上存储空间,因此在固定的嵌入式平台下,暂时没有办法进行优化。以下主要针对模块内的数据交织现象进行分析。

    当数据经过特殊操作从存储单元取出进行分发时,需要考虑到编码信息和有效的神经元数据信息,那么按照卷积窗口进行分发时,数据和地址位置可能会出现交织情况。针对单一的片外输入数据流,经过片上缓存,当数据从存储单元取出进行分发时,这种交织现象会导致存储的数据组织方式是比较复杂的。针对这种模块内部的数据交织问题,进行数据二次中间缓存处理交织,当数据经过第一级处理存入bram中后,进行二次跳地址取数,按照固定的分发顺序进行数据取数,并针对地址单元数据进行解析,获取相应特征像素值信息;

    第四部分:存储组织调度分割方案,如图3所示;

    为缓解上述所说的数据维度变化导致数据流不匹配以及数据交织和地址交织问题导致的设计部署的复杂和困难,考虑针对输入数据的存储考虑进行分级存储,在每一级存储过程中处理部分设计要求,将设计困难点逐级分解,分散处理,而不单纯全部设计在一级上。这样便将设计分解开,并且在分级过程中将某些交织问题优化掉。根据目前针对深度神经计算部署的计算需求和某些超分等复杂网络的功能需求和片上资源的分布情况,对输入数据进行分级存储,将针对输入数据的片上存储组织分为四级:

    第一级:数据拆分,按输入块方式适应pe并行度的数据流组织,如图4所示;

    由于axi传输和fsm对输入数据的读取是按照地址顺序索引读取,因此读出来的数据没有计算上的特征,不会按照计算单元或者计算子单元的方式进行读取,和ddr中存储的数据是一致的。针对输入数据的处理第一级将读取出来的数据按照数据组织关系进行拆分重排,一一对应的存储到相应的缓存bram中;

    第二级:数据拼接,按照一次并行计算完整的计算量进行数据的存储,如图5所示;

    该部分主要是针对特殊情况进行分析,之前说过axi突发传输只能按照地址线性索引进行传输,针对输出数据处理单元所做的其他特殊操作不会考虑在地址索引范围内。因此传输的数据可能是一次并行计算输入块的部分输入子块,按照各部分输入子块进行数据的拼接,分子块存储到第二级缓存bram中;

    第三级:地址计算,按最小计算单元计算方式获取实际数据和控制信息,如图6所示;

    按照pe最小卷积计算方式,根据前一级存储时候记录的地址信息以及bram中数据存储的标志位信息,按照卷积窗口取出相应数据并获取相应数据对应卷积窗口的位置信息;再按照位置组织形式重新存储数据值,并存储与之对应的卷积窗口位置值;根据bram中地址能存储的有效神经元数据个数获取对应的地址间隔量;计算公式如下:

    其中addr_sub表示对应一个bram中存储的相同特征图上相邻像素点之间的存储地址间隔,neuron_num表示bram中一个地址单元上所能存储的神经元个数,n_bwidth表示神经元数据的位宽,bram_bwidth表示缓存bram的存储位宽,line表示计算单元中每个计算子单元的计算现场数;

    第四级:数据分发,按照各计算子单元数据需求,发送有效信息;

    第四级负责最后的数据分发;接收到数据分发信号之后,针对pe计算所需要的输入控制相关信息进行提取、配置和发送,包括具体的有效像素值、卷积窗口位置信息和相应输入通道值;

    如图7所示,一种神经网络存储组织结构的可配置管理方法,包括以下步骤:

    步骤1:所谓的可配置指的是,需要考虑到网络/网络层计算任务的多变性和复杂性,从而引起计算单元对输入数据的不同需求,在实际的输入数据存储控制中,应该对硬件设计进行细粒度的动态可重构的电路配置,实现运行过程中针对不同的任务可以选择不同的数据流和控制流通路。因此,为了适应不同网络甚至于不同层的不同计算需求和并行度的差异,针对某些核心的控制信息给出参数化配置,在设计顶层模块针对这些有用的可配置输入参数进行组合分类,根据分类情况进入不同的模块中。根据目前深度神经网络中功能需求以及嵌入式平台加速器的部署结构,将所有需要进行配置的参数分为以下几类:

    第一类:计算单元并行计算参数:并行度,并行计算方式;

    第二类:维度变化功能算子参数:depthtospace,spacetodepth,上采样,降采样;

    第三类:一般网络功能参数:层输入通道数,层输出通道数,kernel_size,padding;

    第四类:数据流特征参数:去零;

    其中针对参数的可配置设定主要是针对前两类进行灵活的电路结构选择,因为这两类参数会直接影响到片上多级缓存的地址设置和缓存数量。

    步骤2:片上各级缓存bram量动态设置;

    片上各级缓存bram的使用量依据并行度和层输入/输出通道数;当网络的输入通道数固定时且加速器单元的并行度不同时,相应的预处理输入数据中间缓存bram个数是随并行度变化进行量化,表示如下:

    其中,chin表示当前层输入通道数,chout表示当前层输出通道数,n表示计算单元的并行度;num_in1是将输入通道量按并行计算通道量进行划分后的block数量,当向下取整结果不等于零时,num_in1的数量加1;num_out1是将层输出通道量按照并行计算通道量进行划分后的block数量,当向下取整结果不等于零时,num_out1数量加1;

    步骤3:地址空间是否进行区域划分主要取决于并行计算方式,当采用不同的并行计算方式时,针对片上缓存空间的利用度和数据存储方式是不同的。例如当采用卷积核计算优先方式时,优先计算n*line个输出通道的完整一行的输出结果,针对这种情况为将存储区间的利用度最大化,需要针对第一级bram的缓存进行存储空间的区域划分,将bram划分成若干个存储小区,每个区域分别存储不同输入block块的部分数据,从而避免存储空间的浪费以及数据被覆盖。

    地址区域划分,公式如下:

    addr_n=num_in1或者num_in1 1

    其中,addr_m表示每一个存储小区对应的存储空间大小,addr_n表示总共存储小区的个数,width_i表示当前层的输入特征图宽度,kernel_size表示当前层计算的卷积核尺寸;

    步骤4:动态计算数据分发基地址

    按照存储组织调度分割方式获取bram中同张特征图上相应像素点间的地址间隔差,适应于pe计算需求,预先得到所有卷积窗口位置上起始数据的地址:

    addr_w1=0

    addr_w2=addr_sub

    ……

    addr_w(kernel_size)=addr_sub*(kernel_size-1)

    addr_w(kernel_size 1)=addr_sub*width_i

    ……

    addr_w(kernel_size*2)=addr_sub*(width_i kernel_size-1)

    ……

    addr_w(kernel_size*kernel_size)

    =addr_sub*(width_i*(kernel_size-1) kernel_size-1)

    当获取当前层的分发顺序以及kernel_size、padding和stride信息,通过addr_sub得到像素点对应的起始地址位置。上述公式是当padding==0时的按卷积窗口进行分发时的各窗口基地址值。当padding!=0时,可以依照上述公式含义推出相应的地址信息。

    具体实施例:

    如图8所示,采用本发明的神经网络的存储组织结构及其可配置管理方法的基于cnn的编解码网络结构模型具有以下特点:

    输入图像为lr,尺寸为w*h*3;

    首先进行多层spacetodepth bn relu conv split的编码操作,最后编码后的图像尺寸为h/32*w/32*256;

    编码网络的逐层输出均会送入量化器中进行量化送入解码器端;

    进行多层concat conv bn relu depthtospace操作,将编码后的网络在解码端进行解码输出,最后解码输出的尺寸为w*h*3;与原始输入图像一致;

    中间的编解码网络层均可以进行去零操作,将输出特征图的数据流特征打乱;

    其中,spacetodepth,depthtospace等操作会对输出数据进行升维操作;

    基于cnn的编解码网络结构模型细节:

    若给定加速器计算单元并行计算方式为卷积核并行计算优先。

    并行度为2*2,计算现场line数为8,则说明片上缓存bram数量为2个,每一个bram内部地址区域划分为4部分;

    并行度为4*4,计算现场line数为8,则说明片上缓存bram数量为4个,每一个bram内部地址区域划分为2部分;

    并行度为8*8,计算现场line数为8,则说明片上缓存bram数量为8个,每一个bram内部地址区域不进行划分;

    并行度为16*16,计算现场line数为8,则说明片上缓存bram数量为16个,每一个bram内部地址区域不进行划分;

    若给定加速器计算单元并行计算方式为输入通道并行计算优先或者输出通道并行计算优先,则bram数量不变,只是内部地址区域不进行空间划分,输入数据反复io。若以并行度为2,计算现场数为8为例。步骤如下:

    (1)首先按照计算子单元的数量对输入数据进行拆分,按照通道方向进行分子块,每一个子块的通道数为8,则一次并行计算传入的16通道分为2个子块,分别存入2个bram中;

    (2)当该层数据进入spacetodepth或者depthtospace等维度空间变换操作后,在外部ddr中存储的数据是高维的,此时针对片上的数据缓存需要进行数据拼接操作,进行维度变化后输出数据块是以32通道为组存入ddr中,因此需要将bram地址空间再进行划分,各基地址分别为addr1,addr2,……,addrn,分别存储16通道块的部分数据,第一块并行计算的16输入数据块,对应存到以addr1为基地址的空间中,下16通道的数据存储在下一个以addr2为基地址的地址空间中,换行突发后的数据再重新进入addr1,addr2,……,addrn的地址区间内,拼接到对应子块的地址空间中;

    (3)根据前一层进行数据拆分、数据拼接过程中计算的特征图中各像素基地址信息,顺序的从bram中取出数据,并对取出来的数据进行分析获取相应的窗口控制信息;

    (4)将有效神经元数据,与与之相关的控制信息按照时序关系分发给pe计算单元的各个计算子单元。

    本发明结构及方法主要面向一般神经网络和复杂神经网络在嵌入式平台下部署的功能需求以及针对不同的加速器并行加速结构需求,进行片上数据的存储分发设计,主要包括数据的维度变换,地址的索引计算以及存储的可配置管理。该方法所涉及的深度神经网络不仅包括一般网络中的功能算子,也包括某些其他特殊网络中的特殊功能算子,包括spacetodepth,depthtospce,上采样,降采样等维度空间变换操作,以及去零编解码等数据乱序操作。对于这些操作,该方法都可调整适应。

    本发明结构及方法能够解决在计算过程中出现维度变换导致加速器计算输入输出的数据流特征不匹配问题。研究深度神经网络所具有的输入数据存储特征,分析针对当前层的某些操作可能会带来的下一层输入数据的维度变换的问题。通过模块间的层次化存储和模块内的顺序存储模式对数据进行降维,将输出数据流的高维特征在存储的过程中转换,从而适应pe计算的顶层输入数据流特征;

    本发明结构及方法能够处理在神经计算中地址线性索引和数据非线性索引的不匹配往往会引起地址交织和数据交织的问题。针对单一的片外输入数据流,经过片上缓存,当进行取数分发时,这种数据交织现象会导致存储的数据组织方式比较复杂。利用这种多级的存储管理方式,将复杂的交织问题转变为单一的顺序访问形式,对当前pe的计算模式进行数据的存储地址预算,并对取出来的数据进行二次重组重排,从而适应pe计算的内部卷积运算的数据流特征;

    本发明结构及方法能够适应计算单元的不同并行计算方式下的输入输出数据流通路变化和控制流通路变化引起的计算特征和控制特征。采用不同的并行计算方式,其pe计算的输入数据/权重数据流特征不同,输入块/权重块加载顺序不同,输出块数据的组织形式不同。针对不同并行计算方式的相通性和差异性,在数据组织上按照流水线的设计特征,将输入数据的调度按照流水线方式逐步进行调度。保证在不同并行计算方式的数据需求下,能够实现在数据的存储,加载,计算,分发顺序上的一致性或相通性。

    本发明结构及方法能够针对网络/网络层计算任务的多变性和复杂性,针对不同功能需求和计算方式进行可配置的设计电路调度。在实际的输入数据存储控制中,应该对硬件设计进行细粒度的动态可重构的电路配置,实现运行过程中针对不同的任务可以选择不同的数据流和控制流通路,进行不同电路设计的状态切换。因此针对某些核心的控制信息给出参数化配置,在设计顶层模块针对这些有用的可配置输入参数进行组合分类。依据目前神经计算的通用情况,核心的参数配置应包括:并行度,输入通道量,并行计算方式,kernel_size,padding等信息,针对某些特殊网络还需要一些固定配置:depthtospace,spacetodepth,上采样,降采样,去零,以及编解码等。

    本发明结构及方法能够兼容大部分的片上神经网络部署的数据存储调度需求,同时针对不同的需求以及加速计算方式进行灵活的可配置处理,实现多种存储调度策略。这种有规律的顺序的数据组织结构能够很好的将各种功能算子的数据需求分解开,逐级进行调度管理。该组织方式能够将存储压力有效缓解,对片上资源受限的困扰进行缓冲。


    技术特征:

    1.一种神经网络存储组织结构,其特征在于,包括对以下四部分的处理:

    第一部分:片外ddr数据存储;

    将ddr存储部分由三部分变换成五部分,分别为:

    1、输入数据存储空间:存储该层神经网络计算所需要的全部层输入数据,其存储量为:chin*w*h;

    2、权重存储空间:存储该层神经网络计算所需要的全部权重数据,其存储量为:chin*chout*k*k;

    3、输出数据存储空间:存储该层神经网络计算的输出特征图信息,其存储量为:chout*r*c;

    4、输入特征图对应的编码信息mask;

    5、输出特征图对应的编码信息;

    其中,chin表示输入通道量,chout表示输出通道量,w和h分别表示该层输入特征图的宽和高,r和c分别表示该层输出特征图的宽和高;

    第二部分:数据流特征不匹配问题处理;

    在神经网络当前层的下一层中取出当前层数据后进行降维操作,将数据的一维特征恢复;针对升维后的数据,利用片内外数据传输的突发时间差进行数据降维,将传输的数据流进行跳地址bram存储,利用地址访问的随机性进行数据块的跳变存储;在数据传输过程中,当片外开始传输高维的数据时进行地址的跳变控制,在存储过程中将数据的升维特征分解;

    第三部分:数据交织和地址交织问题处理;

    当数据从存储单元取出进行分发时,进行数据二次中间缓存处理交织,当数据经过第一级处理存入bram中后,进行二次跳地址取数,按照固定的分发顺序进行数据取数,并针对地址单元数据进行解析,获取相应特征像素值信息;

    第四部分:存储组织调度分割方案;

    对输入数据进行分级存储,将针对输入数据的片上存储组织分为四级:

    第一级:数据拆分,按输入块方式适应pe并行度的数据流组织;

    针对输入数据的处理第一级将读取出来的数据按照数据组织关系进行拆分重排,一一对应的存储到相应的缓存bram中;

    第二级:数据拼接,按照一次并行计算完整的计算量进行数据的存储;

    一次并行计算输入块的部分输入子块,按照各部分输入子块进行数据的拼接,分子块存储到第二级缓存bram中;

    第三级:地址计算,按最小计算单元计算方式获取实际数据和控制信息;

    按照pe最小卷积计算方式,根据前一级存储时候记录的地址信息以及bram中数据存储的标志位信息,按照卷积窗口取出相应数据并获取相应数据对应卷积窗口的位置信息;再按照位置组织形式重新存储数据值,并存储与之对应的卷积窗口位置值;根据bram中地址能存储的有效神经元数据个数获取对应的地址间隔量;计算公式如下:

    其中addr_sub表示对应一个bram中存储的相同特征图上相邻像素点之间的存储地址间隔,neuron_num表示bram中一个地址单元上所能存储的神经元个数,n_bwidth表示神经元数据的位宽,bram_bwidth表示缓存bram的存储位宽,line表示计算单元中每个计算子单元的计算现场数;

    第四级:数据分发,按照各计算子单元数据需求,发送有效信息;

    第四级负责最后的数据分发;接收到数据分发信号之后,针对pe计算所需要的输入控制相关信息进行提取、配置和发送,包括具体的有效像素值、卷积窗口位置信息和相应输入通道值。

    2.一种神经网络存储组织结构的可配置管理方法,其特征在于,包括以下步骤:

    步骤1:将所有需要进行配置的参数分为以下几类:

    第一类:计算单元并行计算参数:并行度,并行计算方式;

    第二类:维度变化功能算子参数:depthtospace,spacetodepth,上采样,降采样;

    第三类:一般网络功能参数:层输入通道数,层输出通道数,kernel_size,padding;

    第四类:数据流特征参数:去零;

    步骤2:片上各级缓存bram量动态设置;

    片上各级缓存bram的使用量依据并行度和层输入/输出通道数;当网络的输入通道数固定时且加速器单元的并行度不同时,相应的预处理输入数据中间缓存bram个数是随并行度变化进行量化,表示如下:

    其中,chin表示当前层输入通道数,chout表示当前层输出通道数,n表示计算单元的并行度;num_in1是将输入通道量按并行计算通道量进行划分后的block数量,当向下取整结果不等于零时,num_in1的数量加1;num_out1是将层输出通道量按照并行计算通道量进行划分后的block数量,当向下取整结果不等于零时,num_out1数量加1;

    步骤3:地址区域划分,公式如下:

    addr_n=num_in1或者num_in1 1

    其中,addr_m表示每一个存储小区对应的存储空间大小,addr_n表示总共存储小区的个数,width_i表示当前层的输入特征图宽度,kernel_size表示当前层计算的卷积核尺寸;

    步骤4:动态计算数据分发基地址

    按照存储组织调度分割方式获取bram中同张特征图上相应像素点间的地址间隔差,适应于pe计算需求,预先得到所有卷积窗口位置上起始数据的地址,当获取当前层的分发顺序以及kernel_size、padding和stride信息,通过addr_sub得到像素点对应的起始地址位置。

    技术总结
    本发明公开了一种神经网络存储组织结构及其可配置管理方法,针对深度神经网络的片内外多级存储方式和复杂的数据流特征进行研究设计,即适应嵌入式领域中的神经计算网络结构进行片上不同加速计算方式和不同数据需求的存储模型设计。该方法针对片上的存储调度主要分为四个环节:数据拆分,数据拼接,地址计算,数据分发。通过这种流水线式的存储组织调度能够对嵌入式环境下神经计算涉及到的片上数据存储进行动态的可配置的管理和部署。一方面,能够缓解卷积计算后数据维度变换所带来的地址索引复杂问题和数据交织的问题,另一方面能够缓解片上存储资源的压力。

    技术研发人员:张萌;张盛兵;王党辉;姚腾腾;李楚曦;丁汇;朱挺;王淼
    受保护的技术使用者:西北工业大学
    技术研发日:2020.12.22
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-18637.html

    最新回复(0)