CN110674927A - 一种用于脉动阵列结构的数据重组方法 - Google Patents

一种用于脉动阵列结构的数据重组方法 Download PDF

Info

Publication number
CN110674927A
CN110674927A CN201910857692.4A CN201910857692A CN110674927A CN 110674927 A CN110674927 A CN 110674927A CN 201910857692 A CN201910857692 A CN 201910857692A CN 110674927 A CN110674927 A CN 110674927A
Authority
CN
China
Prior art keywords
data
convolution
row
input
characteristic diagram
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
CN201910857692.4A
Other languages
English (en)
Inventor
胡塘
徐志伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhijiang Laboratory
Original Assignee
Zhijiang Laboratory
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhijiang Laboratory filed Critical Zhijiang Laboratory
Priority to CN201910857692.4A priority Critical patent/CN110674927A/zh
Publication of CN110674927A publication Critical patent/CN110674927A/zh
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Neurology (AREA)
  • Complex Calculations (AREA)

Abstract

本发明公开一种用于脉动阵列结构的数据重组方法,该方法首先从片外DDR存储体遵循原始数据的NCHW格式将输入特征图读入到缓冲,然后以卷积核二维平面尺寸为基本单元读取输入特征图,并沿着步长S移动方向给脉动阵列的各行输入端口分别提供卷积所需输入特征图数据,每个卷积核分别给脉动阵列的对应各列输入端口提供权重系数,输入特征图数据和相应的权重系数在脉动阵列的各个PE运算单元中完成卷积运算,然后依次输出卷积计算结果。该方法节省了数据重组过程中的软硬件开销,简化了数据调度重组设计的复杂度,优化了数据重组电路时序,同时减少片外DRAM访问次数从而降低了脉动阵列整体功耗。

Description

