网络与信息安全学报, 2018, 4(12): 16-24 doi: 10.11959/j.issn.2096-109x.2018100

学术论文

基于线性脉动阵列的卷积神经网络计算优化与性能分析

刘勤让, 刘崇阳,, 周俊, 王孝龙

国家数字交换系统工程技术研究中心,河南 郑州 450002

Based on linear systolic array for convolutional neural network’s calculation optimization and performance analysis

LIU Qinrang, LIU Chongyang,, ZHOU Jun, WANG Xiaolong

National Digital Switching System Engineering and Technological R&D Center,Zhengzhou 450002,China

通讯作者: 刘崇阳,zmylmh1@163.com

修回日期: 2018-10-29   网络出版日期: 2018-12-15

基金资助: 国家科技重大专项基金资助项目.  2016ZX01012101
国家自然科学基金资助项目.  61572520
国家自然科学基金创新研究群体资助项目.  61521003

Revised: 2018-10-29   Online: 2018-12-15

Fund supported: The National Science Technology Major Project of China.  2016ZX01012101
The National Natural Science Foundation of China.  61572520
The National Natural Science Foundation Innovation Group Project of China.  61521003

作者简介 About authors

刘勤让(1975-),男,河南睢县人,国家数字交换系统工程技术研究中心研究员,主要研究方向为宽带信息网络、片上网络设计。 。

" class="zuozhejj-content-img">

刘崇阳(1994-),男,湖北宜昌人,国家数字交换系统工程技术研究中心硕士生,主要研究方向为人工智能、深度学习。 E-mail:zmylmh1@163.com

" class="zuozhejj-content-img">

周俊(1979-),男,湖北黄冈人,国家数字交换系统工程技术研究中心讲师,主要研究方向为芯片设计、宽带信息处理。 。

" class="zuozhejj-content-img">

王孝龙(1993-),男,河南民权人,国家数字交换系统工程技术研究中心硕士生,主要研究方向为宽带信息网络、协议解析。 。

摘要

针对大部分FPGA端上的卷积神经网络(CNN,convolutional neural network)加速器设计未能有效利用稀疏性的问题,从带宽和能量消耗方面考虑,提出了基于线性脉动阵列的2种改进的CNN计算优化方案。首先,卷积转化为矩阵相乘形式以利用稀疏性;其次,为解决传统的并行矩阵乘法器存在较大I/O需求的问题,采用线性脉动阵列改进设计;最后,对比分析了传统的并行矩阵乘法器和2种改进的线性脉动阵列用于CNN加速的利弊。理论证明及分析表明,与并行矩阵乘法器相比,2种改进的线性脉动阵列都充分利用了稀疏性,具有能量消耗少、I/O带宽占用少的优势。

关键词: 线性脉动阵列 ; 卷积神经网络 ; 稀疏性 ; I/O带宽 ; 性能分析

Abstract

Concerning the issue that the convolutional neural network (CNN) accelerator design on most FPGA ends fails to effectively use the sparsity and considering both bandwidth and energy consumption,two improved CNN calculation optimization strategies based on linear systolic array architecture are proposed.Firstly,convolution is transformed into matrix multiplication to take advantage of sparsity.Secondly,in order to solve the problem of large I/O demand in traditional parallel matrix multiplier,linear systolic array is used to improve the design.Finally,a CNN acceleration comparative analysis of the advantages and disadvantages between parallel matrix multiplier and two improved linear systolic arrays is presented.Theoretical proof and analysis show that compared with the parallel matrix multiplier,the two improved linear systolic arrays make full use of sparsity,and have the advantages of less energy consumption and less I/O bandwidth occupation.

Keywords: linear systolic array ; convolutional neural network ; sparsity ; I/O bandwidth ; performance analysis

PDF (759KB) 元数据 多维度评价 相关文章 导出 EndNote| Ris| Bibtex  收藏本文

本文引用格式

