CN115081605A - 暂存Winograd卷积中的神经元数据的缓存、装置与板卡 - Google Patents

暂存Winograd卷积中的神经元数据的缓存、装置与板卡 Download PDF

Info

Publication number
CN115081605A
CN115081605A CN202110266352.1A CN202110266352A CN115081605A CN 115081605 A CN115081605 A CN 115081605A CN 202110266352 A CN202110266352 A CN 202110266352A CN 115081605 A CN115081605 A CN 115081605A
Authority
CN
China
Prior art keywords
data
convolution
cache
winograd
input
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
CN202110266352.1A
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.)
Anhui Cambricon Information Technology Co Ltd
Original Assignee
Anhui Cambricon Information Technology Co 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 Anhui Cambricon Information Technology Co Ltd filed Critical Anhui Cambricon Information Technology Co Ltd
Priority to CN202110266352.1A priority Critical patent/CN115081605A/zh
Publication of CN115081605A publication Critical patent/CN115081605A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本发明涉及暂存Winograd卷积中的神经元数据的缓存、计算装置、集成电路装置及板卡,其中缓存包括4个存储阵列,每个存储阵列包括4个存储块,每个存储块的规模为d个w比特的存储单元,其中d为所述存储单元中的地址数。本发明具有保证网络精度、性能加速、面积缩减以及功耗降低的技术效果。

Description