一种用于脉动阵列结构的数据重组方法
技术领域
本发明涉及芯片设计领域,具体涉及一种用于脉动阵列结构的数据重组方法。
背景技术
基于CNN的深度学习技术已成为当前人工智能一个重要领域,在各类CNN加速器中,PE阵列计算单元居于核心位置,其阵列规模、数据流动方式、多精度的支持、能效比以及峰值算力等用以评价整个加速器的性能指标。这其中,基于脉动阵列结构实现的CNN加速器,因为其输入特征图、权重系数以及输出结果能在整个阵列中实现简单且高效率的脉动传递、最高工作时钟Fmax明显改善,因而整体性能得到显著提升。目前商用化的TPU芯片性能上大大超越了各类CPU、GPU和其它各类加速芯片,使之成为CNN领域的研究热点。脉动阵列结构的优势在于参与内部运算的操作数或中间结果能以高速并行流水方式进行,但是要发挥该优势离不开脉动阵列外部数据重组单元的正确高效运行,否则整个脉动阵列将存在等待或空闲状态,从而导致真实有效算力大大低于标称的峰值算力。但目前并没有现有技术公开针对TPU芯片脉动阵列外部的数据重组单元如何与脉动阵列进行数据交互,如何按一定规律有效组织输入特征图、权重系数等。
申请号为CN201811641086中国专利申请公开了基于脉动阵列结构的可重构实现,对于调度器和数据重组描述很少涉及,从公开资料分析,其脉动阵列的行和列方向输入均采用业界常用的NHWC格式,由于应用层的原始数据一般是以NCHW方式提供,即一个通道的所有像素连续存放完毕,再存放下一通道。因此这里需要有一个格式转换,如果是硬件实现则占用大量硬件开销,如果软件实现则大量占据CPU资源。另外,该方法没能发挥卷积窗口“感受野”在步长S移动下的局部数据复用,例如卷积核二维平面尺寸3x3,5x5,7x7,11x11等,在这个二维区域内,连续存放的数据具有重复现象,没能利用该特性来减少片外DRAM的访问次数以实现提高吞吐效率以及降低功耗。
申请号为CN201810391781的中国专利公开了如何利用高级程序自动实现脉动阵列,利用双缓冲和SIMD来提升性能。但是在输入特征图、权重系数的输入接口以及卷积结果输出接口分别只有一个端口,这会严重影响脉动阵列与外部数据重组单元之间的传输带宽,导致脉动阵列很多时候处于等待数据输入或者结果输出的状态,从而成为影响脉动阵列整体性能的瓶颈。
因此,如何找到一种数据重组方法,设计出逻辑结构相对简单的数据重组电路,可以匹配阵列内部的最高工作时钟Fmax显得尤为重要。
发明内容
针对现有技术的不足,本发明提出一种用于脉动阵列结构的数据重组方法,其遵循原始数据的NCHW格式,以卷积核二维平面尺寸为基本单元读取输入特征图,并沿着步长S移动方向给脉动阵列的各行输入端口分别提供卷积所需输入特征图数据,每个卷积核分别给脉动阵列的对应各列输入端口提供权重系数,从而省去NCHW格式转为NHWC格式软硬件开销,减少片外DRAM访存次数。具体技术方案如下:
一种用于脉动阵列结构的数据重组方法,所述的脉动阵列的尺寸为n行×m列,所述的输入特征图有N个通道,所述的卷积核也有N个通道,其特征在于,该方法具体包括如下步骤:
S1:先从片外DDR存储体遵循原始数据的NCHW格式将输入特征图读入到缓冲;
S2:在水平方向,遵循原始数据的NCHW格式,以第0通道的卷积核二维平面尺寸为基本单元读取对应0通道的输入特征图数据,并沿着步长S移动方向逐行从左至右给脉动阵列的各行输入端口分别提供卷积所需输入特征图数据;以第1通道的卷积核二维平面尺寸为基本单元读取对应第1通道的输入特征图数据,并沿着步长S移动方向逐行从左至右给脉动阵列的各行输入端口分别提供卷积所需输入特征图数据;以此类推,直至以第N-1通道的卷积核二维平面尺寸为基本单元读取对应第N-1通道的输入特征图数据,并沿着步长S移动方向逐行从左至右给脉动阵列的各行输入端口分别提供卷积所需输入特征图数据;
并沿着行方向一直向右传递到最右侧;
S3:在垂直方向,遵循NCHW格式,将每个卷积核的第0~N-1通道的权重系数依次分别传输给脉动阵列的对应各列输入端口,并沿着列方向一直向下传递到最底部;
S4:所述的输入特征图和相应的权重系数在脉动阵列的各个PE运算单元中完成卷积运算,各行的PE运算单元按顺序得到部分和结果,即同一行的各个PE在同一时刻得到各自的部分和卷积结果,上一行的PE相比于紧邻的下一行PE提前1拍得到部分和卷积结果;
S5:m列的输出并行进行,对于各列,首先输出步长S移动0次的卷积计算结果,然后输出步长S移动1次的卷积计算结果,以此类推,直至输出步长S移动n-1次的卷积计算结果。
进一步地,通过公式(1)获取传送给S1的输入特征图的水平方向的数据在缓冲中的字节地址标号:
Figure BDA0002195945740000031
其中,initial_middle_offset_pixel表示本轮初始的卷积窗口的中心像素点在输入特征图缓冲中的字节地址标号,对于最初始启动阶段,该值等于0,下一轮的initial_middle_offset_pixel则是上一轮计算得到的offset_pixel,如此循环迭代;P(window_z,window_y,window_x)表示卷积窗口在输入特征图立方体中的实时位置,window_z表示宽度W方向的取值,window_y表示高度H方向的取值,window_x表示通道深度C方向的取值,Kx、Ky为卷积核的二维尺寸;公式(1)计算结果即字节地址标号offset_pixel表示连续的一段输入特征图数据在输入特征图缓冲的首地址,本轮计算得到的offset_pixel作为下一轮的initial_middle_offset_pixel,如此循环迭代。
进一步地,当步长S=1和步长S=2时,通过如下的电路处理使输送给脉动阵列的各行输入端口的数据来源于三处固定位置,以简化数据通路实现复杂度:
采用两组buffer分别移位,其中一组固定右移即buffer0,另一组固定左移即buffer1,且两组buffer移位采用并行流水线结构,所需分别左移和右移的值,由所述的公式(1)得到的字节地址标号再进行求模运算来决定,最终存放到每个FIFO队列中每拍的输入特征图数据的取值根据公式(1)得到的字节地址标号并结合当前的输入特征图尺寸,从以下三个来源选取:
(1)右移处理后的buffer0;
(2)左移处理后的buffer1;
(3)根据Padding规则补零。
本发明的有益效果如下:
本发明的数据重组方法通过分析卷积核的卷积窗口在输入特征图的二维平面上随着步长S的移动存在大量数据重复,且各数据块间存在连续关系并与最原始的输入特征图的NCHW存储格式保持一致的特点,将经过步长S移动处理的输入特征图以NCHW排序方式传输给脉动阵列的对应各行的输入端口,对数据重组***中的信号高扇出、海量的矢量信号连线、复杂的控制逻辑等难题以并行流水的右移电路和左移电路进行替代解决。灵活支持目前主流的各种卷积核尺寸、输入特征图大小、不同步长S和Padding规则组合的各类CNN算法,达到节省了目前常见的实现方法中需要NCHW转为NHWC格式的软硬件开销,简化了数据调度重组设计的复杂度,优化了数据重组电路时序,同时实现了减少片外DRAM访问次数从而降低了脉动阵列整体功耗。
附图说明
图1为用于脉动阵列结构的数据重组***的架构图;
图2为脉动阵列三类接口通道数据流图;
图3为卷积窗口步长S移动0次至移动63次的数据分析图;
图4为输入特征图缓冲数据存放顺序示意图;
图5为输入特征图在二维平面上经步长S移动和Padding处理示意图;
图6为64个FIFO队列数据的输入源示意图;
图7为固定右移buffer0的并行流水移位处理图。
具体实施方式
下面根据附图和优选实施例详细描述本发明,本发明的目的和效果将变得更加明白,应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明公开一种用于脉动阵列结构的数据重组方法及***,充分挖掘输入特征图和卷积窗口在二维平面上随着步长S移动呈现出的大量数据重复的特性,利用并行流水的右移电路和左移电路优化数据通路设计,达到简化数据调度重组的复杂度,提升数据重组电路的Fmax、实现了减少片外DRAM访问次数、降低了脉动阵列的整体功耗。
首先给出技术术语解释:
(1)CNN:Convolutional Neural Network卷积神经网络
(2)TPU:Tensor Processing Unit张量处理器
(3)Stride:步长(卷积核在输入特征图上的移动步进),简称步长S
(4)PE:Process Element运算处理单元
(5)Systolic Array:脉动阵列(CNN中PE阵列单元的一种组织形式)
(6)Fmax:最高工作时钟频率,优化电路时序可以助于提升Fmax
(7)NCHW,NHWC:两种常见的张量表达格式,其中,
NCHW的数据存放方式为,首先是第0通道的第0行0列的元素,然后是第0行1列的元素,沿着水平方向直到最后一列,接着是第1行0列的元素,依次类推,直至本通道最右下角的元素,第0通道存放完毕后,然后是第1通道,处理方法类似,直至C-1通道;
NHWC的数据存放方式为,首先是第0通道的第0行0列的元素,然后是第1通道的第0行0列元素,直至C-1通道的第0行0列元素,再是沿着水平方向的第0通道的第0行1列的元素,依次类推。
(8)根据芯片设计领域普遍规则,本发明中的描述都是从序号0开始,而非从序号1开始,例如第0行,第0列,地址也是从0x0000开始编号;
如图1所示,本发明以64x64的脉动阵列为例描述整个发明的***框架结构。在该***中,片外DDR存储体与片内的DDR控制器之间,通过高速的DDR接口例如DDR3-1600可以达到12.8GB/s的传输速率;输入特征图进入由输入特征图缓冲、输入特征图数据重组处理单元、64个数据重组后输入特征FIFO队列组成的数据重组子***中,然后再按照一定的规律输送给64×64的脉动阵列PE运算单元进行运算,并按照一定的规律输出卷积运算结果。
在CNN卷积神经网络中,参与计算的输入特征图以及卷积核都是以三维的立方体呈现,但是在实际的卷积计算过程中,三维的立方体会分解成通道方向的多个二维平面来实现,进一步地在硬件电路上实现时,例如数据存储和传递时还需转化成一维形式。
作为密集运算的模块64x64脉动阵列PE运算单元,相邻之间的PE采用并行流水方式,数据通路逻辑和控制逻辑电路简单,各信号的扇出数目小,所以内部最高工作时钟Fmax可以显著提升,从而提高整个脉动阵列的峰值计算能力。
但是要发挥出脉动阵列的峰值计算能力需要外部接口正确且高速运行的支撑,脉动阵列接口主要处理三类数据通路,包括水平方向的输入、垂直方向的输入和垂直方向的输出。
其中,垂直方向的输入具体为:从上到下的64个卷积核的权重系数分别对应各自的列,按照一定规律逐拍传递系数,每个卷积层运行期间卷积核相对固定,且卷积核的二维平面尺寸相对较小,例如常见的3x3、5x5、7x7、11x11,但其权重系数格式的调度排序与水平方向的输入特征图的数据重组密切相关。
垂直方向的输出:经过脉动阵列PE运算单元处理的部分和结果,按一定规律从脉动阵列的顶部输出,每一列分别对应各自卷积核,其输出的规律也与水平方向的输入特征图的数据重组密切相关。
水平方向的输入:每层的输入特征图经DDR控制器从片外DRAM读取后,先送到输入特征图缓冲,这是便于提升DDR读数据的效率,同时适时交出控制权给其余端口对DDR控制器的占用,为进一步提升整体吞吐率,该缓冲器设计成乒乓结构的双缓冲;进入到输入特征图缓冲的数据经过输入特征图数据重组单元进行重新编排组合,根据步长S从移动0次到移动63次分别进行处理,然后存放到64个相应的输入特征FIFO队列,然后逐拍分别输送给脉动阵列对应的每一行。
因此,本发明提出一种用于脉动阵列结构的数据重组方法,通过合理设计水平方向的输入特征图的数据重组,从而提高整个脉动阵列的峰值计算能力。该方法中,所述的脉动阵列为n行×m列,所述的输入特征图有N个通道,所述的卷积核也有N个通道,该方法具体包括如下步骤:
S1:先从片外DDR存储体遵循原始数据的NCHW格式将输入特征图读入到缓冲;
(1)CNN卷积计算输入数据规则分析
在脉动阵列的水平方向,在卷积核的作用下,随着步长S的推进,卷积核相应通道的二维平面与输入特征图二维平面上的对应区域也就是“感受野”分别作卷积计算,输入特征图在卷积窗口的作用下随着步长S的移动在二维平面上数据规律如图3所示。步长S移动0次时,图3中最左上角的虚线框中的9个数据参与卷积计算,步长S移动1次时,左上角是“B”字母开始的虚线框中的9个数据参与计算,依次类推,直至步长S移动63次时,左上角是“P"”字母开始的虚线框中9个数据参与计算。
从图3可以发现,相邻步长S之间存在大量数据重复,而且其在NCHW格式下的存放是连续的。以图3为例,最左上角的连续两个虚线框中,字母“B,C,B',C',B",C"”是重复的且64个虚线框是完全连续的,利用该规律可以从DDR3存储器中一次性取出包含从第0行0列的首字母“A”沿着水平方向直到第4行字母“r'”的连续数据,提高片外访存的效率,减少片外DDR读取次数,适时把DDR访存控制权释放给其它急需访问的端口,利于提升***整体性能。
(2)输入特征图缓冲的设计
CNN的每一层输入特征图由于数据量大,一般存放在外部的DDR主存设备中,因此,启动每层的卷积计算时,需要从外部的DDR存储读取到片内的缓冲,以加快运行,为了进一步提升整体吞吐率,输入特征图缓冲被设计成乒乓结构的双缓冲形式,当脉动阵列计算运行在缓冲A时,下一批的输入特征图可以并行地提前将数据从外部DDR存储搬运到缓冲B中,当缓冲A中的数据计算完毕后,再切换到缓冲B中进行计算,同时缓冲A提前准备下一批的输入特征图,如此循环往复。本发明实施例以当前主流的YOLOv3@416x416为例,缓冲器的SRAM规格为宽度1024-bit,深度为5408,共计676KB,共两块。图4描述了输入特征图某通道二维平面的元素在缓冲A或B中的存放顺序。
(3)输入特征图数据重组处理单元及64个FIFO队列
数据重组处理单元的核心任务,是将输入特征图缓冲A或B的数据排列成脉动阵列计算所需要的通用矩阵乘的顺序,并把重新排列后得到的数据存储到相应的64个FIFO队列中,然后根据时钟节拍和控制信号的顺序分别输送给脉动阵列水平方向的各输入端口,最后在脉动阵列中参与卷积计算。
在数据重组实现过程中,最大的困难是如何适应不同卷积核尺寸、输入特征图尺寸、卷积步长S、Padding规则以及当前运行时刻在输入特征图的位置等各种情况组合。仅仅以当前运行时刻在输入特征图的位置为例,便需要分析出当前位置是否处于整个二维平面的最左上角、最右上角、最左下角、最右下角,是否处于最顶的一行、最底部的一行、最左侧的一列或是最右侧的一列,还是处于中间的普通位置,因为不同的位置需要考虑Padding与否,以及是否要换行或是进入下一相邻的通道等。对图4进行步长S移动和Padding处理得到如图5。
图5的左侧与图4的左侧相比,最外一圈的“0”是Padding添加进来的,卷积核二维尺寸Kx*Ky=3*3,在该平面上随着步长S移动获取需要参与卷积计算所需数据。图5中右侧是对这些经处理后要送往下一级64队列FIFO的数据进行重组的结果,每行代表一块FIFO,总计64块FIFO。图中左侧的第0个卷积窗口(以原始数据“0”为中心)的Kx*Ky*C个数据存储到64个FIFO队列的第0块FIFO中,也就是图中右侧的第0行,它是以NCHW方式进行编排的,即按照卷积核Kx*Ky尺寸,首先是通道0的W方向即Kx方向的3个Pading0,然后是H方向即下一行“0,0,1”,以及“0,10,11”,再接下来是下一通道的数据提取;图中左侧的以1为中心的卷积窗口的Kx*Ky*C个数据存储到图中右侧的特征图矩阵缓冲的第1块FIFO中,也就是图右侧的第1行,以此类推。图中左侧的第0行的最后一个卷积窗口是以“9”为中心,该窗口的下一个卷积窗口需要换行,因此数据重组实现时,需要对当前运行时刻所处位置进行判断。由于逻辑关系相对复杂,本发明的数据重组方法提炼规律如下:对于每个卷积窗口的Kx*Ky*C个数据,按照坐标(Kx,Ky,C)来表示每个数据的位置,在各自对应的FIFO中存储顺序按照(0,0,0)->(1,0,0)->…->(Kx-1,0,0)->(0,1,0)->(1,1,0)->…->(Kx-1,1,0)->…->(0,Ky-1,0)->(1,Ky-1,0)->…->(Kx-1,Ky-1,0)->(0,0,1)->…->(0,0,C-1)…->(Kx-1,Ky-1,C-1),以此类推,先存储输入通道0的Kx*Ky数据,再存储输入通道1的Kx*Ky个数据,直到输入通道C-1的Kx*Ky个数据。
通过观察图5左右两侧的数据,可以得到以下规律:在卷积步长S为1的情况下,若不考虑卷积窗口在输入特征图上移动到该行的最后一个位置后需要换行且需要Padding特殊情况,图5右侧中列方向上的64块FIFO的同一列数据是保持连续的。例如图5右侧的第5列(从第0列算起)数据为从“1”,“2”,...,到“65”,其中“9”和“11”之间是“0”而非“10”,是因为处于输入特征图的边界特殊情况,因此需要Padding为0处理。除去这些特殊点,可以得到如下结论:该列的64个数据就是来自于前级子模块即输入特征图缓冲中连续存放的64个数据,其它列的情况也是同理。
因此,为了可以连续批量地从外部DDR存储中高效率读取,又可以简化整个数据重组电路的复杂度,通过公式(1)获取传送给S1的输入特征图的水平方向的数据在缓冲中的字节地址标号:
Figure BDA0002195945740000081
其中,initial_middle_offset_pixel表示本轮初始的卷积窗口的中心像素点在输入特征图缓冲中的字节地址标号,对于最初始启动阶段,该值等于0,下一轮的initial_middle_offset_pixel则是上一轮计算得到的offset_pixel,如此循环迭代;P(window_z,window_y,window_x)表示卷积窗口在输入特征图立方体中的实时位置,window_z表示宽度W方向的取值,window_y表示高度H方向的取值,window_x表示通道深度C方向的取值,Kx、Ky为卷积核的二维尺寸;计算结果即字节地址标号offset_pixel表示连续的一段输入特征图数据在输入特征图缓冲的首地址,本轮计算得到的offset_pixel作为下一轮的initial_middle_offset_pixel,如此循环迭代。
对于图5,公式(1)中offset_pixel表示图5右侧第0行FIFO的每个8-bit数据在输入特征图缓冲中的字节地址标号(见图4右侧,例如数据“128”在地址0x0001的最后一列,其字节地址标号是128),其代表了该列64个数据在输入特征图缓冲的首地址,initial_middle_offset_pixel表示本轮初始的卷积窗口的中心像素点在输入特征图缓冲中的字节地址标号,每移动64次步长S更新一次下一轮的initial_middle_offset_pixel。
本发明实施例支持步长S=1和步长S=2,对于步长S=1任何64个连续数据以及步长S=2的任何64个固定间隔为1的数据,一定满足分布在图4右侧的连续两行缓冲中,因此只要根据公式(1)计算得到的字节地址标号,获取当前首地址所在的行和紧邻的下一行即可获得本列所需的64个输入特征图数据。举例来说,假设当前根据公式(1)计算得到首个数据的字节地址标号是“130”,则只要读取输入特征图缓冲中的“130”所在行0x0001以及紧邻的下一行0x0002缓存数据即可满足要求。
64个连续数据或者是64个固定间隔为1的连续数据,虽然一定满足分布在图4右侧的连续两行缓冲中,但是其分布却是随机的,总共有128种可能。如果将这128种分支直接采用逻辑关系来实现,会造成脉动阵列***的数据通路异常复杂,信号扇出数目巨大、时序紧张、信号布局布线困难,从而成为整个脉动阵列的瓶颈。为此本发明决定采用两组buffer分别移位来实现,其中一组固定右移,另一组固定左移。以步长S=1为例进行描述如下,在图4右侧的连续两行buffer中,约定地址小的128Bytes这一行定义成buffer0,另一128Bytes的行定义成buffer1,例如当前得到首个数据字节地址标号在buffer0的第0字节,则64个连续字节数据刚好是buffer0的低64字节,不需移位处理,此时取buffer0的低64字节数据即可;假设当前首个数据字节地址标号在buffer0的第1字节,则整个buffer0右移1个字节,仍取右移处理后的buffer0低64字节数据;依次类推,当首个数据字节地址标号在buffer0的第65字节时,最后一个数据会落在另一行即buffer1的第0字节,此时buffer0仍整体右移65字节,而buffer1整体左移127字节,取经右移处理后buffer0的低64字节中的低63字节和经左移处理后buffer1的高64字节中的最高字节拼接成所需的64个连续数据;依次类推128种情况均可以如此方式实现:即无论如何,实现64个字节数据固定来自于buffer0的低64字节或buffer1的高64字节。此外,考虑特殊情况,需要用Padding 0的分支采用多路选择开关MUX到0。总共最多只有三个固定的源头,详见图6中灰色填充数据块,因而数据通路设计得到简化。其原理如图6和图7所示。
其中多路选择开关MUX的控制信号由公式(1)的字节地址标号可以计算得到。
图6中经右移处理的buffer0就是图7中的最终输出。需要引起注意的是,对于首个数据即第0行的FIFO,其输入只有两个源头,来自于右移处理的buffer0最低字节或者是Padding 0,而其它63种情况,还有一种可能的数据源头来自于经左移处理的buffer1。在图7的向右移位处理电路中,RS_64表示右移64字节或旁路;RS_32表示右移32字节或旁路,RS_16、RS_8、RS_4、RS_2、RS_1同理类似,各移位电路是并行流水工作的,经过7拍时钟后,可以达到每拍立即输出的效果,控制信号bypass[6:0]控制RS_64、RS_32、...、RS_1的工作方式,满足128种右移处理的情况,bypass[6:0]通过公式(1)得到的字节地址标号进行模128的运算即可得到。buffer1的左移处理与图7的buffer0右移类似,只是方向刚好相反。
综上所述,为了使输送给脉动阵列的各行输入端口的数据来源于固定位置,当步长S=1和步长S=2时,通过如下的电路处理来实现:
采用两组buffer分别移位,其中一组固定右移即buffer0,另一组固定左移即buffer1,且两组buffer移位采用并行流水线结构,并根据所述的公式(1)得到的字节地址标号进行求模运算,得到左移和右移的值,每个FIFO队列中的具体的数据的取值根据公式(1)得到的字节地址标号并结合当前的输入特征图尺寸,从以下三个来源选取:
(1)右移处理后的buffer0;
(2)左移处理后的buffer1;
(3)根据Padding规则补零。
本发明通过buffer0和buffer1的并行流水线移位处理可以达到如下优点:一是整个移位电路是并行流水工作的,在经过7个时钟节拍之后,每拍都能产生所需结果;二是移位电路逻辑关系简单,可以提高最高工作时钟Fmax,匹配脉动阵列运行时钟;三是与64个FIFO队列的数据通路连线简单,原先128种情况需要有128路的输入数据源而且均是矢量位宽形式(128*8*64=64K个信号线),内部信号连线海量级别会导致ASIC或FPGA实现时布局布线存在挑战,电路时序难以满足,采用本发明处理只有简单的3路固定数据输入源,且其中1路是固定0,减轻了布线压力,提高了电路时序,使数据重组电路的工作时钟可以匹配脉动阵列内部的最高工作时钟Fmax
经数据重组子***处理过的输入特征图数据在写入到各自的FIFO队列后,在脉动阵列读取信号的控制下,通过如下的方式输送给脉动阵列:
S2:在水平方向,遵循原始数据的NCHW格式,以第0通道的卷积核二维平面尺寸为基本单元读取对应0通道的输入特征图,并沿着步长S移动方向逐行从左至右给脉动阵列的各行输入端口分别提供卷积所需操作数;以第1通道的卷积核二维平面尺寸为基本单元读取对应第1通道的输入特征图,并沿着步长S移动方向逐行从左至右给脉动阵列的各行输入端口分别提供卷积所需操作数;以此类推,直至以第N-1通道的卷积核二维平面尺寸为基本单元读取对应第N-1通道的输入特征图,并沿着步长S移动方向逐行从左至右给脉动阵列的各行输入端口分别提供卷积所需操作数;
并沿着行方向一直向右传递到最右侧;
S3:在垂直方向,遵循NCHW格式,将每个卷积核的第0~N-1通道的权重系数依次分别传输给脉动阵列的对应各列输入端口,并沿着列方向一直向下传递到最底部;
S4:所述的输入特征图和相应的权重系数在脉动阵列的各个PE运算单元中完成卷积运算,各行的PE运算单元按顺序得到部分和结果,即同一行的各个PE在同一时刻得到部分和卷积结果,上一行的PE相比于紧邻的下一行PE提前1拍得到部分和卷积结果;
S5:m列的输出并行进行,对于各列,首先输出步长S移动0次的卷积计算结果,然后输出步长S移动1次的卷积计算结果,以此类推,直至输出步长S移动n-1次的卷积计算结果。
本发明的脉动阵列三类数据通路及其与脉动阵列接口数据流规律见图2所示。
图2中,以卷积步长S=1,卷积核的尺寸Kx*Ky*C=3*3*3为例,对图中脉动阵列的接口的三类数据通道的数据流进行描述。
在脉动阵列的水平方向,共有64行的输入端口接收来自于经过不同次数步长处理过的输入特征图数据。水平方向第0行:步长移动0次,逐拍提取第0通道a0,a1,a2,a10,a11,a12,a20,a21,a22,然后是紧邻下一通道的b0,b1,b2,...,最后是末尾通道的c0,c1,c2,...;水平方向的第1行:步长S移动1次,逐拍提取第0通道a1,a2,a3,a11,a12,a13,a21,a22,a23,然后是紧邻下一通道的b1,b2,b3,...,最后是末尾通道的c1,c2,c3,...;依次类推,直至步长S移动63次的输入特征图数据逐拍输送给第63行的脉动阵列输入端。然后随着时钟节拍,整体从左向右移动,直至脉动阵列的最右侧一列结束。
在脉动阵列的垂直方向的输入端,是64列的卷积核权重系数的输入端口,分别对应64个卷积核,与输入特征图处理类似只是不存在步长S的移动,以卷积核0为例,逐拍提取第0通道e0,e1,e2,e3,e4,e5,e6,e7,e8,然后是紧邻下一通道的f0,f1,f2,...,最后是末尾通道的g0,g1,g2,...;并随着是时钟节拍的运行,沿着垂直方向从脉动阵列的输入端口,经过第0行0列的PE0,0,然后传递给第1行0列的PE1,0,直至脉动阵列最底部的第63行0列即PE63,0结束。其它第1列到第63列的卷积核权重系数按照同样方式处理。
在脉动阵列的垂直方向的输出端,是64列经卷积计算的结果输出,以第0列为例:第0行0列的PE0,0首先得到卷积计算结果psum0-S0,psum0-S0表示步长S移动0次的输入特征图与卷积核0的计算结果,然后是第1行0列的PE1,0得到计算结果psum0-S1表示步长S移动1次的输入特征图与卷积核0的计算结果,依次类推,直至第63行0列的PE63,0的psum0-S63,各计算结果通过垂直方向依次从各列的顶部脉动输出。
本实施例的数据重组方法,有如下的有益效果:
(1)输入特征图和卷积窗口在二维平面上随着步长S移动呈现出的数据连续和大量数据重复的特点,且整个数据重组过程与原始数据NCHW格式保持一致,节省了数据格式转换的软硬件开销,由于数据连续且大量重复,可以发挥出DMA块状访存优势,减少了片外DRAM访存次数,提高了数据访存效率,降低功耗;
(2)以连续64个步长S移动处理的输入特征图数据分别输送给脉动阵列的对应水平方向输入,由于64个输入数据之间呈现出连续性的特点,找到64个数据的首地址即可,通过公式(1)计算求得该首地址,可以简化数据重组逻辑的复杂度;
(3)并行流水的右移电路和左移电路设计,每拍都能产生所需结果,移位电路逻辑关系简单,可以提高脉动阵列外部的数据重组电路的最高工作时钟Fmax,匹配脉动阵列内部运行时钟。只需简单的两路固定数据输入源和一路固定Padding 0来实现数据通路设计,避免了128种分支情况涉及的海量信号互联以及因此带来的布局布线困难和电路时序紧张。
本领域普通技术人员可以理解,以上所述仅为发明的优选实例而已,并不用于限制发明,尽管参照前述实例对发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在发明的精神和原则之内,所做的修改、等同替换等均应包含在发明的保护范围之内。