刘勤让, 刘崇阳, 周俊, 王孝龙. 基于线性脉动阵列的卷积神经网络计算优化与性能分析. 网络与信息安全学报[J], 2018, 4(12): 16-24 doi:10.11959/j.issn.2096-109x.2018100

LIU Qinrang. Based on linear systolic array for convolutional neural network’s calculation optimization and performance analysis. Chinese Journal of Network and Information Security[J], 2018, 4(12): 16-24 doi:10.11959/j.issn.2096-109x.2018100

1 引言

CNN是一种前馈神经网络,随着人工智能的发展,深度学习中的 CNN 已成为物体识别的主要方法,广泛用于计算机视觉领域。但 CNN 是一个计算密集型和存储密集型的网络[1,2],为了面向更复杂的任务,CNN的规模正向更深、更复杂方向发展。例如,文献[3]指出:“标准”的CNN结构层次太少,只有神经元、神经网络层,要把每一层的神经元组合起来形成组并装到“舱”(capsule)中完成大量的内部计算。

CNN 规模大和计算量大的特点导致移动端上部署变得很困难,规模太大可以压缩[4,5],计算量太大就须进行加速。如今,CNN嵌入式端加速主要集中于 FPGA[6]。例如,文献[7]结合卷积计算特点用多个二维卷积器实现三维卷积操作,充分利用FPGA上资源实现高速计算。文献[8]首先考虑FPGA资源限制(如片上存储、寄存器、计算资源和外部存储带宽),之后为给定的CNN模型探索出基于 OpenCL 的最大化吞吐量的 FPGA加速器。文献[9]在FPGA上部署Winograd算法进行卷积加速。但以上利用FPGA的加速方法都未能利用卷积计算中的稀疏性。利用卷积计算中稀疏性的加速方法有文献[10],采用行固定的处理数据方式来利用稀疏性,当数据通道的输入为 0 值时直接不做处理。文献[11]利用并行矩阵乘法器完成卷积计算并充分利用了参数稀疏性。文献[12]把 Winograd算法和稀疏性进行结合减少卷积操作,改变 Winograd 作用域来利用稀疏性,Winograd算法计算快但对数据输入输出要求高,运用到FPGA上时存取速度成了限制因素。

本文以文献[13-14]中的线性脉动阵列为基础,对处理单元(PE)做细微的“不传不运算操作”控制,以实现对卷积计算稀疏性的利用。本文采用的线性脉动阵列主要有3个改进:①针对稀疏性的不传不运算操作;②针对卷积核矩阵的部分传输操作;③针对输出结果时的缓存减少策略(针对单输出线性脉动阵列)。本文主要从计算循环周期、存取操作类别和存取操作次数以及资源耗费情况来对比分析和证明,分析表明:改进后的2种线性脉动阵列不仅充分利用了稀疏性,而且不同程度地减少了I/O能耗需求。

2 问题描述

2.1 CNN稀疏性特点

CNN卷积层的卷积计算有一个激活函数,常用的激活函数Relu示意如图1所示。

图1

图1   Relu示意


经过Relu激活函数作用后,小于等于0的都变为0值,所以输出的特征图有很多0值存在。本文基于 Caffe 深度学习框架[15]进行实验,发现Alexnet、Googlenet、Caffenet和Vgg等卷积神经网络中都存在较大程度的稀疏性,如Alexnet各个卷积层的0值比例如图2所示。

图2

图2   Alexnet卷积层0值比例


为了利用稀疏性进行加速,本文把卷积过程转化为矩阵相乘,转化的方法是文献[16]中所用的Im2col,如图3所示。该方法存储空间要求增大但计算量(乘法和加法操作)没有变化,若能有效利用稀疏性使0值不参与运算,可以在速度上明显改进[17]

图3

图3   卷积转换为矩阵相乘


2.2 并行矩阵乘法器用于CNN加速

