数据处理装置、芯片和板卡的制作方法

专利查询1月前  22



1.本披露一般地涉及数据处理领域。更具体地,本披露涉及一种数据处理装置、芯片和板卡。


背景技术:

2.目前,深度学习(deep learning)已经成为机器学习中的重要分支,也大力助推着人工智能(ai)的发展。深度学习的核心技术——深度神经网络(dnn)已在诸多行业有着广泛的应用。
3.神经网络是人工智能、深度学习中最为关键的技术之一,其中卷积神经网络(convolution neural network,cnn)是最为重要的一种网络类型。卷积神经网络中最为关键的计算即为卷积层(conv layer)的卷积运算(convolution operation)。卷积层的功能是对输入数据进行特征提取,通过多层卷积,能够抽取复杂特征,以保证网络具有足够的表达能力和泛化能力。神经网络模型中包含了大量的、各种类型的卷积运算,卷积运算的计算性能极大地影响整个神经网络模型的计算性能。当神经网络模型应用于不同领域时,例如语音识别、机器翻译、图像处理等等,其对应的输入特征图和权值的各个维度大小可能各有不同。为了充分利用深度学习处理器的硬件优势,需要针对不同规模的、和/或不同类型的卷积运算进行优化,以提高执行神经网络模型的计算性能。


技术实现要素:

