CN114372012B - 一种通用、可配置的高能效池化计算单行输出系统和方法 - Google Patents
一种通用、可配置的高能效池化计算单行输出系统和方法 Download PDFInfo
- Publication number
- CN114372012B CN114372012B CN202111567518.XA CN202111567518A CN114372012B CN 114372012 B CN114372012 B CN 114372012B CN 202111567518 A CN202111567518 A CN 202111567518A CN 114372012 B CN114372012 B CN 114372012B
- Authority
- CN
- China
- Prior art keywords
- output
- height
- width
- input
- dimensional
- 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
- 238000004364 calculation method Methods 0.000 title claims abstract description 115
- 238000011176 pooling Methods 0.000 title claims abstract description 88
- 238000000034 method Methods 0.000 title claims abstract description 31
- 239000000872 buffer Substances 0.000 claims description 77
- 230000005540 biological transmission Effects 0.000 claims description 73
- 125000004122 cyclic group Chemical group 0.000 claims description 12
- 238000013507 mapping Methods 0.000 claims description 3
- 238000005265 energy consumption Methods 0.000 abstract description 5
- 238000013527 convolutional neural network Methods 0.000 description 19
- 238000013461 design Methods 0.000 description 19
- 238000012546 transfer Methods 0.000 description 9
- 238000000605 extraction Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 4
- 230000011218 segmentation Effects 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 3
- 238000013135 deep learning Methods 0.000 description 3
- 239000011159 matrix material Substances 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 238000011240 pooled analysis Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000945 filler Substances 0.000 description 1
- 238000009432 framing Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
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
-
- 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/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1673—Details of memory controller using buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
- G06F15/781—On-chip cache; Off-chip memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- 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)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biophysics (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- Computer Hardware Design (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)
- Mathematical Physics (AREA)
- Neurology (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Multi Processors (AREA)
- Image Processing (AREA)
Abstract
本发明公开了一种通用、可配置的高能效池化计算单行输出系统和方法,该系统包括上位机的可配置参数计算模块、下位机的可配置寄存器阵列操作控制模块、直接寄存器访问模块、以及计算模块;所述的计算模块按照可配置寄存器阵列操作控制模块发送的控制参数,进行与控制参数相匹配的高效能池化计算,并将计算结果用过直接寄存器访问模块发送到片外存储器DDR、由片外存储器DDR对计算结果进行保存;该方法包括池化计算宽度方向参数配置方法、以及高能效池化计算单行输出方法。本发明采用池化计算单行输出的方法,使得片上存储面积减少了至少三分之二,有效减少了电路面积和降低了能耗,从而解决了支持任意类型的池化计算的瓶颈问题和接触了后顾之忧。
Description
技术领域
本发明属于数字电路系统和深度学习领域,尤其涉及一种通用、可配置的高能效池化计算单行输出系统和方法。
背景技术
卷积神经网络(CNN)被广泛应用于人工智能领域,已经在大量的人工智能任务中取得了重大的成果,当前的应用趋势是将人工智能应用在边缘计算设备中,比方说智能手机、无人机和AIot等。然而边缘设备工作在资源和能量有限的环境下,就必须满足高性能和低功耗的要求。传统的计算平台CPU和GPU的低吞吐率和低能效不能满足边缘设备的要求,这就给进行深度学习的高能效卷积神经网络加速器的发展带来机遇。
高性能卷积神经网络同时包含卷积层和池化层。卷积层的作用是检测特征的局部连接,池化层的作用是将相似的特征合并为同一个。迄今为止,已经对卷积神经网络加速器进行了大量研究,目前备受关注的卷积神经网络加速器有TPU、NVDLA、Eyeriss和DianNao,然而这些加速器的设计主要聚焦于如何对卷积层进行加速操作,缺少对池化单元的特定研究。与此同时,现有的池化模块设计极大程度上受限于计算的灵活性、能效和面积。
灵活性和通用性一直以来都是卷积神经网络(CNN)硬件加速器的重要指标之一,因为每一年主流的CNN网络的结构都会有所不同,同时池化操作也会因网络而异,所以,亟待开发一种能够适用每年网络结构变化的硬件加速期。在之前的卷积神经网络加速器硬件电路设计当中,只能支持单一特定的网络结构,并不能应用到现如今任意的快速发展的CNN当中。
设计具有灵活性和通用性的卷积神经网络的难点在于:在硬件电路的简单化低能耗和通用性之间找到一个平衡点。以备受瞩目的CNN硬件加速器——NVDLA(NVIDIA DeepLearning accelerator)作为例子,虽然NVDLA具有很高的可配性,同时可以支持不同的尺寸的池化参数和三种池化方式,但是其存在的第一个问题:NVDLA的硬件电路面积和功耗是相当大的,这和高能效边缘计算的理念相违背。其存在的第二个问题,灵活性还是不够,它仅仅适配于池化内核(pooling kernel)为正方形的窗口(Kx=Ky),同时窗口在x方向和y方向移动的步长必须相等。
综上,现有技术设计CNN硬件加速器存在的问题是:第一、硬件电路面积相当大而导致高能耗,第二、无法支持任意形状池化计算。
发明内容
本发明为解决现有技术存在的问题,提出一种通用、可配置的高能效池化计算单行输出系统和方法,目的在于解决现有卷积神经网络加速器设计中无法支持任意形状池化计算以及高能耗的问题。
本发明为解决其技术问题提出以下技术方案:
一种可配置的单行输出池化计算处理系统,其特征在于:包括上位机的可配置参数计算模块、下位机的可配置寄存器阵列操作控制模块、直接寄存器访问模块、以及计算模块;所述上位机的可配置参数计算模块将操作控制模块中所用到的所有参数都提前计算好,然后CPU将计算好的控制参数通过AXI-lite总线存储到可配置的寄存器阵列操作控制模块,所述的可配置寄存器阵列操作控制模块从CPU获取数据后,存储这些提前计算好的控制参数、并利用这些提前计算好的控制参数控制直接寄存器访问模块的存取操作、以及控制计算模块的池化计算;所述直接寄存器访问模块按照可配置寄存器阵列操作控制模块发送的控制参数、通过AXI4总线从片外存储器DDR中获取与控制参数相匹配的单行输入数据、并将该单行输入数据发送给计算模块;所述的计算模块按照可配置寄存器阵列操作控制模块发送的控制参数,进行与控制参数相匹配的高效能池化计算,并将计算结果用过直接寄存器访问模块发送到片外存储器DDR、由片外存储器DDR对计算结果进行保存。
所述计算模块包括一维缓冲区、一维控制模块、一维计算模块、二维缓冲区、二维控制模块、二维计算模块;所述一维缓冲区接收从片外存储器DDR提取的单行输入数据、并将单行输入数据发送给一维计算模块;所述一维计算模块生成池化计算后的一维输出结果,并将池化计算后一维输出结果发送给二维缓冲区,所述二维缓冲区将池化计算后的一维输出结果发送给二维计算模块,二维计算模块生成池化计算后的二维输出结果,并将池化计算后的二维输出结果通过直接寄存器访问模块发送给片外存储器DDR进行存储。
所述二维缓冲包含二维向量的输入数据,其行数为Ky行,列数为宽度输出,二维的缓存空间设置为N*axi_burst,这个值的大小必须满足公式(6):
N*axi_burst>Ky*max_width_out (6)
所述上位机的可配置参数计算模块计算的控制参数包括涉及片上缓存空间的若干参数,该若干参数包括输出特征的宽度Wout、输出特征的高度Hout、输入通道数CHout、最大输出特征个数、最大输入特征的个数。
所述片上缓存空间的大小取决于突发传输的长度,假设片上缓存的空间大小为突发长度(depth=axi_burst_len),根据下列公式确定输出个数:
Wout=(Win+2*Px-Kx)/Sx+1 (1)
公式一当中:Wout是输出特征的宽度=(Win输入特征的宽+2*Px宽度方向的填充数-Kx宽度方向的滤波器的大小)/Sx宽度方向的步长+1
Hout=(Hin+2*Py-Ky)/Sy+1 (2)
公式二当中:Hout是输出特征的高度=(Hin输入特征的高度+2*Py高度方向的填充数-Ky高度方向的滤波器的大小)/Sy高度方向的步长+1
CHout=CHin (3)
公式三:CHout是输出通道数=CHin输入通道数
max_out_numbers=(axi_burst_len-Kx)//Sx+1 (4)
公式四:max_out_nmubers是最大输出个数=(突发长度--Kx宽度方向的滤波器的大小)//Sx宽度方向的步长+1
符号“//”代表地板除法,那么可以推导出要求输入的最大像素点的个数为:
max_in_number=(max_out_numbers-1)*Sx+Kx-Px (5)
公式五:最大输入特征的个数=(max_out_nmubers是最大输出特征的个数-1)*Sx宽度方向的步长+Kx宽度方向的滤波器的大小-Py高度方向的填充数。
所述直接寄存器访问模块设有用于数据传输的五重循环子模块:循环子模块1表示沿宽度方向的高性能AXI突发传输;循环子模块2是Ky在池化高度方向上的计数;循环子模块3重复传输,直到处理整个数据行为止,循环1到循环3是在宽度方向生成完整的输出特征映射;循环子模块4和循环子模块5分别用于输出特征高度和通道深度方向。
一种宽度方向参数配置方法,其特征在于,该方法包括以下步骤:
步骤一、输入一次突发传输的长度burst_lenth;
步骤二、片上存储的深度FIFO_depth=突发长度burst_lenth;
步骤三、宽度方向一次突发传输的最大输出个数Max_Width_out;
步骤四、计算宽度方向需要突发传输的次数Split_Weight_Num;
步骤五、判断突发传输的次数是否精确等于1,如果大于1,则继续步骤六,如果精确等于1,则第一次宽度方向输出个数、最后一次宽度方向输出个数均等于Wout,最后一次宽度方向输入个数、最后一次宽度方向输入个数均等于Win;
步骤六、中间传输宽度方向输出个数Middle_Width_out=突发传输最大输出个数;确定中间传输宽度方向输入个数Middle_Width_in,
步骤七、最大输出个数Wout能否被中间传输宽度方向输出个数Middle_Width_out整除,如果能,继续步骤八;如果不能,则确定宽度方向突发传输的次数、则确定最后一次突发传输的个数,转入步骤十;
步骤八、最后一次宽度方向输出个数Last_Width_out=中间传输宽度方向输出的个数Middle_Width_out;
步骤十、确定宽度方向最后一次突发传输的特征值输入的个数Last_Width_in,是否需要右侧填充的个数。
一种通用、可配置的高能效池化计算单行输出方法,其特征在于,该方法包括以下步骤:
步骤一、第一次高度方向输出行数=中间次高度方向输出行数=最后一次高度方向输出行数=1;
步骤二、高度方向输出的次数Split_Height_Num=Hout;
步骤三、确定第一次First_Height_in/中间次Middle_Height_in/最后一次Last_Height_in高度方向的输入行数,如果有填充,第一次输入行数First_Height_in=Ky-Py,中间输入行数Middle_Height_in=Ky;
步骤四、最后一次高度方向的输入行数Last_Height_in>中间次高度方向的输入行数Middle_Height_in,
如果是,则多出的行不参加计算,最后一次高度方向的输入行数=中间次数高度方向的输出行数,输入图像的下端需要的填充行数=0;
如果最后一次高度方向的输入行数Last_Height_in<中间次高度方向的输入行数Middle_Height_in,则填充Padding需要被用到,最后一次高度方向的输入行数=中间次数高度方向的输出行数,输入图像的下端需要的填充行数=ky-最后一次高度方向的输入个数;
如果最后一次高度方向的输入行数Last_Height_in=中间次高度方向的输入行数Middle_Height_in,则最后一次高度方向的输入行数=中间次数高度方向的输出行数,输入图像的下端需要的填充行数=0。
本发明的优点效果
1、本发明提出一种参数可配置化的技术方案,根据不同网络结构,设定已知参数,根据已知参数配置寄存器信息,根据寄存器信息指导我们如何从外部DDR提取数据。具体为通过CPU预先计算好配置参数、并下发给可配置寄存器阵列操作控制模块,使得可配置寄存器阵列操作控制模块能够按照控制参数控制DMA如何取数据、控制缓冲区如何存数据、控制计算单元如何计算数据。当网络结构变化时,可以根据当前网络结构的需要,设置与该网络结构相匹配的突发传输的长度burst_lenth、输入特征的宽度Win、输入特征的高度Hin、填充数值Padding、以及步长Stride等,CPU根据这些已知参数提前计算好用于控制的配置参数,可配置寄存器阵列操作控制模块接收来自CPU提前计算好的配置参数,根据配置参数控制整个工作流程,从而使得可配置寄存器阵列操作控制模块CRA被设计能支持任意类型的池化计算的操作控制模块,解决了现有卷积神经网络加速器设计中无法支持任意形状池化计算的难题。
2、本发明克服了本领域长期以来的技术偏见,既参数可配置化技术方案从来都是只适合软件系统、不适合硬件电路设计的偏见,采用了本领域技术人员不曾想到的根据已知参数配置寄存器信息的技术,实现了支持任意类型的池化计算的操作控制目标,具有突出的实质性特点。
3、本发明采用池化计算单行输出的方法,使得片上存储面积减少了至少三分之二:在输入特征的宽度方向上,采用突发长度作为限定片上存储深度(宽度)的条件,在输入特征的高度方向上,限定第一次高度方向输出行数=中间次高度方向输出行数=最后一次高度方向输出行数=1,这样,即使高度方向任意变化,每次的输出行数也只有1行,由于采用突发长度作为限定片上存储深度的条件,以及采用输出行数为1的方式,有效减少了电路面积和降低了能耗,从而解决了支持任意类型的池化计算的瓶颈问题和接触了后顾之忧。
附图说明
图1为本发明通用、可配置的高能效池化计算单行输出系统框图;
图2为本发明池化分析框图;
其中,(a)图为特征特征参数列表;(b)图为池化前后的特征数据,其中,Loop1_Loop5代表DMA的5重循环传输策略;
图3为本发明池化数据流示意图;
其中:(a)图为DMA突发传输特定数据流的时序图;(b)图为输入特征形状图,形状为:Hin=4,Win=23,Kernel=3,Stride=2,padding=1。
图4为本发明池化计算单行输出宽度方向参数配置流程图;
图5为本发明池化计算单行输出高度方向参数配置流程图;
图6为本发明X方向和Y方向的数据流。
具体实施方式
本发明设计原理
本发明关键成果主要依赖于两点:第一点是可配置寄存器阵列操作控制模块CRA是如何被设计能支持任意类型的池化计算;第二是计算单元如何设计达到节约电路面积的目的,尤其是减少了片上缓存的尺寸从而增加能效。
1、支持任意类型的池化计算
第一、任意类型是指池化计算的突发传输的长度burst_lenth是人工任意设置的、输入特征的宽度Win是人工任意设置的、输入特征的高度Hin是人工任意设置的、填充数值Padding是人工任意设置的、步长Stride是人工任意设置的;
第二,CPU根据人工设定的突发传输的长度burst_lenth、输入特征的宽度Win、填充数值Padding、步长Stride等参数,自动计算宽度方向的配置参数,包括:片上存储的深度FIFO_depth、宽度方向一次突发传输的最大输出个数Max_Width_out、宽度方向需要突发传输的次数Split_Weight_Num、中间传输宽度方向输出个数Middle_Width_out、中间传输宽度方向输入个数Middle_Width_in、最后一次宽度方向输出个数Last_Width_out、是否需要右侧填充、以及填充的个数等等。
然后,CPU将自动计算好的以上配置参数下发给下位机的可配置寄存器阵列操作控制模块。应用举例:可配置寄存器阵列操作控制模块根据CPU下达的“片上存储的深度FIFO_depth”,控制一维缓冲区存储的深度;根据CPU下达的“宽度方向一次突发传输的最大输出个数Max_Width_out”,控制DMA从外部DDR提取的输入特征数量能够保证最大输出个数Max_Width_out;根据CPU下达的中间传输宽度方向输出个数Middle_Width_out,控制直接寄存器访问模块,当中间传输时,从外部DDR提取的输入特征的个数为
Middle_Width_in,Middle_Width_in所对应的输出个数要与中间传输输出个数Middle_Width_out相吻合等等。
第三,CPU根据人工设定的突发传输的长度burst_lenth、输入特征的高度Hin、填充数值Padding、步长Stride等参数,自动计算:高度方向高度方向输出行数、高度方向输出的次数Split_Height_Num,有填充时,第一次输入行数First_Height_in,中间输入行数Middle_Height_in;当最后一次高度方向的输入行数Last_Height_in大于、或等于、或小于中间次高度方向的输入行数Middle_Height_in时,最后一次高度方向的输出个数;
然后,CPU将自动计算好的以上配置参数,并下发给下位机的可配置寄存器阵列操作控制模块。应用举例:可配置寄存器阵列操作控制模块根据CPU下达的“高度方向输出行数”控制二维计算单元的输出均为行输出;根据CPU下达的“高度方向输出的次数Split_Height_Num”,控制二维计算单元向片外DDR输出的总的次数;根据CPU下达的“有填充时,第一次输入行数First_Height_in”,控制DMA针对一行输出从片外DDR提取的输入行数,当Ky=3,Py=1时,First_Height_in=2,当输入特征行数为2时,DMA按行提取的次数为2,每次提取1行数据,一共提取2次。
2.节约电路面积减少片上缓存
1)传统方法为了支持任意形状的池化计算,片上缓存所需的空间将会变得非常大。举例来说,当池化内核(过滤器)为3行18列时,Kx=3,Ky=18,输入特征(width_in)的宽度为224,那么我们至少需要存储Ky*width_in=4032个像素点。与此同时,考虑在通道方向上的并行度T=4,单个像素点的数据位宽为16bit,那么总的片上缓存的空间要大于Ky*width_in*T*data_bit_width=252kb,毫无疑问会消耗大量的片上资源。尽管如此,这种设计方法还不够灵活,它无法支持Ky>18的池化操作。
2)为了支持任意池化操作,同时减小芯片缓冲区大小,本发明利用AXI突发传输的长度计算输入特征的数量。以图3为例,当池化内核(过滤器)为3行7列时,假设突发传输的长度为8,此时,DMA每次从片外DDR提取输入特征按单行1*7提取、而不是按多行3*7提取,并且单行提取输入特征不能超过8,此外,AXI突发传输长度(表示为axi_burst_len)不能太大(<64),
虽然按照单行提取输入特征增加了CPU运算次数,但因为CPU计算速度很快,增加的运算时间可忽略不计。采用单行输入的方法,使得硬件电路面积相比传统方法减小了三分之二。
基于以上发明原理,本发明设计了一种可配置的单行输出池化计算处理系统。
一种可配置的单行输出池化计算处理系统,其特征在于:包括上位机的可配置参数计算模块、下位机的可配置寄存器阵列操作控制模块、直接寄存器访问模块、以及计算模块;所述上位机的可配置参数计算模块将操作控制模块中所用到的所有参数都提前计算好,然后CPU将计算好的控制参数通过AXI-lite总线存储到可配置的寄存器阵列操作控制模块,所述的可配置寄存器阵列操作控制模块从CPU获取数据后,存储这些提前计算好的控制参数、并利用这些提前计算好的控制参数控制直接寄存器访问模块的存取操作、以及控制计算模块的池化计算;所述直接寄存器访问模块按照可配置寄存器阵列操作控制模块发送的控制参数、通过AXI4总线从片外存储器DDR中获取与控制参数相匹配的单行输入数据、并将该单行输入数据发送给计算模块;所述的计算模块按照可配置寄存器阵列操作控制模块发送的控制参数,进行与控制参数相匹配的高效能池化计算,并将计算结果用过直接寄存器访问模块发送到片外存储器DDR、由片外存储器DDR对计算结果进行保存。
所述计算模块包括一维缓冲区、一维控制模块、一维计算模块、二维缓冲区、二维控制模块、二维计算模块;所述一维缓冲区接收从片外存储器DDR提取的单行输入数据、并将单行输入数据发送给一维计算模块;所述一维计算模块生成池化计算后的一维输出结果,并将池化计算后一维输出结果发送给二维缓冲区,所述二维缓冲区将池化计算后的一维输出结果发送给二维计算模块,二维计算模块生成池化计算后的二维输出结果,并将池化计算后的二维输出结果通过直接寄存器访问模块发送给片外存储器DDR进行存储。
补充说明:
以图3为例,DMA提取数据的顺序是:先提取上面0-5,再提取下面一行23-28,当提取0-5以后将这7个数据发送给一维缓冲区,一维缓冲区按照001、123、345的顺序分别发送给一维计算单元,一维计算单元分别算出输出值1、3、5分别发送给二维缓冲区,此时二维缓冲区只是保存1、3、5的数据而并不马上发送给二维计算单元,然后等待接收下面一行输入数据的输出结果,一起发送二维计算单元,当一维计算单元将第二行的输出结果24、26、28分别发送给二维缓冲区以后,此时二维缓冲区存有1、3、5,24、26、28这样6个数据,二维计算单元再将这6个数据一起发送给二维计算单元,二维计算单元接收6个数据后,分别用1和24、3和26、5和28相比,最后得出3个输出结果24、26、28,再将24、26、28作为最终结果发送给外部DDR进行存储。
所述二维缓冲包含二维向量的输入数据,其行数为Ky行,列数为宽度输出,二维的缓存空间设置为N*axi_burst,这个值的大小必须满足公式(6):
N*axi_burst>Ky*max_width_out (6)
补充说明:
二维计算模块与一维计算模块设计原理相似。一般情况下,二维缓存区只存储一维计算模块的临时结果,二维FSM模块将二维缓冲数据传输到计算模块,最后二维计算模块生成最终结果。二者的区别在于一维乒乓缓冲只包含一维向量输入数据(仅一行数据),而二维缓冲包含二维张量的输入数据(行数为Ky行,列数为宽度输出)。
为了处理二维张量的数据,二维的片上缓存单元必须设置的更大,可以将二维的缓存空间设置为N*axi_burst,这个值的大小必须满足公式(6):
N*axi_burst>Ky*max_width_out (6)
设定N=2可以满足大多数池化计算的情况。图6(b)展示了在二维缓冲区以流水线方式传输的数据流,在X方向的计算已经完成的情况下,两个ping-pang缓存区具有相同长度的输入数据。同时,所需要的的数据都被存储到缓存区当中,因此FSM模块可以很容易控制最终结果的输出。
所述上位机的可配置参数计算模块计算的控制参数包括涉及片上缓存空间的若干参数,该若干参数包括输出特征的宽度Wout、输出特征的高度Hout、输入通道数CHout、最大输出特征个数、最大输入特征的个数。
所述片上缓存空间的大小取决于突发传输的长度,假设片上缓存的空间大小为突发长度(depth=axi_burst_len),根据下列公式确定输出个数:
Wout=(Win+2*Px-Kx)/Sx+1 (1)
公式一当中:Wout是输出特征的宽度=(Win输入特征的宽+2*Px宽度方向的填充数-Kx宽度方向的滤波器的大小)/Sx宽度方向的步长+1
Hout=(Hin+2*Py-Ky)/Sy+1 (2)
公式二当中:Hout是输出特征的高度=(Hin输入特征的高度+2*Py高度方向的填充数-Ky高度方向的滤波器的大小)/Sy高度方向的步长+1
CHout=CHin (3)
公式三:CHout是输出通道数=CHin输入通道数
max_out_numbers=(axi_burst_len-Kx)//Sx+1 (4)
公式四:max_out_nmubers是最大输出个数=(突发长度--Kx宽度方向的滤波器的大小)//Sx宽度方向的步长+1
符号“//”代表地板除法,那么可以推导出要求输入的最大像素点的个数为:
max_in_number=(max_out_numbers-1)*Sx+Kx-Px (5)
公式五:最大输入特征的个数=(max_out_nmubers是最大输出特征的个数-1)*Sx宽度方向的步长+Kx宽度方向的滤波器的大小-Py高度方向的填充数。
所述直接寄存器访问模块设有用于数据传输的五重循环子模块:循环子模块1表示沿宽度方向的高性能AXI突发传输;循环子模块2是Ky在池化高度方向上的计数;循环子模块3重复传输,直到处理整个数据行为止,循环1到循环3是在宽度方向生成完整的输出特征映射;循环子模块4和循环子模块5分别用于输出特征高度和通道深度方向。
补充说明:
图1展示了所提出的通用池化计算单元的典型工作流程。为解决现有卷积神经网络加速器设计中无法支持任意形状池化计算以及高能耗的问题,本发明提出了一种通用、可配置的高能效池化计算单行输出设计方法。为了支持具有任意输入形状和任意池化kernel/stride/padding的池化计算,池化操作被分为不同的子模块,控制模块中的所有参数都被提前计算好,然后将计算好的控制参数存储到可配置的寄存器阵列。
池化IP被设计为模块化结构,可以很容易的与其他卷积模块集成。在操作过程中,池化单元将通过具有高级可扩展接口(AXI)协议连接到控制CPU和片外DDR SDRAM(Double-Date-Rate Synchro-nous-Dynamic-Random-Access-Memory),分别进行配置参数的存储和数据传输,这是卷积神经网络加速器的常规设计方法。
在池化单元的内部,有三个子模块,分别为CRA(可配置寄存器矩阵)操作控制模块、读写DMA(直接寄存器访问)模块和计算模块。CRA接收来自CPU提前计算好的配置参数,根据配置参数控制整个工作流程;DMA根据标准的AXI协议,在片外存储器(DDR)和片上缓冲区之间传输数据流;通过流水线计算的方式将计算模块分为1D计算模块和2D计算模块。
一种池化计算宽度方向参数配置方法如图4所示,其特征在于,该方法包括以下步骤:
步骤一、输入一次突发传输的长度burst_lenth;
步骤二、片上存储的深度FIFO_depth=突发长度burst_lenth;
补充说明:
1、本发明限定了根据突发传输的长度,设定片上存储的空间,每次只提取一行输入特征,而且这一行输入特征的字节数不能大于突发传输的长度,假设突发传输的长度是8个字节,那么设计每次单行的字节数不能大于8,只能小于等于8。
2)图3展示了提取输入特征的顺序为:第一次提取0-5,第二次提取23-28,当0-5提取到一维缓冲后,一维缓冲后按照001、123、345输出给1D计算单元,当第二次提取23-28放到一维缓冲时,一维缓冲被清空,由此保证一维缓冲的深度永远不会超过突发传输的长度burst_lenth。
步骤三、宽度方向一次突发传输的最大输出个数Max_Width_out;
补充说明:
其含义是:针对一次突发传输的长度提取的输入特征数量,针对这个特征数量的最大输出个数。假设突发传输的的长度是8,则DMA从外部DDR每次提取7个数据,这7个数据发送给一维缓冲区,一维缓冲区先输出001给2D计算单元,再输出123给2D计算单元,再输出为345给2D计算单元,2D计算单元按照最大池化方法分别计算出1、3、5这三个数,所以宽度方向一次突发传输的最大输出个数Max_Width_out=3,这里的输出是指2D计算单元的输出。
步骤四、计算宽度方向需要突发传输的次数Split_Weight_Num;
补充说明:
以图3为例,按照突发长度为8个字节计算,每次提取7个字节,宽度方向一共提取4次,分别为:0、0、1、2、3、4、5;5、6、7、8、9、10、11;11、12、13、14、15、16、17;17、18、19、20、21、22、0;
步骤五、判断突发传输的次数是否精确等于1,如果大于1,则继续步骤六,如果精确等于1,则第一次宽度方向输出个数、最后一次宽度方向输出个数均等于Wout,最后一次宽度方向输入个数、最后一次宽度方向输入个数均等于Win;
补充说明:
以图3为例,假如宽度方向输如个数Win为6,则突发传输次数==1,此时,从公式计算:Wout=(Win+2*Px-Kx)/Sx+1,Win=6,Px=1,Kx=3,Sx=2,由此得出第一次宽度方向输出个数、最后一次宽度方向输出个数均等于3;Wout=3;第一次宽度方向输入个数、最后一次宽度方向输入个数均等于Win=6;
步骤六、中间传输宽度方向输出个数Middle_Width_out=突发传输最大输出个数;确定中间传输宽度方向输入个数Middle_Width_in,
补充说明:
第一、所述中间传输是指4次传输中的第2次、第3次;
第二、所述根据中间传输宽度方向输出个数,确定中间传输宽度方向输入个数,其含义是假设中间传输2D计算单元每次返回的个数是3个,用这3个输出个数反推输入个数。以图3为例,2D计算单元输出个数假设为1,3,5,则输入给2D计算单元的个数为7。分别为001、123、345,中间有2个重叠的数字1和3,除去这2个重叠的数字,有效数字为7个。
步骤七、最大输出个数Wout能否被中间传输宽度方向输出个数Middle_Width_out整除,如果能,继续步骤八;如果不能,则确定宽度方向突发传输的次数、则确定最后一次突发传输的个数,转入步骤十;
补充说明:
图3为例,宽度方向最大输出个数为12个,12除以Middle_Width_out=4为整除,假如宽度方向最大输出个数为11个,则不能整除,则转入步骤十。
步骤八、最后一次宽度方向输出个数Last_Width_out=中间传输宽度方向输出的个数Middle_Width_out;
补充说明:
以图3为例,0-22列,最大输出12个,最后一组输入数据为17、18、19、20、21、22、0,此时,最后一次的输出为19,21,22,该输出个数为3,等于中间传输宽度方向输出的个数Middle_Width_out。
步骤十、确定宽度方向最后一次突发传输的特征值输入的个数Last_Width_in,是否需要右侧填充的个数。
补充说明:
假如图3的有效列为0-21,则宽度方向输出个数为11,最后一次取数为21、0,即使加上填充0,也还是不能满足3个,所以当不够3个输入特征时,不计算输出,此时右侧不需要填充个数。因为填充没有意义,填充后宽度方向仍然不能输入特征为3。
一种通用、可配置的高能效池化计算单行输出方法如图5所示,其特点是,包括以下步骤:
步骤一、第一次高度方向输出行数=中间次高度方向输出行数=最后一次高度方向输出行数=1;
补充说明:
1)这里所述第一次、中间次、最后一次,是指分割次数。假设输入图像特征是23行23列,如果将23行23列全部放进一维或者二维缓冲区,势必占用太多的内存,所以我们按照内存的设定要求将23行23列分割为多块,例如,分割后每块为5行6列,所述第一次就是第一次被分割后,所述中间次就是出去第一次和最后一次以外的被分割次数;
2)所述的高度方向的输出,是指2D计算单元返回给外部DDR的输出行数,在本实施例中,将所有2D单元返回的输出行数都设置为1行,包括第一次返回、中间次返回、最后一次返回。
步骤二、高度方向输出的次数Split_Height_Num=Hout;
补充说明:
高度方向输出的次数是指2D计算单元针对一次分割,以单行输出的方式返回给外部DDR的总共的次数。假设一次分割后输入特征为5行6列的有效数字,用3*7的过滤器在高度方向一共框选3次,第一次框选的输入特征为0-5,23-28,此时2D计算单元接收的1D计算单元的输出为1、3、5,24、26、28,然后2D计算单元将1和24相比,3和26相比,5和28相比,计算结果为24、26、28,将24、26、28作为单行输出给外部DDR;第二次过滤器框选的输入特征为23-28,46-51,69-74,第三次过滤器框选的输入特征为69-74,92-97,因此,针对一次分割的2D计算单元按照单行输出一共输出3次给外部DDR.,用公式表示:Hout=(Hin+2*Py-Ky)/Sy+1,Hin=5,Py=1,Ky=3,Sy=2,由此得出Hout=3,高度方向输出的次数为3;
步骤三、确定第一次First_Height_in/中间次Middle_Height_in/最后一次Last_Height_in高度方向的输入行数,如果有填充,第一次输入行数First_Height_in=Ky-Py,中间输入行数Middle_Height_in=Ky;
补充说明:
所述的输入行数是针对一次输出的输入行数,并且所述的输入行数为有效输入行数。如果没有填充,输入行数就等于高度方向的过滤器,过滤器高度方向是几,输出行数就是几,因为是按照过滤器框选的输入行数。但是当有填充时,第一次的输入行数由于是指有效输入行数,所以尽管过滤器将填充行计算在内,但是实际有效输入行数应该减去过滤器的行数。所以,如果有填充,第一次输入行数First_Height_in=Ky-Py。
步骤四、最后一次高度方向的输入行数Last_Height_in>中间次高度方向的输入行数Middle_Height_in,
如果是,则多出的行不参加计算,最后一次高度方向的输入行数=中间次数高度方向的输出行数,输入图像的下端需要的填充行数=0;
如果最后一次高度方向的输入行数Last_Height_in<中间次高度方向的输入行数Middle_Height_in,则填充Padding需要被用到,最后一次高度方向的输入行数=中间次数高度方向的输出行数,输入图像的下端需要的填充行数=ky-最后一次高度方向的输入个数;
如果最后一次高度方向的输入行数Last_Height_in=中间次高度方向的输入行数Middle_Height_in,则最后一次高度方向的输入行数=中间次数高度方向的输出行数,输入图像的下端需要的填充行数=0。
补充说明:
1)假如最后一次高度方向的输入行数是4,中间一次高度方向的输入行数是3,那么第4行就没有用到,不计算第4行。
2)假如最后一次高度方向的输入行数是2,中间一次高度方向的输入行数是3,此时需要用到填充行。
3)假如最后一次高度方向的输入行数是3,中间一次高度方向的输入行数是3,此时不需要用到填充行,填充行=0。
实施例一:池化分析
如图2所示,池化操作的目标是对输入特征(CNN网络中的图像或隐藏层的输出矩阵)进行下采样,同时降低输入特征的维度。
(a)特征参数(b)池化前后的特征数据,其中5重循环代表DMA的传输策略.图2展示了典型的2*2的最大池化操作,输入特征被映射到[输入通道数][输入高度][输入宽度]形状的三维矩阵中,以输入高度为4,输入宽度为8作为例子。池化的过滤器(filter)尺寸为2*2,步幅(stride)大小也为2*2。在池化过程中,2*2滤波器窗口在初始输入平面移动,从而在每个输出通道上生成更小的2*4个像素点的输出特征。在输入/输出通道方向上,不难看出在不同的通道之间是相互独立的,因此在通道方向上很容易进行并行计算,如图2(b)所示,以并行度T=4为例,输入/输出的特征将被映射为[Channel/4][Height][Width][4]。
实施例二:DMA分析
支持任意池化的直观思想类似于CPU,其中的指令的编码和数据获取都是以流水线的方式进行。通过这种方法,设计将会变得非常灵活,但是需要对片外的存储器进行大量的数据访问,所以硬件效率将会变得相当低。为了减少对存储器的访问次数,片上缓存单元必不可少。为了支持任意形状的池化计算,片上缓存所需的空间将会变得非常大。举例来说,当池化内核(kernel)的Kx=3,Ky=18,输入特征(width_in)的宽度为224,那么我们至少需要存储Ky*width_in=4032个像素点。与此同时,考虑在通道方向上的并行度T=4,单个像素点的数据位宽为16bit,那么总的片上缓存的空间要大于Ky*width_in*T*data_bit_width=252kb,毫无疑问会消耗大量的片上资源。尽管如此,这种设计方法还不够灵活,它无法支持Ky>18的池化操作。
为了支持任意池化操作,同时减小芯片缓冲区大小,应充分利用AXI突发传输。传输的输入/输出特性数据必须以连续和增量的地址仔细地映射到DDR内存中。考虑到输入特征图的形状,建议突发传输可以沿宽度方向精确地传输数据。此外,AXI突发传输长度(表示为axi_burst_len)不能太大(<64),因此可以快速跳转到下一个地址,实现具有任意输入特征形状和任意池化内核/步幅/填充大小的通用池化操作。
根据以上讨论,DMA中的数据传输可分为五重循环。如图2(b)所示:循环1表示沿宽度方向的高性能AXI突发传输;循环2是Ky在池化高度方向上的计数;循环3重复传输,直到处理整个数据行为止,循环1到循环3是在宽度方向生成完整的输出特征映射;循环4和循环5分别用于输出特征高度和通道深度方向。
实施例三:任意池化设置的配置
实际的池化操作往往会更加复杂,因为池化的kernel/stride/padding都是可配置的参数,因此除了采用五重循环的方法,还需要采用微调的方法来精确控制AXI突发传输的情况,即循环1。
首先要确定片上缓存的空间大小,假设片上缓存的空间大小为突发长度(depth=axi_burst_len),根据下列公式确定输出个数:
Wout=(Win+2*Px-Kx)/Sx+1 (1)
Hout=(Hin+2*Py-Ky)/Sy+1 (2)
CHout=CHin (3)
max_out_numbers=(axi_burst_len-Kx)//Sx+1 (4)
符号“//”代表天花板除法,那么可以推导出要求输入的最大像素点的个数为:
max_in_number=(max_out_numbers-1)*Sx+Kx-Px (5)
因为采用的是天花板除法,所以max_in_number一定小于axi_burst_number,因此片上缓存空间足够装下每一次突发传输的输入特征数,同时需要额外注意padding区域,并不是所有区域都需要用到padding。
如图3所示的工作流程,任意给定参数Win=13,Hin=4,Kx=3,Sx=2,Px=1,axi_burst_len=8。根据公式(4)可以计算出max_out_numbers=3,根据公式(5)计算出输入像素点个数。具体来说,第一组和第二组输入特征数据包含6个元素,分别为第一行的0/1/2/3/4/5和第二行的23/24/25/26/27/28。但是第三组包含第一行中的7个输入特征数据,这7个数据分别为5/6/7/8/9/10/11。这里需要注意一点,设置的突发长度为8,然而在举例中只有6个或7个元素会被用到,这是一种考虑到任意和未知输入大小的折中设计方案。
本发明的中心思想是根据提前算好的配置参数,以流水线的方式从片外存储单元中取出有效个特征参数进行计算,下面我将通过流程图的方式详细描述如何确定配置参数,以达到到适应任意池化计算的目的。
实施例四:池化计算单元
A.X方向进行一维计算
x向计算包括一维缓冲区、FSM控制模块和计算模块。一维缓冲区用于存储来自片外存储器(DDR)的初始输入特征数据。为了提高效率,这里使用了典型的ping-pang缓冲区,每个缓冲区将只存储一行输入数据。此外,为了明确定义操作状态,每个缓冲区将在读取模式或写取模式下交替操作。所测试过的工作流程如图6(a)所示:其中“0/1/2/3/4/5”和“23/24/25/26/27”的输入数据来自DMA(图3)。对于缓冲区0,它处于读取模式,并且已存储输入行数据“0/1/2/3/4/5”。对于缓冲区1,它处于写入模式,输入行“23/24/25/26/27/28”现在正在写入。
一维FSM模块的设计目的是将缓存区的数据传输到一维计算模块。由于每个乒乓缓冲区中只包含一行数据,因此一维FSM的任务将只是进行分割计算。分割的数量是指它将生成多少输出像素,它已预先配置并表示为第一/中/最后一个宽度。例如,缓冲区0中的第一组数据包含6个元素(“0/1/2/3/4/5”),而下一组包含7个元素(“5/6/7/8/9/10/11”)。这是因为第一组已经跳过了填充元素“0”。
当padding需要被考虑时,就需要分两步计算分割过程:首先先判断是否需要padding,计算出P_left和P_right的值;接下来需要根据输出像素点和池化的尺寸来进行分割。图6(a)显示从缓存区0读取出的数据为“0/1/1/2/3/3/4/5”,其中“0/1”表示在有右侧padding时对应的的第一个输出,“1/2/3”对应第二个输出,“3/4/5”对应第三个输出。
一维计算模块是为了生成一维输出。与FSM模块类似,它还需要判断是否需要padding,以及如何进行正确分割。如果输入是第一个元素,则它将存储在MUX中并等待第二个输入。如果不是,新的输入数据和存储的临时输入值将计算池化操作,直到最后一个操作到来。正如我们在一维FSM中所讨论的,当输入数据是“0/1/1/2/3/3/4/5”,第一个输出像素的分割为“0/1”,第二个输出为“1/2/3”,第三个输出为“3/4/5”。如果将池化操作设置为最大池化,则一维计算的结果将分别为“1”、“3”、“5”作为三个一维输出。
B.Y方向的2D计算
二维计算模块与一维计算模块设计原理相似。一般情况下,二维缓存区只存储一维计算模块的临时结果,二维FSM模块将二维缓冲数据传输到计算模块,最后二维计算模块生成最终结果。二者的区别在于一维乒乓缓冲只包含一维向量输入数据(仅一行数据),而二维缓冲包含二维张量的输入数据(行数为Ky行,列数为宽度输出)。
为了处理二维张量的数据,二维的片上缓存单元必须设置的更大,可以将二维的缓存空间设置为N*axi_burst,这个值的大小必须满足公式(6):
N*axi_burst>Ky*max_width_out(6)
设定N=2可以满足大多数池化计算的情况。图6(b)展示了在二维缓冲区以流水线方式传输的数据流,在X方向的计算已经完成的情况下,两个ping-pang缓存区具有相同长度的输入数据。同时,所需要的的数据都被存储到缓存区当中,因此FSM模块可以很容易控制最终结果的输出。
需要强调的是,上述具体实施例仅仅是对本发明的解释,其并不是对本发明的限制,本领域技术人员在阅读完本说明书后可以根据需要对上述实施例做出没有创造性贡献的修改,但只要在本发明的权利要求范围内都受到专利法的保护。
Claims (5)
1.一种通用、可配置的高能效池化计算单行输出系统,其特征在于:包括上位机的可配置参数计算模块、下位机的可配置寄存器阵列操作控制模块、直接寄存器访问模块以及计算模块;所述上位机的可配置参数计算模块将操作控制模块中所用到的所有参数都提前计算好,然后CPU将计算好的控制参数通过AXI-lite总线存储到可配置寄存器阵列操作控制模块,所述的可配置寄存器阵列操作控制模块从CPU获取数据后,存储这些提前计算好的控制参数、并利用这些提前计算好的控制参数控制直接寄存器访问模块的存取操作以及控制计算模块的池化计算;所述直接寄存器访问模块按照可配置寄存器阵列操作控制模块发送的控制参数、通过AXI4总线从片外存储器DDR中获取与控制参数相匹配的单行输入数据、并将该单行输入数据发送给计算模块;所述的计算模块按照可配置寄存器阵列操作控制模块发送的控制参数,进行与控制参数相匹配的高效能池化计算,并将计算结果通过直接寄存器访问模块发送到片外存储器DDR、由片外存储器DDR对计算结果进行保存;
所述计算模块包括一维缓冲区、一维控制模块、一维计算模块、二维缓冲区、二维控制模块、二维计算模块;所述一维缓冲区接收从片外存储器DDR提取的单行输入数据、并将单行输入数据发送给一维计算模块;所述一维计算模块生成池化计算后的一维输出结果,并将池化计算后一维输出结果发送给二维缓冲区,所述二维缓冲区将池化计算后的一维输出结果发送给二维计算模块,二维计算模块生成池化计算后的二维输出结果,并将池化计算后的二维输出结果通过直接寄存器访问模块发送给片外存储器DDR进行存储;将所有二维计算模块返回的输出行数都设置为1行,实现单行输出;
所述上位机的可配置参数计算模块计算的控制参数包括涉及片上缓存空间的若干参数,该若干参数包括输出特征的宽度Wout、输出特征的高度Hout、输入通道数CHout、最大输出特征个数max_out_nmubers、最大输入特征的个数max_in_number;
所述片上缓存空间的大小取决于突发传输的长度,假设片上缓存的空间大小为突发长度即:depth=axi_burst_len,根据下列公式确定输出个数:
Wout =(Win + 2 * Px- Kx)/Sx + 1 (1)
公式一当中:Wout是输出特征的宽度=(Win输入特征的宽+2*Px宽度方向的填充数-Kx宽度方向的滤波器的大小)/Sx宽度方向的步长+1
Hout =(Hin + 2 * Py- Ky)/Sy + 1 (2)
公式二当中:Hout是输出特征的高度=(Hin输入特征的高度+2*Py高度方向的填充数-Ky高度方向的滤波器的大小)/Sy高度方向的步长+1
CHout = CHin (3)
公式三:CHout是输出通道数=CHin输入通道数
max_out_numbers = (axi_burst_len - Kx)//Sx + 1 (4)
公式四:max_out_nmubers是最大输出个数=(axi_burst_len突发长度-Kx宽度方向的滤波器的大小)//Sx宽度方向的步长+1
符号“//”代表地板除法,那么可以推导出要求输入的最大像素点的个数为:
max_in_number = (max_out_numbers - 1)*Sx + Kx -Px (5)
公式五:最大输入特征的个数=(max_out_nmubers是最大输出特征的个数-1)*Sx宽度方向的步长+Kx宽度方向的滤波器的大小-Py高度方向的填充数。
2.根据权利要求1所述的一种通用、可配置的高能效池化计算单行输出系统,其特征在于:所述二维缓冲包含二维向量的输入数据,其行数为Ky行,列数为宽度输出,二维的缓存空间设置为N*axi_burst,这个值的大小必须满足公式(6):N*axi_burst > Ky * Max_width_out (6)
其中,Max_width_out为宽度方向一次突发传输的最大输出个数。
3.根据权利要求1所述的一种通用、可配置的高能效池化计算单行输出系统,其特征在于:所述直接寄存器访问模块设有用于数据传输的五重循环子模块:循环子模块1表示沿宽度方向的高性能AXI突发传输;循环子模块2是Ky在池化高度方向上的计数;循环子模块3重复传输,直到处理整个数据行为止,循环1到循环3是在宽度方向生成完整的输出特征映射;循环子模块4和循环子模块5分别用于输出特征高度和通道深度方向。
4.一种基于权利要求1-3任意一项一种通用、可配置的高能效池化计算单行输出系统的池化计算宽度方向参数配置方法,其特征在于,该方法包括以下步骤:
步骤一、输入一次突发传输的长度burst_lenth;
步骤二、片上存储的深度FIFO_depth=突发长度burst_lenth;
步骤三、宽度方向一次突发传输的最大输出个数Max_Width_out;
步骤四、计算宽度方向需要突发传输的次数Split_Weight_Num;
步骤五、判断突发传输的次数是否精确等于1,如果大于1,则继续步骤六,如果精确等于1,则第一次宽度方向输出个数、最后一次宽度方向输出个数均等于Wout,第一次宽度方向输入个数、最后一次宽度方向输入个数均等于Win;
步骤六、中间传输宽度方向输出个数Middle_Width_out=宽度方向一次突发传输的最大输出个数Max_Width_out;确定中间传输宽度方向输入个数Middle_Width_in;
步骤七、宽度方向一次突发传输的最大输出个数Max_Width_out能否被中间传输宽度方向输出个数Middle_Width_out整除,如果能,继续步骤八;如果不能,则确定宽度方向突发传输的次数、则确定宽度方向最后一次突发传输的个数,转入步骤九;
步骤八、最后一次宽度方向输出个数Last_Width_out=中间传输宽度方向输出个数Middle_Width_out;
步骤九、确定宽度方向最后一次突发传输的个数Last_Width_in,是否需要右侧填充的个数。
5.一种基于权利要求1-3任意一项一种通用、可配置的高能效池化计算单行输出系统的通用、可配置的高能效池化计算单行输出方法,其特征在于,该方法包括以下步骤:
步骤一、第一次高度方向输出行数=中间次高度方向输出行数=最后一次高度方向输出行数=1;
步骤二、高度方向输出的次数Split_Height_Num=Hout;
步骤三、确定第一次First_Height_in/中间次Middle_Height_in/最后一次Last_Height_in高度方向的输入行数,如果有填充,第一次高度方向的输入行数First_Height_in=Ky-Py,中间次高度方向的输入行数Middle_Height_in=Ky;
步骤四、如果最后一次高度方向的输入行数Last_Height_in>
中间次高度方向的输入行数Middle_Height_in,则多出的行不参加计算,最后一次高度方向的输入行数=中间次高度方向的输出行数,输入图像的下端需要的填充行数=0;
如果最后一次高度方向的输入行数Last_Height_in<中间次高度方向的输入行数Middle_Height_in,则填充Padding需要被用到,最后一次高度方向的输入行数=中间次高度方向的输出行数,输入图像的下端需要的填充行数=ky-最后一次高度方向的输入行数;
如果最后一次高度方向的输入行数Last_Height_in=中间次高度方向的输入行数Middle_Height_in,则最后一次高度方向的输入行数=中间次高度方向的输出行数,输入图像的下端需要的填充行数=0。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111567518.XA CN114372012B (zh) | 2021-12-21 | 2021-12-21 | 一种通用、可配置的高能效池化计算单行输出系统和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111567518.XA CN114372012B (zh) | 2021-12-21 | 2021-12-21 | 一种通用、可配置的高能效池化计算单行输出系统和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114372012A CN114372012A (zh) | 2022-04-19 |
CN114372012B true CN114372012B (zh) | 2024-02-20 |
Family
ID=81140189
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111567518.XA Active CN114372012B (zh) | 2021-12-21 | 2021-12-21 | 一种通用、可配置的高能效池化计算单行输出系统和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114372012B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116010313A (zh) * | 2022-11-29 | 2023-04-25 | 中国科学院深圳先进技术研究院 | 一种通用、可配置的图像滤波计算多行输出系统和方法 |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108376283A (zh) * | 2018-01-08 | 2018-08-07 | 中国科学院计算技术研究所 | 用于神经网络的池化装置和池化方法 |
CN108763612A (zh) * | 2018-04-02 | 2018-11-06 | 复旦大学 | 一种神经网络的池化层加速运算的方法与电路 |
CN108805285A (zh) * | 2018-05-30 | 2018-11-13 | 济南浪潮高新科技投资发展有限公司 | 一种卷积神经网络池化单元设计方法 |
CN109002885A (zh) * | 2018-07-24 | 2018-12-14 | 济南浪潮高新科技投资发展有限公司 | 一种卷积神经网络池化单元及池化计算方法 |
CN109542515A (zh) * | 2017-10-30 | 2019-03-29 | 上海寒武纪信息科技有限公司 | 运算装置及方法 |
CN110069444A (zh) * | 2019-06-03 | 2019-07-30 | 南京宁麒智能计算芯片研究院有限公司 | 一种计算单元、阵列、模块、硬件系统及实现方法 |
CN110674934A (zh) * | 2019-08-26 | 2020-01-10 | 陈小柏 | 一种神经网络池化层及其运算方法 |
CN110688158A (zh) * | 2017-07-20 | 2020-01-14 | 上海寒武纪信息科技有限公司 | 计算装置以及神经网络的处理系统 |
CN111937009A (zh) * | 2018-04-05 | 2020-11-13 | Arm有限公司 | 脉动卷积神经网络 |
CN112381220A (zh) * | 2020-12-08 | 2021-02-19 | 厦门壹普智慧科技有限公司 | 一种神经网络张量处理器 |
WO2021100900A1 (ko) * | 2019-11-20 | 2021-05-27 | 전자부품연구원 | 적응형 딥러닝 가속 장치 및 방법 |
CN112905530A (zh) * | 2021-03-29 | 2021-06-04 | 上海西井信息科技有限公司 | 片上架构、池化计算加速器阵列、单元以及控制方法 |
CN113240103A (zh) * | 2021-06-25 | 2021-08-10 | 清华大学 | 神经网络池化电路 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190205738A1 (en) * | 2018-01-04 | 2019-07-04 | Tesla, Inc. | Systems and methods for hardware-based pooling |
US11768911B2 (en) * | 2019-09-24 | 2023-09-26 | Alibaba Group Holding Limited | Method and apparatus for execution of neural network |
-
2021
- 2021-12-21 CN CN202111567518.XA patent/CN114372012B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110688158A (zh) * | 2017-07-20 | 2020-01-14 | 上海寒武纪信息科技有限公司 | 计算装置以及神经网络的处理系统 |
CN109542515A (zh) * | 2017-10-30 | 2019-03-29 | 上海寒武纪信息科技有限公司 | 运算装置及方法 |
CN108376283A (zh) * | 2018-01-08 | 2018-08-07 | 中国科学院计算技术研究所 | 用于神经网络的池化装置和池化方法 |
CN108763612A (zh) * | 2018-04-02 | 2018-11-06 | 复旦大学 | 一种神经网络的池化层加速运算的方法与电路 |
CN111937009A (zh) * | 2018-04-05 | 2020-11-13 | Arm有限公司 | 脉动卷积神经网络 |
CN108805285A (zh) * | 2018-05-30 | 2018-11-13 | 济南浪潮高新科技投资发展有限公司 | 一种卷积神经网络池化单元设计方法 |
CN109002885A (zh) * | 2018-07-24 | 2018-12-14 | 济南浪潮高新科技投资发展有限公司 | 一种卷积神经网络池化单元及池化计算方法 |
CN110069444A (zh) * | 2019-06-03 | 2019-07-30 | 南京宁麒智能计算芯片研究院有限公司 | 一种计算单元、阵列、模块、硬件系统及实现方法 |
CN110674934A (zh) * | 2019-08-26 | 2020-01-10 | 陈小柏 | 一种神经网络池化层及其运算方法 |
WO2021100900A1 (ko) * | 2019-11-20 | 2021-05-27 | 전자부품연구원 | 적응형 딥러닝 가속 장치 및 방법 |
CN112381220A (zh) * | 2020-12-08 | 2021-02-19 | 厦门壹普智慧科技有限公司 | 一种神经网络张量处理器 |
CN112905530A (zh) * | 2021-03-29 | 2021-06-04 | 上海西井信息科技有限公司 | 片上架构、池化计算加速器阵列、单元以及控制方法 |
CN113240103A (zh) * | 2021-06-25 | 2021-08-10 | 清华大学 | 神经网络池化电路 |
Non-Patent Citations (1)
Title |
---|
深度学习中的卷积神经网络硬件加速系统设计研究;王昆;《中国优秀硕士学位论文全文数据库 信息科技辑》;I138-802 * |
Also Published As
Publication number | Publication date |
---|---|
CN114372012A (zh) | 2022-04-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108108809B (zh) | 一种针对卷积神经元网络进行推理加速的硬件架构及其工作方法 | |
CN207458128U (zh) | 一种基于fpga在视觉应用中的卷积神经网络加速器 | |
CN104915322B (zh) | 一种卷积神经网络硬件加速方法 | |
CN110516801B (zh) | 一种高吞吐率的动态可重构卷积神经网络加速器 | |
KR102642853B1 (ko) | 컨볼루션 회로, 그것을 포함하는 어플리케이션 프로세서 및 그것의 동작 방법 | |
CN102208005B (zh) | 一种2-d卷积器 | |
US11989638B2 (en) | Convolutional neural network accelerating device and method with input data conversion | |
CN109447241B (zh) | 一种面向物联网领域的动态可重构卷积神经网络加速器架构 | |
CN110991634B (zh) | 人工智能加速器、设备、芯片及数据处理方法 | |
CN108665063B (zh) | 用于bnn硬件加速器的双向并行处理卷积加速系统 | |
CN107392309A (zh) | 一种基于fpga的通用定点数神经网络卷积加速器硬件结构 | |
CN108681984A (zh) | 一种3*3卷积算法的加速电路 | |
CN108563808A (zh) | 基于fpga的异构可重构图计算加速器系统的设计方法 | |
CN208766715U (zh) | 3*3卷积算法的加速电路 | |
CN103049241A (zh) | 一种提高cpu+gpu异构装置计算性能的方法 | |
CN110674927A (zh) | 一种用于脉动阵列结构的数据重组方法 | |
CN113361695B (zh) | 卷积神经网络加速器 | |
CN111582465B (zh) | 基于fpga的卷积神经网络加速处理系统、方法以及终端 | |
CN110705702A (zh) | 一种动态可扩展的卷积神经网络加速器 | |
CN113222130A (zh) | 一种基于fpga的可重构卷积神经网络加速器 | |
CN114372012B (zh) | 一种通用、可配置的高能效池化计算单行输出系统和方法 | |
CN109472734B (zh) | 一种基于fpga的目标检测网络及其实现方法 | |
CN109146065A (zh) | 二维数据的卷积运算方法及装置 | |
CN110598844A (zh) | 一种基于fpga的并行卷积神经网络加速器及加速方法 | |
CN114265801B (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 |