CNN卷积转换为矩阵相乘的方式后,可以采用FPGA上并行矩阵乘法器进行加速[11,12,13,14,15,16,17,18],如图4所示,改进为一个单列的P个PE的结构,在进行C=A×B(维度均为n×n)的矩阵乘法时, A每次送入一个元素进行乘加运算,并且被P个PE共享,A按照先行后列(如第一次送第1行第1列的元素,第二次送第1行第2列的元素)的顺序依次送入矩阵乘法器中;B按行的形式每次输入P个数据(如第一次送第 1 行的前P个元素,第二次送第 1 行接下来的P个元素)到矩阵乘法器,并与A中同一个数据进行乘加操作。

图4

图4   文献[11]的并行矩阵乘法器单列结构


上述方式在A每次输入时进行判断,为 0时不传进去进行乘加操作,因此该方式能很好地利用CNN的稀疏性。但存在两点不足:① 上述并行矩阵乘法器每个时刻(对于A输入为非0值时)都需要往每个PE中传入具体的值,一个并行矩阵乘法器就要使用2P个输入端口,带宽需求非常高;②该并行矩阵乘法器计算时A循环完一行就需要把B所有数据输入一遍,由于不存在复用关系,B矩阵每个数据都要从片上Cache 读取。从表1 可以看出[19],片内 SRAM Cache读取耗能是寄存器耗能的10倍,能量消耗较多,若能让输入数据在多个PE之间复用并采用能量消耗较低的寄存器间的传输(本文采用线性脉动阵列),则可降低耗能。

表1   45 nm CMOS 相关操作能量消耗

操作类型能量消耗/pJ能量消耗比例
32 bit int ADD0.11
32 bit float ADD0.99
32 bit Register File110
32 bit int MULT3.131
32 bit float MULT3.737
32 bit SRAM Cache550
32 bit DRAM Memory6406 400

新窗口打开| 下载CSV


3 改进的线性脉动阵列

为了弥补传统并行矩阵乘法器的缺点,并充分利用 CNN 计算中的稀疏性特点进行加速,本文基于文献[13-14]提出的线性脉动阵列进行了两方面改进,分别是单输出线性脉动阵列和多输出线性脉动阵列,具体如图5,图6,图7,图8所示。

图5

图5   单输出线性脉动阵列


图6

图6   PE内部结构示意


图7

图7   多输出线性脉动阵列


图8

图8   PE内部结构示意


单输出线性脉动阵列和多输出线性脉动阵列仅在输出时有差别,本文以单输出线性脉动阵列为例说明具体计算方式。对于n×n的矩阵,改进线性脉动阵列需要n个处理单元(PE)。矩阵乘法时,矩阵A以列的形式输入,B以行的形式输入, PEj完成C矩阵第 j列的计算以及存储。B矩阵中的值Bxj到达 PEj 后会被截取到其内部寄存器(即Bxj依次经过PE1,PE2,…,PEj−1,PEj),并保留一段时间。下面说明需要另外2个寄存器存储输入矩阵B的元素值,并且B矩阵要领先于A矩阵n个周期传输。

PEj在计算Cij=Cij+Aix×Bxj时,有2个必要要求:首先,对于任意的1≤i≤n,Bxj应早于Aix到达PEj;其次,等到A1xA2xAnx都通过PEj后才不用继续保留Bxj。对于第一个要求,一个极限情况,如Bln早于A11到达PEn,对于从PE1传输到PEn时需要2n个周期,A11传输到PEn需要n个周期,为保证满足要求,A开始传的时刻要落后B矩阵n个周期。下面说明上述特例需要n个周期的领先适用于任意的i(1≤i≤n)。当A开始传的时刻落后B矩阵n个周期时,Bxj传到PEj时的周期为(x−1)n+2j−1,对于任意的1≤i≤n, Aix到达PEj的周期为n+(x−1)n+i+j−1,比较并化简所需周期数得到结果为j<n+i。由于j<n+i显然成立,故B矩阵的传输要领先于A矩阵n个周期传输。对于第2个要求,本文从少到多依次增加寄存器数量,发现2个寄存器能够满足要求,下面进行说明。在2个寄存器的情况下,假设已经存了BxjB(x+1)j,现在B(x+2)j要取代BxjBxj能被取代的条件是Anx已经通过PEj,这说明Anx到达 PEj的周期数小于B(x+2)j到达 PEj的周期数。Anx到达PEj的周期数为n+(x−1)n+i+j−1,B(x+2)j到达PEj的周期数为(x+1)n+2j−1,由于n+(x−1)n+n+j−1小于(x+1)n+2j−1成立,所以需要另外2个寄存器存储输入矩阵B的元素值。

