CN114461978B - 数据处理方法、装置、电子设备及可读存储介质 - Google Patents
数据处理方法、装置、电子设备及可读存储介质 Download PDFInfo
- Publication number
- CN114461978B CN114461978B CN202210381420.3A CN202210381420A CN114461978B CN 114461978 B CN114461978 B CN 114461978B CN 202210381420 A CN202210381420 A CN 202210381420A CN 114461978 B CN114461978 B CN 114461978B
- Authority
- CN
- China
- Prior art keywords
- data
- register
- convolution
- jump
- target
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 27
- 238000000034 method Methods 0.000 claims abstract description 49
- 238000012545 processing Methods 0.000 claims abstract description 42
- 230000008569 process Effects 0.000 claims abstract description 27
- 239000013598 vector Substances 0.000 claims description 49
- 239000011159 matrix material Substances 0.000 claims description 26
- 230000009191 jumping Effects 0.000 claims description 22
- 238000004590 computer program Methods 0.000 claims description 9
- 230000004913 activation Effects 0.000 claims 1
- 238000004364 calculation method Methods 0.000 abstract description 35
- 238000006243 chemical reaction Methods 0.000 abstract description 10
- 238000013527 convolutional neural network Methods 0.000 description 26
- 238000010586 diagram Methods 0.000 description 21
- 230000006870 function Effects 0.000 description 12
- 238000013473 artificial intelligence Methods 0.000 description 10
- 230000002093 peripheral effect Effects 0.000 description 8
- 238000012546 transfer Methods 0.000 description 6
- 230000000694 effects Effects 0.000 description 5
- 238000013528 artificial neural network Methods 0.000 description 4
- 238000005265 energy consumption Methods 0.000 description 4
- 238000013508 migration Methods 0.000 description 4
- 230000005012 migration Effects 0.000 description 4
- 238000009825 accumulation Methods 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000013135 deep learning Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000009466 transformation Effects 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 2
- 238000013501 data transformation Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000012549 training Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000013136 deep learning model Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 210000003746 feather Anatomy 0.000 description 1
- 238000010191 image analysis Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 230000000306 recurrent effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- 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/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
-
- 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/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- 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/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0661—Format or protocol conversion arrangements
-
- 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)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Human Computer Interaction (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Complex Calculations (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请公开了一种数据处理方法、装置、电子设备及计算机可读存储介质,该方法应用于卷积适配器,卷积适配器设置于外部存储和计算单元的内部缓存之间,方法包括:获取寄存器数据;其中,寄存器数据基于目标数据的数据类型和/或应用目标数据的卷积处理的卷积类型确定,用于描述对目标数据的读取方式;基于寄存器数据,从外部存储中读出目标数据,并按照数据读出先后顺序将目标数据存入内部缓存;通过与数据类型或卷积类型相对应的数据读出方式,在数据读出和存入过程中完成对目标数据到通用格式的转换,使得计算单元可以直接从内部缓存中获取通用形式下的目标数据进行计算,无需进行数据的变形,提高了计算效率。
Description
技术领域
本申请涉及神经网络技术领域,特别涉及一种数据处理方法、数据处理装置、电子设备及计算机可读存储介质。
背景技术
卷积神经网络的基本运算为乘加运算,计算量大,且在同一个卷积层内的乘加运算相关性较小,很容易进行并行扩展,如在AI(Artificial Intelligence,人工智能)芯片内堆放很多个算数运算单元(ALU,Arithmetic and Logic Unit,主要是指乘加运算),实现单指令多数据(SIMD)或单指令多线程的并行架构,或者数据流处理的空间架构。AI芯片要能够适配各种卷积神经网络,包括1D/2D/3D卷积、空洞卷积、反卷积、转置卷积、深度可分离卷积、分组卷积、混洗卷积、扁平卷积、可变形卷积等。这些卷积的基本运算虽然相同,但卷积前需要不同的数据变形处理。数据变形处理使得AI芯片的运算效率较低。
因此,相关技术存在的运算效率低的问题,是本领域技术人员需要解决的技术问题。
发明内容
有鉴于此,本申请的目的在于提供一种数据处理方法、数据处理装置、电子设备及计算机可读存储介质,提高了计算效率。
为解决上述技术问题,本申请提供了一种数据处理方法,应用于卷积适配器,所述卷积适配器设置于外部存储和计算单元的内部缓存之间,所述方法包括:
获取寄存器数据;其中,所述寄存器数据基于目标数据的数据类型和/或应用所述目标数据的卷积处理的卷积类型确定,用于描述对所述目标数据的读取方式;
基于所述寄存器数据,从所述外部存储中读出所述目标数据,并按照数据读出先后顺序将所述目标数据存入所述内部缓存。
可选地,所述寄存器数据包括跳转步长数据和跳转循环控制数据;
所述从所述外部存储中读出所述目标数据,包括:
基于循环次数确定目标地址;
在所述外部存储中,基于所述目标地址和所述跳转步长数据执行跳转读取操作;
当跳转读取操作的跳转次数与所述跳转循环控制数据相匹配,则更新所述循环次数;
若所述循环次数与所述跳转循环控制数据相匹配,则确定所述目标数据读取完成。
可选地,所述寄存器数据为多组,每组所述寄存器数据中包括下一寄存器指针数据;
若所述数据类型为地址离散数据,则所述寄存器数据的生成过程,包括:
确定所述目标数据对应的多个非连续的地址区间;
基于不同的所述地址区间,生成多组不同的所述寄存器数据;
基于所述地址区间的顺序关系,设置各个所述寄存器数据中的所述下一寄存器指针数据,以便前一组寄存器数据中的下一寄存器指针数据指向下一组寄存器数据的地址。
可选地,所述寄存器数据包括跳转步长数据和跳转循环控制数据;
若所述数据类型为拆分类型,或所述卷积类型为拆分卷积,则所述寄存器数据的生成过程,包括:
基于所述目标数据的拆分方式,或所述卷积类型,确定对所述目标数据的拆分方向;
基于所述拆分方向确定所述跳转步长数据和跳转循环控制数据;
利用所述跳转步长数据和跳转循环控制数据生成所述寄存器数据。
可选地,所述寄存器数据包括跳转步长数据和跳转循环控制数据;
若所述数据类型为二维数据,则所述寄存器数据的生成过程,包括:
若所述目标数据为二维乘数数据,则将所述跳转步长数据和跳转循环控制数据设置为默认值;
若所述目标数据为二维被乘数数据,则基于所述目标数据的行向量元素数设置所述跳转步长数据,并基于所述目标数据的列向量元素数设置所述跳转循环控制数据。
可选地,若所述卷积类型为反卷积,则所述寄存器数据的生成过程,包括:
确定横向跳转步长和纵向跳转步长;
利用所述横向跳转步长和所述纵向跳转步长,基于卷积核确定卷积矩阵;
基于所述卷积矩阵中各个元素在所述卷积核中的坐标位置,生成所述寄存器数据。
可选地,所述寄存器数据包括跳转步长数据和跳转循环控制数据;
若所述卷积类型为空洞卷积,则所述寄存器数据的生成过程,包括:
确定空洞倍数;
基于所述空洞倍数确定所述跳转步长数据和跳转循环控制数据;
利用所述跳转步长数据和跳转循环控制数据生成所述寄存器数据。
可选地,若所述卷积类型为可变形卷积,则所述寄存器数据的生成过程,包括:
确定所述目标图像的基准坐标和偏移距离;
利用所述基准坐标和所述偏移距离生成所述寄存器数据。
可选地,所述卷积适配器包括本地缓存,所述寄存器数据包括与所述目标数据中各个子数据分别对应的缓存标志数据;所述方法还包括:
若所述缓存标志数据不处于非缓存状态,则将所述子数据保存至所述本地缓存;
若所述缓存标志数据处于输出状态,则将所述子数据存入所述内部缓存。
本申请还提供了一种数据处理装置,应用于卷积适配器,所述卷积适配器设置于外部存储和计算单元的内部缓存之间,所述装置包括:
获取模块,用于获取寄存器数据;其中,所述寄存器数据基于目标数据的数据类型和/或应用所述目标数据的卷积处理的卷积类型确定,用于描述对所述目标数据的读取方式;
数据处理模块,用于基于所述寄存器数据,从所述外部存储中读出所述目标数据,并按照数据读出先后顺序将所述目标数据存入所述内部缓存。
本申请还提供了一种电子设备,包括存储器和处理器,其中:
所述存储器,用于保存计算机程序;
所述处理器,用于执行所述计算机程序,以实现上述的数据处理方法。
可选地,包括多个寄存器组,每个寄存器组中包括多个寄存器,每个寄存器组用于记录一组寄存器数据。
可选地,还包括读写控制器,所述读写控制器用于控制读写所述寄存器组,或用于读写目标数据。
可选地,所述寄存器组的数量为两个,且互为乒乓寄存器组。
可选地,还包括本地缓存,所述本地缓存用于存储目标数据或构成目标数据的子数据。
可选地,还包括偏移距离获取部件,用于在所述卷积类型为可变形卷积时获取偏移距离。
可选地,还包括触发部件,所述触发部件用于触发启动所述电子设备。
本申请还提供了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现上述的数据处理方法。
本申请提供的数据处理方法,应用于电子设备,电子设备设置于外部存储和计算单元的内部缓存之间,方法包括:获取寄存器数据;其中,寄存器数据基于目标数据的数据类型和/或应用目标数据的卷积处理的卷积类型确定,用于描述对目标数据的读取方式;基于寄存器数据,从外部存储中读出目标数据,并按照数据读出先后顺序将目标数据存入内部缓存。
可见,该方法在外部存储和内部缓存之间,设置了单独的电子设备,电子设备基于寄存器数据运行,寄存器数据用于描述对目标数据的读取方式,其基于目标数据的数据类型和/或卷积处理的卷积类型确定。电子设备根据寄存器数据的控制,从外部存储中读出目标数据,并按照数据读取的顺序,将目标数据存入内部缓存。通过设置不同的寄存器数据,可以以不同的方式将目标数据读出,由于目标数据以数据读出的先后顺序写入内部缓存,因此目标数据在内部缓存中的形式与读出的方式相关,在内部缓存中可以以通用的形式存储目标数据。通过与数据类型或卷积类型相对应的数据读出方式,在数据读出和存入过程中完成对目标数据到通用格式的转换,使得计算单元可以直接从内部缓存中获取通用形式下的目标数据进行计算,无需进行数据的变形,提高了计算效率。
此外,本申请还提供了一种数据处理装置、电子设备及计算机可读存储介质,同样具有上述有益效果。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的一种数据变形过程示意图;
图2为本申请实施例提供的一种数据处理***的结构示意图;
图3为本申请实施例提供的一种计算单元的结构示意图;
图4为本申请实施例提供的一种数据处理方法流程图;
图5为本申请实施例提供的一种三维数据卷积过程示意图;
图6为本申请实施例提供的一种二维数据变形示意图;
图7为本申请实施例提供的一种通道扩展场景下数据变形示意图;
图8为本申请实施例提供的另一种通道扩展场景下数据变形示意图;
图9为本申请实施例提供的一种反卷积场景下数据变形示意图;
图10为本申请实施例提供的一种反卷积场景下数据变形结果图;
图11为本申请实施例提供的一种空洞卷积场景下数据变形示意图;
图12为本申请实施例提供的一种可变形卷积时的数据采集过程图;
图13为本申请实施例提供的一种可变形卷积流程图;
图14为本申请实施例提供的一种电子设备结构示意图;
图15为本申请实施例提供的一种寄存器数据结构示意图;
图16为本申请实施例提供的一种三维体数据与寄存器值的对应关系图;
图17为本申请实施例提供的一种复用数据表示图;
图18为本申请实施例提供的一种乒乓寄存器组结构示意图;
图19为本申请实施例提供的一种读控制器的结构示意图;
图20为本申请实施例提供的一种数据处理装置的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
深度学习网络主要包括卷积神经网络(CNN,Convolutional Neural Networks)、循环神经网络(RNN, Recurrent Neural Network)、Transformer类等。其中,CNN主要用于视频/图像分析领域;RNN主要用于语音等时序数据处理;Transformer类主要用于自然语言理解领域。目前深度学习网络算法的落地场景以视频/图像为主,CNN的架构也最为成熟和稳定,下面主要介绍CNN的架构。CNN将学习到的特征与输入数据进行卷积,并使用2D卷积层,从而使该体系结构非常适合处理2D数据(例如图像)。CNN消除了手动提取特征的需要,直接从图像中提取特征。这种自动特征提取功能使深度学习模型对于诸如对象分类之类的计算机视觉任务具有很高的准确性。
CNN使用数十或数百个隐藏层来检测图像的不同特征。每个隐藏层都会增加学习到的图像特征的复杂性。例如,第一个隐藏层可以学习如何检测边缘,最后一个隐藏层可以学习如何检测更复杂的形状,这些形状特别适合我们要识别的对象的形状。
卷积神经网络的基本运算为乘加运算,计算量大,且在同一个卷积层内的乘加运算相关性较小,很容易进行并行扩展,如在AI芯片内堆放很多个算数运算单元(ArithmeticLogic Unit ,ALU,主要是指乘加运算),实现单指令多数据(Single InstructionMultiple Data ,SIMD)或单指令多线程的并行架构,或者数据流处理的空间架构。在某些架构中,内置了向量运算单元和乘加矩阵(multiply-accumulate ,MAC)实现数据并行运算。这些架构可以概括为以下架构:由片上存储(即内部缓存)Global Buffer和片上运算单元PE(processing element)组成的架构。整个卷积过程可以概括为从外部存储DRAM中读取数据,在片上进行缓存和计算,然后将结果写回DRAM。
然而,当前AI芯片面临以下问题:
1、通用性,AI芯片要能够适配各种卷积神经网络,包括1D/2D/3D卷积、空洞卷积、反卷积、转置卷积、深度可分离卷积、分组卷积、混洗卷积、扁平卷积、可变形卷积等。这些卷积的基本运算虽然相同,但卷积前需要不同的数据变形。请参考图1,图1示出了普通卷积和混洗卷积的数据变形方式的不同。
2、算力大,带宽需求大,随着模型的精度不断地增加,代价是神经网络的参数量和计算量急剧增大。因此,深度学习对处理器的性能和带宽有较高的要求。处理器不仅要具备数据级别和流程化的并行性,能够快速处理海量的数据,减少处理时间,还要具备高内存带宽特性,满足处理器大数据量的实时需求。
通常,在功耗、成本、算力的均衡设计后,芯片的数据带宽是确定的,此时要提高带宽需要从两方面:提高带宽利用率和提高数据复用率。前者是合理安排数据读取指令,一次尽可能多的搬移数据,多次数据搬移的间隔尽量短,提高带宽利用率;后者是充分利用卷积的输入数据复用、权重复用、中间结果复用的规律,尽量减少数据的搬移次数。
3、功耗,由于卷积运算涉及高频的数据搬移和计算,能耗巨大,因此能耗通常也是AI芯片的重要评估指标之一。能耗的优化方法为在计算资源的确定的前提下,尽量提高数据的复用率,尽量减少数据的搬移,尽量优化卷积流程,使得各种资源均衡高效的利用。
为了解决上述问题,请参考图2,本申请在AI处理器(即AI芯片)的内部缓存GlobalBuffer(或简称为buffer)前端添加一个电子设备,该电子设备可以被称为CNN适配器(或卷积适配器,CNN Adapter),通过卷积适配器完成数据搬移、CNN网络适配、数据复用的功能,不仅能够提高卷积模块的通用性,还能提高数据总线的利用率和实际的有效的带宽,提高卷积效率,降低能耗。
为了实现上述效果,CNN适配器在数据从外部存储到内部缓存的搬移过程中对数据进行变换,使数据的排列方式满足后续计算模块的需求。因此,CNN适配器的基本功能是数据搬移。由于不同的数据类型,或者卷积计算的卷积类型需要的数据变形方式不同,因此需要针对不同的数据类型或卷积类型设计了不同模式的数据搬移方式。
举例说明,若CNN适配器的后续计算单元为乘加运算矩阵(MAC单元),请参考图3,乘加矩阵为Kvec行Cvec列(图3中为64*64),即每个时钟周期能够进行Kvec*Cvec*2次运算。MAC单元采用了数据(即feature)复用、权重(即weight)复用和中间结果复用的方式。数据(feature)复用是指一个长度为Cvec的数据向量,通过广播(即broadcast)的方式,分别与Kvec个长度为Cvec的权重(weight)向量做乘加运算。权重复用是指加载Kvec个长度为Cvec的权重(weight)向量后存入权重单元缓存weight Atomic buffer中,在接下来的N个时钟周期内,与多个长度为Cvec的广播的数据向量做乘加运算。中间结果复用是指乘加运算的中间结果(也称部分结果)存储到累加模块(accumulator,累加器)的累加缓存buffer中,与下一次的中间结果累加,直至得出完整的结果后再输出。因此,三种复用模式分别降低了数据(feature)读频率、权重(weight)读频率、结果的写频率,从而降低了数据带宽需求。
因此,针对乘加运算矩阵即MAC单元,其对数据排列的需求是:
1、输入数据都必须是向量化数据,向量长度为Cvec,以满足输入并行度Cvec的需求。
2、输出数据也都是向量化的数据,向量长度为Kvec,这是输出并行度Kvec决定的。
3、输入数据满足data数据广播、weight数据复用的方式,即data数据在读取时是每个cycle(即循环)读取一个向量,而weight向量是在N个cycle中读取Kvec个向量,这就要求Kvec个weight向量是连续排列的。
4、读取后存入global buffer中的数据都不需要再次做数据变换,直接传入MAC单元参与运算,因此,不同的卷积类型需要CNN适配器在读取数据到Global buffer(即图3中与读取/写出模块LOAD/STORE相连的SRAM,Static Random Access Memory)时,按照卷积要求转换数据排列顺序。
以上仅为针对MAC单元的一种可行的数据排列要求,结合不同类型的数据、不同类型的卷积计算,数据排列要求可能会更加复杂,数据变形的方式也会更加复杂。
为了实现数据搬移的效果,本申请中的卷积适配器基于寄存器数据工作,请参考图4,数据处理方法包括:
S101:获取寄存器数据。
S102:基于寄存器数据,从外部存储中读出目标数据,并按照数据读出先后顺序将目标数据存入内部缓存。
需要特别说明的是,本申请中的寄存器数据具有特殊的特点,具体的,寄存器数据基于目标数据的数据类型和/或应用目标数据的卷积处理的卷积类型确定,用于描述对目标数据的读取方式。通过根据数据类型和卷积类型,确定对目标数据的变形方式,由于数据存入内部缓存的方式固定,都是按照读出先后顺序存入,因此基于变形方式设置不同的数据读出方式,按照不同的先后顺序读出目标数据的各个部分,即可通过数据的读出和写入实现对目标数据的变形。
由此可见,本申请利用寄存器数据的内容决定了数据的变形方式,可以理解的是,根据目标数据的数据类型和卷积计算的卷积类型的不同,生成寄存器数据的方式不同,具体的生成方式将会在后续说明。
通常来说,目标数据在外部存储中按照通用的方式排列后,在计算时需要被全部读出,因此读出的方式包括连续的读出和间断的读出。连续的读出方式代表着没有对目标数据进行任何变形,间断的读出方式,根据具体的间断方法的不同,代表着对目标数据的不同的变形。在一种实施方式,寄存器数据中包括跳转步长数据和跳转循环控制数据,跳转步长数据,用于表示每两个连续的被读出的数据之间的间隔大小,例如当跳转步长数据为2时,在A地址读出一个数据后,在A+2地址读出下一个数据,以此类推。跳转循环控制数据,包括跳转次数控制数据和循环控制数据,跳转次数控制数据,是指在一轮循环中执行多少次读取操作后重新确定读取的基准地址,即目标地址,循环控制数据,是指在多少轮循环的读取操作后停止本次读取,或者为总共执行多少次读取操作。在读取时,基于循环次数确定目标地址,并在外部存储中,基于目标地址和跳转步长数据执行跳转读取操作。当跳转读取操作的跳转次数与跳转循环控制数据相匹配,则更新循环次数。若循环次数与跳转循环控制数据相匹配,则确定目标数据读取完成。
例如,当跳转循环控制数据为3(跳转次数控制数据)和2(循环控制数据,此时为循环轮次上限值),当跳转步长数据为2时,若第一次读取的目标地址为A,则在A地址读出第一个数据后,跳转一次,在A+2地址读出第二个数据,然后跳转第二次,在A+4地址读出第三个数据,然后跳转第三次,此时跳转次数与跳转循环控制数据相匹配,更新循环次数为1。重新确定目标地址为A+1,然后在A+1地址读出第一个数据后,跳转一次,在A+3地址读出第二个数据,然后跳转第二次,在A+5地址读出第三个数据,然后跳转第三次,更新循环次数为2,此时循环次数与跳转循环控制数据相匹配,读取完成。
需要说明的是,以上仅为一种可行的实施方式,具体实施方式可以比上述的方式更简单或更复杂,例如可以设置在多少轮循环后清零循环次数并重新确定新的目标地址,在多少次清零循环次数后确定数据读取完成。或者,可以设置每一轮循环时读取的数据的具体跳转步长,各个轮次的循环可以不同。
可以理解的是,无论进行什么样的数据读取,CNN适配器均需要实现最基础的数据搬移功能,数据搬移功能用于实现DRAM(即外部存储)与片上SRAM/Buffer(即内部缓存)之间、外设与外设之间、外设与DRAM之间的模块化数据搬移,具体可以通过配置寄存器数据中的数据的源地址、目的地址、数据量等参数以使能CNN适配器完成数据搬移。
针对寄存器数据的具体生成过程,在第一种实施方式中,目标数据的数量为多个,在外部存储中不完全连续(数据类型可称为地址离散数据),这种情况下,需要进行数据的拼接。数据拼接功能主要用于实现经过concat、join、merge、append等数据处理在行W方向、列H方向、通道C方向的拼接效果。在这种情况下,可以确定目标数据对应的多个非连续的地址区间,并基于不同的地址区间,生成多组不同的寄存器数据。其中,每组寄存器数据中包括下一寄存器指针数据,用于指向下一组寄存器数据的地址。基于地址区间的顺序关系,设置各个寄存器数据中的下一寄存器指针数据,形成链表的形式,以便前一组寄存器数据中的下一寄存器指针数据指向下一组寄存器数据的地址。在读取时,当利用上一组寄存器数据读取数据完毕后,可以切换至下一组寄存器数据,进而继续读取,直至基于所有的寄存器数据读取完毕。需要说明的是,各个目标数据在内部缓存中的位置可以连续或不连续。
在第二种实施方式中,若目标数据需要被拆分为多个部分(数据类型可称为拆分类型),即在内部缓存中的存储位置不完全连续,或者,卷积计算时需要将数据分为多个部分(卷积类型可称为拆分卷积),例如分组卷积或混洗卷积shufflenet,此时需要进行数据的拆分。数据拆分功能具体可以为将数据立方体在通道C方向拆分为多组此功能可用于分组卷积和ShuffleNet;或将数据立方体在列H上分成多片,适用于卷积的feature太大,硬件存放不下时的分片卷积。或者可以为其他通道、方向的拆分。在这种情况下,可以基于目标数据的拆分方式,或卷积类型,确定对目标数据的拆分方向,例如可以为通道C方向、行W方向或列H方向。基于拆分方向,即可确定跳转步长数据和跳转循环控制数据,进而利用跳转步长数据和跳转循环控制数据生成寄存器数据。此外,此功能也可通过多组寄存器数据的配置实现,为了提高数据变换效率,多组寄存器数据的配置可以通过链表形式存储起来,当本组寄存器数据控制的数据变换在进行时,加载下一组寄存器数据,本次数据变换结束后,自动启动下一次数据变换。
在第三种实施方式中,数据类型可以为二维数据,例如文本对应的数据,或者单通道下的图像对应的数据。由于卷积计算本质为矩阵乘运算,最常用的卷积运算是三维的数据进行二维的卷积运算,请参考图5,C*H*W的数据立方体与K个C*R*S的filter(即卷积核)做卷积运算生成K*P*Q尺寸的新数据立方体。每个filter在输入数据立方体上沿W和H方向(即二维卷积)滑动,并利用filter中各个坐标对应的数据和数据立方体上对应位置的数据相乘,然后相加,即可生成一个P*Q大小的数据,K个filter结果就可以得到K*P*Q的数据立方体。
由此可见,通常的卷积计算单元(例如MAC单元)更适用于三维数据的卷积运算。但在自然语言(Natural Language Processing ,NLP)中,大部分计算是矩阵乘,而矩阵是没有通道C这个维度的,此时在计算单元上运算矩阵乘就需要将二维的矩阵转换为三维的数据立方体,以提高计算效率。此时,请参考图6,对数据的变换方式为:对处于被乘数位置的矩阵变换数据排列,而乘数矩阵和输出矩阵不需要重新排列。由于矩阵的行列大小固定,重排序的规律固定,只需要配置每次读取数据的跳转值(即跳转步长数据)以及复位边界(即跳转循环控制数据)即可实现连续数据转换。具体的,在生成寄存器数据时,若所述目标数据为二维乘数数据,则将跳转步长数据和跳转循环控制数据设置为默认值,不做任何变换。若目标数据为二维被乘数数据,则基于目标数据的行向量元素数设置跳转步长数据,并基于目标数据的列向量元素数设置跳转循环控制数据。即每轮读取时,均取C方向一列的数据,因此需要将跳转步长数据设置为行向量元素数,在读取完第N行的第M个数据后,跳转至第N+1行的第M个位置,读取数据。在跳转次数达到列向量元素-1时,更新循环次数,进而更新读取的目标地址,从第1行的第M+1个数据继续开始读取,重复跳转读取的过程,直至读取完最后一行最后一列位置上的数据。
在第四种实施方式中,可以通过设置寄存器数据的具体值,实现通道扩展的效果。继续以MAC单元为例,输入的数据是长度为W的向量,通常情况下,外部存储中数据以H*W*C的形式进行存储,因此在卷积之前需要将H*W*C的数据转换为C*H*W的数据,并在通道C方向上做向量化。具体请参考图7,其中,各个数字代表该位置的元素在内存中的索引地址,例如,原来在外部存储中地址为17的数据,转换后在内部缓存中的地址为2,即存储顺序发生了变化,为了实现该效果,需要合理寄存器数据,例如跳转步长数据和跳转循环控制数据。
根据MAC的需求,数据的向量长度为Cvec,假设Cvec为8,而出现如7所示的情况时,通道C方向上的元素数目小于8,此时若不做其他处理,直接取一个通道上的4个元素参与运算,就会导致MAC单元里的1/2乘法器没有输入数据,处于空闲状态,这样不仅会导致计算效率较低,也会导致能耗较大。此时,就可以将数据进行通道扩展。请参考图8,将同一个filter对应的多个通道的数据拼接起来,在通道C方向上的元素由4个变为8个,例如可以按照图8所示,将1、2、3、4这一向量和5、6、7、8这一向量合并为一个新的向量,使通道扩张,提高MAC的乘法器利用率。图8为x方向上的通道扩展,是将相邻的x方向上的两个通道拼接在一起。此外,根据需要,也可以在y方向上通道扩展,原理相同,实现过程为:上图中的向量化可通过二维数据变形的实现方式完成,x方向上的通道扩展的实现方式与数据拼接或拆分的实现方式相似。需要注意的是,输入feature和filter要相同,若发生变化,则需要同时对应变化,不能仅变化其中一个。此外,根据stride(即卷积核平移的步长)的大小,读取的数据可能会有复用,以图8左上角的立方体数据为例,当stride=1时,5、17、21三个位置对应的数据可以在后续的变换中被复用,因此,需要根据filter的大小、stride的大小、通道大小、MAC单元的Cvec大小配置计算复用数据出现的间隔及复用次数,进而生成对应的寄存器数据,从而生成对应的变换数据。
在第五种实施方式中,卷积处理的卷积类型可以为反卷积,反卷积在caffe、pytorch等中通常按照图9的方法运算:下方二维矩阵中深色方格为输入的特征图featuremap,下方二维矩阵中的浅色方格表示卷积核filter,上方的二维矩阵为卷积后的输出featuremap。虚线框为padding处理时***的0元素或穿插的0元素。由此可见,caffe、pytorch中通过对输入的特征图featuremap进行padding 0元素的处理或穿插0元素的处理,使得输入feature扩展,然后按照stride为1的方式做卷积运算。这种方式在实际应用时需要穿插大量的0元素,但在计算时,0元素与filter的卷积值还是0,这样会浪费硬件大量的存储资源和计算资源,使得计算效率较低。
为了解决该问题,本申请对卷积核进行分解,具体包括如下步骤:
1、将filter分解为x_stride*y_stride份;
2、将分解后的filter按照反序排列;
3、每份filter与输入的feature分别做卷积运算;
4、将结果在通道方向拼接起来;
5、然后将拼接起来的数据立方体按照stride_x和stride_y扩展开来。
即,首先确定横向跳转步长x_stride和纵向跳转步长y_stride,并利用所述横向跳转步长和所述纵向跳转步长,基于卷积核确定卷积矩阵(即分解后的filter)。基于所述卷积矩阵中各个元素在所述卷积核中的坐标位置,生成所述寄存器数据,以便在后续读出的目标数据能够与分解后的卷积矩阵进行卷积乘计算。
请参考图10,一个3*3的filter,stride_x与stride_y都是2,将filter分解为4个filter,由于x和y方向的采样步长均为2,因此得到的4个filter中有3个中包括了原本filter中没有的元素,即(0,3)、(2,3)、(3,0)、(3,2)、(1,3)、(3,1)、(2,3),这些新出现的标识索引值超出原有数据的边界,需要填充0。箭头右侧的是原本的filter以及其对应的4个filter的分解。在确定分解后的filter后,可以生成针对filter元素(即权重数据)对应的寄存器数据,使得在利用该寄存器数据搬移filter数据时,仅获取其中有效的元素并构建得到拆分后的filter,进而进行计算。
在第六种实施方式中,卷积类型可以为空洞卷积。空洞卷积的基本理念是扩大卷积的filter的大小,使得每次计算所使用的输入数据的范围更大,即“视野”更大。请参考图11,图11所示的普通卷积与空洞卷积的对比(左图为普通卷积,右图为空洞卷积)。可以看出,空洞卷积的变化是filter中的每个元素的起始值是原来的dilate_rate倍,dilate_rate可以称为空洞倍数,图11中的空洞倍数为2,其他与普通卷积相。因此,针对空洞卷积的数据搬移和变形的关键在于根据dilate_rate定位filter对应的feature值,例如,可以以左上角的filter元素为坐标原点,feature的索引初值是filter元素相对于原点坐标的dilate_rate倍。在生成寄存器数据时,首先确定空洞倍数,并基于空洞倍数确定跳转步长数据和跳转循环控制数据,进而利用跳转步长数据和跳转循环控制数据生成寄存器数据。图11右图中,上方的二维矩阵为filter,下方的二维矩阵为输入特征图,下方的二维矩阵中的深色方格为filter中各个元素对应的部分。
在第七种实施方式中,卷积类型可以为可变形卷积,请参考图12,图12示出了标准卷积(左侧)与可变形卷积(右侧)的对比,标准卷积在输入图像有扭曲形变时不能有效提取图像特征,而可变形卷积可以适应图像的扭曲形变。原因在与,可变形卷积在训练时同时对标准卷积像素的偏移做训练,使得loss(即损失值)最小。因此,训练所得不仅有卷积所需要的weight模型数据,还有得到偏移值所需的模型weight值。请参考图13,在每层卷积计算开始前,首先进行计算offset的卷积计算,得到的offset用于修正选取featuremap的区域,使得选中的区域更加贴切目标。在一种实施方式中,CNN适配器需要添加一个卷积结果反馈输入端口,用来读取offset值(即偏移距离),进而修正CNN适配器读取feature数据的地址。在另一种实施方式中,寄存器数据中可以包括偏移距离,因此在生成寄存器数据时,首先确定目标图像的基准坐标和偏移距离,进而利用基准坐标和偏移距离生成寄存器数据。
在第八种实施方式中,为了提高数据复用率,减少数据搬移次数,进而提高计算效率和减少能耗,卷积适配器中设置有本地缓存,寄存器数据中对应设置有与目标数据中各个子数据分别对应的缓存标志数据。在数据搬移时,可以根据缓存标志数据的状态,进而确定对应执行的步骤。若缓存标志数据不处于非缓存状态,则说明子数据在本地没有缓存,此时则可以将子数据保存至本地缓存。若缓存标志数据处于输出状态,则可以是直接将子数据存入内部缓存,实现从本地缓存到内部缓存的数据搬移,无需从外部存储获取数据。
应用本申请实施例提供的数据处理方法,在外部存储和内部缓存之间,设置了单独的卷积适配器,卷积适配器基于寄存器数据运行,寄存器数据用于描述对目标数据的读取方式,其基于目标数据的数据类型和/或卷积处理的卷积类型确定。卷积适配器根据寄存器数据的控制,从外部存储中读出目标数据,并按照数据读取的顺序,将目标数据存入内部缓存。通过设置不同的寄存器数据,可以以不同的方式将目标数据读出,由于目标数据以数据读出的先后顺序写入内部缓存,因此目标数据在内部缓存中的形式与读出的方式相关,在内部缓存中可以以通用的形式存储目标数据。通过与数据类型或卷积类型相对应的数据读出方式,在数据读出和存入过程中完成对目标数据到通用格式的转换,使得计算单元可以直接从内部缓存中获取通用形式下的目标数据进行计算,无需进行数据的变形,提高了计算效率。
下面对本申请实施例提供的卷积适配器进行介绍,下文描述的卷积适配器与上文描述的数据处理方法可相互对应参照。
卷积适配器100可以包括处理器101和存储器102,此外,根据需要,还可以进一步包括多媒体组件103、信息输入/信息输出(I/O)接口104以及通信组件105中的一种或多种。其中,处理器101用于控制卷积适配器100的整体操作,以完成上述的数据处理方法中的全部或部分步骤;存储器102用于存储各种类型的数据以支持在卷积适配器100的操作,这些数据例如可以包括用于在该卷积适配器100上操作的任何应用程序或方法的指令,以及应用程序相关的数据。该存储器102可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,SRAM)、电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,EPROM)、可编程只读存储器(Programmable Read-Only Memory,PROM)、只读存储器(Read-Only Memory,ROM)、磁存储器、快闪存储器、磁盘或光盘中的一种或多种。
具体的,请参考图14,图14为本申请实施例提供的一种卷积适配器结构示意图。CNN适配器由接口(寄存器配置接口(即寄存器配置模块的接口,register file)、中断(即中断发生器,interrupt generator)、数据读写接口(即读数据控制器read controller和写数据控制器write controller的接口)、可变形卷积偏移数据接口(即OFFSET REG))、握手模块(hand shake module)、触发模块(Triger Module)、寄存器数据存储器(也称为操作描述链表缓存,Descriptor Bank)、寄存器(Register file)、状态监控单元、数据读取单元(即读数据控制器read controller)、数据写出单元(即写数据控制器write controller)、Vector Sram(数据缓存,即本地缓存,也可以称为数据向量缓存区)组成。具体的:
1)Descriptor Bank
该模块用于存储CNN适配器的动作描述符,即寄存器数据,一个Descriptor描述了适配器搬移一次数据所需要的配置。在一种实施方式中,Descriptor格式请参考图15,一个Descriptor 包含12个(在其他实施方式中,可以不限于12个)32位(在其他实施方式中,可以不限于32位)的寄存器。
寄存器描述如下:
NXTDESCPTR: next descriptor的地址,即下一寄存器指针数据,是一个连接下一个descriptor的指针,当适配器工作在chain模式(即链表模式)下,会根据此指针找到下一个descriptor,进而启动下一次的数据适配而不需要CPU参与。
SRC_ADDR:目标数据的源地址;
DST_ADDR:目标数据的目的地址;
CTRL_REG:控制寄存器,配置适配器的中断使能、源数据地址增量、目的地址的增量、数据类型、卷积类型、stride类型,padding的值,通道扩展在x、y方向上的扩展参数等;
CONFIG_REG:配置寄存器,配置握手信号等,数据有效位宽;
Status_REG:记录本次传输的状态,由Status单元修改,是只读寄存器;
SRC/DST_***_stride:在x、y、z三个维度的跳转步长,有多个作用,通过控制寄存器CTRL_REG控制,具体包括:
用于适CNN配器在读取一个Frame后的地址跳转;
用于在反卷积时数据拆分所需的x方向的跳转stride_x和y方向上的跳转stride_y;
用于在三维数据拆分涉及到的高H、宽W、通道C三个维度的跳转;
Frame信息,包括PAD_0_VEC_SIZE、FRAME_SIZE、VECTOR_SIZE、PAD_1_VEC_SIZE,功能描述如下:
请参考图16,图中一层为一个frame,FRAME_SIZE为4,vector_size 为4。data_width是数据位宽,通常情况下也是总线的有效位宽(为了提高总线带宽,通常将总线位宽设置为element_size*element_width,例如MAC单元的向量大小为Cvec,元素为int8,则通常设置总线的位宽为Cvec*8的N倍,N=1,2,3,...)。PAD_0_VEC_SIZE 和PAD_1_VEC_SIZE是用于在输入数据有padding的情况下,表示该frame左边有PAD_0_VEC_SIZE个vector(即向量)是padding(即***的0元素),右边有PAD_1_VEC_SIZE个vector也是padding,此时FRAME_SIZE需要加上两个padding值(即PAD_0_VEC_SIZE和PAD_1_VEC_SIZE)。这种设置是非常有用的,根据CNN网络调研,有很多神经网络的输入都需要做padding处理,在反卷积的数据拆分中也需要padding处理,显然在数据处理时,在寄存器数据中加入padding值可以使后续的卷积计算的逻辑更加简单,不需要关注是否有padding。
VECn_REUSE是用于表示通道扩展场景下数据是否被复用的寄存器,寄存器保存的是计数值,标记着从第一使用到第二次复用的vector向量间隔数目。请参考图17,filter的大小为2*2,stride为1,前后两次的通道扩展会复用到箭头所指的数据,为了避免重复的从外部存储中读取数据,可以利用VECn_REUSE记录数据是否被复用以及复用的间隔是多少个vector。继续以图17为例,第一个frame中的第二个vector被复用,复用间隔为4,所以在适配器写出该vector时,会写出两次,分别写到间隔为4*data_width的地址处。这样变相的减小了对带宽的需求。
可以理解的是,卷积适配器中还包括本地缓存,用于存储目标数据或构成目标数据的子数据,例如图17中被箭头所指的子数据。
2)Register file
Register file是寄存器组以及控制逻辑模块,其中包括的寄存器组的数量可以为一个或多个。为了提高数据处理的效率,寄存器组的数量可以为多个,每个寄存器组包括多个寄存器,每个寄存器组用于记录一组寄存器数据。在这种情况下,在一个寄存器组中的寄存器数据正在被应用数据搬移过程时,另外的寄存器组可以加载其他的寄存器数据。
在一种实施方式中,寄存器组的数量为两个,且互为乒乓寄存器组。即Registerfile包括了一组乒乓寄存器组,每组寄存器缓存一个descriptor,结构请参考图18。Register file中具有读写控制逻辑模块,该模块根据adaptor(即适配器)的done信号切换寄存器输出源,根据adaptor的使能EN信号切换输入源,这样可以保证在搬移数据时,adaptor可以控制寄存器组读取下一次操作的descriptor,使前后两次数据搬移衔接起来,不中断。
3)read/write controller
数据读取/写出控制器,即上述的数据读取单元和数据写出单元,也可称为读写控制器,用于控制读写寄存器组,或者用于控制读写目标数据,是adaptor的关键,主要的控制逻辑在这两个模块实现。Read Controller根据寄存器数据中的数据源地址、Frame_size、Vector_size等,还有config_reg里配置的地址增量、burst size等配置信息,生成读数据地址和相应控制逻辑。读取的数据写入Vector Sram(即本地缓存)中。读取的数据量等需要write controller参考的信息,通过一个fifo同步的传递给write controller。
Write Controller根据寄存器数据中的写数据配置,如写地址、跳转、数据量、padding信息等,将Vector Sram中的数据读取出来,发送到AXI接口上以便写入到内部缓存,并把状态反馈给状态单元。此外,Write Controller在写出数据时,会根据寄存器数据中的VECn_REUSE判断是否需要再次写出到另外一个地址。
需要注意的是,VECn_REUSE是用于通道扩展时的寄存器,当输入feature map通道数比MAC端的Cvec小很多时,需要将feature map的通道进行扩展,以提高MAC运算效率。通常filter大小为1*1或2*2或3*3,所以复用的vector数据通常小于8个,所以VECn_REUSE的最大数量可以设置为8个。
在通道扩展模式下,Read controller会根据通道扩展参数,自动调整vectorsize的大小。如通道扩展在x方向的参数为2,在y方向的扩展参数为2,stride为1,说明需要adaptor读取当前vector的右侧、下侧、右下侧的共四个vector数据组成一个通道。readcontroller读取这四个vector,并把相关信息通过fifo传递给Write controller。Writecontroller会根据这些信息将4个vector写入到同一个通道,并根据VECn_REUSE,把需要复用的数据写入另外的地址处。
read controller会将复用的数据的地址存储到内部的buffer中,当读取数据的地址与buffer中的数据地址相同时,就会自动跳转到下一个地址读取数据,省略当前数据的读取。
请参考图19,整个流程为:判断读取的数据是否是复用数据;是,则将读取数据的地址缓存在addr fifo中;否,则使能地址对比,若此次读取数据的地址与fifo的地址相同,则触发add generator生成下一个地址,当前地址的数据读取使能read_en被置0,同时触发addr fifo把下一个地址读出到总线上,以便下一次的地址对比。
通过简单的逻辑和8个数据容量的fifo就可以实现数据的复用,避免数据的重复读取。主要注意的是,仅在通道扩展模式下才有数据复用,且数据复用数目不超过8,且数据复用顺序为读取数据的顺序,不能乱序复用。
4)Vector Sram
数据缓存,用于缓冲adaptor数据读取和数据写出的不同步,在非通道扩展模式下,数据的写入和读出的地址是不断累加的,防止数据写入和读出的顺序错误。当地址累加到最大值时归零,重新开始不断累加。
需要注意的是,当前descriptor执行完成的判断应该包括:读取数据完成、写出数据完成、Vector Sram为空。三者相与为真(即三个条件同时为真)说明descriptor执行完成,生成中断信号。
5)状态单元
本单元收集read_controller、write_controller、vector_sram的状态,进行综合,生成相应的状态信号,以便表征CNN适配器的工作状态。
6)offset_reg单元
即偏移距离获取部件,用于在卷积类型为可变形卷积时获取偏移距离。本单元是专门用于配置可变形卷积的offset,通过上述的可变形卷积可知,可变形卷积在推理时,会实时产生与选取的输入featrue map相对应的地址偏移举例,使得输入视野与目标更贴切。
Offset_reg单元使用ready/valid握手信号,当adaptor后续的卷积模块输出了offset地址后,read controller和offset_reg单元准寻相同的可变形卷积时序,此时readcontroller读取数据与offset_reg的目标数据一致,offset_reg输出此数据的偏移,叠加在read controller的读取地址上,共同完成读取数据的任务。
7)trigger_module
触发模式选择模块,可称为触发部件,用于触发启动卷积适配器,通过该模块,可以将adaptor配置为在手动触发、外部事件触发、内部chain模式触发等触发模式下工作。
手动触发是通过写入EN信号触发,每次执行一个descriptor的任务,返回成功与否的信号;
外部事件触发可以是计时器、外设事件、CPU中断等触发,每次执行一个descriptor的任务,返回成功与否的信号;
内部chain模式是一次性配置多个descriptor,每个descriptor都有执行下一个descriptor的指针,启动adaptor后,自动完成多个descriptor的任务。
8)hand shake module
当adaptor执行的任务与某个外设直接相关,与CPU关联性不强时,可通过handshanke module直接把adaptor与外设相连,通过握手模块与外设事件互动,从而避免了CPU的间接参与,提高了adaptor与外设的耦合,提高了工作效率。
需要说明的是,上述各个模块可以根据需要进行删减或修改,各个模块之间的连接关系不做限定,能够起到相应的功能即可,例如在一种实施方式中,可以为图14示出的连接关系。
下面对本申请实施例提供的数据处理装置进行介绍,下文描述的数据处理装置与上文描述的数据处理方法可相互对应参照。
请参考图20,图20为本申请实施例提供的一种数据处理装置的结构示意图,该数据处理装置应用于卷积适配器,卷积适配器设置于外部存储和计算单元的内部缓存之间,装置包括:
获取模块,用于获取寄存器数据;其中,寄存器数据基于目标数据的数据类型和/或应用目标数据的卷积处理的卷积类型确定,用于描述对目标数据的读取方式;
数据处理模块,用于基于寄存器数据,从外部存储中读取目标数据,并按照数据读出先后顺序将目标数据存入内部缓存。
下面对本申请实施例提供的计算机可读存储介质进行介绍,下文描述的计算机可读存储介质与上文描述的数据处理方法可相互对应参照。
本申请还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述的数据处理方法的步骤。
该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
本领域技术人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应该认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系属于仅仅用来将一个实体或者操作与另一个实体或者操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语包括、包含或者其他任何变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (17)
1.一种数据处理方法,其特征在于,应用于卷积适配器,所述卷积适配器设置于外部存储和计算单元的内部缓存之间,所述方法包括:
获取寄存器数据;其中,所述寄存器数据基于目标数据的数据类型和/或应用所述目标数据的卷积处理的卷积类型确定,用于描述对所述目标数据的读取方式;所述寄存器数据包括跳转步长数据和跳转循环控制数据;
基于所述寄存器数据,从所述外部存储中读出所述目标数据,并按照数据读出先后顺序将所述目标数据存入所述内部缓存;
所述从所述外部存储中读出所述目标数据,包括:基于循环次数确定目标地址;在所述外部存储中,基于所述目标地址和所述跳转步长数据执行跳转读取操作;当跳转读取操作的跳转次数与所述跳转循环控制数据相匹配,则更新所述循环次数;若所述循环次数与所述跳转循环控制数据相匹配,则确定所述目标数据读取完成。
2.根据权利要求1所述的数据处理方法,其特征在于,所述寄存器数据为多组,每组所述寄存器数据中包括下一寄存器指针数据;
若所述数据类型为地址离散数据,则所述寄存器数据的生成过程,包括:
确定所述目标数据对应的多个非连续的地址区间;
基于不同的所述地址区间,生成多组不同的所述寄存器数据;
基于所述地址区间的顺序关系,设置各个所述寄存器数据中的所述下一寄存器指针数据,以便前一组寄存器数据中的下一寄存器指针数据指向下一组寄存器数据的地址。
3.根据权利要求1所述的数据处理方法,其特征在于,所述寄存器数据包括跳转步长数据和跳转循环控制数据;
若所述数据类型为拆分类型,或所述卷积类型为拆分卷积,则所述寄存器数据的生成过程,包括:
基于所述目标数据的拆分方式,或所述卷积类型,确定对所述目标数据的拆分方向;
基于所述拆分方向确定所述跳转步长数据和跳转循环控制数据;
利用所述跳转步长数据和跳转循环控制数据生成所述寄存器数据。
4.根据权利要求1所述的数据处理方法,其特征在于,所述寄存器数据包括跳转步长数据和跳转循环控制数据;
若所述数据类型为二维数据,则所述寄存器数据的生成过程,包括:
若所述目标数据为二维乘数数据,则将所述跳转步长数据和跳转循环控制数据设置为默认值;
若所述目标数据为二维被乘数数据,则基于所述目标数据的行向量元素数设置所述跳转步长数据,并基于所述目标数据的列向量元素数设置所述跳转循环控制数据。
5.根据权利要求1所述的数据处理方法,其特征在于,若所述卷积类型为反卷积,则所述寄存器数据的生成过程,包括:
确定横向跳转步长和纵向跳转步长;
利用所述横向跳转步长和所述纵向跳转步长,基于卷积核确定卷积矩阵;
基于所述卷积矩阵中各个元素在所述卷积核中的坐标位置,生成所述寄存器数据。
6.根据权利要求1所述的数据处理方法,其特征在于,所述寄存器数据包括跳转步长数据和跳转循环控制数据;
若所述卷积类型为空洞卷积,则所述寄存器数据的生成过程,包括:
确定空洞倍数;
基于所述空洞倍数确定所述跳转步长数据和跳转循环控制数据;
利用所述跳转步长数据和跳转循环控制数据生成所述寄存器数据。
7.根据权利要求1所述的数据处理方法,其特征在于,若所述卷积类型为可变形卷积,则所述寄存器数据的生成过程,包括:
确定目标图像的基准坐标和偏移距离;
利用所述基准坐标和所述偏移距离生成所述寄存器数据。
8.根据权利要求1~7任一项所述的数据处理方法,其特征在于,所述卷积适配器包括本地缓存,所述寄存器数据包括与所述目标数据中各个子数据分别对应的缓存标志数据;所述方法还包括:
若所述缓存标志数据不处于非缓存状态,则将所述子数据保存至所述本地缓存;
若所述缓存标志数据处于输出状态,则将所述子数据存入所述内部缓存。
9.一种数据处理装置,其特征在于,应用于卷积适配器,所述卷积适配器设置于外部存储和计算单元的内部缓存之间,所述装置包括:
获取模块,用于获取寄存器数据;其中,所述寄存器数据基于目标数据的数据类型和/或应用所述目标数据的卷积处理的卷积类型确定,用于描述对所述目标数据的读取方式;所述寄存器数据包括跳转步长数据和跳转循环控制数据;
数据处理模块,用于基于所述寄存器数据,从所述外部存储中读出所述目标数据,并按照数据读出先后顺序将所述目标数据存入所述内部缓存;
所述从所述外部存储中读出所述目标数据,包括:基于循环次数确定目标地址;在所述外部存储中,基于所述目标地址和所述跳转步长数据执行跳转读取操作;当跳转读取操作的跳转次数与所述跳转循环控制数据相匹配,则更新所述循环次数;若所述循环次数与所述跳转循环控制数据相匹配,则确定所述目标数据读取完成。
10.一种电子设备,其特征在于,包括存储器和处理器,其中:
所述存储器,用于保存计算机程序;
所述处理器,用于执行所述计算机程序,以实现如权利要求1至8任一项所述的数据处理方法。
11.根据权利要求10所述的电子设备,其特征在于,包括多个寄存器组,每个寄存器组中包括多个寄存器,每个寄存器组用于记录一组寄存器数据。
12.根据权利要求11所述的电子设备,其特征在于,还包括读写控制器,所述读写控制器用于控制读写所述寄存器组,或用于读写目标数据。
13.根据权利要求11所述的电子设备,其特征在于,所述寄存器组的数量为两个,且互为乒乓寄存器组。
14.根据权利要求10所述的电子设备,其特征在于,还包括本地缓存,所述本地缓存用于存储目标数据或构成目标数据的子数据。
15.根据权利要求10所述的电子设备,其特征在于,还包括偏移距离获取部件,用于在所述卷积类型为可变形卷积时获取偏移距离。
16.根据权利要求10所述的电子设备,其特征在于,还包括触发部件,所述触发部件用于触发启动所述电子设备。
17.一种计算机可读存储介质,其特征在于,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求1至8任一项所述的数据处理方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210381420.3A CN114461978B (zh) | 2022-04-13 | 2022-04-13 | 数据处理方法、装置、电子设备及可读存储介质 |
PCT/CN2022/119682 WO2023197526A1 (zh) | 2022-04-13 | 2022-09-19 | 数据处理方法、装置、电子设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210381420.3A CN114461978B (zh) | 2022-04-13 | 2022-04-13 | 数据处理方法、装置、电子设备及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114461978A CN114461978A (zh) | 2022-05-10 |
CN114461978B true CN114461978B (zh) | 2022-07-08 |
Family
ID=81418593
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210381420.3A Active CN114461978B (zh) | 2022-04-13 | 2022-04-13 | 数据处理方法、装置、电子设备及可读存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114461978B (zh) |
WO (1) | WO2023197526A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114461978B (zh) * | 2022-04-13 | 2022-07-08 | 苏州浪潮智能科技有限公司 | 数据处理方法、装置、电子设备及可读存储介质 |
CN117193669B (zh) * | 2023-11-06 | 2024-02-06 | 格创通信(浙江)有限公司 | 一种报文描述符离散存储方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109740746A (zh) * | 2018-12-29 | 2019-05-10 | 北京中科寒武纪科技有限公司 | 运算方法、装置及相关产品 |
CN110197233A (zh) * | 2019-06-05 | 2019-09-03 | 四川九洲电器集团有限责任公司 | 一种利用航迹进行飞行器分类的方法 |
CN114254744A (zh) * | 2020-09-22 | 2022-03-29 | 上海阵量智能科技有限公司 | 数据处理设备及方法、电子设备和存储介质 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160239706A1 (en) * | 2015-02-13 | 2016-08-18 | Qualcomm Incorporated | Convolution matrix multiply with callback for deep tiling for deep convolutional neural networks |
US10747844B2 (en) * | 2017-12-12 | 2020-08-18 | Tesla, Inc. | Systems and methods for converting a matrix input to a vectorized input for a matrix processor |
CN108629411A (zh) * | 2018-05-07 | 2018-10-09 | 济南浪潮高新科技投资发展有限公司 | 一种卷积运算硬件实现装置及方法 |
CN111258646B (zh) * | 2018-11-30 | 2023-06-13 | 上海寒武纪信息科技有限公司 | 指令拆解方法、处理器、指令拆解装置及存储介质 |
US11341210B2 (en) * | 2019-02-15 | 2022-05-24 | Apple Inc. | Two-dimensional multi-layer convolution for deep learning |
CN110046704B (zh) * | 2019-04-09 | 2022-11-08 | 深圳鲲云信息科技有限公司 | 基于数据流的深度网络加速方法、装置、设备及存储介质 |
CN111008040B (zh) * | 2019-11-27 | 2022-06-14 | 星宸科技股份有限公司 | 缓存装置及缓存方法、计算装置及计算方法 |
CN114461978B (zh) * | 2022-04-13 | 2022-07-08 | 苏州浪潮智能科技有限公司 | 数据处理方法、装置、电子设备及可读存储介质 |
-
2022
- 2022-04-13 CN CN202210381420.3A patent/CN114461978B/zh active Active
- 2022-09-19 WO PCT/CN2022/119682 patent/WO2023197526A1/zh unknown
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109740746A (zh) * | 2018-12-29 | 2019-05-10 | 北京中科寒武纪科技有限公司 | 运算方法、装置及相关产品 |
CN110197233A (zh) * | 2019-06-05 | 2019-09-03 | 四川九洲电器集团有限责任公司 | 一种利用航迹进行飞行器分类的方法 |
CN114254744A (zh) * | 2020-09-22 | 2022-03-29 | 上海阵量智能科技有限公司 | 数据处理设备及方法、电子设备和存储介质 |
Non-Patent Citations (2)
Title |
---|
Zhaodong Chen 等.fuseGNN:Accelerating Graph Convolutional Neural Network Training on GPGPU.《2020 IEEE/ACM International Conference on Computer Aided Design(ICCAD)》.2020, * |
张硕.基于FPGA的多路CNN并行计算体系结构研究.《中国优秀博硕士学位论文全文数据库(博士)信息科技辑》.2021,(第(2021)06期), * |
Also Published As
Publication number | Publication date |
---|---|
WO2023197526A1 (zh) | 2023-10-19 |
CN114461978A (zh) | 2022-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111667051B (zh) | 适用边缘设备的神经网络加速器及神经网络加速计算方法 | |
CN114461978B (zh) | 数据处理方法、装置、电子设备及可读存储介质 | |
KR102443546B1 (ko) | 행렬 곱셈기 | |
US20220012593A1 (en) | Neural network accelerator and neural network acceleration method based on structured pruning and low-bit quantization | |
CN112840356B (zh) | 运算加速器、处理方法及相关设备 | |
CN111897579B (zh) | 图像数据处理方法、装置、计算机设备和存储介质 | |
CN107239824A (zh) | 用于实现稀疏卷积神经网络加速器的装置和方法 | |
CN105739951B (zh) | 一种基于gpu的l1最小化问题快速求解方法 | |
Schmidt et al. | A generic VHDL template for 2D stencil code applications on FPGAs | |
CN112633490B (zh) | 执行神经网络模型的数据处理装置、方法及相关产品 | |
CN112163601A (zh) | 图像分类方法、***、计算机设备及存储介质 | |
CN108491924B (zh) | 一种面向人工智能计算的神经网络数据串行流水处理装置 | |
CN112799599A (zh) | 一种数据存储方法、计算核、芯片和电子设备 | |
CN110414672B (zh) | 卷积运算方法、装置及*** | |
CN113301221B (zh) | 一种深度网络相机图像处理方法及终端 | |
CN111324294A (zh) | 存取张量数据的方法和装置 | |
CN115457363B (zh) | 一种图像目标检测方法及*** | |
CN113554157A (zh) | 数据处理方法及相关产品 | |
CN114022366B (zh) | 基于数据流架构的图像尺寸调整装置、调整方法及设备 | |
US20230259780A1 (en) | Neural network sparsification apparatus and method and related product | |
Xiong et al. | Deep‐Sea: A Reconfigurable Accelerator for Classic CNN | |
Guo et al. | Fused DSConv: Optimizing sparse CNN inference for execution on edge devices | |
CN116980277B (zh) | 数据处理方法、装置、计算机设备及存储介质 | |
CN116781484B (zh) | 数据处理方法、装置、计算机设备及存储介质 | |
CN113704172B (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 |