CN113850380A - 数据处理装置、数据处理方法及相关产品 - Google Patents
数据处理装置、数据处理方法及相关产品 Download PDFInfo
- Publication number
- CN113850380A CN113850380A CN202111129610.8A CN202111129610A CN113850380A CN 113850380 A CN113850380 A CN 113850380A CN 202111129610 A CN202111129610 A CN 202111129610A CN 113850380 A CN113850380 A CN 113850380A
- Authority
- CN
- China
- Prior art keywords
- dimension
- data
- input
- instruction
- output
- 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
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
- 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/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- General Physics & Mathematics (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Image Processing (AREA)
- Complex Calculations (AREA)
Abstract
本披露公开了一种数据处理装置、利用数据处理装置执行分块指令的数据处理方法及相关产品。该数据处理装置可以作为计算装置包括在组合处理装置中,该组合处理装置还可以包括接口装置和其他处理装置。该计算装置与其他处理装置进行交互,共同完成用户指定的计算操作。组合处理装置还可以包括存储装置,该存储装置分别与计算装置和其他处理装置连接,用于存储该计算装置和其他处理装置的数据。本披露的方案实现了小卷积运算中的数据拆分存储,提高了运算处理效率。
Description
技术领域
本披露一般地涉及数据处理领域。更具体地,本披露涉及一种数据处理装置、利用数据处理装置对数据执行分块指令的数据处理方法、芯片和板卡。
背景技术
目前,深度学习(Deep Learning)已经成为机器学习中的重要分支,也大力助推着人工智能(AI)的发展。深度学习的核心技术——深度神经网络(DNN)已在诸多行业有着广泛的应用。
神经网络是人工智能、深度学习中最为关键的技术之一,其中卷积神经网络(Convolution Neural Network,CNN)是最为重要的一种网络类型。卷积神经网络中最为关键的计算即为卷积层(Conv layer)的卷积运算(Convolution Operation)。卷积层的功能是对输入数据进行特征提取,通过多层卷积,能够抽取复杂特征,以保证网络具有足够的表达能力和泛化能力。神经网络模型中包含了大量的、各种类型的卷积运算,卷积运算的计算性能极大地影响整个神经网络模型的计算性能。当神经网络模型应用于不同领域时,例如语音识别、机器翻译、图像处理等等,其对应的输入特征图和权值的各个维度大小可能各有不同。为了充分利用深度学习处理器的硬件优势,需要针对不同规模的、不同类型的卷积运算进行优化,以提高执行神经网络模型的计算性能。
发明内容
为了至少解决如上所提到的一个或多个技术问题,本披露在多个方面中提出了一种数据处理装置,其通过对数据执行分块指令,可以使得各种维度尺寸的数据能够适配卷积运算的硬件,从而提高卷积运算的计算效率。本披露实施例的卷积运算可以是各种神经网络模型中的运算,这些神经网络模型可以应用于各种领域,诸如图像处理、语音处理、文本处理等等,这些处理例如可以包括但不限于识别和分类。
在第一方面中,本披露实施例提供了一种数据处理装置,包括控制电路、第一存储电路和第二存储电路,其中:所述第一存储电路用于存储处理前的数据;所述第二存储电路用于存储处理后的数据;以及所述控制电路用于配置并执行分块指令,以将按照第一维度存储顺序存储在第一存储电路上的输入数据以拆分单元为单位进行拆分并存储为第二存储电路上的输出数据,其中在所述第二存储电路上,各个拆分单元内按照第二维度存储顺序存储,拆分单元之间按照第三维度存储顺序存储。
在第二方面中,本披露实施例提供了一种芯片,其包括前述第一方面的数据处理装置。
在第三方面中,本披露实施例提供了一种板卡,其包括前述第二方面的芯片。
在第四方面中,本披露实施例提供了一种利用前述第一方面的数据处理装置对输入数据执行分块指令的数据处理方法。
通过如上所提供的数据处理装置、芯片、板卡以及由数据处理装置执行分块指令的数据处理方法,本披露实施例的方案针对各种卷积拆分方案中的数据进行分块处理,以适应硬件运算装置的处理能力,从而充分利用多个从处理电路的并行处理能力,可以有效提高卷积运算的运算效率。
附图说明
通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,并且相同或对应的标号表示相同或对应的部分,其中:
图1示出本披露实施例的板卡的结构图;
图2示出本披露实施例的组合处理装置的结构图;
图3a示出本披露实施例的单核计算装置的处理器核的内部结构示意图;
图3b示出本披露实施例的多核计算装置的内部结构简化示意图;
图4示出可以应用本披露实施例的示例性卷积运算原理示例;
图5示出了根据本披露实施例的计算装置的示意性结构框图;
图6示出了根据本披露实施例的一种示例性数据存储顺序;
图7a-7c示出了根据本披露实施例的几种示例性分组模式;
图8示出了根据本披露实施例的输入特征图的示例性拆分示意图;
图9示出根据本披露实施例的Forward4方案的拆分和存储示意图;
图10示出了根据本披露实施例的Forward4方案中运算电路的输出点划分示意图;
图11示出根据本披露实施例的Forward4方案中的单次运算示意图;
图12示出根据本披露实施例的Forward4方案中的滑动卷积示意图;
图13示出根据本披露实施例Forward4方案的输出数据格式示意图;
图14示出根据本披露实施例的整体的数据搬运过程;
图15示出根据本披露实施例的Trans Tiling的示意性概念图;
图16示出前后配表的示意图;以及
图17示出根据本披露实施例的对神经元数据执行分块指令的示意图。
具体实施方式
下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
应当理解,本披露的权利要求、说明书及附图中可能出现的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。
示例性硬件环境
图1示出本披露实施例的一种板卡10的结构示意图。如图1所示,板卡10包括芯片101,其是一种系统级芯片(System on Chip,SoC),或称片上系统,集成有一个或多个组合处理装置,组合处理装置是一种人工智能运算单元,用以支持各类深度学习和机器学习算法,满足计算机视觉、语音、自然语言处理、数据挖掘等领域复杂场景下的智能处理需求。特别是深度学习技术大量应用在云端智能领域,云端智能应用的一个显著特点是输入数据量大,对平台的存储能力和计算能力有很高的要求,此实施例的板卡10适用在云端智能应用,具有庞大的片外存储、片上存储和强大的计算能力。
芯片101通过对外接口装置102与外部设备103相连接。外部设备103例如是服务器、计算机、摄像头、显示器、鼠标、键盘、网卡或wifi接口等。待处理的数据可以由外部设备103通过对外接口装置102传递至芯片101。芯片101的计算结果可以经由对外接口装置102传送回外部设备103。根据不同的应用场景,对外接口装置102可以具有不同的接口形式,例如PCIe接口等。
板卡10还包括用于存储数据的存储器件104,其包括一个或多个存储单元105。存储器件104通过总线与控制器件106和芯片101进行连接和数据传输。板卡10中的控制器件106配置用于对芯片101的状态进行调控。为此,在一个应用场景中,控制器件106可以包括单片机(MicroController Unit,MCU)。
图2是示出此实施例的芯片101中的组合处理装置的结构图。如图2中所示,组合处理装置20包括计算装置201、接口装置202、处理装置203和存储装置204。
计算装置201配置成执行用户指定的操作,主要实现为单核智能处理器或者多核智能处理器,用以执行深度学习或机器学习的计算,其可以通过接口装置202与处理装置203进行交互,以共同完成用户指定的操作。
接口装置202用于在计算装置201与处理装置203间传输数据和控制指令。例如,计算装置201可以经由接口装置202从处理装置203中获取输入数据,写入计算装置201片上的存储装置。进一步,计算装置201可以经由接口装置202从处理装置203中获取控制指令,写入计算装置201片上的控制缓存中。替代地或可选地,接口装置202也可以读取计算装置201的存储装置中的数据并传输给处理装置203。
处理装置203作为通用的处理装置,执行包括但不限于数据搬运、对计算装置201的开启和/或停止等基本控制。根据实现方式的不同,处理装置203可以是中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)或其他通用和/或专用处理器中的一种或多种类型的处理器,这些处理器包括但不限于数字信号处理器(digital signal processor,DSP)、专用集成电路(application specificintegrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本披露的计算装置201而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算装置201和处理装置203整合共同考虑时,二者视为形成异构多核结构。
存储装置204用以存储待处理的数据,其可以是DRAM,为DDR内存,大小通常为16G或更大,用于保存计算装置201和/或处理装置203的数据。
图3a示出了计算装置201为单核装置时处理核的内部结构示意图。计算装置301用以处理计算机视觉、语音、自然语言、数据挖掘等输入数据,计算装置301包括三大模块:控制模块31、运算模块32及存储模块33。
控制模块31用以协调并控制运算模块32和存储模块33的工作,以完成深度学习的任务,其包括取指单元(instruction fetch unit,IFU)311及指令译码单元(instructiondecode unit,IDU)312。取指单元311用以获取来自处理装置203的指令,指令译码单元312则将获取的指令进行译码,并将译码结果作为控制信息发送给运算模块32和存储模块33。
运算模块32包括向量运算单元321及矩阵运算单元322。向量运算单元321用以执行向量运算,可支持向量乘、加、非线性变换等复杂运算;矩阵运算单元322负责深度学习算法的核心计算,即矩阵乘及卷积。
存储模块33用来存储或搬运相关数据,包括神经元存储单元(neuron RAM,NRAM)331、权值存储单元(weight RAM,WRAM)332、直接内存访问模块(direct memory access,DMA)333。NRAM 331用以存储输入神经元、输出神经元和计算后的中间结果;WRAM 332则用以存储深度学习网络的卷积核,即权值;DMA 333通过总线34连接DRAM 204,负责计算装置301与DRAM 204间的数据搬运。
图3b示出了计算装置201为多核的内部结构简化示意图。多核计算装置可以用层次化硬件模型来进行抽象。如图所示,多核计算装置可以抽象为四个层级,即板卡级(Card)350、芯片级(Chip)360、处理器簇级(Cluster)370和处理器核级(Core)380。本披露实施例中主要涉及存储单元的数据传输和计算单元部分,因此附图和描述简要示出和介绍相关的计算结构,省略其他部分。
在板卡级,每块板卡上包含本地DDR存储,每个处理器芯片作为计算和控制单元。
在芯片级,每个处理器芯片包含多个多处理器作为计算单元。
在计算簇级,每个多处理器包括多个加速器核作为控制和计算单元,另外还有共享存储SRAM作为存储单元。
在处理器核级,每个加速器核包含本地存储及本地处理单元阵列。NFU指神经运算单元(Neuron Function Unit),用于进行卷积计算。
在该多核计算装置中,存储模型包括板卡全局内存、Cluster上的SRAM(共享存储器)、Core上的NRAM、WRAM和寄存器等。为了获得更好的性能,可以显式地控制Card以下各存储层次之间的数据搬移以及访存/计算间的平衡。SRAM包含在存储处理单元MPU(MemoryProcess Unit Core,简称MPU,或者Mem Core)中。Core指多核计算装置中的智能处理核(Intelligent Process Unit Core,简称IPU Core或者Core)。1个IPU Core包含NRAM,WRAM,NFU等等。Cluster指处理器簇或称计算簇,通常多核计算装置包含若干个Cluster,一个Cluster包含1个Mem Core+N个IPU Core。
示例性卷积运算类型
神经网络模型中的卷积层可以执行卷积运算,通过对输入特征图(也称为输入数据、神经元或输入神经元)应用卷积核(也称为过滤器、权值等)做卷积处理,从而进行特征提取。卷积层内部可以包含多个卷积核,组成卷积核的每个元素对应一个权值系数和一个偏置bias。本披露实施例可以应用于各种卷积运算的数据拆分中。
在常规3D卷积运算中,假设卷积层中输入特征图(Feature map)张量形状表示为X[N Hi WiCi],卷积核(kernel)的张量形状表示为K[Co Kh Kw Ci],输出的结果为Y[N HoWo Co],那么,简化的卷积运算的数学计算公式可以表示如下:
Yin,jc,jh,jw=∑0≤ic≤ci,0≤ih≤kh,0≤iw≤kwXin,ic,jh×sh+ih,jw×sw+iw×Kjc,ic,ih,iw (1)
上式中,X是输入数据,Y是输出数据,K是卷积核,Kh和Kw是K的长和宽,sh和sw是在长和宽方向上的步长(stride),公式忽略了偏置bias,填充pad和膨胀dilation,并且假设输入数据X已经做了填充,卷积核已经做了膨胀。公式忽略了N维度和C维度,神经网络模型的正向计算在N维度上的计算都是独立的,在C维度上是全连接的。卷积核在工作时,会按照一定的步长扫过输入特征,在卷积窗口内对输入特征做矩阵元素乘法求和并叠加偏差量。
图4示出了可以应用本披露实施例的示例性常规3D卷积运算原理示例。
图中示例性示出了大小为[N Hi Wi Ci]的四维输入数据X,其可以表示成N个Hi×Wi×Ci大小的立体矩形410。图中还示例性示出了大小为[Co Kh Kw Ci]的四维卷积核K,其可以表示成Co个Kh×Kw×Ci大小的立体卷积核420。输入数据X与卷积核K的卷积结果得到输出数据Y,其为[N Ho Wo Co]大小的四维数据,可以表示成N个Ho×Wo×Co大小的立体矩形430。
图中还具体示出了一个卷积运算示例,其中输入数据为6×6×3大小的输入特征图440,省去N维度;卷积核为3×3×3大小的立体卷积核450,针对单个Co;输出数据为4×4的输出特征图460。具体运算过程如下:
卷积核450按照一定的步长扫过输入特征图440,在卷积窗口470内对输入特征做矩阵元素乘法求和并叠加偏置。也即,输出特征图460中每个位置上的值由每个输入特征图的对应区块和对应卷积核做二维卷积运算之后再加和得到。例如,图中示出了输出特征图460上(0,0)位置的值(也即卷积输出点)由输入特征图中黑色立方体框出的卷积窗口470与立体卷积核450进行二维卷积运算得到3个值,再加和得到最终值。
为了得到其他位置的输出,可以在输入特征图440上移动卷积核450的位置,也即移动卷积输出点的卷积窗口。在图中示例中,卷积步长(Sx,Sy)为(1,1),当横向(宽度方向)向右或纵向(高度方向)向下移动一格后做卷积运算,可以分别得到输出特征图460上(0,1)或(1,0)位置的值。
从上面的描述可知,在神经网络的一个卷积层中,有N组输入特征图,每组包含Hi×Wi×Ci个信息,其中Hi和Wi分别是输入特征图的高度和宽度,Ci是输入特征图的个数,也称为输入通道数。卷积层有Ci×Co个Kh×Kw大小的卷积核,其中Ci是输入通道数,Co是输出特征图的个数(或输出通道数),Kh和Kw分别是卷积核的高度和宽度。输出特征图包含Ho×Wo×Co个信息,其中Ho和Wo分别是输出特征图的高度和宽度,Co是输出通道数。此外,在卷积运算中,还会涉及到卷积步长(Sx,Sy),卷积步长的大小会影响输出特征图的尺寸。
在本文中,输入特征图(Feature map)、输入数据、神经元或输入神经元可互换使用;卷积核、过滤器或权值可互换使用。此外,H(高度)和Y维度可互换使用,W(宽度)和X维度可互换使用。相应地,输入特征图的H维度可以表示为Hi或Yi,输出特征图的H维度可以表示为Ho或Yo,W维度类似表示。在本披露实施例中,每个卷积输出点具有对应的卷积窗口,卷积窗口的形状等于卷积核的形状。每个卷积输出点的值对应于其卷积窗口内的输入特征图与权值的对位乘累加结果。
示例性计算装置/数据处理装置
在本披露实施例中,可以采用主从结构的计算装置来实施上述卷积运算。进一步地,可以为输入特征图和卷积核配置不同的数据通路,从而提高访存效率。
图5示出了根据本披露实施例的计算装置500的示意性结构框图。可以理解,该结构可以视为图3中单个处理核的运算模块的内部结构细化,也可以视为在多个图3所示处理核的运算模块基础上联合的功能划分框图。如图5所示,本披露实施例的计算装置500可以配置用于执行各种类型的卷积运算,其可以包括主处理电路(MA)510和多个从处理电路(SL)520,图中示出了16个从处理电路SL0~SL15。本领域技术人员可以理解,从处理电路的数量可以更多或更少,取决于具体的硬件配置,本披露实施例在此方面没有限制。
主处理电路和从处理电路之间以及多个从处理电路之间可以通过各种连接相互通信。在不同的应用场景中,多个从处理电路之间的连接方式既可以是通过硬线布置的硬连接方式,也可以是根据例如微指令进行配置的逻辑连接方式,以形成多种从处理电路阵列的拓扑结构。本披露实施例在此方面没有限制。主处理电路和从处理电路可以相互配合,由此实现并行运算处理。
为了支持运算功能,主处理电路和从处理电路可以包括各种计算电路,例如可以包括向量运算单元及矩阵运算单元。向量运算单元用以执行向量运算,可支持向量乘、加、非线性变换等复杂运算;矩阵运算单元负责深度学习算法的核心计算,例如矩阵乘和卷积。
从处理电路例如可以用于根据运算指令,对相应的数据并行执行中间运算得到多个中间结果,并将多个中间结果传输回主处理电路。
通过将计算装置500设置成主从结构(例如一主多从结构,或者多主多从结构,本披露在此方面没有限制),对于正向运算的计算指令,可以根据计算指令将数据进行拆分,从而通过多个从处理电路对计算量较大的部分进行并行运算以提高运算速度,节省运算时间,进而降低功耗。
在本披露一些实施例中,通过利用不同的数据通路传输输入特征图和权值,可以支持输入特征图和权值的多种复用方式,从而减小运算期间的数据访存量,提升处理效率。
具体地,计算装置500中还可以包括第一存储装置530和第二存储装置540,用于分别存储经由不同数据通道传输的数据。
第一存储电路530可以用于存储多播数据,也即第一存储电路中的数据将通过广播总线传输给多个从处理电路,这些从处理电路接收到相同的数据。可以理解,通过广播总线可以实现广播和多播。多播是指将一份数据传输到多个从处理电路的通信方式;而广播是将一份数据传输到所有从处理电路的通信方式,是多播的一个特例。由于多播和广播都对应一对多的传输方式,本文中未对二者特意区分,广播和多播可以统称为多播,本领域技术人员根据上下文可以明确其含义。
第二存储电路540可以用于存储分发数据,也即第二存储电路中的数据将分别传输给不同的从处理电路,每个从处理电路接收到不同的数据。
通过分别提供第一存储电路和第二存储电路,可以支持针对待运算的数据以不同传输方式进行传输,从而通过在多个从处理电路之间复用多播数据来降低数据访存量。
在一些实施例中,主处理电路可以将输入特征图和卷积核中之一确定为多播数据并存储在第一存储电路中,以在运算期间通过广播方式将数据传输给调度的多个从处理电路。对应地,主处理电路可以将输入特征图和卷积核中另一确定为分发数据并存储在第二存储电路中。这些分发数据可以在运算前分发给对应的从处理电路。
图5还示出了根据本披露实施例的从处理电路SL的内部结构示意图。如图所示,每个从处理电路520可以包括多个运算电路CU 521、第一缓冲电路522和第二缓冲电路523。图中示出了4个运算电路CU0~CU3。本领域技术人员可以理解,运算电路的数量可以更多或更少,取决于具体的硬件配置,本披露实施例在此方面没有限制。
在一些实施例中,第一缓冲电路522可以用于缓存分配给该从处理电路的权值或输入特征图。相应地,第二缓冲电路523则可以用于缓存分配给该从处理电路的输入特征图或权值。这两个缓冲电路均用于选取参与运算的数据。第一缓冲电路522的数据可以是来自例如第一存储电路530或第二存储电路540的多个数据行,对应地,第二缓冲电路523的数据可以来自例如第二存储电路540或第一存储电路530的多个数据行。取决于具体的复用方式,这些数据行可以在运算期间被分发给对应的运算电路CU 521或广播给该从处理电路520内的所有CU 521。
每个运算电路CU 521用于在每次计算时,针对分别从第一缓冲电路中选取的数据行和从第二缓冲电路中选取的数据行执行对位乘累加运算。
通过分别提供第一缓冲电路和第二缓冲电路,可以支持针对待运算的数据以不同传输方式进行传输,从而通过在单个从处理电路内的多个运算电路之间尽可能复用数据来降低数据访存量。
从处理电路520中还可以包括第三缓冲电路524,用于缓存各个运算电路CU 521的运算结果。
可以理解,虽然在图5中将各个处理电路与存储电路示出为分立的模块,但是根据不同的配置,存储电路与处理电路也可以合并成一个模块。例如,第一存储电路530可以与主处理电路510合并在一起,第二存储电路540则可以由多个从处理电路520共享,并为每个从处理电路分配独立的存储区域,加速访问。本披露实施例在此方面没有限制。此外,在该计算装置中,主处理电路和从处理电路可以属于同一处理器或芯片的不同模块,也可以属于不同处理器,本披露在此方面也没有限制。
示例性数据拆分和存储
在本披露实施例中,所涉及的多维数据的维度表征为(N,H,W,C)或(Co,H,W,Ci),其代表了数据在存储器中的存储顺序。可以理解,虽然多维数据具有多个维度,但是因为存储器的布局始终是一维的,因此多维数据与存储器上的存储顺序之间存在对应关系。多维数据通常被分配在连续的存储空间中,也即可以将多维数据进行一维展开,按顺序存储在存储器上。例如,在本披露实施例中,初始的输入特征图可以按照低维度(此处C/Ci为最低维度)优先方式,进行顺序存储;而为了优化卷积运算,在运算过程中可以调整输入特征图的存储顺序,如后面将详细描述的。相邻的维度是指多维数据的维度信息表示中相互紧挨着的维度,例如,W和Ci相邻,相邻的维度也可以称为连续的维度。
在智能处理器中,出于算力的需要和面积功耗开销的考虑,硬件的主要运算单元是向量的乘加运算器。在硬件设计中实现各类卷积算法的支持,本质上是最大化地提取算法中的乘加运算,并且通过数据通路实现在片上RAM(诸如图3中的NRAM、WRAM等)和运算器之间高效地交换乘加运算的输入和输出数据。
硬件在存储上是以一行一行(缓存行)进行存储的,读、写、计算操作在整行对齐时效率最高,因此为了充分利用带宽,适配运算器阵列的访存量等需求,通常需要将数据进行向量化对齐。人工智能芯片的设计通常以Ci维度为最低维度,也即上述NHWC摆放顺序,Ci维度上的数据是连续的。因此,向量化对齐要求需要Ci维度的大小对齐到指定数值,例如对齐值M,从而以该对齐值M为单位进行存取数,M也可以称为硬件单次最大运算量。基于不同的硬件设计,M可以有不同的数值,例如64bit、128bit、256bit、512bit等。通常,运算器阵列的输入端口大小也与M相关,例如在输入数据位宽对称的情形下,运算器阵列的输入端口大小通常为M的2倍,也即一次性处理对齐值M规模的输入特征图数据和权值数据。当输入特征图的Ci维度较大时,比较容易满足上述对齐要求。
当输入特征图的Ci维度较小时,例如小于一个缓存行的大小,则需将Ci维度补齐到一行数据(例如,512比特),即填充无效数据0。这种填充会造成大量的冗余计算,导致资源浪费,降低了运算的效率。
在本披露实施例中,提出了一种卷积运算方案,其可以根据输入特征图的最低存储维度(例如Ci)的大小,确定对应的卷积拆分方案,其中卷积拆分方案至少指示待运算数据的拆分单元的形状。一个拆分单元包含的数据量不超过硬件单次最大运算量。
在一些实施例中,一个拆分单元包含的数据量可以设置成硬件的一次性处理对齐值M,从而以拆分单元为单位进行运算处理,可以充分发挥硬件的算力,避免或减少无效计算。
在本披露的示例性描述中,不防假设M=512bit=64Byte,数据类型可以是Int8、Int16、Float16或Float32,并且输入特征图与卷积核的数据类型一致。由于数据类型至少需要1字节的宽度,并且运算处理的最小单位是一个数据,因此在下面的示例中均以字节为单位进行各种计算,例如M=64B,Ci=28B等等,其中有时候为了简洁起见省略单位。
当拆分单元的数据量等于M时,每个拆分单元的数据块形状为blockC*blockY*blockX,其可能存在多种情形,表1列出了其中的几种:
表1、数据块形状
从表1可以看出,有些数据块形状的X和Y维度尺寸相等(如深色行所示),这种形状可以简化后续的运算。因此在本披露实施例中,可以优选使用这种数据块形状对待运算数据进行拆分。
为了简便起见,将64B×1×1形状的拆分方案称为Forward64,将16B×2×2形状的拆分方案称为Forward16,将4B×4×4形状的拆分方案称为Forward4,将4B×4×4形状的应用于深度卷积运算的拆分方案称为Forward1,将4B×4×4形状的应用于反向深度卷积运算的拆分方案称为Update1,将4B×4×4形状的应用于叉乘卷积运算的拆分方案称为Update4。除了Forward64之外,这些拆分方案适合卷积计算中通道C比较小的场景,因此也可以统称为小卷积。在这些小卷积拆分方案中,一个拆分单元包括最低存储维度和至少一个其他存储维度的数据,并且一个拆分单元的总数据量不超过硬件单次最大运算量。
不同的卷积拆分方案可以适用于不同的运算场景,从而获得不同程度的性能优化。
在确定了拆分方案之后,接着可以按照所确定的卷积拆分方案,将输入特征图和卷积核拆分成多个对应的拆分单元并转换其维度存储顺序,以使得一个拆分单元内的数据连续存储为一个数据行,从而方便后续以拆分单元(数据行)为单位进行读取处理。
在一些实施例中,对于三维或者四维的神经元或者权值的数据,将其全部划分为大小为blockC*blockY*blockX(Uc×Uy×Ux)大小的数据块,每一个数据块连续存储在例如M=64B的一行上,由此在读取一行数据时,实际取出一个数据块的数据。
具体地,可以从以第一维度存储顺序存储的待运算数据中,以拆分单元为单位,按第一读取顺序读取一个或多个拆分单元,将读取的拆分单元存储到对应的存储电路上,其中每个拆分单元内的数据按照第二维度存储顺序存储,拆分单元之间按照第三维度存储顺序存储。
图6示出了根据本披露实施例的一种示例性数据存储顺序。
如图所示,610表示待运算的四维张量的存储方式,包含N个3维的子张量,N在最高维度,也即四维张量的第一维度存储顺序为NHWC。注意,本文中H和Y、W和X可互换使用。每一个子张量被划分为更小的数据块或拆分单元,每一维的数据块的个数分别为C/Y/X。
中间的图620表示每一个子张量的存储方式,每个数据块被存储为连续的64Byte,也即一行。当读取数据块的顺序不同时,行之间的顺序也会相应地变化。在图中示例中,按照先C、然后X、最后Y的方向读取数据块,也即第一读取顺序为YXC,则各行之间按照Y*X*C的顺序存储,也即第三维度存储顺序为YXC或HWC。在此示例中,第三维度存储顺序与第一维度存储顺序相同。可以理解,也可以使用其他读取顺序,从而导致第三维度存储顺序与第一维度存储顺序不同,此处不再一一列举。
右侧的图630表示每一行内的顺序,也即每个数据块内的数据顺序,其形状为blockC*blockY*blockX,此时第二维度存储顺序为CYX或CHW。
示例性分组运算
小卷积采用block形式,较传统卷积的优势在于Ci方向对齐只需要满足block在Ci方向对齐即可。在这一小通道的场景下,权值(co*Kh*kw*ci)普遍较小,Kh和Kw通常是个位数,co和ci差不多。在前面结合图5描述的计算装置/数据处理装置中,通常第二存储电路(例如图3的WRAM 332)的存储空间比第一存储电路(例如,图3的NRAM 331)要大。因此,为了充分利用片上的计算空间,在大部分小卷积方案中,例如Forward4、Forward1等,采用与正常卷积的神经元和权值存储位置互换的方案,也即将神经元存储在第二存储电路WRAM上,权值存储在第一存储电路NRAM上。
卷积的计算是每一个输入特征图都需要和每一个Co的卷积核进行乘加运算,从而输出Co个输出特征图。然而,并不是片上空间一定能同时存储下所有规模的卷积核和输入特征图,因此,对于硬件而言存在一系列重复加载输入特征数据或者权值数据的操作,如何平衡重复加载输入特征数据还是权值数据对计算的效率会有一定影响。在实际运算中,为了减少频繁的片外访存,存在对神经元和权值的拆分策略问题。在一些实施例中,根据参与运算的数据的规模特性,可以采取不同的拆分方式。
根据前面描述的卷积运算原理可知,Co维度(深度卷积为C维度)上的运算结果无需累加,因此不同Co上的运算分配在不同的运算电路上可以相对独立地进行。在小卷积场景中,通常单轮运算中卷积核的输出通道Co维度的尺寸不超过所调度的从处理电路的数量,因此单个Co的运算需要由一个或多个从处理电路来完成。更一般地,即使Co维度较大时,也可以通过拆分成多轮运算来实现,其中每轮运算处理的Co尺寸不超过所调度的从处理电路的数量。由此,在一个示例中,可以首先基于卷积核的输出通道Co维度尺寸和可调度的从处理电路数量Ns,确定完成卷积运算所需的运算轮次以及各轮次运算中处理的Co数量或相应的分组模式。
不管哪种分配方式,在单轮运算中,Co可能存在两种分配情况:多个从处理电路处理一个Co值,或者单个从处理电路处理一个或多个Co值。具体地,在处理Nco个输出通道的单个运算轮次中,每Rs个SL构成一个从处理电路组SLB,处理对应同一输出Co值的卷积核,Rs=[Ns/Nco],也即同一卷积核在同一SLB内的Rs个SL上复用,Rs表示卷积核在从处理电路之间的复用次数。与之相应地,输入特征图可以在各个从处理电路组SLB之间复用,Rn=[Ns/Rs],表示输入特征图在从处理电路之间的复用次数。
可选地或附加地,当每个从处理电路处理对应rn个Co值的卷积核,rn=[Nco/Ns],此时每个从处理电路处理的输入特征图可以重复用于rn个卷积核,rn表示输入特征图在单个从处理电路内的复用次数。可以考虑硬件缓冲空间限制等因素(例如图5中的第一缓冲电路和第二缓冲电路的大小)来确定单个从处理电路内可应用的最大卷积核复用次数rs和最大输入特征图复用次数rn。
考虑到硬件电路中的缓存大小限制和复用收益,在本披露一些实施例中暂时不考虑一个从处理电路在单轮运算中处理多个Co值的情况,而只考虑一个或多个从处理电路在单轮运算中只处理一个Co值的情况。
根据在单轮运算中处理同一Co值的从处理电路SL的个数,可以采用不同的分组模式。可以理解,优选对可调用的从处理电路SL平均分配,从而均衡算力,例如,每2个SL一组,从而16个SL可以同时处理8个Co值;或者每4个SL一组,从而16个SL可以同时处理4个Co值;等等。在前面结合图5描述的计算装置中,第二存储电路WRAM具有16块存储区域,分别分配给16个从处理电路SL。进一步地,每4块又可以组合成一个存储区块,分给对应的从处理电路组SLB。因此,在一些实施例中,对于图5所示的包括Ns=16个SL的计算装置,可以选择如下几种分组模式:Group1模式、Group4模式和Group16模式。本领域技术人员可以理解,根据Ns的数值不同,可以有不同的分组模式,每种分组模式均可以参考本文给出的以上三种代表性分组模式进行对应的处理。
在一些实施例中,上述分组模式可以统一表示为GroupN,代表当前轮次运算中调度的所有从处理电路SL分为N组,每个从处理电路组SLB处理同一Co值,不同从处理电路组SLB处理不同Co值。对于总计16个SL可调度的场合下,N可以取1,4,16,分别对应上面的Group1、Group4和Group16。
图7a-7d示出了根据本披露实施例的几种示例性分组模式。图7a示出了Group1模式,图7b示出了Group16模式,图7c示出了一种Group4模式,以及图7d示出了另一种Group4模式。
如图7a所示,Group1模式是指所有可调度的16个SL属于一个组,共同处理一个Co值,例如SL0~SL15属于组G0。从而,针对该一个输出通道的运算被分配在16个SL上。在这种模式下,可以优先考虑将该输出通道的卷积核720以广播方式传输到各个SL,输入特征图710则进行拆分分配给各个SL,从而提高访存效率。
在一个实施例中,可以将卷积核存储在图5的第一存储电路530上,以利用广播通道进行传输。输入特征图则可以按照输出特征图的XY方向划分,存储在第二存储电路540上,以分配给不同的SL。由此,所有SL共同计算一个Co的输出特征图。后面将结合附图详细描述输入特征图的划分和存储。
如图7b所示,Group16模式是指所有可调度的16个SL分成16个组,也即每组一个SL,每个SL处理一个不同的Co值。例如SL0属于组G0,SL1属于组G1,以此类推,直至SL15属于组G15。在这种模式下,同一块输入特征图730可以在16个SL之间重复使用,因此可以优先考虑将输入特征图730以广播方式传输到各个SL,而对应不同Co的卷积核740则分发给对应的SL。
在一个实施例中,可以将输入特征图复制16份,存储在第二存储电路上为16个从处理电路分配的16个存储区域上。卷积核则根据Co划分,一个SL对应一个Co,一次处理16个Co,存储在第一存储电路上,以单播方式分配给不同的SL。由此,所有SL针对同一输入特征图计算不同Co的输出特征图。
如图7c所示,Group4模式是指所有可调度的16个SL分成4个组,每组处理一个Co值。每个SL组(简称SLB)包括的SL数量等于Rs=Ns/4=4。例如SL0~SL3属于组G0,SL4~SL7属于组G1,SL8~SL11属于组G2,以及SL12~SL15属于组G3。这种模式介于Group1和Group16之间,因此可以将卷积核或输入特征图任一确定为多播数据,而将另一确定为分发数据。
在一个实施例中,可以将卷积核按照Co划分成4组,存储在图5的第一存储电路530上,以利用广播通道进行传输。输入特征图则可以按照输出特征图的XY方向划分为4份并复制4份,存储在第二存储电路540上,以分发给4个SLB。每个SLB获得相同的输入特征图,在SLB内再按照所划分的4份分发给其内的4个SL。由此,每个SLB中的所有SL共同计算一个Co的输出特征图,4个SLB则分别处理一个不同的Co。
如图7c所示,将卷积核分成4组,按照Co以间隔1为单位划分至各组。例如,当Co=12时,分成的4组Co分别为{0,4,8}、{1,5,9}、{2,6,10}和{3,7,11}。每一次发送各组的一个Co,例如第一次发送Co=0~3,一个Co对应一个SLB,在一个SLB内的4个SL共用相同权值;第二次发送Co=4~7,依次类推。由此,每轮运算完成后,各个SLB输出的运算结果的Co维度是连续的。
当采用Forward4这种小卷积拆分运算方案时,为了同时支持以上三种模式,可以统一将神经元存储在第二存储电路WRAM上,将权值存储在第一存储电路NRAM上。
输入特征图的示例性拆分
从前面的描述可以看出,当多个SL共同处理一个Co值时,需要在这多个SL之间对输入特征图进行拆分,例如Group1分组模式需要将输入特征图拆分成16份,而Group4分组模式需要将输入特征图拆分成4份。
为了保证拆分的输入特征图可以共用卷积核,可以根据输出特征图的Ho/Wo方向来划分,从而映射回到输入特征图的划分。在一些实施例中,在每个从处理电路组内包括的Rs个从处理电路SL之间可以按如下划分输入特征图:根据对应的输出特征图的尺寸,将输出特征图在XY维度(也即Ho/Wo维度)上平均划分为Rs个形状相同的输出特征块;以及根据计算每个输出特征块所需的输入特征图区域,将输入特征图在XY维度(也即Hi/Wi维度)上划分为Rs个输入特征块,以分配给Rs个从处理电路。可以理解,取决于卷积核尺寸和卷积步长,输出特征图上相邻的输出点所对应的输入特征图可能会存在重叠。
图8示出了根据本披露实施例的输入特征图的示例性拆分示意图。在此示例中,将输入特征图划分成16份分配在16个SL上,对应Group1模式。
图中810代表单个Co的输出特征图,其在XY方向上按照4×4方式划分成16个形状相同的输出特征块,分别分配给SL0~SL15。继而,由这16个输出特征块可以映射到输入特征图820上,获得分别计算这16个输出特征块所需的16个输入特征图区域,其同样是将输入特征图在XY方向上划分。这16个输入特征图区域可以相应地分配给16个从处理电路SL。
根据前文描述,会按照确定的卷积拆分方案,以拆分单元为单位对输入特征图进行拆分,因此,上述实施例中对输入特征图的分块要使得划分的每个输入特征图块在XY方向上是拆分单元XY方向维度的倍数,也即在XY方向上可以按照拆分单元对齐。例如,在选择4×4×4的卷积拆分方案时,每个输入特征图块按4×4对齐;而在选择16×2×2的卷积拆分方案时,每个输入特征图块按2×2对齐。
对于输出特征图不按拆分单元(例如4×4或2×2)对齐的情况,需要相应的在输入特征图上填补(例如补0),使得实际计算的输出XY是按拆分单元(例如4×4或2×2)对齐的并且输入XY也是按拆分单元(例如4×4或2×2)对齐的。
本领域技术人员可以理解,也可以在输出特征图的XY方向按照其他规则进行拆分,例如按照1×16方式拆分成16个形状相同的输出特征块,分别分配给SL0~SL15。本披露实施例在此方面没有限制。此外,还可以理解,虽然前面结合从处理电路之间的拆分进行描述,但是这种拆分方式也可以应用于其他场景下的拆分,例如单个从处理电路SL内的运算电路CU之间的拆分,本披露实施例在此方面没有限制。
单个从处理电路内的示例性卷积运算过程
在拆分好待运算数据并进行相应的摆放存储之后,就可以调度多个从处理电路对输入特征图和卷积核的对应数据行执行卷积运算,继而可以根据卷积拆分方案,对多个从处理电路返回的运算结果进行拼接处理,以得到输入特征图和卷积核的卷积运算的输出特征图。具体地,可以利用从处理电路中的多个运算电路CU以及各个缓冲电路(参见图5)来执行具体的卷积运算过程。取决于从处理电路内部缓冲电路的空间大小以及运算电路的算力限制,在每轮运算中通常需要执行多个运算周期来完成所需运算。
从前面描述可知,在针对常规3D卷积运算场景下,单个从处理电路内的所有运算电路计算对应同一输出通道Co的一个输出特征图或部分输出特征图。取决于从处理电路SL内第一缓冲电路和第二缓冲电路的缓冲空间大小、运算电路CU的处理能力(例如内部寄存器等),从处理电路可能无法一次计算完分配给其的输出特征图。因此,可以以运算电路单次运算能力(例如,单次计算Nop个输出点或部分和)为单位,划分输出特征块,每个输出特征块对应单个SL内所有可调度的NCU个运算电路的单次运算能力(NCU*Nop个输出点)。例如,以前文图5中每个SL包括4个CU为例,假设每个CU单次可以计算Nop=4个输出点或输出点的部分和,则单个SL单次可以计算4*4=16个输出点(或部分和)。因此,可以将输出特征图在XoYo维度上按照16个输出点对齐划分输出特征块,逐个计算各个输出特征块。可以理解,这16个输出点可以按照4*4形式,也可以按照1*16形式,本披露实施例在此方面没有限制。
在计算每个划分的输出特征块时,又可以进一步在这NCU个运算电路之间划分该输出特征块的输出点,以确定各个运算电路的处理对象。继而,可以根据输出点的划分,以拆分单元为滑动窗口,从第一缓冲电路中选取NCU个输入特征数据行分发给NCU个运算电路,从第二缓冲电路中选取对应的权值数据,广播给NCU个运算电路,从而通过复用权值数据来实现多个滑动窗口对应的输出点的并行计算。执行Nk次滑动选取,其中Nk根据卷积核在X和Y维度的尺寸和从处理电路在当前卷积拆分模式下单次运算所支持的最大卷积核尺寸中的较小值来确定。
在一些实施例中,当执行常规三维卷积运算时,可以按如下选取对应的权值数据:从第二缓冲电路中按照与在第一缓冲电路中对应的滑动方式选取1/Nop个权值行,将其复制Nop-1份扩展为一个扩展权值行,广播给从处理电路内的NCU个运算电路。
此时,每个运算电路可以在每次滑动选数计算时,针对来自第一缓冲电路的一个输入特征行和来自第二缓冲电路的一个扩展权值数据行,以1/Nop个数据行为单位进行对位乘累加,得到Nop个部分和;以及将Nk个滑动选数计算得到的Nk*Nop个部分和按照对应的卷积输出点进行累加,得到并输出Nop个运算结果。
从处理电路在输出其内运算电路的输出点时,可以根据输出点的划分方式,按特定顺序输出其内多个运算电路计算的输出点,以使得连续输出的输出点在X和/或Y维度上连续,方便后续处理。在一些实施例中,主处理电路可以进一步将从各个从处理电路返回的运算结果以第四维度存储顺序存储。根据情况,主处理电路还可以将运算结果转换为期望的维度存储顺序存储。
运算电路之间输出点的划分可以有多种方式,相应地滑动选数卷积过程以及输出点的输出顺序也有所不同。
以下结合Forward4方案来详细描述其整个数据拆分、存储、卷积滑动和计算输出过程。
Forward4方案的输入神经元、权值的形状描述
在Forward4中,拆分单元block的形状是4B×4×4。依据数据类型不同,block的形状略有差别。表2示出了Forward4在不同数据类型下的block形状。
表2、Forward4在不同数据类型下的数据块形状
图9示出了根据本披露一个实施例的Forward4方案的拆分和存储示意图。为了简便起见,图中示例假设数据类型为Int8。
图中910示出了原始待运算数据(其可以是神经元或权值),其存储顺序是HWC。图中还示出了原始待运算数据按拆分单元进行拆分的4个数据块911-914,每个数据块包括4×4×4=64个数据。
图中920示出了拆分后的数据摆放格式,以方便读取。可以看出,原始的数据块(例如911-914)被摆放成C维度上的一行(例如921-924)。在每行内,数据按照CHW的顺序存储,例如对于数据行921,先存储C=0的16个数据,接着存储C=1的16个,然后是C=2的16个,最后是C=3的16个。
具体而言,对于神经元来说,需要将数据从[1Hi Wi Ci]摆放为:
[1*Hi/4*Wi/4*Ci/4*(4×4×4)],这种七维张量的形状。
对于权值而言,需要将数据从[Co Kh Kw Ci]摆放为:
[Co*Kh/4*Kw/4*Ci/4*(4×4×4)],这种七维张量的形状。
从前文描述可知,Forward4方案可以支持多种分组模式。对于神经元而言,针对不同的分组模式和组内的HoWo拆分方式,上述block格式的七维形状最终拆分到第二存储电路的每个存储区域中还有细微差别。
假设原始输入神经元大小为:[1*hi*wi*ci]
Group1分组模式下,输入神经元摆数根据HoWo拆分方式而不同:
Ho*Wo 4*4拆分:16[hi/(4*4),wi/(4*4),ci/4*(4*4*4)]
Ho*Wo 1*16拆分:16[hi/(4),wi/(4*4*4),ci/4*(4*4*4)]
上述4*4拆分中,16表示16个从处理电路SL,末尾4*4*4(CHW)表示由三个维度拆分出来的CHW的BLOCK,hi,wi除的两次4中,第一次4表示将hi*wi拆成16份分发至16个SL,第二次4表示折叠hi、wi到ci方向。1*16拆分的含义同理。
Group4分组模式下,输入神经元摆数根据HoWo拆分方式而不同:
Ho*Wo 1*4拆分:4*4*[hi/(1*4),wi/(4*4),ci/4*(4*4*4)]
对于一个从处理电路SL:hi/(1*4),wi/(4*4),ci/4*(4*4*4)
上述表示中,前面第一个4表示4个SLB,神经元被复制了4份,第二个4表示神经元被拆分在一个SLB的4个SL上,末尾4*4*4表示由三个维度拆分出来的CHW的BLOCK。
Group16分组模式下,输入神经元无需拆分,其摆数如下:
16*[hi/4,wi/4,ci/4*(4*4*4)]
上述16表示神经元复制在16个SL上,末尾4*4*4表示由三个维度拆分出来的CHW的BLOCK,hi、wi都除4,表示折叠hi、wi到ci方向。
Forward4方案中运算电路之间的输出点拆分
当单个从处理电路SL内的多个运算电路CU共同处理一个Co值时,需要在这多个CU之间对输出点进行拆分。
图10示出了根据本披露一些实施例的Forward4方案中为每个运算电路分配间隔输出点的示意图。在这些实施例中,可以在NCU个运算电路之间将该输出特征块平均划分为Nop个形状相同的输出特征子块,每个输出特征子块包括NCU个输出点,分别划分给NCU个运算电路。例如,图中以每个SL包括4个CU,每个CU单次可以计算Nop=4个输出点或部分和为例,示出了输出特征块1010包括4*4个输出点,平均划分的每个输出特征子块1011~1014均包括2*2个输出点。在每个输出特征子块中,这2*2个输出点分配给4个运算电路。由此,每个运算电路计算4个输出特征子块中各一个输出点。图中用不同的背景示出分配给4个不同运算电路CU0~CU3的输出点。从图中可以看出,在每次计算时,每个运算电路计算输出特征图上在X和/或Y维度间隔的多个输出点。
基于上述输出点划分,当通过滑动选数执行卷积运算时,可以根据计算输出特征子块所需的数据,从每个输出特征子块的输出点位置相对应地,从第一缓冲电路中选取NCU个数据行进行运算。例如,在输入特征数据的首次选数时,可以根据计算首个输出特征子块1011内的4个输出点所需的4个输入特征块,从对应的输入特征块中选取4个输入数据行,分发给4个运算电路。可以理解,由于这4个输出点在X和/或Y方向是连续的,因此同时选取的4个输入数据行在X和/或Y方向的间隔或步长是1。
在进行权值数据选取时,可以从第二缓冲电路中选取对应的权值数据,广播给NCU个运算电路,从而通过复用权值数据来实现多个运算电路对应的输出点的并行计算。进一步地,在一些实施例中,为了充分发挥运算装置CU内部的算力(例如乘加运算器),例如单次计算Nop个输出点或部分和,可以在单个输入数据行内进行权值复用,从而同时计算Nop个输出点或部分和。
例如,在权值数据的选数时,可以只取1/Nop个权值行,将其复制Nop-1份以扩展成1个权值行,此扩展权值行中包括Nop个相同的1/Nop权值行。扩展权值行同样可以广播给NCU个运算电路,从而在多个运算电路之间复用权值的同时,在单个运算电路的Nop个输出点的计算之间以更小的粒度(例如1/Nop行)复用权值。
由此,通过每次对应地取NCU个输入特征数据行、取1/Nop个权值行复制扩展成1个权值行,每次可以计算NCU*Nop个输出点或部分和。当计算结果是部分和时,通过多次滑动,可以多次计算部分和,各次的部分和根据所属的输出点进行累加,可以得到最终结果。
根据输出点的划分方式,可以确定卷积运算的滑动次数和滑动步长。按照图10的划分方式,滑动次数Nk=ceil(Kx/2)*ceil(Ky/2),其中Kx、Ky分别是卷积核在X和Y维度的尺寸和从处理电路在当前卷积拆分模式下单次运算所支持的最大卷积核尺寸中的较小值,滑动步长=2。从处理电路单次运算所支持的最大卷积核尺寸例如至少由第一缓冲电路和第二缓冲电路的空间大小决定。可以理解,当卷积核超过最大卷积核尺寸时,需要在Kx和Ky方向按照该最大卷积核尺寸进行拆分。
Forward4方案中卷积滑动过程
图11示出了根据本披露一个实施例的Forward4方案中的单次运算过程示意图。在该示例中,第一缓冲电路1110的大小为3×3×64B,也即最多可以缓存9行数据,第二缓冲电路1120的大小为2×2×64B,也即最多可以缓存4行数据。为了与拆分单元一致,图中的缓冲电路内的存储同样以拆分单元为单位示出。
图中示出了第一次滑动取数的运算过程。按照与输出点的划分方式对应的方式,以拆分单元为滑动窗口,从第一缓冲电路中滑动选取NCU个输入特征行,分别发送给NCU个运算电路以供计算;从第二缓冲电路中按照与在第一缓冲电路中对应的滑动方式选取1/Nop个权值行,其中Nop是每个运算电路单次最大可计算卷积输出点数量,将其复制Nop-1份扩展为一个扩展权值行,广播给从处理电路内的NCU个运算电路。
具体地,在图5所示的计算装置中,NCU=4,Nop=4。在划分输出点时,按照每次计算时,每个运算电路计算X和Y维度上均间隔1的2×2个输出点进行划分。
如图所示,从第一缓冲电路1110中在起始位置以及X和/或Y方向各移动1的位置选取一个输入特征数据行,总计选取4个输入特征数据行,对应地发送给该从处理电路SL内的4个运算电路1140。从第二缓冲电路1120中在起始位置选取1/4个权值数据行,也即选取2×2大小的数据,将其复制3份扩展为一个扩展权值数据行1130,广播给该SL内的4个运算电路1140。
在每次计算时,每个运算电路针对来自第一缓冲电路的一个输入特征行和来自第二缓冲电路的一个扩展权值行,以1/Nop个数据行为单位进行对位乘累加,得到Nop个部分和。
如图所示,4个运算电路1140对分发的输入特征数据行和广播的扩展权值数据行执行对位乘累加运算,得到运算结果1150。1150中不同背景颜色的结果代表由不同运算电路1140得到的。可以看出,每次运算,一个CU会计算4个输出点的部分和,4个CU总计获得4×4的部分和。可以看出,每个CU计算的输出点在输出特征图的XoYo维度上并没有相邻。
接着,在第一缓冲电路和第二缓冲电路中同步滑动取数,进行下一计算。执行Nk次滑动选数,其中Nk=ceil(Kx/2)*ceil(Ky/2),Kx和Ky分别是卷积核在X和Y维度的尺寸或从处理电路在当前卷积拆分模式下单次运算所支持的最大卷积核尺寸中的较小值。相应地,运算电路将Nk次滑动计算中计算得到的Nk*Nop个部分和按照对应的卷积输出点进行累加,得到Nop个运算结果。
在一些实施例中,在Forward4模式下,从处理电路单次运算所支持的最大卷积核尺寸为8×8。
图12示出了根据本披露一个实施例的Forward4方案中的滑动卷积过程示意图。该示例以9×9的输入特征图,5×5的卷积核为例,卷积步长为1,则输出特征图大小为5×5。输入特征图需要对齐到12×12,分成9块4×4×4(C×H×W)大小的块,存储在第一缓冲电路中,图中示出为1210,其中省去了C维度。卷积核5×5则需要对齐到8×8,对齐部分补0,存储在第二缓冲电路中,图中示出为1220,同样省去了C维度。每次计算时,选取卷积核中2×2大小的块,复制4次,刚好对应上输入特征图的4×4的块,复制操作可以由硬件实现。
每次滑动时的输入特征图和卷积核在第一缓冲电路和第二缓冲电路中的选取范围如图12所示,共9幅图,代表共滑动9次。图中方块1210代表第一缓冲电路中的输入特征图,四个虚线框表示选择发给四个CU的区域;方块1220代表第二缓冲电路中的卷积核,虚线框代表选出的1/4行,其被复制3份扩展成一行后广播给4个CU。滑动次数Nk=ceil(Kx/2)*ceil(Ky/2)=9。
在每次计算时,每个CU针对来自第一缓冲电路的一个输入特征数据行和来自第二缓冲电路的一个扩展权值数据行,以1/4个数据行为单位进行对位乘累加,得到4个部分和;以及在当前运算轮次中将Nk次计算中得到的对应同一卷积输出点的Nk个部分和进行累加,得到并输出4个运算结果。
具体地,对于图12中的每幅图,CU的个数Ncu=4,每个CU单次计算Nop=4个输出点或部分和,该部分和是1/4个数据行的对位乘累加结果,也即每个输出点为一个4×2×2(Ci×Y×X)的标准卷积。滑动Nk=ceil(Kx/2)*ceil(Ky/2)=9次之后,Y×X方向完成累加,最终1个SL中得到完整的4×4(Y×X)的输出(如图10b所示)。这种模式下单次计算仅支持卷积核不大于8×8的情形,对于更大的卷积核,需要在Kx和Ky方向按照8×8进行拆分,可以按照上面同样的原理进行拆分运算。
可以理解,当Ci>4时,需要在Ci方向遍历,同时切换输入和权值,直到计算出完整的输出。当每个CU计算的Xo/Yo大于4时,需要沿着Xo/Yo方向滑动,读取不同的输入神经元和权值。本领域技术人员根据前述描述可以类似地推导出其计算过程,此处不再赘述。
Forward4方案中的输出形状描述
从前面的输出点划分方式和滑动卷积过程可以看出,滑动模式输出的结果并不是传统卷积输出数据的正常排列顺序。因此,在输出过程中,各个从处理电路SL可以将其内运算电路CU的运算结果转换为指定的格式,例如Nco×Uy×Ux的格式。在一些实施例中,每个从处理电路可以每次输出其内部分运算电路的部分运算结果,该部分运算结果在输出特征图的X和/或Y维度上连续。主处理电路可以进一步将从各个从处理电路返回的运算结果以第四维度存储顺序存储。根据情况,主处理电路还可以将运算结果转换为期望的维度存储顺序存储。
当分组模式和/或单个SLB内输入特征图的拆分方式(也即根据输出特征图的HoWo拆分方式)不同时,输出的数据格式略有不同。
图13示出了根据本披露一个实施例Forward4方案的输出数据格式示意图。在此实施例中,分组模式为Group1,单个SLB(包括16个SL)内输入特征图的拆分方式按照Ho×Wo=1×16拆分。
图中1310示出了1个SL的原始输出。从图中可以看出,每个SL每次输出1×1×4(Co×Y×X)的区域,也即每次输出其内部分运算电路的部分运算结果,例如2个CU中各2个运算结果(参见图10),这一部分运算结果在输出特征图的X和/或Y维度上连续,例如为同一行(图13所示)或同一列。连续4次返回1×4×4(Co×Y×X)的区域,也即4个CU中各个的4个运算结果。不同的SL输出同一Co的输出特征图的不同区域。当输出所有Co的4×4区域之后,继续输出会切换不同的输出点。
图中1320示出了16个SL的存出数据结构。如图所示,最终输出数据在写入存储电路(例如第一存储电路)后变为Yo*Xo*Co*4*16*4的格式,其中的Yo和Xo为每一个SL划分到的输出特征图的块的个数,16为在16个SL上的划分。根据需要,在一些实现中,可以再次进行摆数操作以转化为其他期望的数据格式。
如前面所提到,分组模式和/或单个SLB内多个SL之间输入特征图的拆分方式不同时,输出的数据格式还有细微的差别。假设原始输出大小为:
1*ho*wo*co
那么,Group1在Ho*Wo按照4*4拆分时的输出数据形状为:
ho/(4*4)*wo/(4*4)*co/group*(4*16*4)
上式中,(4*16*4)是forward4的基本输出块,方向分别对应h*c*w,其中16表示16个SL上的相同co的ho、wo的划分;ho,wo除了两次4,其中,第一个4表示在SL存储数据时进行4×4拆分,第二个4表示h、w方向的数据块折叠。Group1模式下,上面的group=1。
Group1在Ho*Wo按照1*16拆分时的输出数据形状为:
ho/(4)*wo/(4*16)*co/group*(4*16*4)
上式中,(4*16*4)是forward4的基本输出块,方向分别对应h*c*w,其中16表示16个SL上的相同co的ho、wo的划分;Group1模式下,上面的group=1。该形状也即图19示意图的形状。
由此可见,Group1的情况下,16个SL平分一个输出特征图的Yo*Xo维度。输出时行内维度SL中的数据,与16个SL在Yo*Xo方向上平分输出神经元的方式一一对应。此场景适合输入神经元Y*X方向数值大,Co数值小。
Group4输出数据形状为:
ho/(2*4)*wo/(2*4)*co/group*(4*16*4)
上式中,(4*16*4)含义同上,不同的是16表示4个co在4个SL上的wo输出划分。Group4模式下,上面的group=4。
Group16输出数据形状为:
ho/4*wo/4*co/group*(4*16*4)
上述中,(4*16*4)含义同上,不同的是16表示16个co在16个SL上的输出划分。Group16模式下,上面的group=16。
由于Group在H*W方向上还有不同的拆分类别,上述中4*16*4的16在具体的拆分上还有差异。由于Forwrd4是按照4B*4*4的块为计算单元,那么不可避免在计算时就存在对齐限制。根据不同的Group模式,相同Group模式的不同H*W的拆分方式,最终在计算时的对齐限制也不一样。在对齐的计算上,可以首先根据输出特征图的拆分方式确定ho*wo的对齐限制,再由ho*wo反推回hi*wi,由于输入神经元需要摆成拆分单元块的形式,从而还需要再对齐一次。上述对齐限制可以汇总如下表3:
表3、对齐限制
综上,在输出时,硬件可以自动按照行内4*16*4(Y*SL*X)维度,行间Y*X*C维度的方式输出神经元。对于更大的卷积核同理。
Forward4方案中的偏置形状描述
偏置Bias是卷积计算结束之后的偏置,偏置的原始格式为:[1 1 co]。
由于Forward4输出的数据格式为ho*wo*co/group*(4*16*4)格式,因此如果需要在片上在Forward4直接输出的数据上加偏置,则需要改变偏置的基本形状。偏置在片上空间的摆放格式和Group分组模式有关。具体而言,各种分组模式下偏置的摆数如下:
Group1分组模式下,偏置的摆数:[1 1 co*64]
其中,64表示将单个偏置复制64次且连续摆放。
Group4分组模式下,偏置的摆数:[1 1 co*16]
其中,16表示将单个偏置复制16次且连续摆放。
Group16分组模式下,偏置的摆数:[1 1 co*4]
其中,4表示将单个偏置复制4次且连续摆放。
数据搬运过程
从前面对小卷积运算方案的描述可知,输入神经元和权值都需要进行拆分和存储维度变换,输出神经元也需要进行一定的维度变换。当基于例如图3b的多核计算装置的硬件结构,出于硬件IO效率的考虑,输入数据需要先从全局内存中读取数据,加载数据之后存放在共享存储SRAM中。如前文所提到的,Forward4需要拆分神经元,考虑到对齐因素,其拆分的特点决定了Forward4在处理输入特征图比较大、通道数比较小的情况下更具有计算优势。因此,在涉及Forward4的硬件设计时,可以将较大的神经元存放在WRAM上,将相对较小的权值存放在NRAM中。同时,由于对权值和神经元数据需要摆放成前文描述的block的形式,因此,存放在WRAM上的神经元也需要经过一次NRAM,进行张量数据的形状变换。
图14示出了根据本披露实施例的整体的数据搬运过程。
如图所示,权值从片外存储,例如DDR,经由全局直接内存访问模块(GDMA)读取到SRAM中。在SRAM上完成HW面对齐和填补pad操作。在数据从SRAM到NRAM的过程中利用分块指令(Tiling),此时既能完成数据搬运过程也能完成数据维度变换、对齐的过程。
神经元的搬运过程与权值类似,只不过在通过分块指令搬运到NRAM之后,还需要搬运到WRAM上。由于神经元在计算时,随着卷积核的滑动,存在大部分的数据有重叠,这大大地降低了数据搬运的效率。为了解决这一问题,本披露一些实施例中采用img2col指令进行分发数据,具体见后文详述。
输出数据可以回存到NRAM上,并且同样可以通过分块指令完成数据维度变化并搬运到SRAM上。接着,可以经由GDMA回存到片外存储DDR中。
分块指令的示例性原理
数据维度变化和摆数,是指对特定形状的张量数据摆放成所需要的特定形状的过程。数据搬运是指数据在不同的内存空间进行的读写操作。如前文所述,Forward4卷积运算方案要求用于卷积运算的神经元、权值都按照特定block模式摆放、对齐好。此外,输出数据也是按照Forward4特定输出格式输出的数据,这就要求在计算之前将张量数据按block形式摆放好,同时还要求计算结束之后按照要求摆回正常张量形状。
在本披露实施例中,在输入的神经元、权值、偏置数据从SRAM搬运到NRAM的过程,以及输出数据从NRAM搬运到SRAM的过程中,均利用分块指令(Trans Tiling)来完成这一搬运操作。在这一搬运的过程中,需要完成数据的基本搬运过程,还需要完成数据的维度变化和摆放过程,从而达到计算的需求。
Deform指令系列为IO数据通路提供了数据形状变换、数据类型转换的能力,主要包括TRANS(转置)、MOVE(搬运)、ROTATE(旋转)等功能。这一指令系列中实现转置功能的模式命名为Trans Tiling,主要是给小卷积的各种形状变换提供性能支持。Deform将一个3维数据块分成了内外两层,内层有三个维度(对应指令中的参数n0-2),最低维的单位是字节,次低维和最高维是无单位的,代表上一层的个数。外层也有三个维度(对应指令中的参数n3-n5),均代表对应内层维度的倍数。
在实施小卷积拆分方案时,需要将以第一维度存储顺序(例如HWC)存储的输入数据以拆分单元为单位进行拆分、维度转换和存储,各个拆分单元内按照第二维度存储顺序(例如CHW)存储,拆分单元之间按照第三维度存储顺序(例如HWC)存储。
图15示出了根据本披露实施例的Trans Tiling的示意性概念图。
图中左图示出了变形前的输入数据。可以看出,三维的输入数据使用六个维度来描述,n0和n3对应原始三维数据的第一维(例如最低维),n1和n4对应原始三维数据的第二维(例如次低维),n2和n5对应数据块的第三维度(例如最高维)。在图中示例中,输入数据的内层对应拆分单元,以Forward4方案为例,输入数据的内层数据块为4B×4×4的数据块,其中n0=4B,n1=n2=4。
图中右图示出了变形后的输出数据。三维的输出数据同样使用六个维度来描述。此时,输出数据的内层对应变形后的拆分单元,在Forward方案中,输出数据的内层数据块为64B×1×1的数据块,其中n0=64B,n1=n2=1。
此外,转置分块(Trans Tiling)还具有行内变换(Inline shuffle)功能,包括基于前配表(Pretable)的Tiling前行内变换,和基于后配表(Posttable)的Tiling后行内变换的功能。前配表是对Tiling输入的n0的数据进行重排的功能,后配表是对Tiling输出的n0的数据进行重排的功能。在不考虑表的标志位的情况下,前配表和后配表本质是一个表示64个字节数据位置的数组。
图16示出了前后配表的示意图。
如图所示,前后配表分别表示输入或输出的n0维度的一行数据的重排位置,其包括64B。每字节的8比特位分别包括6比特的Index位,记录次数据位存放的是原数据中0~63位字节数据的第几位字节的数据;1比特的zero_en位,表示是否置0,如该比特为1,则强制写0,[5,0]位无效;以及1比特的mask位,表示此位数据是否有效。
通过前后配表,可以在需要的时候对分块指令的输入数据的n0的数据进行重排,和/或对分块指令的输出数据的n0的数据进行重排。
表4示出了分块指令的各个参数的含义。假设需要进行分块的数据的位宽为dwidth,单位为B(字节),分块指令一次原子操作的数据量大小称为分块位宽T,单位为B(字节)。分块指令的参数中,需要用n0~n5,s1~s5共11个参数来描述内层数据和外层数据的张量形状,其中n0~n2,s1~s2是描述内层的参数,n3~n5,s3~s5是描述外层的参数。
表4、分块指令的参数含义
对于分块指令执行前后的张量描述,输入张量、输入张量各需要一套参数,分别用in0~in5,is1~is5,on0~on5,os1~os5共计22个参数进行描述。分块指令可以支持多种分块位宽T,例如1B、2B、4B、6B、8B、16B、32B等等,基于不同的分块任务,可以设置相应的值。因此,分块指令中还包括分块位宽T这一参数。
分块指令在使用时,还存在一些基本的使用限制或约束条件,这些限制例如包括:in0,in1,in2,on0,on1,on2<=64;n0性能上要求64B对齐;in0=on1*on2*T,on0=in1*in2*T;in3*in4*in5=on3*on4*on5;T<=32B;前后配表=64B。
此外,分块指令不能原位操作,也即需要两块存储区域。因此,在本披露实施例中,提供一种数据处理装置,包括控制电路、第一存储电路和第二存储电路。第一存储电路用于存储执行分块指令前的数据;第二存储电路用于存储执行分块指令后的数据。控制电路用于配置并执行分块指令。在一些实施例中,数据处理装置例如可以是图3b示出的多核计算装置中的处理器簇,控制电路例如是处理器簇内的处理器核,第一存储电路例如是处理器簇内的共享存储SRAM,而第二存储电路例如是处理器核内的NRAM。当针对不同数据(输入神经元、权值、输出神经元等)执行分块指令时,其需要实现的维度变化和搬运过程也不同,需要设计不同的分块指令配参方案。
神经元的分块指令通用方案
根据前文针对诸如Forward4一类的小卷积运算方案的描述可知,对于输入神经元而言,分块指令的作用在于在输入神经元从例如SRAM搬运到NRAM的过程中,将按第一维度存储顺序(例如HWC)存储的输入神经元以拆分单元为单位进行拆分、维度转换和存储,各个拆分单元内按照第二维度存储顺序(例如CHW)存储,拆分单元之间按照第三维度存储顺序(例如HWC)存储。拆分单元形状为CHW=UCi×UH×UW。分块指令要求的对齐值M是UCi的倍数。
具体地,对于Forward4方案中的神经元数据而言,需要将数据从[1*hi*wi*ci]摆放为:
[1*hi/4*wi/4*ci/4*(4*4*4)]
图17示出了根据本披露实施例的对神经元数据执行分块指令的示意图。
图中左图示出了分块处理前的神经元数据(也即分块指令的输入张量)。可以看出,三维的神经元数据[hi*wi*ci](此处省略N维度)被分成内外两层,各使用三个维度来描述。内层数据块1701的in0维度根据分块指令的限制,对齐到第一对齐值,例如M=64B;in1维度则可以根据拆分单元的形状设置为UW,此示例中为4;in2维度也可以根据拆分单元的形状设置为UH,此示例中为4。确定了内层数据块之后,外层三个维度in3、in4和in5的大小也可以相应地确定,其大小分别等于对应维度上含有该内层数据块的个数。
图中右图示出了分块处理后的神经元数据(也即分块指令的输出张量)。可以看出,此时的神经元数据形状变为[hi/4*wi/4*(ci*16)],其同样被分成内外两层,各使用三个维度来描述。由于需要对神经元数据按拆分单元进行拆分,因此结合分块指令的约束条件,分块位宽T可以设置为UCi,也即一次原子操作的数据量为UCi,从而便于以拆分单元为单位调整存储顺序。此时,内层数据块1702可以对应于输入张量的内层数据块1701,但是形状由M×UH×UW变为(M*UH*UW)×1×1,图中示为16个细长条构成的大长条。内层数据块的on0维度根据分块指令的限制条件,设置为in1*in2*T=M,也即64B;on1维度设置为in0/T=M/T,此示例中为16,on2维度设置为in0/T/on1=1。确定了内层数据块之后,外层三个维度on3、on4和on5的大小也可以相应地确定,其大小分别等于对应维度上含有输出张量的内层数据块的个数。
从上面的分块指令执行过程可以看出,虽然可以将输入神经元从[1*hi*wi*ci]摆放为[1*hi/4*wi/4*ci/4*(4*4*4)]的形式,但是最低维的4*4*4的拆分单元块依然还是HWC的顺序,还不是CHW的顺序。为了实现最低维拆分单元块内是CHW的顺序,需要使用前文描述的后配表。
在一些实施例中,数据处理装置中的控制电路可以进一步用于按如下配置分块指令:设置分块指令的后配表,以将分块指令的输出张量的内层最低维数据按照后配表的指示进行重排。具体地,控制电路可以进一步用于按如下设置后配表:将按照第一维度存储顺序(例如HWC)排列的输出张量的内层最低维度on0数据转换成按照第二维度存储顺序(例如CHW)排列。
此时的后配表仅是获取输出张量的on0,也即输入的in1*in2*T=M=64B数据量的写入顺序。这个64B数据的写入顺序和数据的数据位宽dwidth有关。在一些实施例中,可以按照如下表5的伪代码所示的逻辑来配置后配表。
表5、神经元分块指令后配表制表伪代码
在实际运算中,神经元的形状是动态变化的,也即ci的大小是任意的。由于分块指令要求内层数据块的最低维n0对齐M=64B,因此需要将整个分块处理过程分成两段来执行。第一段为64B对齐的整数段,第二部分为未达到64B的余数段。
由此,在一些实施例中,数据处理装置中的控制电路可以将输入数据(例如神经元)按照输入通道Ci维度分成整数段和余数段,其中整数段的Ci维度大小对齐到对齐值M,余数段的Ci维度大小则小于M。继而,可以针对整数段配置并执行第一分块指令,以及针对余数段配置并执行第二分块指令。
可以理解,取决于不同的ci值,可能只存在整数段、或者只存在余数段、或者整数段和余数段同时存在。假设ci中对齐了64B的整数段长度大小是ci_full,未对齐64B的余数段是ci_rem。比如,INT8类型的神经元1*256*256*96,ci=96,那么ci_full=64,ci_rem=32。
表6示出了神经元数据在执行分块指令前后的形状变化。
表6、神经元数据分块处理前后的形状变化
注意,表6中的形状假设是已经按照前文表3中关于Forward4不同Group模式和不同H*W拆分方式下的对齐限制中的要求对齐之后的参数。
对于整数段部分,可以参考前文结合图17描述的内容配置第一分块指令。
在一个实施例中,可以按如下配置第一分块指令的输入张量的参数:将第一分块指令中的输入张量的内层最低维大小in0设置为M,内层次低维大小in1设置为UW,内层最高维大小in2设置为UH;以及根据输入数据的整数段各维度大小,设置第一分块指令中的输入张量的三个外层维度的大小值in3、in4和in5,其中三个外层维度的大小值分别表示对应维度上含有输入张量的内层数据块的个数。
附加地,在一个实施例中,可以按如下配置第一分块指令的输出张量的参数:将第一分块指令中的输出张量的内层最低维大小on0设置为in1*in2*T,内层次低维大小on1设置为M/T,内层最高维大小on2设置为1;以及根据输入数据的整数段各维度大小,设置第一分块指令中的输出张量的三个外层维度的大小值on3、on4和on5,其中三个外层维度的大小值分别表示对应维度上含有输出张量的内层数据块的个数。
除了维度参数之外,还需要设置维度步长。在一些实施例中,可以基于所设置的输入张量和输出张量各自六个维度的维度大小以及处理前的输入数据各维度大小,设置除了内层最低维之外其余五个维度上相邻数据点在存储空间上的步长。在一些实施例中,可以根据分块指令的约束条件,以及拆分单元在处理前后的形状变换,将分块位宽T设置为UCi。
在一个示例中,当针对Forward4方案,也即拆分单元为UCi×UH×UW=4B×4×4,M=64B时,可以按如下表7配置针对整数段的第一分块指令。
表7、神经元整数段分块指令配参方案
其中ci、hi、wi分别表示输入数据的Ci、H和W维度的数据个数,dwidth表示数据位宽,ci_full表示整数段的Ci维度的数据个数,B表示字节,T表示分块位宽,is1~is5表示输入张量的五个维度步长,os1~os5表示输出张量的五个维度步长。
对于余数段部分,可以基于整数段部分稍作调整来配置第二分块指令。
在一个实施例中,可以按如下配置第二分块指令:根据整数段的Ci维度大小,设置针对余数段执行的第二分块指令的输入张量偏置和输出张量偏置,其中输入张量偏置表示处理前的余数段相对于输入数据的起始存储地址的偏移,输出张量偏置表示处理后的余数段相对于输出数据的起始存储地址的偏移。通过设置第二分块指令的输入张量偏置和输出张量偏置,可以在考虑到整数段部分的内存存储空间后,调整第二分块指令的输入张量地址和输出张量地址。
在一个实施例中,可以按如下配置第二分块指令的输入张量的参数:将第二分块指令中的输入张量的内层最低维大小in0设置为R,R是余数段的Ci维度大小,将内层次低维大小in1设置为UW,将内层最高维大小in2设置为UH;以及根据输入数据的余数段各维度大小,设置第二分块指令中的输入张量的三个外层维度的大小值in3、in4和in5,其中三个外层维度的大小值分别表示对应维度上含有该输入张量的内层数据块的个数。
附加地,在一个实施例中,可以按如下配置第二分块指令的输出张量的参数:将第二分块指令中的输出张量的内层最低维大小on0设置为in1*in2*T,将内层次低维大小on1设置为R/T,将内层最高维大小on2设置为1;以及根据输入数据的余数段各维度大小,设置第二分块指令中的输出张量的三个外层维度的大小值on3、on4和on5,其中三个外层维度的大小值分别表示对应维度上含有该输出张量的内层数据块的个数。
类似地,控制电路可以基于所设置的输入张量和输出张量各自六个维度的维度大小以及处理前的输入数据各维度大小,设置除了内层最低维之外其余五个维度上相邻数据点在存储空间上的步长。
在一个示例中,当针对Forward4方案,也即拆分单元为UCi×UH×UW=4B×4×4,M=64B时,可以按如下表8配置针对余数段的第二分块指令。
表8、神经元余数段分块指令配参方案
其中ci、hi、wi分别表示输入数据的Ci、H和W维度的数据个数,dwidth表示数据位宽,ci_rem表示所述余数段的Ci维度的数据个数,B表示字节,T表示分块位宽,is1~is5表示输入张量的五个维度步长,os1~os5表示输出张量的五个维度步长。
由此,本披露实施例提供了一种针对神经元数据的分块处理方案。当神经元数据的形状为任意时,可以通过两段式分块处理,来实现将任意形状的神经元数据从[1*hi*wi*ci]摆放为[1*hi/4*wi/4*ci/4*(4*4*4)]的形式。
权值的分块指令通用方案
权值数据的分块处理和神经元数据的分块处理是类似的。具体地,对于Forward4方案中的权值数据而言,需要将数据从[co*kh*hw*ci]摆放为:
[co*kh/4*kw/4*ci/4*(4*4*4)]
与神经元数据不同的是,权值数据多了一个co维度。由于co维度和kh维度是连续的,因此可以将co维度并入kh维度中。
表9示出了权值数据在执行分块指令前后的形状变化。
表9、权值数据分块处理前后的形状变化
注意,表9中的形状假设是已经按照前文表3中关于Forward4不同Group模式和不同H*W拆分方式下的对齐限制中的要求对齐之后的参数。
通过将co维度并入kh维度,针对权值数据仍然可以使用前文针对神经元数据描述的方案进行分块处理。具体地,在一些实施例中,可以针对任意规模的权值数据采用两段式处理,也即整数段分块处理和余数段分块处理。详细的分块指令配置方案可以参考前文描述。
在一个示例中,当针对Forward4方案,也即拆分单元为UCi×UH×UW=4B×4×4,M=64B时,可以按如下表10配置针对权值数据的整数段的第一分块指令。
表10、权值整数段分块指令配参方案
可选地或附加地,在一个示例中,当针对Forward4方案,也即拆分单元为UCi×UH×UW=4B×4×4,M=64B时,可以按如下表11配置针对权值数据的余数段的第二分块指令。
表11、权值余数段分块指令配参方案
本披露实施例还提供了利用前述数据处理装置执行分块指令的数据处理方法。本领域技术人员可以理解,执行分块指令的方法步骤与前面结合附图描述的计算装置的各个特征相对应,因此前面描述的特征同样适用于方法步骤,此处不再重复。
本披露实施例还提供了一种芯片,其可以包括前面结合附图描述的任一实施例的数据处理装置。进一步地,本披露还提供了一种板卡,该板卡可以包括前述芯片。
根据不同的应用场景,本披露的电子设备或装置可以包括服务器、云端服务器、服务器计算簇、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、PC设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。本披露的电子设备或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。进一步,本披露的电子设备或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据本披露方案的算力高的电子设备或装置可以应用于云端设备(例如云端服务器),而功耗小的电子设备或装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
需要说明的是,为了简明的目的,本披露将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本披露的方案并不受所描述的动作的顺序限制。因此,依据本披露的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本披露所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本披露某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本披露对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本披露某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
在具体实现方面,基于本披露的公开和教导,本领域技术人员可以理解本披露所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行拆分,而实际实现时也可以有另外的拆分方式。又例如,可以将多个单元或组件结合或者集成到另一个系统,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
在本披露中,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元示出的部件可以是或者也可以不是物理单元。前述部件或单元可以位于同一位置或者分布到多个网络单元上。另外,根据实际的需要,可以选择其中的部分或者全部单元来实现本披露实施例所述方案的目的。另外,在一些场景中,本披露实施例中的多个单元可以集成于一个单元中或者各个单元物理上单独存在。
在另外一些实现场景中,上述集成的单元也可以采用硬件的形式实现,即为具体的硬件电路,其可以包括数字电路和/或模拟电路等。电路的硬件结构的物理实现可以包括但不限于物理器件,而物理器件可以包括但不限于晶体管或忆阻器等器件。鉴于此,本文所述的各类装置(例如计算装置或其他处理装置)可以通过适当的硬件处理器来实现,例如中央处理器、GPU、FPGA、DSP和ASIC等。进一步,前述的所述存储单元或存储装置可以是任意适当的存储介质(包括磁存储介质或磁光存储介质等),其例如可以是可变电阻式存储器(Resistive Random Access Memory,RRAM)、动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)、静态随机存取存储器(Static Random Access Memory,SRAM)、增强动态随机存取存储器(Enhanced Dynamic Random Access Memory,EDRAM)、高带宽存储器(High Bandwidth Memory,HBM)、混合存储器立方体(Hybrid Memory Cube,HMC)、ROM和RAM等。
以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本披露的方法及其核心思想;同时,对于本领域的一般技术人员,依据本披露的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本披露的限制。
Claims (20)
1.一种数据处理装置,包括控制电路、第一存储电路和第二存储电路,其中:
所述第一存储电路用于存储处理前的数据;
所述第二存储电路用于存储处理后的数据;以及
所述控制电路用于配置并执行分块指令,以将按照第一维度存储顺序存储在第一存储电路上的输入数据以拆分单元为单位进行拆分并存储为第二存储电路上的输出数据,其中在所述第二存储电路上,各个拆分单元内按照第二维度存储顺序存储,拆分单元之间按照第三维度存储顺序存储。
2.根据权利要求1所述的数据处理装置,其中所述控制电路进一步用于按如下配置分块指令:
设置分块指令的后配表,以将分块指令的输出张量的内层最低维数据按照所述后配表的指示进行重排。
3.根据权利要求2所述的数据处理装置,其中所述控制电路进一步用于按如下设置所述后配表:
将按照所述第一维度存储顺序排列的所述输出张量的内层最低维度数据转换成按照所述第二维度存储顺序排列。
4.根据权利要求2-3任一所述的数据处理装置,其中所述控制电路进一步用于:
将所述输入数据按照输入通道Ci维度分成整数段和余数段,其中所述整数段的Ci维度大小对齐到对齐值M,所述余数段的Ci维度大小小于所述M;
针对所述整数段配置并执行第一分块指令;以及
针对所述余数段配置并执行第二分块指令。
5.根据权利要求4所述的数据处理装置,其中所述拆分单元的形状为CHW=UCi×UH×UW,其中C表示输入通道维度,H表示高度维度,W表示宽度维度,其中M是UCi的倍数。
6.根据权利要求5所述的数据处理装置,其中,当存在所述整数段时,所述控制电路进一步用于按如下对所述整数段配置第一分块指令:
将所述第一分块指令中的输入张量的内层最低维大小in0设置为M,内层次低维大小in1设置为UW,内层最高维大小in2设置为UH;以及
根据所述输入数据的所述整数段各维度大小,设置所述第一分块指令中的输入张量的三个外层维度的大小值in3、in4和in5,其中所述三个外层维度的大小值分别表示对应维度上含有所述内层数据块的个数。
7.根据权利要求6所述的数据处理装置,其中所述控制电路进一步用于按如下对所述整数段配置第一分块指令:
将所述第一分块指令中的输出张量的内层最低维大小on0设置为in1*in2*T,内层次低维大小on1设置为M/T,内层最高维大小on2设置为1,其中T为所述分块指令的分块位宽,其表示所述分块指令一次原子操作的数据量;以及
根据所述输入数据的所述整数段各维度大小,设置所述第一分块指令中的输出张量的三个外层维度的大小值on3、on4和on5,其中所述三个外层维度的大小值分别表示对应维度上含有所述内层数据块的个数。
8.根据权利要求7所述的计算装置,其中所述控制电路进一步用于按如下对所述整数段配置第一分块指令:
基于所设置的输入张量和输出张量各自六个维度的维度大小以及处理前的输入数据各维度大小,设置除了内层最低维之外其余五个维度上相邻数据点在存储空间上的步长。
9.根据权利要求8所述的计算装置,其中所述控制电路进一步用于按如下对所述整数段配置第一分块指令:
根据分块指令的约束条件以及所述拆分单元在处理前后的形状变换,将所述分块位宽T设置为UCi。
10.根据权利要求4-9任一所述的数据处理装置,其中,当存在所述余数段时,所述控制电路进一步用于按如下配置所述第二分块指令:
根据所述整数段的Ci维度大小,设置针对所述余数段执行的第二分块指令的输入张量偏置和输出张量偏置,其中所述输入张量偏置表示处理前的所述余数段相对于所述输入数据的起始存储地址的偏移,所述输出张量偏置表示处理后的所述余数段相对于所述输出数据的起始存储地址的偏移。
11.根据权利要求10所述的计算装置,其中所述控制电路进一步用于按如下对所述余数段配置第二分块指令:
将所述第二分块指令中的输入张量的内层最低维大小in0设置为R,R是所述余数段的Ci维度大小,将内层次低维大小in1设置为UW,将内层最高维大小in2设置为UH;以及
根据所述输入数据的所述余数段各维度大小,设置所述第二分块指令中的输入张量的三个外层维度的大小值in3、in4和in5,其中所述三个外层维度的大小值分别表示对应维度上含有所述内层数据块的个数。
12.根据权利要求11所述的数据处理装置,其中所述控制电路进一步用于按如下对所述余数段配置第二分块指令:
将所述第二分块指令中的输出张量的内层最低维大小on0设置为in1*in2*T,将内层次低维大小on1设置为R/T,将内层最高维大小on2设置为1;以及
根据所述输入数据的所述余数段各维度大小,设置所述第二分块指令中的输出张量的三个外层维度的大小值on3、on4和on5,其中所述三个外层维度的大小值分别表示对应维度上含有所述内层数据块的个数。
13.根据权利要求12所述的计算装置,其中所述控制电路进一步用于按如下对所述余数段配置第二分块指令:
基于所设置的输入张量和输出张量各自六个维度的维度大小以及处理前的输入数据各维度大小,设置除了内层最低维之外其余五个维度上相邻数据点在存储空间上的步长。
16.根据权利要求1-15任一所述的数据处理装置,其中所述输入数据是包括H、W、C三个维度的神经元数据,所述第一维度存储顺序为HWC,所述第二维度存储顺序为CHW,所述第三维度存储顺序为HWC,其中C表示输入通道维度,H表示高度维度,W表示宽度维度。
17.根据权利要求1-15任一所述的数据处理装置,其中所述输入数据是包括Ci、Co、Kh、Kw四个维度的权值数据,其中Co维度与Kh维度合并成H维度,Ci维度对应C维度,Kw维度对应W维度,所述第一维度存储顺序为HWC,所述第二维度存储顺序为CHW,所述第三维度存储顺序为HWC,其中Ci表示权值输入通道维度,Co表示权值输出通道维度,Kh表示权值高度维度,Kw表示权值宽度维度,C表示输入通道维度,表示H表示高度维度,W表示宽度维度。
18.一种芯片,包括根据权利要求1-17任一所述的数据处理装置。
19.一种板卡,包括根据权利要求18所述的芯片。
20.一种利用根据权利要求1-17任一所述的数据处理装置对输入数据执行分块指令的数据处理方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111129610.8A CN113850380A (zh) | 2021-09-26 | 2021-09-26 | 数据处理装置、数据处理方法及相关产品 |
PCT/CN2022/100302 WO2023045445A1 (zh) | 2021-09-26 | 2022-06-22 | 数据处理装置、数据处理方法及相关产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111129610.8A CN113850380A (zh) | 2021-09-26 | 2021-09-26 | 数据处理装置、数据处理方法及相关产品 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113850380A true CN113850380A (zh) | 2021-12-28 |
Family
ID=78979679
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111129610.8A Pending CN113850380A (zh) | 2021-09-26 | 2021-09-26 | 数据处理装置、数据处理方法及相关产品 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN113850380A (zh) |
WO (1) | WO2023045445A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115118999A (zh) * | 2022-06-23 | 2022-09-27 | 安谋科技(中国)有限公司 | 熵上下文处理方法、片上系统及电子设备 |
CN115796239A (zh) * | 2022-12-14 | 2023-03-14 | 北京登临科技有限公司 | Ai算法架构的实现装置、卷积计算单元及相关方法与设备 |
WO2023045445A1 (zh) * | 2021-09-26 | 2023-03-30 | 寒武纪(西安)集成电路有限公司 | 数据处理装置、数据处理方法及相关产品 |
TWI814618B (zh) * | 2022-10-20 | 2023-09-01 | 創鑫智慧股份有限公司 | 矩陣運算裝置及其操作方法 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118041706B (zh) * | 2024-04-12 | 2024-06-18 | 深圳市中农网有限公司 | 一种基于crm下的农产品数据双模式存储方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102415508B1 (ko) * | 2017-03-28 | 2022-07-01 | 삼성전자주식회사 | 컨볼루션 신경망 처리 방법 및 장치 |
CN111079917B (zh) * | 2018-10-22 | 2023-08-11 | 北京地平线机器人技术研发有限公司 | 张量数据分块存取的方法及装置 |
CN112416433B (zh) * | 2020-11-24 | 2023-01-17 | 中科寒武纪科技股份有限公司 | 一种数据处理装置、数据处理方法及相关产品 |
CN113850380A (zh) * | 2021-09-26 | 2021-12-28 | 安徽寒武纪信息科技有限公司 | 数据处理装置、数据处理方法及相关产品 |
-
2021
- 2021-09-26 CN CN202111129610.8A patent/CN113850380A/zh active Pending
-
2022
- 2022-06-22 WO PCT/CN2022/100302 patent/WO2023045445A1/zh unknown
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023045445A1 (zh) * | 2021-09-26 | 2023-03-30 | 寒武纪(西安)集成电路有限公司 | 数据处理装置、数据处理方法及相关产品 |
CN115118999A (zh) * | 2022-06-23 | 2022-09-27 | 安谋科技(中国)有限公司 | 熵上下文处理方法、片上系统及电子设备 |
TWI814618B (zh) * | 2022-10-20 | 2023-09-01 | 創鑫智慧股份有限公司 | 矩陣運算裝置及其操作方法 |
CN115796239A (zh) * | 2022-12-14 | 2023-03-14 | 北京登临科技有限公司 | Ai算法架构的实现装置、卷积计算单元及相关方法与设备 |
CN115796239B (zh) * | 2022-12-14 | 2023-10-31 | 北京登临科技有限公司 | Ai算法架构的实现装置、卷积计算装置及相关方法与设备 |
Also Published As
Publication number | Publication date |
---|---|
WO2023045445A1 (zh) | 2023-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113850380A (zh) | 数据处理装置、数据处理方法及相关产品 | |
CN112416433B (zh) | 一种数据处理装置、数据处理方法及相关产品 | |
CN114154112A (zh) | 数据处理装置、芯片和板卡 | |
WO2023045446A1 (zh) | 计算装置、数据处理方法及相关产品 | |
CN112633490A (zh) | 执行神经网络模型的数据处理装置、方法及相关产品 | |
CN111488963B (zh) | 神经网络计算装置和方法 | |
CN113850379A (zh) | 数据处理装置、数据处理方法及相关产品 | |
CN113850377A (zh) | 数据处理装置、数据处理方法及相关产品 | |
WO2023045638A1 (zh) | 计算装置、利用计算装置实施卷积运算的方法及相关产品 | |
CN113837923B (zh) | 数据处理装置、数据处理方法及相关产品 | |
CN113850378A (zh) | 数据处理装置、数据处理方法及相关产品 | |
CN113837921B (zh) | 数据处理装置、数据处理方法及相关产品 | |
CN114692844A (zh) | 数据处理装置、数据处理方法及相关产品 | |
CN113469337A (zh) | 用于优化神经网络模型的编译方法及其相关产品 | |
CN115878543A (zh) | 计算装置、利用计算装置实施卷积运算的方法及相关产品 | |
CN115878546A (zh) | 计算装置、利用计算装置实施卷积运算的方法及相关产品 | |
CN115878544A (zh) | 处理电路、利用处理电路实施卷积运算的方法及相关产品 | |
CN115878541A (zh) | 计算装置、利用计算装置实施卷积运算的方法及相关产品 | |
CN115878545A (zh) | 计算装置、利用计算装置实施卷积运算的方法及相关产品 | |
CN115878542A (zh) | 计算装置、利用计算装置实施卷积运算的方法及相关产品 | |
CN116150556A (zh) | 执行卷积运算的计算装置、方法及相关产品 | |
WO2023087814A1 (zh) | 计算装置、利用计算装置实施卷积运算的方法及相关产品 | |
CN116980277B (zh) | 数据处理方法、装置、计算机设备及存储介质 | |
CN115470176A (zh) | 计算装置、利用计算装置实施卷积运算的方法及相关产品 | |
CN117252241A (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 |