本文实验表明,CNN卷积核矩阵中0值很少而特征图矩阵0值非常多,稀疏性由特征图矩阵决定。上述结构中矩阵A的值要传输整个线性脉动阵列,矩阵B可以不传完。根据最大化稀疏性的特点,特征图矩阵以A形式传输,卷积核矩阵以B矩阵形式传输。本文的单输出线性脉动阵列相对于文献[13-14]有如下3方面的改进(多输出线性脉动阵列没有第3方面,具体改动在第4节说明)。

1) 对于有很多0值的输入特征图A矩阵,在传送之前进行判定,为非0值时传入,当为0值时,该周期直接不传,相当于执行一个空操作,于是,就少n次(线性脉动阵列的PE数量)传输操作、n次乘操作和n次加操作。判断用到比较器,根据文献[11],在FPGA中比较器可通过LUT构建,相比于需要利用DSP48E完成的乘加操作,增加的判断操作所需时间以及耗能很少。

2) 卷积核矩阵B在进行传送时可以不用传遍整个线性脉动阵列,B11传送到PE1时被存储,继续往后传没有意义,因为后面的 PE 单元不再用B11。为此,本文改进B矩阵的传输模式,当Bxj传输到 PEj时,进行类似“剪切”加“粘贴”的操作,把Bxj的值放进 PEj 的寄存器后不再传送Bxj的值。对于该操作,Bx1少传了n−1次,Bx2少传了 n−2 次,依次类推一行共减少1+2++(n1)=n2(n1)2次传输操作,B矩阵减少n2(n1)2次寄存器间的传输操作。

3) 对于输出矩阵,为了实现最后输出能和乘加运算同时运行,文献[13,14]采用Cobuf和Cbuf 2个n byte(深度)SRAM Cache。本文只采用一个n深度的 SRAM Cache,同时保证运算和传输不冲突。当然,本文 PE 内 Cache要能同时满足中间结果以及最终结果的存取需要4端口,FPGA中没有直接的4端口SRAM,可以通过加控制器控制多个全双端口BRAM达到要求[20]。下面结合图9说明一个Cache就能满足运算和传输不冲突的要求。

图9以3×3的矩阵乘法进行示例说明。“√”代表得出最后的计算结果且下一个周期进行传输,“←”代表传送方向,“有”代表该位置有值继而下一个周期往前传,“空”代表该位置已经把值传送出去。例如,第1周期内完成了C11的最终计算,第2周期把C11直接传送出去,同时完成C21C12的计算而不影响C11的传输。第 3 周期把C21直接传送出去,同时把PE2中的C12传输到 PE1中,此周期完成 3个结果的最终计算。该模式下 PE 传输数据按照从上到下的顺序依次循环进行,如第4周期时, PE1中已经有 2 个待传的数据(第 3 周期结束时 PE1 中的“有”和“√”),但此时按照从上到下只传最下面的一个规则,从得出第一个最终值开始,往后的每个时刻都能往外输出矩阵C的一个值,第 10 周期完成所有值的传输,这期间计算可以和传输同时进行而不会有冲突。图10给出单输出线性脉动阵列完成3× 3矩阵乘法。

4 单输出线性脉动阵列性能分析

本文所用的单输出线性脉动阵列和文献[11]的并行矩阵乘法器的对比从3个方面进行:计算循环周期、存取操作类别和存取操作次数以及资源耗费情况。下面依次进行说明(接下来分析针对没有0值的情况,为0值时对应线性脉动阵列的第一个方面改进)。