Claims (3)

1.一种用于脉动阵列结构的数据重组方法,所述的脉动阵列的尺寸为n行×m列,所述的输入特征图有N个通道,所述的卷积核也有N个通道,其特征在于,该方法具体包括如下步骤:
S1:先从片外DDR存储体遵循原始数据的NCHW格式将输入特征图读入到缓冲;
S2:在水平方向,遵循原始数据的NCHW格式,以第0通道的卷积核二维平面尺寸为基本单元读取对应0通道的输入特征图数据,并沿着步长S移动方向逐行从左至右给脉动阵列的各行输入端口分别提供卷积所需输入特征图数据;以第1通道的卷积核二维平面尺寸为基本单元读取对应第1通道的输入特征图数据,并沿着步长S移动方向逐行从左至右给脉动阵列的各行输入端口分别提供卷积所需输入特征图数据;以此类推,直至以第N-1通道的卷积核二维平面尺寸为基本单元读取对应第N-1通道的输入特征图数据,并沿着步长S移动方向逐行从左至右给脉动阵列的各行输入端口分别提供卷积所需输入特征图数据;
并沿着行方向一直向右传递到最右侧。
S3:在垂直方向,遵循NCHW格式,将每个卷积核的第0~N-1通道的权重系数依次分别传输给脉动阵列的对应各列输入端口,并沿着列方向一直向下传递到最底部;
S4:所述的输入特征图和相应的权重系数在脉动阵列的各个PE运算单元中完成卷积运算,各行的PE运算单元按顺序得到部分和结果,即同一行的各个PE在同一时刻得到各自的部分和卷积结果,上一行的PE相比于紧邻的下一行PE提前1拍得到部分和卷积结果;
S5:m列的输出并行进行,对于各列,首先输出步长S移动0次的卷积计算结果,然后输出步长S移动1次的卷积计算结果,以此类推,直至输出步长S移动n-1次的卷积计算结果。
2.根据权利要求1所述的用于脉动阵列结构的数据重组方法,其特征在于,通过公式(1)获取传送给S1的输入特征图的水平方向的数据在输入特征图缓冲中的字节地址标号:
其中,initial_middle_offset_pixel表示本轮初始的卷积窗口的中心像素点在输入特征图缓冲中的字节地址标号,对于最初始启动阶段,该值等于0,下一轮的initial_middle_offset_pixel则是上一轮计算得到的offset_pixel,如此循环迭代;P(window_z,window_y,window_x)表示卷积窗口在输入特征图立方体中的实时位置,window_z表示宽度W方向的取值,window_y表示高度H方向的取值,window_x表示通道深度C方向的取值,Kx、Ky为卷积核的二维尺寸;公式(1)计算结果即字节地址标号offset_pixel表示连续的一段输入特征图数据在输入特征图缓冲的首地址,本轮计算得到的offset_pixel作为下一轮的initial_middle_offset_pixel,如此循环迭代。
3.根据权利要求2所述的用于脉动阵列结构的数据重组方法,其特征在于,当步长S=1和步长S=2时,通过如下的电路处理使输送给脉动阵列的各行输入端口的数据来源于三处固定位置,以简化数据通路实现的复杂度:
采用两组buffer分别移位,其中一组固定右移即buffer0,另一组固定左移即buffer1,且两组buffer移位采用并行流水线结构,所需分别左移和右移的值,由所述的公式(1)得到的字节地址标号再进行求模运算来决定,最终存放到每个FIFO队列中每拍的输入特征图数据的取值根据公式(1)得到的字节地址标号并结合当前的输入特征图尺寸,从以下三个来源选取:
(1)右移处理后的buffer0;
(2)左移处理后的buffer1;
(3)根据Padding规则补零。
CN201910857692.4A 2019-09-09 2019-09-09 一种用于脉动阵列结构的数据重组方法 Withdrawn CN110674927A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910857692.4A CN110674927A (zh) 2019-09-09 2019-09-09 一种用于脉动阵列结构的数据重组方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910857692.4A CN110674927A (zh) 2019-09-09 2019-09-09 一种用于脉动阵列结构的数据重组方法

