CN110738308B - 一种神经网络加速器 - Google Patents
一种神经网络加速器 Download PDFInfo
- Publication number
- CN110738308B CN110738308B CN201910900439.2A CN201910900439A CN110738308B CN 110738308 B CN110738308 B CN 110738308B CN 201910900439 A CN201910900439 A CN 201910900439A CN 110738308 B CN110738308 B CN 110738308B
- Authority
- CN
- China
- Prior art keywords
- module
- data processing
- processing module
- channel
- convolution
- 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
Images
Classifications
-
- 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
-
- 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)
- 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
本发明公开了一种神经网络加速器,所述的神经网络加速器用于外接全局控制模块、第一直接内存访问模块DMA、存储器;所述神经网络加速器包括第二直接内存访问模块DMA、卷积模块、单数据处理模块、平面数据处理模块、通道数据处理模块、概率计算模块,并采用流水线方式进行依次连接;所述卷积模块对数据进行乘加运算;单数据处理模块进行归一化、比例运算、激活函数处理;平面数据处理模块进行最大池化、最小池化、平均池化处理;通道数据处理模块进行通道拼接、面重排、矩阵置换处理;概率计算模块找出数据中最大的5个值,并完成5个最大值的概率运算;所述第二DMA将数据传输给卷积模块;所述卷积模块、通道数据处理模块共享一个DMA控制总线。
Description
技术领域
本发明涉及集成电路技术领域,更具体的,涉及一种神经网络加速器。
背景技术
卷积神经网络(CNN)是深度学习的重要算法,在计算机视觉特别是图像识领域有着非常广泛的应用。目前几乎所有的识别和检测问题都把卷积神经网络作为首选方法,世界上各个IT巨头也都争相展开了相关研究。
从计算机的角度来看,图像实际上是一个二维矩阵,卷积神经网络所做的工作就是采用卷积、池化等操作从二维数组中提取特征,并对图像进行识别。理论上来说,只要是能转换成二维矩阵的数据,都可以利用卷积神经网络来识别和检测。比如声音文件,可以分割成很短的分段,每段音阶的高低可以转换成数字,这样整段的声音文件就可以转换为二维矩阵,类似的还有自然语言中的文本数据,医药实验中的化学数据等等,都可以利用卷积神经网络来实现识别和检测。
相较于传统算法,CNN需要较高的运算量与带宽需求。目前主要依靠中央处理器(CPU)阵列、图形处理器(GPU)阵列完成计算。然而,CPU、GPU等通用处理器不能充分利用卷积神经网络的特点,因此导致运算效率较低,带来了较大的功耗、成本开销。此外,如今愈发需要在终端设备上以低成本、低功耗、高性能来完成人工智能算法的计算,而现有通用处理器无法满足该需求。
发明内容
本发明为了解决现有技术不能充分利用卷积神经网络的特点,导致神经网络运算效率低问题,提供了一种神经网络加速器,其能提高神经网络的运算效率,节省运算时间。
为实现上述本发明目的,采用的技术方案如下:一种神经网络加速器,所述的神经网络加速器用于外接全局控制模块、第一直接内存访问模块DMA、存储器;所述神经网络加速器包括第二直接内存访问模块DMA、卷积模块、单数据处理模块、平面数据处理模块、通道数据处理模块、概率计算模块;
所述卷积模块对输入数据进行乘加运算;
所述单数据处理模块用于对数据依次进行归一化、激活函数、比例运算处理;
所述平面数据处理模块用于对数据进行最大池化、最小池化、平均池化处理;
所述通道数据处理模块用于对数据进行通道拼接、面重排、矩阵置换处理;
所述概率计算模块用于找出数据中最大的5个值,并完成5个最大值的概率运算;
所述的卷积模块、单数据处理模块、平面数据处理模块、通道数据处理模块、概率计算模块采用流水线方式进行连接;所述第二DMA将数据传输给卷积模块;
所述卷积模块、通道数据处理模块共享一个DMA控制总线。
优选地,所述卷积模块、单数据处理模块、平面数据处理模块、概率计算模块、通道数据处理模块均设置有旁路bypass选项;
当运算只需要卷积模块和单数据处理模块时,旁路平面数据处理模块、通道数据处理模块、概率计算模块;
当运算只需要卷积模块时,旁路单数据处理模块、平面数据处理模块、通道数据处理模块、概率计算模块。
进一步地,所述第二直接内存访问模块DMA通过AXI通信协议与存储器通信连接;所述全局控制模块设有指令FIFO;所述第一直接内存访问模块DMA由CPU控制,将数据加载进存储器中,将指令加载进全局控制模块中的FIFO;全部加载完毕后启动全局控制模块开始运算,所述神经网络加速器通过第二DMA读取数据进行运算,运算完后返回中断到CPU,并通过第二DMA将运算得到的数据存入存储器中,CPU通过第一DMA读取运算得到的数据。
再进一步地,所述的数据包括特征、权重;所述特征在存储器内部按照N通道排列方式进行存储,所述的特征为三维矩阵,其宽度为Wi,高度为Hi,通道数量为C,排列顺序按N通道排列,且每N个通道的特征在存储器里面按连续地址存储;所有N的累加和等于C;所述的N为2的次幂。
再进一步地,所述全局控制模块包括指令FIFO;所述全局控制模块收到启动命令后从指令FIFO取出指令分发到卷积模块、单数据处理模块、平面数据处理模块、概率计算模块;
每条指令为256字节,其中,第0~3个字节表示模块使能选项,代表是否需要使用该模块;第4~67个字节表示卷积模块控制信息,包括特征高度、宽度、通道、卷积核尺寸、卷积步进、卷积填充信息;第68~131字节表示通道数据处理模块控制信息,包括特征高度、宽度、通道、重排模式信息;第132~163字节表示单数据处理模块控制信息,包括征高度、宽度、通道、运算模式、参数大小信息;第164~195字节表示平面数据处理模块控制信息,包括特征高度、宽度、通道、尺寸、池化步进、池化填充信息;第196~227字节表示概率计算模块控制信息,包括分类长度信息。
再进一步地,所述卷积模块包括DMA控制器、数据分流模块、乒乓RAM、RAM读取模块、条带列阵模块、块累加模块、寄存器模块;
所述DMA控制器用于控制DMA从存储器中读取数据;数据经过数据分流模块将特征和权重分离,然后缓存入乒乓RAM;所述RAM读取模块从乒乓RAM读取特征和权重给到条带阵列模块进行运算处理,运算结果经过块累加模块输出;所述寄存器模块通过全局控制模块接收来自CPU的指令,从而控制所述的卷积模块运算。
再进一步地,所述乒乓RAM包括特征RAM、权重RAM;所述特征RAM包括两个连续输出RAM,分别记为ramA、ramB,其中所述连续输出RAM包括Mk个子RAM;所述权重RAM包括ramA′、ramB′;
所述乒乓RAM采用连续缓存的方式,即将特征缓存入ramA,当RAM读取模块读取ramA中的特征时,同时ramB缓存入下一个特征,RAM读取模块读取完ramA中的特征时接着读取ramB中的特征;
同理,将权重缓存入ramA′中,当RAM读取模块读取ramA′中的权重时,同时ramB′缓存入下一个权重,RAM读取模块读取完ramA′中的权重时接着读取ramB′中的权重;
所述条带阵列模块包括Mk个PE运算单元,所述的PE运算单元包括Tk*Tk/2个乘法器。
再进一步地,所述平面数据处理模块首先对特征数据进行宽度方向池化运算,平面数据处理模块设有N个宽度方向运算单元并行运算N个通道;
然后再对特征数据进行高度方向池化运算,同样设有N个高度方向运算单元并行运算N个通道。
再进一步地,所述通道数据处理模块包括用于BUF缓存器、2个选择器、设置在2个选择器之间的重排算子;所述重排算子包括通道拼接算子、面重排算子、矩阵置换算子;
所述通道拼接算子用于将两个矩阵通道方向拼接起来,其中两个矩阵通道具有相同的高度H和宽度W,通道不一定相同,经过通道拼接后变成一个新的特征,其高度为H,宽度为W,通道为C0+C1,其中C0、C1表示不同矩阵通道的通道数量;
所述面重排算子用于将一个特征每个面重新排列顺序,变成四个面,经过面重排后,变成一个新的特征,其高度为H/2,宽度为W/2,通道为C*4;其中H表示原特征的高度,W表示原特征的宽度,C表示原特征的通道;
所述矩阵置换算子用于改变矩阵的维度,将特征的维度顺序进行置换,得到不同的维度顺序。
再进一步地,所述概率计算模块包括top5_comp模块、概率运算单元、reg寄存器;所述top5_comp模块采用向下查找法寻找输入的数据流中5个最大值;所述概率运算单元对得到的5个最大值进行概率运算,将得到的运算结果通过reg寄存器传输给第二DMA;
其中所述的概率运算具体公式如下:
式中,xi表示输入的分类数据。
本发明的有益效果如下:
1.本发明对神经网络运算分类,分成四种,单数据处理模块、平面数据处理模块、通道数据处理模块,使得整个神经网络加速器模块化,运算更高效。同时相较于传统中央处理器CPU作为总控制器,使用全局控制模块作为指令分发器,处理更迅速。
2.本发明在卷积模块、数据处理模块、平面数据处理模块、通道数据处理模块、概率计算模块之间采用流水线方法作业,避免了频繁的存储器缓存操作,节省了运算时间。
3.本发明所述卷积模块采用自主控制第二DMA的方式,读取存储器的速度更快,所述卷积模块采用条带阵列层进行运算,其能支持任意卷积核大小。
附图说明
图1是实施例1所述神经网络加速器的结构示意图。
图2是实施例1所述CPU控制流程。
图3是实施例1中的特征的N通道排列方式示意图。
图4是实施例1中的Glb控制流程。
图5是实施例1中的卷积模块的结构示意图。
图6是实施例1单数据处理模块的结构示意图。
图7是实施例1平面数据处理模块的结构示意图。
图8是实施例1通道数据处理模块的结构示意图。
图9是图8中通道拼接的示意图。
图10是图8中面重排的示意图。
图11是图8中矩阵置换的示意图。
图12是实施例1中的概率计算模块的结构示意图。
图13是图12中的top5_comp模块的工作原理示意图。
图14是实施例1旁路Pdp和Softmax的示意图。
图15是实施例1旁路Sdp、Pdp和Softmax的示意图。
图16是实施例2中所述特征feature分割示意图。
图17是实施例2中所述乒乓RAM缓存示意图。
图18是实施例2中所述连续输出RAM地址输出、输出示意图。
图19是实施例2中所述乘法器运算示意图。
图20是实施例2中所述条带阵列模块结构示意图。
图21是实施例2中所述条带阵列模块运算示意图。
具体实施方式
下面结合附图和具体实施方式对本发明做详细描述。
实施例1
如图1所示,一种神经网络加速器,所述的神经网络加速器用于外接全局控制模块Glb、第一直接内存访问模块DMA、存储器DDR3;所述神经网络加速器包括第二直接内存访问模块DMA、卷积模块conv、单数据处理模块sdp、平面数据处理模块pdp、通道数据处理模块cdp、概率计算模块softmax;
所述卷积模块conv对输入数据进行乘加运算;
所述单数据处理模块sdp用于对数据依次进行归一化、激活函数、比例运算处理;
所述平面数据处理模块pdp用于对数据进行最大池化、最小池化、平均池化处理;
所述通道数据处理模块cdp用于对数据进行通道拼接、面重排、矩阵置换处理;
所述概率计算模块softmax用于找出数据中最大的5个值,并完成5个最大值的概率运算;
所述的卷积模块、单数据处理模块、平面数据处理模块、通道数据处理模块、概率计算模块采用流水线方式进行连接;所述第二DMA将数据传输给卷积模块;
所述卷积模块、通道数据处理模块共享一个DMA控制总线。
如图1所示,所述第二直接内存访问模块DMA通过AXI通信协议与存储器通信连接;所述全局控制模块设有指令FIFO;所述第一直接内存访问模块DMA由CPU控制,将数据加载进存储器中,将指令加载进全局控制模块中的FIFO;全部加载完毕后启动全局控制模块开始运算,所述神经网络加速器通过第二DMA读取数据进行运算,运算完后返回中断到CPU,并通过第二DMA将运算得到的数据存入存储器中,CPU通过第一DMA读取运算得到的数据。所述的数据包括特征feature、权重weight。
本实施例CPU预先计算好神经网络加速器需要运算的特征feature、权重weight和所有指令,然后通过第一DMA加载进来,将特征feature、权重weight加载进DDR3,将指令是加载进全局控制模块Glb中的指令FIFO,全部加载完毕后启动Glb开始运算,加速器运算完毕后会返回中断到CPU,然后CPU读取概率计算模块softmax的运算结果即可。CPU控制流程图如图2所示。
本实施例的数据存储结构决定了神经网络加速器的性能,本实施例所述的特征Feature在DDR3内部的存储结构按照N通道排列方式存储在DDR3,如图3所示,特征Feature总通道数量为C,按N通道排列,每N个通道的特征Feature在DDR3里面按连续地址存储。所有N的累加和等于C。N通常为2的次幂,例如2、4、8、16、32等,按N通道排列的好处有两点,第一是DDR3读写操作是突发传输的,必须要字节对齐,通常是8字节、16字节、32字节对齐,单个特征Feature数量有时不是字节对齐,但是N通道的特征Feature总和一定是字节对齐的;第二是各模块运算可以并行运算N个数据,非常利于算法的加速。
存储器DDR3存储的特征Feature,其大小为宽度Wi,高度Hi,通道数量C,排列顺序按N通道排列,第1个N通道的特征Feature存储在第一部分连续地址,第2个N通道特征Feature存储在第二部分连续地址,依次类推。所有N的总和等于C。
本实施例所述全局控制模块包括指令FIFO,所述的全局控制模块Glb收到启动命令后从指令FIFO取出指令分发到卷积模块、单数据处理模块、平面数据处理模块、通道数据处理模块、概率计算模块。每条指令定为256字节,指令包括模块enable使能选项和模块寄存器,并不是所有模块都要分发寄存器,只有当该模块enbale使能了才会分发寄存器。
每条指令需要包含卷积模块、单数据处理模块、平面数据处理模块、通道数据处理模块、概率计算模块这五个模块的控制信息,其中,第0~3个字节表示模块使能选项,代表是否需要使用该模块;第4~67个字节表示卷积模块conv控制信息,包括特征feature高度、宽度、通道、卷积核尺寸、卷积步进stride、卷积填充padding信息;第68~131字节表示通道数据处理模块Cdp控制信息,包括特征feature高度、宽度、通道、重排模式信息;第132~163字节表示单数据处理模块控制信息,包括征feature高度、宽度、通道、运算模式、参数大小信息;第164~195字节表示平面数据处理模块Pdp控制信息,包括特征feature高度、宽度、通道、尺寸、池化步进stride、池化填充padding信息;第196~227字节表示Softmax概率计算模块控制信息,包括分类长度信息。
一条指令可以处理一次完整的数据流,从存储器DDR3读出经过运算再写回DDR3代表一次完整的数据流。Glb控制流程图如图4所示,神经网络加速器一次运算包含多条指令,每条指令运算完毕后需要分发下一条,直到所有指令处理完毕。
使用全局控制模块Glb作为指令分发器的好处在于,往往一次神经网络的运算少则10级条指令,多则100多条指令,如果使用CPU作为控制器,那么神经网络加速器一次运算CPU需要中断响应很多次,配置加速器很多次,不仅影响了CPU的性能,也影响了神经网络加速器的性能。
本实施例所述卷积模块Conv是所述神经网络加速器最核心的模块,也是决定了神经网络加速器的性能,因此卷积模块的卷积运算包含了大量的乘加运算,运算效率往往是卷积模块的瓶颈,如何提升运算效率是卷积模块重点需要研究的内容,运算效率由两点决定,第一是减少运算的静止时间,第二是提升每个时钟周期运算次数。本实施例所述的卷积模块Conv对这两点同时进行了深度优化,运算效率达到很高。
如图5所示,所述卷积模块包括DMA控制器、数据分流模块、乒乓RAM、RAM读取模块、条带列阵模块、块累加模块、寄存器模块;
所述DMA控制器用于控制DMA从存储器中读取数据;数据经过数据分流模块将特征和权重分离,然后缓存入乒乓RAM;所述RAM读取模块从乒乓RAM读取特征和权重给到条带阵列模块进行运算处理,运算结果经过块累加模块输出;所述寄存器模块通过全局控制模块接收来自CPU的指令,从而控制所述的卷积模块运算。
如图5所示,所述乒乓RAM包括特征RAM、权重RAM;所述特征RAM包括两个连续输出RAM,分别记为ramA、ramB,其中所述连续输出RAM包括Mk个子RAM;所述权重RAM包括ramA′、ramB′;
所述乒乓RAM采用连续缓存的方式,即将特征缓存入ramA,当RAM读取模块读取ramA中的特征时,同时ramB缓存入下一个特征,RAM读取模块读取完ramA中的特征时接着读取ramB中的特征;
同理,将权重缓存入ramA′中,当RAM读取模块读取ramA′中的权重时,同时ramB′缓存入下一个权重,RAM读取模块读取完ramA′中的权重时接着读取ramB′中的权重;
所述条带阵列模块包括Mk个PE运算单元,所述的PE运算单元包括Tk*Tk/2个乘法器。
如图6所示为单数据处理模块的结构示意图,所述的单数据处理模块依次对进行数据归一化处理、激活函数处理、比例运算处理,其中所述的激活函数包括Sigmoid函数、tanh函数、ReLU函数,本实施例使用ReLU函数作为激活函数。
如图7所示,所述平面数据处理模块首先对特征数据进行宽度方向池化运算,平面数据处理模块设有N个宽度方向运算单元并行运算N个通道;
然后再对特征数据进行高度方向池化运算,同样设有N个高度方向运算单元并行运算N个通道。
所述的平面数据处理模块处理最大池化max pooling、最小min pooling、平均值池化average pooling池化操作。
如图8所示,所述通道数据处理模块包括用于BUF缓存器、2个选择器、设置在2个选择器之间的重排算子;所述重排算子包括通道拼接算子、面重排算子、矩阵置换算子;
数据输入先缓存至BUF缓存器中的RAM,然后使用一个选择器选择数据进行哪种重排算子。
如图9所示,所述通道拼接算子用于将两个矩阵通道方向拼接起来,其中两个矩阵通道具有相同的高度H和宽度W,通道不一定相同,经过通道拼接后变成一个新的特征,其高度为H,宽度为W,通道为C0+C1,其中C0、C1表示不同矩阵通道的通道数量;
如图10所示,所述面重排算子用于将一个特征每个面重新排列顺序,变成四个面,经过面重排后,变成一个新的特征,其高度为H/2,宽度为W/2,通道为C*4;其中H表示原特征的高度,W表示原特征的宽度,C表示原特征的通道;
如图11所示,所述矩阵置换算子用于改变矩阵的维度,将特征的维度顺序进行置换,得到不同的维度顺序。
如图12所示,所述概率计算模块包括top5_comp模块、概率运算单元、reg寄存器;所述top5_comp模块采用向下查找法寻找输入的数据流中5个最大值;其中所述top5_comp模块的工作原理如图13所示,由若干个比较器、若干个与门模块、MAX1模块、MAX2模块、MAX3模块、MAX4模块、MAX5模块构成的具有逻辑判断功能的模块,MAX1寻找只需要判断输入数据大于MAX1即可更新最大值;MAX2寻找需要判断输入数据既大于MAX2同时小于MAX1即可更新最大值;MAX3寻找需要判断输入数据既大于MAX3同时小于MAX2即可更新最大值;MAX4寻找需要判断输入数据既大于MAX4同时小于MAX3即可更新最大值;MAX5寻找需要判断输入数据既大于MAX5同时小于MAX4即可更新最大值。
所述概率运算单元对得到的5个最大值进行概率运算,将得到的运算结果通过reg寄存器传输给第二DMA;
其中所述的概率运算具体公式如下:
式中,xi表示输入的分类数据。
本实施例所述卷积模块、单数据处理模块、平面数据处理模块、概率计算模块、通道数据处理模块均设置有旁路bypass选项;
如图14所示,当运算只需要卷积模块和单数据处理模块时,旁路平面数据处理模块、通道数据处理模块、概率计算模块;
如图15所示,当运算只需要卷积模块时,旁路单数据处理模块、平面数据处理模块、通道数据处理模块、概率计算模块。
实施例2
本实施例所述卷积模块,其具体的运算方法包括以下步骤:
S1:设置权重weight单个卷积核寸尺为size×size;其中,size=1、2、3…n,条带阵列的PE运算单元的数量为Mk;本实施例设Mk=5;
S2:由于特征feature太大无法一次性加载至乒乓RAM,因此需要对特征feature进行分割,分割示意图如图16所示,本实施例需要对两个方向进行分割。第一个是高度H方向分割,分割成m份,m为正整数;例如本实施例分成4分,那么H0+H1+H2+H3=H;第二是通道方向分割,分割成m份,本实施例一共将特征feature分割成m*m份。例如本实施例分成4份,那么C0+C1+C2+C3=C,整个特征feature分割成4×4=16份子特征;
S3:所述DMA控制器计算每一份子特征的地址、权重的地址,并通过DMA从存储器中读取子特征、权重,通过数据分流模块将子特征、权重进行分离;
S4:将每一份子特征分成Mk份,缓存在连续输出RAM中的Mk个子RAM中,其中,每个子RAM中存有1/Mk份子特征的数据;
其中所述子特征缓存在特征RAM中的具体步骤如下:
A1:所述DMA读取上个地址的子特征分成Mk份,分别存入ramA中Mk个子RAM中,其中每个子RAM存有1/Mk份子特征的数据;
A2:在RAM读取模块根据地址计算公式,顺序读取出ramA中Mk个子RAM中数据,组成子特征的同时,DMA将下个地址的子特征分成Mk份,分别存入ramB中Mk个子RAM,其中每个子RAM存有1/Mk份子特征的数据;
A3:当RAM读取模块读取完ramA中的子特征后,接着RAM读取模块根据地址计算公式,顺序读取ramB中Mk个子RAM中数据,组成子特征;
A4:重复以上步骤,直到读取完子特征。
本实施例以子特征feature为例,首先DMA读取子特征feature0存入ramA,然后条带阵列计算子特征feature0,此时DMA同时将子特征feature1存入ramB,当条带阵列计算完子特征feature0之后,接着计算子特征feature1,特征RAM缓存示意图17所示,整个运算无缝衔接,有效提高效率。
本实施例在RAM读取模块读取每个连续输出RAM子特征时,能同时读取Mk个子RAM中的数据,实现快速读取。
同时DMA将权重缓存在权重RAM中;
其中,所述权重缓存在权重RAM中的具体步骤如下:
B1:所述DMA读取上个地址的权重存入ramA′;
B2:在PE运算单元通过RAM读取模块读取ramA′中的权重的同时,DMA将下个地址的权重存入ramB′;
B3:当PE运算单元读取完ramA′中的权重后,接着读取ramB′中的权重;
B4:重复以上步骤,直到读取完权重。
同理,本实施例实现无缝衔接的读取权重,实现有效的提高运算效率。
S5:RAM读取模块根据地址计算公式计算连续输出RAM中Mk个子RAM中的数据,顺序读取并组成一份子特征;同时RAM读取模块读取在权重RAM中的权重;
本实施例所述地址计算公式如下:
将address=(wr_addr/Mk)
Wri-1_en=((wr_addr%Mk)=i-1)
写入第i-1个ram中;
其中i=1、2、…、Mk;wr_addr表示写进子RAM的地址,Wri-1_en表示第i-1个子RAM的写使能信号;
所述条带列阵读取数据,即连续输出RAM连续输出Mk个连续数据地址和与地址对应的数据具体如下:
address=(rd_addr/Mk)+((rd_addr/Mk)>0)
rdi-1_en=i-1
其中,rd_addr表示读子RAM的地址,rdi-1_en表示第i-1个子RAM的读使能信号。
本实施例以条带阵列的输入是连续5个数据,即Mk=5;这就需要乒乓RAM可以一个时钟周期输出任意5个连续地址数据,因此需要快速的从特征RAM中读取子特征,本实施例以其中一个连续输出RAM为例说明子特征缓存入5个子RAM,并读取子特征的过程,如图18所示,所述连续输出RAM能实现一进连续多出,原理是连续输出RAM包括5个RAM,分别记为ram0、ram1、ram2、ram3、ram4,根据以上地址计算公式,将子特征分成5份分别写入这5个子RAM,其中,每个子RAM中存有1/5份子特征,读取的时候5个子RAM会同时,通过顺序组合输出一个子特征数据,达到输出连续地址的数据效果。
S6:所述PE运算单元获取RAM读取模块输入的子特征、权重;PE运算单元中的乘法器对输入的子特征、权重进行乘法运算,得到相应的运算结果;
本实施例所述的子特征feature是8位,权重weight是8位,因此卷积运算是8*8。现有技术Xilinx FPGA内部乘法器位宽通常是18*25,实现两个乘法运算A*B和A*C传统上需要2个乘法器。
本实施例所述PE运算单元中乘法器对输入的子特征、权重进行乘法运算,如图19所示,本实施例所述乘法器运算法则如下:对权重C左移16位再加上下一个地址的权重B,然后再跟子特征A相乘,得到的结果低16bit是特子征A*权重B的结果,高位则是子特征A*权重C的结果,最后将这两个乘法结果分离出来各自累加;通过这种方法,本实施例实现了一个乘法器做2个乘法运算,大大提升了乘法器的利用效率。所述的权重C、权重B表示输入到乘法器的权重数据;所述子特征A表示根据地址计算公式输入到乘法器的子特征数据。
S7:块累加模块对高度H方向子特征的运算结果进行累加后输出。
本实施例所述RAM读取模块每个时钟周期读取Mk个子特征、Tk个权重,分别输入到Mk个PE运算单元进行乘法运算,对应每个PE运算单元一个时钟周期获取一个子特征、Tk个权重,实现每个PE运算单元一个时钟周期运算一个子特征、Tk个权重,从而得到Tk个结果;所述Mk个PE运算单元并行运算,实现一个计算周期输出Mk*Tk个运算结果;所述一个计算周期为size*size个时钟周期,因此计算一个输入子特征feature的时间为:
Time=W*H*C*(size*size)/(Mk*Tk),单位:时钟周期
其中W为输入子特征feature长度,H为输入子特征feature高度,C为输入子特征feature通道数量;size为权重的大小。
由此可见,当Mk和Tk越大时,计算时间越小。
本实施例所述条带阵列模块如图20所示,包括多个PE运算单元,每个PE单元对Tk个输入特征feature和Tk个权重weight的运算操作。由于一个PE运算单元包括Tk*Tk/2个乘法器,因为一个乘法器可以完成两个乘法运算,因此一个PE运算单元一个时钟周期可以完成Tk*Tk个乘法运算。所述条带阵列模块包括Mk个PE运算单元,因此整个条带阵列模块一共设有Mk*Tk*Tk/2个乘法器,一个时钟周期可以完成Mk*Tk*Tk个乘法运算。
本实施例以xilinx ZU4CG芯片为例,该芯片总共有728个乘法器,我们将Mk配置成5,Tk配置成16,那么条带阵列消耗5*16*16/2=640个乘法器,调用率达到87.9%,非常高。
本实施例条带阵列PE运算单元的数量Mk可以任意配置,因为所有的PE运算单元用来计算同一行数据,每个PE运算单元将乘法器运算结果进行累加,经过每个卷积核大小size*size时钟周期,Mk个运算单元得到Mk个运算结果。
本实施例每一个PE运算单元对输入子特征feature并行与权重weight0~weight(Tk-1)进行乘法器运算,实现一个计算周期得到Tk个运算结果。
本实施例设有5个PE运算单元,其中5个PE单元并行计算输入子特征feature并行与权重weight,每个计算周期得出5个运算结果;因此每个计算周期得到Tk*5个运算结果。
如图21所示,为本实施例由Mk个PE运算单元构成的条带阵列运算示意图,本实施例以10*10的特征feature为例,设权重weight单个卷积核size为3*3,Mk=5,clk为时钟信号,1~9表示9个时钟周期,第1个时钟周期PE0计算0*w0,PE1计算1*w0,PE2计算2*w0,PE3计算3*w0,PE4计算4*w0;第2个时钟周期PE0计算1*w1,PE1计算2*w1,PE2计算3*w1,PE3计算4*w1,PE4计算5*w1;第3个时钟周期PE0计算2*w2,PE1计算3*w2,PE2计算4*w2,PE3计算5*w2,PE4计算6*w2;依次类推,每个PE运算单元将每个时钟周期运算结果进行累加,最终9个时钟周期后得出5个运算结果F0~F4。
上述实例卷积核是3*3,条带阵列经过9个时钟周期后得出5个结果F0~F4;当权重weight单个卷积核size是5*5时,条带阵列经过25个时钟周期得出5个结果F0~F4;当权重weight单个卷积核size是7*7时,条带阵列经过49个时钟周期得出5个结果F0~F4;因此利用此方法可以支持任意的卷积核大小,并且无论何种卷积核,所有的乘法器都能用上,利用率100%。
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。
Claims (10)
1.一种神经网络加速器,所述的神经网络加速器用于外接全局控制模块、第一直接内存访问模块DMA、存储器;其特征在于:所述神经网络加速器包括第二直接内存访问模块DMA、卷积模块、单数据处理模块、平面数据处理模块、通道数据处理模块、概率计算模块;
所述卷积模块对输入数据进行乘加运算;
所述单数据处理模块用于对数据依次进行归一化、激活函数、比例运算处理;
所述平面数据处理模块用于对数据进行最大池化、最小池化、平均池化处理;
所述通道数据处理模块用于对数据进行通道拼接、面重排、矩阵置换处理;
所述概率计算模块用于找出数据中最大的5个值,并完成5个最大值的概率运算;
所述的卷积模块、单数据处理模块、平面数据处理模块、通道数据处理模块、概率计算模块采用流水线方式进行连接;所述第二直接内存访问模块DMA将数据传输给卷积模块;
所述卷积模块、通道数据处理模块共享一个DMA控制总线。
2.根据权利要求1所述的神经网络加速器,其特征在于:所述卷积模块、单数据处理模块、平面数据处理模块、概率计算模块、通道数据处理模块均设置有旁路bypass选项;
当运算只需要卷积模块和单数据处理模块时,旁路平面数据处理模块、通道数据处理模块、概率计算模块;
当运算只需要卷积模块时,旁路单数据处理模块、平面数据处理模块、通道数据处理模块、概率计算模块。
3.根据权利要求1所述的神经网络加速器,其特征在于:所述第二直接内存访问模块DMA通过AXI通信协议与存储器通信连接;所述全局控制模块设有指令FIFO;所述第一直接内存访问模块DMA由CPU控制,将数据加载进存储器中,将指令加载进全局控制模块中的FIFO;全部加载完毕后启动全局控制模块开始运算,所述神经网络加速器通过第二直接内存访问模块DMA读取数据进行运算,运算完后返回中断到CPU,并通过第二直接内存访问模块DMA将运算得到的数据存入存储器中,CPU通过第一直接内存访问模块DMA读取运算得到的数据。
4.根据权利要求2或3任一项所述的神经网络加速器,其特征在于:所述的数据包括特征、权重;所述特征在存储器内部按照N通道排列方式进行存储,所述的特征为三维矩阵,其宽度为Wi,高度为Hi,通道数量为C,排列顺序按N通道排列,且每N个通道的特征在存储器里面按连续地址存储;所有N的累加和等于C;所述的N为2的次幂。
5.根据权利要求4所述的神经网络加速器,其特征在于:所述全局控制模块包括指令FIFO;所述全局控制模块收到启动命令后从指令FIFO取出指令分发到卷积模块、单数据处理模块、平面数据处理模块、概率计算模块;
每条指令为256字节,其中,第0~3个字节表示模块使能选项,代表是否需要使用该模块;第4~67个字节表示卷积模块控制信息,包括特征高度、宽度、通道、卷积核尺寸、卷积步进、卷积填充信息;第68~131字节表示通道数据处理模块控制信息,包括特征高度、宽度、通道、重排模式信息;第132~163字节表示单数据处理模块控制信息,包括征高度、宽度、通道、运算模式、参数大小信息;第164~195字节表示平面数据处理模块控制信息,包括特征高度、宽度、通道、尺寸、池化步进、池化填充信息;第196~227字节表示概率计算模块控制信息,包括分类长度信息。
6.根据权利要求4所述的神经网络加速器,其特征在于:所述卷积模块包括DMA控制器、数据分流模块、乒乓RAM、RAM读取模块、条带列阵模块、块累加模块、寄存器模块;
所述DMA控制器用于控制DMA从存储器中读取数据;数据经过数据分流模块将特征和权重分离,然后缓存入乒乓RAM;所述RAM读取模块从乒乓RAM读取特征和权重给到条带阵列模块进行运算处理,运算结果经过块累加模块输出;所述寄存器模块通过全局控制模块接收来自CPU的指令,从而控制所述的卷积模块运算。
7.根据权利要求6所述的神经网络加速器,其特征在于:所述乒乓RAM包括特征RAM、权重RAM;所述特征RAM包括两个连续输出RAM,分别记为ramA、ramB,其中所述连续输出RAM包括Mk个子RAM;所述权重RAM包括ramA′、ramB′;
所述乒乓RAM采用连续缓存的方式,即将特征缓存入ramA,当RAM读取模块读取ramA中的特征时,同时ramB缓存入下一个特征,RAM读取模块读取完ramA中的特征时接着读取ramB中的特征;
同理,将权重缓存入ramA′中,当RAM读取模块读取ramA′中的权重时,同时ramB′缓存入下一个权重,RAM读取模块读取完ramA′中的权重时接着读取ramB′中的权重;
所述条带阵列模块包括Mk个PE运算单元,所述的PE运算单元包括Tk*Tk/2个乘法器。
8.根据权利要求7所述的神经网络加速器,其特征在于:所述平面数据处理模块首先对特征数据进行宽度方向池化运算,平面数据处理模块设有N个宽度方向运算单元并行运算N个通道;
然后再对特征数据进行高度方向池化运算,同样设有N个高度方向运算单元并行运算N个通道。
9.根据权利要求8所述的神经网络加速器,其特征在于:所述通道数据处理模块包括用于BUF缓存器、2个选择器、设置在2个选择器之间的重排算子;所述重排算子包括通道拼接算子、面重排算子、矩阵置换算子;
所述通道拼接算子用于将两个矩阵通道方向拼接起来,其中两个矩阵通道具有相同的高度H和宽度W,通道不一定相同,经过通道拼接后变成一个新的特征,其高度为H,宽度为W,通道数量为C0+C1,其中C0、C1表示不同矩阵通道的通道数量;
所述面重排算子用于将一个特征每个面重新排列顺序,变成四个面,经过面重排后,变成一个新的特征,其高度为H/2,宽度为W/2,通道数量为C*4;其中H表示原特征的高度,W表示原特征的宽度,C表示原特征的通道数量;
所述矩阵置换算子用于改变矩阵的维度,将特征的维度顺序进行置换,得到不同的维度顺序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910900439.2A CN110738308B (zh) | 2019-09-23 | 2019-09-23 | 一种神经网络加速器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910900439.2A CN110738308B (zh) | 2019-09-23 | 2019-09-23 | 一种神经网络加速器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110738308A CN110738308A (zh) | 2020-01-31 |
CN110738308B true CN110738308B (zh) | 2023-05-26 |
Family
ID=69269457
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910900439.2A Active CN110738308B (zh) | 2019-09-23 | 2019-09-23 | 一种神经网络加速器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110738308B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111340224B (zh) * | 2020-02-27 | 2023-11-21 | 浙江芯劢微电子股份有限公司 | 适用于低资源嵌入式芯片的cnn网络的加速设计方法 |
CN111401541A (zh) * | 2020-03-10 | 2020-07-10 | 湖南国科微电子股份有限公司 | 一种数据传输控制方法及装置 |
CN112052941B (zh) * | 2020-09-10 | 2024-02-20 | 南京大学 | 一种应用于cnn网络卷积层的高效存算***及其运算方法 |
CN111931918B (zh) * | 2020-09-24 | 2021-02-12 | 深圳佑驾创新科技有限公司 | 神经网络加速器 |
CN111931927B (zh) * | 2020-10-19 | 2021-02-19 | 翱捷智能科技(上海)有限公司 | 一种在npu中减少计算资源占用的方法及装置 |
CN113688069B (zh) * | 2021-09-10 | 2022-08-02 | 北京百度网讯科技有限公司 | 数据处理方法、装置、电子设备及介质 |
CN115687181B (zh) * | 2022-11-07 | 2023-05-12 | 苏州亿铸智能科技有限公司 | 一种用于存算处理单元的寻址方法 |
CN117195989B (zh) * | 2023-11-06 | 2024-06-04 | 深圳市九天睿芯科技有限公司 | 向量处理器、神经网络加速器、芯片及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002024157A (ja) * | 2000-07-07 | 2002-01-25 | Matsushita Electric Ind Co Ltd | Dma処理方法およびdma処理装置 |
CN106779060A (zh) * | 2017-02-09 | 2017-05-31 | 武汉魅瞳科技有限公司 | 一种适于硬件设计实现的深度卷积神经网络的计算方法 |
EP3346423A1 (en) * | 2017-01-04 | 2018-07-11 | STMicroelectronics Srl | Deep convolutional network heterogeneous architecture system and device |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10621486B2 (en) * | 2016-08-12 | 2020-04-14 | Beijing Deephi Intelligent Technology Co., Ltd. | Method for optimizing an artificial neural network (ANN) |
-
2019
- 2019-09-23 CN CN201910900439.2A patent/CN110738308B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002024157A (ja) * | 2000-07-07 | 2002-01-25 | Matsushita Electric Ind Co Ltd | Dma処理方法およびdma処理装置 |
EP3346423A1 (en) * | 2017-01-04 | 2018-07-11 | STMicroelectronics Srl | Deep convolutional network heterogeneous architecture system and device |
CN106779060A (zh) * | 2017-02-09 | 2017-05-31 | 武汉魅瞳科技有限公司 | 一种适于硬件设计实现的深度卷积神经网络的计算方法 |
Non-Patent Citations (2)
Title |
---|
Efficient convolution architectures for convolutional neural network;Jichen Wang等;《2016 8th International Conference on Wireless Communications & Signal Processing (WCSP)》;20161013;1-5 * |
卷积神经网络的FPGA实现及优化;王开宇等;《实验室科学》;20180828(第04期);79-84 * |
Also Published As
Publication number | Publication date |
---|---|
CN110738308A (zh) | 2020-01-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110738308B (zh) | 一种神经网络加速器 | |
CN106940815B (zh) | 一种可编程卷积神经网络协处理器ip核 | |
US7574466B2 (en) | Method for finding global extrema of a set of shorts distributed across an array of parallel processing elements | |
CN111897579B (zh) | 图像数据处理方法、装置、计算机设备和存储介质 | |
CN110097174B (zh) | 基于fpga和行输出优先的卷积神经网络实现方法、***及装置 | |
CN104915322B (zh) | 一种卷积神经网络硬件加速方法 | |
CN111626414B (zh) | 一种动态多精度神经网络加速单元 | |
CN111967468B (zh) | 一种基于fpga的轻量级目标检测神经网络的实现方法 | |
US10942673B2 (en) | Data processing using resistive memory arrays | |
US7447720B2 (en) | Method for finding global extrema of a set of bytes distributed across an array of parallel processing elements | |
US11775430B1 (en) | Memory access for multiple circuit components | |
CN111898733B (zh) | 一种深度可分离卷积神经网络加速器架构 | |
CN110263925A (zh) | 一种基于fpga的卷积神经网络前向预测的硬件加速实现架构 | |
CN110688616B (zh) | 一种基于乒乓ram的条带阵列的卷积模块及其运算方法 | |
US20230385233A1 (en) | Multiple accumulate busses in a systolic array | |
CN110674927A (zh) | 一种用于脉动阵列结构的数据重组方法 | |
CN110580519B (zh) | 一种卷积运算装置及其方法 | |
CN111860773B (zh) | 处理装置和用于信息处理的方法 | |
CN112950656A (zh) | 一种基于fpga平台的按通道进行预读取数据的分块卷积方法 | |
CN113762493A (zh) | 神经网络模型的压缩方法、装置、加速单元和计算*** | |
CN113762480B (zh) | 一种基于一维卷积神经网络的时间序列处理加速器 | |
CN114912596A (zh) | 面向稀疏卷积神经网络的多chiplet***及其方法 | |
CN114330687A (zh) | 数据处理方法及装置、神经网络处理装置 | |
CN113869494A (zh) | 基于高层次综合的神经网络卷积fpga嵌入式硬件加速器 | |
CN112052941A (zh) | 一种应用于cnn网络卷积层的高效存算***及其运算方法 |
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 |