4.1 计算循环周期

对于由n个PE完成的n × n的矩阵乘法,单输出线性脉动阵列共需要2n2+1个周期完成所有操作(从开始输入到输出所有数据)。

本文把所有操作分为2个阶段,2个阶段以A1n开始传入分界点,A1n开始传入线性脉动阵列时已进行的周期数为n+(n−1)n+1+1−1=n2+1,之后每个周期输出一个值到线性脉动阵列外部,共需要n2个周期,总共所需周期数为2 2n +1。

对于并行矩阵乘法器,当有n个处理单元时,由于每个周期从A输入端口只输入一个数据,所以共需要n2个周期完成所有操作。时间上来说,单输出线性脉动阵列是并行矩阵乘法器的2倍。

4.2 存取操作类别和存取操作次数

单输出线性脉动阵列和并行矩阵乘法器在完成n×n的矩阵乘法时,要从片外内存取数据到片内缓存以及反向的存操作,这部分操作是一致的,另外,每个PE内部深度为n的SRAM Cache存取中间结果也是一致的。

对于单输出线性脉动阵列,从 PE 外 Cache输入数据时,每个数据只输入一次,即2n2次Cache到寄存器操作,之后在线性脉动阵列PE的内部寄存器之间传输,A矩阵每个数据都要传遍所有PE(即一个数据要在寄存器间传n 1− 次),总计n2(n-1)次寄存器之间传输操作,B矩阵数据由于“截取”操作,一行的各个数据所有传输的次数不一样,总计n2(n1)2次寄存器间传输操作,B 矩阵加起来总计3n2(n1)2寄存器间传输操作。往外存时都是在 SRAM 中进行的,共 n+2n++n2=n2(n+1)2次寄存器间传输操作。

图9

图9   单Cache传输情况


图10

图10   单输出线性脉动阵列实现矩阵乘法操作过程


对于并行矩阵乘法器,n×n的A矩阵每个数据每次都要读取n次(n个PE每次共用一个A中的值),即读取 PE 外 Cache 中数据存到 PE 内寄存器的操作总计n3次。A矩阵一行循环完,就把B矩阵读取一遍(即n2次读取操作),所以B矩阵共需要n×n2=n3次读操作,AB加起来为2n3。从PE内深度为n的SRAM Cache存数据到外部Cache的次数为n2,对比情况如表2所示。

表2   单输出线性脉动阵列和并行矩阵乘法器存取操作类别和存取操作次数对比

操作类别存取操作次数
单输出线性脉动阵列并行矩阵乘法器
片外→片内及片内→片外一致一致
PE外Cache→PE内寄存器2n22n3
PE内部寄存器→寄存器3n2(n1)2
存取中间结果Cache操作一致一致
输出时Cache操作n2(n1)2n2

新窗口打开| 下载CSV


从上述对比可以看出,二者的数据搬移量相等。从能量方面看, PE外Cache到PE内寄存器传输操作以及输出时的 Cache 操作可以视为从SRAM读取数据的能量消耗,可以进行合并。差别如下:单输出线性脉动阵列独有3n2(n1)2次寄存器到寄存器的传输操作,而并行矩阵乘法器多3n2(n1)2次SRAM读取操作。从表1看出,寄存器读和SRAM读的能量消耗是 1 和 10 的关系,即并行矩阵乘法器多(51)3n2(n1)2=6n2(n1)pJ能量。

4.3 资源耗费情况

改进的线性脉动阵列B输入需要额外的2个寄存器,相比并行矩阵乘法器多消耗2n个寄存器(都是几个PE情况下)。如表3所示,并行矩阵乘法器的FF(寄存器)消耗量是比较少的,不是主要的资源限制因素,影响可以不予考虑。

表3   并行矩阵乘法器用于Alexnet卷积加速时的FPGA内部资源使用情况

资源类别总使用量可利用总量利用率
BRAM_18K1 4582 06070.78%
DSP48E1 7922 80064.00%
FF1 792607 20028.12%
LUT142 304303 60046.87%