Publications (1)

Publication Number Publication Date
CN110674927A true CN110674927A (zh) 2020-01-10

Family

ID=69077802

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910857692.4A Withdrawn CN110674927A (zh) 2019-09-09 2019-09-09 一种用于脉动阵列结构的数据重组方法

Country Status (1)

Country Link
CN (1) CN110674927A (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111427537A (zh) * 2020-03-17 2020-07-17 云南大学 一种基于fpga的脉动阵列并行排序方法及装置
CN111506344A (zh) * 2020-03-05 2020-08-07 北京大学深圳研究生院 一种基于脉动阵列架构的深度学习硬件***
CN111506343A (zh) * 2020-03-05 2020-08-07 北京大学深圳研究生院 一种基于脉动阵列硬件架构的深度学习卷积运算实现方法
CN111652360A (zh) * 2020-05-25 2020-09-11 北京大学深圳研究生院 一种基于脉动阵列的卷积运算装置
CN111897579A (zh) * 2020-08-18 2020-11-06 腾讯科技(深圳)有限公司 图像数据处理方法、装置、计算机设备和存储介质
WO2021232843A1 (zh) * 2020-05-22 2021-11-25 浪潮电子信息产业股份有限公司 图像数据存储方法、图像数据处理方法、***及相关装置
CN114489496A (zh) * 2022-01-14 2022-05-13 南京邮电大学 基于fpga人工智能加速器的数据存储和传输方法
CN116108902A (zh) * 2023-02-22 2023-05-12 成都登临科技有限公司 采样操作实现***、方法、电子设备及存储介质

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111506344A (zh) * 2020-03-05 2020-08-07 北京大学深圳研究生院 一种基于脉动阵列架构的深度学习硬件***
CN111506343A (zh) * 2020-03-05 2020-08-07 北京大学深圳研究生院 一种基于脉动阵列硬件架构的深度学习卷积运算实现方法
CN111506344B (zh) * 2020-03-05 2023-07-07 北京大学深圳研究生院 一种基于脉动阵列架构的深度学习硬件***
CN111506343B (zh) * 2020-03-05 2023-07-07 北京大学深圳研究生院 一种基于脉动阵列硬件架构的深度学习卷积运算实现方法
CN111427537A (zh) * 2020-03-17 2020-07-17 云南大学 一种基于fpga的脉动阵列并行排序方法及装置
CN111427537B (zh) * 2020-03-17 2023-06-30 云南大学 一种基于fpga的脉动阵列并行排序方法及装置
EP4156079A4 (en) * 2020-05-22 2024-03-27 Inspur Electronic Information Industry Co., Ltd IMAGE DATA STORAGE METHOD, IMAGE DATA PROCESSING METHOD AND SYSTEM AND ASSOCIATED APPARATUS
WO2021232843A1 (zh) * 2020-05-22 2021-11-25 浪潮电子信息产业股份有限公司 图像数据存储方法、图像数据处理方法、***及相关装置
CN111652360A (zh) * 2020-05-25 2020-09-11 北京大学深圳研究生院 一种基于脉动阵列的卷积运算装置
CN111652360B (zh) * 2020-05-25 2023-03-14 北京大学深圳研究生院 一种基于脉动阵列的卷积运算装置
CN111897579A (zh) * 2020-08-18 2020-11-06 腾讯科技(深圳)有限公司 图像数据处理方法、装置、计算机设备和存储介质
CN111897579B (zh) * 2020-08-18 2024-01-30 腾讯科技(深圳)有限公司 图像数据处理方法、装置、计算机设备和存储介质
CN114489496A (zh) * 2022-01-14 2022-05-13 南京邮电大学 基于fpga人工智能加速器的数据存储和传输方法
CN114489496B (zh) * 2022-01-14 2024-05-21 南京邮电大学 基于fpga人工智能加速器的数据存储和传输方法
CN116108902A (zh) * 2023-02-22 2023-05-12 成都登临科技有限公司 采样操作实现***、方法、电子设备及存储介质
CN116108902B (zh) * 2023-02-22 2024-01-05 成都登临科技有限公司 采样操作实现***、方法、电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN110674927A (zh) 一种用于脉动阵列结构的数据重组方法
CN111897579B (zh) 图像数据处理方法、装置、计算机设备和存储介质
CN107229967B (zh) 一种基于fpga实现稀疏化gru神经网络的硬件加速器及方法
CN107704916B (zh) 一种基于fpga实现rnn神经网络的硬件加速器及方法
CN108108809B (zh) 一种针对卷积神经元网络进行推理加速的硬件架构及其工作方法
US7574466B2 (en) Method for finding global extrema of a set of shorts distributed across an array of parallel processing elements
JP2744526B2 (ja) 準16基数プロセッサおよび方法
CN110738308B (zh) 一种神经网络加速器
CN110851779B (zh) 用于稀疏矩阵运算的脉动阵列架构
CN109144469B (zh) 流水线结构神经网络矩阵运算架构及方法
CN110796236B (zh) 多样本多通道卷积神经网络池化的向量化实现方法
Liu et al. WinoCNN: Kernel sharing Winograd systolic array for efficient convolutional neural network acceleration on FPGAs
WO2022110386A1 (zh) 数据处理方法及人工智能处理器
CN110766128A (zh) 卷积计算单元、计算方法及神经网络计算平台
CN110688616B (zh) 一种基于乒乓ram的条带阵列的卷积模块及其运算方法
CN112950656A (zh) 一种基于fpga平台的按通道进行预读取数据的分块卷积方法
CN111506343A (zh) 一种基于脉动阵列硬件架构的深度学习卷积运算实现方法
Que et al. Recurrent neural networks with column-wise matrix–vector multiplication on FPGAs
CN116992203A (zh) 一种基于fpga的大规模高吞吐量稀疏矩阵向量整数乘法的方法
CN115238863A (zh) 一种卷积神经网络卷积层的硬件加速方法、***及应用
Li et al. Optimized data reuse via reordering for sparse matrix-vector multiplication on fpgas
CN110766136B (zh) 一种稀疏矩阵与向量的压缩方法
US20230376733A1 (en) Convolutional neural network accelerator hardware
CN116090518A (zh) 基于脉动运算阵列的特征图处理方法、装置以及存储介质
CN112561943B (zh) 一种基于脉动阵列卷积运算数据复用的图像处理方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WW01 Invention patent application withdrawn after publication

Application publication date: 20200110

WW01 Invention patent application withdrawn after publication