CN117273102A - 用于池化加速器的装置及方法和芯片电路及计算设备 - Google Patents
用于池化加速器的装置及方法和芯片电路及计算设备 Download PDFInfo
- Publication number
- CN117273102A CN117273102A CN202311567401.0A CN202311567401A CN117273102A CN 117273102 A CN117273102 A CN 117273102A CN 202311567401 A CN202311567401 A CN 202311567401A CN 117273102 A CN117273102 A CN 117273102A
- Authority
- CN
- China
- Prior art keywords
- data
- module
- calculation
- window
- pooling
- 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.)
- Pending
Links
- 238000011176 pooling Methods 0.000 title claims abstract description 95
- 238000000034 method Methods 0.000 title claims abstract description 35
- 238000004364 calculation method Methods 0.000 claims abstract description 214
- 239000000872 buffer Substances 0.000 claims abstract description 171
- 238000012216 screening Methods 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 5
- 230000006399 behavior Effects 0.000 claims description 4
- 230000003139 buffering effect Effects 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 24
- 238000012545 processing Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 8
- 238000004422 calculation algorithm Methods 0.000 description 7
- 230000005540 biological transmission Effects 0.000 description 6
- 230000001133 acceleration Effects 0.000 description 5
- 238000013528 artificial neural network Methods 0.000 description 5
- 238000013135 deep learning Methods 0.000 description 5
- 230000001276 controlling effect Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000009825 accumulation Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000013527 convolutional neural network Methods 0.000 description 2
- 238000013479 data entry Methods 0.000 description 2
- 238000013136 deep learning model Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 238000003058 natural language processing Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012549 training Methods 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000001105 regulatory effect Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 239000013598 vector Substances 0.000 description 1
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/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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Physics & Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computing Systems (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Neurology (AREA)
- Artificial Intelligence (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Image Generation (AREA)
Abstract
本发明提供一种用于池化加速器的装置及方法和芯片电路及计算设备,所述装置包括行缓冲器模块、控制模块、数据整理模块、数据选择模块及多个计算模块,其中:所述行缓冲器模块将分组缓存的行数据输入到所述数据选择模块中;所述数据选择模块筛选出每个池化窗口的计算数据,并输入所述计算模块中;所述计算模块用于数据运算;所述数据整理模块将结果数据排列整理后输出;所述控制模块用于控制所述行缓冲器中每个数据行在任意时间的操作行为,并控制所述数据选择模块、所述计算模块和所述数据整理模块。根据本发明的技术方案能够实现对池化加速器运算速度的提升。
Description
技术领域
本发明涉及AI芯片技术领域,具体涉及一种用于池化加速器的装置及方法和芯片电路及计算设备。
背景技术
池化算法是一种用于在深度学习中减小图像尺寸的方法。它们通常用于卷积神经网络(CNN)中,以减少计算量和内存使用,并提高模型的泛化能力。POOL操作是神经网络计算中非常常用的算子,用来降低输出特征向量的数量。池化算法的主要目的是通过在输入图像的不同区域应用某种函数(例如最大池化或平均池化),来提取关键特征,同时减少图像尺寸。这样可以减少计算量和内存使用,并且可以使模型更加鲁棒,即能够更好地处理图像中的一般性和抽象性。
池化加速器是一种专门设计用于加速深度学习和其他机器学习任务的硬件设备。它们通常由一组专门优化的处理器和内存组成,可以在大量数据上进行高效并行处理。池化加速器的出现,使得训练大型深度学习模型变得更加高效和快速。
由于深度学习在计算机视觉、自然语言处理和其他领域中的广泛应用,池化加速器已经成为AI领域的重要组成部分。现有绝大部分神经网络硬件加速器均可实现对POOL算法的硬件加速,实现的方式都是通过不断从存储中读取数据并计算来实现。但是因为不同的计算窗口经常会大量使用重复的数据,这些重复的数据本不必要从内存中反复读取,因此大大降低了硬件加速器的加速效果,降低了池化算法的计算速度。
为此,需要一种技术方案,能够通过简单的装置和方法实现对池化加速器的加速效果的提升,从而进一步提升池化算法的计算速度。
发明内容
本发明旨在提供用于一种池化加速器装置和方法及计算设备,能够任意并行度的数据输入方式,对数据进行批量高速运算处理。
根据本发明的一方面,提供一种池化加速器装置,所述装置包括行缓冲器模块、控制模块、数据整理模块、数据选择模块及多个计算模块,其中:
所述行缓冲器模块接收来自所述控制模块的信号,将分组缓存的行数据输入到所述数据选择模块中;
所述数据选择模块接收来自所述行缓冲器模块的数据,筛选出每个池化窗口的计算数据,并输入所述计算模块中;
所述计算模块用于对接收的所述计算数据进行数据运算,并将运算结果输出到所述数据整理模块;
所述数据整理模块获取来自所述计算模块的运算结果,并将收集到的所述运算结果数据排列整理后输出;
所述控制模块用于控制所述行缓冲器模块中每个数据行在任意时间的操作行为,并控制所述数据选择模块、所述计算模块和所述数据整理模块。
根据一些实施例,所述行缓冲器模块包括多个行数据缓冲区,其中:
每一所述行数据缓冲区包含特定数量的数据行数,所述特定数量与预先设定的并行度的值相等;
多个所述行数据缓冲区互相串联读取相邻行数据缓冲区的缓存数据,在高度方向上实现数据的重复使用;
多个所述行数据缓冲区连接到所述数据选择模块,将缓存的行数据送入所述数据选择模块。
根据一些实施例,所述数据选择模块配置为:
根据填充宽度计算各个所述池化窗口中包含的数据行数;
根据所述数据行数、池化窗口参数、步长,确认所述池化窗口中计算数据在行缓冲器模块中的位置;
将相应位置所有池化窗口的数据输出到所述计算模块中。
根据一些实施例,每个所述计算模块包括宽度方向计算单元和高度方向计算单元,其中:
所述高度方向计算单元接收来自所述数据选择模块,对所述池化窗口中每列的数据比较或累加,每个时钟周期输出一个结果数据;
所述宽度方向计算单元接收来自所述高度方向计算单元的结果数据,并对所述结果数据进行比较或累加,并输出相应池化窗口的最终结果数据。
根据一些实施例,所述高度方向计算单元包括寄存器阵列以及窗口计算器,所述宽度方向计算单元包括寄存器阵列以及窗口计算器,其中:寄存器阵列用于数据的缓存;窗口计算器用于数据运算。
根据一些实施例,在所述池化计算窗口沿宽度方向移动或高度方向移动过程中,每次计算的结果数据都会在所述寄存器阵列中缓存并移动,并在每个时钟周期更新一次,实现宽度方向上的数据重复使用。
根据一些实施例,所述控制模块配置为:
所述控制模块控制所述行缓冲器模块、所述数据选择模块、所述计算模块和所述数据整理模块,使得所述行缓冲器模块在收到所有池化窗口的输入数据行数后,开始运算并向外输出运算结果,其中:所述输入数据行数为所设定的并行度的整数倍,且小于等于计算出的池化窗口参数阈值,所述参数阈值为计算窗口的高度步长与并行度的乘积减去一个高度步长加上计算窗口高度的值;或
所述控制模块检测所述行缓冲器模块中的缓存数据,当所述缓存数据能够满足大于或等于一个池化计算窗口时,所述控制模块控制所述数据选择模块、所述计算模块和所述数据整理模块实现对当前池化窗口的运算及输出。
根据本发明的另一方面,提供一种用于池化加速器的方法,所述方法包括:
将输入的行数据进行分组缓存;
从分组缓存的数据中按需筛选并输出各个池化窗口的计算数据;
对所述池化窗口的计算数据进行运算,并输出对应池化窗口的运算结果;
将所述运算结果排列整理后输出;
重复执行上述操作,直至数据停止输入为止。
根据一些实施例,将所述初始计算数据分组缓存到所述行缓冲器模块中,包括:
将所述初始计算数据按照并行度分成若干组行数据;
将第一组数据倒序缓存到所述行缓冲器模块中第一行数据缓冲区,所述第二行数据缓存区读取并缓存所述第一行数据缓冲区中的数据;
将第二组数据倒序缓存到所述行缓冲器模块中第一行数据缓冲区;
重复上述流程实现多组初始计算数据的输入。
根据本发明的另一方面,提供一种芯片电路,能够实现上述模块功能的装置。
根据本发明的另一方面,提供一种计算设备,包括:
处理器;以及
存储器,存储有计算机程序,当所述计算机程序被所述处理器执行时,使得所述处理器执行如上任一项所述的方法。
根据本发明的另一方面,提供一种非瞬时性计算机可读存储介质,其上存储有计算机可读指令,当所述指令被处理器执行时,使得所述处理器执行如上任一项所述的方法。
根据本发明的实施例,应用行缓冲器模块可实现任意并行度的数据输入方式,同时通过数据选择模块接收来自所述行缓冲器模块的数据并与并行度相应地筛选出每个池化窗口中的计算数据,从而输入所述计算模块中进行运算,因此可实现任意并行度的数据输入和计算方式,使得数据处理能力得到了大幅提高。此外,在输入并行度确定的情况下,通过计算模块和数据整理模块的配合,支持的输出方式和计算方式更加多样,更加灵活。
根据一些实施例,通过应用行数据缓冲器模块实现了高度方向上的数据复用,通过在计算模块中添加寄存器阵列实现宽度方向上的数据复用,省去了反复填充带来的多余计算及结果筛选。并在此基础之上,基于不同的控制模块配置设计了两种不同的输入输出方式供用户自由选择,真正实现了应用简单的装置与方法对数据进行的高速运算处理。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本发明。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。
图1示出根据示例实施例用于池化加速器装置的架构图。
图2示出根据示例实施例用于池化加速器装置的示意图。
图3示出根据示例实施例用于池化加速器装置的行缓冲器模块的架构图。
图4示出根据示例实施例用于池化加速器装置的并行计算示意图。
图5示出根据示例实施例用于池化加速器装置的数据传输示意图。
图6示出根据示例实施例用于池化加速器装置的计算模块架构图。
图7示出根据示例实施例用于池化加速器装置的高速方向计算模块架构图。
图8示出根据示例实施例用于池化加速器装置的宽度计算计算模块架构图。
图9示出根据示例实施例用于池化加速器装置的后续数据输入示意图。
图10示出根据示例实施例用于池化加速器装置的方法流程图。
图11示出根据本发明示例实施例的计算设备的框图。
具体实施方式
现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本发明将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本发明的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本发明的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本发明的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
应理解,虽然本文中可能使用术语第一、第二、第三等来描述各种组件,但这些组件不应受这些术语限制。这些术语乃用以区分一组件与另一组件。因此,下文论述的第一组件可称为第二组件而不偏离本发明概念的教示。如本文中所使用,术语“及/或”包括相关联的列出项目中的任一个及一或多者的所有组合。
本发明所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
本领域技术人员可以理解,附图只是示例实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的,因此不能用于限制本发明的保护范围。
由于深度学习在计算机视觉、自然语言处理和其他领域中的广泛应用,池化加速器已经成为AI领域的重要组成部分。池化加速器是一种专门设计用于加速深度学习和其他机器学习任务的硬件设备。它们通常由一组专门优化的处理器和内存组成,可以在大量数据上进行高效并行处理。池化加速器的出现,使得训练大型深度学习模型变得更加高效和快速。
现有绝大部分神经网络中的硬件加速器都是通过不断从存储器中读取填充(padding)数据来实现的。现有绝大部分神经网络硬件加速器均可实现对POOL算法的硬件加速,实现的方式都是通过不断从存储中读取数据并计算来实现。但是因为不同的计算窗口经常会大量使用重复的数据,这些重复的数据本不必要从内存中反复读取,因此大大降低了硬件加速器的加速效果,降低了池化算法的计算速度。
为此,本发明提出一种池化加速器装置和方法及计算设备。根据实施例通过对高度方向、宽度方向上的数据复用,省去了反复填充带来的多余计算及结果筛选,并应用行缓冲器模块实现了任意并行度的数据输入方式,实现了对数据进行批量高速运算处理,并基于不同的运算场景要求设计了两种不同的输入输出方式供用户自由选择。
在描述本发明实施例之前,对本发明实施例涉及到的一些术语或概念进行解释说明。
padding(填充):是神经网络池化运算中常用的一种手段,它是在特征图片的上下左右边缘填充无效数据,通常是0。因此它可以实现保持特征图片边界的信息,使得原始图片边缘的数据可以被重复计算,信息被充分参考,或者使输出图片和输入图片尺寸一致等功能。
FIFO:先进先出存储器(First In First Out)即写进去的数据会先被读出来。只有FIFO里面有数据才可以读取,只有FIFO没有存满才能够写入数据。
POOL相关的参数介绍:H:输入图片行数(不包含padding数据),W:输入图片列数(不包含padding数据),KW:计算窗口宽度,KH:计算窗口高度,SW:计算窗口在宽度方向平移的步长,SH:计算窗口在高度方向平移的步长,PU:输入图片上侧padding,PD:输入图片下侧padding,PL:输入图片左侧padding,PR:输入图片右侧padding,OW:输出图片的宽度,OH:输出图片的高度。
Line buffer 是一种临时存储数据的数据缓冲器,用于在两个设备或系统之间传输数据时临时存储本发明数据。它通常用于数据传输量大且传输过程需要大量时间的情况。
下面结合附图对本发明的示例实施例进行说明。
图1示出根据示例实施例用于池化加速器装置的架构图。
图2示出根据示例实施例用于池化加速器装置的示意图。
根据一些实施例,参见图1及图2,一种池化加速器装置,所述装置包括行缓冲器模块、控制模块、数据整理模块、数据选择模块及多个计算模块,其中:
所述行缓冲器模块接收来自所述控制模块的信号,将分组缓存的行数据输入到所述数据选择模块中。
根据一些实施例,在所述行缓冲器模块中例化了若干用于数据存储的LineBuffer,Line Buffer用多个级联的FIFO实现。每个line buffer的输入或者来自模块输入或者来自其他的line buffer。line buffer的输出会连接到数据选择模块,同时也连接到其他line buffer。通过使用line buffer,每个line buffer可以存储图片的一行数据,且在line buffer中的已经存储的所有行数据在line buffer里面流动,实现计算过程中重复行数据复用的目的。每个line buffer的宽度为数据的宽度,深度为支持存储的最大图片宽度。
所述数据选择模块接收来自所述行缓冲器模块的数据,筛选出每个池化窗口的计算数据,并输入所述计算模块中。
根据一些实施例,所述数据选择模块接收来所述行缓冲器模块的数据,并对所述行缓冲器模块中的数据进行检测判断是否足够计算,并在足够计算的情况下将来自所述行缓冲器模块中的筛选出池化窗口中的计算数据,并传输到所述计算模块中,进行池化运算。
所述计算模块用于对接收的所述计算数据进行数据运算,并将运算结果输出到所述数据整理模块。
根据一些实施例,用来做POOL运算,分成KH方向和KW方向两个计算模块。采用流水线的方式计算,KH计算模块并行计算计算窗口的一列数据并将计算结果传递给KW方向计算模块,KW方向计算模块不断对KH计算模块的输出的累加或求最大值,并由控制模块控制哪些输出有效。
所述数据整理模块获取来自所述计算模块的运算结果,并将所述运算结果数据排列整理后输出。
根据一些实施例,所述数据整理模块获取来自所述计算模块的运算结果,所述运算结果中含有一些无效结果,在所述数据整理模块中将收集到的结果数据中的无效数据剔除并将剩余数据排列整理后输出。
所述控制模块用于控制所述行缓冲器模块中每个数据行在任意时间的操作行为,并控制所述数据选择模块、所述计算模块和所述数据整理模块。
根据一些实施例,所述控制模块用于控制所述行缓冲器模块中每个数据行在任意时间的操作行为,并控制所述数据选择模块、所述计算模块和所述数据整理模块对输入的数据进行池化运算。
根据一些实施例,输入数据从所述行缓冲器模块进入本发明的池化加速器装置中,在控制模块的控制下,所述输入数据从所述行缓冲器模块送入所述数据选择模块,进行筛选,再将筛选后的数据送入所述计算模块中进行池化运算,最终输出结果到数据整理模块中,进行整理,最后输出计算结果。所述数据选择模块、计算模块、数据整理模块的数据处理过程均在控制模块的控制下进行。
图3示出根据示例实施例用于池化加速器装置的行缓冲器模块的架构图。
参见图3,所述行缓冲器模块包括多个行数据缓冲区,其中:每一所述行数据缓冲区包含特定数量的数据行数,所述特定数量与预先设定的并行度的值相等。
根据一些实施例,所述行缓冲器模块包括多个行数据缓冲区,每组输入数据存储在一个行数据缓冲区中。每一所述行数据缓冲区包括多个数据缓存行,每个缓冲区的数据行数与已设定的并行度的值相等,即并行度是多少那么每个行缓冲区中就包含几个linebuffer。
参见图3,多个所述行数据缓冲区互相串联读取相邻行数据缓冲区的缓存数据,在高度方向上实现数据的重复使用。
根据一些实施例,多个所述行数据缓冲区互相串联读取相邻行数据缓冲区的缓存数据,将所述初始计算数据按照并行度分成若干组行数据,将第一组数据倒序缓存到所述行缓冲器模块中第一行数据缓冲区,所述行缓冲器模块中第二行数据缓冲区从所述第一行数据缓冲区正中读取数据;将第二组数据倒序缓存到所述行缓冲器模块中第一行数据缓冲区,重复上述流程实现多组初始计算数据的输入,实现在高度方向上数据的重复使用。
如图3所示,多个所述行数据缓冲区连接到所述数据选择模块,将缓存的行数据送入所述数据选择模块。
根据一些实施例,所述多个行数据缓冲区分别连接到所述数据选择模块中,将输入数据送入到数据选择模块中,在所述数据选择模块中对数据进行选择。
图4示出根据示例实施例用于池化加速器装置的并行计算示意图。
根据一些实施例,将输入数据/图片padding之后,参见图4,可得到相关的POOL参数为:W=H=8,KW=KH=3,SW=SH=2,PU=PL=1,PD=PR=0,OW=OH=4。(图中p为padding,通常padding值为0,line buffer中并不存储padding数据,这样可以节省存储空间和提高计算速度)。
假设输入并行度为4,即并行输入4行数据,参见图4,先输入起始数据为0,8,16,24的四行,再输入起始数据为32,40,48,56的四行。
根据一些实施例,第一笔数据对应输入数据的前4行,将第1行数据放到linebuffer 3、第2行放到line buffer 2、第3行放到line buffer 1、第4行放到line buffer0。line buffer3中数据读出并写入到line buffer 7、line buffer 2中数据读出并写入到line buffer 6中、line buffer 1中数据读出并写入到line buffer 5中、line buffer0中数据读出并写入到line buffer4中。数据放好后,第5~8行数据进来分别输出放到linebuffer 3~0中。到此为止,line buffer完成了8行数据的存储。只要一组line buffer完成了4行的存储,这一组line buffer便开始向下一组line buffer输出。
所述计算模块的数量与所需计算的池化窗口数量相同。
根据一些实施例,根据输入并行度为4,最极端情况下,如果kh为1,需要并行计算4个计算窗,因此,例化4个计算模块。如果计算模块小于4个会造成输入的数据会来不及计算造成对输入的反压,有可能造成性能损失。因此,计算模块的数量需要和输入并行度匹配。除非支持的最小kh不是1,那么计算模块的数量可以减少,具体计算方式为输入并行度和kh+n*sh比较,n为自然数。既对于支持的最小的kh和sh,kh+n*sh的和需要大于等于输入并行度,那么n+1就是需要的计算模块的数量。通常默认支持最小kh和sh为1,所以输入并行度可以认为和计算并行度相同。
根据一些实施例,输入并行度和支持的最小kh、sh决定计算模块的数量。支持的最大kh、sh决定line buffer的大小。每一组行数据缓冲区包含的line buffer的数量和输入并行度相同。所以,如果支持的最小kh和sh都为1,支持的最大kh和sh都为4,那么需要4(kh)+4(sh)*3=16个line buffer才能保证存储4个计算窗口需要的16行数据,需要的计算模块数量为4。当然,本方案除了支持并行输出并行度(假设支持的最小kh为1,输入并行度和计算并行度相同)个计算窗口的数据同时计算模式以外,也支持小于并行度个计算窗口的数据同时输出和计算。比如只要line buffer里面存储的数据大于或者等于1个计算窗口需要的数据就可以输出和计算。两种模式都经过数据整理模块将数据规整后输出。
根据一些实施例,计算模块里面的KH方向计算模块和KH相关(因为要并行计算KH个数),KW方向计算模块和KW相关(因为要并行计算KW列的结果)。举例:如果需要支持最大KH=KW=4,如果两两相加,那么KH方向计算模块要同时做4个数的比较或者相加,那么需要3个计算单元,如果支持最大KH=KW=6,那么KH方向计算模块需要3+2+1=6个计算单元。当然,也可以选择三个三个相加也可以,具体针对某一KH、KW的配置,KH方向计算模块和KW计算模块里面的计算单元和他们相关,但是数量并不固定,可根据不同场景进行对设计方法进行适应性调整。
根据一些实施例,如果最大支持kw=kh=4,那么并行计算4个计算窗口,因此需要16个line buffer。在这16个line buffer中,4个为一组,第一组line buffer 0~3的输入只可能来自输入,其他组line buffer的数据只可能来自它之前的一组line buffer的输出。
图5示出根据示例实施例用于池化加速器装置的数据传输示意图。
根据一些实施例,所述数据选择模块配置为:根据填充宽度计算各个所述池化窗口中包含的数据行数;根据所述数据行数、池化窗口参数、步长,确认所述池化窗口中计算数据在行缓冲器模块中的位置;将相应位置所有池化窗口的数据输出到所述计算模块中。
根据一些实施例,同样地应用图4中的示例来进行简单的说明,在说明之前,需要定义一下几个变量:k0,k1,k2,k3:代表并行的四个池化窗口。start_addr_k*,en_addr_k*:代表每个池化窗口的起始地址和结束地址,它们和line buffer序号对应。wl_addr:代表line buffer中有效数据在整个line buffer阵列中的起始位置,每一行的池化窗口数据输出完成它会刷新一次。start_addr_k0的计算和它直接相关。k*_wact_num:代表并行度个池化窗口实际需要的数据的行数。k_cal_num_old:代表已经完成的池化窗口数量,每次并行4个池化窗口。k_cal_num_sum:代表基于当前收到的数据应该计算的池化窗口数量。
参见图4及图5,pt(顶部填充行数)为1,所以k0_wact_num为2,其他三个k*_wact_num为3,一共含有8行数据。因为line buffer的序号从0开始,因此将需要的行数8减1设为初始的wl_addr值,此时得到wl_addr为7,wl_addr代表line buffer 0~wl_addr的数据有效,将wl_addr的值赋值给start_addr_kh0,由此start_addr_kh0也为7。因为k0_wact_num为2,因此end_addr_k0为start_addr_kh0加上填充值减去k0_wact_num,此时end_addr_k0为6。因为sh为2,根据end_addr_k0算出end_addr_k1为4、end_addr_k2为2以及end_addr_k3为0。因为k1_wact_num、k2_wact_num、k3_wact_num均为3,所以start_addr1_k1的值等于end_addr1_k1+3-1为6,其他计算窗口的start_addr_k*根据end_addr_k*+k*_wact_num-1公式计算,得到start_addr_k2为4,start_addr_k3为2。根据start_addr_k*和end_addr_k*的值,将数据按照从start_addr_k*到end_addr_k*的数据将line buffer索引更大的数据放到输出信号的低位或者高位(具体如何排布不做限定)。
根据一些实施例,如果池化窗口输出数据不够,比如第一个池化窗口因为有padding的存在,因此,每次只需要输出池化窗口中一列的2个数,第3个数由padding填充。至此这四个框所在行的输出完成。根据示例,参见图2及图4,所述数据选择模块向计算模块0传输数据{p,0,8}、{p,1,9},依次类推,直到{p,7,15}。同理,所述数据选择模块向计算模块1传输数据{8,16,24},{9,17,25},直到{15,23,31}。同理,计算模块2和计算模块3也会收到来自所述数据整理模块的数据。至此,完成4个池化窗口的数据筛选及输出。
图6示出根据示例实施例用于池化加速器装置的计算模块架构图。
参见图6,每个所述计算模块包括高度方向计算单元601和宽度方向计算单元602,其中:
所述高度方向计算单元601接收来自所述数据选择模块,对池化窗口中每列的数据比较或累加,每个时钟周期输出一个结果数据;
所述宽度方向计算单元602接收来自所述高度方向计算单元601的结果数据,并对所述结果数据进行比较或累加,并输出相应池化窗口的最终结果数据。
根据一些实施例,所述宽度方向计算单元602还能够在对输入数据进行累加的基础上, 实现平均值的计算,并输出相应池化窗口的计算结果数据。
根据一些实施例,因为内存地址之间的步长或间隔的存在,不是每个时钟周期收到的所述高度方向计算单元601计算结果都需要计算,这需要所述宽度方向计算单元602自行判断。
根据一些实施例,根据padding,kw,sw的配置可以决定KH方向计算模块哪些列的结果到来时可以开始计算。比如因为PL为1,KW为3,因此首次计算收到两个KH计算模块结果就可以开始计算,接下来,每SW个时钟周期后可以开始下一次计算,直到计算完成。
根据一些实施例,根据上文所述的例子,当并行度为4时,需要例化4个高度方向计算单元601和4个所述宽度方向计算单元602。
图7示出根据示例实施例用于池化加速器装置的高速方向计算模块架构图。
图8示出根据示例实施例用于池化加速器装置的宽度计算计算模块架构图。
参见图7,根据一些实施例,所述高度方向计算单元601包括:寄存器阵列001,用于数据的缓存;窗口计算器002,用于数据运算。
所述宽度方向计算单元602包括:寄存器阵列001,用于数据的缓存;窗口计算器002,用于数据运算。以及除法器003及一组多路选择器004、005。
根据一些实施例,所述窗口计算器002是A/M,即加法器和/或最大值比较器,是一种基本的逻辑电路,用于实现加法和比较功能。A/M通常由加法器和最大值比较器两部分组成。加法器是一种电路,用于实现两个或多个二进制数的相加。加法器通常由多个逻辑门组成,可以实现完整的二进制加法运算。最大值比较器是一种电路,用于比较两个或多个二进制数的大小。最大值比较器通常由多个逻辑门组成,可以实现比较功能,并输出最大值。当池化窗口的计算方式为MAX POOL(计算窗口的最大值)时,则应用所述A/M的最大值比较器部分,当池化窗口的计算方式为Average POOL(计算窗口的平均值)时,则应用所述A/M的加法器部分。
根据一些实施例,当池化窗口的计算方式为Average POOL(计算窗口的平均值)时,除应用所述A/M的加法器部分外,还需要应用所述宽度方向计算单元602中的除法器003及一组多路选择器004。所述输入数据经过所述高度方向计算单元601的处理,输入所述宽度方向计算单元602中,在所述宽度方向计算单元602中,经过A/M计算出累加结果和/或最大值比较结果后,所述累加结果和/或最大值比较结果输入到多路选择器004中,所述多路选择器004接收来自所述控制模块的控制信号,当所述池化窗口的计算方式为AveragePOOL(计算窗口的平均值)时,多路选择器004将所述累加结果输入到除法器003中,在除法器003中计算平均值,并输出到多路选择器005中,由多路选择器005实现对外输出结果数据;当池化窗口的计算方式为MAX POOL(计算窗口的最大值)时,多路选择器004将数据直接输入到多路选择器005,用于直接对外输出。
根据一些实施例,在所述高度方向计算单元601中,收到来自所述数据选择模块的数据,经过所述高度方向计算单元601后会输出池化窗口中每列的计算结果R_KH0,R_KH1,R_KH2,R_KH3等等。根据上文所述的示例,假设输入图片中序号越大的数据的值也越大,那么计算模块0中的高度方向计算单元601输出的结果为{8,9,10,依次类推},计算模块1中的高度方向计算单元601输出的结果为{24,25,26,依次类推}。
根据一些实施例,经过计算模块中的所述宽度方向计算单元602后会输出池化窗口每个池化窗口的最终结果。这些结果分别是R_KH0,R_KH1,R_KH2中的最大值和R_KH2,R_KH3,R_KH4中的最大值。根据上述示例,如果是MAX POOL,计算模块0中的所述高度方向计算单元601输出的结果为{9,11,13,依次类推},计算模块1中的所述高度方向计算单元601的输出为{25,27,29,依次类推}。如果是Average POOL,所述高度方向计算单元601会输出每个计算窗口的包括padding在内的所有数值的和,再经过DIV模块后取平均值,输出才是最终结果。根据上述示例,如果是Average POOL,计算模块0中所述高度方向计算单元601输出的结果是{2,4,5,依次类推},计算模块1中所述高度方向计算单元601的输出为{17,18,20,依次类推}。
在所述池化计算窗口沿宽度方向移动或高度方向移动过程中,每次计算的结果数据都会在所述寄存器阵列中缓存并移动,并在每个时钟周期更新一次,实现宽度方向上的数据重复使用。
根据一些实施例,所述宽度方向计算单元602中的寄存器阵列实现了计算窗口沿宽度方向移动时数据的复用,因为池化窗口中每列计算的结果都会在寄存器阵列中缓存并移动(寄存器阵列中数据每个时钟周期更新一次),所述宽度方向计算单元602只需要根据计算窗口在宽度方向平移的步长确认哪几列数据在寄存器阵列使能相应计算功能即可。
根据一些实施例,所述宽度方向计算单元配置为:根据计算窗口宽度方向步长,对每一时钟周期来自高度方向计算单元的结果数据进行判断,是否需要运行宽度方向的计算。
所述控制模块配置为:所述控制模块控制所述行缓冲器模块、所述数据选择模块、所述计算模块和所述数据整理模块,使得所述行缓冲器模块在收到所有池化窗口的输入数据行数后,开始运算并向外输出运算结果,其中:所述输入数据行数为所设定的并行度的整数倍,且小于等于计算出的池化窗口参数阈值,所述参数阈值为计算窗口的高度步长与并行度的乘积减去一个高度步长加上计算窗口高度的值。
所述输入数据行数为所设定的并行度的整数倍,且小于等于计算出的池化窗口参数阈值,所述参数阈值为计算窗口的高度步长与并行度的乘积减去一个高度步长加上计算窗口高度的值。
根据一些实施例,所述控制模块对输入数据进行检测,当检测到所述行缓冲器模块中的数据为所有池化窗口的输入数据时,所述控制模块对所述行缓冲器模块、所述数据选择模块、所述计算模块和所述数据整理模块发出运算指令,在所述运算指令下,各模块开始进行数据运算处理。
根据一些实施例,所述所由池化窗口的输入数据行数应满足是所设定的并行度的整数倍,且小于等于计算出的池化窗口参数阈值。
根据一些实施例,所述池化窗口参数阈值为应用池化窗口的参数及参数与行数据间的相关性得到的,所述参数阈值为计算窗口的高度步长与并行度的乘积减去一个高度步长加上计算窗口高度的值,其中高度步长小于等于宽度步长,即kh+sh*(并行度-1)。
根据一些实施例,所述池化运算的输入数据在存在填充的情况下,还需要减去填充行数,根据图4中所述并行计算示意图中的示例,其中填充pt=1,并行度为4,所述示例所需的输入数据行数为kh+sh*(并行度-1)-pt=8行。
所述控制模块配置为:所述控制模块检测所述行缓冲器模块中的缓存数据,当所述缓存数据能够满足大于或等于一个池化计算窗口时,所述控制模块控制所述数据选择模块、所述计算模块和所述数据整理模块实现对当前池化窗口的运算及输出。
根据一些实施例,所述控制模块检测所述行缓冲器模块中的缓存数据,当所述缓存数据能够满足大于或等于一个池化计算窗口时,所述控制模块控制所述数据选择模块、所述计算模块和所述数据整理模块实现对当前池化窗口的运算及输出。
根据一些实施例,所述控制模块一旦检测到line buffer中存储的数据的行数大于或者等于一个计算窗口即可输出数据。根据图4中所述并行计算示意图中的示例,当并行度为4,初始时,收到的行数会和kh-PU,kh-PU+sh,hw-PU+2*sh,hw-PU+3*sh,依次类推,进行比较得出line buffer中数据包含的计算窗口的数据量和每个计算窗口的起始地址、结束地址对应line buffer的序号并完成输出。接下来每次收到新的多行数据,会把linebuffer中剩下的重复数据和新输入的数据数量加起来和sh,2*sh,3*sh,4*sh进行比较得出line buffer中包含的计算窗口的数据数量。只要数据量大于等于一个窗口,就可以输出。相应的,所述计算模块中不是所有的计算模块同时工作,比如,如果只收到了两个池化窗口的数据,那么只有计算模块0和计算模块1工作。如果只收到了三个池化窗口的数据,那么只有计算模块0、1、2工作。因为line buffer输出数据和计算模块的输入输出没有和并行度一致,因此,每个时钟周期所有计算模块的输出数据中可能有无效数据,那么,所述数据整理模块要把这些无效数据去掉,让结果数据紧密排列后再输出。
图9示出根据示例实施例用于池化加速器装置的后续数据输入示意图。
当第一轮输入初始数据结束后,可向所述行缓冲器模块继续输入一组数据。
当收到的数据应该计算的池化计算窗口数量与已完成的池化计算窗口数量的差值大于等于并行度时,进行数据运算,否则不进行数据计算。
根据图4中所述并行计算示意图中的示例,并行度为4,向所述行缓冲器模块中继续输入四行数据,收到的数据总行数变为12,wl_addr增加4变更为11。start_addr_k*,end_addr_k*同样自增4。k_cal_num_sum为6,与k_cal_num_old的差值为2,小于4,因此不足够下一次运算。因此line buffer数据只输入不输出。
根据图4中所述并行计算示意图中的示例,接下来再输入一组输入数据,那么收到的行数变为16,如图9所示,wl_addr增加变成15,k_cal_num_sum为8,与k_cal_num_old的差值为4,满足大于或等于并行度4,达到计算要求,可继续进行数据运算并输出计算结果。
根据一些实施例,开始下一轮输出时,将end_addr_k3-sh+kh-1的值复制给wl_addr,wl_addr即为新的start_addr_kh0。根据更新后的k*_wact_num重新计算start_addr_k*和end_addr_k*完成新一轮的输出。直到最后一个窗口(ih_cnt>=h),不管有池化窗口的数据可以输出,强制输出。
根据一些实施例,当数据源源不断进来,Line Buffer模块就会源源不断地接受收据并源源不断地向计算模块输出数据。只要计算模块源源不断地收到数据,它就会源源不断地输出计算结果并源源不断地输出。
图10示出根据示例实施例用于池化加速器装置的方法流程图。
参见图10,根据实施例,一种用于池化加速器的方法,所述方法包括:
在S1001,将输入的行数据进行分组缓存。
根据一些实施例,将所输入数据分组缓存到行缓冲器模块之前,需要预先设定输入数据的并行度。所述行缓冲器模块的并行度设定通常通过软件配置完成,具体的配置方式取决于硬件平台和操作系统。一般来说,行缓冲器模块的大小和深度需要根据数据的传输速度和存储需求进行合理的设定。如果线所述行缓冲器模块过大,可能会浪费硬件资源,如果过小,则可能会影响数据传输的效率。
根据一些实施例,按照所述控制模块的配置不同,可选用不同的输入数据方式。当所述控制模块配置为:当所述行缓冲器模块在收到所有池化窗口的输入数据后,开始运算并向外输出运算结果时,需要首先完成初始输入数据行数的计算。所述输入数据行数为所设定的并行度的整数倍,且小于等于计算出的池化窗口参数阈值,所述参数阈值为计算窗口的高度步长与并行度的乘积减去一个高度步长加上计算窗口高度的值。
根据一些实施例,当所述控制模块配置为:当所述缓存数据能够满足大于或等于一个池化计算窗口便进行运算输出时,只需要按照并行度输入数据行,在之后判断是否有能计算输出的数据,若有便进行实时运算并输出结果。当前配置状态下,所述计算模块中不是所有的计算模块同时工作,只有与可计算的池化窗口对应的计算模块进行运算工作。因为line buffer输出数据和计算模块的输入输出没有和并行度一致,因此,每个时钟周期所有计算模块的输出数据中可能有无效数据,这样就需要所述数据整理模块要把这些无效数据去掉,让结果数据紧密排列后再输出。
在S1003,从分组缓存的数据中按需筛选并输出各个池化窗口的计算数据。
根据一些实施例,获取所述池化窗口中的计算数据在所述行缓冲器模块的具体位置,并输出所有的池化窗口的数据到相对应的计算模块中,由相应的计算模块对数据进行运算处理。
在S1005,对所述池化窗口的计算数据进行运算,并输出对应池化窗口的运算结果。
根据一些实施例,在所述计算模块中,对数据进行高度方向及宽度方向的累加或最大值比较输出计算结果。
在S1007,将所述运算结果排列整理后输出。
根据一些实施例,所述计算结果传输到所述数据整理模块,在数据整理模块中,对获取的所述计算结果进行排列整理,最后输出排列整理后的计算结果。
在S1009,重复执行上述操作,直至数据停止输入为止。
根据一些实施例,输入下一组并行数据后,判断是否能够进行下轮运算,若不能,则输入下组数据直至能够进行下轮运算。当所述控制模块配置为:当所述行缓冲器模块在收到所有池化窗口的输入数据后,开始运算并向外输出运算结果时,当初始数据行计算完成后继续分组输入数据。当收到的数据应该计算的池化计算窗口数量与已完成的池化计算窗口数量的差值大于等于并行度时,进行数据运算,否则不进行数据计算。
根据一些实施例,当开始下一轮输出时,刷新wl_addr,确保下一各start_addr_k0值的正确性。
根据一些实施例,根据所述行数据缓冲器并行度及池化窗口参数计算需要的计算窗口数量,并例化出相应数量的计算模块,用于对各个池化窗口的分别计算。
将所述初始计算数据分组缓存到所述行缓冲器模块中,包括:将所述初始计算数据按照并行度分成若干组行数据;将第一组数据倒序缓存到所述行缓冲器模块中第一行数据缓冲区,所述第二行缓存区读取并缓存所述第一缓存区中的数据;将第二组数据倒序缓存到所述行缓冲器模块中第一行数据缓冲区;重复上述流程实现多组初始计算数据的输入。
根据一些实施例以及图2中的装置架构图,按照并行度对行数据进行数据分组,将多组数据缓存到所述行缓冲器模块中的具体过程为将第一组数据倒序缓存到所述行缓冲器模块中line buffer0~line buffer3中,所述第二行缓冲区line buffer7~line buffer4读取并缓存所述第一缓冲区中line buffer0~line buffer3的数据;将第二组数据倒序缓存到所述行缓冲器模块中line buffer0~line buffer3;重复上述流程实现多组初始计算数据的输入,实现line buffer在高度方向上的数据复用。
根据一些实施例,line buffer支持参数化并行度数据的输入,上述示例只是以并行度4为例,实际可以是任意值。基于控制模块的不同配置,有两种输出方式,分别是按照并行度输出计算窗口数据适应批量数据的高速运算处理,或者只要有可以计算的池化窗口数据就输出,实现实时运算输出。
根据一些实施例,本方案中通过对line buffer实现任意并行度并行计算和高度方向上的数据复用以及定制计算模块对宽度方向上的数据复用,省去了反复读取数据的操作,大大提升了加速器运算效率。另外,line buffer支持任意并行度的数据的输入和多种计算方式使POOL加速器的设计更加灵活,更能适应大批量的高速数据运算处理,提高加速器性能。
图11示出根据本发明示例实施例的计算设备的框图。
如图11所示,计算设备30包括处理器12和存储器14。计算设备30还可以包括总线22、网络接口16以及I/O接口18。处理器12、存储器14、网络接口16以及I/O接口18可以通过总线22相互通信。
处理器12可以包括一个或多个通用CPU(Central Processing Unit,处理器)、微处理器、或专用集成电路等,用于执行相关程序指令。根据一些实施例,计算设备30还可包括为处理器12进行加速的高性能显示适配器(GPU)20。
存储器14可以包括易失性存储器形式的机器系统可读介质,例如随机存取存储器(RAM)、只读存储器(ROM)和/或高速缓存存储器。存储器14用于存储包含指令的一个或多个程序以及数据。处理器12可读取存储在存储器14中的指令以执行上述根据本发明实施例的方法。
计算设备30也可以通过网络接口16与一个或者多个网络通信。该网络接口16可以是无线网络接口。
总线22可以为包括地址总线、数据总线、控制总线等。总线22提供了各组件之间交换信息的通路。
需要说明的是,在具体实施过程中,计算设备30还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述方法的步骤。计算机可读存储介质可以包括但不限于任何类型的盘,包括软盘、光盘、DVD、CD-ROM、微型驱动器以及磁光盘、ROM、RAM、EPROM、EEPROM、DRAM、VRAM、闪速存储器设备、磁卡或光卡、纳米系统(包括分子存储器IC)、网络存储设备、云存储设备,或适合于存储指令和/或数据的任何类型的媒介或设备。
本发明实施例还提供一种计算机程序产品,该计算机程序产品包括存储计算机程序的非瞬时性计算机可读存储介质,该计算机程序可操作来使计算机执行如上述方法实施例中记载的任何一种方法的部分或全部步骤。
本领域的技术人员可以清楚地了解到本发明的技术方案可借助软件和/或硬件来实现。本说明书中的“单元”和“模块”是指能够独立完成或与其他部件配合完成特定功能的软件和/或硬件,其中硬件例如可以是现场可编程门阵列、集成电路等。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些服务接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
以上具体地展示和描述了本发明的示例性实施例。应可理解的是,本发明不限于这里描述的详细结构、设置方式或实现方法;相反,本发明意图涵盖包含在所附条款的精神和范围内的各种修改和等效设置。
Claims (10)
1.一种用于池化加速器的装置,其特征在于,所述装置包括行缓冲器模块、控制模块、数据整理模块、数据选择模块及多个计算模块,其中:
所述行缓冲器模块接收来自所述控制模块的信号,将分组缓存的行数据输入到所述数据选择模块中;
所述数据选择模块接收来自所述行缓冲器模块的数据,筛选出每个池化窗口的计算数据,并输入所述计算模块中;
所述计算模块用于接收所述计算数据并对所述计算数据进行数据运算,并将运算结果输出到所述数据整理模块;
所述数据整理模块获取来自所述计算模块的运算结果,并将所述运算结果数据排列整理后输出;
所述控制模块用于控制所述行缓冲器模块中每个数据行在任意时间的操作行为,并控制所述数据选择模块、所述计算模块和所述数据整理模块。
2.根据权利要求1所述的装置,其特征在于,所述行缓冲器模块包括多个行数据缓冲区,其中:
每一所述行数据缓冲区包含特定数量的数据行数,所述特定数量与预先设定的并行度的值相等;
多个所述行数据缓冲区互相串联读取相邻行数据缓冲区的缓存数据,在高度方向上实现数据的重复使用;
多个所述行数据缓冲区连接到所述数据选择模块,将缓存的行数据送入所述数据选择模块。
3.根据权利要求1所述的装置,其特征在于,所述数据选择模块配置为:
根据填充宽度计算各个所述池化窗口中包含的数据行数;
根据所述数据行数、池化窗口参数、步长,确认所述池化窗口中计算数据在所述行缓冲器模块中的位置;
将相应位置所有池化窗口的数据输出到所述计算模块中。
4.根据权利要求1所述的装置,其特征在于,每个所述计算模块包括宽度方向计算单元和高度方向计算单元,其中:
所述高度方向计算单元接收所述数据选择模块输出的所述计算数据,对所述池化窗口中每列的数据比较或累加,每个时钟周期输出一个结果数据;
所述宽度方向计算单元接收来自所述高度方向计算单元的结果数据,并对所述结果数据进行比较或累加,并输出相应池化窗口的最终结果数据。
5.根据权利要求4所述的装置,其特征在于,所述高度方向计算单元包括寄存器阵列及窗口计算器,所述宽度方向计算单元包括寄存器阵列以及窗口计算器,所述寄存器阵列用于数据的缓存,所述窗口计算器用于数据运算。
6.根据权利要求5所述的装置,其特征在于,在所述池化计算窗口沿宽度方向移动或高度方向移动过程中,每次计算的结果数据都会在所述寄存器阵列中缓存并移动,并在每个时钟周期更新一次,实现宽度方向上的数据重复使用。
7.根据权利要求1所述的装置,其特征在于,所述控制模块配置为:
所述控制模块控制所述行缓冲器模块、所述数据选择模块、所述计算模块和所述数据整理模块,使得所述行缓冲器模块在收到所有池化窗口的输入数据行数后,开始运算并向外输出运算结果,其中所述输入数据行数为所设定的并行度的整数倍,且小于等于计算出的池化窗口参数阈值,所述参数阈值为计算窗口的高度步长与并行度的乘积减去一个高度步长加上计算窗口高度的值;或
所述控制模块检测所述行缓冲器模块中的缓存数据,当所述缓存数据能够满足大于或等于一个池化计算窗口时,所述控制模块控制所述数据选择模块、所述计算模块和所述数据整理模块实现对当前池化窗口的运算及输出。
8.一种用于池化加速器的方法,其特征在于,所述方法包括重复执行以下操作,直至数据停止输入为止:
将输入的行数据进行分组缓存;
从分组缓存的数据中按需筛选并输出各个池化窗口的计算数据;
对所述池化窗口的计算数据进行运算,并输出对应池化窗口的运算结果;
将所述运算结果排列整理后输出。
9.一种芯片电路,其特征在于,包括根据权利要求1-7中任一项所述的装置。
10.一种计算设备,其特征在于,包括:
处理器;以及
存储器,存储有计算机程序,当所述计算机程序被所述处理器执行时,使得所述处理器执行如权利要求8所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311567401.0A CN117273102A (zh) | 2023-11-23 | 2023-11-23 | 用于池化加速器的装置及方法和芯片电路及计算设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311567401.0A CN117273102A (zh) | 2023-11-23 | 2023-11-23 | 用于池化加速器的装置及方法和芯片电路及计算设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117273102A true CN117273102A (zh) | 2023-12-22 |
Family
ID=89216447
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311567401.0A Pending CN117273102A (zh) | 2023-11-23 | 2023-11-23 | 用于池化加速器的装置及方法和芯片电路及计算设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117273102A (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108388943A (zh) * | 2018-01-08 | 2018-08-10 | 中国科学院计算技术研究所 | 一种适用于神经网络的池化装置及方法 |
CN108763612A (zh) * | 2018-04-02 | 2018-11-06 | 复旦大学 | 一种神经网络的池化层加速运算的方法与电路 |
CN110765411A (zh) * | 2019-09-05 | 2020-02-07 | 天津芯海创科技有限公司 | 一种卷积神经网络中卷积运算数据复用装置 |
CN110991634A (zh) * | 2019-12-04 | 2020-04-10 | 腾讯科技(深圳)有限公司 | 人工智能加速器、设备、芯片及数据处理方法 |
CN112905530A (zh) * | 2021-03-29 | 2021-06-04 | 上海西井信息科技有限公司 | 片上架构、池化计算加速器阵列、单元以及控制方法 |
CN114090231A (zh) * | 2021-10-11 | 2022-02-25 | 深圳鲲云信息科技有限公司 | 一种数据处理方法、控制器及可读存储介质 |
CN116882463A (zh) * | 2023-07-06 | 2023-10-13 | 合肥工业大学 | 一种高能效dnn加速器设计方法 |
-
2023
- 2023-11-23 CN CN202311567401.0A patent/CN117273102A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108388943A (zh) * | 2018-01-08 | 2018-08-10 | 中国科学院计算技术研究所 | 一种适用于神经网络的池化装置及方法 |
CN108763612A (zh) * | 2018-04-02 | 2018-11-06 | 复旦大学 | 一种神经网络的池化层加速运算的方法与电路 |
CN110765411A (zh) * | 2019-09-05 | 2020-02-07 | 天津芯海创科技有限公司 | 一种卷积神经网络中卷积运算数据复用装置 |
CN110991634A (zh) * | 2019-12-04 | 2020-04-10 | 腾讯科技(深圳)有限公司 | 人工智能加速器、设备、芯片及数据处理方法 |
CN112905530A (zh) * | 2021-03-29 | 2021-06-04 | 上海西井信息科技有限公司 | 片上架构、池化计算加速器阵列、单元以及控制方法 |
CN114090231A (zh) * | 2021-10-11 | 2022-02-25 | 深圳鲲云信息科技有限公司 | 一种数据处理方法、控制器及可读存储介质 |
CN116882463A (zh) * | 2023-07-06 | 2023-10-13 | 合肥工业大学 | 一种高能效dnn加速器设计方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20230351186A1 (en) | Processing for multiple input data sets | |
CN111667051A (zh) | 适用边缘设备的神经网络加速器及神经网络加速计算方法 | |
US20190294959A1 (en) | Scheduling network computations | |
CN111832718B (zh) | 芯片架构 | |
CN111951269B (zh) | 图像处理方法及相关设备 | |
CN111465943A (zh) | 芯片上计算网络 | |
CN109815267A (zh) | 数据建模中特征的分箱优化方法及系统、存储介质及终端 | |
CN111738433B (zh) | 一种可重配置的卷积硬件加速器 | |
CN111768458A (zh) | 一种基于卷积神经网络的稀疏图像处理方法 | |
EP3816867A1 (en) | Data reading/writing method and system in 3d image processing, storage medium, and terminal | |
CN111210004B (zh) | 卷积计算方法、卷积计算装置及终端设备 | |
US11275997B1 (en) | Weight loading in an array | |
US20190378001A1 (en) | Neural network hardware acceleration with stochastic adaptive resource allocation | |
CN105830160B (zh) | 用于将经屏蔽数据写入到缓冲器的设备及方法 | |
US9570125B1 (en) | Apparatuses and methods for shifting data during a masked write to a buffer | |
CN113918233A (zh) | 一种ai芯片控制方法、电子设备及ai芯片 | |
CN110490308B (zh) | 加速库的设计方法、终端设备及存储介质 | |
Shahbahrami et al. | FPGA implementation of parallel histogram computation | |
JP2008516320A (ja) | メモリフレームのサイズを決定する方法および装置 | |
CN111886605B (zh) | 针对多个输入数据集的处理 | |
CN117273102A (zh) | 用于池化加速器的装置及方法和芯片电路及计算设备 | |
CN112200310A (zh) | 智能处理器、数据处理方法及存储介质 | |
US20040107308A1 (en) | Memory that allows simultaneous read requests | |
CN114037054A (zh) | 一种数据处理方法、装置、芯片、设备及介质 | |
CN110503193B (zh) | 一种基于roi的池化运算方法和电路 |
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 |