新窗口打开| 下载CSV


从 I/O 端口来看,单输出线性脉动阵列只需3 个端口,而并行矩阵乘法器需要n+n+n=3n个端口,对于n较大的情况,端口消耗以及带宽要求差异非常明显。从资源消耗来看,单输出线性脉动阵列虽然使用较多的 FF 资源,但却很大程度上减少了I/O端口量及带宽要求。

4.4 与并行矩阵乘法器对比

单输出线性脉动阵列和并行矩阵乘法器各有优缺点,具体的对比分析如表4所示。从表4可以看出,虽然时间耗费增多,但本文单输出的线性脉动阵列很好地弥补了传统的并行矩阵乘法器带宽要求太大的问题。

表4   单输出线性脉动阵列和并行矩阵乘法器对比

单输出线性脉动阵列并行矩阵乘法器
周期2n2+1n2
存取操作差异次数3n2(n1)23n2(n1)2
(寄存器读)(SRAM读)
寄存器消耗多2n
I/O端口及带宽33n

新窗口打开| 下载CSV


5 多输出线性脉动阵列性能分析

当结合具体CNN模型(如Alexnet)进行分析时,卷积核矩阵以及输入特征图矩阵太大,需要进行分块操作。文献[11]的单列并行矩阵乘法器用于 Alexnet 卷积加速时采用了 448(14×32)个PE,为更好地进行理论上的对比,本文也采用14个并行的线性收缩阵列,每个有32个PE。为了有直观上的认识,把 Alexnet 各卷积层矩阵分块为大小为32×32的小矩阵后的情况列举出来以方便后面的分析,具体如表5所示。

表5   Alexnet各卷积层矩阵分块

卷积层原始大小分块
卷积层1(3 025×363)×(363×96)(95×12)×(12×3)
卷积层2(729×1200)×(1200×256)(23×38)×(38×8)
卷积层3(169×2 304)×(2 304×384)(6×72)×(72×12)
卷积层4(169×1 728)×(1 728×384)(6×54)×(54×12)
卷积层5(169×1 728)×(1 728×256)(6×54)×(54×8)

新窗口打开| 下载CSV


分块后一个很重要的想法是进一步复用和并行流水线。14个并行的线性脉动阵列可以同时进行矩阵乘法计算,分块矩阵乘法有以下2种(如图11所示):第一种是为了在乘法完成后方便进行相加;第二种是为了实现对分块矩阵的复用,设置多级缓存可以进一步减少数据搬移量。

图11

图11   线性脉动阵列2种分块矩阵乘法方式


线性脉动阵列计算只是占了整个过程的一部分,如图10中前3后5个周期都没有计算操作,单纯的传输时间占用不少。除了复用,还可以采用流水线设计。A起始传输是落后B矩阵n个周期的,按常理可以把AB矩阵传输时无缝结合,第一个分块矩阵乘法在传最后一列A矩阵元素时也传输下一个分块矩阵乘法的B矩阵的第一行,这样除了最开始和最后的分块矩阵传输时是单线输入外(最开始的n周期只有B输入,最后的n周期只有A输入),其他时刻都是双线输入。但上述想法实施起来会出现矛盾,因为最后输出时是n2个周期,大于n个周期的错位,直接无缝传输时前一个分块矩阵乘法结果还没有输出到PE 外第二个分块矩阵乘法的中间结果就要存到PE内Cache,这样就会有冲突。为了进一步利用流水线,可以把最终结果尽快输出到 PE 外的Cache,即用n输出端口加快数据输出到 PE 外Cache,这样就能做到无缝输入,本文把这种对单输出线性脉动阵列和并行矩阵乘法器的整合改进称为多输出(“多”体现在输出端口)线性脉动阵列。这种多输出线性脉动阵列最后完成所有分块矩阵乘法的周期变为xn2+2n(x指单个PE所进行的分块矩阵乘法的个数),而并行矩阵乘法器为xn2,当以表5的Alexnet第一个卷积层分块情况来具体比较时(此时x的值为92×12×314=245n的值为32),两者的倍数关系为1.0003倍,相比之下几乎没有差别。

