CN104915322B - 一种卷积神经网络硬件加速方法 - Google Patents
一种卷积神经网络硬件加速方法 Download PDFInfo
- Publication number
- CN104915322B CN104915322B CN201510312090.2A CN201510312090A CN104915322B CN 104915322 B CN104915322 B CN 104915322B CN 201510312090 A CN201510312090 A CN 201510312090A CN 104915322 B CN104915322 B CN 104915322B
- Authority
- CN
- China
- Prior art keywords
- matrix
- convolution
- operand
- row
- data
- 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.)
- Active
Links
Landscapes
- Complex Calculations (AREA)
Abstract
本发明公开了一种卷积神经网络硬件加速方法,方法步骤包括:1)将卷积层运算转换为m行K列的矩阵A、K行n列的矩阵B的矩阵乘;2)将矩阵结果C分为m行n列个矩阵子块;3)启动矩阵乘法器预取矩阵子块的操作数;4)矩阵乘法器执行矩阵子块的计算并将结果写回主存。本发明能够支持各种卷积神经网络结构,具有计算效率和性能高、对片上存储资源以及片外存储带宽需求较少、通信开销小、单元部件升级与改进方便、通用性好的优点。
Description
技术领域
本发明涉及卷积神经网络的硬件加速技术,具体涉及一种卷积神经网络硬件加速方法。
背景技术
下一代智能设备处理器的核心挑战是要能够感知和理解人类的世界以提供增强用户体验和连接用户喜好的生态环境、能和用户进行类似于人类的交互。卷积神经网络(Convolution Neural Network,CNN)就是一种代表当前最先进发展水平的感知模型之一,该模型能够将原始输入的数据逐层解析为符号,提取出复杂的多层组合特征,在机器视觉和听觉系统方面取得了巨大的成功和广泛的应用,2013年MIT Technology Review杂志将以卷积神经网络为代表的深度学习评为十大突破性技术之首。卷积神经网络算法是受到人的视觉系统的启发,利用卷积操作来模拟真实神经元的感受野。深度神经网络的计算非常密集,在目标检测等应用中(正向分类检测,而非训练),可以轻松突破Gops,达到数十Gops-Tops的计算能力,因此利用深度神经网络进行实时分类检测都只能依靠高性能多核CPU和GPU来完成,对受限于功耗的智能设备(例如机器人,UAV,消费电子,智能汽车,智能监控系统等)而言,这些处理器能耗过于高昂而使得这些应用几乎是不可能任务。相比较使用通用器件,构建专用加速电路,是满足卷积神经网络应用(CNN应用)性能与功耗需求的一条可行之路。通常硬件加速器部件在性能与功耗上均优于通用处理器,约有100x以上的能效提升。
智能设备的核心多为片上系统,片上系统(SoC,System on Chip)是指:Host处理器、专用电路、外设控制器集成在一块芯片上所构成的异构系统,能够根据用户需求进行定制。随着微电子技术的发展,一块芯片内部可以集成很多器件,这种在一块可编程芯片上集成的系统称为SoC。由于SoC的规模非常庞大,涉及工作量很大,因此对已经设计好的模块进行重复使用十分必要,解决这个问题的一个方法是使用IP核(Intellectual PropertyCore)。IP核在集成电路领域指已经过验证的、可重复利用的并具有确定功能的集成电路模块。IP核的使用可以大大降低设计时间、成本,提高设计效率。现有百万门以上的芯片70%的模块是IP核的重复使用。通常,在普通智能设备中的SoC系统对计算量的要求并不高,主要依靠Host处理器,少量应用还会用到集成的通用加速器,如向量单元,MGPU等。但新兴应用对SoC的计算能力以及能耗要求日益增加,而通用微处理器的体系结构已经逐渐不适合这类应用了。
由于CNN应用对处理速度的要求较高,SoC中的通用微处理器并不能满足其能效要求,必须构建专用加速电路IP核。若采用集成专用硬件加速器IP核的SoC设计,目前通常采用如下两种方案:一是ASIC(专用集成电路,Application-Specific Integrated Circuit)投片;二是FPGA(现场可编程门阵列,Field Programmable Gate Array)。ASIC投片需要大量的资金和人力资源,且不可修改。而采用FPGA既能获得有关硬件实现的参数又具有灵活性,并且克服了ASIC设计周期长和投资大的缺点,是比较理想的选择。近年来FPGA业界龙头厂商Altera及Xilinx均推出了基于ARM处理器的FPGA SoC解决方案。AXI总线是目前基于ARM处理器的SoC总线标准。由于ARM处理器的广泛使用,目前采用AXI总线标准的IP核以其灵活易用性被广泛采用。因此,构建基于AXI总线的卷积神经网络加速器IP核对于新兴的嵌入式视觉应用有着较大的意义。
发明内容
本发明要解决的技术问题是:针对现有技术的上述问题,提供一种能够支持各种卷积神经网络结构、计算效率和性能高、对片上存储资源以及片外存储带宽需求较少、通信开销小、单元部件升级与改进方便、通用性好的卷积神经网络硬件加速方法。
为了解决上述技术问题,本发明采用的技术方案为:
本发明提供一种卷积神经网络硬件加速方法,步骤包括:
1)预先将卷积运算的输入特征图排列组成矩阵A,将卷积运算的输出特征图对应的卷积核排列组成矩阵B,将卷积神经网络卷积层的卷积运算转换为m行K列的矩阵A、K行n列的矩阵B的矩阵乘运算;
2)将矩阵乘运算的矩阵结果C分为m行n列个矩阵子块;
3)启动和主处理器相连的矩阵乘法器来对所有矩阵子块进行计算;在对矩阵子块进行计算时,所述矩阵乘法器以数据驱动的方式产生矩阵坐标(Bx,By)形式的数据请求,将矩阵坐标(Bx,By)映射为操作数在输入特征图中的真实主存地址read_addr,从主存中读回操作数;
4)矩阵乘法器根据读回的操作数执行每一个矩阵子块的并行计算,并将计算结果写回主存。
优选地,所述步骤1)中将卷积运算的输入特征图排列组成矩阵A具体是指将卷积运算的每一个输入特征图的所有卷积窗口进行横向拼接,所述横向拼接具体是指先将每一个卷积窗口组织成一个列向量,再将这些列向量拼接成矩阵A的一个行分块,然后将各个特征图的行分块进行纵向拼接成为A矩阵;将卷积运算的输出特征图对应的卷积核排列组成矩阵B具体是指将卷积运算的每一个输出特征图对应的卷积核作为矩阵B的一行。
优选地,所述步骤2)具体是指根据式(1)将矩阵乘运算的矩阵结果C分为m行n列个矩阵子块;
式(1)中,C表示矩阵乘运算的矩阵结果,A表示m行K列的矩阵A,Ai表示矩阵A中的第i行,B表示K行n列的矩阵B,Bi表示矩阵B中的第i行,Ci,j表示矩阵乘运算的矩阵结果C的第i行j列个矩阵子块。
优选地,所述步骤3)中将矩阵坐标(Bx,By)映射为操作数在输入特征图中的真实主存地址read_addr的步骤包括:
3.1)接收数据请求(Bx,By)以及参数卷积核尺寸Ksize、卷积窗口数目win_num、卷积窗口偏移stride、特征图大小image_size以及第一个输入特征图的首地址img_addr;将数据请求的行坐标Bx对卷积核尺寸Ksize进行除法运算得到余数操作数在卷积窗口中的列偏移ofs_cwin_y和商temp;同时,将数据请求的列坐标By除以卷积窗口数目win_num得到商卷积窗口在特征图中的行偏移cwin_x和余数卷积窗口在特征图中的列偏移cwin_y;
3.2)将商temp除以卷积核尺寸Ksize得到商操作数在卷积窗口中所属的特征图编号im_num和余数操作数在卷积窗口中的行偏移ofs_cwin_x;同时,将卷积窗口在特征图中的列偏移cwin_y乘以操作数在卷积窗口中的偏移stride、再加上操作数在卷积窗口中的偏偏移ofs_cwin_y得到操作数在特征图像中的列偏移img_y;
3.3)将操作数在卷积窗口中所属的特征图编号im_num乘以特征图大小image_size的平方得到所属特征图像的偏移ofs_im;同时,将卷积窗口在特征图中的行偏移cwin_x乘以操作数在卷积窗口中的偏移stride、再加上操作数在卷积窗口中的行偏移ofs_cwin_x得到操作数在特征图像中的行偏移img_x;
3.4)将操作数在特征图像中的行偏移img_x乘以特征图大小image_size、再加上操作数在特征图像中的列偏移img_y得到操作数在特征图像中的偏移ofs_pix;
3.5)将操作数在特征图像中的偏移ofs_pix加上第一个输入特征图的首地址img_addr、再加上所属特征图像的偏移ofs_im得到操作数在主存中的真实存储地址read_addr。
优选地,所述步骤4)中的详细步骤包括:
4.1)初始化变量k为0;
4.2)将当前矩阵子块Cij对应矩阵A的条状分块Ai的当前子列Aik以流的方式依次传给矩阵乘法器中的各个处理单元,每个处理单元缓存当前子列Aik中自身编号对应的部分数据Aik[n],其中n为处理单元的编号;预取下一个子列Aik的数据;
4.3)将当前矩阵子块Cij对应矩阵B的条状分块Bj的长度为m的当前子列Bjk以流的方式依次传给各个处理单元,每一个处理单元在接收到子列Bjk中的每一个数据Bjk[m]时,将收到的数据Bjk[m]和缓存的部分数据Aik[n]通过乘法器相乘并与该处理单元的缓存C_BUFF[m]中存储的结果进行累加并存回至缓存C_BUFF[m];
4.4)判断变量k的值是否等于K-1,其中K为矩阵A的列数;当变量k的值等于K-1时,跳转执行下一步;否则,将变量k加1,并跳转执行步骤4.2);
4.5)每一个处理单元将最后一次累加得到的计算结果依次输出并最终写回主存。
优选地,本发明还包括对卷积神经网络的全连接层加速的步骤,详细步骤包括:将卷积神经网络的全连接层的多个矩阵-向量乘转换为矩阵-矩阵乘,将矩阵-矩阵乘通过矩阵乘法器进行合并运算。
本发明的卷积神经网络硬件加速方法具有下述优点:
1、传统的CNN加速器结构往往针对某一种固定的CNN结构来设计,缺乏灵活性。比如基于卷积器部件构成的一类加速器,由于卷积器一般只支持固定规模的卷积核尺寸,而导致无法适配其他规模的网络。为了解决此问题,本发明首次在硬件加速器上采用将CNN中的卷积操作转化成矩阵乘的方法,将矩阵乘运算的矩阵结果C分为m行n列个矩阵子块,使得将各种不同规模的CNN卷积操作转化为更加规整的矩阵乘,矩阵乘法器在对矩阵子块进行计算时,流映射器以数据驱动的方式产生矩阵坐标形式的数据请求(Bx,By),将数据请求(Bx,By)映射为操作数在主存中的真实存储地址read_addr,从主存中读回操作数,矩阵乘法器根据读回的操作数执行每一个矩阵子块的并行计算,并将计算结果写回主存,因此能更好的以细粒度挖掘计算中存在的并行性,并使该加速器能对不同网络结构保持相对独立,具有更好的适应性与灵活性。
2、本发明采用的矩阵式结构可以高效支持各种不同的卷积神经网络结构,尤其是面向规模较大的现代深度卷积神经网络结构,计算效率较好,并且对片上存储资源以及片外存储带宽需求较少。
3、本发明采用的数据组织-计算分离的两段式结构,可以有效隐藏通信开销,充分利用计算单元的性能,这种结构较为清晰,有利于单元部件的升级与改进。
附图说明
图1为本发明实施例方法的流程示意图。
图2为本发明实施例方法中将卷积运算转换为矩阵乘运算的数据举例示意图。
图3为本发明实施例方法中将矩阵结果划分矩阵子块的原理示意图。
图4为本发明实施例方法中将数据请求映射为真实存储地址的伪代码示意图。
图5为本发明实施例方法步骤4)的流程示意图。
图6为本发明实施例方法对全连接层的加速原理示意图。
图7为应用本发明实施例AXI总线IP核的Host主机系统示意图。
图8为本发明实施例AXI总线IP核的流映射器的流水结构示意图。
图9为本发明实施例AXI总线IP核中处理单元的逻辑结构示意图。
图10为本发明实施例AXI总线IP核中处理单元的工作流程示意图。
图11为本发明实施例AXI总线IP核中预取单元的结构示意图。
图12为本发明实施例AXI总线IP核的整体工作过程示意图。
具体实施方式
如图1所示,本实施例的卷积神经网络硬件加速方法步骤包括:
1)预先将卷积运算的输入特征图排列组成矩阵A,将卷积运算的输出特征图对应的卷积核排列组成矩阵B,将卷积神经网络卷积层的卷积运算转换为m行K列的矩阵A、K行n列的矩阵B的矩阵乘运算;
2)将矩阵乘运算的矩阵结果C分为m行n列个矩阵子块;
3)启动和主处理器相连的矩阵乘法器来对所有矩阵子块进行计算;在对矩阵子块进行计算时,矩阵乘法器以数据驱动的方式产生矩阵坐标(Bx,By)形式的数据请求,将矩阵坐标(Bx,By)映射为操作数在输入特征图中的真实主存地址read_addr,从主存中读回操作数;
4)矩阵乘法器根据读回的操作数执行每一个矩阵子块的并行计算,并将计算结果写回主存。
相比较于直接加速卷积运算,将卷积运算展开为矩阵运算可以弱化网络结构对和加速器结构不匹配带来的影响。本实施例中,步骤1)中将卷积运算的输入特征图排列组成矩阵A具体是指将卷积运算的每一个输入特征图的所有卷积窗口进行横向拼接,所述横向拼接具体是指先将每一个卷积窗口组织成一个列向量,再将这些列向量拼接成矩阵A的一个行分块,然后将各个特征图的行分块进行纵向拼接成为A矩阵;将卷积运算的输出特征图对应的卷积核排列组成矩阵B具体是指将卷积运算的每一个输出特征图对应的卷积核作为矩阵B的一行。对于由卷积操作转化来的矩阵乘来说,其基本的乘加运算均和原卷积运算一一对应且总数一致,其相对应的操作数也是一一对应的。所以在进行矩阵乘运算时,通过将链式DMA所发出的对矩阵数据的请求映射为所对应的卷积数据,虽然矩阵乘法器仅完成了矩阵乘的运算,但计算出的数据与卷积结果相同。如图2所示,其中(A)为直接进行卷积计算过程,输入特征图像X0,X1,X2分别与相应的卷积核卷积并相加后得到输出特征图像Y0,Y1;(B)为将卷积运算展开为矩阵乘运算的计算过程。首先将输入特征图(本实施例为X0,X1,X2),重新排列成输入特征图矩阵,输入特征图矩阵由3个block组成,第一个block有4列[X0[00],X0[01],X0[10],X0[11]]T,[X0[01],X0[02],X0[11],X0[12]]T,[X0[10],X0[11],X0[20],X0[21]]T,[X0[11],X0[12],X0[21],X0[22]]T分别对应图像X0的4个卷积窗口,第二个block对应图X1的4个卷积窗口,第三个block对应图X2的4个卷积窗口。卷积核矩阵的第一行为生成输出图像Y0的3个卷积核K0q(q=0,1,2),第二行为生成输出特征图Y1的3个卷积核K1q(q=0,1,2)。然后计算这两个矩阵的乘积得到输出特征图矩阵。输出特征图矩阵的每一行为一个输出特征图,这个过程和直接进行卷积运算结果是一样的。一般而言,卷积运算输出的图像在计算机中存储的格式为二维数组,其实就是矩阵,所以输出特征图原本就是以矩阵形式存储的,并不用进行重排,而卷积核的矩阵存储方式可以规定按卷积核矩阵的格式存储,因此实质上一般只有输入特征图和输入特征图矩阵需要硬件部件加以映射。
由于对于大规模矩阵来说,由于资源限制,不可能一次计算出最终结果,必须将目标矩阵分块计算。本实施例中,步骤2)具体是指根据式(1)将矩阵乘运算的矩阵结果C分为m行n列个矩阵子块;
式(1)中,C表示矩阵乘运算的矩阵结果,A表示m行K列的矩阵A,Ai表示矩阵A中的第i行,B表示K行n列的矩阵B,Bi表示矩阵B中的第i行,Ci,j表示矩阵乘运算的矩阵结果C的第i行j列个矩阵子块。如图3所示,(a)图为本实施例中将矩阵乘运算的矩阵结果C分为m行n列个矩阵子块的原理示意图,(b)(c)(d)为本实施例中计算矩阵结果C的第一个子块的过程示意图。
如图4所示,本实施例步骤3)中将数据请求(Bx,By)映射为操作数在主存中的真实存储地址read_addr步骤包括:
3.1)接收数据请求(Bx,By)以及参数卷积核尺寸Ksize、卷积窗口数目win_num、卷积窗口偏移stride、特征图大小image_size以及第一个输入特征图的首地址img_addr;将数据请求的行坐标Bx对卷积核尺寸Ksize进行除法运算得到余数操作数在卷积窗口中的列偏移ofs_cwin_y和商temp;同时,将数据请求的列坐标By除以卷积窗口数目win_num得到商卷积窗口在特征图中的行偏移cwin_x和余数卷积窗口在特征图中的列偏移cwin_y;
3.2)将商temp除以卷积核尺寸Ksize得到商操作数在卷积窗口中所属的特征图编号im_num和余数操作数在卷积窗口中的行偏移ofs_cwin_x;同时,将卷积窗口在特征图中的列偏移cwin_y乘以操作数在卷积窗口中的偏移stride、再加上操作数在卷积窗口中的偏偏移ofs_cwin_y得到操作数在特征图像中的列偏移img_y;
3.3)将操作数在卷积窗口中所属的特征图编号im_num乘以特征图大小image_size的平方得到所属特征图像的偏移ofs_im;同时,将卷积窗口在特征图中的行偏移cwin_x乘以操作数在卷积窗口中的偏移stride、再加上操作数在卷积窗口中的行偏移ofs_cwin_x得到操作数在特征图像中的行偏移img_x;
3.4)将操作数在特征图像中的行偏移img_x乘以特征图大小image_size、再加上操作数在特征图像中的列偏移img_y得到操作数在特征图像中的偏移ofs_pix;
3.5)将操作数在特征图像中的偏移ofs_pix加上第一个输入特征图的首地址img_addr、再加上所属特征图像的偏移ofs_im得到操作数在主存中的真实存储地址read_addr。
如图5所示,本实施例步骤4)中的详细步骤包括:
4.1)初始化变量k为0;
4.2)将当前矩阵子块Cij对应矩阵A的条状分块Ai的当前子列Aik以流的方式依次传给矩阵乘法器中的各个处理单元(PE),每个处理单元缓存当前子列Aik中自身编号对应的部分数据Aik[n],其中n为处理单元的编号;预取下一个子列Aik的数据;
4.3)将当前矩阵子块Cij对应矩阵B的条状分块Bj的长度为m的当前子列Bjk以流的方式依次传给各个处理单元,每一个处理单元在接收到子列Bjk中的每一个数据Bjk[m]时,将收到的数据Bjk[m]和缓存的部分数据Aik[n]通过乘法器相乘并与该处理单元的缓存C_BUFF[m]中存储的结果进行累加并存回至缓存C_BUFF[m];
4.4)判断变量k的值是否等于K-1,其中K为矩阵A的列数;当变量k的值等于K-1时,跳转执行下一步;否则,将变量k加1,并跳转执行步骤4.2);
4.5)每一个处理单元将最后一次累加得到的计算结果依次输出并最终写回主存。
需要说明的是,本实施例是基于大小写敏感的编程语言实现的,因此变量k(小写)和矩阵A的列数K(大写)指代的并非是同一数值或者变量。
本实施例中,将矩阵乘运算的矩阵结果C分为m行n列个矩阵子块,算出所有的矩阵子块后,则矩阵乘运算就完成了。同时对于矩阵结果C的第i行j列个矩阵子块Cij而言,其原理如图3的(b)(c)(d)所示。对于矩阵子块Cij分块的原理如式(2)所示。
式(2)中,Cij表示矩阵结果C的第i行j列个矩阵子块,Ai表示矩阵A的第i行,Bj表示矩阵B的第j列,Aik表示矩阵A的第i行的第k个数据,Bjk表示矩阵B的第j列的第k个数据,表示矩阵子块Cij的第k个分块,其中k=0,1,…,K-1。根据式(2)可知,在计算中每一次取操作数Aik和Bjk运算得到中间结果保存中间结果并累加到下一次的计算中去,直到得到最终结果Cij。本实施例通过前述步骤4.1)~4.5),即为在计算中每一次取操作数Aik和Bjk运算得到中间结果保存中间结果并累加到下一次的计算中去直到得到最终结果Cij的具体实现,基于上述实现能够充分利用矩阵乘法器的多个处理单元的并行处理能力。
CNN网络由多个网络层构成,通常可以分为卷积层,非线性层,子采样层和全连接层。其中绝大多数的计算负载存在于卷积层和全连接层之中。CNN中另一个重要的运算负载为全链接层,全连接层的主要计算形式为矩阵-向量乘,该运算的计算访存比为1。尽管全连接层的计算负载并不大,但过低的计算访存比会导致加速器大多数时候处于等待访存结果的空闲状态,从而造成大量的时间开销。为了全连接层的需求,往往需要为加速器嫁接额外的高带宽外部存储器,这样做一方面增加了访存带来的硬件及功耗开销,另一方面会带来额外的通信开销,弱化了Host处理器和加速器间的耦合。为了克服上述问题,本实施例中还包括对卷积神经网络的全连接层加速的步骤,详细步骤包括:将卷积神经网络的全连接层的多个矩阵-向量乘转换为矩阵-矩阵乘,将矩阵-矩阵乘通过矩阵乘法器进行合并运算。例如对于图像的全连接层运算,将多幅图像按照batch为单位组织,并将一个batch内图像的全链接层合并运算,将矩阵-向量乘转化为矩阵-矩阵乘,来增加计算访问比,而合并后的矩阵乘运算,可以由矩阵乘法器加速器进行加速。如图6所示,原本的计算为矩阵W和向量x0相乘得到向量y0。由于用于计算的图像是按照batch为单位组织的,本实施例将x0到xbatch-1合并,而合并后的矩阵乘运算为矩阵W和矩阵X相乘得到矩阵Y,从而可以由矩阵乘法器加速器进行加速,从而能够增加计算访问比。需要说明的是,全连接层加速既可以采用普通的矩阵乘法器,也可以采用本实施例下文记载的卷积神经网络硬件加速AXI总线IP核,如果使用本实施例下文记载的卷积神经网络硬件加速AXI总线IP核,则需要将流映射器2和预取单元4旁路,直接进行最基础的矩阵运算。
如图7所示,本实施例的卷积神经网络硬件加速AXI总线IP核包括依次相连的AXI总线接口模块1、流映射器2及矩阵乘法器3,矩阵乘法器3包括链式DMA31和处理单元阵列32,处理单元阵列32由多个处理单元(PE)33以链式结构排列组成,且链首的处理单元33和链式DMA31相连;在工作状态时矩阵乘法器3的链式DMA31以数据驱动的方式产生矩阵坐标形式的数据请求Bx,By,流映射器2将数据请求Bx,By映射为操作数在主存中的真实存储地址read_addr完成卷积神经网络卷积层卷积运算的矩阵乘化,并从主存中读回操作数,链式DMA31将读回的操作数通过链首的处理单元33依次传递给处理单元阵列32中的多个处理单元33,通过处理单元阵列32执行每一个矩阵子块的并行计算,并将计算结果依次传递给链式DMA31,链式DMA31最终将计算结果通过AXI总线接口模块1写回主存。本实施例的卷积神经网络硬件加速AXI总线IP核具体采用FPGA实现。AXI总线接口模块1用于和Host处理器的AXI总线通信,图7中靠左侧的双向粗箭头为系统的AXI总线。由AXI总线分割,左侧为Host处理器系统,主要由Host处理器核心,存储端口,以及外片外存储器控制器构成。一个片上SoC系统通常都有其Host处理器系统,用来管理外设,通信,以及IP核。本发明所提供的IP核设计,必须通过接收命令与参数来启动与工作,而Host处理器是执行这个任务的最自然选择。本设计基于的系统通过存储端口共享片外DDR存储器。Host处理器可以直接访问存储端口,而其他设备可以通过AXI总线访问存储端口。流映射器2主要用于将CNN中的卷积操作映射为矩阵乘运算,使之可以将不同种规模的卷积运算,统一映射成一个尺寸相对较大的矩阵乘运算,方便使用加速器对其进行加速,而不必考虑网络规模的影响。矩阵乘法器3用于进行主要计算负载的处理。链式DMA31负责从主存读数据以及将数据写回主存。本实施例中,链式DMA31首先从主存读取DMA描述符,然后根据DMA描述符中的参数读取所需的数据并将它们传递给链首的处理单元33。链式DMA31还能够将处理单元阵列32的输出的结果写回主存,这个过程也是根据DMA描述符完成,所有的DMA描述符以链式队列的形式存在主存中,Host处理器首先设置该队列,然后告诉链式DMA31该队列中首个元素的地址,由此减少主机和加速器的通信开销。
如图8所示,流映射器2包括第一级流水线21、第二级流水线22、第三级流水线23、第四级流水线24、第五级流水线25共五级流水线,相邻级的流水线之间设有用于数据同步缓存的栈间寄存器;在接收数据请求Bx,By以及参数卷积核尺寸Ksize、卷积窗口数目win_num、卷积窗口偏移stride、特征图大小image_size以及第一个输入特征图的首地址img_addr后,
第一级流水线21将数据请求的行坐标Bx对卷积核尺寸Ksize进行除法运算得到余数操作数在卷积窗口中的列偏移ofs_cwin_y和商temp;同时,将数据请求的列坐标By除以卷积窗口数目win_num得到商卷积窗口在特征图中的行偏移cwin_x和余数卷积窗口在特征图中的列偏移cwin_y;
第二级流水线22将商temp除以卷积核尺寸Ksize得到商操作数在卷积窗口中所属的特征图编号im_num和余数操作数在卷积窗口中的行偏移ofs_cwin_x;同时,将卷积窗口在特征图中的列偏移cwin_y乘以操作数在卷积窗口中的偏移stride、再加上操作数在卷积窗口中的偏偏移ofs_cwin_y得到操作数在特征图像中的列偏移img_y;
第三级流水线23将操作数在卷积窗口中所属的特征图编号im_num乘以特征图大小image_size的平方得到所属特征图像的偏移ofs_im;同时,将卷积窗口在特征图中的行偏移cwin_x乘以操作数在卷积窗口中的偏移stride、再加上操作数在卷积窗口中的行偏移ofs_cwin_x得到操作数在特征图像中的行偏移img_x;
第四级流水线24将操作数在特征图像中的行偏移img_x乘以特征图大小image_size、再加上操作数在特征图像中的列偏移img_y得到操作数在特征图像中的偏移ofs_pix;
第五级流水线25将操作数在特征图像中的偏移ofs_pix加上第一个输入特征图的首地址img_addr、再加上所属特征图像的偏移ofs_im得到操作数在主存中的真实存储地址read_addr。
对于流映射器2而言,由于如此多的计算并不能在一个时钟周期内完成,本实施例采用了流水线的形式来进行实现,保证在一定延迟后,每一个时钟周期都能发送一个访存请求。总共的流水线级数为34级。本实施例由于使用了16位移位除法器,每一个除法器都需要16时钟节拍来计算一个地址。其中两个除法器可以并行计算。图中的蓝线部分为栈间寄存器,用于存储每一个时钟节拍的中间结果。使用该结构可以在接到地址流的34个时钟周期后,每一拍产生一个映射后地址。其中,第一级流水线21在0~15时钟节拍由两个除法器算出ofs_cwin_y,cwin_x,cwin_y,及一个中间结果,其中除法器输出一个商(quotient)和一个余数(reminder)。第二级流水线22在第16~31时钟节拍算出im_num,ofs_cwin_x,img_y,用到了一个除法器,一个乘法器,一个加法器。第三级流水线23在第32节拍,算出ofs_im,img_x,用到了一个加法器,两个乘法器。第四级流水线24在第33节拍算出ofs_pix,用到了一个加法器,一个乘法器。第五级流水线25在最后的34节拍,算出real_addr,用到了两个加法器。
如图9所示,处理单元33包括:
矩阵A输入FIFO队列INPUT FIFO_A,用于缓存来自链式DMA31或者上一级处理单元33的第一个操作数并输出至下一级处理单元33,并将缓存的第一个操作数轮流输出至矩阵A第一路寄存器A_REG0或者矩阵A第二路寄存器A_REG1;
矩阵A第一路寄存器A_REG0,用于缓存第一个操作数;
矩阵A第二路寄存器A_REG1,用于缓存第一个操作数;
选择器,用于选择输出矩阵A第一路寄存器A_REG0或者矩阵A第二路寄存器A_REG1缓存的第一个操作数;
矩阵B输入FIFO队列INPUT FIFO_B,用于缓存来自链式DMA31或者上一级处理单元33的第二个操作数并输出至下一级处理单元33,并将缓存的第二个操作数输出至矩阵B寄存器B_REG;
矩阵B寄存器B_REG,用于缓存来自矩阵B的第二个操作数,
第一乘法器,用于将选择器输出的第一个操作数、矩阵B寄存器B_REG输出的第二个操作数进行乘法运算;
第一加法器,用于将第一乘法器的乘法运算结果和局部存储C_BUF中存储的上一次加法运算结果进行累加后再重新写回局部存储C_BUF
局部存储C_BUF,用于存储第一加法器每一次的累加结果;
C_MUX模块,用于将局部存储C_BUF中的累加结果或者下一级处理单元33返回的累加结果输出至输出FIFO队列C_FIFO,下一级处理单元返回的结果优先于本级结果进入输出FIFO队列C_FIFO;
输出FIFO队列C_FIFO,用于缓存拼接模块C_MUX输出的累加结果并输出至上一级处理单元33。
需要说明的是,本实施例的卷积神经网络硬件加速方法及装置的核心内容在于将卷积神经网络卷积层的卷积运算转换为可利用矩阵乘法器的矩阵乘运算,因此矩阵乘法器的具体结构并不局限于本实施例中列举的矩阵乘法器,毫无疑问,在流映射器2将卷积运算转换为可利用矩阵乘法器的矩阵乘运算的基础上,本领域技术人员也可以根据需要采用其他类型的矩阵乘法器。
如图10所示,在处理单元33工作时,和链式DMA31或者上一级处理单元33相连的输入端口A和B同时输入数据。首先,针对输入端口A输入的每一个数据,首先根据数据携带的ID号和处理单元33的编号进行匹配,如果匹配,则判断矩阵A第一路寄存器A_REG0是否正在被使用,如果矩阵A第一路寄存器A_REG0正在被使用,则将数据缓冲至矩阵A第二路寄存器A_REG1,否则将数据缓冲至矩阵A第二路寄存器A_REG1;最终将数据传送写下一级处理单元33。同时,针对输入端口B输入的每一个数据,首先通过矩阵A输入FIFO队列INPUT FIFO_A进行缓存,然后从矩阵A输入FIFO队列INPUT FIFO_A中读入数据,如果读入K个数据,则轮流切换当前A_REG为矩阵A第一路寄存器A_REG0和矩阵A第二路寄存器A_REG1,并将读入的K个数据和当前A_REG中的值相乘,并与局部存储C_BUF中的值相加再写回局部存储C_BUF。然后,判断所有的矩阵子块是否已经运算完成,如果运算完成则从链尾的处理单元33开始将局部存储C_BUF中的累加结果通过输出FIFO队列C_FIFO返回给上一级处理单元33,然后将局部存储C_BUF中的累加结果和下一级处理单元33返回的累加结果拼接后通过输出FIFO队列C_FIFO输出至上一级处理单元33,并等待链式DMA31写回主存。写回的顺序是由C_MUX决定的,本地的结果必须比下游PE的结果提前写回。矩阵乘法器3对片上的存储资源需求非常低,每条处理单元阵列32仅仅需要大约处理单元33的数目的平方个32位字大小的存储空间。
使用流映射器2后,有两个问题可以进一步优化:(I)进行矩阵乘的矩阵其实并未占用实际的物理空间,其仅仅是一个到原特征图数据的映射。尽管访问的数据在主存中的存储总规模和原特征图大小相同,但是总的访存次数却为矩阵的大小的规模。本实施例中,进行运算的矩阵的尺寸要比原特征图的大小大约卷积核尺寸的平方倍,这个访存开销过于庞大。(II)由流映射器所产生的访存的地址流是不连续的,无法利用AXI总线的burst传输特性不能被使用,这将导致只用不到30%的存储器峰值带宽可以被达到。为了克服解决上述问题,本实施例采用的技术手段是实现对流映射器2所需数据的预取,即在AXI总线接口模块1、流映射器2之间设置预取单元4。如图7和图11所示,AXI总线接口模块1、流映射器2之间还设有预取单元4,预取单元4包括预取器41和两个片上缓存模块42(预取缓冲#0和预取缓冲#1),预取器41的输入端和AXI总线接口模块1相连,预取器42的输出端分别通过两个片上缓存模块42和流映射器2相连,预取器41根据预设的预取地址和长度通过AXI总线接口模块1从AXI总线上加载矩阵乘的数据并轮流存储在两个片上缓存模块42中,流映射器2则轮流两个片上缓存模块42中的矩阵乘的数据并传递给链式DMA31。在启动IP核前,Host处理器首先通过AXI总线配置预取参数(预取首地址,预取步长,预取长度)。之后启动预取器41,预取器41按照预取参数通过AXI总线访问片外存储器,将数据轮流存储在两个片上缓存模块42中。由于预取单元4事先的预取按照连续的地址流将相关数据读入,额外的存储访存最终均落到两个片上缓存模块42上,预取单元4能够保证加速器IP核与片外存储器的交互所使用的地址流是连续的,这样能够保证最大程度的利用片外存储器带宽,最终减少了对片外存储器的访问,具有访存开销小、访问性能高的优点,而且能够充分利用AXI总线的burst传输特性。
本实施例中,预取单元4的工作步骤如下:
第一步,由Host处理器设置预取参数,本实施例的预取参数主要为:预取起始地址以及预取数据长度以及步长,通过AXI总线向IP核的AXI总线接口模块1的从端口写入。
第二步,启动预取单元4,根据由Host处理器配置的预取地址和长度,将流映射器2所在下一个时间段所需的数据预取至两个片上缓存模块42。本实施例,为了保证计算和数据预取可以同时进行,本实施例采用了双缓冲技术。第一次数据预取存储至预取缓冲42#0中。
第三步,启动矩阵乘法器3和流映射器2,流映射器2从预取缓冲42#0中取走数据。同时启动预取单元4,预取单元4根据由Host处理器配置的预取地址和长度及步长,将流映射器2所在下一个时间段所需的数据预取至预取缓冲42#1。
第四步,当预取缓冲42#0中的数据被取完,并且预取缓冲42#1预取完毕。流映射器2开始从预取缓冲42#1中取走数据。同时取单元,根据由Host处理器配置的预取地址和长度及步长,将流映射器2所在下一个时间段所需的数据,预取至预取缓冲42#0。
反复进行第三步和第四步,直到一个矩阵分块的运算完成。
在进行运算是,Host处理器首先通过AXI总线接口模块1对本实施例的卷积神经网络硬件加速AXI总线IP核进行参数设置,然后启动本实施例的卷积神经网络硬件加速AXI总线IP核。首先从矩阵乘法器3的角度来看,由于所有的计算负载已经被转化成了一个矩阵乘运算。矩阵乘法器3所需要的就是通过内置的链式DMA 31不停的读取数据并进行运算。这些读取数据的请求会发送至流映射器2并等待返回。每一次矩阵乘运算均由多个矩阵子块的运算构成,加速器每次做一个矩阵子块的运算,进行下一个矩阵子块的运算需由Host处理器重新进行参数设置。矩阵乘法器3的数据需求以矩阵位置的形式发送给流映射器2后,流映射器2根据这些请求的矩阵位置信息算出数据在主存中真实存在的地址,并将数据请求发送给预取单元。预取单元4在接到流映射器2的数据请求前,会将这些数据先预取至片上缓存中。在将数据返回给流映射器2后,预取单元4会判断是否需要进行下一次预取,如果需要的话,进行数据的预取。这里所有的流程都是流水化进行的。
如图12所示,流映射器2的工作过程如下:S1)Host处理器为流映射器2配置参数;S2)流映射器2等待矩阵乘法器3的数据请求,当收到数据请求时跳转执行下一步;S3)对数据进行重映射并向预取单元4发送数据请求;S4)等待预取单元4的响应,当收到预取单元4的数据时跳转执行下一步;S5)将数据返回给矩阵乘法器3;S6)判断矩阵乘法器3是否完成所有矩阵子块的计算,如果尚未完成则跳转执行步骤S2),如果已经完成则判断矩阵乘法器3的整个矩阵乘运算是否完成,如果整个矩阵乘运算尚未完成则跳转执行步骤S1),如果整个矩阵乘运算已经完成则结束处理并退出。
如图12所示,矩阵乘法器3的工作过程如下:S1)Host处理器为矩阵乘法器3配置参数;S2)矩阵乘法器3通过链式DMA31向流映射器2申请矩阵乘计算所需数据,并等待流映射器2的响应,当收到流映射器2返回的数据时跳转执行下一步;S3)进行计算;S4)判断是否完成所有矩阵子块的计算,如果尚未完成则跳转执行步骤S2),如果已经完成则判断矩阵乘法器3的整个矩阵乘运算是否完成,如果整个矩阵乘运算尚未完成则跳转执行步骤S1),如果整个矩阵乘运算已经完成则结束处理并退出。
如图12所示,预取单元4的工作过程如下:S1)Host处理器为预取单元4配置参数,预取单元4执行第一次预取;S2)预取单元4等待流映射器2的数据请求,当收到流映射器2的数据请求时跳转执行下一步;S3)从片上缓存模块42返回数据给流映射器2;S4)判断是否需要预取数据,如果需要预取数据,则从片外存储器(主存)预取数据至片上缓存模块42;S5)判断是否完成所有矩阵子块的计算,如果尚未完成则跳转执行步骤S2),如果已经完成则判断矩阵乘法器3的整个矩阵乘运算是否完成,如果整个矩阵乘运算尚未完成则跳转执行步骤S1),如果整个矩阵乘运算已经完成则结束处理并退出。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (5)
1.一种卷积神经网络硬件加速方法,其特征在于步骤包括:
1)预先将卷积运算的输入特征图排列组成矩阵A,将卷积运算的输出特征图对应的卷积核排列组成矩阵B,将卷积神经网络卷积层的卷积运算转换为m行K列的矩阵A、K行n列的矩阵B的矩阵乘运算;
2)将矩阵乘运算的矩阵结果C分为m行n列个矩阵子块;
3)启动和主处理器相连的矩阵乘法器来对所有矩阵子块进行计算;在对矩阵子块进行计算时,所述矩阵乘法器以数据驱动的方式产生矩阵坐标(Bx,By)形式的数据请求,将矩阵坐标(Bx,By)映射为操作数在输入特征图中的真实主存地址read_addr,从主存中读回操作数;
4)所述矩阵乘法器根据读回的操作数执行每一个矩阵子块的并行计算,并将计算结果写回主存;
所述步骤1)中将卷积运算的输入特征图排列组成矩阵A具体是指将卷积运算的每一个输入特征图的所有卷积窗口进行横向拼接,所述横向拼接具体是指先将每一个卷积窗口组织成一个列向量,再将这些列向量拼接成矩阵A的一个行分块,然后将各个特征图的行分块进行纵向拼接成为A矩阵;将卷积运算的输出特征图对应的卷积核排列组成矩阵B具体是指将卷积运算的每一个输出特征图对应的卷积核作为矩阵B的一行。
2.根据权利要求1所述的卷积神经网络硬件加速方法,其特征在于:所述步骤2)具体是指根据式(1)将矩阵乘运算的矩阵结果C分为m行n列个矩阵子块;
式(1)中,C表示矩阵乘运算的矩阵结果,A表示m行K列的矩阵A,Ai表示矩阵A中的第i行,B表示K行n列的矩阵B,Bi表示矩阵B中的第i行,Ci,j表示矩阵乘运算的矩阵结果C的第i行j列个矩阵子块。
3.根据权利要求2所述的卷积神经网络硬件加速方法,其特征在于,所述步骤3)中将矩阵坐标(Bx,By)映射为操作数在输入特征图中的真实主存地址read_addr的步骤包括:
3.1)接收数据请求(Bx,By)以及参数卷积核尺寸Ksize、卷积窗口数目win_num、卷积窗口偏移stride、特征图大小image_size以及第一个输入特征图的首地址img_addr;将数据请求的行坐标Bx对卷积核尺寸Ksize进行除法运算得到余数操作数在卷积窗口中的列偏移ofs_cwin_y和商temp;同时,将数据请求的列坐标By除以卷积窗口数目win_num得到商卷积窗口在特征图中的行偏移cwin_x和余数卷积窗口在特征图中的列偏移cwin_y;
3.2)将商temp除以卷积核尺寸Ksize得到商操作数在卷积窗口中所属的特征图编号im_num和余数操作数在卷积窗口中的行偏移ofs_cwin_x;同时,将卷积窗口在特征图中的列偏移cwin_y乘以操作数在卷积窗口中的偏移stride、再加上操作数在卷积窗口中的偏偏移ofs_cwin_y得到操作数在特征图像中的列偏移img_y;
3.3)将操作数在卷积窗口中所属的特征图编号im_num乘以特征图大小image_size的平方得到所属特征图像的偏移ofs_im;同时,将卷积窗口在特征图中的行偏移cwin_x乘以操作数在卷积窗口中的偏移stride、再加上操作数在卷积窗口中的行偏移ofs_cwin_x得到操作数在特征图像中的行偏移img_x;
3.4)将操作数在特征图像中的行偏移img_x乘以特征图大小image_size、再加上操作数在特征图像中的列偏移img_y得到操作数在特征图像中的偏移ofs_pix;
3.5)将操作数在特征图像中的偏移ofs_pix加上第一个输入特征图的首地址img_addr、再加上所属特征图像的偏移ofs_im得到操作数在主存中的真实存储地址read_addr。
4.根据权利要求3所述的卷积神经网络硬件加速方法,其特征在于,所述步骤4)中的详细步骤包括:
4.1)初始化变量k为0;
4.2)将当前矩阵子块Cij对应矩阵A的条状分块Ai的当前子列Aik以流的方式依次传给矩阵乘法器中的各个处理单元,每个处理单元缓存当前子列Aik中自身编号对应的部分数据Aik[n],其中n为处理单元的编号;预取下一个子列Aik的数据;
4.3)将当前矩阵子块Cij对应矩阵B的条状分块Bj的长度为m的当前子列Bjk以流的方式依次传给各个处理单元,每一个处理单元在接收到子列Bjk中的每一个数据Bjk[m]时,将收到的数据Bjk[m]和缓存的部分数据Aik[n]通过乘法器相乘并与该处理单元的缓存C_BUFF[m]中存储的结果进行累加并存回至缓存C_BUFF[m];
4.4)判断变量k的值是否等于K-1,其中K为矩阵A的列数;当变量k的值等于K-1时,跳转执行下一步;否则,将变量k加1,并跳转执行步骤4.2);
4.5)每一个处理单元将最后一次累加得到的计算结果依次输出并最终写回主存。
5.根据权利要求1~4中任意一项所述的卷积神经网络硬件加速方法,其特征在于还包括对卷积神经网络的全连接层加速的步骤,详细步骤包括:将卷积神经网络的全连接层的多个矩阵-向量乘转换为矩阵-矩阵乘,将矩阵-矩阵乘通过矩阵乘法器进行合并运算。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510312090.2A CN104915322B (zh) | 2015-06-09 | 2015-06-09 | 一种卷积神经网络硬件加速方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510312090.2A CN104915322B (zh) | 2015-06-09 | 2015-06-09 | 一种卷积神经网络硬件加速方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104915322A CN104915322A (zh) | 2015-09-16 |
CN104915322B true CN104915322B (zh) | 2018-05-01 |
Family
ID=54084395
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510312090.2A Active CN104915322B (zh) | 2015-06-09 | 2015-06-09 | 一种卷积神经网络硬件加速方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104915322B (zh) |
Families Citing this family (146)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106330498B (zh) * | 2015-06-25 | 2019-08-27 | 华为技术有限公司 | 远程数据获取方法及装置 |
US20190073582A1 (en) * | 2015-09-23 | 2019-03-07 | Yi Yang | Apparatus and method for local quantization for convolutional neural networks (cnns) |
US10614354B2 (en) * | 2015-10-07 | 2020-04-07 | Altera Corporation | Method and apparatus for implementing layers on a convolutional neural network accelerator |
CN105824604B (zh) * | 2015-11-24 | 2017-08-29 | 中国科学院计算技术研究所 | 多输入多输出处理器流水线数据同步装置及方法 |
CN105678379B (zh) | 2016-01-12 | 2020-08-07 | 腾讯科技(深圳)有限公司 | 一种cnn的处理方法和装置 |
CN105892989B (zh) * | 2016-03-28 | 2017-04-12 | 中国科学院计算技术研究所 | 一种神经网络加速器及其运算方法 |
CN107329734B (zh) * | 2016-04-29 | 2020-08-07 | 中科寒武纪科技股份有限公司 | 一种用于执行卷积神经网络正向运算的装置和方法 |
GB201607713D0 (en) | 2016-05-03 | 2016-06-15 | Imagination Tech Ltd | Convolutional neural network |
CN105956660A (zh) * | 2016-05-16 | 2016-09-21 | 浪潮集团有限公司 | 一种用于实时图像识别的神经元网络芯片实现方法 |
CN106127297B (zh) * | 2016-06-02 | 2019-07-12 | 中国科学院自动化研究所 | 基于张量分解的深度卷积神经网络的加速与压缩方法 |
CN109154990B (zh) * | 2016-06-03 | 2023-10-03 | 英特尔公司 | 卷积神经网络中的查找卷积层 |
CN109328361B (zh) * | 2016-06-14 | 2020-03-27 | 多伦多大学管理委员会 | 用于深度神经网络的加速器 |
CN107526709A (zh) * | 2016-06-15 | 2017-12-29 | 辉达公司 | 使用低精度格式的张量处理 |
US10706348B2 (en) * | 2016-07-13 | 2020-07-07 | Google Llc | Superpixel methods for convolutional neural networks |
CN106228238B (zh) * | 2016-07-27 | 2019-03-22 | 中国科学技术大学苏州研究院 | 现场可编程门阵列平台上加速深度学习算法的方法和系统 |
CN106250939B (zh) * | 2016-07-30 | 2020-07-24 | 复旦大学 | 基于fpga+arm多层卷积神经网络的手写体字符识别方法 |
US20180046903A1 (en) * | 2016-08-12 | 2018-02-15 | DeePhi Technology Co., Ltd. | Deep processing unit (dpu) for implementing an artificial neural network (ann) |
US10810484B2 (en) | 2016-08-12 | 2020-10-20 | Xilinx, Inc. | Hardware accelerator for compressed GRU on FPGA |
US10802992B2 (en) | 2016-08-12 | 2020-10-13 | Xilinx Technology Beijing Limited | Combining CPU and special accelerator for implementing an artificial neural network |
US10762426B2 (en) | 2016-08-12 | 2020-09-01 | Beijing Deephi Intelligent Technology Co., Ltd. | Multi-iteration compression for deep neural networks |
US10643124B2 (en) | 2016-08-12 | 2020-05-05 | Beijing Deephi Intelligent Technology Co., Ltd. | Method and device for quantizing complex artificial neural network |
US10621486B2 (en) * | 2016-08-12 | 2020-04-14 | Beijing Deephi Intelligent Technology Co., Ltd. | Method for optimizing an artificial neural network (ANN) |
US10698657B2 (en) | 2016-08-12 | 2020-06-30 | Xilinx, Inc. | Hardware accelerator for compressed RNN on FPGA |
US10936941B2 (en) | 2016-08-12 | 2021-03-02 | Xilinx, Inc. | Efficient data access control device for neural network hardware acceleration system |
CN107679617B (zh) * | 2016-08-22 | 2021-04-09 | 赛灵思电子科技(北京)有限公司 | 多次迭代的深度神经网络压缩方法 |
US10984308B2 (en) | 2016-08-12 | 2021-04-20 | Xilinx Technology Beijing Limited | Compression method for deep neural networks with load balance |
US10832123B2 (en) | 2016-08-12 | 2020-11-10 | Xilinx Technology Beijing Limited | Compression of deep neural networks with proper use of mask |
CN106447030B (zh) * | 2016-08-30 | 2021-09-21 | 深圳市诺比邻科技有限公司 | 卷积神经网络的计算资源优化方法及系统 |
DE102016216947A1 (de) * | 2016-09-07 | 2018-03-08 | Robert Bosch Gmbh | Modellberechnungseinheit und Steuergerät zur Berechnung eines mehrschichtigen Perzeptronenmodells |
KR20180034853A (ko) * | 2016-09-28 | 2018-04-05 | 에스케이하이닉스 주식회사 | 합성곱 신경망의 연산 장치 및 방법 |
CN107742150B (zh) | 2016-10-31 | 2020-05-12 | 腾讯科技(深圳)有限公司 | 一种卷积神经网络的数据处理方法和装置 |
CN109634905B (zh) * | 2016-11-03 | 2023-03-10 | 中科寒武纪科技股份有限公司 | Slam运算装置和方法 |
US10733505B2 (en) * | 2016-11-10 | 2020-08-04 | Google Llc | Performing kernel striding in hardware |
TWI634490B (zh) * | 2016-11-14 | 2018-09-01 | 美商耐能股份有限公司 | 卷積運算裝置及卷積運算方法 |
US10417560B2 (en) * | 2016-12-01 | 2019-09-17 | Via Alliance Semiconductor Co., Ltd. | Neural network unit that performs efficient 3-dimensional convolutions |
US10438115B2 (en) * | 2016-12-01 | 2019-10-08 | Via Alliance Semiconductor Co., Ltd. | Neural network unit with memory layout to perform efficient 3-dimensional convolutions |
CN108615077B (zh) * | 2016-12-09 | 2021-08-24 | 杭州海康威视数字技术股份有限公司 | 一种应用于深度学习网络的缓存优化方法及装置 |
CN108229656A (zh) * | 2016-12-14 | 2018-06-29 | 上海寒武纪信息科技有限公司 | 神经网络运算装置及方法 |
WO2018107383A1 (zh) * | 2016-12-14 | 2018-06-21 | 上海寒武纪信息科技有限公司 | 神经网络的卷积运算方法、装置及计算机可读存储介质 |
WO2018108126A1 (zh) * | 2016-12-14 | 2018-06-21 | 上海寒武纪信息科技有限公司 | 神经网络卷积运算装置及方法 |
US10394929B2 (en) | 2016-12-20 | 2019-08-27 | Mediatek, Inc. | Adaptive execution engine for convolution computing systems |
CN106846235B (zh) * | 2016-12-26 | 2020-11-13 | 中国科学院计算技术研究所 | 一种利用NVIDIA Kepler GPU汇编指令加速的卷积优化方法及系统 |
CN106844294B (zh) * | 2016-12-29 | 2019-05-03 | 华为机器有限公司 | 卷积运算芯片和通信设备 |
CN106909970B (zh) * | 2017-01-12 | 2020-04-21 | 南京风兴科技有限公司 | 一种基于近似计算的二值权重卷积神经网络硬件加速器计算装置 |
CN106875011B (zh) * | 2017-01-12 | 2020-04-17 | 南京风兴科技有限公司 | 二值权重卷积神经网络加速器的硬件架构及其计算流程 |
CN106940815B (zh) * | 2017-02-13 | 2020-07-28 | 西安交通大学 | 一种可编程卷积神经网络协处理器ip核 |
US11157801B2 (en) | 2017-02-28 | 2021-10-26 | Microsoft Technology Licensing, Llc | Neural network processing with the neural network model pinned to on-chip memories of hardware nodes |
US11086967B2 (en) | 2017-03-01 | 2021-08-10 | Texas Instruments Incorporated | Implementing fundamental computational primitives using a matrix multiplication accelerator (MMA) |
CN107066239A (zh) * | 2017-03-01 | 2017-08-18 | 智擎信息系统(上海)有限公司 | 一种实现卷积神经网络前向计算的硬件结构 |
CN108804974B (zh) * | 2017-04-27 | 2021-07-02 | 深圳鲲云信息科技有限公司 | 目标检测算法的硬件架构的资源估算、配置方法及系统 |
CN108804973B (zh) * | 2017-04-27 | 2021-11-09 | 深圳鲲云信息科技有限公司 | 基于深度学习的目标检测算法的硬件架构及其执行方法 |
CN107301456B (zh) * | 2017-05-26 | 2020-05-12 | 中国人民解放军国防科学技术大学 | 基于向量处理器的深度神经网络多核加速实现方法 |
WO2019000300A1 (zh) * | 2017-06-29 | 2019-01-03 | 北京清影机器视觉技术有限公司 | 二维数据匹配方法、装置和逻辑电路 |
CN107341544B (zh) * | 2017-06-30 | 2020-04-10 | 清华大学 | 一种基于可分割阵列的可重构加速器及其实现方法 |
CN114819119A (zh) | 2017-06-30 | 2022-07-29 | 华为技术有限公司 | 信号处理的系统和方法 |
CN107437110B (zh) * | 2017-07-11 | 2021-04-02 | 中国科学院自动化研究所 | 卷积神经网络的分块卷积优化方法及装置 |
CN107729989B (zh) * | 2017-07-20 | 2020-12-29 | 安徽寒武纪信息科技有限公司 | 一种用于执行人工神经网络正向运算的装置及方法 |
CN109460533B (zh) * | 2017-09-06 | 2021-10-26 | 华为技术有限公司 | 一种提高gemm计算性能的方法及装置 |
KR20190041388A (ko) * | 2017-10-12 | 2019-04-22 | 삼성전자주식회사 | 전자 장치 및 그 제어 방법 |
CN107844826B (zh) * | 2017-10-30 | 2020-07-31 | 中国科学院计算技术研究所 | 神经网络处理单元及包含该处理单元的处理系统 |
CN107833176A (zh) * | 2017-10-30 | 2018-03-23 | 上海寒武纪信息科技有限公司 | 一种信息处理方法及相关产品 |
WO2019084788A1 (zh) * | 2017-10-31 | 2019-05-09 | 深圳市大疆创新科技有限公司 | 用于神经网络的运算装置、电路及相关方法 |
CN107944545B (zh) * | 2017-11-10 | 2020-07-31 | 中国科学院计算技术研究所 | 应用于神经网络的计算方法及计算装置 |
CN107862650B (zh) * | 2017-11-29 | 2021-07-06 | 中科亿海微电子科技(苏州)有限公司 | 加速计算二维图像cnn卷积的方法 |
CN107944548A (zh) * | 2017-11-30 | 2018-04-20 | 睿视智觉(深圳)算法技术有限公司 | 一种fpga实现卷积层的设计方法 |
WO2019104638A1 (zh) * | 2017-11-30 | 2019-06-06 | 深圳市大疆创新科技有限公司 | 神经网络处理的方法、装置、加速器、系统和可移动设备 |
CN107862378B (zh) * | 2017-12-06 | 2020-04-24 | 芯原微电子(上海)股份有限公司 | 基于多核的卷积神经网络加速方法及系统、存储介质及终端 |
CN108304923B (zh) * | 2017-12-06 | 2022-01-18 | 腾讯科技(深圳)有限公司 | 卷积运算处理方法及相关产品 |
CN109961136B (zh) * | 2017-12-14 | 2020-05-19 | 中科寒武纪科技股份有限公司 | 集成电路芯片装置及相关产品 |
CN108153190B (zh) * | 2017-12-20 | 2020-05-05 | 新大陆数字技术股份有限公司 | 一种人工智能微处理器 |
WO2019119301A1 (zh) * | 2017-12-20 | 2019-06-27 | 华为技术有限公司 | 在卷积神经网络模型中确定特征图像的方法和装置 |
CN108022257A (zh) * | 2017-12-28 | 2018-05-11 | 中国科学院半导体研究所 | 适用于硬件的高速卷积神经网络目标跟踪方法和装置 |
CN111859273A (zh) * | 2017-12-29 | 2020-10-30 | 华为技术有限公司 | 矩阵乘法器 |
CN109993275B (zh) * | 2017-12-29 | 2021-01-29 | 华为技术有限公司 | 一种信号处理方法及装置 |
CN109074335A (zh) * | 2017-12-29 | 2018-12-21 | 深圳市大疆创新科技有限公司 | 数据处理方法、设备、dma控制器及计算机可读存储介质 |
CN109992742A (zh) * | 2017-12-29 | 2019-07-09 | 华为技术有限公司 | 一种信号处理方法及装置 |
WO2019127517A1 (zh) * | 2017-12-29 | 2019-07-04 | 深圳市大疆创新科技有限公司 | 数据处理方法、设备、dma控制器及计算机可读存储介质 |
CN109993272B (zh) * | 2017-12-29 | 2019-12-06 | 北京中科寒武纪科技有限公司 | 卷积及降采样运算单元、神经网络运算单元和现场可编程门阵列集成电路 |
WO2019136764A1 (zh) * | 2018-01-15 | 2019-07-18 | 深圳鲲云信息科技有限公司 | 卷积器及其所应用的人工智能处理装置 |
CN108090565A (zh) * | 2018-01-16 | 2018-05-29 | 电子科技大学 | 一种卷积神经网络并行化训练加速方法 |
CN108182471B (zh) * | 2018-01-24 | 2022-02-15 | 上海岳芯电子科技有限公司 | 一种卷积神经网络推理加速器及方法 |
CN111767997B (zh) * | 2018-02-27 | 2023-08-29 | 上海寒武纪信息科技有限公司 | 集成电路芯片装置及相关产品 |
CN108764466B (zh) * | 2018-03-07 | 2022-02-11 | 东南大学 | 基于现场可编程门阵列的卷积神经网络硬件及其加速方法 |
CN110245748B (zh) * | 2018-03-09 | 2021-07-13 | 赛灵思电子科技(北京)有限公司 | 卷积神经网络实现方法、装置、硬件加速器、存储介质 |
CN110210610B (zh) * | 2018-03-27 | 2023-06-20 | 腾讯科技(深圳)有限公司 | 卷积计算加速器、卷积计算方法及卷积计算设备 |
CN110309912B (zh) * | 2018-03-27 | 2021-08-13 | 赛灵思公司 | 数据存取方法、装置、硬件加速器、计算设备、存储介质 |
CN110321996B (zh) * | 2018-03-28 | 2021-06-29 | 华为技术有限公司 | 一种基于卷积神经网络的图像处理的方法和装置 |
CN108596331A (zh) * | 2018-04-16 | 2018-09-28 | 浙江大学 | 一种细胞神经网络硬件架构的优化方法 |
CN108806243B (zh) * | 2018-04-24 | 2020-09-29 | 东南大学 | 一种基于Zynq-7000的交通流量信息采集终端 |
US11687759B2 (en) | 2018-05-01 | 2023-06-27 | Semiconductor Components Industries, Llc | Neural network accelerator |
US11443176B2 (en) * | 2018-05-17 | 2022-09-13 | International Business Machines Corporation | Acceleration of convolutional neural networks on analog arrays |
CN110555520A (zh) * | 2018-05-30 | 2019-12-10 | 北京三星通信技术研究有限公司 | 执行卷积操作的方法、相应的处理装置及电子设备 |
CN110647975B (zh) * | 2018-06-27 | 2022-09-13 | 龙芯中科技术股份有限公司 | 一种数据处理方法、装置、设备以及介质 |
CN110659445B (zh) * | 2018-06-29 | 2022-12-30 | 龙芯中科技术股份有限公司 | 一种运算装置及其处理方法 |
CN112106034B (zh) * | 2018-07-13 | 2024-05-24 | 华为技术有限公司 | 一种用于神经网络的卷积方法及装置 |
CN110766128A (zh) * | 2018-07-26 | 2020-02-07 | 北京深鉴智能科技有限公司 | 卷积计算单元、计算方法及神经网络计算平台 |
CN109271138A (zh) * | 2018-08-10 | 2019-01-25 | 合肥工业大学 | 一种适用于大维度矩阵乘的链式乘法结构 |
CN110826707B (zh) * | 2018-08-10 | 2023-10-31 | 北京百度网讯科技有限公司 | 应用于卷积神经网络的加速方法和硬件加速器 |
CN109190758B (zh) * | 2018-09-04 | 2021-06-15 | 地平线(上海)人工智能技术有限公司 | 用于展开卷积神经网络的张量数据的方法和装置 |
US20210098001A1 (en) | 2018-09-13 | 2021-04-01 | Shanghai Cambricon Information Technology Co., Ltd. | Information processing method and terminal device |
CN109284475B (zh) * | 2018-09-20 | 2021-10-29 | 郑州云海信息技术有限公司 | 一种矩阵卷积计算装置及矩阵卷积计算方法 |
CN109409511B (zh) * | 2018-09-25 | 2020-07-28 | 西安交通大学 | 一种用于动态可重构阵列的卷积运算数据流调度方法 |
CN109376859A (zh) * | 2018-09-27 | 2019-02-22 | 东南大学 | 一种基于菱形卷积的神经网络剪枝方法 |
CN112703511B (zh) * | 2018-09-27 | 2023-08-25 | 华为技术有限公司 | 运算加速器和数据处理方法 |
CN109146065B (zh) * | 2018-09-30 | 2021-06-08 | 中国人民解放军战略支援部队信息工程大学 | 二维数据的卷积运算方法及装置 |
WO2020073923A1 (zh) * | 2018-10-09 | 2020-04-16 | 上海寒武纪信息科技有限公司 | 运算方法、装置、计算机设备和存储介质 |
WO2020073925A1 (zh) * | 2018-10-09 | 2020-04-16 | 上海寒武纪信息科技有限公司 | 运算方法、装置、计算机设备和存储介质 |
CN111045958B (zh) * | 2018-10-11 | 2022-09-16 | 展讯通信(上海)有限公司 | 加速引擎及处理器 |
CN109284240B (zh) * | 2018-10-15 | 2020-06-16 | 上海兆芯集成电路有限公司 | 存储器集成电路及其预取方法 |
CN111047025B (zh) * | 2018-10-15 | 2024-04-09 | 华为技术有限公司 | 一种卷积计算方法及装置 |
CN109255434A (zh) * | 2018-10-15 | 2019-01-22 | 旺微科技(上海)有限公司 | 一种卷积神经网络中计算资源的调度方法及装置 |
CN111222624B (zh) * | 2018-11-26 | 2022-04-29 | 深圳云天励飞技术股份有限公司 | 一种并行计算方法及装置 |
CN111260536B (zh) * | 2018-12-03 | 2022-03-08 | 中国科学院沈阳自动化研究所 | 可变参数的数字图像多尺度卷积处理器及其实现方法 |
CN109800867B (zh) * | 2018-12-17 | 2020-09-29 | 北京理工大学 | 一种基于fpga片外存储器的数据调用方法 |
CN109711533B (zh) * | 2018-12-20 | 2023-04-28 | 西安电子科技大学 | 基于fpga的卷积神经网络加速系统 |
CN109784484A (zh) * | 2019-01-31 | 2019-05-21 | 深兰科技(上海)有限公司 | 神经网络加速方法、装置、神经网络加速芯片及存储介质 |
CN109857460B (zh) * | 2019-02-20 | 2021-09-21 | 南京华捷艾米软件科技有限公司 | 基于risc-v架构的矩阵卷积计算方法、接口、协处理器及系统 |
CN109948787B (zh) * | 2019-02-26 | 2021-01-08 | 山东师范大学 | 用于神经网络卷积层的运算装置、芯片及方法 |
CN109993293B (zh) * | 2019-02-28 | 2021-04-13 | 中山大学 | 一种适用于堆叠式沙漏网络的深度学习加速器 |
CN111667046A (zh) * | 2019-03-08 | 2020-09-15 | 富泰华工业(深圳)有限公司 | 深度学习加速方法及用户终端 |
CN110008440B (zh) * | 2019-04-15 | 2021-07-27 | 恒烁半导体(合肥)股份有限公司 | 一种基于模拟矩阵运算单元的卷积运算及其应用 |
CN110458277B (zh) * | 2019-04-17 | 2021-11-16 | 上海酷芯微电子有限公司 | 适用于深度学习硬件加速器的可配置精度的卷积硬件结构 |
CN110188869B (zh) * | 2019-05-05 | 2021-08-10 | 北京中科汇成科技有限公司 | 一种基于卷积神经网络算法的集成电路加速计算的方法及系统 |
CN110443357B (zh) * | 2019-08-07 | 2020-09-15 | 上海燧原智能科技有限公司 | 卷积神经网络计算优化方法、装置、计算机设备及介质 |
CN112446471B (zh) * | 2019-08-28 | 2022-09-13 | 无锡江南计算技术研究所 | 基于异构众核处理器的卷积加速方法 |
CN110717588B (zh) | 2019-10-15 | 2022-05-03 | 阿波罗智能技术(北京)有限公司 | 用于卷积运算的装置和方法 |
US11372768B2 (en) | 2019-11-25 | 2022-06-28 | Alibaba Group Holding Limited | Methods and systems for fetching data for an accelerator |
CN111028136B (zh) * | 2019-12-24 | 2023-04-07 | 上海寒武纪信息科技有限公司 | 一种人工智能处理器处理二维复数矩阵的方法和设备 |
CN113495786B (zh) * | 2020-03-19 | 2023-10-13 | 杭州海康威视数字技术股份有限公司 | 一种图像卷积处理方法和电子设备 |
CN111475461B (zh) * | 2020-04-06 | 2023-03-24 | 西安电子科技大学 | 面向ai应用的片上网络映射方法 |
CN111610963B (zh) * | 2020-06-24 | 2021-08-17 | 上海西井信息科技有限公司 | 芯片结构及其乘加计算引擎 |
CN113919405B (zh) * | 2020-07-07 | 2024-01-19 | 华为技术有限公司 | 数据处理方法、装置与相关设备 |
CN111814680B (zh) * | 2020-07-08 | 2023-09-26 | 上海雪湖科技有限公司 | 一种基于fpga的多路axi总线的控制方法 |
CN112149694B (zh) * | 2020-08-28 | 2024-04-05 | 特斯联科技集团有限公司 | 一种基于卷积神经网络池化模块的图像处理方法、系统、存储介质及终端 |
CN112927125B (zh) * | 2021-01-31 | 2023-06-23 | 成都商汤科技有限公司 | 一种数据处理方法、装置、计算机设备及存储介质 |
CN115185482A (zh) * | 2021-04-02 | 2022-10-14 | 嘉楠明芯(北京)科技有限公司 | 一种基于神经网络的运算方法以及装置 |
CN113298236B (zh) * | 2021-06-18 | 2023-07-21 | 中国科学院计算技术研究所 | 基于数据流结构的低精度神经网络计算装置及加速方法 |
CN113592702A (zh) * | 2021-08-06 | 2021-11-02 | 厘壮信息科技(苏州)有限公司 | 基于深度卷积神经网络的图像算法加速器及系统和方法 |
CN113792868B (zh) * | 2021-09-14 | 2024-03-29 | 绍兴埃瓦科技有限公司 | 神经网络计算模块、方法和通信设备 |
CN113901746A (zh) * | 2021-10-09 | 2022-01-07 | 北京大学 | 一种用于向量代数的硬件加速器的设计方法 |
CN113947200B (zh) * | 2021-12-21 | 2022-03-18 | 珠海普林芯驰科技有限公司 | 神经网络的加速计算方法及加速器、计算机可读存储介质 |
CN116167423B (zh) * | 2023-04-23 | 2023-08-11 | 南京南瑞信息通信科技有限公司 | 一种实现cnn卷积层的装置及加速器 |
CN116861149B (zh) * | 2023-09-05 | 2024-01-09 | 之江实验室 | 卷积运算的优化方法、装置及处理器 |
CN117290289B (zh) * | 2023-11-27 | 2024-01-26 | 深存科技(无锡)有限公司 | 基于通用型cpu的矩阵加速器架构 |
CN117621145A (zh) * | 2023-12-01 | 2024-03-01 | 安徽大学 | 一种基于fpga的水果成熟度检测柔性机械臂系统 |
CN117349204B (zh) * | 2023-12-04 | 2024-02-09 | 中科亿海微电子科技(苏州)有限公司 | 一种用于提高axi总线读效率的装置及方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1627251A (zh) * | 2003-12-09 | 2005-06-15 | 微软公司 | 使用图形处理单元加速并优化机器学习技术的处理 |
CN104391820A (zh) * | 2014-11-25 | 2015-03-04 | 清华大学 | 基于fpga的通用浮点矩阵处理器硬件结构 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8015471B2 (en) * | 2006-07-14 | 2011-09-06 | Interdigital Technology Corporation | Symbol rate hardware accelerator |
-
2015
- 2015-06-09 CN CN201510312090.2A patent/CN104915322B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1627251A (zh) * | 2003-12-09 | 2005-06-15 | 微软公司 | 使用图形处理单元加速并优化机器学习技术的处理 |
CN104391820A (zh) * | 2014-11-25 | 2015-03-04 | 清华大学 | 基于fpga的通用浮点矩阵处理器硬件结构 |
Also Published As
Publication number | Publication date |
---|---|
CN104915322A (zh) | 2015-09-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104915322B (zh) | 一种卷积神经网络硬件加速方法 | |
CN104899182B (zh) | 一种支持可变分块的矩阵乘加速方法 | |
JP7358382B2 (ja) | 演算を加速するための加速器及びシステム | |
CN109543832B (zh) | 一种计算装置及板卡 | |
CN108665059A (zh) | 基于现场可编程门阵列的卷积神经网络加速系统 | |
CN103049241B (zh) | 一种提高cpu+gpu异构装置计算性能的方法 | |
Ma et al. | Performance modeling for CNN inference accelerators on FPGA | |
CN107392309A (zh) | 一种基于fpga的通用定点数神经网络卷积加速器硬件结构 | |
CN110018850A (zh) | 用于可配置空间加速器中的多播的设备、方法和系统 | |
CN108416422A (zh) | 一种基于fpga的卷积神经网络实现方法及装置 | |
CN111859273A (zh) | 矩阵乘法器 | |
CN109086075A (zh) | 人工智能处理器及使用处理器执行矩阵乘向量指令的方法 | |
CN108268283A (zh) | 用于利用约简操作来支持数据并行循环的计算引擎架构 | |
CN111626414B (zh) | 一种动态多精度神经网络加速单元 | |
CN103699360B (zh) | 一种向量处理器及其进行向量数据存取、交互的方法 | |
CN110738308B (zh) | 一种神经网络加速器 | |
CN103984560B (zh) | 基于大规模粗粒度嵌入式可重构系统及其处理方法 | |
CN103955447B (zh) | 基于dsp芯片的fft加速器 | |
CN107423816A (zh) | 一种多计算精度神经网络处理方法和系统 | |
CN101086729A (zh) | 一种基于fpga的动态可重构高性能运算方法与装置 | |
CN107085562A (zh) | 一种基于高效复用数据流的神经网络处理器及设计方法 | |
CN110147252A (zh) | 一种卷积神经网络的并行计算方法及装置 | |
CN108491924B (zh) | 一种面向人工智能计算的神经网络数据串行流水处理装置 | |
CN107957977A (zh) | 一种计算方法及相关产品 | |
Cho et al. | FARNN: FPGA-GPU hybrid acceleration platform for recurrent neural networks |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |