CN114265801A - 一种通用、可配置的高能效池化计算多行输出方法 - Google Patents
一种通用、可配置的高能效池化计算多行输出方法 Download PDFInfo
- Publication number
- CN114265801A CN114265801A CN202111569090.2A CN202111569090A CN114265801A CN 114265801 A CN114265801 A CN 114265801A CN 202111569090 A CN202111569090 A CN 202111569090A CN 114265801 A CN114265801 A CN 114265801A
- Authority
- CN
- China
- Prior art keywords
- output
- height direction
- 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.)
- Granted
Links
Images
Classifications
-
- 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
- Multi Processors (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
Abstract
本发明公开了一种通用、可配置的高能效池化计算多行输出方法,包括以下步骤:计算高度方向的最大输入行数;计算高度方向的最大输出行数;判断高度方向的分割次数是否为1,大于1,分别求出第一次高度方向输出的行数、输入行数;中间次高度方向输出的行数、输入行数;判断Hout能否被中间次数的高度方向输入行数整除。若不能,确定高度方向分割次数;最后一次高度方向的输出行数=(Hout‑第一次高度方向的输出行数)%中间次数的高度方向的输出行数;本发明采用池化计算多行输出方法,在节省空间和提高效率上找到了一个平衡点,通过设计2D计算单元的存储空间为2倍的1D缓冲区存储空间,既满足通常多行输出的要求,也满足节约电路面积降低能耗的要求。
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;
所述上位机的可配置参数计算模块计算的控制参数包括涉及片上缓存空间的若干参数,该若干参数包括输出特征的宽度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高度方向的填充数;
该多行输出方法还基于一种池化计算宽度方向参数配置方法,该方法包括:
步骤一、输入一次突发传输的长度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,是否需要右侧填充的个数。
其特征在于:所述一种通用、可配置的高能效池化计算多行输出方法包括以下步骤:
步骤一、计算高度方向的最大输入行数;
所述高度方向的最大输入行数=2D计算模块的内存深度/最大宽度方向的输出个数;
步骤二、计算高度方向的最大输出行数;
所述高度方向的最大输出行数=(高度方向的最大输入行数-高度方向滤波器的大小)/高度方向的步长+1
步骤三、判断高度方向的分割次数是否为1,如果等于1,则:第一次高度方向的输出行数=Hout,第一次高度方向的输入行数=Hin;确定最后一次高度方向输入行数,输入特征底部需要填充padding的行数,如果分割次数大于1,则继续步骤四;
步骤四、第一次高度方向输出的行数=高度方向最大输出行数;第一次高度方向输入行数=(第一次高度方向输出的行数-1)*高度方向的步长+高度方向滤波器的大小-高度方向的padding的值;
步骤五、中间次数高度方向的输出行数=高度方向最大的输出行数;中间次数高度方向的输入行数=中间次数高度方向的输出行数*高度方向的步长+重叠步长
步骤六、Hout能否被中间次数的高度方向输入行数整除?如果能,继续步骤七,如果不能,确定高度方向分割次数;最后一次高度方向的输出行数=(Hout-第一次高度方向的输出行数)%中间次数的高度方向的输出行数;
步骤七、确定高度方向分割次数;最后一次高度方向的输出行数=中间次数高度方向的输出行数;
步骤八、确定最后一次高度方向的输入行数,输入特征底部需要的填充padding的行数。
所述2D计算模块的内存深度,设为2倍的1D片上存储深度,所述1D片上存储的深度=突发长度。
本发明的优点效果
1、本发明提出一种参数可配置化的技术方案,根据不同网络结构,设定已知参数,根据已知参数配置寄存器信息,根据寄存器信息指导我们如何从外部DDR提取数据。具体为通过CPU预先计算好配置参数、并下发给可配置寄存器阵列操作控制模块,使得可配置寄存器阵列操作控制模块能够按照控制参数控制DMA如何取数据、控制缓冲区如何存数据、控制计算单元如何计算数据。当网络结构变化时,可以根据当前网络结构的需要,设置与该网络结构相匹配的突发传输的长度burst_lenth、输入特征的宽度Win、输入特征的高度Hin、填充数值Padding、以及步长Stride等,CPU根据这些已知参数提前计算好用于控制的配置参数,可配置寄存器阵列操作控制模块接收来自CPU提前计算好的配置参数,根据配置参数控制整个工作流程,从而使得可配置寄存器阵列操作控制模块CRA被设计能支持任意类型的池化计算的操作控制模块,解决了现有卷积神经网络加速器设计中无法支持任意形状池化计算的难题。
2、本发明克服了本领域长期以来的技术偏见,既参数可配置化技术方案从来都是只适合软件系统、不适合硬件电路设计的偏见,采用了本领域技术人员不曾想到的根据已知参数配置寄存器信息的技术,实现了支持任意类型的池化计算的操作控制目标,具有突出的实质性特点。
3、本发明采用池化计算多行输出的方法,在节省空间和提高效率上找到了一个平衡点,通过设计2D计算单元的存储空间为2倍的1D缓冲区存储空间,既满足了通常多行输出的要求,也满足了节约电路面积降低能耗的要求。
附图说明
图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计算速度很快,增加的运算时间可忽略不计。采用单行输入的方法,使得硬件电路面积相比传统方法减小了三分之二。
3、多行输出设计原理
1)多行输出是指2D计算单元返回给外部DDR最终结果中包括了多行,但是这个多行是1D计算单元输出计算结果以后、输入特征已经被浓缩以后的多行,和前面所述片上存储深度=突发传输的长度是两个不同的存储区域,所述片上存储深度=突发传输的长度,是针对一维缓冲区而言,所述=多行输出结果是相对2D计算单元而言,一维缓冲区和2D计算单元的关系是=2D计算单元的内存容量是2倍的1D缓冲区内存容量,如果1D缓冲区片上存储的深度=8,则2D计算单元的存储空间就是16;
2)2D计算单元之所以能够多行输出,第一个条件是DMA从外部DDR提取输入特征的行数能够满足输出多行的要求:举例:为了使得2D计算单元输出2行数据,假设留给2D计算单元的内存容量是16,就要求第一次从DDR提取有效输入行数为4行,中间次从DDR提取有效输入行数为5行。第二个条件是2D计算单元能够存储多行数据,但这并不意味着2D计算单元的内存空间很大,因为2D计算单元存储的是1D计算单元计算以后浓缩的结果,而1D计算单元存储的是没有被浓缩的原始数据。因此,即使2D计算单元存储多行,也不会超过2倍的1D存储空间。通过计算得出结论,当2D计算单元存储空间=2倍的1D计算单元存储空间时,基本能够满足多行输出的要求。前提是多行输出也不是任意的多行,而是满足设计要求的多行。
3)多行提取、多行输出的优势:多行提取的优势在于提高存取效率,避免重叠区域的提取。以图3为例,假设过滤器的高度方向为3,当提取0-5,23-28以后,直接提取46-51、69-74即可,尽管计算时需要重叠计算,但是重叠的数据已经在上一次存储在2D计算单元上,所以不需要重复提取。例如23-28的输出结果为24、26、28,这3个数据已经存储在2D计算单元上,只有当全部数据都齐全,2D单元返回输出结果时,2D单元才会被清空。在2D计算单元没有输出最终结果以前,是允许保留数据的。而1D缓冲区存放的数据必须重叠提取的原因是,1D缓冲区不能保留上一次的数据,因为空间只有那么大,当下一次的数据放上去之前,必须把上一次的数据清零,清零以后上一次和下一次之间的重叠数据就被清空了,所以下一次还需要重复提取重叠区的数据。
4、2D存储空间和1D存储空间相结合。2D计算单元的存储空间依赖于1D存储空间对于片上存储深度的限制(片上存储深度=突发长度),没有1D存储空间打基础,2D存储单元的电路面积就会很大,而难以实现多行输出,没有2D存储空间的扩充,尽管对1D片上存储深度进行了限制,但是总的存取效率不能提高,因此,1D和2D是相互支持相互依赖的关系,只有组合以后才能产生预想的效果。
基于以上发明原理,本发明设计了一种通用、可配置的高能效池化计算多行输出方法。
一种通用、可配置的高能效池化计算多行输出方法如图5所示,该多行输出方法基于一种可配置的多行输出池化计算处理系统如图1所示,该处理系统包括上位机的可配置参数计算模块、下位机的可配置寄存器阵列操作控制模块、直接寄存器访问模块、以及计算模块;所述上位机的可配置参数计算模块将操作控制模块中所用到的所有参数都提前计算好,然后CPU将计算好的控制参数通过AXI-lite总线存储到可配置的寄存器阵列操作控制模块,所述的可配置寄存器阵列操作控制模块从CPU获取数据后,存储这些提前计算好的控制参数、并利用这些提前计算好的控制参数控制直接寄存器访问模块的存取操作、以及控制计算模块的池化计算;所述直接寄存器访问模块按照可配置寄存器阵列操作控制模块发送的控制参数、通过AXI4总线从片外存储器DDR中获取与控制参数相匹配的单行输入数据、并将该单行输入数据发送给计算模块;所述的计算模块按照可配置寄存器阵列操作控制模块发送的控制参数,进行与控制参数相匹配的高效能池化计算,并将计算结果用过直接寄存器访问模块发送到片外存储器DDR、由片外存储器DDR对计算结果进行保存;
如图1所示,所述计算模块包括一维缓冲区、一维控制模块、一维计算模块、二维缓冲区、二维控制模块、二维计算模块;所述一维缓冲区接收从片外存储器DDR提取的单行输入数据、并将单行输入数据发送给一维计算模块;所述一维计算模块生成池化计算后的一维输出结果,并将池化计算后一维输出结果发送给二维缓冲区,所述二维缓冲区将池化计算后的一维输出结果发送给二维计算模块,二维计算模块生成池化计算后的二维输出结果,并将池化计算后的二维输出结果通过直接寄存器访问模块发送给片外存储器DDR进行存储;
所述二维缓冲包含二维向量的输入数据,其行数为Ky行,列数为宽度输出,二维的缓存空间设置为N*axi_burst,这个值的大小必须满足公式(6):
xi_burst>Ky*max_width_out; (6)
补充说明:
1)公式(6)的含义是,留给2D计算单元的内存空间至少是2倍的片上存储深度,而片上存储深度=突发长度,所以留给2D计算单元的内存空间不能低于2倍的突发长度。
2)假设突发长度axi_burst=8,max_width_out=3,Ky=3,由于Ky*max_width_out=9,所以N至少为2,当N=2时,N*axi_burst=16,16>9
所述上位机的可配置参数计算模块计算的控制参数包括涉及片上缓存空间的若干参数,该若干参数包括输出特征的宽度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高度方向的填充数;
该多行输出方法还基于一种池化计算宽度方向参数配置方法如图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;
补充说明:
按照突发长度为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所示,所述一种通用、可配置的高能效池化计算多行输出方法包括以下步骤:
步骤一、计算高度方向的最大输入行数;
所述高度方向的最大输入行数=2D计算模块的内存深度/最大宽度方向的输出个数;
补充说明:
假设留给2D存储单元的内存为2*8=16个字节,最大宽度方向的输出个数=3,则高度方向的最大输入行数=16/3=5,高度方向最大输入行数为5;
步骤二、计算高度方向的最大输出行数;
所述高度方向的最大输出行数=(高度方向的最大输入行数-高度方向滤波器的大小)/高度方向的步长+1;
补充说明:
1、假设高度方向的最大输入行数为5,高度方向滤波器的大小=3,高度方向的步长=2,则高度方向的最大输出行数=(5-3)/2+1=2;
2、此处高度方向的最大输出行数=2,是在只考虑顶部的填充行、没有用到底部的填充行的情况下得出的,当最大有效输入行数为5时,由于底部的填充行没有考虑,最下面1行的数据(92-96)在考虑填充行的情况下,也不能凑够3行,也就不能满足Ky=3的过滤器要求,所以高度方向底部的填充行没有用到,最大输出行数=2。
3、用公式计算:当不考虑填充行时,高度方向的最大输出行数=(高度方向的最大输入行数-高度方向滤波器的大小)/高度方向的步长+1=(5-3)/2+1=2;
步骤三、判断高度方向的分割次数是否为1,如果等于1,则:第一次高度方向的输出行数=Hout,第一次高度方向的输入行数=Hin;确定最后一次高度方向输入行数,输入特征底部需要填充padding的行数,如果分割次数大于1,则继续步骤四;
补充说明:
当分割次数==1时,在高度方向上只需要一次连续对所有的行数进行取值顶部和低部的填充行都要考虑,所以,高度方向的输出行数=(高度方向的最大输入行数+2*Px-高度方向滤波器的大小)/高度方向的步长+1=(5+2-3)/2+1=3;
步骤四、第一次高度方向输出的行数=高度方向最大输出行数;第一次高度方向输入行数=(第一次高度方向输出的行数-1)*高度方向的步长+高度方向滤波器的大小-高度方向的padding的值;
补充说明:
1)当分割次数大于1时,第一次高度方向输出的行数所对应的输入行数是不考虑底部的填充行的,所以最大输出行数为2;
2)当分割次数大于1时,第一次高度方向输入行数=(第一次高度方向输出的行数-1)*高度方向的步长+高度方向滤波器的大小-高度方向的padding的值=(2-1)*2+3-1=4,所以,当分割次数大于1时,第一次高度方向的有效输入行数=4;
步骤五、中间次数高度方向的输出行数=高度方向最大的输出行数;中间次数高度方向的输入行数=中间次数高度方向的输出行数*高度方向的步长+重叠步长;
补充说明:
由于中间次数高度方向的输出行数=高度方向最大的输出行数=2,所以,中间次数高度方向的输入行数=2*2+1=5,中间次数高度方向的输入行数为5;
步骤六、Hout能否被中间次数的高度方向输入行数整除?如果能,继续步骤七,如果不能,确定高度方向分割次数;最后一次高度方向的输出行数=(Hout-第一次高度方向的输出行数)%中间次数的高度方向的输出行数;
补充说明:
假设高度方向的输出行数Hout=5,中间次数高度方向的输出行数为2,5不能被2整除,最后一次高度方向的输出行数=1,根据分割次数来确定最后一次高度方向的输入行数,最终确定是否需要用到填充。
步骤七、确定高度方向分割次数;最后一次高度方向的输出行数=中间次数高度方向的输出行数;
步骤八、确定最后一次高度方向的输入行数,输入特征底部需要的填充padding的行数。
补充说明:
假设高度方向的输出行数Hout=4,中间次数高度方向的输出行数为2,4能够被2整除,那么对应最后一次高度方向的输出行数=2,根据高度方向的分割次数来确定最后一次高度方向的输入行数,最终确定是否需要用到填充padding。
所述2D计算模块的内存深度,设为2倍的1D片上存储深度,所述1D片上存储的深度=突发长度。
补充说明:
假设突发长度为8,那么1D的内存深度就是8,2D的内存设定为16,根据2D的内存大小来确定最大的输出行数,从而确保2D每次输入的数据量不会超过2D的存储空间。
实施例一:池化分析
如图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 (2)
1.一种通用、可配置的高能效池化计算多行输出方法,该多行输出方法基于一种可配置的多行输出池化计算处理系统,该处理系统包括上位机的可配置参数计算模块、下位机的可配置寄存器阵列操作控制模块、直接寄存器访问模块、以及计算模块;所述上位机的可配置参数计算模块将操作控制模块中所用到的所有参数都提前计算好,然后CPU将计算好的控制参数通过AXI-lite总线存储到可配置的寄存器阵列操作控制模块,所述的可配置寄存器阵列操作控制模块从CPU获取数据后,存储这些提前计算好的控制参数、并利用这些提前计算好的控制参数控制直接寄存器访问模块的存取操作、以及控制计算模块的池化计算;所述直接寄存器访问模块按照可配置寄存器阵列操作控制模块发送的控制参数、通过AXI4总线从片外存储器DDR中获取与控制参数相匹配的单行输入数据、并将该单行输入数据发送给计算模块;所述的计算模块按照可配置寄存器阵列操作控制模块发送的控制参数,进行与控制参数相匹配的高效能池化计算,并将计算结果用过直接寄存器访问模块发送到片外存储器DDR、由片外存储器DDR对计算结果进行保存;
所述计算模块包括一维缓冲区、一维控制模块、一维计算模块、二维缓冲区、二维控制模块、二维计算模块;所述一维缓冲区接收从片外存储器DDR提取的单行输入数据、并将单行输入数据发送给一维计算模块;所述一维计算模块生成池化计算后的一维输出结果,并将池化计算后一维输出结果发送给二维缓冲区,所述二维缓冲区将池化计算后的一维输出结果发送给二维计算模块,二维计算模块生成池化计算后的二维输出结果,并将池化计算后的二维输出结果通过直接寄存器访问模块发送给片外存储器DDR进行存储;
所述二维缓冲包含二维向量的输入数据,其行数为Ky行,列数为宽度输出,二维的缓存空间设置为N*axi_burst,这个值的大小必须满足公式(6):
N*axi_burst>Ky*max_width_out;
所述上位机的可配置参数计算模块计算的控制参数包括涉及片上缓存空间的若干参数,该若干参数包括输出特征的宽度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高度方向的填充数;
该多行输出方法还基于一种池化计算宽度方向参数配置方法,该方法包括:
步骤一、输入一次突发传输的长度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,是否需要右侧填充的个数;
其特征在于:所述一种通用、可配置的高能效池化计算多行输出方法,包括以下步骤:
步骤一、计算高度方向的最大输入行数;
所述高度方向的最大输入行数=2D计算模块的内存深度/最大宽度方向的输出行数;
步骤二、计算高度方向的最大输出行数;
所述高度方向的最大输出行数=(高度方向的最大输入行数-高度方向滤波器的大小)/高度方向的步长+1
步骤三、判断高度方向的分割次数是否为1,如果等于1,则:第一次高度方向的输出行数=Hout,第一次高度方向的输入行数=Hin;确定最后一次高度方向输入行数,输入特征底部需要填充padding的行数,如果分割次数大于1,则继续步骤四;
步骤四、第一次高度方向输出的行数=高度方向最大输出行数;第一次高度方向输入行数=(第一次高度方向输出的行数-1)*高度方向的步长+高度方向滤波器的大小-高度方向的padding的值;
步骤五、中间次数高度方向的输出行数=高度方向最大的输出行数;中间次数高度方向的输入行数=中间次数高度方向的输出行数*高度方向的步长+重叠步长
步骤六、Hout能否被中间次数的高度方向输入行数整除?如果能,继续步骤六,如果不能,确定高度方向分割次数;最后一次高度方向的输出行数=(Hout-第一次高度方向的输出行数)%中间次数的高度方向的输出行数;
步骤七、确定高度方向分割次数;最后一次高度方向的输出行数=中间次数高度方向的输出行数;
步骤八、确定最后一次高度方向的输入行数,输入特征底部需要的填充padding的行数。
2.根据权利要求1所述一种通用、可配置的高能效池化计算多行输出方法,其特征在于:所述2D计算模块的内存深度,设为2倍的1D片上存储深度,所述1D片上存储的深度=突发长度。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202111569090.2A CN114265801B (zh) | 2021-12-21 | 2021-12-21 | 一种通用、可配置的高能效池化计算多行输出方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202111569090.2A CN114265801B (zh) | 2021-12-21 | 2021-12-21 | 一种通用、可配置的高能效池化计算多行输出方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN114265801A true CN114265801A (zh) | 2022-04-01 |
| CN114265801B CN114265801B (zh) | 2023-07-25 |
Family
ID=80828439
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202111569090.2A Active CN114265801B (zh) | 2021-12-21 | 2021-12-21 | 一种通用、可配置的高能效池化计算多行输出方法 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN114265801B (zh) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN114860433A (zh) * | 2022-04-25 | 2022-08-05 | 中国科学院计算技术研究所 | 一种在模拟器上进行池化计算操作的方法 |
| WO2024114505A1 (zh) * | 2022-11-29 | 2024-06-06 | 中国科学院深圳先进技术研究院 | 一种通用、可配置的图像滤波计算多行输出系统和方法 |
Citations (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN108763612A (zh) * | 2018-04-02 | 2018-11-06 | 复旦大学 | 一种神经网络的池化层加速运算的方法与电路 |
| US20200151019A1 (en) * | 2019-03-14 | 2020-05-14 | Rednova Innovations,Inc. | OPU-based CNN acceleration method and system |
| CN113806261A (zh) * | 2021-10-09 | 2021-12-17 | 中国人民解放军国防科技大学 | 一种面向向量处理器的池化向量化实现方法 |
-
2021
- 2021-12-21 CN CN202111569090.2A patent/CN114265801B/zh active Active
Patent Citations (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN108763612A (zh) * | 2018-04-02 | 2018-11-06 | 复旦大学 | 一种神经网络的池化层加速运算的方法与电路 |
| US20200151019A1 (en) * | 2019-03-14 | 2020-05-14 | Rednova Innovations,Inc. | OPU-based CNN acceleration method and system |
| CN113806261A (zh) * | 2021-10-09 | 2021-12-17 | 中国人民解放军国防科技大学 | 一种面向向量处理器的池化向量化实现方法 |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN114860433A (zh) * | 2022-04-25 | 2022-08-05 | 中国科学院计算技术研究所 | 一种在模拟器上进行池化计算操作的方法 |
| WO2024114505A1 (zh) * | 2022-11-29 | 2024-06-06 | 中国科学院深圳先进技术研究院 | 一种通用、可配置的图像滤波计算多行输出系统和方法 |
Also Published As
| Publication number | Publication date |
|---|---|
| CN114265801B (zh) | 2023-07-25 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN106951395B (zh) | 面向压缩卷积神经网络的并行卷积运算方法及装置 | |
| CN111062472B (zh) | 一种基于结构化剪枝的稀疏神经网络加速器及其加速方法 | |
| CN104899182B (zh) | 一种支持可变分块的矩阵乘加速方法 | |
| CN107153873B (zh) | 一种二值卷积神经网络处理器及其使用方法 | |
| CN110516801B (zh) | 一种高吞吐率的动态可重构卷积神经网络加速器 | |
| CN108108809B (zh) | 一种针对卷积神经元网络进行推理加速的硬件架构及其工作方法 | |
| CN109409511B (zh) | 一种用于动态可重构阵列的卷积运算数据流调度方法 | |
| CN108805266A (zh) | 一种可重构cnn高并发卷积加速器 | |
| CN110458279A (zh) | 一种基于fpga的二值神经网络加速方法及系统 | |
| CN112950656B (zh) | 一种基于fpga平台的按通道进行预读取数据的分块卷积方法 | |
| US11989638B2 (en) | Convolutional neural network accelerating device and method with input data conversion | |
| CN109032781A (zh) | 一种卷积神经网络算法的fpga并行系统 | |
| CN110175670B (zh) | 一种基于FPGA实现YOLOv2检测网络的方法及系统 | |
| CN111898733A (zh) | 一种深度可分离卷积神经网络加速器架构 | |
| CN108665063B (zh) | 用于bnn硬件加速器的双向并行处理卷积加速系统 | |
| CN110674927A (zh) | 一种用于脉动阵列结构的数据重组方法 | |
| CN107203808B (zh) | 一种二值卷积装置及相应的二值卷积神经网络处理器 | |
| CN111626414A (zh) | 一种动态多精度神经网络加速单元 | |
| WO2021232422A1 (zh) | 神经网络的运算装置及其控制方法 | |
| CN110705702A (zh) | 一种动态可扩展的卷积神经网络加速器 | |
| CN110851779A (zh) | 用于稀疏矩阵运算的脉动阵列架构 | |
| CN113392963B (zh) | 基于fpga的cnn硬件加速系统设计方法 | |
| CN113869507A (zh) | 一种基于脉动阵列的神经网络加速器卷积计算装置与方法 | |
| CN114265801A (zh) | 一种通用、可配置的高能效池化计算多行输出方法 | |
| CN115688892A (zh) | 一种稀疏权重Fused-Layer卷积加速器结构的FPGA实现方法 |
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 |