另外,采用这种方式的存取操作类别和存取操作次数相比单输出线性脉动阵列只有输出时的Cache 操作有变化,变成和并行矩阵乘法器一样的n2。这种多输出线性脉动阵列和并行矩阵乘法器完成一个分块矩阵乘法的对比结果如表6 所示,其中多输出线性脉动阵列的周期是平均值,参数x指单个 PE 所要完成的分块矩阵乘法的个数。三者的特点总结如表7所示。

表6   多输出线性脉动阵列和并行矩阵乘法器存取操作类别和存取操作次数对比

多输出线性脉动阵列并行矩阵乘法器
周期xn2+2nxn2
存取操作差异次数3n2(n1)22n 2(n−1) (SRAM读)
(寄存器读)
寄存器消耗多2n
I/O端口及带宽2+n3n

新窗口打开| 下载CSV


表7   改进的线性脉动阵列和并行矩阵乘法器特点

改进方案特点
文献[11]并行矩阵乘法器带宽要求最大但周期最少,耗能最多
单输出线性脉动阵列带宽要求最小但周期最多,耗能次之
多输出线性脉动阵列带宽、周期处于前两者之间,耗能最少

新窗口打开| 下载CSV


相比单输出线性脉动阵列,多输出线性脉动阵列的最大优点是周期数大幅减少。相比并行矩阵乘法器,该方式仍然具有带宽的优势。具体应用场景方面,由于线性脉动阵列能利用输入中全部稀疏性(AB中任意一者的稀疏性都能利用),对于像文献[19]中剪枝技术应用后带来的卷积核稀疏性,此时线性脉冲阵列的优势明显大于并行矩阵乘法器(并行矩阵乘法器只能利用某一方输入中稀疏性)。

6 结束语

本文针对CNN计算稀疏性的特点以及文献[11]所述的传统并行矩阵乘法器用于 CNN 加速的局限性,对文献[13-14]的线性脉动阵列提出了2种改进——单输出以及多输出线性脉动阵列,用于CNN嵌入式端的加速。文献[11]提出的并行矩阵乘法器直接作用于 CNN 加速时所需带宽太大,而线性脉动阵列正好能弥补该缺陷。单输出线性脉动阵列和并行矩阵乘法器对比有耗能以及 I/O端口少的优势,但计算周期却是2倍的关系,所以本文进一步改进线性脉动阵列,提出了多输出线性脉动阵列。对比来看,多输出方式的周期及I/O 需求介于两者之间,很好地解决了前两者的突出缺陷问题,可行性最高。本文所进行的对比分析只是理论上说明,如何最佳组合以及最充分利用资源并实现是下一步的工作。

The authors have declared that no competing interests exist.
作者已声明无竞争性利益关系。

参考文献

CHEN Y H , KRISHNA T , EMER J S ,et al.

Eyeriss:an energy-efficient reconfigurable accelerator for deep convolutional neural networks

[J]. IEEE Journal of Solid-State Circuits, 2017,52(1): 127-138.

[本文引用: 1]

刘勤让, 刘崇阳 .

利用参数稀疏性的卷积神经网络计算优化及其FPGA加速器设计

[J]. 电子与信息学报, 2018,40(6): 1368-1374.

[本文引用: 9]

LIU Q R , LIU C Y .

Calculation optimization for convolutional neural networks and FPGA-based accelerator design using the parameters sparsity

[J]. JEIT, 2018,40(6): 1368-1374.

[本文引用: 9]

LIU X , HAN S , MAO H ,et al.

Efficient sparse-winograd convolutional neural networks

[C]// International Conference on Learning Representations. 2017.

[本文引用: 2]

JANG J W , CHOI S B , PRASANNA V K .

Energy-and time-efficient matrix multiplication on FPGAs

[J]. IEEE Transactions on Very Large Scale Integration (VLSI) Systems, 2005,13(11): 1305-1319.