暂存Winograd卷积中的神经元数据的缓存、装置与板卡
技术领域
本发明一般地涉及神经网络领域。更具体地,本发明涉及暂存Winograd卷积中的神经元数据的缓存、计算装置、集成电路装置及板卡。
背景技术
随着信息化时代的高速发展,人工智能与机器学习领域的研究炙手可热,相关产业蓬勃发展。卷积神经网络在计算机视觉、自动驾驶、机器翻译、语音识别、智能家居等各方面都有着广泛的作用。
卷积神经网络的参数量大,运算量大,使得卷积神经网络模型在便携移动终端有限面积和算力下被严重的限制其执行性能,同时非专用性设计的处理器在进行卷积运算时也会造成功耗的巨大开销。
Winograd卷积是一种基于多项式插值算法的卷积加速实现方式。它通过对卷积操作的两个输入:神经元及权值进行一定规模切分后,分别做线性变换,也就是Winograd正变换,再将变换后的神经元和权值进行对位乘法,把对位乘法结果再次进行线性变换,即Winograd逆变换,最后得到与原卷积操作等价的卷积结果。
由于在Winograd卷积操作的过程中,神经元和权值的正逆变换矩阵都由简单的固定数值构成,故而可以仅利用加法来实现Winograd神经元和权值的正逆变换过程。而Winograd算法中所需的乘法操作仅出现在对位乘过程中,此过程的乘法复杂度较原始卷积算法有相当程度缩减。由于硬件实现乘法运算的开销(时序、功耗、面积)比实现同位宽的加法要高很多,因此以Winograd卷积替代原始卷积操作能够带来硬件能效比和运算时间上的明显收益。
然而,目前没有一种硬件针对Winograd卷积加速算法来设计,使得现有人工智能芯片无法完全展现Winograd卷积运算的优势。因此,一种能够高效运行Winograd卷积算法的硬件设备是迫切需要的。
发明内容
为了至少部分地解决背景技术中提到的技术问题,本发明的方案提供了一种暂存Winograd卷积中的神经元数据的缓存、计算装置、集成电路装置及板卡。
在一个方面中,本发明揭露一种用以暂存Winograd卷积中的神经元数据的缓存,所述缓存包括4个存储阵列,每个存储阵列包括4个存储块,每个存储块的规模为d个w比特的存储单元,其中d为所述存储单元中的地址数。
在另一个方面,本发明揭露一种计算装置,包括前述的缓存。
在另一个方面,本发明揭露一种集成电路装置,包括前述的计算装置,还揭露一种板卡,包括根据前述的集成电路装置。
本发明提出的硬件结构能够匹配Winograd卷积加速算法,具有保证网络精度、性能加速、面积缩减以及功耗降低的技术效果。
附图说明
通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,并且相同或对应的标号表示相同或对应的部分其中:
图1是示出卷积核与输入神经元图像进行卷积运算的示意图;
图2是示出F(2×2,3×3)的原始卷积转换成Winograd卷积的示意图;
图3是示出对位乘运算的可视化示意图;
图4是示出正变换数据与权值进行同质操作的示意图;
图5是示出本发明实施例的板卡的结构图;
图6是示出本发明实施例的集成电路装置的结构图;
图7是示出本发明实施例的计算装置的内部结构示意图;
图8是示出正变换时重叠部分的示意图;
图9是示出示出本发明实施例的神经元缓存的示意图;
图10是示出本发明实施例的正变换单元的示意图;
图11是示出本发明实施例的正变换数据缓存的示意图;
图12是示出本发明实施例的权值缓存的示意图;
图13是示出本发明实施例的逆变换单元的示意图;以及
图14是示出本发明实施例的结果缓存的连接关系示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,本发明的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本发明的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本发明。如在本发明说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本发明说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。
下面结合附图来详细描述本发明的具体实施方式。
Winograd卷积加速算法(以下简称Winograd算法或Winograd卷积)是利用对卷积运算中的操作数进行线性变换,进而找出需要乘法数最少的变换方法,再通过增加部分加法操作代替所需要的乘法操作。从硬件层面来说,乘法器的结构相比于加法器更加复杂,面积功耗更大,综合处理性能更差,实务上以加法取代乘法的Winograd算法在处理卷积运算时具有极大优势。
对于二维卷积来说,假设输入神经元图像的大小为H×W(H为输入神经元图像的高度,W为输入神经元图像的宽度),权值的大小为r×s(r为权值的高度,s为权值的宽度),卷积结果可以表示为F(m×n,r×s),其中m×n为输出神经元图像的大小,m为输出神经元图像的高度,n为输出神经元图像的宽度。本发明的实施例为了降低硬件涉及的复杂度、提高通用性,并实现良好的加速效果,设定不大于3×3的卷积核(即权值)作为基卷积单元,来组合进行任意规模且卷积操作步长(stride)为1的Winograd卷积运算。本发明的实施例将任意的F(m×n,r×s)拆解成运算规模为3×3、3×2(或2×3)、3×1、2×2、2×1等5种基卷积的计算,再进行组合。更详细来说,本发明的实施例将任意的F(m×n,r×s)拆解成F(2×2,3×3)、F(2×2,3×2)、F(2×2,2×3)、F(2×2,3×1)、F(2×2,2×2)及F(2×2,2×1)的基卷积计算组合。需注意的是,由于1×1的卷积运算无法利用Winograd卷积来加速,故1×1的规模不属于本发明的实施例设定的基卷积单元。
以输入神经元图像的大小为6×6,步长为1的F(2×2,5×5)为例,在利用本发明实施例的计算装置进行Winograd卷积加速运算前,需先将6×6的输入神经元图像和5×5的卷积核基于基卷积单元进行线性拆分,其拆分过程如图1所示。
图1示出一个5×5的卷积核101与一个6×6的输入神经元图像102进行卷积运算,以获得2×2的卷积结果103。卷积核101需拆分成3×3、3×2(或2×3)、3×1、2×2、2×1等规模,且此实施例较佳地优先选择3×3,3×2(或2×3)次之,3×1再次之,2×2再次之,最后为2×1。根据此规则,卷积核101被拆分为4个基卷积核:3×3的第一基卷积核104、3×2的第二基卷积核105、2×3的第三基卷积核106、2×2的第四基卷积核107,也就是F(2×2,5×5)会被拆解为一个F(2×2,3×3)、一个F(2×2,3×2)、一个F(2×2,2×3)及一个F(2×2,2×2)。输入神经元图像102相应的也拆分为4个子神经元数据:4×4的第一子神经元数据108、4×3的第二子神经元数据109、3×4的第三子神经元数据110、3×3的第四子神经元数据111。
接着进行Winograd卷积运算,即:第一基卷积核104与第一子神经元数据108做卷积,以产生第一子卷积结果112;第二基卷积核105与第二子神经元数据109做卷积,以产生第二子卷积结果113;第三基卷积核106与第三子神经元数据110做卷积,以产生第三子卷积结果114;第四基卷积核107与第四子神经元数据111做卷积,以产生第四子卷积结果115。
最后将第一子卷积结果112、第二子卷积结果113、第三子卷积结果114及第四子卷积结果115相加,便获得卷积结果116,卷积结果116与卷积结果103相同。以上便是利用Winograd卷积算法来实现原始卷积运算的示例。
进一步来说,Winograd算法可以用以下式子来表示:
Y=AT[(GgGT)⊙(BTdB)]A
其中,Y表示卷积操作的输出矩阵,AT为逆变换左乘常量矩阵,G为权值变换左乘常量矩阵,g为原始卷积的权值,GT为权值变换右乘常量矩阵,⊙表示按位乘法,BT为神经元变换左乘常量矩阵,d为神经元数据,B为神经元变换右乘常量矩阵,A为逆变换右乘常量矩阵。各变换的左乘矩阵和右乘矩阵仅为转置关系。
以F(2×2,3×3)为例,前述各常数矩阵如下所示:
Figure BDA0002972107410000061
Figure BDA0002972107410000062
Figure BDA0002972107410000063
图2示出F(2×2,3×3)的原始卷积转换成Winograd卷积的示意图。如图所示,神经元数据201与卷积核202进行卷积运算。计算时,将神经元数据201根据滑动窗口203中的元素按一行排列,滑动窗口203滑动4次形成4×9矩阵204,再将卷积核202的元素按一列排列,形成9×1矩阵205,4×9矩阵204与9×1矩阵205进行卷积运算,得到4×1卷积结果206。
再根据图中虚线进行切分,4×9矩阵204转变成2×3矩阵207,9×1矩阵205转变成3×1矩阵208,4×1卷积结果206转变成2×1卷积结果209。在线性变换后,2×1卷积结果209的第一个元素R0=M0+M1+M2,且R1=M1-M2-M3。而M0、M1、M2、M3可以用以下式子表示:
M0=(K0-K2)·W0
Figure BDA0002972107410000064
Figure BDA0002972107410000065
M3=(K1-K3)·W2
通过前述的切分与线性变换,原本卷积运算涉及36次乘法,而Winograd算法仅需执行16次乘法,降低了2.25倍的乘法计算复杂度。
由上述二维卷积的Winograd算法的转换可以看出,Winograd算法主要分为以下几个步骤。首先,对权值进行权值常数矩阵的左乘和右乘,即GgGT,得到Winograd线性变换之后的权值,即Winograd权值;接着,对神经元数据进行正变换操作,也就是神经元常数矩阵的左乘和右乘,即BTdB,得到Winograd线性变换之后的正变换数据。再者,将正变换数据和Winograd权值矩阵进行对位乘操作,即(GgGT)⊙(BTdB),得到对位乘数据。最后,将对位乘数据进行逆变换操作,也就是Winograd逆变换常数矩阵的左乘和右乘操作,即ATLA,其中L为[(GgGT)⊙(BTdB)],最终得到与原始卷积等价的卷积结果。
从硬件设计的角度来说,本发明的实施例针对上述三个过程之间的依赖性以及运算区别特征,将这三个大的变换步骤进行流水化设计,以实现更高效的加速性能。以下将针对正变换操作、对位乘操作与逆变换操作的设计分别说明。
本发明的实施例利用正变换单元来实现正变换操作,即执行BTdB,根据Winograd卷积的规则,正变换左乘矩阵BT的大小为(m+r-1)×(m+r-1),右乘矩阵B的大小为(n+s-1)×(n+s-1)。由于正变换左乘矩阵BT与右乘矩阵B的元素都是由0、1、-1所构成,故正变换的矩阵乘操作可以分解为固定模式的加法操作,本发明的实施例的计算装置据此配置特定数量的浮点加法运算器来完成整个矩阵乘需要的线性加法操作。由于本发明的实施例将任何原始卷积转换成基卷积来计算,故正变换单元的规模与前述5种基卷积规模的运算有关,因此以下将以2×2的卷积结果为例(即m=n=2),分别针对前述5种基卷积运算FP32的数据做说明。
以3×3的基卷积为例,其
Figure BDA0002972107410000071
可以表示为:
Figure BDA0002972107410000072
基于上述算式,正变换单元的正变换算力需求直接对应至加法个数,而加法个数为4×(n+s-1)+4×(m+r-1)=32flops(每秒执行浮点运算次数),而正变换单元的输入输出量分别为:输入数据和输出数据均为(r+1)(s+1)×32=16×32比特,前述算式乘上32比特的原因是针对FP32的数据,其为32比特的数列。当正变换单元的输入输出量与运算时间相同时,正变换单元的硬件使用率最为理想,因此正变换单元的输入输出带宽与加法运算的比例较佳为16:32=1:2。换言之,当缓存带宽(或称向量化长度)为l时,正变换单元的输入带宽和输出带宽为l×32比特,而正变换单元的加法器组的算力为2×l flops。每次运算会产生16个最终结果,再考虑到运算过程中会产生8个中间结果,寄存器堆的最少寄存器数为l×32×(16+8)个。
以3×2的基卷积为例,其
Figure BDA0002972107410000081
可以表示为:
Figure BDA0002972107410000082
基于上述算式,正变换单元的正变换算力需求为4×(n+s-1)+2×(m+r-1)=20flops,而正变换单元的输入输出量分别为:输入数据和输出数据均为(r+1)(s+1)×32=12×32比特。为提升正变换单元的硬件使用率,因此正变换单元的输入输出带宽与加法运算的比例较佳为12:20=3:5。也就是输入带宽和输出带宽为l×32比特,而加法器组的算力为
Figure BDA0002972107410000083
每次计算会产生12个最终结果以及6个中间结果,在最大化流水使用寄存器堆的前提下,寄存器堆的最少寄存器数为l×32×(12+6)个。
以2×2的基卷积为例,其
Figure BDA0002972107410000084
可以表示为:
Figure BDA0002972107410000085
基于上述算式,正变换单元的正变换算力需求为2×(n+s-1)+2×(m+r-1)=12flops,而正变换单元的输入输出量分别为:输入数据和输出数据均为(r+1)(s+1)×32=9×32比特,因此正变换单元的输入输出带宽与加法运算的比例较佳为9:12=3:4。也就是输入带宽和输出带宽为l×32比特,而加法器组的算力为
Figure BDA0002972107410000091
每次计算会产生9个最终结果,以及6个中间结果,在最大化流水使用寄存器堆的前提下,寄存器堆的最少寄存器数为l×32×(9+6)个。
以3×1的基卷积为例,其
Figure BDA0002972107410000092
可以表示为:
Figure BDA0002972107410000093
基于上述算式,正变换单元的正变换算力需求为4flops,而正变换单元的输入输出量分别为:输入数据和输出数据均为(r+1)×32=4×32比特。因此正变换单元的输入输出带宽与加法运算的比例较佳为4:4=1:1。也就是输入带宽和输出带宽为l×32比特,而加法器组的算力为l flops。每次计算会产生4个最终结果以及2个中间结果,在最大化流水使用寄存器堆的前提下,寄存器堆的最少寄存器数为l×32×(4+2)个。
以2×1的基卷积为例,其
Figure BDA0002972107410000094
可以表示为:
Figure BDA0002972107410000095
基于上述算式,正变换单元的正变换算力需求为2flops,而正变换单元的输入输出量分别为:输入数据和输出数据均为(r+1)×32=3×32比特,因此正变换单元的输入输出带宽与加法运算的比例较佳为3:2。也就是输入带宽和输出带宽为l×32比特,而加法器组的算力为
Figure BDA0002972107410000096
每次计算会产生3个最终结果以及1个中间结果,在最大化流水使用寄存器堆的前提下,寄存器堆的最少寄存器数为l×32×(3+1)个。
为同时满足并支持前述5种基卷积运算,本发明的实施例选择正变换单元的输入带宽及输出带宽相同,且加法运算的算力为输入带宽及输出带宽的二倍,即输入带宽与输出带宽均为l×32比特,而加法器组的算力为2×l flops,寄存器堆的个数为l×32×(16+8)。
接着考虑对位乘累加运算器,本发明的实施例基于硬件设计、调度策略和执行性能的通盘考虑,将对位乘操作和卷积神经元数据的特征图方向两者结合起来,利用同一套对位乘累加运算器,不仅能够有效降低硬件设计总体复杂度以及资源消耗,还能够减少片上缓存的访问量,节省功耗面积的同时能够提高性能。
假设卷积层的参数为:输入批处理(batch)数N、输入神经元通道数Ci、输入神经元数据的高度Hi、输入神经元数据的宽度Wi、输出神经元通道数Co、输出神经元数据的高度Ho、输出神经元数据的宽度Wo、卷积核大小为r×s、步长为1。由于此实施例支持F(2×2,r×s)的运算,故Ho=Hi-r+1,Wo=Wi-s+1,且Winograd运算单元数
Figure BDA0002972107410000101
其中T为沿着HW方向的切块数。
由于片上缓存容量有限,实施例的计算装置是以单批处理量(N=1)进行计算,因此输入至计算装置的输入神经元数据规模为[1 Ci Hi Wi],正变换数据的规模为[1 Ci T(r+1)×(S+1)],原始权值的规模为[Co Ci r s],而Winograd权值的规模则为[1 Co Ci(r+1)×(S+1)]。
图3示出前述对位乘运算的可视化示意图。由于N=1,因此前述各数据可以降维成三维来表示,正变换数据301的规模是[Ci T(r+1)×(S+1)],其三维分别Ci、T(即HW切块数)与(r+1)×(S+1);Winograd权值302则为[Co Ci (r+1)×(S+1)],其三维分别Co、Ci与(r+1)×(S+1),对位乘运算是在Co于HW方向交叉对位相乘,并在Ci方向进行累加,以获得对位乘数据303,其规模为[Co T(r+1)×(S+1)],其三维分别Co、T与(r+1)×(S+1)。
更详细来说,正变换数据301包括T个[Ci(r+1)×(S+1)]的数据单元进行对位相乘,且Winograd权值302包括Co个[Ci(r+1)×(S+1)]的数据单元进行对位相乘,以获得[Ci(r+1)×(S+1)]的中间结果。接着再沿着Ci方向进行累加,此过程与矩阵乘运算过程相同,故而可以将其合并为矩阵乘运算,更加有效的使用硬件资源,减少中间存储的寄存器资源消耗。
由于正变换数据301包括T个[Ci(r+1)×(S+1)]的数据单元,Winograd权值302包括Co个[Ci(r+1)×(S+1)]的数据单元,每一个正变换数据301的数据单元都需要和每一个Winograd权值302的数据单元相乘。如图4所示,在进行对位乘运算时,正变换数据301的其中一个数据单元401与Co个权值数据单元进行同质的操作,即Co方向作为并行计算的方向,并产出中间结果402。接着自正变换数据301中取出下一个数据单元与Co个权值数据单元再进行同质的操作,产出下一个中间结果,以此方式进行运算直到所有T个数据单元均计算完毕,便获得对位乘数据303。
当前述数据单元进行对位乘并在特征图方向进行累加时,所需的运算量为(Ci+Ci-1)×(r+1)×(S+1)flops。由于Ci值往往很大,实务上难以将其作为真正运算时的粒度输入给对位乘累加运算器,故此实施例可以进一步对Ci进行拆分,以向量化长度l为单位进行乘法累加操作,并将另一维度(r+1)×(S+1)的乘累加运算拆分于(r+1)×(S+1)拍中依序完成,最后沿Ci方向把所有结果相加以获得最终结果。
由于正变换单元的输出带宽为l×32比特,为了确保从正变换单元到对位乘累加运算器的整体流水时间相同,在此实施例中对位乘累加运算器中的每个对位乘累加单元的算力设定为l+(l-1)flops,其包括l个乘法运算及l-1个加法运算。如果对位乘累加运算器拥有ω个并行维度,也就是包括ω个同时运算的对位乘累加单元,则对位乘累加运算器的算力为ω×(l+(l-1))flops,同时为ω与l的函数。
此实施例还配置有逆变换单元,用以执行逆变换操作,根据逆变换左乘矩阵
Figure BDA0002972107410000111
及右乘矩阵A(n+s-1)×2进行ATLA计算,其中L为(GgGT)⊙(BTdB)。由于逆变换左乘矩阵AT与右乘矩阵A的元素亦是由0、1、-1所构成,故逆变换的矩阵乘操作同样可以分解为固定模式的加法操作。逆变换单元的加法器组据此配置特定数量的浮点加法运算器来完成整个矩阵乘需要的线性加法操作。以下亦根据5种基卷积分别做说明以决定逆变换单元的规模。
以3×3的基卷积为例,其
Figure BDA0002972107410000121
可以表示为:
Figure BDA0002972107410000122
基于上述算式,ITU 715的逆变换算力为24flops,而输入带宽为(r+1)(s+1)×32=16×32比特,输出带宽为(s+1)×32=4×32比特。同样地,当逆变换单元的输入带宽与算力相同时,逆变换单元的硬件使用率最佳,因此输入带宽与加法运算的比例较佳为16:24=2:3,即输入带宽为l×32比特,而加法器组的算力为
Figure BDA0002972107410000123
每次计算会产生16个最终结果,不会出现中间结果,在最大化流水使用寄存器堆的前提下,寄存器堆的最少寄存器数为l×32×16个。
以3×2的基卷积为例,其
Figure BDA0002972107410000124
可以表示为:
Figure BDA0002972107410000125
基于上述算式,逆变换单元的逆变换算力为16flops,而输入带宽为12×32比特,输出带宽为4×32比特,输入带宽与加法运算的比例较佳为12:16=3:4,即输入带宽为l×32比特,而加法器组的算力为
Figure BDA0002972107410000126
每次计算会产生12个最终结果,不会出现中间结果,在最大化流水使用寄存器堆的前提下,寄存器堆的最少寄存器数为l×32×12个。
以2×2的基卷积为例,其
Figure BDA0002972107410000127
可以表示为:
Figure BDA0002972107410000131
基于上述算式,逆变换单元的逆变换算力为10flops,而输入带宽为9×32比特,输出带宽为4×32比特,因此输入带宽与加法运算的比例较佳为9:10,即输入带宽为l×32比特,而加法器组的算力为
Figure BDA0002972107410000132
每次计算会产生9个最终结果,不会出现中间结果,在最大化流水使用寄存器堆的前提下,寄存器堆的最少寄存器数为l×32×9个。
以3×1的基卷积为例,其
Figure BDA0002972107410000133
可以表示为:
Figure BDA0002972107410000134
基于上述算式,逆变换单元的逆变换算力为4flop,而输入带宽为4×32比特,输出带宽为2×32比特,因此输入带宽与加法运算的比例较佳为4:4=1:1,即输入带宽为l×32比特,而加法器组的算力为l flops,每次计算会产生4个最终结果,2个中间结果,在最大化流水使用寄存器堆的前提下,寄存器堆的最少寄存器数为l×32×(4+2)个。
以2×1的基卷积为例,其
Figure BDA0002972107410000135
可以表示为:
Figure BDA0002972107410000136
基于上述算式,逆变换单元的逆变换算力为2flops,而输入带宽为3×32比特,输出带宽为3×32比特,因此输入带宽与加法运算的比例较佳为3:2,即输入带宽为l×32比特,而加法器组的算力为
Figure BDA0002972107410000137
每次计算会产生3个最终结果,1个中间结果,在最大化流水使用寄存器堆的前提下,寄存器堆的最少寄存器数为l×32×(3+1)个。
为同时满足并支持前述5种基卷积运算,逆变换单元的加法运算的算力可以设定为输入带宽的
Figure BDA0002972107410000141
倍,即当输入带宽为l×32比特,加法器组的算力为
Figure BDA0002972107410000142
然而为了使硬件设计相对单纯,此实施例可以进一步考虑让正变换单元与逆变换单元的硬件配置相同。在同时满足正变换单元与逆变换单元的需求的前提下,此实施例选择逆变换单元采用正变换单元的设计,也就是输入带宽及输出带宽相同,加法运算的算力为输入带宽及输出带宽的二倍。换言之,逆变换单元的输入带宽为l×32比特,输出带宽亦为l×32比特,加法器组的算力为2×l flops。
综上所述,此实施例进行Winograd卷积运算的3个核心模块(正变换单元、对位乘累加运算器及逆变换单元)的带宽和算力均已匹配完毕,即3个核心模块的输入带宽均设定为l×32比特,输出带宽亦均设定为l×32比特,正变换单元的算力为2×l flops,对位乘累加运算器的算力为ω×(l+(l-1))flops,逆变换单元的算力为2×l flops。
由前述可知,Winograd卷积运算直接与向量化长度参数l有关。向量化长度参数l是最小处理长度,关系到此实施例的计算装置的神经元变换复用情况,参数l越大,复用率越高,同时所需的访存量、运算量、功耗以及平均硬件设计面积会成比例下降。但是神经网络卷积层参数会随着网络模型的变化而变化,随着向量化长度参数l的增大,当出现部分网络模型的通道数目小于向量化长度l时,算力浪费便发生了,从而影响加速效果以及导致面积功耗的额外开销。因此,在确定向量化长度l的时候需要对这两个因素做权衡分析,才能够规划最适合的向量化长度参数配置。
根据经验值,对此实施例中的几个主要的硬件(如FP32加法器、对位乘单元、寄存器等)设定权重以获得其算力与资源开销函数,发现当l大于16时,就能保证硬件资源的利用率处于较高的水平。再将目前常用的神经网络模型(例如LeNet、VGG16、VGG19、Alexnet)的输入通道数与输出通道数列入考虑,计算其算力损失,发现当l大于64时综合算力损失将大幅提升。从以上两方面的量化分析中可以得出,当向量化长度参数l介于16至64间时,此实施例的计算装置具有较好的表现。如果进一步考虑通用性以满足未来可能的网络结构与网络参数,此实施例较佳地选择l=16。
图5示出前述实施例以板卡形式呈现的结构示意图。如图5所示,板卡50包括芯片501,其是一种系统级芯片(System on Chip,SoC),或称片上系统,集成有一个或多个组合处理装置,组合处理装置是一种人工智能运算单元,用以支持各类深度学习和机器学习算法,满足计算机视觉、语音、自然语言处理、数据挖掘等领域复杂场景下的智能处理需求。特别是深度学习技术大量应用在云端智能领域,云端智能应用的一个显著特点是输入数据量大,对平台的存储能力和计算能力有很高的要求,此实施例的板卡50适用在云端智能应用,具有庞大的片外存储、片上存储和大量的计算能力。
芯片501通过对外接口装置502与外部设备503相连接。外部设备503例如是服务器、计算机、摄像头、显示器、鼠标、键盘、网卡或wifi接口等。待处理的数据可以由外部设备503通过对外接口装置502传递至芯片501。芯片501的计算结果可以经由对外接口装置502传送回外部设备503。根据不同的应用场景,对外接口装置502可以具有不同的接口形式,例如PCIe接口等。
板卡50还包括用于存储数据的存储器件504,其包括一个或多个存储单元505。存储器件504通过总线与控制器件506和芯片501进行连接和数据传输。板卡50中的控制器件506配置用于对芯片501的状态进行调控。为此,在一个应用场景中,控制器件506可以包括单片机(Micro Controller Unit,MCU)。
图6是示出此实施例的芯片501中的组合处理装置的结构图。如图6中所示,组合处理装置60包括计算装置601、接口装置602、处理装置603和DRAM 604。
计算装置601配置成执行用户指定的操作,主要实现为单核智能处理器或者多核智能处理器,用以执行深度学习或机器学习的计算,特别是Winograd卷积运算,其可以通过接口装置602与处理装置603进行交互,以共同完成用户指定的操作。
接口装置602用于在计算装置601与处理装置603间传输数据和控制指令。例如,计算装置601可以经由接口装置602从处理装置603中获取输入数据,写入计算装置601片上缓存。进一步,计算装置601可以经由接口装置602从处理装置603中获取控制指令,亦写入计算装置601片上缓存中。替代地或可选地,接口装置602也可以读取计算装置601的片上缓存中的数据并传输给处理装置603。
处理装置603作为通用的处理装置,执行包括但不限于数据搬运、对计算装置601的开启和/或停止等基本控制。根据实现方式的不同,处理装置603可以是中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)或其他通用和/或专用处理器中的一种或多种类型的处理器,这些处理器包括但不限于数字信号处理器(digital signal processor,DSP)、专用集成电路(application specificintegrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本发明的计算装置601而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算装置601和处理装置603整合共同考虑时,二者视为形成异构多核结构。
DRAM 604用以存储待处理的数据,为片外内存,大小通常为16G或更大,用于保存计算装置601和/或处理装置603的数据,尤其是存储欲进行Winograd卷积运算的神经元数据及权值。在此实施例中,处理装置603已经事先将原始卷积的权值线性变换成Winograd权值GgGT,存储在DRAM 604中。
图7示出计算装置601的结构图。计算装置601包括总线701、直接存储器访问(DMA)模块702、指令缓存(Iram)707、译码单元(IDU)708、神经元缓存(Nram)709、正变换单元(NTU,neuron transformation unit)710、正变换数据缓存(WNram)711、权值缓存(Wram)712、对位乘累加运算器(MAC)713、对位乘数据缓存(WRram)714、逆变换单元(ITU)715、结果缓存(Rram)716及逻辑运算模块(ALU,arithmetic logic unit)717。
总线701是各装置之间传送信息的公共通信干线,由导线组成的传输线束,按照组合处理装置60所传输的信息种类,总线701为数据总线、地址总线和控制总线的统称,用来分别传输数据、数据地址和指令。总线701作为DRAM 604与计算装置601的通讯渠道,在此实施例中具体为PCIe。
DMA模块702用以将数据从一个地址空间复制到另外一个地址空间,通常是将数据在外部内存(如DRAM 604)与计算装置601内部缓存间进行搬运。在实现DMA传输时,处理装置603把总线控制权交给DMA模块702,DMA模块702控制总线701进行数据搬运,结束DMA传输后,DMA模块702把总线控制权交回给处理装置603。
DMA模块702包括神经元直接存储器访问(NDMA)703、权值直接存储器访问(WDMA)704、指令直接存储器访问(IDMA)705及结果直接存储器访问(RDMA)706。NDMA 703用以自DRAM 604输入神经元数据,WDMA 704用以自DRAM 604输入Winograd权值,IDMA 705用以自DRAM 604输入指令,RDMA 706用以将计算结果输出至DRAM 604。在其他实施例中,NDMA703、WDMA 704、IDMA 705及RDMA 706可以由同一个直接存储器访问来实现。
Iram 707用以暂存IDMA 705输入的指令,IDU 708自Iram 707取出指令进行译码,并根据译码后的指令以控制其他单元运作。IDU 708是整个计算装置601的译码调度单元,负责译码从DRAM 604获取的控制指令,转换为控制信号协调片上各个模块/单元的运作,同时还要负责指令的保序、解依赖,进行分支预测、异常处理、中断处理等诸多任务。图7中细线箭头为控制流,粗线箭头为数据流。
由于计算装置601主要针对Winograd卷积计算,其不具备通用处理能力或者通用处理能力较低,故而在执行任务的过程中将很大程度上依赖处理装置603的调度和数据通信,这导致计算装置601与处理装置603的输入/输出通信十分频繁,对计算装置601的运行性能产生极大的限制。为此,计算装置601设置了多个小容量的片上缓存,用来缓存能够复用暂存的数据,例如Nram 709、WNram 711、Wram 712、WRram 714等。
在进行片上片外的数据搬运时,神经元数据和Winograd权值是以单批量(N=1)的数据规模为单位进行搬运的,即神经元数据的数据单元为[Ci Hi Wi],而Winograd权值数据的数据单元为[Co Ci(r+1)×(s+1)],Winograd卷积运算完后得到的结果规模为[Co HoWo]。前两者为输入数据,后者为输出数据,这些都是计算装置601中传输及计算的最小吞吐量,至于实际的数据吞吐量,需要根据片上缓存的大小以及运算调度流程决定,以下将进一步做说明。
根据卷积运算的特点可知,以上规模的输入数据所涉及的卷积运算可以在多个维度进行拆分,例如在Ci方向、HW图像方向或Co方向,但涉及到Winograd变换时,最小运算拆分单元即为F(2×2,r×s),且在HW方向上的最小拆分单元为(r+1)×(s+1)。再考虑到计算装置601实现Winograd加速的基卷积规模不超过3×3,故此实施例以片上缓存资源以消耗最多的3×3基卷积为基准估算缓存容量。
根据Winograd卷积的规则,在进行正变换操作的时候需要在Ci方向以向量化长度参数l为单位并行处理,在进行对位乘累加操作的时候会在Co方向上以l为单位并行进行运算,在进行逆变换的时候需要在Co的方向上以l为单位并行运算,故可以推知参与运算的最小神经元输入数据块大小为[l(r+1)×(s+1)]。由于以3×3基卷积来估算,神经元变换结果数据块大小便为[l 4×4],需要与其进行对位乘累加的Winograd权值数据块大小为[l l 4×4],对位乘输出数据块大小[l 4×4],逆变换输出结果大小[l 2×2]。
按照如此规模进行片上缓存设计,虽然可以满足所有需求,也兼顾了复用和低功耗的设计思路,但是以上规模数据只不过是实现功能的最小输入输出存储数据规模,还需要进一步考虑Winograd卷积运算的输入/输出量的优化潜力。此实施例针对缓存进一步规划如下。
在神经元正变换过程中,是基于F(2×2,r×s)及l为向量化长度的最小实施单元来运算的,每次取出的数据块大小为[l 4 4],且保持神经元取数的步长为2。如图8所示,待变换的数据单元801和滑动窗口所产生的上下左右四个数据块802、803、804、805之间均存在四分之一的重叠部分806,而重叠部分806的规模为[l 4 4],从图中可以看出,在数据单元801进行正变换的过程中,数据块802、803、804、805均包括1个重叠部分806,因此共产生4个重叠部分806。当将其按照最小数据单位[l 4 4]拆分进行数据搬移时,重叠部分806所需的数据吞吐量增至四倍,以至于冗余数据增加。为解决此问题,此实施例通过将设置规模更大的数据单元缓存在计算装置601的片上缓存,进一步减少输入/输出量。
如前所述,规模为[Ci Hi Wi]的神经元数据会和规模为[Co Ci(r+1)×(s+1)]的Winograd权值进行卷积操作。此实施例尽可能保留更多的Winograd权值存在片上,即在片上暂存尽可能多的
Figure BDA0002972107410000191
个[l l(r+1)×(s+1)],如此一来只要进行一遍权值载入操作,便可对批量神经元数据进行计算,以节省权值数据的输入/输出量。
对于输出数据,由于卷积神经网络还存在激活、池化、归一化等其他网络层操作,所以卷积结果需要缓存在片上,继续进行后续网络层的操作,为此,计算装置601将保留出固定容量的缓存存储卷积结果。这部分数据缓存可以和最终经过各种其它层操作的结果共用缓存空间,如此就降低了其他层操作重新载入卷积结果和将计算结果传输出去的数据吞吐量。
经过上述优化分析可以看出,神经元数据的缓存容量应该尽可能大,从而降低神经元数据的总吞吐量,且由于神经元数据是沿着Ci方向累加,因此沿Ci方向存储的数据量越大,越能够减少重新载入再进行累加的次数。再者,针对Winograd权值的缓存空间同样需要尽可能的大。最后,此实施例还需要保留相应的输出结果空间供其他层运算。综上所述,此实施例将片上缓存主要分为三大块分别负责不同的功能:Nram 709负责存储神经元数据,Wram 712负责存储Winograd权值,Rram 716负责存储卷积结果。计算装置601进一步设置2个缓存负责暂存中间结果:WNram 711负责暂存正变换后的数据,WRram 714负责暂存对位乘累加后的数据。
虽然存储神经元数据、Winograd权值及卷积结果的缓存容量越大越好,但缓存的大小和运算器资源的配置息息相关,一旦配置过大,将会损失计算装置601的运算能力。而判断的标准是输入/输出瓶颈压力与运算算力压力的均衡。此实施例设定Nram 709大小为
Figure BDA0002972107410000201
其中α为
Figure BDA0002972107410000202
的方向系数,β为HW的方向系数;设定Wram 712大小为α×γ×[ll 4 4],其中γ为
Figure BDA0002972107410000203
的方向系数;设定Rram 716的规模为β×γ×[l 2 2]。完成这些规模数据的运算所需要的时间为l×α×β×γ。
较佳地,此实施例选择l为16,α为4,β为64,γ为16,再考虑到每个FP32的数据大小为4B,则Nram 709的存储阵列的存储容量为
Figure BDA0002972107410000204
Wram 712的存储容量为α×γ×[l l 4 4]×4B=1MB,Rram 716的存储容量为β×γ×[l 2 2]×4B=256KB。
回到图7,Nram 709根据译码后的指令,用以暂存NDMA 703发送的神经元数据,NTU710根据译码后的指令,自Nram 709读取神经元数据进行正变换,也就是进行BTdB的运算,以产生正变换数据,所产生的正变换数据暂存在WNram 711中。图9示出Nram 709的示意图。在此实施例中,Nram 709包括4个存储阵列901、902、903、904,每个存储阵列包括4个存储块905、906、907、908,每个存储块的规模为d个w比特的存储单元,其中d亦表示存储单元中的地址数。较佳地,w为128且d为1024,则每个存储块的大小为16KB,每个存储阵列的大小为64KB,而Nram 709的总存储量为256KB,其总宽度为4×w=64B,深度为4×d=4×1024。
在宽度方向,Nram 709的输入带宽设定为4B,而输出带宽要匹配NTU 710的输入带宽。如前所述,NTU 710的输入带宽设定为l×32比特,而l较佳地为16,则NTU 710的输入带宽为64B,故Nram 709的输出带宽亦为4×w=64B。Nram 709的输入输出需要同时进行,故采用输入输出双端口的设计。
图10示出NTU 710的示意图。NTU 710包括输入缓存1001、寄存器堆1002、加法器组1003及输出缓存1004。
当NTU 710收到指令欲从Nram 709载入神经元数据时,输入缓存1001作为先入先出队列缓存,用以基于输入带宽64B暂存神经元数据。载入神经元数据的阶段将会持续到所有数据接收完成,整体过程由IDU 708发送指令控制。
寄存器堆1002根据译码后的指令,按照规划好的运算顺序,自输入缓存1001取出暂存的神经元数据,存储至寄存器堆1002的特定地址,这些存储在寄存器堆1002的特定地址的神经元数据成为加法操作数。在此实施例中,由于NTU 710的输入、运算、输出三个阶段的流水时间长度应该相等,故而会出现缓存硬件资源依赖的现象,为了解决资源依赖的问题,寄存器堆1002切分为相同大小的乒存储单元1005与乓存储单元1006,第i个加法操作数及计算完所产生的正变换数据暂存在乒存储单元1005中,第i+1个加法操作数及第i+1个正变换数据则暂存在乓存储单元1006,第i+5个加法操作数及第i+5个正变换数据又暂存在乒存储单元1005,覆盖第i个加法操作数及第i+5个正变换数据,寄存器堆1002依此规则进行存储。
加法器组1003根据译码后指令,自寄存器堆1002的特定地址依序读取加法操作数进行加法运算。在此实施例中,加法器组1003的数量为2组以对应加法运算调度方向,每组包括16个加法器以对应向量化方向l,每个加法器为FP32加法器,在神经元数据的通道方向按照特定顺序执行Winograd卷积的正变换中的加法运算,此特定顺序为先计算Winograd卷积的左乘矩阵BT的加法,再计算Winograd卷积的右乘矩阵B的加法,最后产生正变换数据,再将正变换数据存回寄存器堆1002中。运算顺序以及寄存器分配、运算时间均与卷积滤波器规模相关,由IDU 708发送指令控制。此运算阶段与前述载入神经元数据的阶段产生数据依赖,以流水方式执行,由硬件通过计数实现。
输出缓存1004亦为先入先出队列缓存,用以暂存依序来自乒存储单元1005及乓存储单元1006的正变换数据。此输出阶段需要依赖于运算阶段的整体完成,才能基于输出带宽64B进行相应缓存的输出。
由于需要对正变换数据进行复用以节省开销,故而配置WNram 711进行暂存并多次重复发送。其包括多个缓存单元,图11示出一种示例性的WNram 711的示意图,如图所示,WNram 711包括4个缓存单元:第一缓存单元1101、第二缓存单元1102、第三缓存单元1103、第四缓存单元1104。来自NTU 710的正变换数据是通过路由分发方式发送至这些缓存单元的一个或多个。
WNram 711将正变换数据按照一定顺序发送到MAC 713进行后续运算。WNram 711的设计是缓存一部分正变换数据,将这些数据发送给MAC 713后再进行下一部分的正变换数据存储,通过流水降低WNram 711的规模。进一步来说,考虑到正变换数据会和γ×[l l4×4]规模的Winograd权值进行对位乘运算,WNram 711配置成以γ个数据块为单位打包传送给MAC 713做运算。如此一来,平均每隔γ拍才需要进行正变换数据的输出,能够有效地降低WNram 711的功耗开销。据此,前γ个正变换数据被下γ个正变换数据有序覆盖,这样可以将WNram 711的最小存储规模限制在[l(r+1)(s+1)]×4B,也就是如前所述的[l 4 4]×4B=1KB。
具体地,第一缓存单元1101、第二缓存单元1102、第三缓存单元1103、第四缓存单元1104的宽度均为w1字节,深度为d1,且在深度方向分割为m份。在此实施例中,较佳地m为8,w1为64,d1为128,因此每个缓存单元的宽度为64B,深度为128,深度方向上为了数据复用将地址空间均分为8份,每个缓存单元的大小为8KB,即WNram 711的总容量设定为32KB。
回到图7,Wram 712根据译码后的指令,暂存WDMA 704发送来的Winograd权值,MAC713根据译码后的指令,自Wram 712读取Winograd权值,并自WNram 711读取正变换数据,对正变换数据与Winograd权值进行对位乘累加运算,也就是进行[(GgGT)⊙(BTdB)]的运算,以产生对位乘数据,并将对位乘数据暂存至WRram 714。
图12示出Wram 712的示意图。在此实施例中,Wram 712包括4个存储阵列1201、1202、1203、1204,WDMA 704将Winograd权值通过路由分发方式发送到存储阵列1201、1202、1203、1204。每个存储阵列包括4个存储块1205、1206、1207、1208,每个存储块包括4个存储单元1209、1210、1211、1212,每个存储单元的大小为4×d×w。如前所述,w为128且d为1024,故每个存储块的大小为64KB,而每个存储阵列的大小为256KB,Wram 712的总容量为1MB。对于每个存储块来说,其宽度为4×w=512比特,其在深度方向进行地址块切分,分为4段地址独立存储空间,每段深度为d=1024,总深度为4×d=4096。
在此实施例中,每个存储阵列1201、1202、1203、1204独立拥有4×w B的输入带宽及输出带宽,Wram 712的总输出带宽及总输出带宽为4×4×w B。具体来说,当w为128时,每个存储阵列的输入带宽及输出带宽为64B,总输出带宽及总输出带宽为256B。
在此实施例中,MAC 713包括64个MAC运算器,均分为4组分别进行4个不同批量的运算,每组的16个MAC运算器为独立分布。WNram711的正变换数据需要同时发送给这64个MAC运算器,使其与不同的Winograd权值进行对位乘累加运算,因此WNram 711以广播或者分发路由的方式发送正变换数据。由于输出负载大,为保证驱动能力和时序,WNram 711的正变换数据通过N1、N2两级广播或者分发路由,首先发送给4个N1节点,每个N1节点广播或者分发路由给4个N2节点,每个N2节点再广播或者分发路由给4个MAC运算器。
ITU 715根据译码后的指令,自WRram 714读取对位乘数据,逆变换对位乘数据,也就是进行ATLA的运算,以获得卷积结果,卷积结果暂存在Rram 716中。
图13示出ITU 715的示意图。ITU 715包括输入缓存1301、寄存器堆1302、加法器组1303及输出缓存1304。
当ITU 715收到指令欲从WRram 714载入对位乘数据时,输入缓存1301作为先入先出队列缓存,用以基于输入带宽暂存对位乘数据。载入对位乘数据的阶段将会持续到所有数据接收完成,不同规模的卷积滤波器会配置固定且独立的缓存资源划分和输入计数,整体过程由IDU 708发送指令控制。
寄存器堆1302根据译码后的指令,按照固定的运算顺序,自输入缓存1301取出暂存的对位乘数据,存储至寄存器堆1302的特定地址,这些存储在寄存器堆1302的特定地址的对位乘数据成为加法操作数。同样地,为了解决资源依赖的问题,寄存器堆1302具有相同大小的乒存储单元1305与乓存储单元1306,第i个加法操作数及计算完所产生的卷积结果暂存在乒存储单元1305中,第i+1个加法操作数及第i+1个卷积结果则暂存在乓存储单元1306,第i+5个加法操作数及第i+5个卷积结果又暂存在乒存储单元1305,覆盖第i个加法操作数及第i个卷积结果,寄存器堆1302依此规则进行存储。
加法器组1303根据译码后指令,自寄存器堆1302的特定地址依序读取加法操作数进行加法运算。与加法器组1003相同,加法器组1303的数量为2组以对应加法运算调度方向,每组包括16个加法器以对应向量化方向,每个加法器为FP32加法器,在对位乘数据的通道方向按照特定顺序执行Winograd卷积的逆变换中的加法运算,此特定顺序为先计算Winograd卷积的左乘矩阵AT的加法,再计算Winograd卷积的右乘矩阵A的加法,最后产生卷积结果,再将卷积结果存回寄存器堆1302中。运算顺序以及寄存器分配、运算时间均与卷积滤波器规模相关,由IDU 708发送指令控制。此运算阶段与前述载入对位乘数据的阶段产生数据依赖,以流水方式执行,由硬件通过计数实现。
输出缓存1304亦为先入先出队列缓存,用以暂存依序来自乒存储单元1305及乓存储单元1306的卷积结果。此输出阶段需要依赖于运算阶段的整体完成,才能基于输出带宽进行相应缓存的输出。
除了Winograd卷积外,计算装置601还能够执行所有神经网络相关的运算,ALU717用以根据译码后的指令,执行两大任务:第一个任务是卷积融合操作的运算,即运算可以和卷积层在片上一次性完成不需要依赖更多数据的运算,这些运算包括激活、加偏置、方向部分和累加等运算过程;第二个任务是非卷积运算。ALU 717产生的运算结果亦暂存于Rram716中。ALU 717的存在可以保证卷积神经网络中的各种运算在计算装置601中都可以完整实现,使得计算装置601具有神经网络的通用性和完整性。
RDMA 706根据译码后的指令,将卷积结果自Rram 716中取出并输出至DRAM 604,至此完成整个卷积运算。同样地,RDMA 706亦可根据译码后的指令,将ALU 717生成的其他运算结果自Rram 716中取出并输出至DRAM 604。在此实施例中,Rram 716的输出带宽为w字节,同样包括4个存储阵列,每个存储阵列包括4×d个4×w比特的存储单元,即宽度512比特,深度为4096,故每个存储阵列的大小为256KB,而Rram 716的大小为1MB。每个存储阵列的输入输出双端口带宽均为64B,在深度方向的地址被划分为16份,每份地址空间为256,用来存储神经元复用方向的结果。
图14示出Rram 716的连接关系示意图。Rram 716的输入端口与ITU 715和ALU 717相连,接收其输出数据。由于卷积操作和其他操作不会进行,不需要让这两个输入端口同时工作,因此保持每个存储阵列的输入带宽为64B,时分复用这64B的带宽接入ITU 715和ALU717的数据即可。Rram 716的输出端口亦有2个,一个连接至RDMA 706,另一个连接至ALU717。在ALU 717运算完成之后,Rram 716才会将计算结果通过RDMA 706发送至DRAM 604,因此在输出端同样采用时分复用的方式,使用64B的输出带宽实现向RDMA 706及ALU 717的数据传输。
本发明基于Winograd算法的特性进行硬件设计,以实现加速通用性,并提出加速Winograd卷积运算速度的流水级操作方式,还在硬件实现过程中通过时分复用、广播路由等方法充分利用可复用资源。本发明提出的硬件结构能够匹配Winograd卷积算法,具有保证网络精度、性能加速、面积缩减以及功耗降低的技术效果。
根据不同的应用场景,本发明的电子设备或装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、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等。
依据以下条款可更好地理解前述内容:
条款A1、一种用以暂存Winograd卷积中的神经元数据的缓存,所述缓存包括4个存储阵列,每个存储阵列包括4个存储块,每个存储块的规模为d个w比特的存储单元,其中d为所述存储单元中的地址数。
条款A2、根据条款A1所述的缓存,连接至神经元直接存储器访问,所述神经元直接存储器访问用以自片外内存载入所述神经元数据。
条款A3、根据条款A1所述的缓存,连接至正变换单元,所述正变换单元每次自所述缓存读取所述神经元数据中的数据块,用以执行Winograd卷积的正变换中的加法运算,其中所述数据块的大小为[l 4 4],l为向量化长度。
条款A4、根据条款A3所述的缓存,其中所述神经元数据的大小为[Ci Hi Wi],所述缓存的存储容量为
Figure BDA0002972107410000271
其中α为
Figure BDA0002972107410000272
的方向系数,β为HiWi的方向系数。
条款A5、根据条款A4所述的缓存,其中α为4,β为64。
条款A6、根据条款A3所述的缓存,其中l介于16至64间。
条款A7、根据条款A4所述的缓存,其中l为16。
条款A8、根据条款A1所述的缓存,其中w为128。
条款A9、根据条款A1所述的缓存,其中d为1024。
条款A10、一种计算装置,包括根据条款A1至9任一项所述的缓存。
条款A11、一种集成电路装置,包括根据条款A10所述的计算装置。
条款A12、一种板卡,包括根据条款A12所述的集成电路装置。
以上对本发明实施例进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (12)

1.一种用以暂存Winograd卷积中的神经元数据的缓存,所述缓存包括4个存储阵列,每个存储阵列包括4个存储块,每个存储块的规模为d个w比特的存储单元,其中d为所述存储单元中的地址数。
2.根据权利要求1所述的缓存,连接至神经元直接存储器访问,所述神经元直接存储器访问用以自片外内存载入所述神经元数据。
3.根据权利要求1所述的缓存,连接至正变换单元,所述正变换单元每次自所述缓存读取所述神经元数据中的数据块,用以执行Winograd卷积的正变换中的加法运算,其中所述数据块的大小为[l 4 4],l为向量化长度。
4.根据权利要求3所述的缓存,其中所述神经元数据的大小为[Ci HiWi],所述缓存的存储容量为
Figure FDA0002972107400000011
其中α为
Figure FDA0002972107400000012
的方向系数,β为HiWi的方向系数。
5.根据权利要求4所述的缓存,其中α为4,β为64。
6.根据权利要求3所述的缓存,其中l介于16至64间。
7.根据权利要求4所述的缓存,其中l为16。
8.根据权利要求1所述的缓存,其中w为128。
9.根据权利要求1所述的缓存,其中d为1024。
10.一种计算装置,包括根据权利要求1至9任一项所述的缓存。
11.一种集成电路装置,包括根据权利要求10所述的计算装置。
12.一种板卡,包括根据权利要求12所述的集成电路装置。
CN202110266352.1A 2021-03-11 2021-03-11 暂存Winograd卷积中的神经元数据的缓存、装置与板卡 Pending CN115081605A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110266352.1A CN115081605A (zh) 2021-03-11 2021-03-11 暂存Winograd卷积中的神经元数据的缓存、装置与板卡

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110266352.1A CN115081605A (zh) 2021-03-11 2021-03-11 暂存Winograd卷积中的神经元数据的缓存、装置与板卡

Publications (1)

Publication Number Publication Date
CN115081605A true CN115081605A (zh) 2022-09-20

Family

ID=83241682

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110266352.1A Pending CN115081605A (zh) 2021-03-11 2021-03-11 暂存Winograd卷积中的神经元数据的缓存、装置与板卡

Country Status (1)

Country Link
CN (1) CN115081605A (zh)

Similar Documents

Publication Publication Date Title
CN109062611B (zh) 神经网络处理装置及其执行向量缩放指令的方法
CN109543832B (zh) 一种计算装置及板卡
CN111859273A (zh) 矩阵乘法器
JP6865805B2 (ja) 計算装置と計算方法
CN110163357B (zh) 一种计算装置及方法
CN108170640B (zh) 神经网络运算装置及应用其进行运算的方法
WO2021115208A1 (zh) 神经网络处理器、芯片和电子设备
Shahshahani et al. Memory optimization techniques for fpga based cnn implementations
CN110059797B (zh) 一种计算装置及相关产品
CN113837922A (zh) 计算装置、数据处理方法及相关产品
CN116710912A (zh) 一种矩阵乘法器及矩阵乘法器的控制方法
CN115081603A (zh) 执行Winograd卷积的计算装置、集成电路装置及板卡
CN115081600A (zh) 执行Winograd卷积的变换单元、集成电路装置及板卡
CN112801276B (zh) 数据处理方法、处理器及电子设备
CN115081605A (zh) 暂存Winograd卷积中的神经元数据的缓存、装置与板卡
CN115081604A (zh) 暂存Winograd权值的缓存、计算装置、集成电路装置及板卡
CN115081606A (zh) 执行Winograd卷积的装置与板卡
CN115079927A (zh) 暂存卷积结果的缓存、计算装置、集成电路装置及板卡
CN114595813A (zh) 异构加速处理器及数据计算方法
CN115081602A (zh) 执行Winograd卷积的计算装置、集成电路装置及板卡
CN115081599A (zh) 预处理Winograd卷积的方法、计算机可读存储介质及装置
CN115438777A (zh) 对神经元数据执行Winograd卷积正变换的装置
CN114692849A (zh) 逆变换Winograd卷积的对位乘数据的逆变换单元、装置与板卡
CN115438778A (zh) 执行Winograd卷积的集成电路装置
CN114692811A (zh) 执行Winograd卷积的装置与板卡

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