CN112506436B - 用于卷积神经网络加速器的高效率数据动态存储分配方法 - Google Patents
用于卷积神经网络加速器的高效率数据动态存储分配方法 Download PDFInfo
- Publication number
- CN112506436B CN112506436B CN202011457745.2A CN202011457745A CN112506436B CN 112506436 B CN112506436 B CN 112506436B CN 202011457745 A CN202011457745 A CN 202011457745A CN 112506436 B CN112506436 B CN 112506436B
- Authority
- CN
- China
- Prior art keywords
- data
- space
- layer
- neural network
- convolutional neural
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- 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 Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Human Computer Interaction (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
- Image Analysis (AREA)
Abstract
本发明公开了一种用于卷积神经网络加速器的高效率数据动态存储分配方法,该方法将片外存储空间分配为五个层级:功能区、网络层、数据块、数据点/输出组、分通道区/输入组,每一级在前一级的基础上依据卷积神经网络的数据特征进行分配。通过对五级地址空间的协同控制,有效组织卷积神经网络计算的中间数据,提高数据重用效率。本发明通过利用存储空间保存卷积特征的方法将层间数据组织成具有卷积计算和数据流特征的形式,减少片内数据重组织控制开销的同时缩短加速器计算流水总周期数,提高加速器计算性能。
Description
技术领域
本发明属于数据处理技术领域,具体涉及一种数据动态存储分配方法。
背景技术
在卷积神经网络通道数较多、特征图尺寸较大、操作种类复杂多变的情况下,设计卷积神经网络加速器(后文简称“加速器”)时会出现输入数据、权重与输出数据都无法完全存入片内的情况。如果该卷积神经网络还涉及数据维度和序列上变化时,输出数据从加速器输出时的原始数据组织特征将会消失,增加下一层使用该数据时进行特征恢复的控制开销。在片上存储资源已经充分利用的条件下仍不能完整地进行卷积神经网络加速计算时,需要针对具体应用制定合适的数据资源调度策略,在片内外交互带宽限制的条件下研究如何高效利用片外存储资源。
发明内容
为了克服现有技术的不足,本发明提供了一种用于卷积神经网络加速器的高效率数据动态存储分配方法,该方法将片外存储空间分配为五个层级:功能区、网络层、数据块、数据点/输出组、分通道区/输入组,每一级在前一级的基础上依据卷积神经网络的数据特征进行分配。通过对五级地址空间的协同控制,有效组织卷积神经网络计算的中间数据,提高数据重用效率。本发明通过利用存储空间保存卷积特征的方法将层间数据组织成具有卷积计算和数据流特征的形式,减少片内数据重组织控制开销的同时缩短加速器计算流水总周期数,提高加速器计算性能。
本发明解决其技术问题所采用的技术方案包括如下步骤:
步骤1:划分片外存储空间的功能区组成;
步骤1-1:按照卷积神经网络卷积计算最大层数据量分配特征图图像数据存储空间,记为空间1;
步骤1-2:按照卷积神经网络的总权重数量和偏置及归一化操作最大值分配权重与偏置数据存储空间,记为空间2;
步骤1-3:若卷积神经网络中存在去零编码操作,则按照去零编码操作的最大值分配针对特征图数据的去零编码信息存储空间,记为空间3;否则,若卷积神经网络中不存在去零编码操作,则不分配去零编码信息存储空间;
步骤2:根据卷积神经网络卷积计算最大层数据量确定片外存储空间的网络层组成;
步骤2-1:将空间1的网络层分为两部分,两部分空间大小相等,每部分的空间大小single_data_layer根据公式(1)计算:
single_data_layer=chin*i_width*i_height*data_bitwidth/A (1)
其中,chin表示该部分的输入通道数;f_width表示该部分输入特征图的宽;i_height表示该部分输入特征图的高;data_bitwidth表示当前卷积神经网络特征图内单个数据的位宽;A表示片外存储空间一行的数据位宽;
由公式(1)能确定每一层的计算数据量,统计后得出网络层在片外存储空间的地址偏移量;
步骤2-2:将空间2的网络层分为layer_n部分,layer_n表示卷积神经网络的总层数;每部分的空间大小single_weight_layer根据公式(2)计算:
single_weight_layer=(chin*chout*kernel_size2*weight_bitwidth+have_bias*chout*bias_bitwidth+have-bn*chout*bn_parameter*bn_bitwidth)/A (2)
其中,chout表示该部分的输出通道数;kernel_size2表示卷积核尺寸大小;weight_bitwidth表示当前卷积神经网络内单个权重数据的位宽;have_bias表示当前部分是否含有加偏置操作,若有则设为1,反之设为0;bias_bitwidth表示当前卷积神经网络单个偏置值数据的位宽;have_bn表示当前层是否含有归一化操作,若有则设为1,反之设为0;bn_parameter表示当前层归一化操作的常数个数;bn_bitwidth表示当前卷积神经网络单个归一化操作数据的位宽;
由公式(2)能确定每一层的权重相关数据总量,得出每一个权重相关数据层在片外存储空间的地址偏移量;
步骤2-3:若存在空间3时,将空间3的网络层分为两部分,两部分空间大小相等;
步骤3:根据卷积神经网络单层内数据块的定义确定片外存储空间的数据块组成;
步骤3-1:将空间1的网络层分为data_blk_n部分,每一部分是当前层的一个数据块,data_blk_n表示当前层数据块个数,由公式(3)确定:
其中,blk_ch_num表示一个数据块包含的通道数;
每个数据块的空间大小single_data_blk由公式(4)确定:
single_data_blk=blk_ch_num*i_width*i_height*data_bitwidth/A (4)
步骤3-2:将空间2的权重层分为weight_blk_n部分,weight_blk_n表示当前层权重块个数,由公式(5)确定:
每个权重块的空间大小single_weight_blk由公式(6)确定:
single_weight_blk=blk_ch_num*kernel_size2*weight_bitwidth/A (6)
步骤3-3:若存在空间3时,将空间3的网络层分为data_blk_n部分,data_blk_n表示当前层去零解码信息块的个数;
步骤4:根据卷积神经网络加速器并行特性确定片外存储空间的数据点/输出组的组成;
步骤4-1:将空间1的数据块分为pixel_n部分,每一部分是当前数据块的指定数据点在通道方向上的所有数据,pixel_n表示当前数据块的数据点个数由公式(7)确定:
pixel_n=i_width*i_height (7)
若无去零编码需求时,每个数据点的空间大小single__pixel_normal根据公式(8)确定:
single_pixel_normal=i_width*i_height*data_bitwidth/A (8)
步骤4-2:将空间2的权重块分为unit_n部分,每一部分是一个输出组,输出组中存储卷积神经网络加速器中一个一级计算单元所需的权重,unit_n表示卷积神经网络加速器中一级计算单元的个数;
每个输出组的空间大小single_unit由公式(9)确定:
single_unit=blk_ch_num2*kernel_size2*weight_bitwidth/(A*unit_n) (9)
步骤4-3:若存在空间3时,将空间3的去零解码信息块分为pixel_n部分,每部分根据去零编码信息的构成规则进行分配;
对于任意一个部分,在没有任何零能够剔除的情况下:
a)如果没有数据维度上的变化时,单个数据点的数据量single_pixel_1由公式(10)计算:
single_pixel_1=(code_para+1)*burst_bitwidth/data_bitwidth (10)
其中,code_para表示去零编码操作的操作数据量;
此时单个数据点的去零解码信息空间大小code_info__pixel_1由公式(11)计算:
其中,burst_bitwidth表示数据在加速器与片外存储空间交互时的数据位宽;code_bitwidth表示去零解码信息的数据位宽;
b)如果有数据维度上的变化时,单个数据点的数据量single__pixel_2由公式(12)计算:
其中,dts_size2表示DepthtoSpace操作的尺寸;
此时单个数据点的去零解码信息空间大小code_info_pixel_2由公式(13)计算:
步骤4-4:若整个卷积神经网络都不含有数据维度上的变化,那么空间3内单个数据点的去零解码信息空间大小code_info_pixel就取code_info_pixel_1,同时空间1内的每个数据点的空间大小更新为single_pixel_1;若卷积神经网络中任意一层含有数据维度上的变化,那么该层单个数据点的数据量code_info_pixel就取code_info_pixel_1和code_info_pixel_2的最大值,同时空间1内的每个数据点的空间大小更新为single_pixel_2;
此时空间3的单个去零解码信息块的空间大小code_info_blk由公式(14)确定:
code_info_blk=code_fnfo_pixel*i_width*i_height (14)
空间3的单个网络层的空间大小code_info_layer由公式(15)确定:
code_fnfo_layer=code_info-blk*data_blk_n (15)
步骤5:根据卷积神经网络加速器并行特性确定片外存储空间的分通道区/输入组的组成;
步骤5-1:当卷积神经网络存在数据维度上的变化时,将空间1内的数据点分为dts_size2个部分,若卷积神经网络无去零编码需求时,每个部分的地址空间大小single_part_1由公式(16)确定:
single_part_1=single_pixel_normal/dts_size2 (16)
若有去零编码需求时,每个部分的地址空间大小single_part_2由公式(17)确定:
single_part_2=single_pixel_2/dts_size2 (17)
步骤5-2:将空间2的输出组划分为subunit_n个部分,每一部分是一个输入组,存储着卷积神经网络加速器中一个二级计算单元的权重,subunit_n表示卷积神经网络加速器中每个一级计算单元中二级计算单元的个数;每个输出组的空间大小single_subunit由公式(18)确定:
single_subunit=single_unit/subunit_n (18)
步骤5-3:当卷积神经网络存在去零编码需求时,将空间3内的数据点分为dts_size2个部分,每个部分的空间大小code_info_part由公式(19)确定:
code_info_part=code_fnfo_pixel_2/dts_size2 (19)
步骤6:按照上述5个步骤操作,加速器所需的所有计算数据的交互规则都已确定;当加速器开始计算时,片内数据交互控制模块根据基地址加上各级地址偏移即得出实际写入读出地址,实现计算数据在片内外交互的控制逻辑。
优选地,所述A表示片外存储空间一行的数据位宽,A=8。
有益效果:
采用本发明的一种用于卷积神经网络加速器的高效率数据动态存储分配方法能够减少片内数据重组织控制开销的同时还能缩短加速器计算流水总周期数,提高加速器计算性能。本发明方法的卷积神经网络不仅包括卷积、池化、激活等卷积神经网络的常见操作,还包括数据维度变化、数据序列变化、数据归一化操作。这些操作会改变片内计算数据在时间顺序性和空间顺序性上映射关系,并在数据组织方式上提出复杂的需求。对于由这些操作组成实现的卷积神经网络加速器而言,该方法都可调整适用以满足复杂的片内数据计算需求。
附图说明
图1为本发明方法流程图。
图2为为本发明方法所用卷积神经网络的结构示意图。
图3为为本发明方法中卷积神经网络某层中单数据块的读入顺序示意图。
图4为为本发明方法存储空间地址分配方式示意图。
具体实施方式
下面结合附图和实施例对本发明进一步说明。
本发明设计了一种用于卷积神经网络加速器的高效率数据动态存储分配方法。其目的是解决卷积神经网络中操作的多样性导致的数据重组织操作开销大的问题。该方法提供一种数据在片外存储空间内的特定读写规则,将数据直接写入指定地址并从指定地址读出,利用片外存储空间的一维且可跳地址特性,在片外完成数据的重排序操作。该方法减少片内数据重组织控制开销的同时还能缩短加速器计算流水总周期数,提高加速器计算性能。
该方法所有的数据在片外存储空间内的存放都是默认按照地址增的方向排列的。整个方法的步骤说明过程都是按照先特征图数据相关再权重相关的顺序进行的。
如图1所示,本发明提供一种用于卷积神经网络加速器的高效率数据动态存储分配方法,包括如下步骤:
步骤1:根据卷积神经网络内操作组成划分片外存储空间的功能区组成;
步骤1-1:按照卷积神经网络卷积计算最大层数据量分配特征图图像数据存储空间,记为空间1;
步骤1-2:按照卷积神经网络的总权重数量和偏置及归一化操作最大值分配权重与偏置数据存储空间,记为空间2;
步骤1-3:由于在编码后,下一层计算时只有先依据上一层的编码信息才能对特征图数据进行解码,然后再进行对应数据位置的卷积计算。若卷积神经网络中存在去零编码操作,则按照去零编码操作的最大值分配针对特征图数据的去零编码信息存储空间,记为空间3;否则,若卷积神经网络中不存在去零编码操作,则不分配去零编码信息存储空间;
三个空间内部的各级地址空间都是按照实际情况的最大值去衡量的,以避免出现片内外数据交互时出现地址冲突的问题。
步骤2:根据卷积神经网络卷积计算最大层数据量确定片外存储空间的网络层组成;
步骤2-1:将空间1的网络层分为两部分,两部分空间大小相等,每部分的空间大小single_data_layer根据公式(1)计算:
single_data_layer=chin*i_width*i_height*data_bitwidth/A (1)
其中,chin表示该部分的输入通道数;i_width表示该部分输入特征图的宽;i_height表示该部分输入特征图的高;data_bitwidth表示当前卷积神经网络特征图内单个数据的位宽;A表示片外存储空间一行的数据位宽;
由公式(1)能确定每一层的计算数据量,统计后得出网络层在片外存储空间的地址偏移量;分两部分是为了在卷积神经网络加速器层间计算时对片外存储空间按乒乓读写;
步骤2-2:将空间2的网络层分为layer_n部分,layer_n表示卷积神经网络的总层数;每部分的空间大小single_weight_layer根据公式(2)计算:
single_weight_layer=(chin*chout*kernel_size2*weight_bitwidth+have_bias*chout*bias_bitwidth+have_bn*chout*bn_parameter*bn_bitwidth)/A (2)
其中,chout表示该部分的输出通道数,需要根据实际情况向上取整;kernel_size2表示卷积核尺寸大小,例如1×1、3×3等;weight_bitwidth表示当前卷积神经网络内单个权重数据的位宽;have_bias表示当前部分是否含有加偏置操作,若有则设为1,反之设为0;bias_bitwidth表示当前卷积神经网络单个偏置值数据的位宽;have_bn表示当前层是否含有归一化操作,若有则设为1,反之设为0;bn_parameter表示当前层归一化操作的常数个数,例如将归一化操作可转化为加减乘除四次操作,那么该值就是4;bn_bitwidth表示当前卷积神经网络单个归一化操作数据的位宽;
由公式(2)能确定每一层的权重相关数据总量,得出每一个权重相关数据层在片外存储空间的地址偏移量;
步骤2-3:若存在空间3时,将空间3的网络层分为两部分,两部分空间大小相等;每部分的大小根据空间1的网络层大小以及去零编码信息的构成规则确定。分两部分同样是为了在卷积神经网络加速器层间计算涉及编解码操作时对片外存储空间按乒乓读写。
步骤3:根据卷积神经网络单层内数据块的定义确定片外存储空间的数据块组成;
步骤3-1:将空间1的网络层分为data_blk_n部分,每一部分是当前层的一个数据块,data_blk_n表示当前层数据块个数,由公式(3)确定:
其中,blk_ch_num表示一个数据块包含的通道数;
每个数据块的空间大小single_data_blk由公式(4)确定:
single_data_blk=blk_ch_num*i_width*i_height*data_bitwidth/A (4)
步骤3-2:将空间2的权重层分为weight_blk_n部分,weight_blk_n表示当前层权重块个数,由公式(5)确定:
每个权重块的空间大小single_weight_blk由公式(6)确定:
single_weight_blk=blk_ch_num*kernel_size2*weight_bitwidth/A (6)
步骤3-3:若存在空间3时,将空间3的网络层分为data_blk_n部分,data_blk_n表示当前层去零解码信息块的个数,每个去零解码信息块的空间大小根据空间1的数据块大小以及去零编码信息的构成规则确定;
步骤4:根据卷积神经网络加速器并行特性确定片外存储空间的数据点/输出组的组成;
步骤4-1:将空间1的数据块分为pixel_n部分,每一部分是当前数据块的指定数据点在通道方向上的所有数据,卷积神经网络加速器可并行处理一个数据点的所有数据,pixel_n表示当前数据块的数据点个数由公式(7)确定:
pixel_n=i_width*i_height (7)
若无去零编码需求时,每个数据点的空间大小single_pixel_normal根据公式(8)确定:
single_pixel_normal=i_width*i_height*data_bitwidth/A (8)
步骤4-2:将空间2的权重块分为unit_n部分,每一部分是一个输出组,输出组中存储卷积神经网络加速器中一个一级计算单元所需的权重,unit_n表示卷积神经网络加速器中一级计算单元的个数;
每个输出组的空间大小single_unit由公式(9)确定:
single_unit=blk_ch_num2*kernel_size2*weight_bitwidth/(A*unit_n) (9)
步骤4-3:若存在空间3时,将空间3的去零解码信息块分为pixel_n部分,每部分根据去零编码信息的构成规则进行分配;
对于任意一个部分,在没有任何零可供剔除的最恶劣情况下:
a)如果没有数据维度上的变化时,单个数据点的数据量single_pixel_1由公式(10)计算:
single_pixel_1=(code_para+1)*burst_bitwidth/data_bitwidth (10)
其中,code_para表示去零编码操作的操作数据量,例如一次可对16个数据进行编码时code_para就设为16;
此时单个数据点的去零解码信息空间大小code_info__pixel_1由公式(11)计算:
其中,burst_bitwidth表示数据在加速器与片外存储空间交互时的数据位宽;code_bitwidth表示去零解码信息的数据位宽;
b)如果有数据维度上的变化时,单个数据点的数据量single__pixel_2由公式(12)计算:
其中,dts_size2表示DepthtoSpace操作的尺寸,例如2*2表示DepthtoSpace操作后的当前层通道数变为操作前的1/4,特征图高和宽都变为操作前的2倍;
此时单个数据点的去零解码信息空间大小code_info_pixel_2由公式(13)计算:
步骤4-4:若整个卷积神经网络都不含有数据维度上的变化,那么空间3内单个数据点的去零解码信息空间大小code_info_pixel就取code_info_pixel_1,同时空间1内的每个数据点的空间大小更新为single_pixel_1;若卷积神经网络中任意一层含有数据维度上的变化,那么该层单个数据点的数据量code_info_pixel就取code_info_pixel_1和code_info_pixel_2的最大值,同时空间1内的每个数据点的空间大小更新为single_pixel_2;
此时空间3的单个去零解码信息块的空间大小code_info_blk由公式(14)确定:
code_info_blk=code_info_pixel*i_width*i_height (14)
空间3的单个网络层的空间大小code_info_layer由公式(15)确定:
code_info_layer=code_info_blk*data_blk_n (15)
步骤5:根据卷积神经网络加速器并行特性确定片外存储空间的分通道区/输入组的组成;
步骤5-1:当卷积神经网络存在数据维度上的变化时,将空间1内的数据点分为dts_size2个部分,若卷积神经网络无去零编码需求时,每个部分的地址空间大小single_part_1由公式(16)确定:
single_part_1=single_pixel_normal/dts_size2 (16)
若有去零编码需求时,每个部分的地址空间大小single_part_2由公式(17)确定:
single_part_2=single_pixel_2/dts_size2 (17)
步骤5-2:将空间2的输出组划分为subunit_n个部分,每一部分是一个输入组,存储着卷积神经网络加速器中一个二级计算单元的权重,subunit_n表示卷积神经网络加速器中每个一级计算单元中二级计算单元的个数;每个输出组的空间大小single_subunit由公式(18)确定:
single_subunit=single_unit/subunit_n (18)
步骤5-3:当卷积神经网络存在去零编码需求时,将空间3内的数据点分为dts_size2个部分,每个部分的空间大小code_info_part由公式(19)确定:
code_info_part=code_info_pixel_2/dts_size2 (19)
步骤6:按照上述5个步骤操作,加速器所需的所有计算数据的交互规则都已确定;当加速器开始计算时,片内数据交互控制模块根据基地址加上各级地址偏移即得出实际写入读出地址,实现计算数据在片内外交互的控制逻辑。
优选地,所述A表示片外存储空间一行的数据位宽,A=8。
具体实施例:
实施例中的地址空间一到五级分别对用功能区、网络层、数据块、数据点/输出组、分通道区/输入组。
如图2所示的作为具体实施例的卷积神经网络模型具有以下特点:
1、图2中每层方框中的三个乘积数据分别表示“通道数”“特征图高”“特征图宽”,三者乘积表明当前计算的总数据个数;“conv”表示卷积操作;“bias”表示加偏置操作;“bn”表示BatchNormalization,即归一化方法;“relu”表示利用Relu函数进行激活;“dtos2”表示DepthtoSpace操作且尺寸为2*2,即DepthtoSpace操作后的通道数变为操作前的1/4,特征图高和宽都变为操作前的2倍;“coding”表示对输出数据进行去零编码。
2、单个数据的数据位宽均为16bit,存储空间一行可存储8bit。
3、每次卷积所用的卷积核尺寸都是3*3,滑步大小为1,四周补零为1层。
4、除了第六层,其他层的输出都有归一化和去零操作。该网络的去零操作一次至少需要处理16通道的,而第六层的输出是12通道,不满足要求。依据以上特点利用本发明方法对该神经网络计算过程中所用的片外地址空间进行分配,现将特征图像数据存储空间称为空间1,权重与偏置等相关数据存储空间称为空间2,针对特征图数据的去零编码信息存储空间称为空间3。以下提到的地址偏移量的单位都是存储空间中的“行”。具体实施步骤如下:
由于该网络内六层每层都有偏置,前五层有归一化操作,所以在空间2的前五层都要分配出“偏置区”“归一化区”和“权重区”,第六层只需要“偏置区”和“权重区”。现将各区的地址偏移量根据公式(2)计算如下:第一层的“偏置区”地址偏移量为“2048*16/8=4096”,“归一化区”地址偏移量为“2048*4*16/8=16384”,“权重区”地址偏移量为“32*2048*3*3*16/8=1179648”。第二层的“偏置区”地址偏移量为“1024*16/8=2048”,“归一化区”地址偏移量为“1024*4*16/8=8192”,“权重区”地址偏移量为“512*1024*3*3*16/8=9437184”。第三层的“偏置区”地址偏移量为“512*16/8=1024”,“归一化区”地址偏移量为“512*4*16/8=4096”,“权重区”地址偏移量为“256*512*3*3*16/8=2359296”。第四层的“偏置区”地址偏移量为“256*16/8=512”,“归一化区”地址偏移量为“256*4*16/8=2048”,“权重区”地址偏移量为“128*256*3*3*16/8=589824”。第五层的“偏置区”地址偏移量为“128*16/8=256”,“归一化区”地址偏移量为“128*4*16/8=1024”,“权重区”地址偏移量为“64*128*3*3*16/8=147456”。第六层的“偏置区”地址偏移量为“(((12+7)>>3)<<3)*16/8=32”,“权重区”地址偏移量为“128*(((12+7)>>3)<<3)*3*3*16/8=36864”。2)该网络中,根据公式(1)计算,第一层输入数据所占地址偏移量为“32*16*24*16/8=24576”,第二层输入数据所占地址偏移量为“512*32*48*16/8=1572864”,第三层输入数据所占地址偏移量为“256*64*96*16/8=3145728”,第四层输入数据所占地址偏移量为“128*128*192*16/8=6291456”,第五层输入数据所占地址偏移量为“64*256*384*16/8=12582912”,第六层输入数据所占地址偏移量为“128*256*384*16/8=25165824”。显然,第六层偏移量最大。将该偏移量作为空间1网络层的单层地址偏移量。
该网络中,大多数通道数都是128的倍数,经分析该加速器在片上的实现也可满足128通道的并行度,因此空间1、空间2和空间3第三级单块的通道数据都设置为128。不同的是,空间1和空间3在遍历到不满128通道数的数据块时将按照32通道的整数倍来处理,而空间2按照16通道的整数倍来处理。即利用地址空间的少量浪费(若不是128整数倍的同时也不是32的整数倍时,需要将通道量等同为32的整数倍,其中多分配出来的存储空间内需要补零)来换取控制开销的减少。具体操作为:a)换算32通道方法:“(chin+31)>>5)<<5)”;b)换算16通道方法:“(((chin+15)>>4)<<4)”。
如图3,由于单数据块通道数被设置为128,根据公式(7)(8)(10)(12),空间1第四级单个数据点的地址偏移量为“128*1*16/8=256”。
当单块通道数设置为128时,根据公式(11)(13)将空间3第四级单数据点的地址偏移量设置为64。
由于DepthtoSpace操作的尺寸是2*2,且单数据块通道数被设置为128,所以空间1第五级分通道区的每个区内存储着对应数据点上32通道的数据,每个数据点被分为4个分通道区。对于输入通道数小于128的数据块,每个数据点被分为“((chin+31)>>5)”个分通道区。根据公式(16)(17),每个分通道区的地址偏移量为“32*1*16/8=64”。
空间3第五级分通道区是将对应的第四级数据点分成4个区域,每个区存储着单数据点在32通道上的去零编码信息。根据公式(19)每个分通道区的地址偏移量为“64/4=16”。
如图4,根据公式(3)(4),空间1第一层的第三级每一块地址偏移量为“32*16*24*16/8=24576”,空间1第二层的第三级每一块地址偏移量为“128*32*48*16/8=393216”,空间1第三层的第三级每一块地址偏移量为“128*64*96*16/8=1572864”,空间1第四层的第三级每一块地址偏移量为“128*128*192*16/8=6291456”,空间1第五层的第三级每一块地址偏移量为“64*256*384*16/8=12582912”,空间1第六层的第三级每一块地址偏移量为“128*256*384*16/8=25165824”。显然,空间1第四、五、六层的第三级都只有一个数据块。
根据公式(5)(6),空间2第一层的第三级每一块地址偏移量为“32*128*3*3*16/8=73728”,空间2第二、三、四层的第三级每一块地址偏移量为“128*128*3*3*16/8=294912”,空间2第五层的第三级每一块地址偏移量为“64*128*3*3*16/8=147456”,空间2第六层的第三级每一块地址偏移量为“128*((12+15)>>4)<<4)*3*3*16/8=36864”。
由于该网络第一层的输入数据是不去零的,所以空间3直接从第二层的第三级开始分析。根据公式(14),空间3第二层的第三级每一块地址偏移量为“64*32*48=98304”,空间3第三层的第三级每一块地址偏移量为“64*64*96=393216”,空间3第四层的第三级每一块地址偏移量为“64*128*192=1572864”,空间3第五层的第三级每一块地址偏移量为“64*256*384=6291456”,空间3第六层的第三级每一块地址偏移量为“64*256*384=6291456”。显然,空间3第四五六层的第三级都只有一个数据块,且第五层或者第六层地址偏移量最大。所以,根据公式(15)空间3第二级奇偶层的单层地址偏移量为“6291456”。
对于输入通道数小于128的数据块其第四级单个数据点的地址偏移量为“(((chin+31)>>5)<<5)*1*16/8”。
根据公式(9),空间2第四级输出组的地址偏移量为“128*16*3*3*16/8=36864”。对于输入通道数小于128的且输出通道不是16整数倍的通道块,其输出组的地址偏移量为“chin*(((chout+15)>>4)<<4)*3*3*16/8”。
根据公式(18),空间2第五级输入组的地址偏移量为“16*16*3*3*16/8=4608”。对于输入通道数小于16的且输出通道不是16整数倍的通道块,其输出组的地址偏移量为“chin*(((chout+15)>>4)<<4)*3*3*16/8”。
至此,存储空间内五级地址的地址偏移量已通过上述步骤确定。实际使用时,根据实际应用需求和神经网络实际计算量确定三个基地址关系并产生完整的地址映射。
Claims (2)
1.一种用于卷积神经网络加速器的高效率数据动态存储分配方法,其特征在于,包括以下步骤:
步骤1:划分片外存储空间的功能区组成;
步骤1-1:按照卷积神经网络卷积计算最大层数据量分配特征图图像数据存储空间,记为空间1;
步骤1-2:按照卷积神经网络的总权重数量和偏置及归一化操作最大值分配权重与偏置数据存储空间,记为空间2;
步骤1-3:若卷积神经网络中存在去零编码操作,则按照去零编码操作的最大值分配针对特征图数据的去零编码信息存储空间,记为空间3;否则,若卷积神经网络中不存在去零编码操作,则不分配去零编码信息存储空间;
步骤2:根据卷积神经网络卷积计算最大层数据量确定片外存储空间的网络层组成;
步骤2-1:将空间1的网络层分为两部分,两部分空间大小相等,每部分的空间大小single_data_layer根据公式(1)计算:
single_data_layer=chin*i_width*i_height*data_bitwidth/A (1)其中,chin表示该部分的输入通道数;i_width表示该部分输入特征图的宽;i_height表示该部分输入特征图的高;data_bitwidth表示当前卷积神经网络特征图内单个数据的位宽;A表示片外存储空间一行的数据位宽;
由公式(1)能确定每一层的计算数据量,统计后得出网络层在片外存储空间的地址偏移量;
步骤2-2:将空间2的网络层分为layer_n部分,layer_n表示卷积神经网络的总层数;每部分的空间大小single_weight_layer根据公式(2)计算:
single_weight_layer=(chin*chout*kernel_size2*weight_bitwidth+have_bias*chout*bias_bitwidth+have_bn*chout*bn_parameter*bn_bitwidth)/A (2)
其中,chout表示该部分的输出通道数;kernel_size2表示卷积核尺寸大小;weight_bitwidth表示当前卷积神经网络内单个权重数据的位宽;have_bias表示当前部分是否含有加偏置操作,若有则设为1,反之设为0;bias_bitwidth表示当前卷积神经网络单个偏置值数据的位宽;have_bn表示当前层是否含有归一化操作,若有则设为1,反之设为0;bn_parameter表示当前层归一化操作的常数个数;bn_bitwidth表示当前卷积神经网络单个归一化操作数据的位宽;
由公式(2)能确定每一层的权重相关数据总量,得出每一个权重相关数据层在片外存储空间的地址偏移量;
步骤2-3:若存在空间3时,将空间3的网络层分为两部分,两部分空间大小相等;
步骤3:根据卷积神经网络单层内数据块的定义确定片外存储空间的数据块组成;
步骤3-1:将空间1的网络层分为data_blk_n部分,每一部分是当前层的一个数据块,data_blk_n表示当前层数据块个数,由公式(3)确定:
其中,blk_ch_num表示一个数据块包含的通道数;
每个数据块的空间大小single_data_blk由公式(4)确定:
single_data_blk=blk_ch_num*i_width*i_height*data_bitwidth/A (4)
步骤3-2:将空间2的权重层分为weight_blk_n部分,weight_blk_n表示当前层权重块个数,由公式(5)确定:
每个权重块的空间大小single_weight_blk由公式(6)确定:
single_weight_blk=blk_ch_num*kernel_size2*weight_bitwidth/A (6)
步骤3-3:若存在空间3时,将空间3的网络层分为data_blk_n部分,data_blk_n表示当前层去零解码信息块的个数;
步骤4:根据卷积神经网络加速器并行特性确定片外存储空间的数据点/输出组的组成;
步骤4-1:将空间1的数据块分为pixel_n部分,每一部分是当前数据块的指定数据点在通道方向上的所有数据,pixel_n表示当前数据块的数据点个数由公式(7)确定:
pixel_n=i_width*i_height (7)
若无去零编码需求时,每个数据点的空间大小single_pixel_normal根据公式(8)确定:
single_pixel_normal=i_width*i_height*data_bitwidth/A (8)
步骤4-2:将空间2的权重块分为unit_n部分,每一部分是一个输出组,输出组中存储卷积神经网络加速器中一个一级计算单元所需的权重,unit_n表示卷积神经网络加速器中一级计算单元的个数;
每个输出组的空间大小single_unit由公式(9)确定:
single_unit=blk_ch_num2*kernel_size2*weight_bitwidt/(A*unnit_n) (9)
步骤4-3:若存在空间3时,将空间3的去零解码信息块分为pixel_n部分,每部分根据去零编码信息的构成规则进行分配;
对于任意一个部分,在没有任何零能够剔除的情况下:
a)如果没有数据维度上的变化时,单个数据点的数据量single_pixel_1由公式(10)计算:
sigle_pixel_1=(code_para+1)*burst_bitwidth/data_bitwidth (10)
其中,code_para表示去零编码操作的操作数据量;
此时单个数据点的去零解码信息空间大小code_info_pixel_1由公式(11)计算:
其中,burst_bitwidth表示数据在加速器与片外存储空间交互时的数据位宽;code_bitwidth表示去零解码信息的数据位宽;
b)如果有数据维度上的变化时,单个数据点的数据量single_pixel_2由公式(12)计算:
其中,dts_size2表示DepthtoSpace操作的尺寸;
此时单个数据点的去零解码信息空间大小code_info_pixel_2由公式(13)计算:
步骤4-4:若整个卷积神经网络都不含有数据维度上的变化,那么空间3内单个数据点的去零解码信息空间大小code_info_pixel就取code_info_pixel_1,同时空间1内的每个数据点的空间大小更新为single_pixel_1;若卷积神经网络中任意一层含有数据维度上的变化,那么该层单个数据点的数据量code_info_pixel就取code_info_pixel_1和code_info_pixel_2的最大值,同时空间1内的每个数据点的空间大小更新为single_pixel_2;
此时空间3的单个去零解码信息块的空间大小code_info_blk由公式(14)确定:
code_info_blk=code_info_pixel*i_sidth*i_height (14)
空间3的单个网络层的空间大小code_info_layer由公式(15)确定:
code_info_layer=code_info_blk*data_blk_n (15)
步骤5:根据卷积神经网络加速器并行特性确定片外存储空间的分通道区/输入组的组成;
步骤5-1:当卷积神经网络存在数据维度上的变化时,将空间1内的数据点分为dts_size2个部分,若卷积神经网络无去零编码需求时,每个部分的地址空间大小single_part_1由公式(16)确定:
single_part_1=single_pixel_normal/dts_size2 (16)
若有去零编码需求时,每个部分的地址空间大小single_part_2由公式(17)确定:
single_part_2=single_pixel_2/dts_size2 (17)
步骤5-2:将空间2的输出组划分为subunit_n个部分,每一部分是一个输入组,存储着卷积神经网络加速器中一个二级计算单元的权重,subunit_n表示卷积神经网络加速器中每个一级计算单元中二级计算单元的个数;每个输出组的空间大小single_subunit由公式(18)确定:
single_subunit=single_unit/subunit_n (18)
步骤5-3:当卷积神经网络存在去零编码需求时,将空间3内的数据点分为dts_size2个部分,每个部分的空间大小code_info_part由公式(19)确定:
code_info_part=code_info_pixel_2/dts_size2 (19)
步骤6:按照上述5个步骤操作,加速器所需的所有计算数据的交互规则都已确定;当加速器开始计算时,片内数据交互控制模块根据基地址加上各级地址偏移即得出实际写入读出地址,实现计算数据在片内外交互的控制逻辑。
2.根据权利要求1所述的一种用于卷积神经网络加速器的高效率数据动态存储分配方法,其特征在于,所述A表示片外存储空间一行的数据位宽,A=8。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011457745.2A CN112506436B (zh) | 2020-12-11 | 2020-12-11 | 用于卷积神经网络加速器的高效率数据动态存储分配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011457745.2A CN112506436B (zh) | 2020-12-11 | 2020-12-11 | 用于卷积神经网络加速器的高效率数据动态存储分配方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112506436A CN112506436A (zh) | 2021-03-16 |
CN112506436B true CN112506436B (zh) | 2023-01-31 |
Family
ID=74973689
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011457745.2A Active CN112506436B (zh) | 2020-12-11 | 2020-12-11 | 用于卷积神经网络加速器的高效率数据动态存储分配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112506436B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109711532A (zh) * | 2018-12-06 | 2019-05-03 | 东南大学 | 一种针对硬件实现稀疏化卷积神经网络推断的加速方法 |
CN109993297A (zh) * | 2019-04-02 | 2019-07-09 | 南京吉相传感成像技术研究院有限公司 | 一种负载均衡的稀疏卷积神经网络加速器及其加速方法 |
CN110688158A (zh) * | 2017-07-20 | 2020-01-14 | 上海寒武纪信息科技有限公司 | 计算装置以及神经网络的处理系统 |
GB201917521D0 (en) * | 2019-11-29 | 2020-01-15 | Imagination Tech Ltd | Hardware implementation of a neural network |
CN111340201A (zh) * | 2018-12-19 | 2020-06-26 | 北京地平线机器人技术研发有限公司 | 卷积神经网络加速器及其执行卷积运算操作的方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11055063B2 (en) * | 2016-05-02 | 2021-07-06 | Marvell Asia Pte, Ltd. | Systems and methods for deep learning processor |
CN109976903B (zh) * | 2019-02-22 | 2021-06-29 | 华中科技大学 | 一种基于层宽内存分配的深度学习异构计算方法和系统 |
-
2020
- 2020-12-11 CN CN202011457745.2A patent/CN112506436B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110688158A (zh) * | 2017-07-20 | 2020-01-14 | 上海寒武纪信息科技有限公司 | 计算装置以及神经网络的处理系统 |
CN109711532A (zh) * | 2018-12-06 | 2019-05-03 | 东南大学 | 一种针对硬件实现稀疏化卷积神经网络推断的加速方法 |
CN111340201A (zh) * | 2018-12-19 | 2020-06-26 | 北京地平线机器人技术研发有限公司 | 卷积神经网络加速器及其执行卷积运算操作的方法 |
CN109993297A (zh) * | 2019-04-02 | 2019-07-09 | 南京吉相传感成像技术研究院有限公司 | 一种负载均衡的稀疏卷积神经网络加速器及其加速方法 |
GB201917521D0 (en) * | 2019-11-29 | 2020-01-15 | Imagination Tech Ltd | Hardware implementation of a neural network |
Non-Patent Citations (4)
Title |
---|
SmartShuttle: Optimizing off-chip memory accesses for deep learning accelerators;Jiajun Li等;《2018 Design, Automation & Test in Europe Conference & Exhibition (DATE)》;20180423;第343-348页 * |
一种支持稀疏卷积的深度神经网络加速器的设计;周国飞;《电子技术与软件工程》;20200215(第04期);第110-113页 * |
面向云端FPGA的卷积神经网络加速器的设计及其调度;蔡瑞初等;《计算机应用研究》;20200131(第01期);第172-177、182页 * |
面向卷积神经网络的FPGA加速器架构设计;李炳剑等;《计算机科学与探索》;20200331(第03期);第437-448页 * |
Also Published As
Publication number | Publication date |
---|---|
CN112506436A (zh) | 2021-03-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101196566B1 (ko) | 멀티 프로세서 시스템 및 그 정보처리방법 | |
US10140123B2 (en) | SIMD processing lanes storing input pixel operand data in local register file for thread execution of image processing operations | |
US7043621B2 (en) | Sharding method and apparatus using directed graphs | |
US4903018A (en) | Process for compressing and expanding structurally associated multiple-data sequences, and arrangements for implementing the process | |
CN113296702B (zh) | 一种磁盘阵列扩容方法、装置、设备及存储介质 | |
CN114942831A (zh) | 处理器、芯片、电子设备及数据处理方法 | |
US20200364047A1 (en) | High throughput neural network operations using inter-layer memory layout transformation | |
CN117349032B (zh) | 一种提高大语言模型吞吐量的方法及装置 | |
CN109995467A (zh) | 一种资源映射方法及装置、设备 | |
CN112506436B (zh) | 用于卷积神经网络加速器的高效率数据动态存储分配方法 | |
CN110532093B (zh) | 数值核反应堆多几何形状全堆芯子通道并行任务划分方法 | |
CN116010299A (zh) | 一种数据处理方法、装置、设备及可读存储介质 | |
Hasırcıoğlu et al. | Bivariate hermitian polynomial coding for efficient distributed matrix multiplication | |
CN112732630A (zh) | 针对深度学习的浮点矩阵乘算子众核并行优化方法 | |
US7970997B2 (en) | Program section layout method and layout program | |
CN102468902B (zh) | LTE系统Turbo编码速率匹配/解速率匹配的方法 | |
TWI779475B (zh) | 圖形處理器及其加速方法 | |
CN111736899B (zh) | 一种网络处理器上寄存器的分配方法 | |
CN113052292B (zh) | 卷积神经网络技术方法、装置及计算机可读存储介质 | |
CN111258955B (zh) | 一种文件读取方法和系统、存储介质、计算机设备 | |
CN113052291A (zh) | 数据处理方法和装置 | |
Rosander | Multiple pricing and suboptimization in dual linear programming algorithms | |
CN106844601A (zh) | 一种数据存储方法及数据存储装置 | |
CN115718724B (zh) | Gpu、数据选择方法及芯片 | |
EP1873658B1 (en) | Information processing system and information processing method |
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 |