[本文引用: 6]

MATAM K K , LE H , PRASANNA V K .

Energy efficient architecture for matrix multiplication on FPGAs

[C]// International Conference on Field Programmable Logic and Applications. 2013: 1-4.

[本文引用: 6]

JIA Y , SHELHAMER E , DONAHUE J ,et al.

Caffe:convolutional architecture for fast feature embedding

[C]// The 22nd ACM International Conference on Multimedia. 2014: 675-678.

[本文引用: 2]

JIA Y Q .

Optimzing conv in caffe

[R].

[本文引用: 2]

MOONS B , DE BRABANDERE B , VAN GOOL L ,et al.

Energy-efficient convnets through approximate computing

[C]// Applications of Computer Vision. 2016: 1-8.

[本文引用: 2]

田翔, 周凡, 陈耀武 ,.

基于 FPGA 的实时双精度浮点矩阵乘法器设计

[J]. 浙江大学学报(工学版), 2008,42(9): 1611-1615.

[本文引用: 1]

TIAN X , ZHOU F , CHEN Y W ,et al.

Design of field programmable gate array based real-time double-precision floating-point matrix multiplier

[J]. Journal of Zhejiang University (Engineering Science), 2008,42(9): 1611-1615.

[本文引用: 1]

HAN S , POOL J , TRAN J ,et al.

Learning both weights and connections for efficient neural network

[C]// Annual Conference on Neural Information Processing Systems. 2015: 1135-1143.

[本文引用: 2]

HAN S , MAO H , DALLY W J .

Deep compression:compressing deep neural networks with pruning,trained quantization and huffman coding

[J]. Fiber, 2015,56(4): 3-7.

[本文引用: 1]

QIU J , WANG J , YAO S ,et al.

Going deeper with embedded FPGA platform for convolutional neural network

[C]// International Symposium on Field-Programmable Gate Arrays. 2016: 26-35.

[本文引用: 1]

SABOUR S , FROSST N , HINTON G E .

Dynamic routing between capsules

[C]// Annual Conference on Neural Information Processing Systems. 2017.

[本文引用: 1]

HAN S , LIU X , MAO H ,et al.

EIE:efficient inference engine on compressed deep neural network

[J]. ACM Sigarch Computer Architecture News, 2016,44(3): 243-254.

[本文引用: 1]

CHEN W , WILSON J , TYREE S ,et al.

Compressing neural networks with the hashing trick

[C]// International Conference on Machine Learning. 2015: 2285-2294.

[本文引用: 1]

MA Y , CAO Y , VRUDHULA S ,et al.

Optimizing loop operation and dataflow in FPGA acceleration of deep convolutional neural networks

[C]// International Symposium on Field-Programmable Gate Arrays. 2017: 45-54.

[本文引用: 1]

LI N , TAKAKI S , TOMIOKAY Y ,et al.

A multistage dataflow implementation of a deep convolutional neural network based on FPGA for high-speed object recognition

[C]// 2016 IEEE Southwest Symposium on Image Analysis and Interpretation. 2016: 165-168.

[本文引用: 1]

SUDA N , CHANDRA V , DASIKA G ,et al.

Throughput-optimized openCL-based FPGA accelerator for large-scale convolutional neural networks

[C]// International Symposium on Field-Programmable Gate Arrays. 2016: 16-25.

[本文引用: 1]

XIAO Q , LIANG Y , LU L ,et al.

Exploring heterogeneous algorithms for accelerating deep convolutional neural networks on FPGAs

[C]// The 54th Annual Design Automation Conference. 2017: 62-67.

[本文引用: 1]

LAI B C C , LIN J L .

Efficient designs of multi-ported memory on FPGA

[J]. IEEE Transactions on Very Large Scale Integration (VLSI) Systems, 2017,25(1): 139-150.

[本文引用: 1]

CHEN J , LI J .

The research of peer-to-peer network security

[C]// The International Conference on Information Computing and Automation. 2015: 590-592.

/