CN113312285A - 一种卷积神经网络加速器及其工作方法 - Google Patents
一种卷积神经网络加速器及其工作方法 Download PDFInfo
- Publication number
- CN113312285A CN113312285A CN202110656789.6A CN202110656789A CN113312285A CN 113312285 A CN113312285 A CN 113312285A CN 202110656789 A CN202110656789 A CN 202110656789A CN 113312285 A CN113312285 A CN 113312285A
- Authority
- CN
- China
- Prior art keywords
- calculation
- convolution
- array
- psum
- unit
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
- G06F13/282—Cycle stealing DMA
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Biophysics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
Abstract
本发明公开了一种卷积神经网络加速器及其工作方法,属于数字电路领域。本发明中的寄存器管理单元用于存储对卷积阵列的配置文件,当前卷积计算的各项参数信息,同时记录卷积阵列当前的运算状态,供主处理器查询;全局缓存模块用于对filter、ifmap和psum进行缓存;卷积阵列控制模块在接收到启动命令后根据寄存器管理单元提供的参数信息进行相应的数据交互操作,进行filter/ifmap和psum的传递;卷积阵列由大量PE单元级联而成,用于实现卷积运算;Pooling层用于进行池化计算;激活函数用于进行激活函数的计算。本发明克服了CNN卷积器的最大化输入数据重用和最小化Psum产生是无法同时实现的缺点。
Description
技术领域
本发明属于数字电路领域,尤其是一种卷积神经网络加速器及其工作方法。
背景技术
近些年来,随着人工智能技术的飞速发展,深度学习正成为机器学习领域中越来越重要的组成部分。卷积神经网络(CNN)是深度学习领域最为重要的工具之一,它对图像的平移、比例缩放、倾斜等形式的变形具有高度的适应性。它的权值共享网络结构使之更类似于生物神经网络结构,降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。因此,近年来卷积神经网络结构在视频监控、机器视觉、模式识别等领域得到越来越广泛的应用。
目前常见的CNN网络模型中的卷积层层数从数层到数百层不等。权重(Filter),输入图像(ifmap),输出图像(ofmap)均为多维结构。每一个卷积层都有多个通道(channel)的filter,每一个channel的filter和ifmaps都是由多个二维(2D)平面组成的三维(3D)结构,在一层卷积层中,每一批(batch)输入的3D-ifmaps都会与多个channel的3D-filter进行计算,得到卷积计算结果(ofmaps)。完成卷积计算后,卷积层输出结果之前还需加上偏置(bias),进行激活(Activation)和量化(Quantization)。一层卷积计算的计算公式可由以下公式表示:
0≤z<N,0≤u<M,0≤x<F,0≤y<E,
E=(H-R+U)/U,F=(W-S+U)/U.
其中,N是3D-ifmaps的批次数(batch),M是输出图像(ofmap)的通道数,C是输入图像(ifmap)的通道数,H/W是Ifmap平面的高度/宽度,R/S是Filter平面的高度/宽度(全连接层中R/S=H),E/F是Ofmap平面的高度/宽度(全连接层中E/F=1),U是卷积计算的步长。
在大多数常用的CNN模型中,例如AlexNet,VGG16等,卷积层占用了超过90%的计算量,同时产生了大量的数据搬移,这对CNN计算的带宽和功耗产生了显著的影响。尽管乘累加(MAC)操作可以并行计算,但即使不考虑MAC阵列的资源开销,仍然存在两方面的限制:首先,MAC阵列从DRAM读取数据需要大量的数据带宽,同时产生了大量功耗。其次,MAC阵列在计算过程中会产生大量的中间结果(Psum),这带来了巨大的访存开销和功耗。针对CNN算法对DRAM访问的带宽瓶颈,可以通过开发不同类型的数据重用方式来缓解,已有的研究大多从三个方面开发输入数据的重用方式:filter重用:在一次卷积层计算中,权值是共享的,输入数据会在计算中被重用多次。对于一个ifmap平面,每个滤波器的权值都会被重用E×F次。对于一个filter平面,每个ifmap的像素都会被重用R×S次。由于FC层filter尺寸与ifmap相等的特殊性,FC层不具备此类型的数据重用特征。开发filter的重用可以减少对filter的访问次数。ifmap重用:对于一个卷积核的不同输出通道,共用相同的ifmap数据。开发ifmap的重用可以减少对ifmap的访问次数。ofmap重用:对于一个卷积核的不同输入通道,其卷积计算结果会进行累加。开发ofmap的重用可以减少对中间结果(Psum)的访问次数。针对Psum缓存问题,还可以通过适当的计算流程规划来减少Psum对Memory的读写次数。对于最终输出结果的一个像素,最多可以减少C×R×S次对Memory的读写操作。
CNN卷积器设计的瓶颈在于,最大化输入数据重用和最小化Psum产生是无法同时实现的,因为卷积器通过重用filter或ifmap计算产生的Psum是无法减少的。为了实现深度学习加速器高吞吐,低功耗的应用需求,需要尽可能将输入数据重用和减少Psum的思路相结合,实现最优化的卷积器体系结构。另一方面,对于不同的CNN模型,参数是不尽相同的,即使具体到某一种CNN模型,不同卷积层之间的参数也是不同的。在应用层面上,卷积神经网络处理器的应用背景决定了其在设计上有不同的侧重,比如在嵌入式领域,要求功耗尽可能低,在对功耗不敏感的领域,要求资源利用率尽可能高。
发明内容
本发明的目的在于克服CNN卷积器的最大化输入数据重用和最小化Psum产生是无法同时实现的缺点,提供一种卷积神经网络加速器及其工作方法。
为达到上述目的,本发明采用以下技术方案予以实现:
一种卷积神经网络加速器,包括寄存器管理单元、全局缓存、卷积阵列控制模块、PE阵列、Pooling层和激活函数;
所述寄存器管理单元用于存储对卷积阵列的配置文件,当前卷积计算的各项参数信息,同时记录卷积阵列当前的运算状态,供主处理器查询;
寄存器管理单元通过AXI进行访问,支持DMA操作;
所述全局缓存模块用于对filter、ifmap和psum进行缓存;
所述卷积阵列控制模块用于根据配置信息进行卷积阵列的配置,在接收到启动命令后根据寄存器管理单元提供的参数信息进行相应的数据交互操作,在GlobalBuffer和PEArray之间进行filter/ifmap和psum的传递;
所述卷积阵列由大量PE单元级联而成,用于实现卷积运算,PE阵列的拓扑结构根据寄存器管理单元内的配置参数进行调整;
所述Pooling层用于进行池化计算;
所述激活函数用于进行激活函数的计算,并对计算结果进行量化。
进一步的,所述PE单元由9个乘累加单元和3个加法器组成;
所述乘累加单元以3×3的拓扑结构排列,组成了一个3×3的卷积核;
所述3个加法器用于将卷积核的卷积结果进行累加,得到完整的二维卷积结果。
进一步的,所述PE单元的工作流程为:
filter加载至对应的乘累加单元内,ifmap数据按行对乘累加单元进行广播,在加载ifmap的过程中,filter保持不变,ifmap加载的行数根据需要进行配置;根据配置完成ifmap加载后,更新filter的值,进行下一轮计算;
在PE单元中每行乘累加单元均可完成一行filter在ifmap上的一维卷积运算,每加载一行ifmap,一行乘累加单元得到该行ifmap与对应filter的一维卷积结果;
乘累加单元各自进行独立的一维卷积计算,乘累加单元的计算结果在加法器中进行累加,得到完整的二维卷积结果;
二维卷积结果由Psum_out输出;
若PE单元本次计算的结果是中间结果,那么在下一轮计算中,将所述结果从Psum_in输入,与下一轮的计算结果进行累加。
进一步的,所述PE单元的工作流程还包括:
每行PE阵列的计算结果除与另外两行PE阵列的计算结果进行累加外,还通过级联输出端口Carry_out输出,PE单元通过级联输入端口Carry_in和Psum_in进行扩展,Carry_in连接的是上一级PE的Carryout端口,Psum_in连接的是上一级PE的Psum_out端口或GobalBuffer。
进一步的,所述PE单元通过filter的扩展、C/M方向的扩展或E/M方向的扩展的方式进行级联,扩展成PE阵列。
进一步的,filter的扩展的方式为:
每行的PE单元通过级联接口连接在一起,每行的PE单元的级联输出端口CarryOut直连PE单元的级联输入端口Carryin,所述PE单元Psum_in/Psum_out端口与加法器阵列被旁路,最后一列的第一个PE单元的Psum_out接口直连最后一个PE单元的Psum_in;
C/M方向的扩展方式为:通过级联进行卷积核之间的并行计算和卷积核内部通道之间的并行计算;
E/M方向的扩展方式为:通过级联进行同一Psum不同行之间的并行计算。
进一步的,PE阵列的缓存在SRAM上,所有PE单元可分配的存储空间均是可调的,所有PE单元均可访问GlobalBuffer的任意一个存储区;
SRAM和PE单元的输入/输出管脚之间设置了一片FIFO,所述FIFO与SRAM相连端口的数据带宽大于所有计算模块GlobalBuffer输入/输出端口的数据带宽之和,保证计算模块对GlobalBuffer的连续读写;
在计算之前,对GlobalBuffer进行配置,将不同计算模块预计访问的地址空间范围加以定义,GlobalBuffer中各个计算模块对应的FIFO便会依照配置信息自动进行地址的计算,完成计算模块和GlobalBuffer之间的数据交换。
进一步的,通过轮询的方式查询当前各个计算模块的工作状态和FIFO的空满,以此对SRAM的地址线和读/写任务进行分配;
在写方向,通过轮询的方式查询各个写FIFO的空满状态,当检测到某个模块对应的写FIFO满时,产生相应的写地址,将FIFO内的数据写入SRAM;
在读方向,通过轮询的方式查询各个读FIFO的空满状态,当检测到某个模块的读FIFO空时,产生相应的读地址,同时判断该地址数据是否有效,若有效则将数据从SRAM读出,写入读FIFO;
FIFO采用乒乓操作保证流水的连续;
各个模块的初始读/写地址和地址累加方式,读写地址范围均由处理器提前配置,AddressControl模块只需按照预先配置的参数对地址进行累加。
本发明的卷积神经网络加速器的工作方法:在进行计算之前,将数据从片外DDR中写入GlobalBuffer,并根据当前计算的参数对卷积加速器进行相应的配置,完成上述操作并启动加速器后,加速器从GlobalBuffer取数,进行计算,并将计算结果写回GlobalBuffer;将CNN算法进行分解,依次由卷积加速器进行计算;
完成计算后,卷积加速器会产生中断,将数据从GlobalBuffer中取出,写回DDR。
与现有技术相比,本发明具有以下有益效果:
本发明的卷积神经网络加速器结构及其工作方法,从输入/输出通道(featuremap,FP),神经元(neuron,NP)和突触(synapse,SP)三个维度将CNN公式展开进行并行计算,三个维度的展开均可进行动态配置以适应不同的CNN模型,充分发觉了CNN算法中的并行性,大幅度的提升了PE的利用率,提高卷积神经网络加速器的计算性能,降低功耗。
附图说明
图1为卷积加速器PE单元的结构图;
图2为卷积加速器多个PE之间的级联方式示意图;
图3为卷积加速器PE阵列的结构图;
图4为卷积加速器PE阵列在filter上的扩展方法示意图;
图5为PE阵列在C/M方向上的扩展方法示意图;
图6为PE阵列在E方向上的扩展方法示意图;
图7为PE阵列对SRAM地址/数据线的复用方法示意图;
图8为PE阵列对Filter的分割方式示意图;
图9为四种工作方式与Filter分割方式的对应关系示意图;
图10为PE阵列Plan-A计算策略的示意图;
图11为PE阵列Plan-B计算策略的示意图;
图12为PE阵列Plan-C计算策略的示意图;
图13为PE阵列Plan-D计算策略的示意图;
图14为卷积神经网络加速器图;
图15为CNN公式展开方法及伪代码的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
下面结合附图对本发明做进一步详细描述:
本发明设计了一种高效率,可扩展的PE(process element)单元用于进行CNN计算,PE单元是卷积神经网络加速器的基本组成单元,由9个乘累加单元和3个加法器组成,PE的结构如图1所示。乘累加单元在PE内部以3×3的拓扑结构排列,组成了一个3×3的卷积核,选择3×3拓扑结构的原因是在主流的CNN模型中,3×3卷积核是最常见的。将9个乘累加单元耦合在一起,可以在ASIC中有针对性的对面积和功耗进行优化。卷积层的输入为定点数格式,位宽可配置。在进行计算之前,Filter通过PE右侧的filter_input端进行级联输入,并从左侧的filter_output端级联输出。每个乘累加单元都有一个寄存器用于将当前周期传递来的filter寄存。Ifmap通过PE左侧的ifmap_input端口向对应的乘累加单元进行广播。
卷积加速器在计算时,首先将filter加载至对应的乘累加单元内,再将ifmap数据按行对乘累加单元进行广播,在加载ifmap的过程中,filter保持不变,ifmap加载的行数可根据需要进行配置。在卷积加速器根据配置完成ifmap加载后,更新filter的值,进行下一轮计算。
在PE中每行乘累加单元均可完成一行filter在ifmap上的一维卷积运算,每加载一行ifmap,一行乘累加单元便可得到该行ifmap与对应filter的一维卷积结果。
PE中有三行乘累加单元,各自进行独立的一维卷积计算,三行乘累加单元的计算结果在最右侧的加法器中进行累加,得到完整的二维卷积结果。二维卷积结果由Psum_out输出。如果PE本次计算的结果是中间结果,那么在下一轮计算中,会将该结果从Psum_in输入,与下一轮的计算结果进行累加。
每行PE阵列的计算结果除了与另外两行PE阵列的计算结果进行累加外,还可以通过级联输出端口Carry_out输出,PE可以通过级联输入端口Carry_in和Psum_in进行扩展,Carry_in连接的是上一级PE的Carryout端口,Psum_in连接的是上一级PE的Psum_out端口或GobalBuffer。
本发明设计的PE单元可以非常方便的在行方向和列方向进行级联,扩展成PE阵列,以适应更大规模的卷积计算。进行级联时,在行方向,将左侧PE单元的输入端口filter_input依次与其右侧PE单元的输出端口filter_output相连,输出端口carry_out与其右侧PE单元的输入端口carry_in相连即可,同一行PE单元的ifmap输入端口由统一的输入端口进行广播。在列方向,将上方的PE单元的Psum_output端口与下方的PE单元的Psum_input端口相连即可。图2展示了一个由4个PE单元级联而成的2×2规模的PE阵列。PE阵列规模越大,其计算性能越强,同时占用资源越大,功耗越高,因此在实际使用时,使用者可根据计算需求,资源占用情况灵活调整PE阵列的规模,以适应不同的应用场景。PE阵列的拓扑结构见图3,将PE阵列在横向集成的PE单元个数称为x,PE阵列在纵向集成的PE单元个数称为y。PE阵列是由x×y个PE单元在平面上级联而成。
本发明设计的PE阵列可以按照需要灵活配置成不同的拓扑结构。PE阵列的拓扑方式可分为filter的扩展,C/M方向的扩展和E/M方向的扩展三种类型。
filter的扩展
本发明设计的单个PE单元最大可计算3×3大小的卷积核计算。在需要计算的CNN模型中的卷积核大于3×3时,卷积层PE可以通过级联的方式组成更大的卷积核以满足计算需求。
参见图4,图4展示了一个用于6×6卷积核计算的卷积层拓扑结构,4个3×3PE单元通过级联接口连接在一起,左侧PE单元的级联输出端口CarryOut直连右侧PE单元的级联输入端口Carryin,且Psum_in/Psum_out端口与它们之间的加法器阵列被旁路,右上方PE单元的Psum_out接口直连右下方PE单元的Psum_in。通过这样的配置就可利用2×2的PE阵列共同实现6×6卷积核的卷积计算。以此类推,12×12的卷积核可以用相同的配置方式由4×4的PE阵列共同实现。
C/M方向的扩展
CNN中的卷积层是一个四维卷积阵列,CNN的每一个卷积层都有多个卷积核,而每一个卷积核又包含了多个通道,每个通道对应一次二维卷积,这些二维卷积是可以并行计算的。以图5所示为例,将卷积核之间的并行计算称为M方向的扩展,卷积核内部通道之间的并行计算称为C方向的扩展。M方向的扩展可以增加ifmap的重用,而C方向的扩展可以减少Psum的产生。
参见图5,图5展示了PE阵列在C/M方向的扩展方案,假设PE阵列的规模为x×y,横向的PE单元各自进行不同输出通道(M方向)卷积核的计算,共享ifmap输入并输出不同的psum,图5所示的PE阵列在M方向最多可支持x个卷积核同时运算。纵向的PE单元各自进行同一卷积核内不同输入通道(C方向)的计算,计算的结果累加后输出,图5所示的PE阵列在C方向最多支持y个不同通道的同时运算。
E/M方向的扩展
CNN中卷积核的通道数并不固定,可能会出现通道数C小于PE阵列行数y的情况,在这种情况下,为了保证卷积核的利用率,需要向纵向的多个PE单元加载相同的filter,使不同的PE各自计算Psum中不同行的结果,再将PE各自计算的结果合并,形成完整的Psum。将同一Psum不同行之间的并行计算称为E方向的扩展。E方向的扩展可以提高PE阵列的利用率。
参见图6,图6展示了PE阵列在E/M方向的扩展方案,横向的PE单元各自进行不同卷积核的计算,共享ifmap输入并输出不同的psum,图6中所示的PE阵列最多可支持x个卷积核同时运算。纵向的PE单元各自进行同一Psum不同行的计算,计算的结果分别输出,图6所示的PE阵列最多支持y行Psum的同时运算。
在嵌入式处理器中,各个功能部件所消耗的功耗是不同的,以TSMC65nm工艺为例,访问外部DRAM的功耗开销为访问寄存器文件的200倍,访问内部BUFFER的功耗开销为访问寄存器文件的6倍,对CNN加速器来说,由于需要计算的数据量巨大,必须存放在外部DRAM中,因此需要充分发掘数据的可重用性,尽量减少数据在外部DRAM和BUFFER之间的传递次数,以降低功耗,减少带宽需求。
在计算流程一定的前提下,GobalBUFFER访问DRAM的次数越少,整个CNN计算的功耗便会越少,为了实现此目标,本发明从两个方面着手GlobalBuffer的设计:1尽可能使用更大容量的GlobalBuffer;2尽可能增加GlobalBuffer的重用性。
本发明使用一块片上Sram用于PE阵列的缓存,所有PE单元可分配的存储空间都是可调的,如有必要,所有PE单元都可访问GlobalBuffer的任意一个存储区。GlobalBuffer的结构如图7所示。
由于Sram的数据线,地址线是单一的,无法在同一时刻被多个计算模块访问,Sram和PE单元的输入/输出管脚之间设置了一片FIFO,此FIFO与SRAM相连端口的数据带宽大于所有计算模块GlobalBuffer输入/输出端口的数据带宽之和,可以保证计算模块对GlobalBuffer的连续读写。在计算之前,处理器需要对GlobalBuffer进行配置,将不同计算模块预计访问的地址空间范围加以定义,GlobalBuffer中各个计算模块对应的FIFO便会依照配置信息自动进行地址的计算,完成计算模块和GlobalBuffer之间的数据交换。
参见图7,图7显示了SRAM地址/数据线的复用方式,由于计算流程是提前设置好的,因此各个FIFO工作时间的先后关系也是确定的,AddressControl模块通过轮询的方式查询当前各个计算模块的工作状态和FIFO的空满,以此对SRAM的地址线和读/写任务进行分配,在写方向,通过轮询的方式查询各个写FIFO的空满状态,当检测到某个模块对应的写FIFO满时,产生相应的写地址,将FIFO内的数据写入SRAM,在读方向,通过轮询的方式查询各个读FIFO的空满状态,当检测到某个模块的读FIFO空时,产生相应的读地址,同时判断该地址数据是否有效,若有效则将数据从SRAM读出,写入读FIFO。FIFO采用乒乓操作保证流水的连续。各个模块的初始读/写地址和地址累加方式,读写地址范围均由处理器提前配置,AddressControl模块只需按照预先配置的参数对地址进行累加即可。
本发明涉及的卷积神经网络加速器采用filter(权值)固定,Ifmap广播的方式进行卷积计算,在整个卷积层的计算过程中,每个PE对同一个filter只加载一次,完成与该filter相关的所有计算后再将filter更新。由于加速器的资源有限,不能一次完成全部filter的计算,因此需要对filter进行分割,将其依次加载进PE阵列。Filter的分割方式如图8所示。
在图8所示例子中,PE阵列规模为4×4,filter大小为3×3,filter输入通道大小(C)为9,输出通道大小(M)为9,C=9,M=9的卷积层共有81个3×3的filter,按PE阵列的规模(4×4)对filter进行分割,则81个filter被分为9部分,PE阵列每次可以完成其中之一的计算。在计算时,将filter分9次向卷积加速器加载,并加载对应的ifmap进行卷积计算。因此卷积加速器需要循环9次才能完成全部的卷积计算,将横向(输出通道方向)的分割次数定义为GM,纵向(输入通道方向)的分隔次数定义为GC。
从图8中可以看出,不同的计算循环,PE阵列的计算方式是不同的,GM0GC0,GM1GC0,GM0GC1,GM1GC1这四次循环,所有PE都参与了计算,将其计算策略定义为Plan-A,GM2GC0,GM2GC1这两次循环,只有一列PE参加了计算,将其计算策略定义为Plan-B,GM0GC2,GM1GC2这两次循环,若不进行E方向的扩展,则只有一行PE参加计算,若进行E方向的扩展则所有的PE均参加计算。将其计算策略定义Plan-C,GM2GC2这次循环,只有一个PE参加了计算,也可通过E方向的扩展使一次计算使用的PE增加为4个。将其计算策略定义为Plan-D,四种工作方式与循环的对应关系如图9所示。
在Plan-A策略中,PE阵列所有的PE均参与计算,PE阵列执行M/C方向的扩展。其中M方向上的PE互相独立进行计算,C方向的PE计算结果进行累加后写入结果存储器PsumMemory。Plan-A计算策略的示意图如图10所示。
在Plan-B策略中,只有左侧一列的PE参与计算,PE阵列只执行C方向的扩展,第一列的PE计算结果进行累加后写入结果存储器PsumMemory。Plan-B计算策略的示意图如图11所示。
在Plan-C策略中,PE阵列所有的PE均参与计算,PE阵列执行M/E方向的扩展,其中M方向上的PE互相独立进行计算,C方向的4个PE按行对Psum进行分割,分别计算Psum的四分之一后再将结果写入结果存储器PsumMemory。Plan-C计算策略的示意图如图12所示。
在Plan-D策略中,PE阵列只有左侧一列的PE参与计算,PE阵列只执行E方向的扩展,第一列的4个PE按行对Psum进行分割,分别计算Psum的四分之一后将结果写入结果存储器Psum。Plan-D计算策略的示意图如图13所示。
基于以上所述PE阵列和GlobalBuffer的设计,本发明设计了一种卷积神经网络加速器,可根据配置在计算过程中动态调整计算结构以适应当前卷积层参数,使计算效能和功耗最优化。
卷积神经网络加速器如图14所示,主要由6个部分组成:寄存器管理单元,全局缓存,卷积阵列控制模块,PE阵列,Pooling层,激活函数/量化层。其中,寄存器管理单元用于存储对卷积阵列的配置文件,当前卷积计算的各项参数等信息,同时也会记录卷积阵列当前的运算状态,供主处理器查询。寄存器管理单元可通过AXI进行访问,支持DMA操作。全局缓存模块主要用于对filter,ifmap和psum进行缓存,全局缓存模块可由AXI总线进行访问,支持DMA操作。卷积阵列控制模块主要用于根据寄存器管理单元提供的配置信息进行卷积阵列的配置,并在接收到启动命令后根据寄存器管理单元提供的参数信息进行相应的数据交互操作,在GlobalBuffer和PEArray之间进行filter/ifmap/psum的传递。卷积阵列由大量PE(process element)级联而成,用于实现卷积运算,PE阵列的拓扑结构可根据寄存器管理单元内的配置参数进行调整。Pooling层用于进行池化计算,激活函数/量化模块用于进行激活函数的计算,并对计算结果进行量化。
在进行计算之前,系统软件需要将数据从片外DDR中写入GlobalBuffer,并根据当前计算的参数对卷积加速器进行相应的配置。完成上述操作并启动加速器后,加速器会自动从GlobalBuffer取数,进行计算,并将计算结果写回GlobalBuffer。完成计算后,卷积加速器会产生中断,通知系统软件将数据从GlobalBuffer中取出,写回DDR。
由于资源受限,因此在进行计算之前,需通过系统软件将CNN算法进行分解,依次由卷积加速器进行计算。本发明为上述神经网络加速器建立了计算模型,可提供给用户进行算法性能分析,用户可根据实际资源情况设置约束条件,分析不同神经网络模型的计算特征,以性能最优,功耗最优或性能功耗比最优等方向对神经网络加速器进行配置。可根据用户的配置,基于模型求解得到的结果,生成最优的阵列映射方案实现CNN加速器进行动态重构。本发明设计的加速器调度方式灵活,可实现加速器计算能效的充分发挥。
实施例
本发明已应用至某军用高性能DSP中,作为神经网络加速器使用,该DSP基于28nm工艺流片,加速器使用了8×8的PE阵列,16位定点数据格式,1Mbyte的GlobalBuffer,工作主频500MHz,峰值计算性能可达672GOPS。
在CNN加速器中,PE利用率是非常重要的指标,直接决定了CNN加速器的计算效率,因为对于任一CNN模型,其中的乘累加次数是固定的,在PE数目相同,频率相同的前提下,更高的PE利用率意味着更短的计算时间,更高的计算效率。本发明通过充分发掘CNN算法的并行性,提升PE利用率的方式,有效提高了CNN加速器的计算效率。
CNN算法可以在3个维度进行展开以实现并行计算:输入输出通道(featuremap,FP),神经元(neuron,NP)和突触(synapse,SP),图15展示了CNN算法的展开方式,在伪代码中CNN计算被分解为6层循环的嵌套。其中最外的两层循环为featuremap维度,中间的两层循环为neuron维度,最内层两层循环为synapse维度。
将CNN算法按维度展开,增加CNN加速器在三个维度上的并行度可以有效提升CNN加速器的计算效率,但大部分现有的卷积神经网络加速器都只针对其中一个维度进行展开,如脉动乘累加(Systolic)架构的卷积器只能在synapse维度将CNN算法展开,2D-mapping架构的卷积器只能在neuron维度将CNN算法展开,Tiling架构的卷积器只能在featuremap维度将CNN算法展开。这些架构均无法充分发掘CNN算法在所有三个维度上的并行性。
本发明设计的CNN加速器结构是通过以下几种方式,实现CNN算法在三个维度上的展开,最大化PE利用率以提升计算效率的:
(1)synapse维度的展开是由PE单元实现的,本发明提出的PE单元由3×3的乘累加单元和3个用于级联的加法器组成,一个PE单元可以加载一个3×3的synapse,实现synapse与input featuremap之间的卷积。当synapse大于3×3时,可以通过PE单元的级联来实现更大的synapse的计算。在本发明中我们把PE的这种级联方式称为filter的扩展。
(2)featuremap维度的展开是由PE阵列实现的,本发明提出的PE单元可以在通过级联管脚在横向和纵向进行扩展,其中横向扩展的PE单元负责加载不同输出通道中(图15中共有M个输出通道),同一输入通道(图15中共有C个输入通道)的synapse,实现featuremap维度在output feature maps方向的扩展。纵向扩展的PE单元负责加载同一输出通道(图15中的M)中,不同输入通道(图15中的C)的synapse,实现featuremap维度在input feature maps方向的扩展。在本发明中我们把这种扩展方式称为C/M方向的扩展。
(3)neuron维度的展开是由PE阵列实现的,本发明提出的PE单元可以在通过级联管脚在纵向进行扩展,纵向扩展的PE单元负责加载相同(同一输出通道中,同一输入通道)的synapse,但在进行计算时,纵向扩展的PE单元分别计算同一neuron中的不同行,实现featuremap维度在neuron维度的扩展。在本发明中我们把这种扩展方式称为E方向的扩展。
通过以上三种扩展方式,CNN计算被分解为三个维度,同时进行计算,本发明的CNN加速器在featuremap维度和neuron维度的展开程度可配置,以适应不同参数的CNN模型,最大化PE利用率。
例如在计算一个卷积核大小为3×3,输入通道C=4,输出通道M=8的模型时,一个8×8的PE阵列,可以分解为上下两个8×4的PE阵列,两个PE阵列加载的卷积核参数完全相同,分别计算neuron维度不同行的结果。在一个8×4的PE阵列内部,按照featuremap维度进行展开。
在计算一个卷积核大小为3×3,输入通道C=16,输出通道M=8的模型时,一个8×8的PE阵列,不进行neuron维度的展开,完全按featuremap维度进行展开,分两轮进行计算,第一轮加载前8个输入通道的卷积核,第二轮加载后8个输入通道的卷积核。第一轮计算的结果通过级联输入端口参与第二轮计算。PE阵列进行一次迭代即可完成全部计算。
本发明的卷积神经网络加速器结构及其工作方法,从输入/输出通道(featuremap,FP),神经元(neuron,NP)和突触(synapse,SP)三个维度将CNN公式展开进行并行计算,三个维度的展开均可进行动态配置以适应不同的CNN模型,充分发觉了CNN算法中的并行性,大幅度的提升了PE的利用率,提高卷积神经网络加速器的计算性能,降低功耗。
以上内容仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明权利要求书的保护范围之内。
Claims (9)
1.一种卷积神经网络加速器,其特征在于,包括寄存器管理单元、全局缓存、卷积阵列控制模块、PE阵列、Pooling层和激活函数;
所述寄存器管理单元用于存储对卷积阵列的配置文件,当前卷积计算的各项参数信息,同时记录卷积阵列当前的运算状态,供主处理器查询;
寄存器管理单元通过AXI进行访问,支持DMA操作;
所述全局缓存模块用于对filter、ifmap和psum进行缓存;
所述卷积阵列控制模块用于根据配置信息进行卷积阵列的配置,在接收到启动命令后根据寄存器管理单元提供的参数信息进行相应的数据交互操作,在GlobalBuffer和PEArray之间进行filter、ifmap和psum的传递;
所述卷积阵列由大量PE单元级联而成,用于实现卷积运算,PE阵列的拓扑结构根据寄存器管理单元内的配置参数进行调整;
所述Pooling层用于进行池化计算;
所述激活函数用于进行激活函数的计算,并对计算结果进行量化。
2.根据权利要求1所述的卷积神经网络加速器,其特征在于,所述PE单元由9个乘累加单元和3个加法器组成;
所述乘累加单元以3×3的拓扑结构排列,组成了一个3×3的卷积核;
所述3个加法器用于将卷积核的卷积结果进行累加,得到完整的二维卷积结果。
3.根据权利要求2所述的卷积神经网络加速器,其特征在于,所述PE单元的工作流程为:
filter加载至对应的乘累加单元内,ifmap数据按行对乘累加单元进行广播,在加载ifmap的过程中,filter保持不变,ifmap加载的行数根据需要进行配置;根据配置完成ifmap加载后,更新filter的值,进行下一轮计算;
在PE单元中每行乘累加单元均可完成一行filter在ifmap上的一维卷积运算,每加载一行ifmap,一行乘累加单元得到该行ifmap与对应filter的一维卷积结果;
乘累加单元各自进行独立的一维卷积计算,乘累加单元的计算结果在加法器中进行累加,得到完整的二维卷积结果;
二维卷积结果由Psum_out输出;
若PE单元本次计算的结果是中间结果,那么在下一轮计算中,将所述结果从Psum_in输入,与下一轮的计算结果进行累加。
4.根据权利要求3所述的卷积神经网络加速器,其特征在于,所述PE单元的工作流程还包括:
每行PE阵列的计算结果除与另外两行PE阵列的计算结果进行累加外,还通过级联输出端口Carry_out输出,PE单元通过级联输入端口Carry_in和Psum_in进行扩展,Carry_in连接的是上一级PE的Carryout端口,Psum_in连接的是上一级PE的Psum_out端口或GobalBuffer。
5.根据权利要求2所述的卷积神经网络加速器,其特征在于,所述PE单元通过filter的扩展、C/M方向的扩展或E/M方向的扩展的方式进行级联,扩展成PE阵列。
6.根据权利要求5所述的卷积神经网络加速器,其特征在于,filter的扩展的方式为:
每行的PE单元通过级联接口连接在一起,每行的PE单元的级联输出端口CarryOut直连PE单元的级联输入端口Carryin,所述PE单元Psum_in/Psum_out端口与加法器阵列被旁路,最后一列的第一个PE单元的Psum_out接口直连最后一个PE单元的Psum_in;
C/M方向的扩展方式为:通过级联进行卷积核之间的并行计算和卷积核内部通道之间的并行计算;
E/M方向的扩展方式为:通过级联进行同一Psum不同行之间的并行计算。
7.根据权利要求5所述的卷积神经网络加速器,其特征在于,PE阵列的缓存在SRAM上,所有PE单元可分配的存储空间均是可调的,所有PE单元均可访问GlobalBuffer的任意一个存储区;
SRAM和PE单元的输入/输出管脚之间设置了一片FIFO,所述FIFO与SRAM相连端口的数据带宽大于所有计算模块GlobalBuffer输入/输出端口的数据带宽之和,保证计算模块对GlobalBuffer的连续读写;
在计算之前,对GlobalBuffer进行配置,将不同计算模块预计访问的地址空间范围加以定义,GlobalBuffer中各个计算模块对应的FIFO便会依照配置信息自动进行地址的计算,完成计算模块和GlobalBuffer之间的数据交换。
8.根据权利要求5所述的卷积神经网络加速器,其特征在于,通过轮询的方式查询当前各个计算模块的工作状态和FIFO的空满,以此对SRAM的地址线和读/写任务进行分配;
在写方向,通过轮询的方式查询各个写FIFO的空满状态,当检测到某个模块对应的写FIFO满时,产生相应的写地址,将FIFO内的数据写入SRAM;
在读方向,通过轮询的方式查询各个读FIFO的空满状态,当检测到某个模块的读FIFO空时,产生相应的读地址,同时判断该地址数据是否有效,若有效则将数据从SRAM读出,写入读FIFO;
FIFO采用乒乓操作保证流水的连续;
各个模块的初始读/写地址和地址累加方式,读写地址范围均由处理器提前配置,AddressControl模块只需按照预先配置的参数对地址进行累加。
9.根据权利要求1-8任一项所述的卷积神经网络加速器的工作方法,其特征在于:在进行计算之前,将数据从片外DDR中写入GlobalBuffer,并根据当前计算的参数对卷积加速器进行相应的配置,完成上述操作并启动加速器后,加速器从GlobalBuffer取数,进行计算,并将计算结果写回GlobalBuffer;将CNN算法进行分解,依次由卷积加速器进行计算;
完成计算后,卷积加速器会产生中断,将数据从GlobalBuffer中取出,写回DDR。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110656789.6A CN113312285B (zh) | 2021-06-11 | 2021-06-11 | 一种卷积神经网络加速器及其工作方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110656789.6A CN113312285B (zh) | 2021-06-11 | 2021-06-11 | 一种卷积神经网络加速器及其工作方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113312285A true CN113312285A (zh) | 2021-08-27 |
CN113312285B CN113312285B (zh) | 2023-08-18 |
Family
ID=77378699
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110656789.6A Active CN113312285B (zh) | 2021-06-11 | 2021-06-11 | 一种卷积神经网络加速器及其工作方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113312285B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113537482A (zh) * | 2021-09-14 | 2021-10-22 | 绍兴埃瓦科技有限公司 | 神经网络计算模块、方法和通信设备 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180341495A1 (en) * | 2017-05-26 | 2018-11-29 | Purdue Research Foundation | Hardware Accelerator for Convolutional Neural Networks and Method of Operation Thereof |
CN110084739A (zh) * | 2019-03-28 | 2019-08-02 | 东南大学 | 一种基于cnn的画质增强算法的fpga并行加速系统 |
CN111144545A (zh) * | 2018-11-02 | 2020-05-12 | 深圳云天励飞技术有限公司 | 用于实现卷积运算的处理元件、装置和方法 |
WO2020107616A1 (zh) * | 2018-11-26 | 2020-06-04 | 深圳云天励飞技术有限公司 | 一种并行计算方法及装置 |
CN111242289A (zh) * | 2020-01-19 | 2020-06-05 | 清华大学 | 一种规模可扩展的卷积神经网络加速系统与方法 |
CN111401532A (zh) * | 2020-04-28 | 2020-07-10 | 南京宁麒智能计算芯片研究院有限公司 | 一种卷积神经网络推理加速器及加速方法 |
CN111488983A (zh) * | 2020-03-24 | 2020-08-04 | 哈尔滨工业大学 | 一种基于fpga的轻量级cnn模型计算加速器 |
CN112487750A (zh) * | 2020-11-30 | 2021-03-12 | 西安微电子技术研究所 | 一种基于存内计算的卷积加速计算系统及方法 |
-
2021
- 2021-06-11 CN CN202110656789.6A patent/CN113312285B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180341495A1 (en) * | 2017-05-26 | 2018-11-29 | Purdue Research Foundation | Hardware Accelerator for Convolutional Neural Networks and Method of Operation Thereof |
CN111144545A (zh) * | 2018-11-02 | 2020-05-12 | 深圳云天励飞技术有限公司 | 用于实现卷积运算的处理元件、装置和方法 |
WO2020107616A1 (zh) * | 2018-11-26 | 2020-06-04 | 深圳云天励飞技术有限公司 | 一种并行计算方法及装置 |
CN110084739A (zh) * | 2019-03-28 | 2019-08-02 | 东南大学 | 一种基于cnn的画质增强算法的fpga并行加速系统 |
CN111242289A (zh) * | 2020-01-19 | 2020-06-05 | 清华大学 | 一种规模可扩展的卷积神经网络加速系统与方法 |
CN111488983A (zh) * | 2020-03-24 | 2020-08-04 | 哈尔滨工业大学 | 一种基于fpga的轻量级cnn模型计算加速器 |
CN111401532A (zh) * | 2020-04-28 | 2020-07-10 | 南京宁麒智能计算芯片研究院有限公司 | 一种卷积神经网络推理加速器及加速方法 |
CN112487750A (zh) * | 2020-11-30 | 2021-03-12 | 西安微电子技术研究所 | 一种基于存内计算的卷积加速计算系统及方法 |
Non-Patent Citations (1)
Title |
---|
赵烁等: "基于FPGA的CNN加速SoC系统设计", 《计算机工程与设计》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113537482A (zh) * | 2021-09-14 | 2021-10-22 | 绍兴埃瓦科技有限公司 | 神经网络计算模块、方法和通信设备 |
Also Published As
Publication number | Publication date |
---|---|
CN113312285B (zh) | 2023-08-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110097174B (zh) | 基于fpga和行输出优先的卷积神经网络实现方法、系统及装置 | |
JP7329533B2 (ja) | 演算を加速するための方法および加速器装置 | |
Song et al. | C-Brain: A deep learning accelerator that tames the diversity of CNNs through adaptive data-level parallelization | |
US20200202198A1 (en) | Neural network processor | |
CN111178519A (zh) | 卷积神经网络加速引擎、卷积神经网络加速系统及方法 | |
CN107657581B (zh) | 一种卷积神经网络cnn硬件加速器及加速方法 | |
CN106940815A (zh) | 一种可编程卷积神经网络协处理器ip核 | |
CN110222818B (zh) | 一种用于卷积神经网络数据存储的多bank行列交织读写方法 | |
CN111667051A (zh) | 适用边缘设备的神经网络加速器及神经网络加速计算方法 | |
CN110738316B (zh) | 基于神经网络的操作方法、装置及电子设备 | |
CN112149369A (zh) | 基于芯粒架构的多核封装级系统及其面向芯粒的任务映射方法 | |
CN110705702A (zh) | 一种动态可扩展的卷积神经网络加速器 | |
US20220179823A1 (en) | Reconfigurable reduced instruction set computer processor architecture with fractured cores | |
CN114418072A (zh) | 一种面向多核忆阻器存算一体平台的卷积算子映射方法 | |
US20240160689A1 (en) | Method for optimizing convolution operation of system on chip and related product | |
CN113312285B (zh) | 一种卷积神经网络加速器及其工作方法 | |
CN111610963B (zh) | 芯片结构及其乘加计算引擎 | |
US11429299B2 (en) | System and method for managing conversion of low-locality data into high-locality data | |
Hu et al. | High-performance reconfigurable DNN accelerator on a bandwidth-limited embedded system | |
CN114912596A (zh) | 面向稀疏卷积神经网络的多chiplet系统及其方法 | |
Zhu et al. | Tanji: A general-purpose neural network accelerator with unified crossbar architecture | |
CN114692854A (zh) | 用于生成人工神经网络模型的内核的npu及其方法 | |
CN112001492A (zh) | 关于二值权重DenseNet模型的混合流水式加速架构及加速方法 | |
Brown et al. | Nemo-cnn: An efficient near-memory accelerator for convolutional neural networks | |
CN111967587A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |