CN116150556A - 执行卷积运算的计算装置、方法及相关产品 - Google Patents

执行卷积运算的计算装置、方法及相关产品 Download PDF

Info

Publication number
CN116150556A
CN116150556A CN202111401514.4A CN202111401514A CN116150556A CN 116150556 A CN116150556 A CN 116150556A CN 202111401514 A CN202111401514 A CN 202111401514A CN 116150556 A CN116150556 A CN 116150556A
Authority
CN
China
Prior art keywords
dimension
output
data
convolution
circuits
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
Application number
CN202111401514.4A
Other languages
English (en)
Inventor
请求不公布姓名
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Cambricon Technologies Corp Ltd
Original Assignee
Cambricon Technologies Corp Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Cambricon Technologies Corp Ltd filed Critical Cambricon Technologies Corp Ltd
Priority to CN202111401514.4A priority Critical patent/CN116150556A/zh
Priority to PCT/CN2022/099770 priority patent/WO2023087698A1/zh
Publication of CN116150556A publication Critical patent/CN116150556A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Databases & Information Systems (AREA)
  • Algebra (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Computational Linguistics (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Complex Calculations (AREA)

Abstract

本披露公开了一种计算装置、利用计算装置执行卷积运算的方法及相关产品。该计算装置可以包括在组合处理装置中,该组合处理装置还可以包括接口装置和其他处理装置。该计算装置与其他处理装置进行交互,共同完成用户指定的计算操作。组合处理装置还可以包括存储装置,该存储装置分别与计算装置和其他处理装置连接,用于存储该计算装置和其他处理装置的数据。本披露的方案对卷积运算进行优化,提高了数据复用效率,由此提高了运算处理效率。

Description

执行卷积运算的计算装置、方法及相关产品
技术领域
本披露一般地涉及数据处理领域。更具体地,本披露涉及一种计算装置、利用该计算装置执行卷积运算的方法、芯片和板卡。
背景技术
目前,深度学习(Deep Learning)已经成为机器学习中的重要分支,也大力助推着人工智能(AI)的发展。深度学习的核心技术——深度神经网络(DNN)已在诸多行业有着广泛的应用。
神经网络是人工智能、深度学习中最为关键的技术之一,其中卷积神经网络(Convolution Neural Network,CNN)是最为重要的一种网络类型。卷积神经网络中最为关键的计算即为卷积层(Conv layer)的卷积运算(Convolution Operation)。卷积层的功能是对输入数据进行特征提取,通过多层卷积,能够抽取复杂特征,以保证网络具有足够的表达能力和泛化能力。神经网络模型中包含了大量的、各种类型的卷积运算,卷积运算的计算性能极大地影响整个神经网络模型的计算性能。当神经网络模型应用于不同领域时,例如语音识别、机器翻译、图像处理等等,其对应的输入特征图和权值的各个维度大小可能各有不同。为了充分利用深度学习处理器的硬件优势,需要针对不同规模的、和/或不同类型的卷积运算进行优化,以提高执行神经网络模型的计算性能。
发明内容
为了至少解决如上所提到的一个或多个技术问题,本披露在多个方面中提出了一种计算装置,其通过对输入特征图的宽度维度进行折叠处理,可以使得各种维度尺寸的数据能够适配卷积运算的硬件,从而提高卷积运算的计算效率。本披露实施例的卷积运算可以是各种神经网络模型中的运算,这些神经网络模型可以应用于各种领域,诸如图像处理、语音处理、文本处理等等,这些处理例如可以包括但不限于识别和分类。
在第一方面中,本披露实施例提供了一种计算装置,包括多个从处理电路,每个从处理电路包括第一缓冲电路、第二缓冲电路和多个运算电路,其中:所述第一缓冲电路用于缓存将要执行卷积运算的多个输入特征行,其中一个输入特征行包括输入特征图中Pci×Ws=M的数据量,其中Pci为输入通道Ci维度的拆分粒度,Ws为宽度W维度的折叠倍数,M是硬件单次处理数据量;所述第二缓冲电路用于缓存将要执行卷积运算的权值数据;以及每个所述运算电路用于在每次计算时,针对分别从所述第一缓冲电路中选取的输入特征行和从所述第二缓冲电路中选取的或生成的扩展权值行执行对位乘累加运算,其中一个扩展权值行由卷积核在Ci维度上按照Pci拆分或对齐到Pci的一列数据块复制扩展成Ws列而构成。
在第二方面中,本披露实施例提供了一种芯片,其包括前述第一方面的计算装置。
在第三方面中,本披露实施例提供了一种板卡,其包括前述第二方面的芯片。
根据如上所提供的计算装置、芯片、板卡以及由计算装置实施卷积运算的方法,本披露实施例的方案针对不同维度尺寸的输入特征图应用不同的宽度维度折叠方案,以适应硬件运算装置的处理能力,从而充分利用多个从处理电路的并行处理能力,可以有效提高卷积运算的运算效率。进一步地,可以基于低于一个权值行的粒度来复用权值,从而减少频繁的数据加载,提升计算效率。其他的优势和效果从后面结合附图的详细描述中将变得易于理解。
附图说明
通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,并且相同或对应的标号表示相同或对应的部分,其中:
图1示出本披露实施例的板卡的结构图;
图2示出本披露实施例的组合处理装置的结构图;
图3示出本披露实施例的单核或多核计算装置的处理器核的内部结构示意图;
图4示出可以应用本披露实施例的示例性卷积运算原理示例;
图5示出了根据本披露实施例的计算装置的示意性结构框图;
图6a-图6c示出了根据本披露实施例的几种数据宽度维度折叠示例;
图7示意性示出了根据本披露一些实施例的输入特征图的示意性存储方式;
图8示出了根据本披露实施例的卷积核存储方式示意图;
图9示出了根据本披露实施例的计算单个卷积输出点的示例性循环示意图;
图10示出了根据本披露一些实施例的H维度上复用输入特征图数据的运算示意图;
图11示出了根据本披露实施例的输出特征图的示意性拆分方式;
图12a-图12c示出根据本披露实施例的卷积运算方案的运算过程示意图;以及
图13示出了根据本披露实施例的运算结果的写入和输出逻辑示意图。
具体实施方式
下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
应当理解,本披露的权利要求、说明书及附图中可能出现的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。
示例性硬件环境
图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可以包括单片机(Micro Controller 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的数据。
图3示出了计算装置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间的数据搬运。
示例性卷积运算类型
基于前述硬件环境,在一个方面中,本披露实施例提供了一种计算装置,其配置用于执行卷积运算,从而可以对例如神经网络模型中的卷积运算进行优化。神经网络模型中的卷积层可以执行卷积运算,通过对输入特征图(也称为输入数据、神经元或输入神经元)应用卷积核(也称为过滤器、权值等)做卷积处理,从而进行特征提取。卷积层内部可以包含多个卷积核,组成卷积核的每个元素对应一个权重系数和一个偏差量bias。
神经网络模型中可能包含各种卷积运算层,例如执行正向、常规3D卷积运算的卷积层、执行深度(Depthwise)卷积运算的反卷积层。而在反向训练中,可能需要执行反向的深度卷积运算或叉乘卷积运算。本披露实施例主要针对常规3D卷积运算进行优化,在不冲突的情况下,也可以应用于其他类型的卷积运算。
在常规3D卷积运算中,假设卷积层中输入特征图(Feature map)张量形状表示为X[N Hi Wi Ci],卷积核(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维度上是全连接的。卷积核在工作时,会按照一定的步长扫过输入特征,在卷积窗口内对输入特征做矩阵元素乘法求和并叠加偏差量。在常规3D卷积运算中,H、W和Ci方向的对位乘积结果会进行累加,因此称为3D卷积。但是这种3D卷积存在约束条件:卷积核的Ci维度大小和输入特征图的Ci维度大小相等,因此卷积核不在Ci方向滑动,是一种伪3D卷积。为了简单起见,上述卷积运算称为3D卷积运算。
图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按照一定的步长扫过输入特征图440a,在卷积窗口470内对输入特征做矩阵元素乘法求和并叠加偏差量。也即,输出特征图460中每个位置上的值由每个输入特征图的对应区块和对应卷积核做二维卷积运算之后再加和得到。例如,图中示出了输出特征图460上(0,0)位置的值(也即卷积输出点)由输入特征图中黑色立方体框出的卷积窗口470与立体卷积核450进行二维卷积运算得到3个值,再加和得到最终值。
为了得到其他位置的输出,可以在输入特征图440上移动卷积核450的位置,也即移动卷积输出点的卷积窗口。在图中示例中,卷积步长(Sx,Sy)为(1,1),当横向(宽度方向)向右或纵向(高度方向)向下移动一格后做卷积运算,可以分别得到输出特征图460a上(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可以是同一存储器划分形成的两个存储块,也可以是两个独立的存储器,此处不做具体限定。
第一存储电路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相邻。当存储顺序与维度顺序保持一致时,相邻的维度在存储器上的位置是连续的。此处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与M相除得到的余数较小时,例如小于一个缓存行的大小,则需将Ci维度补齐到一行数据(例如,512比特),即填充无效数据0。这种填充会造成大量的冗余计算,导致资源浪费,降低了运算的效率。
已知提出了一种适合通道C较小情形的小卷积方案,其中将运算数据按照拆分单元进行拆分并转换维度顺序存储。一个拆分单元包含的数据量可以设置成硬件的一次性处理对齐值M,从而以拆分单元为单位进行运算处理,可以充分发挥硬件的算力,避免或减少无效计算。
然而,在这种小卷积方案中,输入特征图和卷积核都需要预先通过软件进行分块和维度转换处理,输出特征图也需要通过软件进行相应地分块和维度转换处理,这无疑增加了软件的复杂度。此外,在这些分块和维度转换处理中,还需要软件进行对齐处理。进一步地,这些小卷积方案仅支持宽度和高度方向的卷积步长均为1的卷积运算。
鉴于此,为了进一步优化卷积运算,减少软件复杂度,本披露实施例提供了一种宽度维度折叠的卷积方案,其通过仅在需要时将与输入特征图的输入通道Ci维度连续的宽度W维度的数据补偿到Ci维度,省去了软件进行数据分块和维度转换处理。
具体地,在一些实施例中提供了一种计算装置,包括多个从处理电路,每个从处理电路包括第一缓冲电路、第二缓冲电路和多个运算电路,其中:第一缓冲电路用于缓存将要执行卷积运算的多个输入特征行,其中一个输入特征行包括输入特征图中Pci×Ws=M的数据量,其中Pci为输入通道Ci维度的拆分粒度,Ws为宽度W维度的折叠倍数,M是硬件单次处理数据量;第二缓冲电路用于缓存将要执行卷积运算的权值数据;以及每个运算电路用于在每次计算时,针对分别从第一缓冲电路中选取的输入特征行和从第二缓冲电路中选取的或生成的扩展权值行执行对位乘累加运算,其中一个扩展权值行由卷积核在Ci维度上按照Pci拆分或对齐到Pci的一列数据块复制扩展成Ws列而构成。
在一些实施例中,某些卷积层(例如FUCONV)的上一层输出数据在Ci维度上已经分成了两段,每段的ci尺寸为32B(例如数据类型为int8)或64B(例如数据类型为int16)。此时,拆分粒度Pci可以遵照各个段的尺寸,也即32B或64B。
在又一些实施例中,可以根据输入特征图的输入通道维度Ci的尺寸和硬件单次处理数据量M,确定输入通道拆分粒度Pci;继而可以根据拆分粒度Pci,确定输入特征图的宽度W维度的折叠倍数Ws。在一些实施例中,Ws=M/Pci。可以理解,本披露实施例的卷积方案通过对Ci维度按照拆分粒度进行拆分,可以适合于任意Ci尺寸。此外,还可以理解,最大拆分粒度Pci不超过硬件的一次性处理对齐值M(或称基准对齐值,硬件单次处理数据量)。由此,在Ci的不同取值范围下,可以选择合适的Pci,通过将相邻的W维度上的数据填补到Ci维度,可以降低对Ci维度的对齐要求。
在一些实施例中,输入通道拆分粒度Pci可以选择为M/2n,n=0,1,2,…,从而便于从次低存储维度W按2n倍折叠数据至最低存储维度Ci。表1示出了几种示例性的输入通道拆分粒度Pci所对应的折叠方案,假设M=64B。
拆分粒度(Pci) 4B 8B 16B 32B 64B
Ws(W折叠) 16 8 4 2 1
表1
从表1中可以看出,输入通道拆分粒度越小,Wi补给Ci方向的份数越多,对Wi的对齐限制大小也越大,需要满足Wi/Ws≥1。
可以理解,虽然理论上拆分粒度可以取M/2n,但是考虑到拆分粒度太小时对W维度的要求、指令开销、实际Ci的取值范围等因素,可以只选择M/2n中的部分值作为备选拆分粒度。在M=64B的示例中,备选拆分粒度例如可以包括64B、32B、16B和8B。
不同的拆分粒度可以适用于不同的运算场景,从而获得不同程度的性能优化。具体地,在一些实施例中,可以按照如下方式来选择输入通道拆分粒度Pci:
将输入特征图的最低存储维度Ci分别对齐到各个备选拆分粒度;以及
综合考虑对齐到各个备选拆分粒度的对齐填补量和对应拆分粒度的大小,选择合适的拆分粒度,例如对齐填补量在预定范围内且尽可能大的备选拆分粒度作为Pci。
例如,在对齐填补量相同的情况下,优先选择较大的拆分粒度;或者在对齐填补量不同的情况下,选择对齐填补量最小的拆分粒度;或者在对齐填补量相差不大(例如在预定范围内,诸如不超过16B)的情况下,优先选择较大的拆分粒度。
尽管在上面列出了选择输入通道拆分粒度Pci的规则,然而这些规则仅仅是优选实施例,用于选择最适合当前Ci取值的优选输入通道拆分粒度。以下结合几个示例来描述上述规则的应用。所有示例中假设M=64B,备选拆分粒度包括64B、32B、16B和8B。
在一个示例中,假设Ci=48B,则对齐到8B、16B均无需补零,对齐到32B、64B均需补16B。此时,可以优选无需补零的拆分粒度中较大的拆分粒度作为Pci,也即16B。
在另一个示例中,假设Ci=28B,则对齐到8B、16B、32B均需要补4B的零,对齐到64B需要补36B的零。此时,可以优先选取对齐填补量小的、较大的拆分粒度作为Pci,也即32B。
在又一个示例中,假设Ci=49B,则对齐到8B需要补7B的零,对齐到16B、32B、64B均需要补15B的零。此时,对齐填补量仅相差8B,在可接受范围内,因此可以优选较大的拆分粒度64B。
图6a-图6c示出了根据本披露实施例的几种数据宽度维度折叠示例。在这些示例中,同样假设M=64B。
如图6a所示,当确定的输入通道拆分粒度Pci=16B时,W维度需要折叠4倍。也即,一个数据行的形状为Wi*Ci=4×16B。当Ci维度的尺寸超过16B时,1*Ci上的数据会拆分在多个数据行中。例如,当Ci=48B时,其上数据会拆分到3个数据行中。图中用圆角矩形框示出了3个数据行各自包括的数据,此处的3也可以称为Ci维度上的拆分块数。
如图6b所示,当确定的输入通道拆分粒度Pci=32B时,W维度需要折叠2倍。也即,一个数据行的形状为Wi*Ci=2×32B。同样,当Ci维度的尺寸超过32B时,1*Ci上的数据会拆分在多个数据行中。例如,当Ci=96B时,其上数据会拆分到3个数据行中。图中仅示出单个数据行。
如图6c所示,当确定的输入通道拆分粒度Pci=64B时,W维度需要折叠1倍,也即无需折叠。此时,一个数据行的形状为Wi*Ci=1×64B。同样,当Ci维度的尺寸超过64B时,1*Ci上的数据会拆分在多个数据行中。例如,当Ci=128B时,其上数据会拆分到2个数据行中。图中仅示出单个数据行。
如前面所提到,在一些实施例中,图5中的主处理电路510可以将输入特征图确定为多播数据并存储在第一存储电路530中,以在运算期间通过广播方式将数据传输给调度的多个从处理电路。从前面描述的宽度折叠方案可知,由于WC为连续维度,因而输入数据的格式不需要进行分块和维度转换处理,可以直接接收原始输入数据格式HWC。因此,在第一存储电路530中,输入特征图可以按照原始格式(例如HWC)存储于其中。
当从第一存储电路530中读取输入特征图并广播给多个从处理电路时,可以执行前述对齐处理。也即,在从第一存储电路到从处理电路内的缓冲电路(例如第一缓冲电路)的传输过程中,主处理电路510可以控制进行Ci维度的对齐处理,以对齐到所确定的输入通道拆分粒度Pci,继而可以折叠相应数量的Wi维度数据,构成一个数据行,并以一个数据行作为最小粒度,广播传输给从处理电路。
可以理解,在前述FUCONV卷积层的示例中,输入特征图即前一层的输出数据,其已经在Ci维度上拆分成两段,因此数据格式可以是[2,hi,wi,32B]或[2,hi,wi,64B]。
图7示意性示出了根据本披露一些实施例的输入特征图的示意性存储方式。如图所示,输入特征图可以按照Ci分成两段存储,两段的首地址间隔Ci_seg.stride:每段ci大小为32B或者64B。对于32B的段,一个数据行的形状为Wi*Ci=2×32B;对于64B的段,一个数据行的形状为Wi*Ci=1×64B。
由此,上面描述了本披露实施例中输入特征图的存储格式和经由数据通道的折叠处理。
示例性卷积核存储
卷积的计算是每一个输入特征图都需要和每一个Co的卷积核进行乘加运算,从而输出Co个输出特征图。然而,并不是片上空间一定能同时存储下所有规模的卷积核和输入特征图,因此,对于硬件而言存在一系列重复加载输入特征数据或者权值数据的操作,如何平衡重复加载输入特征数据还是权值数据对计算的效率会有一定影响。在实际运算中,为了减少频繁的片外访存,根据参与运算的数据的规模特性,可以采取不同的复用方式。
根据前面描述的卷积运算原理可知,Co维度上的运算结果无需累加,因此不同Co上的运算分配在不同的运算电路上可以相对独立地进行。也即,在不同的运算电路上可以分配不同Co的卷积核,使用相同的输入特征图进行运算,此时输入特征图在这些运算电路之间复用,复用次数Rn=Ns,Ns为运算电路数量。
在本披露一些实施例中,可以基于卷积核的输出通道Co维度尺寸和可调度的从处理电路数量Ns,确定分配给各个从处理电路处理的Co值。
为了简化从处理电路的调度,在一些实施例中,可以根据卷积核的输出通道维度Co的尺寸,按照每轮运算每个从处理电路处理一个Co值的方案进行分配。当Co不超过可调度的从处理电路数量时,可以调度Co个从处理电路,每个处理一个Co值。例如,当Co=8时,可以调度8个从处理电路,每个处理一个Co值。当Co超过可调度的从处理电路数量时,可以分多个轮次完成运算。每轮调度尽可能多的从处理电路,每个处理一个Co值。例如,当Co=24时,可以在第一轮调度全部可用的16个从处理电路,处理前16个Co值;在第二轮调度8个从处理电路,处理后8个Co值,由此完成全部运算。
在一些实施例中,可以进一步地在H维度上复用输入特征图数据,从而进一步减少访存量。在这些实施例中,考虑到有些存储电路在读取数据时,只支持按照地址从小到大的顺序读取,为了方便在H维度读取对应的权值数据,需要将H维度的数据倒置存放。这将在后文结合卷积运算过程进行详细描述。
如前面所提到,在一些实施例中,可以将卷积核确定为分发数据并存储在第二存储电路540中,以在运算前分发给对应的从处理电路或由从处理电路读取。第二存储电路540可以由多个(例如Ns个)从处理电路520共享,并为每个从处理电路分配独立的存储区域,从而每个从处理电路运算所需的数据只需要从其对应的存储区域读取即可,加速访存速度。当将卷积核按照Co维度划分存储时,可以将分配给某个从处理电路的Co值对应的卷积核存储在第二存储电路的相应存储区域中。由于Co维度是卷积核的最高存储维度,因此Co维度上的划分存储无需进行维度转换等处理,直接将对应Co值的卷积核数据按原始格式(例如KhKwCi)存储在第二存储电路上即可。
图8示出了根据本披露实施例的卷积核存储方式示意图。在此示例中,假设卷积核的Co维度大小为8,因而调度8个从处理电路进行运算。图中示例性示出了为例如Ns=8个从处理电路SL0~SL7分配的8块存储区域800~807。每个存储区域中存储该从处理电路要处理的对应Co值的卷积核。
在一个示例中,将连续的Co值逐个顺序(也即以间隔1为单位)分配给8个SL。例如,图中示出Co=0~7的卷积核依次存储在8个存储区域800~807上。进一步地,在每个存储区域上,按照H方向倒置的方式存储,也即卷积核在高度维度Kh上按照索引从大到小的顺序存放,由此便于在将卷积核加载到第二缓冲电路上时,可以按照地址从小到大的顺序读取。
与输入特征图类似的,每个Co值的卷积核在Ci维度上也要执行类似的拆分对齐处理。同样地,在前述FUCONV卷积层的示例中,卷积核已经在Ci维度上拆分成两段,因此也是类似地分段存储。
在一些实施例中,当从第二存储电路中读取卷积核并分发给对应的从处理电路时,可以根据需要执行Ci拆分对齐处理。也即,在从第二存储电路到从处理电路内的缓冲电路(例如第二缓冲电路)的传输过程中,可以进行卷积核的Ci维度的对齐处理,以对齐到前面确定的输入通道拆分粒度Pci。不同于输入特征图,卷积核无需进行W维度的折叠,而是根据折叠倍数Ws进行对应的复制扩展,这在后续的卷积运算过程的描述中可以看出。
单个从处理电路内的示例性卷积运算过程
当输入特征图被广播给所调度的从处理电路,卷积核被分发给对应的从处理电路之后以及同时地,各个从处理电路可以对输入特征图和卷积核的对应数据执行卷积运算,继而主处理电路可以根据卷积宽度折叠方案,对多个从处理电路返回的运算结果进行拼接处理,以得到输入特征图和卷积核的卷积运算的输出特征图。具体地,可以利用从处理电路中的多个运算电路CU以及各个缓冲电路(参见图5)来执行具体的卷积运算过程。取决于从处理电路内部缓冲电路的空间大小以及运算电路的算力限制,在每轮运算中通常需要执行多个运算周期来完成所需运算。
在一些实施例中,第一缓冲电路可以用于缓存来自第一存储电路的输入特征图;相应地,第二缓冲电路可以用于缓存来自第二存储电路的卷积核,也即权值数据。每个运算电路CU可以在每个运算周期内,针对分别从第一缓冲电路中选取的数据行(例如输入特征行)和从第二缓冲电路中选取的数据行(例如,部分权值行或扩展权值行)执行对位乘累加运算。为了简便起见,以下描述针对单个从处理电路SL内针对一个Co值的处理,可以理解,其他SL内进行类似的处理。
从前面的卷积运算原理可知,输出特征图上每个卷积输出点的值对应于其卷积窗口内的输入特征图与权值的对位乘累加结果。也即,单个输出点的值是由各个部分的对位乘累加起来的。
在一些实施例中,对于输出特征图中单个输出点,可以按如下顺序、多层循环计算该输出点的值,其中:卷积核的Kw维度作为内层循环计算该输出点的部分和,循环次数Nkw=min(Kw,Kmax),其中Kw是卷积核的宽度维度尺寸,Kmax是从处理电路所支持的最大卷积核宽度值;卷积核的Ci维度上按Pci拆分的块数Bci作为中层循环计算该输出点的部分和,循环次数Nci=Bci=ceil(Ci/Pci);卷积核的Kh维度作为外层循环计算该输出点的部分和,循环次数Nkh=Kh,其中Kh是卷积核的高度维度尺寸;以及累加各个部分和,得到该输出点的值,其中总循环次数Ncycle=Nkw*Nci*Nkh。
图9示出了根据本披露实施例的计算单个卷积输出点的示例性循环示意图。在此示例中,假设卷积核的Kw=2,Ky=3,Ci分成两段,每段32B,输入特征图的Wi=20,Hi=20,Ci同样分成两段,每段32B,宽度和高度方向上的卷积步长Sx=Sy=1。图中示出了输出特征图上第一个输出点的各个部分和构成,每个数据点用其高度、宽度维度的坐标<h,w>表示,每个数据点在ci方向大小为Pci。
在Kw维度的内层循环中,在第一缓冲电路和第二缓冲电路上以1为步长在宽度维度上同步滑动选取输入特征行和扩展权值行,以计算同一输出点的不同部分和。内层循环的滑动次数,也即循环次数Nkw=min(Kw,Kmax),其中Kw是卷积核的宽度维度尺寸,Kmax是从处理电路所支持的最大卷积核宽度值。
在一些实施例中,Kmax可以按如下确定:
Kmax=L1*Ws-Ncu*Ws+1,
其中L1是第一缓冲电路的大小,单位为数据行;Ncu是调度的运算电路数量,Ws是宽度维度的折叠倍数。例如,在L1=8个数据行的第一缓冲电路、Ncu=4的情形下,当Ws=4时,Kmax=17;当Ws=2时,Kmax=9;当Ws=1时,Kmax=5。可以看出,大部分情况下,卷积核的宽度尺寸Kw不会超过Kmax,因此,Nkw=Kw。
如图9所示,在此示例中,Kw维度的内层循环次数为Nkw=Kw=2。具体地,第一次选取输入特征数据点<0,0>和权值数据点<0,0>执行对位乘累加,得到第一部分和;第二次同步向右滑动1步,选取输入特征数据点<0,1>和权值数据点<0,1>执行对位乘累加,得到第二部分和。可以看出,第一部分和与第二部分和均属于第一输出点<0,0>的部分和。
在中层循环中,根据Ci维度按Pci拆分的段数Bci进行循环。在图9示例中,Nci=Bci=2。因此,输入特征图与权值同步进行选数,第一次可以先从第一段Ci_seg=0中选取数据执行对位乘累加,得到第三部分和,第二次从第二段Ci_seg=1中选取数据执行对位乘累加,得到第四部分和。从卷积运算原理可以看出,Ci维度上的乘积结果也需要进行累加。因此,第三部分和与第四部分和均属于第一输出点<0,0>的部分和。还可以理解,第三部分和实质是内层循环得到的第一部分和与第二部分和之和。第四部分和也是类似的。
在Kh维度的外层循环中,可以根据Kh的大小,相应地在H方向上循环Kh次,来计算各个部分和。如图所示,Kh=3,则需要进行三次循环。第一次从Kh=0这一行选取权值,从Hi=0这一行选取输入特征图,执行对位乘累加,得到第五部分和;第二次从Kh=1这一行选取权值,从Hi=1这一行选取输入特征图,执行对位乘累加,得到第六部分和;第三次从Kh=2这一行选取权值,从Hi=2这一行选取输入特征图,执行对位乘累加,得到第七部分和。可以看出,第五部分和、第六部分和与第七部分和均属于第一输出点<0,0>的部分和。还可以理解,第五部分和实质是中层循环得到的第三部分和与第四部分和之和。第六、第七部分和也是类似的。由于Kh维度的数据没有进行任何维度折叠或拆分,因此本披露实施例的卷积方案可以支持Kh维度上任意数值的卷积步长。
可以理解,当卷积核的宽度尺寸超过Kmax时,需要在Kw方向按照该最大卷积核宽度值进行拆分。在这种情况下,除了上面提到的三层循环之外,进一步按照Kw的拆分进行循环处理。
如前面所提到的,在一些实施例中,可以进一步地在H维度上复用输入特征图数据,从而进一步减少访存量。具体地,可以将每次选取的输入特征行复用rn次,分别与卷积核在高度维度上对应的rn个扩展权值行进行对位乘累加运算,以得到输出特征图在高度维度上连续的rn个输出块,其中rn根据卷积核的高度维度尺寸Kh和卷积运算的高度方向的卷积步长Sy来确定。
图10示出了根据本披露一些实施例的H维度上复用输入特征图数据的运算示意图。此示例的参数配置与图9类似。
如图所示,当同一输入特征数据点在H维度上遍历Kh个权值点执行对位乘累加运算时,其得到的部分和属于不同的输出点。为避免计算溢出,以输入特征数据点<2,0>为例。当输入特征数据点<2,0>与权值数据点<0,0>执行对位乘累加,相当于卷积窗口A的情形,得到第八部分和,其属于输出点<2,0>;当输入特征数据点<2,0>与权值数据点<1,0>执行对位乘累加,相当于卷积窗口B的情形,得到第九部分和,其属于输出点<1,0>;当输入特征数据点<2,0>与权值数据点<2,0>执行对位乘累加,相当于卷积窗口C的情形,得到第十部分和,其属于输出点<0,0>。
由此可见,在H维度上的输入特征图复用次数,取决于相邻卷积窗口在H维度上的最大重叠次数。例如,在上述示例中,Kh=3,Sy=1,输入特征数据点<2,0>同时被三个输出点(也即输出点<2,0>、<1,0>和<0,0>)对应的三个卷积窗口覆盖,因而可以复用3次。可以理解,当Sy>1时,复用次数rn小于Kh,rn=Kh-Sy+1;并且某些数据点不被卷积窗口重叠覆盖,也即不需要复用。
上面描述了通过多次循环计算部分和以获得单个输出点的值,以及在单个输出点的计算中,穿插H维度上的输入特征图复用,从而可以计算H维度上的多个输出点/输出块。
为了充分利用从处理电路内的多个运算电路的并行运行特性,可以由单个从处理电路内的多个运算电路CU并行计算输出特征图。考虑到输出特征图的维度存储顺序以及输入特征图的W折叠,为了简化输出处理,优选地,在Wo维度上顺次划分Ncu个输出块,以分别由Ncu个运算电路进行并行运算,每个输出块对应于一个输入特征数据行的运算结果。在一些实施例中,从第一缓冲电路中顺次选取Ncu个相邻的输入特征行分发给Ncu个运算电路,从第二缓冲电路中选取或生成对应的一个扩展权值数据行,广播给Ncu个运算电路,从而通过复用权值数据来实现Ncu个输出块的并行计算。
图11示出了根据本披露实施例的输出特征图的示意性拆分方式。为了简单起见,图11仅示出一个Co值的输出特征图在Wo维度上的拆分。在此示例中,假设Ncu=4,则在Wo维度上顺次划分4个输出块,每个输出块对应一个输入特征数据行的运算结果。
进一步地,取决于输入特征图的一个数据行内的不同数据格式,单个运算电路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维度上的输出点。图11中进一步示出了上述三种情况下单个输出块的不同构成,分别包括4个、2个或1个Wo输出点。
为了支持单个CU同时计算一个输出块中可能包括的一个或多个Wo输出点,在一些实施例中,可以按如下构造对应的权值数据:在将第二存储电路中的卷积核分发给各个从处理电路的第二缓冲电路时,除了将卷积核的Ci维度对齐到Pci之外,还根据宽度维度的折叠倍数Ws,将在Ci维度上按照Pci拆分或对齐到Pci的一列Ci数据复制扩展成Ws列,构成一个扩展权值数据行,存储在第二缓冲电路中。也即,一个扩展权值数据行的形状为Ws*Pci,可以对应于一个输入特征数据行。由此,可以从第二缓冲电路中选取一个扩展权值数据行,广播给从处理电路内的NCU个运算电路。每个运算电路继而可以针对来自第一缓冲电路的一个输入特征行和来自第二缓冲电路的一个扩展权值数据行,以Pci/M=1/Ws个数据行为单位进行对位乘累加,得到M/Pci=Ws个输出点的部分和。
在另一些实施例中,上述权值数据的复制和扩展过程也可以在从第二缓冲电路到运算电路的数据通路上进行,处理方式类似,此处不再详述。
由此可见,上面的运算过程存在两层权值复用:第一层是运算电路CU之间,权值广播给Ncu个运算电路,因而复用次数为Ncu;第二层是每个运算电路内的一个或多个Wo输出点之间,权值通过扩展以用于计算每个CU内的Ws个输出点,因而复用次数为Ws。由此,通过尽可能地复用数据,可以有效减少数据的频繁访问和访存量。
还可以理解,当输出特征图的Wo维度的大小超过单次计算量时,例如,Wo>Ws*Ncu,则可以将Wo按照Ws*Ncu的拆分进行循环处理。
在一些实施例中,对于单个输出通道Co上的输出特征图,可以按如下拆分来计算其上的输出点:将输出特征图按宽度维度拆分成(Ws*Ncu)*Ho大小的区块,逐个区块计算输出点,其中Ncu是所述从处理电路内可调度的运算电路的数量,Ho是输出特征图的高度维度尺寸;针对每个区块,按照先宽度维度,后高度维度的顺序计算输出电路。
从处理电路在写入运算电路的运算结果时,可以按照先Wo维度、后Ho维度的顺序,将各个运算电路的运算结果存储在例如图5的第三缓冲电路中。从处理电路在输出其内运算电路的输出点时,可以根据输出点的划分方式,按特定顺序输出其内多个运算电路计算的输出点,方便后续处理。例如,每个从处理电路处理针对不同输出通道Co值的卷积核,可以按照先宽度维度Wo、后高度维度Ho的顺序,轮流输出各个运算电路的运算结果。相应地,计算装置中的主处理电路可以按照co值的顺序,将从各个从处理电路输出的运算结果按照HoWoCo的维度存储顺序进行拼接存储。
从前面运算过程还可以看出,每次计算输出特征图Wo维度上Ncu*Ws个输出点,也即,输出点会对齐到Ncu*Ws,因此,可能存在多余计算的输出点。在存储运算结果的数据通路上,可以滤除这些Wo维度上多余的输出点。
以下结合具体实施例描述本披露实施例的卷积运算时的详细运算过程。
实施例:Ci分为两段,拆分段数Bci=2,每段32B,Co=8
图12a-图12c示出根据本披露实施例的卷积运算方案的运算过程示意图。在此实施例中,Ci拆分成两段,Ci_seg=0~1,每段32B,因此一个输入特征数据行的格式为2×32B(WiCi),图中示出每行数据包括2列Wi数据,从而一个运算电路计算的输出块包括1×2(CoWo)个输出点。Co=8,则只需调度Ns=8个从处理电路,每个从处理电路处理1个Co值。不防假设卷积核的尺寸为KhKw=3×2。在下面的描述中,使用高度、宽度维度坐标<h,w>来表示各个数据点,每个数据点在Ci维度大小为Pci,在此示例中为32B。
图12a示出了针对hi=0时,Ci_seg的中层循环和Kw维度的内层循环的运算过程。按照与输出块的划分方式对应的方式,从第一缓冲电路中选取NCU个输入特征行,分别发送给NCU个运算电路,从第二缓冲电路中选取一个扩展权值行,广播给Ncu个运算电路以供计算。
在箭头①所示的第1个计算期间,从Ci_seg=0的数据段中选数。具体地,选择由输入特征点<0,0>和<0,1>构成的数据行,发送给第一运算电路CU0,选择由输入特征点<0,2>和<0,3>构成的数据行,发送给运算电路CU1,选择由输入特征点<0,4>和<0,5>构成的数据行,发送给运算电路CU2,以及选择由输入特征点<0,6>和<0,7>构成的数据行,发送给运算电路CU3(图中用黑色虚线框示出选数)。相应地,选择Ci_seg=0的卷积核数据段中由数据点<0,0>(后面简称“A0”)扩展而成的扩展权值行A0A0,广播给四个运算电路。由此,4个运算电路分别执行对位乘累加运算,得到ho=0上w0~w7这8个输出点的部分和,每个运算电路计算相邻的2个输出点。
由于hi=0这一行数据在H维度上不存在复用,因此此时无需进行H维度上的复用。因此可以继续Kw维度的内层循环。
在箭头②所示的第2个计算期间,仍然从Ci_seg=0的数据段中选数,但是需要进行W维度的滑动。此时,从第一缓冲电路中在Wi方向滑动一步选取对应的4个输入特征行(图中用略小的灰色虚线框示出选数),分别发送给4个运算电路;以及从第二缓冲电路中在Kw方向滑动一步选取由数据点<0,1>(后面简称“B0”)扩展而成的扩展权值行B0B0,广播给4个运算电路。由此,4个运算电路分别执行对位乘累加运算。由于输入特征图与权值同步滑动,因此得到的仍然是ho=0上w0~w7这8个输出点的部分和,这些部分和累加在上一次计算的部分和上。
此时,Kw维度的内层循环结束,也即Kw方向上的部分和均已计算。接着,进行Ci_seg维度的中层循环。从Ci_seg=1的数据段重复执行上述选数、计算过程。
在箭头③所示的第3个计算期间,分别从Ci_seg=1的卷积核数据段和输入特征图数据段中选数。具体地,选择由Ci_seg=1的输入特征图数据段中输入特征点<0,0>和<0,1>构成的数据行,发送给第一运算电路CU0,选择由输入特征点<0,2>和<0,3>构成的数据行,发送给运算电路CU1,选择由输入特征点<0,4>和<0,5>构成的数据行,发送给运算电路CU2,以及选择由输入特征点<0,6>和<0,7>构成的数据行,发送给运算电路CU3(图中用黑色虚线框示出选数)。相应地,选择Ci_seg=1的卷积核数据段中由数据点<0,0>(后面简称“a0”)扩展而成的扩展权值行a0a0,广播给四个运算电路。由此,4个运算电路分别执行对位乘累加运算。由于输入特征图与权值同步在Ci维度上取数,根据卷积运算原理,得到的仍然是ho=0这行w0~w7这8个输出点的部分和,这些部分和累加在上一次计算的部分和上。
在箭头④所示的第4个计算期间,仍然从Ci_seg=1的数据段中选数,但是需要进行W维度的滑动。此时,从第一缓冲电路中在Wi方向滑动一步选取对应的4个输入特征行(图中用略小的灰色虚线框示出选数),分别发送给4个运算电路;以及从第二缓冲电路中在Kw方向滑动一步选取由数据点<0,1>(后面简称“b0”)扩展而成的扩展权值行b0b0,广播给4个运算电路。由此,4个运算电路分别执行对位乘累加运算。由于输入特征图与权值同步滑动,因此得到的仍然是ho=0这行w0~w7这8个输出点的部分和,这些部分和累加在上一次计算的部分和上。
由此完成了hi=0时,Ci_seg的中层循环和Kw的内层循环。
接着,可以进行外层循环,也即在H维度上加1。
图12b示出了针对hi=1的循环处理。此时,第一缓冲电路中存放的是hi=1这一行的数据。与图12a类似地,首先按照与输出块的划分方式对应的方式,从第一缓冲电路中选取4个输入特征行,分别发送给4个运算电路,从第二缓冲电路中选取一个扩展权值行,广播给4个运算电路以供计算。与图12a不同之处在于,此时的hi=1这一行数据在H维度上存在复用,也即该行数据既可以用于计算输出特征图的ho=0的数据点,也可以用于计算输出特征图的ho=1的数据点,可以复用2次。
具体地,在箭头①所示的第1个计算期间,从Ci_seg=0的数据段中选数,选取图中用黑色虚线框示出的4个数据行,分别发送给4个运算电路。此时,应用H维度上的复用。为了能够按顺序计算H维度上的输出点,需要按照H维度倒序方式提取权值数据。首先,选择Ci_seg=0的卷积核数据段中由数据点<1,0>(后面简称“A1”)扩展而成的扩展权值行A1A1,广播给四个运算电路。由此,4个运算电路分别执行对位乘累加运算,得到ho=0这一行中w0~w7这8个输出点的部分和,这些部分和累加在之前计算的对应输出点的部分和上。
接着,在箭头②所示的第2个计算期间,保持各个运算电路的输入特征行不变,选择Ci_seg=0的卷积核数据段中由数据点<0,0>(也即“A0”)扩展而成的扩展权值行A0A0,广播给四个运算电路。由此,4个运算电路分别执行对位乘累加运算,得到ho=1这一行中w0~w7这8个输出点的部分和,每个运算电路计算相邻的2个输出点。
此时H维度上对输入特征图的复用完成。接着进行Kw维度上的下一循环。
在箭头③所示的第3个计算期间,仍然从Ci_seg=0的数据段中选数,只不过在W维度上滑动1步。此时,从第一缓冲电路中在Wi方向滑动一步选取对应的4个输入特征行(为了清楚起见,图中重复画出了第一缓冲电路中的数据,并用略小的灰色虚线框示出选数),分别发送给4个运算电路。同样地,也插入H维度上的复用。首先,选择Ci_seg=0的卷积核数据段中由数据点<1,1>(后面简称“B1”)扩展而成的扩展权值行B1B1,广播给四个运算电路。由此,4个运算电路分别执行对位乘累加运算,得到ho=0这一行中w0~w7这8个输出点的部分和,并累加到之前的结果上。
接着,在箭头④所示的第4个计算期间,保持各个运算电路的输入特征行不变,选择Ci_seg=0的卷积核数据段中由数据点<0,1>(也即“B0”)扩展而成的扩展权值行B0B0,广播给四个运算电路。由此,4个运算电路分别执行对位乘累加运算,得到ho=1这一行中w0~w7这8个输出点的部分和,并累加到之前的结果上。
此时,Kw维度的内层循环结束,也即Kw方向上的部分和均已计算。接着,进行Ci_seg维度的中层循环。从Ci_seg=1的数据段重复执行上述选数、计算过程,同样嵌入H维度上的复用,总计4次计算,此处不再展开详述。为了简单起见,图中仅示出内层循环过程,中层循环的计算过程可以类似推导出。
由此完成了hi=1时,Ci_seg的中层循环和Kw的内层循环。
接着,可以继续外层循环,也即在H维度上加1,hi=2。
图12c示出了针对hi=2的循环处理。此时,第一缓冲电路中存放的是hi=2这一行的数据。类似地,首先按照与输出块的划分方式对应的方式,从第一缓冲电路中选取4个输入特征行,分别发送给4个运算电路,从第二缓冲电路中选取一个扩展权值行,广播给4个运算电路以供计算。此时的hi=2这一行数据在H维度上存在复用,并且该行数据既可以用于计算输出特征图的ho=0的数据点,也可以用于ho=1的数据点,还可以用于计算ho=2的输出点,可以复用3次。
具体地,在箭头①所示的第1个计算期间,从Ci_seg=0的数据段中选数,选取图中用黑色虚线框示出的4个数据行,分别发送给4个运算电路。此时,应用H维度上的复用。为了能够按顺序计算H维度上的输出点,需要按照H维度倒序方式提取权值数据。首先,选择Ci_seg=0的卷积核数据段中由数据点<2,0>(后面简称“A2”)扩展而成的扩展权值行A2A2,广播给四个运算电路。由此,4个运算电路分别执行对位乘累加运算,得到ho=0这一行中w0~w7这8个输出点的部分和,这些部分和累加在之前计算的对应输出点的部分和上。
接着,在箭头②所示的第2个计算期间,保持各个运算电路的输入特征行不变,选择Ci_seg=0的卷积核数据段中由数据点<1,0>(也即“A1”)扩展而成的扩展权值行A1A1,广播给四个运算电路。由此,4个运算电路分别执行对位乘累加运算,得到ho=1这一行中w0~w7这8个输出点的部分和,这些部分和累加在之前计算的对应输出点的部分和上。
接着,在箭头③所示的第3个计算期间,仍然保持各个运算电路的输入特征行不变,选择Ci_seg=0的卷积核数据段中由数据点<0,0>(也即“A0”)扩展而成的扩展权值行A0A0,广播给四个运算电路。由此,4个运算电路分别执行对位乘累加运算,得到ho=2这一行中w0~w7这8个输出点的部分和。
此时H维度上对输入特征图的复用完成。接着进行Kw维度上的下一循环。
在箭头④所示的第4个计算期间,仍然从Ci_seg=0的数据段中选数,只不过在W维度上滑动1步。此时,从第一缓冲电路中在Wi方向滑动一步选取对应的4个输入特征行(为了清楚起见,图中重复画出了第一缓冲电路中的数据,并用略小的灰色虚线框示出选数),分别发送给4个运算电路。同样地,也插入H维度上的复用。首先,选择Ci_seg=0的卷积核数据段中由数据点<2,1>(后面简称“B2”)扩展而成的扩展权值行B2B2,广播给四个运算电路。由此,4个运算电路分别执行对位乘累加运算,得到ho=0这一行中w0~w7这8个输出点的部分和,并累加到之前的结果上。
接着,在箭头⑤所示的第5个计算期间,保持各个运算电路的输入特征行不变,选择Ci_seg=0的卷积核数据段中由数据点<1,1>(也即“B1”)扩展而成的扩展权值行B1B1,广播给四个运算电路。由此,4个运算电路分别执行对位乘累加运算,得到ho=1这一行中w0~w7这8个输出点的部分和,并累加到之前的结果上。
接着,在箭头⑥所示的第6个计算期间,仍然保持各个运算电路的输入特征行不变,选择Ci_seg=0的卷积核数据段中由数据点<0,1>(也即“B0”)扩展而成的扩展权值行B0B0,广播给四个运算电路。由此,4个运算电路分别执行对位乘累加运算,得到ho=2这一行中w0~w7这8个输出点的部分和,并累加到之前的结果上。
此时,Kw维度的内层循环结束,也即Kw方向上的部分和均已计算。接着,进行Ci_seg维度的中层循环。从Ci_seg=1的数据段重复执行上述选数、计算过程,同样嵌入H维度上的复用,总计6次计算,此处不再展开详述。为了简单起见,图中仅示出内层循环过程,中层循环的计算过程可以类似推导出。
由此完成了hi=2时,Ci_seg的中层循环和Kw的内层循环。此时,输出特征图上ho=0这一行上w0~w7的8个输出点的值也累加完毕,可以输出。
接着,可以继续外层循环,也即在H维度上加1,hi=3。如此循环往复,直至处理完整个H维度。
当外层的H维度循环也处理完后,每个运算电路可以累加得到ho*Ws个4输出点的最终卷积结果。1个从处理电路内的4个运算电路则获得同一Co上ho*(Ws*4)个输出点。8个从处理电路总计获得8个Co上ho*(Ws*4)个输出点。
图13示出了根据本披露实施例的运算结果的写入和输出逻辑示意图。
如图所示,单个从处理电路SL内的多个运算电路CU可以根据运算顺序,将运算结果依次写入结果缓冲电路(例如图5的第三缓冲电路)中。具体地,可以首先按照Wo顺序,写入各个CU计算的同一Co的输出点(写入循环①)。接着按照Ho顺序,写入各个CU计算的不同Ho的输出点(写入循环②)。例如对于SL0,首先写入ho=0的w0~w7,接着写入ho=1的w0~w7,然后是ho=2的w0~w7,依次循环。其他SL内进行类似的结果写入,只不过处理的Co值不同。
读出顺序与写入顺序可以一致,也是先Wo维度,再Ho维度。更具体地,可以首先按照Co顺序依次从各个从处理电路的结果缓冲电路中进行读取,在读取时按照Wo顺序,读出各个CU的结果。例如,首先读出8个SL中各个CU0计算的2个输出点w0和w1,然后是各个CU1计算的2个输出点w2和w3,接着CU2计算的w4和w5,最后是CU3计算的w6和w7(读出循环①)。接着,按照Ho顺序,读出各个Ho上的输出点(读出循环②)。图13中右侧视图示出了读出结果,注意,在按照Co顺序读取时,在8个SL的结果缓冲电路上轮流读取,以使得Co维度是连续的,例如从0~7。
以上结合实施例的具体卷积运算过程对本披露实施例提供的卷积优化方案进行了示例性描述和阐释。可以理解,取决于Ci和Co的不同取值,还可以有更多种组合方式,从而获得不同实施例。此外,基于本披露的教导,本领域技术人员可以根据具体的硬件电路配置(诸如从处理电路的个数、从处理电路内的运算电路的个数、硬件单次处理能力等)设想出其他的卷积优化方案,其均落入本披露公开范围内,此处不再一一枚举。
本披露实施例还提供了一种芯片,其可以包括前面结合附图描述的任一实施例的数据处理装置。进一步地,本披露还提供了一种板卡,该板卡可以包括前述芯片。
根据不同的应用场景,本披露的电子设备或装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、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等。
依据以下条款可更好地理解前述内容:
条款1、一种计算装置,包括多个从处理电路,每个从处理电路包括第一缓冲电路、第二缓冲电路和多个运算电路,其中:
所述第一缓冲电路用于缓存将要执行卷积运算的多个输入特征行,其中一个输入特征行包括输入特征图中Pci×Ws=M的数据量,其中Pci为输入通道Ci维度的拆分粒度,Ws为宽度W维度的折叠倍数,M是硬件单次处理数据量;
所述第二缓冲电路用于缓存将要执行卷积运算的权值数据;以及
每个所述运算电路用于在每次计算时,针对分别从所述第一缓冲电路中选取的输入特征行和从所述第二缓冲电路中选取的或生成的扩展权值行执行对位乘累加运算,其中一个扩展权值行由卷积核在Ci维度上按照Pci拆分或对齐到Pci的一列数据块复制扩展成Ws列而构成。
条款2、根据条款1所述的计算装置,其中,每个所述运算电路进一步用于:
将选取的输入特征行复用rn次,分别与卷积核在高度维度上对应的rn个扩展权值行进行对位乘累加运算,以得到输出特征图在高度维度上连续的rn个输出块,其中rn根据卷积核的高度维度尺寸Kh和所述卷积运算的高度方向的卷积步长Sy来确定。
条款3、根据条款2所述的计算装置,还包括权值存储电路,用于存储所述卷积核,其中所述卷积核在高度维度上按照索引从大到小的顺序存放,以便在加载到所述第二缓冲电路时,按照地址从小到大的顺序读取。
条款4、根据条款2-3任一所述的计算装置,其中对于输出特征图中单个输出点,所述运算电路按如下顺序、多层循环计算所述输出点的值,其中:
卷积核的Kw维度作为内层循环计算所述输出点的部分和,循环次数Nkw=min(Kw,Kmax),其中Kw是卷积核的宽度维度尺寸,Kmax是所述从处理电路所支持的最大卷积核宽度值;
卷积核的Ci维度上按Pci拆分的块数Bci作为中层循环计算所述输出点的部分和,循环次数Nci=Bci=ceil(Ci/Pci);
卷积核的Kh维度作为外层循环计算所述输出点的部分和,循环次数Nkh=Kh,其中Kh是卷积核的高度维度尺寸;以及
累加各个部分和,得到所述输出点的值,其中总循环次数Ncycle=Nkw*Nci*Nkh。
条款5、根据条款4所述的计算装置,其中在所述内层循环中,每个所述从处理电路进一步用于:
从第一缓冲电路和第二缓冲电路中,在宽度维度上同步滑动选取输入特征行和扩展权值行,以计算相同输出点的不同部分和,选数次数为Nkw。
条款6、根据条款5所述的计算装置,其中在每次滑动选数计算中,每个所述运算电路针对选取的一个输入特征行,执行所述复用rn次。
条款7、根据条款2-6任一所述的计算装置,其中对于单个输出通道Co上的输出特征图,每个所述从处理电路按如下计算其上的输出点:
将所述输出特征图按宽度维度拆分成(Ws*Ncu)*Ho大小的区块,逐个区块计算输出点,其中Ncu是所述从处理电路内可调度的运算电路的数量,Ho是输出特征图的高度维度尺寸;
针对每个区块,按照先宽度维度,后高度维度的顺序计算输出电路。
条款8、根据条款7所述的计算装置,其中针对每个区块,每个所述从处理电路按如下计算宽度维度上的输出点:
利用其内可调度的Ncu个运算电路并行地计算在输出特征图的宽度维度上连续的Ncu个输出块,每个输出块包括在宽度维度上连续的Ws个输出点。
条款9、根据条款8所述的计算装置,其中每个所述从处理电路进一步用于:
从所述第一缓冲电路中选取相邻的Ncu个输入特征行,分发给所述Ncu个运算电路以供计算;
从所述第二缓冲电路中选取或生成对应的一个扩展权值行,广播给所述Ncu个运算电路;
在所述Ncu个运算电路处,针对分发的输入特征行和广播的扩展权值行,以1/Ws个数据行为单位进行对位乘累加,得到Ws个输出点的部分和。
条款10、根据条款7-9任一所述的计算装置,其中针对每个区块,每个所述从处理电路在高度维度按如下计算其上的输出点:
在每个运算电路处,通过复用rn次输入特征行,顺次计算在输出特征图的高度维度上连续的rn个输出块的部分和,每个输出块包括在宽度维度上连续的Ws个输出点。
条款11、根据条款1-10任一所述的计算装置,其中:
每个所述从处理电路用于处理针对不同输出通道co的卷积核,并且按照先宽度维度Wo、后高度维度Ho的顺序,轮流输出各个运算电路的运算结果;并且
所述计算装置进一步用于:按照co值的顺序,将从各个从处理电路输出的运算结果按照HoWoCo的维度存储顺序进行拼接存储。
条款12、一种芯片,包括根据条款1-11任一所述的计算装置。
条款13、一种板卡,包括根据条款12所述的芯片。
条款14、一种利用条款1-11任一所述的计算装置执行卷积运算的方法。
以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本披露的方法及其核心思想;同时,对于本领域的一般技术人员,依据本披露的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本披露的限制。

Claims (14)

1.一种计算装置,包括多个从处理电路,每个从处理电路包括第一缓冲电路、第二缓冲电路和多个运算电路,其中:
所述第一缓冲电路用于缓存将要执行卷积运算的多个输入特征行,其中一个输入特征行包括输入特征图中Pci×Ws=M的数据量,其中Pci为输入通道Ci维度的拆分粒度,Ws为宽度W维度的折叠倍数,M是硬件单次处理数据量;
所述第二缓冲电路用于缓存将要执行卷积运算的权值数据;以及
每个所述运算电路用于在每次计算时,针对分别从所述第一缓冲电路中选取的输入特征行和从所述第二缓冲电路中选取的或生成的扩展权值行执行对位乘累加运算,其中一个扩展权值行由卷积核在Ci维度上按照Pci拆分或对齐到Pci的一列数据块复制扩展成Ws列而构成。
2.根据权利要求1所述的计算装置,其中,每个所述运算电路进一步用于:
将选取的输入特征行复用rn次,分别与卷积核在高度维度上对应的rn个扩展权值行进行对位乘累加运算,以得到输出特征图在高度维度上连续的rn个输出块,其中rn根据卷积核的高度维度尺寸Kh和所述卷积运算的高度方向的卷积步长Sy来确定。
3.根据权利要求2所述的计算装置,还包括权值存储电路,用于存储所述卷积核,其中所述卷积核在高度维度上按照索引从大到小的顺序存放,以便在加载到所述第二缓冲电路时,按照地址从小到大的顺序读取。
4.根据权利要求2-3任一所述的计算装置,其中对于输出特征图中单个输出点,所述运算电路按如下顺序、多层循环计算所述输出点的值,其中:
卷积核的Kw维度作为内层循环计算所述输出点的部分和,循环次数Nkw=min(Kw,Kmax),其中Kw是卷积核的宽度维度尺寸,Kmax是所述从处理电路所支持的最大卷积核宽度值;
卷积核的Ci维度上按Pci拆分的块数Bci作为中层循环计算所述输出点的部分和,循环次数Nci=Bci=ceil(Ci/Pci);
卷积核的Kh维度作为外层循环计算所述输出点的部分和,循环次数Nkh=Kh,其中Kh是卷积核的高度维度尺寸;以及
累加各个部分和,得到所述输出点的值,其中总循环次数Ncycle=Nkw*Nci*Nkh。
5.根据权利要求4所述的计算装置,其中在所述内层循环中,每个所述从处理电路进一步用于:
从第一缓冲电路和第二缓冲电路中,在宽度维度上同步滑动选取输入特征行和扩展权值行,以计算相同输出点的不同部分和,选数次数为Nkw。
6.根据权利要求5所述的计算装置,其中在每次滑动选数计算中,每个所述运算电路针对选取的一个输入特征行,执行所述复用rn次。
7.根据权利要求2-6任一所述的计算装置,其中对于单个输出通道Co上的输出特征图,每个所述从处理电路按如下计算其上的输出点:
将所述输出特征图按宽度维度拆分成(Ws*Ncu)*Ho大小的区块,逐个区块计算输出点,其中Ncu是所述从处理电路内可调度的运算电路的数量,Ho是输出特征图的高度维度尺寸;
针对每个区块,按照先宽度维度,后高度维度的顺序计算输出电路。
8.根据权利要求7所述的计算装置,其中针对每个区块,每个所述从处理电路按如下计算宽度维度上的输出点:
利用其内可调度的Ncu个运算电路并行地计算在输出特征图的宽度维度上连续的Ncu个输出块,每个输出块包括在宽度维度上连续的Ws个输出点。
9.根据权利要求8所述的计算装置,其中每个所述从处理电路进一步用于:
从所述第一缓冲电路中选取相邻的Ncu个输入特征行,分发给所述Ncu个运算电路以供计算;
从所述第二缓冲电路中选取或生成对应的一个扩展权值行,广播给所述Ncu个运算电路;
在所述Ncu个运算电路处,针对分发的输入特征行和广播的扩展权值行,以1/Ws个数据行为单位进行对位乘累加,得到Ws个输出点的部分和。
10.根据权利要求7-9任一所述的计算装置,其中针对每个区块,每个所述从处理电路在高度维度按如下计算其上的输出点:
在每个运算电路处,通过复用rn次输入特征行,顺次计算在输出特征图的高度维度上连续的rn个输出块的部分和,每个输出块包括在宽度维度上连续的Ws个输出点。
11.根据权利要求1-10任一所述的计算装置,其中:
每个所述从处理电路用于处理针对不同输出通道co的卷积核,并且按照先宽度维度Wo、后高度维度Ho的顺序,轮流输出各个运算电路的运算结果;并且
所述计算装置进一步用于:按照co值的顺序,将从各个从处理电路输出的运算结果按照HoWoCo的维度存储顺序进行拼接存储。
12.一种芯片,包括根据权利要求1-11任一所述的计算装置。
13.一种板卡,包括根据权利要求12所述的芯片。
14.一种利用权利要求1-11任一所述的计算装置执行卷积运算的方法。
CN202111401514.4A 2021-11-19 2021-11-19 执行卷积运算的计算装置、方法及相关产品 Pending CN116150556A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202111401514.4A CN116150556A (zh) 2021-11-19 2021-11-19 执行卷积运算的计算装置、方法及相关产品
PCT/CN2022/099770 WO2023087698A1 (zh) 2021-11-19 2022-06-20 执行卷积运算的计算装置、方法及相关产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111401514.4A CN116150556A (zh) 2021-11-19 2021-11-19 执行卷积运算的计算装置、方法及相关产品

Publications (1)

Publication Number Publication Date
CN116150556A true CN116150556A (zh) 2023-05-23

Family

ID=86356980

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111401514.4A Pending CN116150556A (zh) 2021-11-19 2021-11-19 执行卷积运算的计算装置、方法及相关产品

Country Status (2)

Country Link
CN (1) CN116150556A (zh)
WO (1) WO2023087698A1 (zh)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11488002B2 (en) * 2018-02-15 2022-11-01 Atlazo, Inc. Binary neural network accelerator engine methods and systems
CN110135554A (zh) * 2019-03-25 2019-08-16 电子科技大学 一种基于fpga的卷积神经网络硬件加速架构
CN112633490B (zh) * 2020-12-31 2023-09-26 上海寒武纪信息科技有限公司 执行神经网络模型的数据处理装置、方法及相关产品
CN113592068A (zh) * 2021-07-19 2021-11-02 南京广捷智能科技有限公司 一种可配置的通用卷积神经网络加速器

Also Published As

Publication number Publication date
WO2023087698A1 (zh) 2023-05-25

Similar Documents

Publication Publication Date Title
EP3654209A1 (en) Chip device and related products
CN113850380A (zh) 数据处理装置、数据处理方法及相关产品
CN112416433A (zh) 一种数据处理装置、数据处理方法及相关产品
CN114154112A (zh) 数据处理装置、芯片和板卡
CN111488963B (zh) 神经网络计算装置和方法
CN113837922A (zh) 计算装置、数据处理方法及相关产品
CN113850379A (zh) 数据处理装置、数据处理方法及相关产品
CN113850377A (zh) 数据处理装置、数据处理方法及相关产品
CN116150556A (zh) 执行卷积运算的计算装置、方法及相关产品
CN114003198A (zh) 内积处理部件、任意精度计算设备、方法及可读存储介质
CN116150555A (zh) 计算装置、利用计算装置实施卷积运算的方法及相关产品
CN117252241A (zh) 执行卷积运算的计算装置、方法及相关产品
CN113469337A (zh) 用于优化神经网络模型的编译方法及其相关产品
CN115470176B (zh) 计算装置、利用计算装置实施卷积运算的方法及相关产品
CN113469333B (zh) 执行神经网络模型的人工智能处理器、方法及相关产品
CN113792867B (zh) 运算电路、芯片和板卡
CN116980277B (zh) 数据处理方法、装置、计算机设备及存储介质
CN113791754A (zh) 运算电路、芯片和板卡
CN115878543A (zh) 计算装置、利用计算装置实施卷积运算的方法及相关产品
CN111368985B (zh) 一种神经网络计算装置和方法
CN115878546A (zh) 计算装置、利用计算装置实施卷积运算的方法及相关产品
CN113850378A (zh) 数据处理装置、数据处理方法及相关产品
CN113837921A (zh) 数据处理装置、数据处理方法及相关产品
CN115878544A (zh) 处理电路、利用处理电路实施卷积运算的方法及相关产品
CN115878541A (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