CN113947200A - 神经网络的加速计算方法及加速器、计算机可读存储介质 - Google Patents
神经网络的加速计算方法及加速器、计算机可读存储介质 Download PDFInfo
- Publication number
- CN113947200A CN113947200A CN202111565817.XA CN202111565817A CN113947200A CN 113947200 A CN113947200 A CN 113947200A CN 202111565817 A CN202111565817 A CN 202111565817A CN 113947200 A CN113947200 A CN 113947200A
- Authority
- CN
- China
- Prior art keywords
- matrix
- data
- coefficient
- calculation
- neural network
- 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
-
- 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
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/57—Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
-
- 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 Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Biophysics (AREA)
- Computing Systems (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Databases & Information Systems (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Neurology (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Complex Calculations (AREA)
Abstract
本发明提供一种神经网络的加速计算方法及加速器、计算机可读存储介质,该方法包括将输入矩阵存储在第一数据缓存区;获取系数矩阵,将系数矩阵分解成预设大小的多个系数子矩阵,将系数子矩阵以预设的步长相对于输入矩阵滑动,系数子矩阵每滑动一次,应用乘加阵列的至少一个处理单元对系数子矩阵与输入矩阵进行点乘求和计算,获得一个系数子矩阵对应的部分和矩阵;将多个系数子矩阵对应的部分和矩阵进行累加计算,获得累加计算结果,根据累加计算结果进行特征计算,将一层模型的计算结果存储于第二数据缓存区。本发明还提供实现上述方法的神经网络加速器及计算机可读存储介质。本发明能够减少神经网络计算是的数据搬运次数,提高能耗比。
Description
技术领域
本发明涉及神经网络的技术领域,具体地,是一种神经网络的加速计算方法以及实现这种方法的神经网络加速器、计算机可读存储介质。
背景技术
近年来,随着人工智能技术的发展,神经网络技术也得到了迅猛的发展。神经网络(Neuron Network)是一种多层结构的人工智能模型,包括深度神经网络(DNN)、卷积神经网络(CNN)、循环神经网络(RNN)等。随着神经网络的计算量的增加,对于处理器的运算能力以及数据存储的要求也与日俱增。神经网络加速器可以在硬件层面加速神经网络的计算效率,因此也越来越广泛的应用到各个领域。
然而,神经网络的计算需要大量数据搬运,数据搬运会消耗大量的功耗。在实际应用中,由于片上系统的存储能力有限,无法在片上系统中存储神经网络的所有模型,因此数据重复搬运不可避免,即需要从外部存储器中将数据转存至神经网络加速器,并且将神经网络加速器内的数据转存到外部存储器。然而,数据搬运的效率不仅会影响功耗,也会限制神经网络的计算效率。因此在物联网、智能化等采用电池供电的系统里,在保证数据处理的实时性的前提下,提高能耗比,即单位功耗下神经网络的计算次数,对于提升神经网络的性能是非常关键的。
公开号为CN111915003A的中国发明专利申请公开了一种神经网络硬件加速器,该加速器在获取指令后,进行一维向量运算,通过查找表的方式对激活函数进行计算,并缓存神经网络算法实现过程中的中间数据;并且,分布于流水线的与指令译码模块处于同一级的寄存器文件用于暂存神经网络算法实现过程中的相关指令、数据和地址。然而,这种加速器并没有考虑数据多次搬运的问题,也没有解决数据搬运而导致能耗增加、计算效率低下的问题,影响神经网络的计算效率,也导致电子设备的能耗比不高。
发明内容
本发明的第一目的是提供一种减少神经网络数据搬运次数、提高能耗比的神经网络的加速计算方法。
本发明的第二目的是提供一种实现上述神经网络的加速计算方法的神经网络加速器。
本发明的第三目的是提供一种实现上述神经网络的加速计算方法的计算机可读存储介质。
为实现本发明的第一目的,本发明提供的神经网络的加速计算方法包括获取输入矩阵,将输入矩阵存储在第一数据缓存区;获取系数矩阵,将系数矩阵分解成预设大小的多个系数子矩阵,每次读取一个系数子矩阵,将系数子矩阵以预设的步长相对于输入矩阵滑动,系数子矩阵每滑动一次,应用乘加阵列的至少一个处理单元对系数子矩阵与输入矩阵进行点乘求和计算,获得一个系数子矩阵对应的部分和矩阵;其中,处理单元对系数子矩阵与输入矩阵进行一次多行多列的点乘求和计算时,缓存输入矩阵预设行数的数据和/或预设列数的数据,在处理单元对系数子矩阵与输入矩阵进行下一次的多行多列的点乘求和计算时,读取上一次缓存的行数据和/或列数据;将多个系数子矩阵对应的部分和矩阵进行累加计算,获得累加计算结果,根据累加计算结果进行特征计算,将一层模型的计算结果存储于第二数据缓存区。
由上述方案可见,由于执行上一次多行多列的点乘求和计算时,将缓存输入矩阵中多行或者多列的数据,在下一次执行多行多列的点乘求和计算时,并不需要重复读取相同行或者相同列的数据,而是直接使用上一次缓存的行数据或者列数据,从而减少数据搬运的次数,进而提升神经网络的计算效率,并且提升神经网络的能耗比。
一个优选的方案是,在系数子矩阵的行数小于处理单元的乘法器行数时,应用处理单元多余行数的乘法器计算系数子矩阵与下一个平面的输入矩阵的相应行进行点乘求和计算。
由于系数子矩阵的行数小于处理单元的乘法器行数时,如果将系数子矩阵填充零进行计算,将导致每一个处理单元将有大量的乘法器执行无效的计算,影响神经网络的计算效率,还会导致能耗比的下降。通过上述方法能够进一步提高神经网络的计算效率以及能耗比。
可选的方案是,在系数子矩阵的列数小于处理单元的乘法器列数时,应用处理单元多余列数的乘法器计算系数子矩阵与下一个平面的输入矩阵的相应列进行点乘求和计算。
进一步的方案是,读取一个系数子矩阵后,将系数子矩阵发送至所有的处理单元。
可见,所有的处理单元将接收同一个系数子矩阵,可以降低乘加阵列数据处理的复杂性。
一个优选的方案是,缓存预设行数的行数据包括:缓存的行数据的行数为处理单元的乘法器的行数减1;缓存预设列数的列数据包括:缓存的列数据的列数为处理单元的乘法器的列数减1。
由此可见,缓存的行数据以及列数据的数量由处理单元的乘法器的行数、列数决定,因此,可以根据实际需要调整处理单元的乘法器的行数、列数,使得神经网络的计算效率提升更加灵活。
更进一步的方案是,将一层模型的计算结果存储于第二数据缓存区后,使用第二数据缓存区作为下一层模型的输入数据缓存区,并使用第一数据缓存区作为下一层模型的输出数据缓存区。
由此可见,在完成一层模型的计算后,将两个数据缓存区的功能互换,这样可以避免大量数据搬运的操作,从而显著的提升神经网络的能耗比。
更进一步的方案是,存储于第一数据缓存区的数据格式与存储于第二数据缓存区的数据格式相同。
这样,有利于两个数据缓存区的功能转换,即对于外部存储器以及累加缓存区而言,不管从第一数据缓存区还是第二数据缓存区读取的数据格式都是相同的,因此可以方便的从任一个数据缓存区读取或者写入数据。
为实现上述的第二目的,本发明提供的神经网络加速器包括第一数据缓存区,用于存储至少一层模型的输入矩阵;第二数据缓存区,用于存储至少一层模型的输出数据;临时缓存区,用于存储系数矩阵被分解成预设大小的系数子矩阵、神经网络当前层模型的配置信息和当前输出特征值的偏置;乘加阵列,包括多个处理单元,每一处理单元包括多个乘法器,乘加阵列在系数子矩阵以预设的步长相对于输入矩阵滑动且系数子矩阵每滑动一次时,对系数子矩阵与输入矩阵进行点乘求和计算,获得一个系数子矩阵对应的部分和矩阵;累加缓存区,将多个系数子矩阵对应的部分和矩阵进行累加计算,获得累加计算结果;特征处理模块,根据累加计算结果进行特征计算,将一层模型的计算结果存储于第二数据缓存区;其中,至少一个处理单元对系数子矩阵与输入矩阵进行一次多行多列的点乘求和计算时,缓存输入矩阵预设行数的数据和/或预设列数的数据,在处理单元对系数子矩阵与输入矩阵进行下一次的多行多列的点乘求和计算时,读取上一次缓存的行数据和/或列数据。
由上述方案可见,通过缓存输入矩阵中多行数据或者多列数据,可以减少从外部存储器读取输入矩阵数据的数据量,进而提升神经网络的计算效率,并且能够在一定的能耗情况下提升计算的次数,从而提升神经网络的能耗比。
一个优选的方案是,临时缓存区每次将一个系数子矩阵发送至乘加阵列。
为实现上述的第三目的,本发明提供计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述神经网络的加速计算方法的各个步骤。
附图说明
图1是本发明神经网络加速器实施例的结构框图。
图2是本发明神经网络加速器实施例中特征处理模块的数据处理流程图。
图3是本发明神经网络的加速计算方法实施例的流程图的第一部分。
图4是本发明神经网络的加速计算方法实施例的流程图的第二部分。
图5是应用本发明神经网络的加速计算方法实施例对第一种卷积计算的示意图。
图6是本发明神经网络加速器实施例的处理单元的结构框图。
图7是应用本发明神经网络的加速计算方法实施例对第二种卷积计算的示意图。
图8是应用本发明神经网络的加速计算方法实施例对第三种卷积计算的示意图。
图9是应用本发明神经网络的加速计算方法实施例对第四种卷积计算的示意图。
以下结合附图及实施例对本发明作进一步说明。
具体实施方式
本发明的神经网络的加速计算方法应用在神经网络加速器上,优选的,神经网络加速器是设置在电子设备上的一个模块,用于对神经网络进行加速计算,提高神经网络的计算效率以及能耗比。优选的,电子设备设置有处理器以及存储器,存储器上存储有计算机程序,处理器通过执行该计算机程序实现上述的神经网络的加速计算方法。
神经网络加速器实施例:
本实施例用于神经网络的计算,尤其是通过加速器来提升神经网络的计算效率。通常,神经网络涉及的运算主要包括矩阵乘法、卷积、偏置、非线性激活、池化等。本实施例通过多个模块分别实现上述的计算。
参见图1,本实施例包括控制模块10、数据预取模块11、乘加阵列12、累加缓存区13、特征处理模块14、临时缓存区16以及两个数据缓存区,分别是第一数据缓存区18以及第二数据缓存区19,其中,乘加阵列12、累加缓存区13、特征处理模块14形成计算模块15。
控制模块10用于控制各个模块的工作,数据预取模块11根据控制模块10的控制信号从外部的存储器读取数据,例如读取输入矩阵、神经网络各层模型对应的配置指令、系数矩阵和偏置。优选的,数据预取模块11将外部存储器读取的输入矩阵以设定的格式(例如数据格式X)存储在第一数据缓存区18中。并且,输入矩阵只在神经网络启动的时候从外部存储器读取一次,并且不会重复读取,以节省加速器从外部存储读取数据的次数,降低加速器的功耗。
另外,数据预取模块11还从外部存储器读取神经网络各层模型的配置参数,例如配置参数包含有配置指令,配置参数被读取到临时缓存区16,优选的,每层模型的配置参数也只是在该层模型开始计算的时候读取一次,并且不会重复读取。
对于神经网络计算所使用的系数矩阵,本实施例将系数矩阵划分为多个系数子矩阵,在各层模型计算过程中,数据预取模块11需要从外部存储器读取一个系数子矩阵,系数子矩阵是系数矩阵的一个部分,读取的系数子矩阵存储在临时缓存区16内。优选的,存储在临时缓存区16的系数子矩阵只会保存至该系数子矩阵相关的乘法完毕,一旦该系数子矩阵相关的乘法完毕,该系数子矩阵将被删除,因此系数子矩阵并不会重复读取。通常,偏置数据自身的数据量不大,每个输出的特征只需要一个偏置数据,因此,偏置的数据只在需要使用的时候读入一个偏置并保存至临时缓存区16。此外,临时缓存区16还存储神经网络当前层模型的配置信息和当前输出特征值的偏置。
可选的,由于从外部存储器读取系数矩阵和计算速度相比时快时慢,在慢的时候乘加阵列12在计算时需等待,为解决这个问题,可以在数据预取模块11内设置两小块相同的缓存区,用乒乓的方式组织输入矩阵的读入。由于所有需要预取的数据,除了输入矩阵的数据量较大,其他类型的数据因为只在需要使用的时候才读取,且每次读取的数据量很少,因此临时存储区16可以设计成较小的存储空间,尽可能减少硬件存储器的存储空间,从而降低硬件成本。
乘加阵列12从第一数据缓存区18或者第二数据缓存区19读取输入矩阵,并且从临时缓存区16读取系数子矩阵,将输入矩阵与系数子矩阵进行点成求和计算,并且将计算的结果输出至累加缓存区13。乘加阵列12内设置有多个处理单元,每一个处理单元包括多个乘法器以及加法器,乘法器组成乘法器阵列,每一个处理单元的计算过程将在后文详细介绍。
针对一个系数子矩阵的计算结果,可以获得一个部分和矩阵,累加缓存区13将多个系数子矩阵对应的部分和矩阵进行累加获得累加计算结果,获得一个特征数据,并且将特征数据发送至特征处理模块14进行特征处理。参见图2,特征处理模块14接收累加计算结果21后,加入偏置数据,执行激活22的操作,例如执行非线性激活,然后依次执行行池化23、列池化24、小数点位调整25和精度调整26等操作。当一层模型对应的所有系数矩阵计算获得的特征数据均计算完毕后,特征处理模块14将计算结果输出至第二数据缓存区19,优选的,写入到第二数据缓存区19的数据也是预设的格式X,即第一数据缓存区18、第二数据缓存区19所存储的数据格式是相同的。
可见,针对第一层模型的计算,第一数据缓存区18作为输入数据的数据缓存区,而第二数据缓存区19作为输出数据的数据缓存区。在进行下一层模型的计算时,将第一数据缓存区18、第二数据缓存区19的功能互换,即下一层模型的计算时,第一数据缓存区18作为输出数据的数据缓存区,而第二数据缓存区19作为输入数据的数据缓存区。以此类推,每完成一层模型的计算后,将互换一次第一数据缓存区18、第二数据缓存区19的功能。由于下一层模型的计算时,往往需要读取上一层模型的计算结果,因此,通过上述方法就不需要先将上一层模型的计算结果输出至外部存储器,再从外部存储器读取上一层模型的计算结果,而是直接从第一数据缓存区18或者第二数据缓存区19读取上一层模型的计算结果,减少多层模型计算过程中不必要的数据搬运操作,提升神经网络的计算效率。
由于乘加阵列12、累加缓存区13和特征处理模块14三者以流水的方式工作,可以尽可能的加快神经网络的计算速度。当然,如果不需要特别高的效率,乘加阵列12、累加缓存区13和特征处理模块14三者也可以用分时的方式工作。
神经网络的加速计算方法实施例:
下面结合图3和图4介绍神经网络的加速计算方法的具体步骤。首先,在神经网络启动前,用户需按照要求将神经网络的输入矩阵、系数矩阵、偏置数据和各层模型的配置指令等存储在外部存储器中,并把对应的存储地址发送至神经网络加速器。需要说明的是,图3和图4的流程图是以卷积神经网络为例进行说明,对于其他类型的神经网络,也可以采用类似的方法进行计算。
启动神经网络加速器后,首先执行步骤S1,神经网络加速器从外部存储器获取输入矩阵,将输入矩阵以预设的格式X存储在第一数据缓存区18。然后,执行步骤S2,获取第一层模型的配置参数,并且将配置参数存储在临时缓存区16。
接着,执行步骤S3,从系数矩阵中获取一个系数子矩阵。例如,系数矩阵是一个5×4的二维矩阵,预设的系数子矩阵的大小是3×3,则步骤S3是从5×4的二维矩阵选取大小为3×3部分作为一个系数子矩阵,并将该系数子矩阵输入至临时缓存区16。当当前的系数子矩阵计算完毕后,将该系数子矩阵从临时缓存区16删除,读取下一个系数子矩阵。优选的,多个系数子矩阵之间相互不重叠,即系数矩阵将被分解为多个相互间不重叠的系数子矩阵。
步骤S3中,数据预取模块11获取一个系数子矩阵之后,将该系数子矩阵存储在临时缓存区16中,当需要使用该系数子矩阵进行计算时,临时缓存区16将该系数子矩阵传送至乘加阵列12中的所有处理单元,即系数子矩阵被所有的处理单元共享。
然后,执行步骤S4,乘加阵列12的每一个处理单元对该系数子矩阵与输入矩阵进行点乘求和计算,点乘求和计算的具体过程将在后面详细介绍。通常,系数子矩阵远小于输入矩阵,因此,系数子矩阵需要以预设的步长相对于输入矩阵滑动,系数子矩阵每滑动一次,将与输入矩阵进行点对点乘法,并且进行求和计算,从而获得多行输出行数据以及多列输出列数据,这些输出行数据与输出列数据将输出至累加缓存区13,累加缓存区13对多行输出行数据以及多列输出列数据进行累加计算,得到一个系数子矩阵对应的部分和数据。
当一个系数矩阵的所有系数子矩阵都已经与输入矩阵点乘求和完毕,则执行步骤S5,累加缓存区13将多个系数子矩阵对应的部分和矩阵进行累加,从而获得该系数矩阵对应的卷积计算结果。然后,执行步骤S6,判断当前的特征是否计算完毕,如果没有计算完毕,则执行步骤S9,获取下一个系数子矩阵,并返回执行步骤S3,获取新的系数矩阵的一个系数子矩阵,并重复执行步骤S3至步骤S6,直至当前特征计算完毕。
如果当前特征计算完毕,则执行步骤S7,将特征数据输出至特征处理模块14,特征处理模块14对获取的特征数据进行激活、池化、小数点调整和精度调整等计算,并且执行步骤S8,将经过特征处理的数据存储到第二数据缓存区19中。并且,写入到第二数据缓存区19的数据需要以预设的格式X存储。
接着,执行步骤S11,判断当前处理的特征是否为当前层模型的最后一个特征,如果不是,在返回执行步骤S3,并重复步骤S3至步骤S11的操作,直至当前层模型的最后一个特征计算完毕。如果当前层模型最后一个特征计算完毕,则执行步骤S12,判断当前层模型是否为神经网络的最后一层模型,如果是,则神经网络加速器结束计算,否则,执行步骤S13,获取下一层模型的配置参数,例如通过数据预取模块11从外部存储器读取下一层模型的配置参数,并且将配置参数写入到临时缓存区16。并且,执行步骤S14,互换第一数据缓存区18与第二数据缓存区19的功能,即以第一数据缓存区18作为输出数据的缓存区,使用第二数据缓存区19作为输入数据的缓存区。通常,输入数据包含有输入矩阵。
由于下一层模型的计算往往需要使用上一层模型的输出数据作为输入数据,因此,在下一层模型的计算过程中,可以直接从第二数据缓存区19中读取上一层模型的输出数据,而不需要将上一层模型的输出数据输出至外部存储器,再从外部存储器读取上一层模型的输出数据,从而减少数据搬运的次数。另外,由于第一数据缓存区18与第二数据缓存区19的数据存储格式相同,因此,乘加阵列12能够正确识别第一数据缓存区18与第二数据缓存区19的数据,为互换两个数据缓存区的功能提供必要的条件。
另外,针对嵌入式系统的应用,大部分的神经网络为了节省资源,都会采用定点乘法进行计算。定点乘法的缺点是数据的位宽固定,在神经网络中大量乘加操作中可能会丢失精度。因此,本实施例的输入矩阵、系数矩阵、偏置数据等可以设置小数点的位置。在进行乘法运算的时候,乘积的小数点是两个被乘数的小数点相加;在进行加法的时候,先将两个被加的数据的小数点位对齐,然后补0或者补1的方式让两者的bit位相同,再进行相加的运算。
引入固定数据小数点可以在计算过程中提高动态范围,但是其bit位宽在计算的过程中间也会增加,因此在计算结束的时候还需要针对小数点位和输出bit位宽,进行左移或者右移调整精度。
下面介绍使用乘加阵列12对卷积计算的过程,具体的,以三维矩阵卷积为例进行说明。需要说明的是,矩阵和矩阵的乘法、向量和矩阵的乘法、向量和向量的乘法等都是三维矩阵卷积中的特例,这些特例的计算方法将在后面进行介绍。
对于一次二维卷积的过程,可以定义如下:KH*KW⊙H*W=>OH*OW,其中KH*KW表示一个二维系数矩阵,该二维系数矩阵的高度是KH,宽度是KW。H*W表示一个二维输入矩阵,该二维输入矩阵的高度是H,深度是W。两者卷积得到一个二维平面,该二维平面表示为OH*OW,高度是OH,宽度是OW。
卷积计算的过程是该二维系数矩阵在输入矩阵上以一定的列步长(SW)和行步长(SH)滑过,当系数矩阵与输入矩阵每一次滑动时,系数矩阵和输入矩阵进行点乘求和计算。例如,当系数矩阵的高度、宽度都大于等于2时,如图5所示,假设系数矩阵的高度KH=5、宽度KW=4,系数矩阵共有20个元素,分别表示为f00至f43。本实施例中,按照预设的大小将系数矩阵划分为多个系数子矩阵,例如每一个系数子矩阵的大小是3×3,如图5所示,第一个系数子矩阵包括9个元素,分别是f00至f22,即右侧方框中左侧的矩阵。
假设输入矩阵是一个6×6的矩阵,包含36个元素,分别表示为d00至d55,如果行步长与列步长都是1,则系数子矩阵先横向滑过输入矩阵的第1行至第3行,然后再滑过2行至第4行,直到覆盖整个输入矩阵。每滑动一次,系数子矩阵和其覆盖的输入矩阵对应的区域进行点对点相乘并求和得到一个输出值,该输出值是输出矩阵中的一个元素。当系数子矩阵上下左右滑动过整个输入矩阵的时候,就相应生成了完整的输出矩阵。
具体的,当系数子矩阵与输入矩阵的左上角对齐时,即系数子矩阵的f00覆盖在输入矩阵的d00上时,应用一个处理单元进行点乘求和计算。参见图6,一个处理单元内设置有9个乘法器以及4个加法器,9个乘法器形成3×3的阵列,例如第一个乘法器用于计算f00与d00的乘积,第二个乘法器用于计算f01与d01的乘积,以此类推。第一行的三个乘法器的结果输出至第一行的加法器,第二行的三个乘法器的结果输出至第二行的加法器,第三行的三个乘法器的结果输出至第三行的加法器,这三个加法器的结果均输出至第四个加法器上,由第四个加法器进行累加计算,获得当前处理单元的输出结果,该输出结果就是输出矩阵中的一个元素,例如输出矩阵的左上角的元素。
当系数子矩阵向右滑动一个步长后,系数子矩阵的f00将覆盖输入矩阵的d01,当系数子矩阵再向右滑动一个步长后,系数子矩阵的f00将覆盖输入矩阵的d02,以此类推,直至系数子矩阵覆盖整个输入矩阵。为了提升计算效率,本实施例中,乘加矩阵12内一个设置有4个处理单元,每一个处理单元能够单独的计算系数子矩阵与对应的输入矩阵相应区域的计算。例如,第一个处理单元计算系数子矩阵f00覆盖在输入矩阵d00时的数据,第二个处理单元计算系数子矩阵f00覆盖在输入矩阵d10时的数据,第三个处理单元计算系数子矩阵f00覆盖在输入矩阵d20时的数据,以此类推。可见,四个处理单元将能够计算系数子矩阵覆盖完整六行的输入矩阵的情况。当一个系数子矩阵向右滑动一位时,第一个处理单元计算系数子矩阵f00覆盖在输入矩阵d01时的数据,如果系数子矩阵再次滑动一位,则第一个处理单元计算系数子矩阵f00覆盖在输入矩阵d02时的数据,以此类推。
这样,当第一个处理单元计算系数子矩阵f00覆盖在输入矩阵d03时的数据,即向右滑动四次,将完全覆盖输入矩阵所有列的数据,此时,可以计算获得一行输出行数据,即输出行0的四个数据。相同的,第二个单元可以对应的计算系数子矩阵在d10开始的所对应一行的输出行数据,即输出行1的四个数据,以此类推。当系数子矩阵滑动并覆盖整个输入矩阵后,将获得输出矩阵的所有元素。可以理解,输出矩阵实际上就是该系数子矩阵对应的部分和矩阵。
当一个系数子矩阵计算完毕后,获取下一个系数子矩阵,例如获取f03、f13、f23组成的系数子矩阵。显然,下一个系数子矩阵不满足3×3的大小,此时,系数子矩阵空白的区域填充数据0。这样,系数矩阵将分解成多个相互间不重叠的多个系数子矩阵,每一个系数子矩阵对应的部分和矩阵进行累加,获得该系数矩阵的卷积计算结果,也就是累加计算结果。
可见,在行步长、列步长均为1的情况下,同一个输入矩阵会被系数子矩阵覆盖9次,即系数子矩阵需要沿右侧滑动三次,并且向下滑动三次,相当于系数子矩阵需要多次与输入矩阵不同的区域进行点乘求和计算。为此,将当前的子系数矩阵被所有的处理单元共享,从而提升数据处理的效率。
从图5中可见,每产生一行输出行数据,需要三行输入矩阵的点乘求和的结果,并且,相邻的上下两行输出行数据共享两行输入矩阵对应的点乘求和结果。因此,神经网络加速器中每个处理单元将需要读入3行输入矩阵的点乘求和的结果来计算1行输出行的数据。由于输入矩阵在滑动卷积的过程中会缓存一些输入矩阵行和列的数据,这些行和列的数据在滑动过程中会被系数子矩阵重复使用,因此,缓存这些行和列的数据将有利于减少读入输入矩阵的数据的量。优选的,如果一个处理单元的乘法器阵列的大小是K×K,则缓存的行数和列数都是K-1。
图5所示的例子中,使用4个处理单元进行计算,如果4个处理单元是依次自上而下的进行对其计算,即第一个处理单元是系数子矩阵的f00与输入矩阵的d00对齐,第二个处理单元是系数子矩阵的f00与输入矩阵的d10对齐,这种情况下,系数子矩阵每次向右滑动一位,当四个处理单元滑动之最右侧后,将向下滑动五行,再重新从最左侧开始滑动计算。这样,系数子矩阵在输入矩阵上滑动时,每次滑动共需要输入矩阵的6行数据,为了减少输入矩阵的数据重复读取,可以将输入矩阵最下面的两行数据进行缓存,这样,下一次滑动只需要读入新的4行数据。例如,4个处理单元第一次滑动卷积计算时将需要读入输入矩阵的行0到行3的数据,并且,将行2和行3的数据进行缓存,并且计算获得输出行0的数据。第二次滑动时只需要读入输入矩阵的行4到行7的数据,加上之前缓存的两行数据,产生第输出行1的数据,与此同时,缓存输入行6和行7的数据。
类似的,在所有的处理单元第一次滑动时,当系数子矩阵右侧处在列2的时候,将缓存行0到行3中的列1和列2的数据。当系数子矩阵向右再滑动一步时,这两列数据也是可以复用,即也可以同时缓存列2和列3的数据。
类似的,对于一次三维卷积的过程,可以定义如下:D*KH*KW⊙D*H*W=>OH*OW,其中,D*KH*KW表示一个三维系数矩阵,该三维系数矩阵的深度是D,高度是KH,宽度是KW。D*H*W表示一个三维输入矩阵,该三维输入矩阵的深度和系数矩阵相同,都是D,高度是H,宽度是W。三维系数矩阵和三维输入矩阵卷积得到一个二维平面,二维平面的高度是OH,宽度是OW。三维卷积的输出结果是三维系数矩阵中每个平面KH*KW和数据矩阵中相同位置的平面H*W进行卷积得到的输出矩阵点对点累加得到。
类似的,一次CNN卷积的过程,可以定义如下:N*D*KH*KW⊙D*H*W=>N*OH*OW。其中,神经网络中一次CNN卷积的过程,是多个(表达式中多个是N)三维系数矩阵,和同一个三维输入矩阵做三维卷积,得到N个二维输出矩阵的过程。N个二维矩阵的维度是 N*OH*OW。
上述的计算过程,如果系数矩阵面积很大,例如远远大于处理单元中乘法器的数量,除去处于边角位置的系数子矩阵需要补零的位置,每一个处理单元使用率都是100%,即每一个乘法器均执行有效的运算,只是在边角位置,即需要补零的位置,处理单元的使用率稍微较低。然而,对于系数矩阵的高度为1或者宽度为1的情况,即针对KH=1或者KW=1,甚至两者都等于1的情况,则处理单元的利用率分别只有1/3、1/3和1/9,即处理单元中只有3个、3个、1个乘法器执行有效的运算,其他乘法器将执行无效的运算,这样将大大降低神经网络的计算效率。
为此,本实施例需要对处理单元的使用进行调整,以提高每一个处理单元的使用率。例如,针对系数矩阵的高度KH>=2且宽度KW=1的情况,如图7所示,将每一个处理单元的三列分别独立处理,即处理单元第一列、第二列、第三列分别计算第一个平面、第二个平面、第三个平面的3×1卷积,然后将计算结果进行求和。可以理解,针对图7所示的情况,需要将系数矩阵以3×3×1进行深度、高度和宽度的分解,不足3×3×1的边角区域进行补零,这样,以每个3×3×1的系数子矩阵作为最小计算单元并进行滑动卷积的计算。
相同的,针对系数矩阵的高度KH=1且宽度KW>=2的情况,如图8所示,将每一个处理单元的三行分别独立处理,即处理单元第一行、第二行、第三行分别计算第一个平面、第二个平面、第三个平面的1×3卷积,然后将计算结果进行求和。可以理解,针对图8所示的情况,需要将系数矩阵以3×1×3进行深度、高度和宽度的分解,不足3×1×3的边角区域进行补零,这样,以每个3×1×3的系数子矩阵作为最小计算单元并进行滑动卷积的计算。
类似的,针对系数矩阵的高度KH=1且宽度KW=1的情况,如图9所示,将每一个处理单元的每一个乘法器分别独立处理,即处理单元9个乘法器分别计算1至9个平面的1×1卷积,然后将计算结果进行求和。可以理解,针对图9所示的情况,需要将系数矩阵以9×1×1进行深度、高度和宽度的分解,不足9×1×1的边角区域进行补零,这样,以每个9×1×1的系数子矩阵作为最小计算单元并进行滑动卷积的计算。
由上述可见,如果系数矩阵在高度方向上或者宽度方向上数据不足以覆盖一个处理单元的3×3的乘法器的大小,就从深度上进行拓展,即使用处理单元对下一个平面的输入矩阵进行点乘求和计算,经过拓展后,每一个处理单元的使用率理论上可以达到100%,有效的避免处理单元的乘法器执行无效计算的问题。
为了更好的配合处理单元的计算,需要预先对系数矩阵按照预设的尺寸大小进行分解,对于不足一个系数子矩阵最小单元的地方进行补零。这样,系数子矩阵内部按照从左往右、从上到下、从前往后的方式存储在临时缓存区16,且将多个系数子矩阵按照使用的先后顺序进行存储。
同样的,对于输入矩阵,根据滑动过程存储好相应的数据,例如图5所示的例子中,系数子矩阵先滑过输入矩阵的行0至行3,再滑过行输入矩阵的4至行7,则先存储行0至行3的第1列、第2列直到最后一列,每列元素存储顺序为从上往下。然后再存储输入矩阵的行4至行7中的各列,直到所有输入矩阵的数据存储完毕。如图9的例子,滑动过程中先使用的是第1个平面到第9个平面的行0至行3中的第1列,其形状是深度为9、高度为1、宽度为1,按照从上往下、从前往后顺序预先存储好。
可以理解,针对矩阵乘法、向量矩阵相乘和向量点乘,都是卷积的特例,本发明并不只局限于这的三种,还有其他很多变形。例如,针对长度为K的向量点乘等价于:1*K*1*1⊙ K*1*1,针对长度为K的向量和尺寸为K*M的矩阵相乘等价于:1*K*1*1 ⊙ K*M*1,针对尺寸为N*K的向量和尺寸为K*M的矩阵相乘等价于:N*K*1*1 ⊙ K*M*1,上述的计算也可以采用类似于上述的计算方式执行。
可见,本实施例可以通过增加乘加阵列12中处理单元的数量,或者增加每一个处理单元中乘法器阵列的数量,可以非常方便的扩展乘加阵列的运算能力。
由于本实施例的神经网络加速器和加速计算方法中,采用了以下方法来减少数据重复搬运的问题,从而降低数据存储量、提高计算效率并且降低功耗,进而提升神经网络的功耗比:
第一,将系数矩阵分解为多个系数子矩阵,在每一个系数子矩阵进行卷积计算完毕后,在将多个系数子矩阵的部分和矩阵进行累加,并且,分解获得的每一个系数子矩阵完全复用,不重复从外部存储器读取,而且需要很少的数据存储量。
第二,输入矩阵在滑动卷积计算的过程中缓存一部分行和列的数据,这些行和列的数据在滑动过程中会被系数子矩阵复用,减少重复的数据读取。如果每一个处理单元的大小是K×K,缓存的行数和列数都是K-1。
第三,如果处理单元中的多个乘法器不会被系数子矩阵完全覆盖,即系数子矩阵的行数、列数少于处理单元中的乘法器阵列的行数、列数,则可以根据输入维度,将各行独立、各列独立或者所有乘法器独立,从深度方向拓展,尽量让所有乘法器都执行有效的运算。这样,在大部分情况下,处理单元的计算效率都可以达到100%。
第四,各种不同的矩阵乘法是卷积计算的一个特例,尤其是1×1卷积的特例,本发明提出了对1×1的卷积计算提出拓展方案,可以让每一个处理单元的计算效率达到现100%。
第五,针对各层模型的输入数据与输出数据的缓存,通过互换第一数据缓存区与第二数据缓存区的功能,以减少各层模型计算过程中数据搬运的次数。另外,确保两个数据缓存区存储的数据格式相同,这样,上一次模型的输出数据只需要切换存储就可以作为下一层模型的输入数据使用,无需数据的搬入搬出,也无需人工干预,在多层结构的模型中能够实现非常高效的运算。
第六,本发明设计了一个累加缓存区,在输出特征还只是部分和矩阵的时候,这些部分和矩阵的数据可以停留在加速器内部并进行累加运算,这样,累加缓存区只需要缓存一个特征,因此累加缓存区的面积要求低。
计算机可读存储介质实施例:
神经网络加速器可以运行在一个计算机装置内,例如运行在片上系统,该计算机装置所存储的计算机程序如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述神经网络的加速计算方法的各个步骤。
其中,计算机程序包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
最后需要强调的是,本发明不限于上述实施方式,例如各个处理单元具体结构的变化,或者每一个系数矩阵分解方式变化等,这些改变也应该包括在本发明权利要求的保护范围内。
Claims (10)
1.一种神经网络的加速计算方法,包括:
获取输入矩阵,将所述输入矩阵存储在第一数据缓存区;
其特征在于:
获取系数矩阵,将所述系数矩阵分解成预设大小的多个系数子矩阵,每次读取一个所述系数子矩阵,将所述系数子矩阵以预设的步长相对于所述输入矩阵滑动,所述系数子矩阵每滑动一次,应用乘加阵列的处理单元对所述系数子矩阵与所述输入矩阵进行点乘求和计算,获得一个系数子矩阵对应的部分和矩阵;
其中,所述处理单元对所述系数子矩阵与所述输入矩阵进行一次多行多列的点乘求和计算时,缓存所述输入矩阵预设行数的数据和/或预设列数的数据,在所述处理单元对所述系数子矩阵与所述输入矩阵进行下一次的多行多列的点乘求和计算时,读取上一次缓存的行数据和/或列数据;
将多个系数子矩阵对应的部分和矩阵进行累加计算,获得累加计算结果,根据所述累加计算结果进行特征计算,将一层模型的计算结果存储于第二数据缓存区。
2.根据权利要求1所述的神经网络的加速计算方法,其特征在于:
在所述系数子矩阵的行数小于所述处理单元的乘法器行数时,应用所述处理单元多余行数的乘法器计算所述系数子矩阵与下一个平面的输入矩阵的相应行进行点乘求和计算。
3.根据权利要求1所述的神经网络的加速计算方法,其特征在于:
在所述系数子矩阵的列数小于所述处理单元的乘法器列数时,应用所述处理单元多余列数的乘法器计算所述系数子矩阵与下一个平面的输入矩阵的相应列进行点乘求和计算。
4.根据权利要求1至3任一项所述的神经网络的加速计算方法,其特征在于:
读取一个所述系数子矩阵后,将所述系数子矩阵发送至所有的所述处理单元。
5.根据权利要求1至3任一项所述的神经网络的加速计算方法,其特征在于:
缓存预设行数的行数据包括:缓存的所述行数据的行数为所述处理单元的乘法器的行数减1;
缓存预设列数的列数据包括:缓存的所述列数据的列数为所述处理单元的乘法器的列数减1。
6.根据权利要求1至3任一项所述的神经网络的加速计算方法,其特征在于:
将一层模型的计算结果存储于第二数据缓存区后,使用所述第二数据缓存区作为下一层模型的输入数据缓存区,并使用所述第一数据缓存区作为下一层模型的输出数据缓存区。
7.根据权利要求6所述的神经网络的加速计算方法,其特征在于:
存储于所述第一数据缓存区的数据格式与存储于所述第二数据缓存区的数据格式相同。
8.神经网络加速器,其特征在于,包括:
第一数据缓存区,用于存储至少一层模型的输入矩阵;
第二数据缓存区,用于存储至少一层模型的输出数据;
其特征在于,还包括:
临时缓存区,用于存储系数矩阵被分解成预设大小的系数子矩阵、神经网络当前层模型的配置信息和当前输出特征值的偏置;
乘加阵列,包括至少一个处理单元,每一所述处理单元包括多个乘法器,所述乘加阵列在所述系数子矩阵以预设的步长相对于所述输入矩阵滑动且所述系数子矩阵每滑动一次时,对所述系数子矩阵与所述输入矩阵进行点乘求和计算,获得一个系数子矩阵对应的部分和矩阵;
累加缓存区,将多个系数子矩阵对应的部分和矩阵进行累加计算,获得累加计算结果;
特征处理模块,根据所述累加计算结果进行特征计算,将一层模型的计算结果存储于第二数据缓存区;
其中,所述处理单元对所述系数子矩阵与所述输入矩阵进行一次多行多列的点乘求和计算时,缓存所述输入矩阵预设行数的数据和/或预设列数的数据,在所述处理单元对所述系数子矩阵与所述输入矩阵进行下一次的多行多列的点乘求和计算时,读取上一次缓存的行数据和/或列数据。
9.根据权利要求8所述的神经网络加速器,其特征在于:
所述临时缓存区每次将一个系数子矩阵发送至所述乘加阵列。
10.计算机可读存储介质,其上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现如权利要求1至7中任意一项所述的神经网络的加速计算方法的各个步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111565817.XA CN113947200B (zh) | 2021-12-21 | 2021-12-21 | 神经网络的加速计算方法及加速器、计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111565817.XA CN113947200B (zh) | 2021-12-21 | 2021-12-21 | 神经网络的加速计算方法及加速器、计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113947200A true CN113947200A (zh) | 2022-01-18 |
CN113947200B CN113947200B (zh) | 2022-03-18 |
Family
ID=79339430
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111565817.XA Active CN113947200B (zh) | 2021-12-21 | 2021-12-21 | 神经网络的加速计算方法及加速器、计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113947200B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114638352A (zh) * | 2022-05-18 | 2022-06-17 | 成都登临科技有限公司 | 一种处理器架构、处理器及电子设备 |
CN115860080A (zh) * | 2023-02-15 | 2023-03-28 | 苏州浪潮智能科技有限公司 | 计算核、加速器、计算方法、装置、设备、介质及系统 |
CN116126750A (zh) * | 2023-02-24 | 2023-05-16 | 之江实验室 | 一种基于硬件特性的数据处理的方法及装置 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104915322A (zh) * | 2015-06-09 | 2015-09-16 | 中国人民解放军国防科学技术大学 | 一种卷积神经网络硬件加速方法及其axi总线ip核 |
CN106445471A (zh) * | 2016-10-13 | 2017-02-22 | 北京百度网讯科技有限公司 | 处理器和用于在处理器上执行矩阵乘运算的方法 |
CN107657581A (zh) * | 2017-09-28 | 2018-02-02 | 中国人民解放军国防科技大学 | 一种卷积神经网络cnn硬件加速器及加速方法 |
WO2018130029A1 (zh) * | 2017-01-13 | 2018-07-19 | 华为技术有限公司 | 用于神经网络计算的计算设备和计算方法 |
CN108629406A (zh) * | 2017-03-24 | 2018-10-09 | 展讯通信(上海)有限公司 | 用于卷积神经网络的运算装置 |
CN108805266A (zh) * | 2018-05-21 | 2018-11-13 | 南京大学 | 一种可重构cnn高并发卷积加速器 |
CN110363284A (zh) * | 2019-06-20 | 2019-10-22 | 东南大学 | 一种带新型卷积运算加速模块的卷积神经网络硬件加速器 |
CN110766128A (zh) * | 2018-07-26 | 2020-02-07 | 北京深鉴智能科技有限公司 | 卷积计算单元、计算方法及神经网络计算平台 |
-
2021
- 2021-12-21 CN CN202111565817.XA patent/CN113947200B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104915322A (zh) * | 2015-06-09 | 2015-09-16 | 中国人民解放军国防科学技术大学 | 一种卷积神经网络硬件加速方法及其axi总线ip核 |
CN106445471A (zh) * | 2016-10-13 | 2017-02-22 | 北京百度网讯科技有限公司 | 处理器和用于在处理器上执行矩阵乘运算的方法 |
WO2018130029A1 (zh) * | 2017-01-13 | 2018-07-19 | 华为技术有限公司 | 用于神经网络计算的计算设备和计算方法 |
CN108629406A (zh) * | 2017-03-24 | 2018-10-09 | 展讯通信(上海)有限公司 | 用于卷积神经网络的运算装置 |
CN107657581A (zh) * | 2017-09-28 | 2018-02-02 | 中国人民解放军国防科技大学 | 一种卷积神经网络cnn硬件加速器及加速方法 |
CN108805266A (zh) * | 2018-05-21 | 2018-11-13 | 南京大学 | 一种可重构cnn高并发卷积加速器 |
CN110766128A (zh) * | 2018-07-26 | 2020-02-07 | 北京深鉴智能科技有限公司 | 卷积计算单元、计算方法及神经网络计算平台 |
CN110363284A (zh) * | 2019-06-20 | 2019-10-22 | 东南大学 | 一种带新型卷积运算加速模块的卷积神经网络硬件加速器 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114638352A (zh) * | 2022-05-18 | 2022-06-17 | 成都登临科技有限公司 | 一种处理器架构、处理器及电子设备 |
CN115860080A (zh) * | 2023-02-15 | 2023-03-28 | 苏州浪潮智能科技有限公司 | 计算核、加速器、计算方法、装置、设备、介质及系统 |
CN116126750A (zh) * | 2023-02-24 | 2023-05-16 | 之江实验室 | 一种基于硬件特性的数据处理的方法及装置 |
CN116126750B (zh) * | 2023-02-24 | 2023-08-22 | 之江实验室 | 一种基于硬件特性的数据处理的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113947200B (zh) | 2022-03-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113947200B (zh) | 神经网络的加速计算方法及加速器、计算机可读存储介质 | |
Valueva et al. | Application of the residue number system to reduce hardware costs of the convolutional neural network implementation | |
US11698773B2 (en) | Accelerated mathematical engine | |
Yepez et al. | Stride 2 1-D, 2-D, and 3-D Winograd for convolutional neural networks | |
CN111465924B (zh) | 用于将矩阵输入转换为矩阵处理器的向量化输入的系统和方法 | |
US20200151541A1 (en) | Efficient Convolutional Neural Networks | |
KR20190089204A (ko) | 하드웨어에서의 평균 풀링의 수행 | |
CN112508125A (zh) | 一种图像检测模型的高效全整数量化方法 | |
US11983616B2 (en) | Methods and apparatus for constructing digital circuits for performing matrix operations | |
US11341400B1 (en) | Systems and methods for high-throughput computations in a deep neural network | |
CN112703511B (zh) | 运算加速器和数据处理方法 | |
Fan et al. | Reconfigurable acceleration of 3D-CNNs for human action recognition with block floating-point representation | |
US20230259743A1 (en) | Neural network accelerator with configurable pooling processing unit | |
US6574649B2 (en) | Efficient convolution method and apparatus | |
Memik et al. | Analysis and FPGA implementation of image restoration under resource constraints | |
CN112949845B (zh) | 一种基于fpga的深度卷积神经网络的加速器 | |
CN109948787B (zh) | 用于神经网络卷积层的运算装置、芯片及方法 | |
CN115730653A (zh) | 量化神经网络训练与推理 | |
US7895420B2 (en) | System and method for eliminating common subexpressions in a linear system | |
CN115357214A (zh) | 一种兼容非对称多精度混合乘累加运算的运算单元 | |
US5654910A (en) | Processing method and apparatus for performing 4 ×4 discrete cosine transformation or inverse discrete cosing transformation | |
CN115600062B (zh) | 卷积处理方法、电路、电子设备及计算机可读存储介质 | |
Valuev et al. | Digital Filter Architecture Based on Modified Winograd Method F (2× 2, 5× 5) and Residue Number System | |
Shahan et al. | FPGA based convolution and memory architecture for Convolutional Neural Network | |
CN117077734A (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 |