4.为了至少解决如上所提到的一个或多个技术问题,本披露在多个方面中提出了一种数据处理方法,其通过将待执行卷积运算的数据的宽度维度进行折叠处理,可以支持任意大小的宽度方向的卷积步长,从而扩展卷积运算的应用范围,提高卷积运算的计算效率。本披露实施例的卷积运算可以是各种神经网络模型中的运算,这些神经网络模型可以应用于各种领域,诸如图像处理、语音处理、文本处理等等,这些处理例如可以包括但不限于识别和分类。
5.在第一方面中,本披露实施例提供了一种数据处理装置,包括控制电路、第一存储区域、第二存储区域和运算单元,其中:所述第一存储区域用于存储处理前的输入特征图和卷积核;所述控制电路用于:根据卷积运算中宽度w维度的卷积步长sw,将所述第一存储区域中的输入特征图和卷积核的w维度分别对齐到所述卷积步长sw,并存储在所述第二存储区域中;将所述输入特征图的数据形状由原形状hi*wi*ci设置为优化形状hi*ceil(wi/sw)*(sw*ci),表示从所述输入特征图的次低存储维度w拆分sw倍的数据补至最低存储维度c,hi是输入特征图的最高存储维度h的原始大小,wi是次低存储维度w的原始大小,ci是最低存储维度c的原始大小;将所述卷积核的数据形状由原形状co*kh*kw*ci设置为优化形状co*kh*ceil(kw/sw)*(sw*ci),其中co是卷积核的最高存储维度的原始大小,kh是次高存储维度h的原始大小,kw是次低存储维度w的原始大小,ci是最低存储维度c的原始大小;以及将所述卷积运算的w维度的卷积步长设置为1;所述第二存储区域用于按照对齐后的存储顺
序存储所述控制电路处理后的输入特征图和卷积核;以及所述运算单元用于将所述第二存储区域内的输入特征图和卷积核执行卷积运算。
6.在第二方面中,本披露实施例提供了一种芯片,其包括前述第一方面的数据处理装置。
7.在第三方面中,本披露实施例提供了一种板卡,其包括前述第二方面的芯片。
8.根据如上所提供的数据处理装置、芯片和板卡,本披露实施例的方案通过对待运算数据的宽度维度根据宽度方向的卷积步长进行折叠处理,使得后续的卷积运算处理可以支持任意大小的宽度维度卷积步长,扩宽了卷积运算的处理能力。进一步地,由于宽度维度与处于最低存储维度的输入通道维度相邻,因此,宽度维度的折叠无需额外的软件摆数处理,简化了处理过程和指令开销。其他的优势和效果从后面结合附图的详细描述中将变得易于理解。
附图说明
9.通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,并且相同或对应的标号表示相同或对应的部分,其中:
10.图1示出本披露实施例的板卡的结构图;
11.图2示出本披露实施例的组合处理装置的结构图;
12.图3示出本披露实施例的单核或多核计算装置的处理器核的内部结构示意图;
13.图4示出可以应用本披露实施例的示例性卷积运算原理示例;
14.图5示出了根据本披露实施例的计算装置的示意性结构框图;
15.图6a-图6c示出了根据本披露实施例的几种数据宽度维度折叠示例;
16.图7a-图7c示出了根据本披露实施例的几种示例性插零对齐处理;
17.图8示出了根据本披露实施例的卷积核存储方式示意图;
18.图9示出了根据本披露实施例的输出特征图的示意性拆分方式;
19.图10a-图10d示出根据本披露一个实施例的卷积运算方案的运算过程示意图;
20.图11示出了根据本披露一个实施例的运算结果的写入和输出逻辑示意图;
21.图12示出根据本披露另一实施例的卷积运算方案的运算过程示意图;
22.图13示出根据本披露实施例的解除w维度卷积步长限制的示意性原理图示;以及
23.图14示出可以实施本披露实施例的数据处理方案的数据处理装置的硬件配置的示意性框图。
具体实施方式
24.下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
25.应当理解,本披露的权利要求、说明书及附图中可能出现的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权
利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
26.还应当理解,在本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
27.如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。
28.示例性硬件环境
29.图1示出本披露实施例的一种板卡10的结构示意图。如图1所示,板卡10包括芯片101,其是一种系统级芯片(system on chip,soc),或称片上系统,集成有一个或多个组合处理装置,组合处理装置是一种人工智能运算单元,用以支持各类深度学习和机器学习算法,满足计算机视觉、语音、自然语言处理、数据挖掘等领域复杂场景下的智能处理需求。特别是深度学习技术大量应用在云端智能领域,云端智能应用的一个显著特点是输入数据量大,对平台的存储能力和计算能力有很高的要求,此实施例的板卡10适用在云端智能应用,具有庞大的片外存储、片上存储和强大的计算能力。
30.芯片101通过对外接口装置102与外部设备103相连接。外部设备103例如是服务器、计算机、摄像头、显示器、鼠标、键盘、网卡或wifi接口等。待处理的数据可以由外部设备103通过对外接口装置102传递至芯片101。芯片101的计算结果可以经由对外接口装置102传送回外部设备103。根据不同的应用场景,对外接口装置102可以具有不同的接口形式,例如pcie接口等。
31.板卡10还包括用于存储数据的存储器件104,其包括一个或多个存储单元105。存储器件104通过总线与控制器件106和芯片101进行连接和数据传输。板卡10中的控制器件106配置用于对芯片101的状态进行调控。为此,在一个应用场景中,控制器件106可以包括单片机(micro controller unit,mcu)。
32.图2是示出此实施例的芯片101中的组合处理装置的结构图。如图2中所示,组合处理装置20包括计算装置201、接口装置202、处理装置203和存储装置204。
33.计算装置201配置成执行用户指定的操作,主要实现为单核智能处理器或者多核智能处理器,用以执行深度学习或机器学习的计算,其可以通过接口装置202与处理装置203进行交互,以共同完成用户指定的操作。
34.接口装置202用于在计算装置201与处理装置203间传输数据和控制指令。例如,计算装置201可以经由接口装置202从处理装置203中获取输入数据,写入计算装置201片上的存储装置。进一步,计算装置201可以经由接口装置202从处理装置203中获取控制指令,写入计算装置201片上的控制缓存中。替代地或可选地,接口装置202也可以读取计算装置201的存储装置中的数据并传输给处理装置203。
35.处理装置203作为通用的处理装置,执行包括但不限于数据搬运、对计算装置201的开启和/或停止等基本控制。根据实现方式的不同,处理装置203可以是中央处理器
(central processing unit,cpu)、图形处理器(graphics processing unit,gpu)或其他通用和/或专用处理器中的一种或多种类型的处理器,这些处理器包括但不限于数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本披露的计算装置201而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算装置201和处理装置203整合共同考虑时,二者视为形成异构多核结构。
36.存储装置204用以存储待处理的数据,其可以是dram,为ddr内存,大小通常为16g或更大,用于保存计算装置201和/或处理装置203的数据。
37.图3示出了计算装置201为单核或多核装置时处理核的内部结构示意图。计算装置301用以处理计算机视觉、语音、自然语言、数据挖掘等输入数据,计算装置301包括三大模块:控制模块31、运算模块32及存储模块33。
38.控制模块31用以协调并控制运算模块32和存储模块33的工作,以完成深度学习的任务,其包括取指单元(instruction fetch unit,ifu)311及指令译码单元(instruction decode unit,idu)312。取指单元311用以获取来自处理装置203的指令,指令译码单元312则将获取的指令进行译码,并将译码结果作为控制信息发送给运算模块32和存储模块33。
39.运算模块32包括向量运算单元321及矩阵运算单元322。向量运算单元321用以执行向量运算,可支持向量乘、加、非线性变换等复杂运算;矩阵运算单元322负责深度学习算法的核心计算,即矩阵乘及卷积。
40.存储模块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间的数据搬运。
41.示例性卷积运算类型
42.基于前述硬件环境,在一个方面中,本披露实施例提供了一种数据处理方案,对待执行卷积运算的数据进行预处理,从而可以对例如神经网络模型中的卷积运算进行优化。神经网络模型中的卷积层可以执行卷积运算,通过对输入特征图(也称为输入数据、神经元或输入神经元)应用卷积核(也称为过滤器、权值等)做卷积处理,从而进行特征提取。卷积层内部可以包含多个卷积核,组成卷积核的每个元素对应一个权重系数和一个偏差量bias。
43.神经网络模型中可能包含各种卷积运算层,例如执行正向、常规3d卷积运算的卷积层、执行深度(depthwise)卷积运算的反卷积层。而在反向训练中,可能需要执行反向的深度卷积运算或叉乘卷积运算。本披露实施例主要针对常规3d卷积运算进行优化,在不冲突的情况下,也可以应用于其他类型的卷积运算。
44.在常规3d卷积运算中,假设卷积层中输入特征图(feature map)张量形状表示为x[n hi wi ci],卷积核(kernel)的张量形状表示为k[co kh kw ci],输出的结果为y[n ho wo co],那么,简化的卷积运算的数学计算公式可以表示如下:
[0045]yin,jc,jh,jw
=∑
0≤ic≤ci,0≤ih≤kh,0≤iw≤kw
x
in,ic,jh
×
sh+ih,jw
×
sw+iw
×kjc,ic,ih,iw
ꢀꢀ
(1)
[0046]
上式中,x是输入数据,y是输出数据,k是卷积核,kh和kw是k的长和宽,sh和sw是在长和宽方向上的步长(stride),公式忽略了偏差量bias,填充pad和膨胀dilation,并且假设输入数据x已经做了填充,卷积核已经做了膨胀。公式忽略了n维度和c维度,神经网络模型的正向计算在n维度上的计算都是独立的,在c维度上是全连接的。卷积核在工作时,会按照一定的步长扫过输入特征,在卷积窗口内对输入特征做矩阵元素乘法求和并叠加偏差量。在常规3d卷积运算中,h、w和ci方向的对位乘积结果会进行累加,因此称为3d卷积。但是这种3d卷积存在约束条件:卷积核的ci维度大小和输入特征图的ci维度大小相等,因此卷积核不在ci方向滑动,是一种伪3d卷积。为了简单起见,上述卷积运算称为3d卷积运算。
[0047]
图4示出了可以应用本披露实施例的示例性常规3d卷积运算原理示例。
[0048]
图中示例性示出了大小为[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。
[0049]
图中还具体示出了一个卷积运算示例,其中输入数据为6
×6×
3大小的输入特征图440,省去n维度;卷积核为3
×3×
3大小的立体卷积核450,针对单个co;输出数据为4
×
4的输出特征图460。具体运算过程如下:
[0050]
卷积核450按照一定的步长扫过输入特征图440,在卷积窗口470内对输入特征做矩阵元素乘法求和并叠加偏差量。也即,输出特征图460中每个位置上的值由每个输入特征图的对应区块和对应卷积核做二维卷积运算之后再加和得到。例如,图中示出了输出特征图460上(0,0)位置的值(也即卷积输出点)由输入特征图中立方体框出的卷积窗口470与立体卷积核450进行二维卷积运算得到3个值,再加和得到最终值。
[0051]
为了得到其他位置的输出,可以在输入特征图440上移动卷积核450的位置,也即移动卷积输出点的卷积窗口。在图中示例中,卷积步长(sx,sy)为(1,1),当横向(宽度方向)向右或纵向(高度方向)向下移动一格后做卷积运算,可以分别得到输出特征图460上(0,1)或(1,0)位置的值。
[0052]
从上面的描述可知,在神经网络的一个卷积层中,有n组输入特征图,每组包含hi
×
wi
×
ci个信息,其中hi和wi分别是输入特征图的高度和宽度,ci是输入特征图的个数,也称为输入通道数。卷积层有ci
×
co个kh
×
kw大小的卷积核,其中ci是输入通道数,co是输出特征图的个数(或输出通道数),kh和kw分别是卷积核的高度和宽度。输出特征图包含ho
×
wo
×
co个信息,其中ho和wo分别是输出特征图的高度和宽度,co是输出通道数。此外,在卷积运算中,还会涉及到卷积步长(sx,sy),卷积步长的大小会影响输出特征图的尺寸。
[0053]
在本文中,输入特征图(feature map)、输入数据、神经元或输入神经元可互换使用;卷积核、过滤器或权值可互换使用;输出特征图、输出数据或输出神经元可互换使用。此外,h(高度)和y维度可互换使用,w(宽度)和x维度可互换使用。相应地,输入特征图的h维度可以表示为hi或yi,输出特征图的h维度可以表示为ho或yo,w维度类似表示。在本披露实施例中,每个卷积输出点具有对应的卷积窗口,卷积窗口的形状等于卷积核的形状。每个卷积输出点的值对应于其卷积窗口内的输入特征图与权值的对位乘累加结果。
[0054]
示例性计算装置
[0055]
在本披露实施例中,可以采用主从结构的计算装置来实施上述卷积运算。进一步地,可以为输入特征图和卷积核配置不同的数据通路,从而提高访存效率。
[0056]
图5示出了根据本披露实施例的计算装置500的示意性结构框图。可以理解,该结构可以视为图3中单个处理核的运算模块32的内部结构细化,也可以视为在多个图3所示处理核的运算模块基础上联合的功能划分框图。如图5所示,本披露实施例的计算装置500可以配置用于执行各种类型的卷积运算,其可以包括主处理电路(ma)510和多个从处理电路(sl)520,图中示出了16个从处理电路sl0~sl15。本领域技术人员可以理解,从处理电路的数量可以更多或更少,取决于具体的硬件配置,本披露实施例在此方面没有限制。
[0057]
主处理电路和从处理电路之间以及多个从处理电路之间可以通过各种连接相互通信。在不同的应用场景中,多个从处理电路之间的连接方式既可以是通过硬线布置的硬连接方式,也可以是根据例如微指令进行配置的逻辑连接方式,以形成多种从处理电路阵列的拓扑结构。本披露实施例在此方面没有限制。主处理电路和从处理电路可以相互配合,由此实现并行运算处理。
[0058]
为了支持运算功能,主处理电路和从处理电路可以包括各种计算电路,例如可以包括向量运算单元及矩阵运算单元。向量运算单元用以执行向量运算,可支持向量乘、加、非线性变换等复杂运算;矩阵运算单元负责深度学习算法的核心计算,例如矩阵乘和卷积。
[0059]
从处理电路例如可以用于根据运算指令,对相应的数据并行执行中间运算得到多个中间结果,并将多个中间结果传输回主处理电路。
[0060]
通过将计算装置500设置成主从结构(例如一主多从结构,或者多主多从结构,本披露在此方面没有限制),对于正向运算的计算指令,可以根据计算指令将数据进行拆分,从而通过多个从处理电路对计算量较大的部分进行并行运算以提高运算速度,节省运算时间,进而降低功耗。
[0061]
在本披露一些实施例中,通过利用不同的数据通路传输输入特征图和权值,可以支持输入特征图和权值的多种复用方式,从而减小运算期间的数据吞吐量,提升处理效率。
[0062]
具体地,计算装置500中还可以包括第一存储电路530和第二存储电路540,用于分别存储经由不同数据通道传输的数据。可选地,该第一存储电路530和第二存储电路540可以是同一存储器划分形成的两个存储块,也可以是两个独立的存储器,此处不做具体限定。
[0063]
第一存储电路530可以用于存储多播数据,也即第一存储电路中的数据将通过广播总线传输给多个从处理电路,这些从处理电路接收到相同的数据。可以理解,通过广播总线可以实现广播和多播。多播是指将一份数据传输到多个从处理电路的通信方式;而广播是将一份数据传输到所有从处理电路的通信方式,是多播的一个特例。由于多播和广播都对应一对多的传输方式,本文中未对二者特意区分,广播和多播可以统称为多播,本领域技术人员根据上下文可以明确其含义。
[0064]
第二存储电路540可以用于存储分发数据,也即第二存储电路中的数据将分别传输给不同的从处理电路,每个从处理电路接收到不同的数据。
[0065]
通过分别提供第一存储电路和第二存储电路,可以支持针对待运算的数据以不同传输方式进行传输,从而通过在多个从处理电路之间复用多播数据来降低数据吞吐量。
[0066]
在一些实施例中,可以将输入特征图确定为多播数据并存储在第一存储电路中,
以在运算期间通过广播方式将数据传输给调度的多个从处理电路。对应地,可以将卷积核确定为分发数据并存储在第二存储电路中。这些分发数据可以在运算前分发给对应的从处理电路。
[0067]
图5还示出了根据本披露实施例的从处理电路sl的内部结构示意图。如图所示,每个从处理电路520可以包括多个运算电路cu 521、第一缓冲电路522和第二缓冲电路523。图中示出了4个运算电路cu0~cu3。本领域技术人员可以理解,运算电路的数量可以更多或更少,取决于具体的硬件配置,本披露实施例在此方面没有限制。
[0068]
在一些实施例中,第一缓冲电路522可以用于缓存分配给该从处理电路的权值或输入特征图。相应地,第二缓冲电路523则可以用于缓存分配给该从处理电路的输入特征图或权值。这两个缓冲电路均用于选取参与运算的数据。第一缓冲电路522的数据可以是来自例如第一存储电路530或第二存储电路540的多个数据行,对应地,第二缓冲电路523的数据可以来自例如第二存储电路540或第一存储电路530的多个数据行。取决于具体的复用方式,这些数据行可以在运算期间被分发给对应的运算电路cu 521或广播给该从处理电路520内的所有cu 521。
[0069]
每个运算电路cu 521用于在每个运算周期内,针对分别从第一缓冲电路中选取的数据行和从第二缓冲电路中选取的数据行执行对位乘累加运算。
[0070]
通过分别提供第一缓冲电路和第二缓冲电路,可以支持针对待运算的数据以不同传输方式进行传输,从而通过在单个从处理电路内的多个运算电路之间尽可能复用数据来降低数据吞吐量。
[0071]
从处理电路520中还可以包括第三缓冲电路524,用于缓存各个运算电路cu 521的运算结果。
[0072]
可以理解,虽然在图5中将各个处理电路与存储电路示出为分立的模块,但是根据不同的配置,存储电路与处理电路也可以合并成一个模块。例如,第一存储电路530可以与主处理电路510合并在一起,第二存储电路540则可以由多个从处理电路520共享,并为每个从处理电路分配独立的存储区域,加速访问。本披露实施例在此方面没有限制。此外,在该计算装置中,主处理电路和从处理电路可以属于同一处理器或芯片的不同模块,也可以属于不同处理器,本披露在此方面也没有限制。
[0073]
示例性输入特征图w折叠方案
[0074]
在本披露实施例中,所涉及的多维数据的维度表征为(n,h,w,c)或(co,h,w,ci),其代表了数据在存储器中的存储顺序。可以理解,虽然多维数据具有多个维度,但是因为存储器的布局始终是一维的,因此多维数据与存储器上的存储顺序之间存在对应关系。多维数据通常被分配在连续的存储空间中,也即可以将多维数据进行一维展开,按顺序存储在存储器上。例如,在本披露实施例中,初始的输入特征图可以按照低维度(此处c/ci为最低维度)优先方式,进行顺序存储。相邻的维度是指多维数据的维度信息表示中相互紧挨着的维度,例如,w和ci相邻。当存储顺序与维度顺序保持一致时,相邻的维度在存储器上的位置是连续的。此处w和ci相邻,其数据在存储器上也是连续的。
[0075]
在智能处理器中,出于算力的需要和面积功耗开销的考虑,硬件的主要运算单元是向量的乘加运算器。在硬件设计中实现各类卷积算法的支持,本质上是最大化地提取算法中的乘加运算,并且通过数据通路实现在片上ram(诸如图3中的nram、wram等)和运算器
之间高效地交换乘加运算的输入和输出数据。
[0076]
硬件在存储上是以一行一行(缓存行)进行存储的,读、写、计算操作在整行对齐时效率最高,因此为了充分利用带宽,适配运算器阵列的吞吐量等需求,通常需要将数据进行向量化对齐。人工智能芯片的设计通常以ci维度为最低维度,也即上述nhwc摆放顺序,ci维度上的数据是连续的。因此,向量化对齐要求需要ci维度的大小对齐到指定数值,例如:对齐值m,从而以该对齐值m为单位进行存取数,m也可以称为硬件单次最大运算量。基于不同的硬件设计,m可以有不同的数值,例如64bit、128bit、256bit、512bit等。通常,运算器阵列的输入端口大小也与m相关,例如运算器阵列的输入端口大小通常为m的2倍,也即一次性处理对齐值m规模的输入特征图数据和权值数据。当输入特征图的ci维度较大时,比较容易满足上述对齐要求。
[0077]
当输入特征图的ci维度较小时或者当ci与m相除得到的余数较小时,例如小于一个缓存行的大小,则需将ci维度补齐到一行数据(例如,512比特),即填充无效数据0。这种填充会造成大量的冗余计算,导致资源浪费,降低了运算的效率。
[0078]
已知提出了一种适合通道c较小情形的小卷积方案,其中将运算数据按照拆分单元进行拆分并转换维度顺序存储。一个拆分单元处理的数据量的规模可以设置成硬件的一次性处理对齐值m,从而以拆分单元为单位进行运算处理,可以充分发挥硬件的算力,避免或减少无效计算。
[0079]
然而,在这种小卷积方案中,输入特征图和卷积核都需要预先通过软件进行分块和维度转换处理,输出特征图也需要通过软件进行相应地分块和维度转换处理,这无疑增加了软件的复杂度。此外,在这些分块和维度转换处理中,还需要软件进行对齐处理。进一步地,这些小卷积方案仅支持宽度和高度方向的卷积步长均为1的卷积运算。
[0080]
鉴于此,为了进一步优化卷积运算,减少软件复杂度,本披露实施例提供了一种宽度维度折叠的卷积方案,简称wfold,其通过仅在需要时将与输入特征图的输入通道ci维度连续的宽度w维度的数据补偿到ci维度,省去了软件进行数据分块和维度转换处理。
[0081]
具体地,在一些实施例中提供了一种计算装置,配置用于执行卷积运算,该计算装置包括:存储电路,其上存储有输入特征图和卷积核,其中卷积核按照输出通道co维度分块存储以分配给不同的从处理电路;主处理电路,用于将输入特征图的输入通道ci维度对齐到输入通道拆分粒度pci,并且将每一拆分粒度的数据联合ws倍的宽度维度的数据构成输入特征数据行广播给多个从处理电路,其中pci*ws=m,m是硬件单次处理数据量;以及多个从处理电路,用于分别对广播的输入特征图和分配给从处理电路的对应卷积核执行卷积运算。
[0082]
在一些实施例中,根据输入特征图的输入通道维度ci的尺寸和硬件单次处理数据量m,可以确定输入通道拆分粒度pci;继而可以根据拆分粒度pci,确定输入特征图的宽度w维度的折叠倍数ws。在一些实施例中,ws=m/pci。可以理解,本披露实施例的卷积方案通过对ci维度按照拆分粒度进行拆分,可以适合于任意ci尺寸。此外,还可以理解,最大拆分粒度pci不超过硬件的一次性处理对齐值m(或称基准对齐值,硬件单次处理数据量)。由此,在ci的不同取值范围下,可以选择合适的pci,通过将相邻的w维度上的数据填补到ci维度,可以降低对ci维度的对齐要求。
[0083]
在一些实施例中,输入通道拆分粒度pci可以选择为m/2n,n=0,1,2,

,从而便于
从次低存储维度w按2n倍折叠数据至最低存储维度ci。表1示出了几种示例性的输入通道拆分粒度pci所对应的折叠方案,假设m=64b。
[0084]
拆分粒度(pci)4b8b16b32b64bws(w折叠)168421
[0085]
表1
[0086]
从表1中可以看出,输入通道拆分粒度越小,w补给ci方向的份数越多,对w的对齐限制大小也越大,需要满足w/ws≥1。
[0087]
可以理解,虽然理论上拆分粒度可以取m/2n,但是考虑到拆分粒度太小时对w维度的要求、指令开销、实际ci的取值范围等因素,可以只选择m/2n中的部分值作为备选拆分粒度。在m=64b的示例中,备选拆分粒度例如可以包括64b、32b、16b和8b。
[0088]
不同的拆分粒度可以适用于不同的运算场景,从而获得不同程度的性能优化。具体地,在一些实施例中,可以按照如下方式来选择输入通道拆分粒度pci:
[0089]
将输入特征图的最低存储维度ci分别对齐到各个备选拆分粒度;以及
[0090]
综合考虑对齐到各个备选拆分粒度的对齐填补量和对应拆分粒度的大小,选择合适的拆分粒度,例如对齐填补量在预定范围内且尽可能大的备选拆分粒度作为pci。
[0091]
例如,在对齐填补量相同的情况下,优先选择较大的拆分粒度;或者在对齐填补量不同的情况下,选择对齐填补量最小的拆分粒度;或者在对齐填补量相差不大(例如在预定范围内,诸如不超过16b)的情况下,优先选择较大的拆分粒度。尽管在上面列出了选择输入通道拆分粒度pci的规则,然而这些规则仅仅是优选实施例,用于选择最适合当前ci取值的优选输入通道拆分粒度。以下结合几个示例来描述上述规则的应用。所有示例中假设m=64b,备选拆分粒度包括64b、32b、16b和8b。
[0092]
在一个示例中,假设ci=48b,则对齐到8b、16b均无需补零,对齐到32b、64b均需补16b。此时,可以优选无需补零的拆分粒度中较大的拆分粒度作为pci,也即16b。
[0093]
在另一个示例中,假设ci=28b,则对齐到8b、16b、32b均需要补4b的零,对齐到64b需要补36b的零。此时,可以优先选取对齐填补量小的、较大的拆分粒度作为pci,也即32b。
[0094]
在又一个示例中,假设ci=49b,则对齐到8b需要补7b的零,对齐到16b、32b、64b均需要补15b的零。此时,对齐填补量仅相差8b,在可接受范围内,因此可以优选较大的拆分粒度64b。
[0095]
图6a-图6c示出了根据本披露实施例的几种输入特征图的数据宽度维度折叠示例。在这些示例中,同样假设m=64b。
[0096]
如图6a所示,当确定的输入通道拆分粒度pci=16b时,w维度需要折叠4倍。也即,一个数据行的形状为w*ci=4
×
16b。当ci维度的尺寸超过16b时,1*ci上的数据会拆分在多个数据行中。例如,当ci=48b时,其上数据会拆分到3个数据行中。图中用圆角矩形框示出了3个数据行各自包括的数据,此处的3也可以称为ci维度上的拆分块数。
[0097]
如图6b所示,当确定的输入通道拆分粒度pci=32b时,w维度需要折叠2倍。也即,一个数据行的形状为w*ci=2
×
32b。同样,当ci维度的尺寸超过32b时,1*ci上的数据会拆分在多个数据行中。例如,当ci=96b时,其上数据会拆分到3个数据行中。图中仅示出单个数据行。
[0098]
如图6c所示,当确定的输入通道拆分粒度pci=64b时,w维度需要折叠1倍,也即无
需折叠。此时,一个数据行的形状为w*ci=1
×
64b。同样,当ci维度的尺寸超过64b时,1*ci上的数据会拆分在多个数据行中。例如,当ci=128b时,其上数据会拆分到2个数据行中。图中仅示出单个数据行。
[0099]
如前面所提到,在一些实施例中,图5中的主处理电路510可以将输入特征图确定为多播数据并存储在第一存储电路530中,以在运算期间通过广播方式将数据传输给调度的多个从处理电路。从前面描述的宽度折叠方案可知,由于wci为连续维度,因而输入数据的格式不需要进行分块和维度转换处理,可以直接接收原始输入数据格式hwci。因此,在第一存储电路530中,输入特征图可以按照原始格式(例如hwci)存储于其中。
[0100]
当从第一存储电路530中读取输入特征图并广播给多个从处理电路时,可以执行前述对齐处理。也即,在从第一存储电路530到从处理电路内的缓冲电路(例如第一缓冲电路)的传输过程中,主处理电路510可以控制进行ci维度的对齐处理,以对齐到所确定的输入通道拆分粒度pci,继而可以折叠相应数量的wi维度数据,构成一个数据行,并以一个数据行作为最小粒度,广播传输给从处理电路。
[0101]
在从第一存储电路530到从处理电路内的缓冲电路的传输过程中,可以采用不同的数据读写方案来实现。
[0102]
在一些实施例中,可以直接从第一存储电路530读取输入特征图数据,然后连续地写入从处理电路的缓冲电路中。在读取到写入期间,根据情况进行对齐到输入通道拆分粒度pci的填补处理。在这些实施例中,取决于ci维度上的拆分块数,可以采取连续读取或间隔(不连续)读取的方式。注意,本文的“连续”或“间隔”均是指数据在存储地址上为连续或间隔。
[0103]
在一个示例中,当ci维度上的拆分块数为1,也即ci维度未进行拆分的情况下,ci≤pci,此时一个w上仅包含1个pci。当需要读取ws个w时,这些w是连续的。由此,在这种情况下,可以通过单个读请求一次性读出ws个w的数据,从而简化指令。当然,也可以通过多个读请求读出ws个w的连续数据。
[0104]
图7a示出了根据本披露一个示例的示例性数据读写方案和可能的插零对齐处理。
[0105]
如图7a所示,假设输入数据的形状为4
×9×
14b(hwc),确定的输入通道拆分粒度pci为16b,则ci维度上的拆分块数为1。每次需要将ws=4个w合并成一个数据行进行输出,其中每个w在ci方向上需要插零补齐到16b。也即,从第一存储电路中读取4个w,每个w插入2b的零,从而合并成4
×
16b=64b的一个数据行广播给从处理电路。
[0106]
在此示例中,由于ci维度上的拆分块数为1,因此读取的4个w是连续的,可以通过一个读请求,一次性地将4个w读出,也可以通过多个读请求读出4个w的连续数据。
[0107]
在另一示例中,当ci维度上的拆分块数不为1时,也即ci维度被拆分成多个拆分粒度pci时,此时ci>pci,由于一个数据行是由ws*pci构成的,此时需要间隔地读取各个w上的pci。读取的间隔为1*ci(wci),也即1个w,每次读取pci的数据量,需要读取ws次。换言之,读取ws次,每次等间隔地读取1个w上的pci的数据量。在这种情况下,可以通过ws个读请求来实现数据读取,每个读请求分别读取对应w上的pci的数据量。
[0108]
图7b示出了根据本披露另一示例的示例性数据读写方案和可能的插零对齐处理。
[0109]
如图7b所示,假设输入数据的形状为4
×9×
47b(hwc),确定的输入通道拆分粒度pci为16b,则每次需要将ws=4个w中的部分数据合并成一个数据行进行输出,其中每个w在
ci方向上需要插零补齐到16b*3=48b。此时需要进行间隔读取,可以通过4个读请求来实现。具体地,可以分别发送4个读请求,等间隔地分别读各个w中的首个pci=16b的数据拆分块。也即,第一请求从第一存储电路中读取w0中的首个pci的数据量b0,第二请求读取w1中的首个pci的数据量b0,第三请求读取w2中的首个pci的数据量b0,第四请求读取w3中的首个pci的数据量b0。读取到的这4个w上的各pci的数据量合并成4*pci=64b的一个数据行,存储到缓冲电路上。接着,再发送4个读请求,等间隔地分别读各个w中的第2个pci=16b的数据拆分开。最后,再发送4个读请求,等间隔地分别读各个w中的最后一个数据拆分块,此时可以执行对齐处理,每个数据拆分块插入1b的零,从而合并成4
×
16b=64b的一个数据行广播给从处理电路。
[0110]
在另一些实施例中,当需要采取间隔读取方式从第一存储电路读取数据时,考虑到第一存储电路通常为ram,实现间隔读取的难度较大,开销也大,可以附加地提供中转存储电路来简化实现。中转存储电路可以通过寄存器来实现,从而容易实现间隔读取或不连续读取。
[0111]
具体地,在这些实施例中,可以首先从第一存储电路读取一定数量的连续的输入特征图数据,将读出的数据写入到一个中转存储电路,然后再从中转存储电路中间隔地读取数据、连续地写入到从处理电路的缓冲电路中。在从中转存储电路读取到写入缓冲电路期间,根据情况进行对齐到输入通道拆分粒度pci的填补处理。从第一存储电路读取的连续数据量可以是ws个ci,也即读取ws*ci的连续数据存储到中转存储电路上。然后,可以以与前一示例相同的方式从中转存储电路间隔读取数据并存储至从处理电路的缓冲电路上。
[0112]
图7c示出了根据本披露又一示例的示例性数据读写方案和可能的插零对齐处理。
[0113]
如图7c所示,仍然假设输入数据的形状为4
×9×
47b(hwc),确定的输入通道拆分粒度pci为16b,则每次需要将ws=4个w合并成一个数据行进行输出,其中每个w在ci方向上需要插零补齐到16b*3=48b。
[0114]
在此示例中,可以首先从第一存储电路读取一定数量的连续的输入特征图数据,将读出的数据写入到一个中转存储电路。具体地,可以依次读取4个1*47b的数据,例如可以通过4个读请求来实现。首先在ci方向连续读数,直到读完一个ci,然后再w方向上移动1,接着读下一个ci,直到读完4个w的连续数据。在一个实现中,可以分别发送4个读请求,第一请求从第一存储电路中读取w0上的47b(ci)数据;第二请求读取w1上的47b数据;第三请求读取w2上的47b数据;第四请求读取w3上的47b数据。读取到的这4个w上的各47b的数据写到中转存储电路中。
[0115]
接着分别从中转存储电路中取出3*(4*16b)的数据给从处理电路的缓冲电路以供执行卷积运算。其中,从4*(1*47b)—》3*(4*16b)的过程类似于图7b的示例,也即在中转存储电路上进行间隔读取。此处不再重复。
[0116]
由此,上面描述了本披露实施例中输入特征图的存储格式和经由数据通道的折叠处理。
[0117]
示例性卷积核存储
[0118]
卷积的计算是每一个输入特征图都需要和每一个co的卷积核进行乘加运算,从而输出co个输出特征图。然而,并不是片上空间一定能同时存储下所有规模的卷积核和输入特征图,因此,对于硬件而言存在一系列重复加载输入特征数据或者权值数据的操作,如何
平衡重复加载输入特征数据还是权值数据对计算的效率会有一定影响。在实际运算中,为了减少频繁的片外访存,根据参与运算的数据的规模特性,可以采取不同的复用方式。
[0119]
根据前面描述的卷积运算原理可知,co维度上的运算结果无需累加,因此不同co上的运算分配在不同的运算电路上可以相对独立地进行。也即,在不同的运算电路上可以分配不同co的卷积核,使用相同的输入特征图进行运算,此时输入特征图在这些运算电路之间复用,复用次数rn=ns,ns为运算电路数量。
[0120]
在本披露一些实施例中,可以基于卷积核的输出通道co维度尺寸和可调度的从处理电路数量ns,确定分配给各个从处理电路处理的co值。
[0121]
为了简化从处理电路的调度,在一些实施例中,可以根据卷积核的输出通道维度co的尺寸,确定输出通道对齐值aco;继而可以根据对齐值aco,将卷积核按照co维度进行分块存储,以供所调度的从处理电路加载对应的权值块。在一些实施例中,输出通道对齐值aco可以选择为可调度的从处理电路数量ns的倍数,从而便于将co平均分配给ns个从处理电路。例如,每个从处理电路处理以ns为间隔的、不同的aco/ns个co值的卷积核。
[0122]
具体地,可以根据co的取值范围来确定优选的输出通道对齐值aco,例如可以按如下规则:
[0123]
当ns*(m-1)《co≤ns*m,m=1,2,

时,aco=ns*m。
[0124]
如前面所提到,在一些实施例中,可以将卷积核确定为分发数据并存储在第二存储电路540中,以在运算前分发给对应的从处理电路或由从处理电路读取。第二存储电路540可以由多个(例如ns个)从处理电路520共享,并为每个从处理电路分配独立的存储区域,从而每个从处理电路运算所需的数据只需要从其对应的存储区域读取即可,加速访存速度。当将卷积核按照co维度划分存储时,可以将分配给某个从处理电路的co值对应的卷积核存储在第二存储电路的相应存储区域中。由于co维度是卷积核的最高存储维度,因此co维度上的划分存储无需进行维度转换等处理,直接将对应co值的卷积核数据按原始格式(例如khkwci)存储在第二存储电路上即可。
[0125]
图8示出了根据本披露实施例的卷积核存储方式示意图。图中示例性示出了为例如ns=16个从处理电路sl0~sl15分配的16块存储区域800~815。每个存储区域中存储该从处理电路要处理的对应co值的卷积核。
[0126]
如前所述,卷积核的co维度对齐到aco,当ns=16时,aco可以是16、32、48、64等等。因此,卷积核根据co划分,存储在第二存储电路的各个存储区域中,以分配给对应的sl。对应每个sl的存储区域中存储分配给其不同co值的卷积核。在一个示例中,将连续的co值逐个顺序(也即以间隔1为单位)分配给16个sl,分配完一轮后又重头开始分配。例如,图中示出co=0~15的卷积核依次存储在16个存储区域800~815上;接下来的co=16~31的卷积核依次存储在16个存储区域800~815上;以此类推。由此,每轮运算完成后,各个从处理电路输出的运算结果的co维度是连续的。
[0127]
从上述co划分可知,每个从处理电路可能需要处理一个或多个co值的卷积核。当处理多个co值时,此时每个从处理电路处理的输入特征图可以进一步重复用于这多个co值的卷积核,最大复用次数rn=aco/ns,rn表示输入特征图在单个从处理电路内的复用次数。可以考虑硬件缓冲空间限制等因素(例如图5中的第一缓冲电路和第二缓冲电路的大小)来确定单个从处理电路内可应用的输入特征图复用次数。
[0128]
上面描述了卷积核按照co维度对齐并分块存储在第二存储电路中。与输入特征图类似的,每个co值的卷积核在ci维度上也要执行类似的对齐处理。
[0129]
在一些实施例中,当从第二存储电路中读取卷积核并分发给对应的从处理电路时,可以执行上述对齐处理。也即,在从第二存储电路到从处理电路内的缓冲电路(例如第二缓冲电路)的传输过程中,可以进行卷积核的ci维度的对齐处理,以对齐到前面确定的输入通道拆分粒度pci。不同于输入特征图,卷积核无需进行w维度的折叠,而是根据折叠倍数ws进行对应的复制扩展,这在后续的卷积运算过程的描述中可以看出。
[0130]
单个从处理电路内的示例性卷积运算过程
[0131]
当输入特征图被广播给所调度的从处理电路,卷积核被分发给对应的从处理电路之后以及同时地,各个从处理电路可以对输入特征图和卷积核的对应数据执行卷积运算,继而主处理电路可以根据卷积宽度折叠方案,对多个从处理电路返回的运算结果进行拼接处理,以得到输入特征图和卷积核的卷积运算的输出特征图。具体地,可以利用从处理电路中的多个运算电路cu以及各个缓冲电路(参见图5)来执行具体的卷积运算过程。取决于从处理电路内部缓冲电路的空间大小以及运算电路的算力限制,在每轮运算中通常需要执行多个运算周期来完成所需运算。
[0132]
在一些实施例中,第一缓冲电路可以用于缓存来自第一存储电路的输入特征图;相应地,第二缓冲电路可以用于缓存来自第二存储电路的卷积核。每个运算电路cu可以在每个运算周期内,针对分别从第一缓冲电路中选取的数据行(例如输入特征行)和从第二缓冲电路中选取的数据行(例如,权值行)执行对位乘累加运算。为了简便起见,以下描述针对单个从处理电路sl内的处理,可以理解,其他sl内进行类似的处理。
[0133]
从前面描述可知,单个从处理电路可能需要处理一个或多个co值的卷积核。在一些实施例中,可以按维度顺序、多层循环执行运算,其中每个从处理电路分配的co值作为最内层循环,循环次数nco=aco/ns;卷积核的kw维度作为中层循环,循环次数nkw=min(kw,kmax),其中kw是卷积核的宽度维度尺寸,kmax是从处理电路所支持的最大卷积核宽度值,其与第一缓冲电路的大小、宽度维度折叠倍数ws等有关;卷积核的kh维度和ci维度按pci拆分的块数bci作为外层循环,循环次数nkh=kh,nci=bci=ceil(ci/pci),其中kh是卷积核的高度维度尺寸;从而总循环次数ncycle=nco*nkw*nkh*nci。
[0134]
从最内层循环可以看出,当需要处理多个co值时,可以复用输入特征图,输入特征图的复用次数rn=pco/ns。例如,当pco=64,ns=16时,每个从处理电路处理4个co值,输入特征图在每个从处理电路内复用rn=64/16=4次。
[0135]
在最内层循环中,针对每一个co值,可以由单个从处理电路内的多个运算电路cu并行计算输出特征图。考虑到输出特征图的维度存储顺序以及输入特征图的w折叠,为了简化输出处理,优选地,在wo维度上顺次划分ncu个输出块,以分别由ncu个运算电路进行并行运算,每个输出块对应于一个输入特征数据行的运算结果。在一些实施例中,从第一缓冲电路中顺次选取ncu个相邻的输入特征数据行分发给ncu个运算电路,从第二缓冲电路中选取对应的一个扩展权值数据行,广播给ncu个运算电路,从而通过复用权值数据来实现ncu个输出块的并行计算。
[0136]
图9示出了根据本披露实施例的输出特征图的示意性拆分方式。为了简单起见,图9仅示出最内层循环中一个co值的输出特征图在wo维度上的拆分。在此示例中,假设ncu=
4,则在wo维度上顺次划分4个输出块,每个输出块对应一个输入特征数据行的运算结果。
[0137]
进一步地,取决于输入特征图的一个数据行内的不同数据格式,单个运算电路cu计算的输出块中可以包括不同数量的输出点。具体地,根据前面确定的宽度维度折叠倍数ws,每个输出块包括在宽度wo维度上连续的ws个输出点。例如,当输入特征图的ci按照pci=16b的粒度拆分时,一个数据行包括4个wi,可以计算4个wo维度上的输出点;当输入特征图的ci按照pci=32b的粒度拆分时,一个数据行包括2个wi,可以计算2个wo维度上的输出点;而当输入特征图的ci按照pci=64b的粒度拆分时,一个数据行包括1个wi,可以计算1个wo维度上的输出点。图9中进一步示出了上述三种情况下单个输出块的不同构成,分别包括4个、2个或1个wo输出点。
[0138]
为了支持单个cu同时计算一个输出块中可能包括的一个或多个wo输出点,在一些实施例中,可以按如下构造对应的权值数据:在将第二存储电路中的卷积核分发给各个从处理电路的第二缓冲电路时,除了将卷积核的ci维度对齐到pci之外,还根据宽度维度的折叠倍数ws,将在ci维度上按照pci拆分或对齐到pci的一列ci数据复制扩展成ws列,构成一个扩展权值数据行,存储在第二缓冲电路中。也即,一个扩展权值数据行的形状为ws*pci,可以对应于一个输入特征数据行。由此,可以从第二缓冲电路中选取一个扩展权值数据行,广播给从处理电路内的n
cu
个运算电路。每个运算电路继而可以针对来自第一缓冲电路的一个输入特征行和来自第二缓冲电路的一个扩展权值数据行,以pci/m=1/ws个数据行为单位进行对位乘累加,得到m/pci=ws个输出点的部分和。
[0139]
由此可见,上面的运算过程存在两层权值复用:第一层是运算电路cu之间,权值广播给ncu个运算电路,因而复用次数为ncu;第二层是每个运算电路内的一个或多个wo输出点之间,权值通过扩展以用于计算每个cu内的m/pci个输出点,因而复用次数为m/pci。由此,通过尽可能地复用数据,可以有效减少数据的频繁访问和访存量。
[0140]
在kw维度的中层循环中,在第一缓冲电路和第二缓冲电路上以1为步长在宽度维度上同步滑动选取输入特征数据行和扩展权值数据行。如前面所提到,中层循环的滑动次数,也即循环次数nkw=min(kw,kmax),其中kw是卷积核的宽度维度尺寸,kmax是从处理电路所支持的最大卷积核宽度值。
[0141]
在一些实施例中,kmax可以按如下确定:
[0142]
kmax=l1*ws-ncu*ws+1,
[0143]
其中l1是第一缓冲电路的大小,单位为数据行;ncu是调度的运算电路数量,ws是宽度维度的折叠倍数。例如,在l1=8个数据行的第一缓冲电路、ncu=4的情形下,当ws=4时,kmax=17;当ws=2时,kmax=9;当ws=1时,kmax=5。可以看出,大部分情况下,卷积核的宽度尺寸kw不会超过kmax,因此,nkw=kw。
[0144]
在外层循环中,可以包括kh维度和ci维度按pci拆分的块数bci的循环。两个维度的循环顺序可以交换。在一个示例中,可以先kh维度循环,再bci循环。在另一个示例中,可以先bci循环,再kh维度循环。由于kh维度的数据没有进行任何维度折叠或拆分,因此本披露实施例的卷积方案可以支持kh维度上任意数值的卷积步长。bci级别的循环设置在外层循环中,有利于在更内层的循环中充分复用已加载的数据,而不用频繁更新缓冲电路。
[0145]
可以理解,当卷积核的宽度尺寸超过kmax时,需要在kw方向按照该最大卷积核宽度值进行拆分。在这种情况下,除了上面提到的三层循环之外,进一步按照kw的拆分进行循
环处理。
[0146]
还可以理解,当输出特征图的wo维度的大小超过单次计算量时,例如,wo》ncu*ws,则可以将wo按照ncu*ws的拆分进行循环处理。类似地,ho,co也根据需要进行拆分循环处理,也即额外地可以按照wo-》ho-》co的顺序,依次循环处理,其中co按照64拆分。
[0147]
从处理电路在写入运算电路的运算结果时,可以按照先wo维度、后co维度的顺序,将各个运算电路的运算结果存储在例如图5的第三缓冲电路中。从处理电路在输出其内运算电路的输出点时,可以根据输出点的划分方式,按特定顺序输出其内多个运算电路计算的输出点,以使得连续输出的输出点在co维度上连续,方便后续处理。例如,从处理电路在输出各个运算电路的输出点时,可以按照先co维度、再wo维度的顺序输出。
[0148]
从前面运算过程还可以看出,每次计算输出特征图wo维度上ncu*ws个输出点,也即,输出点会对齐到ncu*ws,因此,可能存在多余计算的输出点。在存储运算结果的数据通路上,可以滤除这些wo维度上多余的输出点。
[0149]
进一步地,在存储运算结果的数据通路上,还可以滤除co维度上由于对齐而多余计算的输出点。
[0150]
可选地或附加地,在从第三缓冲电路到第一存储电路的传输过程中,可以对运算结果采用不同的数据读写方案。这些读写方案例如可以参考前面针对输入特征图的读写方案。以下仅做简单描述,详细描述可参考前文。在一些实施例中,运算结果的写入方案可以在写入第一存储电路的最后一步中实施,也即可以在存储运算结果的数据通路上、在对运算结果进行维度转换、填补数据滤除之后执行。本领域技术人员可以理解,也可以调整这些处理的顺序,本披露实施例不限于此。
[0151]
在一些实施例中,为了提高传输和写入效率,可以将输出特征图的输出通道co维度按照输出通道拆分粒度pco进行拆分,并且将每一拆分粒度的数据联合wso倍的宽度维度的数据构成输出特征数据行进行传输,其中pco*wso=m。输出通道拆分粒度pco可以参考前面输入通道拆分粒度pci的方式进行类似地确定,此处不再详述。由此,类似地,在这些实施例中,取决于co维度上的拆分块数,可以采取连续写入或间隔(不连续)写入的方式将运算结果保存到存储电路上。注意,本文的“连续”或“间隔”均是指数据在存储地址上为连续或间隔。
[0152]
在一个示例中,当co维度上的拆分块数为1,也即co维度未进行拆分的情况下,co≤pco,此时一个w上仅包含1个co大小的拆分块。当进行运算结果的存储时,可以从第三缓冲电路的运算结果中读取co*wso大小的输出特征图数据。此时,这wso个w进行存储时,这些w是连续的。由此,在这种情况下,可以将读取的这些输出特征图数据连续地写入第一存储电路中。这可以通过单个写请求一次性写入wso个w的数据,从而简化指令。当然,也可以通过多个写请求写入wso个w的连续数据。
[0153]
在另一示例中,当co维度上的拆分块数不为1时,也即co维度被拆分成多个拆分粒度pco时,此时co>pci,由于一个数据行是由wso*pco构成的,此时需要间隔地写入各个w上的pco大小的数据量。进一步地,考虑到co可能不能被pco整除,因此可以将co维度按照pco分为整数部分和余数部分。继而,可以针对整数部分和余数部分进行分别处理。
[0154]
在一个实现中,针对整数部分,每次从输出的运算结果中读取pco*wso大小的输出特征图数据,这些输出特征图数据可以分成wso个输出特征图数据块,每个输出特征图数据
块在co维度上包括大小为pco的数据。可以理解,考虑到最终期望的数据存储维度为howoco,因此,这些输出特征图数据块内的数据需要连续存储,而输出特征图数据块之间则需要间隔存储,存储的间隔为1*co(wc),也即1个w。由此,在这种情况下,可以将读取的wso个输出特征图数据块间隔地写入第一存储电路中,所写入的各个输出特征图数据块的写入首地址依次间隔co。也即,每次写入pco的数据量,需要写入wso次。换言之,写入wso次,每次等间隔地写入1个w上的pco的数据量。此时可以通过wso个写请求来实现数据写入,每个写请求分别写入对应w上的pco的数据量。
[0155]
在另一实现中,针对余数部分,每次从输出的运算结果中读取co_rem*wso大小的输出特征图数据,这些输出特征图数据同样可以分成wso个输出特征图数据块,每个输出特征图数据块在co维度上包括大小为co_rem的数据,其中co_rem表示co除以pco得到的余数。可以理解,通常余数部分是在整数部分末尾。类似地,可以将读取的wso个输出特征图数据块间隔地写入第一存储电路中,所写入的各个输出特征图数据块的写入首地址依次间隔co。也即,每次写入co_rem的数据量,需要写入wso次。换言之,写入wso次,每次等间隔地写入1个w上的co_rem的数据量。此时可以通过wso个写请求来实现数据写入,每个写请求分别写入对应w上的pco的数据量。可以看出,余数部分与整数部分的间隔写入处理类似,只是写入的数据量略有不同。
[0156]
通过上述间隔写入方式,可以使得每次写入时能够充分利用写入带宽,并且写入后的数据在存储电路上能够保持co维度连续的存储顺序。
[0157]
在上面这些实施例中,每个从处理电路可以根据权值复用和/或输入特征图复用方式,控制权值数据行和输入特征图数据行的读取方式,以通过多次运算将权值数据和输入特征图数据同时遍历卷积输出点的整个卷积窗口执行对位乘累加运算,得到多个部分和结果并累加得到对应卷积输出点上的卷积输出。
[0158]
以下结合具体实施例描述不同场景下本披露实施例的卷积运算时的详细运算过程。
[0159]
实施例1:ci对齐到16b,拆分块数bci=1,co对齐到64
[0160]
在此实施例中,ci对齐到16b,因此一个输入特征数据行的格式为4
×
16b(wici),从而一个运算电路计算的输出块包括1
×
4(cowo)个输出点。co对齐到64,则当ns=16个从处理电路可调度的情况下,每个从处理电路处理4个co值。不防假设卷积核的尺寸为khkw=3
×
3。
[0161]
图10a-图10d示出根据本披露实施例1的卷积运算方案的运算过程示意图。在该示例中,第一缓冲电路的大小为8
×
64b,也即最多可以缓存8行数据。图中示出每行数据包括4列wi数据。第二缓冲电路的大小为9
×
64b,也即最多可以缓存9行数据。
[0162]
图10a示出了针对kh=0,kw=0的循环中,最内层co循环、输入特征图复用的运算过程。按照与输出块的划分方式对应的方式,从第一缓冲电路中选取n
cu
个输入特征行,分别发送给n
cu
个运算电路以供计算。在此后的aco/ns=4次计算期间,这n
cu
个输入特征行分别在n
cu
个运算电路中各复用4次。
[0163]
在这4次计算期间,分别从第二缓冲电路中选取对应不同co值的权值行,广播给从处理电路内的n
cu
个运算电路,其中每个权值行是由1/4个权值行复制3份后扩展而成的。例如,对于图中示例,假设从处理电路为sl0,其处理co=0、16、32、48的四个卷积核。
[0164]
在箭头

所示的第1个计算期间,将存储在第二缓冲电路的第0行中的、对应co=0的卷积核中kw=0的16b(ci维度)数据复制而成的16b*4,广播给4个cu,以与各自接收的输入特征行分别进行对位乘累加运算。注意,由于此时的每个输入特征行包括4个wi,并且权值复制了4份,因此按照1/4个数据行进行对位乘累加,由此得到co=0的4个输出点。具体地,运算电路cu0计算输出点w0、w1、w2和w3,运算电路cu1计算输出点w4、w5、w6和w7,以此类推。可以理解,这些计算的输出点都是部分和,只累加了kh=0、kw=0时的ci方向上的数据。
[0165]
在箭头

所示的第2个计算期间,将存储在第二缓冲电路的第1行中的、对应co=16的卷积核中kw=0的16b(ci维度)数据复制而成的16b*4,广播给4个cu,以与各自接收的输入特征行分别进行对位乘累加运算。注意,由于此时的每个输入特征行包括4个wi,并且权值复制了4份,因此按照1/4个数据行进行对位乘累加,由此得到co=16的4个输出点。具体地,运算电路cu0计算输出点w0、w1、w2和w3,运算电路cu1计算输出点w4、w5、w6和w7,以此类推。
[0166]
类似地,在箭头

所示的第3个计算期间,4个cu计算co=32的16个wo方向上的输出点;在箭头

所示的第4个计算期间,4个cu计算co=48的16个wo方向上的输出点,此处不再展开。由此,针对单个从处理电路处理的4个co值,依次循环处理,获得4个co各自的16个wo维度的输出点。在每个cu的运算中,输入特征行复用4次,而在单个从处理电路的运算中,权值复用ncu*m/pci=4*(64/16)=16次。
[0167]
最内层的co循环处理完后,接着可以进行中间层的kw循环。
[0168]
图10b示出了针对kh=0,kw=1的循环处理。此时,对于kw=1,同样进行与图10a类似的co循环、输入特征图复用的运算过程。不同之处在于选取参与运算的数据:此时从第一缓冲电路中在wi方向滑动一步选取对应的4个输入特征行,分别发送给4个运算电路;以及从第二缓冲电路中依次选取对应不同co值的kh=0、kw=1的权值数据。在此后的4次计算期间,这4个输入特征行分别在4个运算电路中各复用4次,每次分别与不同co值的扩展权值行进行运算。
[0169]
例如,在箭头

所示的第1个计算期间,将存储在第二缓冲电路的第4行中的、对应co=0的卷积核中kw=1的16b(ci维度)数据复制而成的16b*4,广播给4个cu,以与各自接收的输入特征行分别进行对位乘累加运算。可以理解,这些计算的输出点都是部分和,只累加了kh=0、kw=1时的ci方向上的数据。还可以理解,由于输入特征行在wi方向滑动了一步,权值kw也在w方向滑动了一步(kw=1),因此,这些部分和结果仍然属于co=0的wo维度上的16个输出点w0~w15。因此,此次运算得到的部分和累加在上一次(图10a)中运算得到的部分和上。
[0170]
类似地,在箭头

所示的第2个计算期间,4个cu计算co=16的16个wo方向上的输出点的部分和,并累加在图10a的对应计算周期内运算得到的部分和上。在箭头

所示的第3个计算期间,4个cu计算co=32的16个wo方向上的输出点的部分和并进行累加;在箭头

所示的第4个计算期间,4个cu计算co=48的16个wo方向上的输出点的部分并进行累加,此处不再展开。
[0171]
由此,中间层的kw进入下一循环,也即kw=2。
[0172]
图10c示出了针对kh=0,kw=2的循环处理。此时,对于kw=2,同样进行与图10a和图10b类似的co循环、输入特征图复用的运算过程。不同之处在于选取参与运算的数据:此
时从第一缓冲电路中在wi方向再次滑动一步选取对应的4个输入特征行,分别发送给4个运算电路;以及从第二缓冲电路中依次选取对应不同co值的kh=0、kw=2的权值数据。从图中可以看出,由于第二缓冲电路的缓冲空间有限,会循环加载数据,kw=2的数据放置第0~3行,冲刷了原来kw=0的权值数据。可以理解,缓冲电路的大小不限于图示示例,相应的存储顺序也不限于图示情形,本领域技术人员根据实际使用的硬件可以适应性调整使用。
[0173]
图示中4个计算周期的部分和结果对应地累加到前次的累加结果上,运算过程与前面类似,此处不再重复描述。
[0174]
由此,中间层的kw循环处理完后,接着可以进行外层的kh循环。在此示例中,由于ci维度上的拆分块数为1,因此无需进行ci维度上的拆分块的循环。
[0175]
图10d示出了针对kh=1,kw=0的循环处理。此时,对于kh=1,同样进行与图10a类似的co循环、输入特征图复用的运算过程。不同之处在于选取参与运算的数据:此时第一缓冲电路中的输入特征数据更新为对应于hi=1的特征行,并且从首行开始选取对应的4个输入特征行,分别发送给4个运算电路;以及从第二缓冲电路中依次选取对应不同co值的kh=1、kw=0的权值数据。
[0176]
例如,在箭头

所示的第1个计算期间,将存储在第二缓冲电路的第4行中的、对应co=0的卷积核中kh=1、kw=0的16b(ci维度)数据复制而成的16b*4,广播给4个cu,以与各自接收的输入特征行分别进行对位乘累加运算。可以理解,这些计算的输出点都是部分和,只累加了kh=1、kw=0时的ci方向上的数据。还可以理解,由于输入特征行的hi=1,权值kh=1,因此,这些部分和结果仍然属于co=0的wo维度上的16个输出点w0~w15。因此,此次运算得到的部分和累加在上一次(图10c)中运算得到的部分和上。其余3个计算周期类似,不再重复。
[0177]
由此,当外层的kh循环也处理完后,每个运算电路可以累加得到4个co各4输出点的最终卷积结果。1个从处理电路内的4个运算电路则获得4个co各4*4=16个输出点。16个从处理电路总计获得16*4=64个co各16个输出点。
[0178]
可以理解,受限于第一缓冲电路和第二缓冲电路的大小,当kw超过一定值时,需要在kw方向遍历,同时切换输入和权值,直到计算出完整的输出。此外,当输出特征图的大小超过单次计算量时,可以按照wo-》ho-》co的顺序,依次循环处理,其中co按照64拆分。本领域技术人员根据前述描述可以类似地推导出其计算过程,此处不再赘述。
[0179]
图11示出了根据本披露实施例1的运算结果的写入和输出逻辑示意图。
[0180]
如图所示,单个从处理电路sl内的多个运算电路cu可以根据运算顺序,将运算结果依次写入结果缓冲电路(例如图5的第三缓冲电路)中。具体地,可以首先按照wo顺序,写入各个cu计算的同一co的输出点(写入循环

)。接着按照co顺序,写入各个cu计算的不同co的输出点(写入循环

)。例如对于sl0,首先写入co=0的w0~w15,接着写入co=16的w0~w15,然后是co=32的w0~w15,最后是co=48的w0~w15。其他sl内进行类似的结果写入,只不过处理的co值不同。
[0181]
从上述写入顺序可以看出,结果缓冲电路中运算结果按照cw(w在最低存储维度)的顺序存储。然而最终的输出结果期望是hwc存储顺序(c在最低存储维度),因此,在从结果缓冲电路中读出结果的数据通路上,可以将数据从cw顺序转换为wc顺序。
[0182]
具体地,如图所示,可以首先按照co顺序依次从各个从处理电路的结果缓冲电路
中读取w维度的首个输出点w0(读出循环

),接着按照wo顺序,读出各个wo上的输出点(读出循环

)。图11中右侧视图示出了读出结果,注意,在按照co顺序读取时,在16个sl的结果缓冲电路上轮流读取,以使得co维度是连续的,例如从0~63。
[0183]
从上述运算过程可知,由于使用相邻的w维度来补偿ci维度的不足,因此,无需对输入特征图和卷积核进行额外的软件摆数处理,简化了处理过程和指令开销。进一步地,从输出数据的格式也可以看出,由于在读出的数据通路上将数据从cw顺序转换为wc顺序,也无需对输出特征图进行额外的软件摆数处理,避免了复杂的软件参数配置。此外,从运算的循环过程可以看出,由于仅在wo维度上对输出特征图进行拆分处理,因此可以支持h维度任意大小的卷积步长。
[0184]
实施例2:ci对齐到16b,拆分块数bci=3,co对齐到32
[0185]
不同于前面的实施例,在此实施例中,ci维度上存在多个拆分块。具体地,ci=48b,拆分粒度pci=16b,从而存在3个拆分块,因此在循环计算中,外层循环多了拆分块层级的循环。
[0186]
此时,一个输入特征数据行的格式为4
×
16b(wici),从而一个运算电路计算的输出块包括1
×
4(cowo)个输出点。co对齐到32,则当ns=16个从处理电路可调度的情况下,每个从处理电路处理2个co值。不防假设卷积核的尺寸为khkw=3
×
3。
[0187]
图12示出根据本披露实施例2的卷积运算方案的运算过程示意图。在该示例中,第一缓冲电路和第二缓冲电路与实施例1的配置相同。
[0188]
图中示出了针对bci=0,kh=0,kw=0的循环中,最内层co循环、输入特征图复用的运算过程。按照与输出块的划分方式对应的方式,从第一缓冲电路中选取4个输入特征行,分别发送给4个运算电路以供计算。这些输入特征行对应于输入特征图中hi=0,bci=0,wi=0~15的数据部分。在此后的aco/ns=2次计算期间,这4个输入特征行分别在4个运算电路中各复用2次。
[0189]
在这2次计算期间,分别从第二缓冲电路中选取对应不同co值的权值行,广播给从处理电路内的4个运算电路,其中每个权值行是由1/4个权值行复制3份后扩展而成的,而这1/4个权值行则是在ci维度上按照pci=16b的粒度拆分得到的。例如,对于图中示例,假设从处理电路为sl0,其处理co=0、16的两个卷积核,每个卷积核中取kw=0,kh=0,bci=0的数据部分进行复制扩展。
[0190]
在箭头

所示的第1个计算期间,将存储在第二缓冲电路的第0行中的、对应co=0的卷积核中kw=0的16b(ci维度)数据复制而成的16b*4,广播给4个cu,以与各自接收的输入特征行分别进行对位乘累加运算。注意,由于此时的每个输入特征行包括4个wi,并且权值复制了4份,因此按照1/4个数据行进行对位乘累加,由此得到co=0的1个输出点。具体地,运算电路cu0计算输出点w0,运算电路cu1计算输出点w1,以此类推。可以理解,这些计算的输出点都是部分和,只累加了kh=0、kw=0、bci=0这一部分的数据。
[0191]
类似地,在箭头

所示的第2个计算期间,4个cu计算co=16的16个wo方向上的输出点,此处不再展开。由此,针对单个从处理电路处理的2个co值,依次循环处理,获得2个co各自的16个wo维度的输出点。在每个cu的运算中,输入特征行复用2次,而在单个从处理电路的运算中,权值复用ncu*m/pci=4*(64/16)=16次。
[0192]
最内层的co循环处理完后,接着可以进行中间层的kw循环,然后是外层的kh循环
和bci循环。kw循环和kh循环过程可以参考实施例1,此处不再重复。
[0193]
针对bci循环,在一种实现中,可以在kw循环之后,更新第一缓冲电路和第二缓冲电路中的数据,例如,在前面针对bci=0的数据块运算完后,再加载bci=1的数据块,同样针对kw和co维度进行循环。在各次运算中得到的仍然是对应输出点的部分和,因此可以累加在之前的部分和结果上。在另一种实现中,可以在kh循环之后,更新第一缓冲电路和第二缓冲电路中的数据,运算过程与前面类似,此处不再详述。
[0194]
解除卷积步长限制的示例性方案
[0195]
从前面结合具体实施例对wfold卷积滑动计算过程的描述可知,由于仅在w维度上对输入特征图进行折叠处理,不改变h维度的数据,因此其对h维度不存在限制,可以支持h维度任意大小的卷积步长。但是w维度的卷积步长则受限于w维度的折叠,其卷积步长仅支持1。
[0196]
为了解除wfold卷积方案中的这种步长限制,本披露实施例还提供了一种数据处理方案,通过对输入特征图和卷积核进行预处理,使得wfold卷积方案不仅可以支持h维度任意大小的卷积步长,而且支持w维度任意大小的卷积步长。
[0197]
发明人注意到,在wfold卷积方案中,硬件无法处理w维度上卷积步长大于1的场景。但是考虑到ci维度是最低维度,w维度是次低维度,因此可以很容易地在运算任务编译期进行性能优化方式将w维度折叠到ci维度上。换言之,通过将w维度折叠到ci维度上,可以将w维度上大于1的卷积步长sw折叠成等于1的卷积步长sw’。折叠后的数据可以仍然按照前文介绍的wfold卷积方案进行处理,从而w维度上每滑动1步,实质相当于滑动sw步。由此,wfold卷积方案可以支持w和h维度上任意大小的卷积步长。
[0198]
图13示出了根据本披露实施例的解除w维度卷积步长限制的示意性原理图示。在此示例中,假设输入特征图的h维度大小hi=4,w维度大小wi=5;卷积核的尺寸为kh*kw=3
×
3,w维度的卷积步长sw=2。
[0199]
图(a)示出了优化处理前的输入特征图,其中使用不同阴影图案示出最上面一层(对应hi值为0)、按w维度划分的数据块w0~w4。为了使得在w维度上每滑动1步相当于2步,可以将w维度按照卷积步长sw进行折叠,因此需要对齐到sw。在此示例中,wi=5,对齐到2则w维度需要填补1列零。图中用白色方块w5示出了补零数据,其位于w维度的最末端。
[0200]
类似地,图(b)示出了优化前的卷积核,其中使用不同阴影图案示出最上面一层(对应kh值为0)、按kw维度划分的数据块kw0~kw2。由于输入特征图的w维度发生了折叠,为了保持卷积运算中的对位乘累加运算,卷积核的w维度也需要进行对应地折叠。具体地,将卷积核的w维度对齐到sw。在此示例中,kw=3,对齐到2则w维度需要填补1列零。图中用白色方块kw3示出了补零数据,其也位于w维度的最末端。
[0201]
继而,可以转换输入特征图和卷积核的数据形状。
[0202]
图(c)示出了输入特征图的优化形状。可以看出,输入特征图的数据形状由原形状hi*wi*ci转换为优化形状hi*ceil(wi/sw)*(sw*ci),ceil()表示向上取整。在此示例中,输入特征图的原形状为4*5*ci,优化形状为4*3*2ci。从形状转换可以看出,从输入特征图的w维度拆分sw倍(此示例为2倍)的数据补至c维度。
[0203]
类似地,图(d)示出了卷积核的优化形状。可以看出,卷积核的数据形状由原形状co*kh*kw*ci转换为优化形状co*kh*ceil(kw/sw)*(sw*ci)。在此示例中,卷积核的原形状
为co*3*3*ci,优化形状为co*3*2*2ci。
[0204]
此时,由于c维度和w维度是连续维度,因此实质上,上述形状转换对于物理存储地址上数据并不会发生变化,不需要进行任何数据搬运。只需要在提供卷积运算参数时,将输入特征图和卷积核的形状参数设置为上述优化形状即可。
[0205]
此外,通过上述形状优化可以看出,卷积核每在输入特征图的w维度上滑动一步,实质相当于滑动sw步,因此还需将卷积运算的w维度的卷积步长参数设置为1。
[0206]
以图13的示例为例,从图(a)和(c)看来,输出特征图的w维度上的第一个输出点wo0,对应于输入特征数据块w0~w2与卷积核数据块kw0~kw2的对位乘累加(为了简化描述,此处暂不考虑h维度上的累加,本领域技术人员可以理解,每个h值上的处理是类似的)。从图(b)和(d)看来,输出特征图的w维度上的第一个输出点wo0对应于输入特征数据块w0~w3与卷积核数据块kw0~kw3的对位乘累加。由于卷积核数据块kw3是通过补零填充的,因此wo0的实质结果仍然对应于输入特征数据块w0~w2与卷积核数据块kw0~kw2的对位乘累加,也即与图(a)和(c)的运算结果一致。
[0207]
针对下一输出点wo1,从图(a)和(c)看来,需要滑动2步,此时wo1对应于输入特征数据块w2~w4与卷积核数据块kw0~kw2的对位乘累加。从图(b)和(d)看来,只需要滑动1步,wo1对应于输入特征数据块w2~w5与卷积核数据块kw0~kw3的对位乘累加。同样,由于卷积核数据块kw3是通过补零填充的,因此wo1的实质结果仍然对应于输入特征数据块w2~w4与卷积核数据块kw0~kw2的对位乘累加,也即与图(a)和(c)的运算结果一致。
[0208]
由此可见,通过进行w维度的折叠,可以实现折叠后的w维度滑动1步,相当于原来的sw步,从而仍然可以使用前文描述的wfold卷积方案进行运算。换言之,通过与上述数据处理方案进行配合,wfold卷积方案可以适用于w维度和h维度任意大小的卷积运算。
[0209]
在一些实施例中,上述数据处理方案可以在将输入特征图和卷积核从片外存储电路(例如图2的dram)搬运到片内存储电路(例如图3的nram、wram)的数据通路上执行。也即在从片外存储电路加载待运算数据时,直接对待运算数据进行上述处理后存放在片内存储电路上。更具体地,可以首先根据卷积步长sw和数据形状等参数,计算处理后数据的存储空间大小,从而在片内存储电路上分配对应容量的存储空间并全部初始化为零。继而,可以直接将片外存储电路上的数据按照对齐后的存储顺序加载到片内存储电路的对应位置即可。此后,计算装置基于这些数据的优化形状执行wfold卷积方案,无需进行额外处理。
[0210]
在另一些实施例中,上述数据处理方案可以在将输入特征图和卷积核从第一片内存储电路(例如图5的第一存储电路、第二存储电路)搬运到执行卷积运算的运算电路本地的第二片内存储电路(例如图5的第一缓冲电路、第二缓冲电路)的数据通路上执行。也即,此数据处理步骤可以融合在wfold卷积方案的数据准备过程中。
[0211]
可选地或附加地,上述数据处理方案可以在根据卷积运算的边界扩充参数进行边界扩充的同时执行。例如,如果原始边界扩充参数包括上、下、左、右四个方向的扩充,则在融合本披露的数据处理方案时,只需要根据对齐要求选择性调整右边的边界扩充参数即可。
[0212]
在又一些实施例中,上述数据处理方案针对输入特征图和卷积核中任一可以在同一存储电路的不同存储区域上执行。例如,第一存储区域用于存储处理前的数据,第二存储区域用于存储处理后的数据。为了优化存储空间,第一存储区域和第二存储区域可以存在
重叠空间。在这种示例中,可以根据卷积步长sw和待处理的数据形状尺寸,预先计算出处理后的数据所需的存储空间,从而分配一个能够容纳处理后的数据所需的存储空间。接着,处理前的数据可以存放在该存储空间的一端,例如尾端,此部分区域可以称为第一存储区域。在处理过程中,从第一存储区域中顺次读取数据,选择性补零后写入该存储空间的另一端,例如首端,此部分区域可以称为第二存储区域。在此动态处理过程中,第一存储区域内的未读取数据逐渐减少,第二存储区域内写入的数据逐渐增多,并且可以覆盖第一存储区域中已读取数据的部分。通过这种方式,可以节省存储空间。
[0213]
需要理解,虽然上面将输入特征图与卷积核的搬运放在一起描述,但是二者可以分开,并且二者的数据通路和存储电路也可以不同,具体可以参考前文的描述。
[0214]
图14示出了可以实施本披露实施例的数据处理方案的数据处理装置1400的硬件配置的示意性框图。如图所示,数据处理装置1400可以包括控制电路1410、第一存储区域1420、第二存储区域1430和运算单元1440。在图14的数据处理装置1400中,仅示出了与本实施例有关的组成元素。因此,对于本领域普通技术人员而言显而易见的是:数据处理装置1400还可以包括与图14中所示的组成元素不同的常见组成元素。
[0215]
数据处理装置1400可以对应于具有各种处理功能的计算设备。例如,数据处理装置1400可以被实现为各种类型的设备,例如个人计算机(pc)、服务器设备、移动设备等。
[0216]
第一存储区域1420用于存储处理前的输入特征图和卷积核。控制电路1410用于根据卷积运算中宽度w维度的卷积步长sw,将第一存储区域中的输入特征图和卷积核的w维度分别对齐到卷积步长sw,并存储在第二存储区域中;将输入特征图的数据形状由原形状hi*wi*ci设置为优化形状hi*ceil(wi/sw)*(sw*ci),表示从输入特征图的次低存储维度w拆分sw倍的数据补至最低存储维度c,hi是输入特征图的最高存储维度h的原始大小,wi是次低存储维度w的原始大小,ci是最低存储维度c的原始大小;将卷积核的数据形状由原形状co*kh*kw*ci设置为优化形状co*kh*ceil(kw/sw)*(sw*ci),其中co是卷积核的最高存储维度的原始大小,kh是次高存储维度h的原始大小,kw是次低存储维度w的原始大小,ci是最低存储维度c的原始大小;以及将卷积运算的w维度的卷积步长设置为1。第二存储区域1430用于按照对齐后的存储顺序存储控制电路1410处理后的输入特征图和卷积核。运算单元1440用于将第二存储区域1430内的输入特征图和卷积核执行卷积运算。运算单元1440可以具体实现为图5所示的主从结构的计算装置500,因此前文针对计算装置500的描述也可以同样应用于运算单元1440。
[0217]
取决于上述数据处理方案在哪个阶段实施,控制电路1410可以对应不同的处理电路,相应地,第一存储区域1420和第二存储区域1430也可以对应不同的存储电路。
[0218]
在一些实施例中,上述数据处理方案可以在将输入特征图和卷积核从片外存储电路搬运到片内存储电路(例如图3的nram、wram)的数据通路上执行。此时,控制电路1410可以对应于图5的主处理电路,第一存储区域则可以位于图2的dram上,第二存储区域位于图3的nram或wram上。
[0219]
在另一些实施例中,上述数据处理方案可以在将输入特征图和卷积核从第一片内存储电路搬运到执行卷积运算的运算电路本地的第二片内存储电路的数据通路上执行。此时,控制电路1410可以对应于图5的主处理电路或从处理电路,第一存储区域则可以位于图5的第一存储电路或第二存储电路上,第二存储区域位于图5的第一缓冲电路或第二缓冲电
路上。
[0220]
在又一些实施例中,上述数据处理方案针对输入特征图和卷积核中任一可以在同一存储电路的不同存储区域上执行。例如,可以在图3的nram上对输入特征图进行上述处理。此时,第一存储区域和第二存储区域都是nram上的区域,这两个区域可以存在重叠,以便尽可能利用存储空间。具体实现方式可以参考前文的描述。
[0221]
可以理解,上面的数据处理装置的各个电路/单元的划分仅仅是示例性并从功能上进行划分的。尽管在图中将各个电路或单元示出为分立的模块,但是根据不同的配置,这些电路或单元可以合并成一个模块。例如,控制电路可以是运算单元中的主处理电路或从处理电路,控制电路也可以是独立于运算单元的电路。本披露实施例在此方面没有限制。综上,本说明书实施方式提供的数据处理装置实现的具体功能,可以与本说明书中的前述实施方式相对照解释,并能够达到前述实施方式的技术效果,这里便不再赘述。
[0222]
以上结合几个实施例的具体卷积运算过程对本披露实施例提供的卷积优化方案进行了示例性描述和阐释。可以理解,取决于ci和co的不同取值,还可以有更多种组合方式,从而获得不同实施例。此外,基于本披露的教导,本领域技术人员可以根据具体的硬件电路配置(诸如从处理电路的个数、从处理电路内的运算电路的个数、硬件单次处理能力等)设想出其他的卷积优化方案,其均落入本披露公开范围内,此处不再一一枚举。
[0223]
本披露实施例还提供了一种芯片,其可以包括前面结合附图描述的任一实施例的数据处理装置。进一步地,本披露还提供了一种板卡,该板卡可以包括前述芯片。
[0224]
根据不同的应用场景,本披露的电子设备或装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、pc设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、b超仪和/或心电图仪。本披露的电子设备或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。进一步,本披露的电子设备或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据本披露方案的算力高的电子设备或装置可以应用于云端设备(例如云端服务器),而功耗小的电子设备或装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
[0225]
需要说明的是,为了简明的目的,本披露将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本披露的方案并不受所描述的动作的顺序限制。因此,依据本披露的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本披露所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本披露某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本披露对一些实施例的描述也各有侧重。鉴于此,本领
域技术人员可以理解本披露某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
[0226]
在具体实现方面,基于本披露的公开和教导,本领域技术人员可以理解本披露所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行拆分,而实际实现时也可以有另外的拆分方式。又例如,可以将多个单元或组件结合或者集成到另一个系统,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
[0227]
在本披露中,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元示出的部件可以是或者也可以不是物理单元。前述部件或单元可以位于同一位置或者分布到多个网络单元上。另外,根据实际的需要,可以选择其中的部分或者全部单元来实现本披露实施例所述方案的目的。另外,在一些场景中,本披露实施例中的多个单元可以集成于一个单元中或者各个单元物理上单独存在。
[0228]
在另外一些实现场景中,上述集成的单元也可以采用硬件的形式实现,即为具体的硬件电路,其可以包括数字电路和/或模拟电路等。电路的硬件结构的物理实现可以包括但不限于物理器件,而物理器件可以包括但不限于晶体管或忆阻器等器件。鉴于此,本文所述的各类装置(例如计算装置或其他处理装置)可以通过适当的硬件处理器来实现,例如中央处理器、gpu、fpga、dsp和asic等。进一步,前述的所述存储单元或存储装置可以是任意适当的存储介质(包括磁存储介质或磁光存储介质等),其例如可以是可变电阻式存储器(resistive random access memory,rram)、动态随机存取存储器(dynamic random access memory,dram)、静态随机存取存储器(static random access memory,sram)、增强动态随机存取存储器(enhanced dynamic random access memory,edram)、高带宽存储器(high bandwidth memory,hbm)、混合存储器立方体(hybrid memory cube,hmc)、rom和ram等。
[0229]
以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本披露的方法及其核心思想;同时,对于本领域的一般技术人员,依据本披露的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本披露的限制。

技术特征:
1.一种数据处理装置,包括控制电路、第一存储区域、第二存储区域和运算单元,其中:所述第一存储区域用于存储处理前的输入特征图和卷积核;所述控制电路用于:根据卷积运算中宽度w维度的卷积步长sw,将所述第一存储区域中的输入特征图和卷积核的w维度分别对齐到所述卷积步长sw,并存储在所述第二存储区域中;将所述输入特征图的数据形状由原形状hi*wi*ci设置为优化形状hi*ceil(wi/sw)*(sw*ci),表示从所述输入特征图的次低存储维度w拆分sw倍的数据补至最低存储维度c,hi是输入特征图的最高存储维度h的原始大小,wi是次低存储维度w的原始大小,ci是最低存储维度c的原始大小;将所述卷积核的数据形状由原形状co*kh*kw*ci设置为优化形状co*kh*ceil(kw/sw)*(sw*ci),其中co是卷积核的最高存储维度的原始大小,kh是次高存储维度h的原始大小,kw是次低存储维度w的原始大小,ci是最低存储维度c的原始大小;以及将所述卷积运算的w维度的卷积步长设置为1;所述第二存储区域用于按照对齐后的存储顺序存储所述控制电路处理后的输入特征图和卷积核;以及所述运算单元用于将所述第二存储区域内的输入特征图和卷积核执行卷积运算。2.根据权利要求1所述的装置,其中所述控制电路进一步用于:通过补零填充,将所述输入特征图和卷积核的w维度的大小分别补齐到sw的倍数。3.根据权利要求2所述的装置,其中所述控制电路进一步用于:在所述输入特征图和卷积核的w维度的末端补充相应数量的零。4.根据权利要求1-3任一所述的装置,其中所述第一存储区域位于片外存储电路上,所述第二存储区域位于片内存储电路上。5.根据权利要求1-3任一所述的装置,其中所述第一存储区域位于第一片内存储电路上,所述第二存储区域位于执行所述卷积运算的运算电路本地的第二片内存储电路上。6.根据权利要求1-5任一所述的装置,其中所述控制电路进一步用于:在根据所述卷积运算的边界扩充参数进行边界扩充的同时执行所述对齐。7.根据权利要求1-6任一所述的装置,其中所述运算单元包括主处理电路和多个从处理电路;其中,所述主处理电路,用于基于所述输入特征图的优化形状,将所述输入特征图的最低存储维度sw*ci维度对齐到输入通道拆分粒度pci,并且将每一拆分粒度的数据联合ws倍的宽度维度的数据构成输入特征数据行广播给多个所述从处理电路以执行所述卷积运算,其中pci*ws=m,m是硬件单次处理数据量;并且多个所述从处理电路,用于分别对广播的所述输入特征图和分配给所述从处理电路的对应卷积核按照w维度的卷积步长为1执行卷积运算。8.根据权利要求7所述的装置,其中所述卷积核在被分发给各个从处理电路时,所述卷积核的最低存储维度sw*ci被对齐到所述pci,并根据所述宽度维度的倍数ws,将在ci维度上按照pci拆分的或对齐到pci的一列输入通道数据块复制扩展成ws列,构成一个扩展权值数据行,以与所述输入特征数据行进行卷积运算。9.根据权利要求8所述的装置,其中每个所述从处理电路进一步用于按如下维度顺序、
多层循环执行所述卷积运算:每个所述从处理电路分配的卷积核的co维度作为最内层循环;卷积核的kw维度作为中层循环;以及卷积核的kh维度和ci维度按pci拆分的块数bci作为外层循环。10.一种芯片,包括根据权利要求1-9任一所述的数据处理装置。11.一种板卡,包括根据权利要求10所述的芯片。

技术总结
本披露公开了一种数据处理装置、芯片和板卡。该数据处理装置可以作为计算装置包括在组合处理装置中,该组合处理装置还可以包括接口装置和其他处理装置。该计算装置与其他处理装置进行交互,共同完成用户指定的计算操作。组合处理装置还可以包括存储装置,该存储装置分别与计算装置和其他处理装置连接,用于存储该计算装置和其他处理装置的数据。本披露的方案对数据进行处理,扩大了卷积运算的适用范围,提高了运算处理效率。提高了运算处理效率。提高了运算处理效率。


技术研发人员:ꢀ(74)专利代理机构
受保护的技术使用者:上海寒武纪信息科技有限公司
技术研发日:2021.11.19
技术公布日:2022/3/7

最新回复(0)