CN116861973A - 用于卷积运算的改进的电路、芯片、设备及方法 - Google Patents
用于卷积运算的改进的电路、芯片、设备及方法 Download PDFInfo
- Publication number
- CN116861973A CN116861973A CN202311134860.XA CN202311134860A CN116861973A CN 116861973 A CN116861973 A CN 116861973A CN 202311134860 A CN202311134860 A CN 202311134860A CN 116861973 A CN116861973 A CN 116861973A
- Authority
- CN
- China
- Prior art keywords
- convolution
- circuit
- data
- input
- channel
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 102
- 230000008569 process Effects 0.000 description 68
- 238000010586 diagram Methods 0.000 description 14
- 238000003491 array Methods 0.000 description 11
- 230000008859 change Effects 0.000 description 10
- 238000013527 convolutional neural network Methods 0.000 description 7
- 238000013528 artificial neural network Methods 0.000 description 6
- 238000012549 training Methods 0.000 description 5
- 238000012937 correction Methods 0.000 description 4
- 101100129500 Caenorhabditis elegans max-2 gene Proteins 0.000 description 3
- 101100083446 Danio rerio plekhh1 gene Proteins 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 230000017525 heat dissipation Effects 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 210000002569 neuron Anatomy 0.000 description 1
- 230000003071 parasitic effect Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
- G06F17/153—Multidimensional correlation or convolution
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Biomedical Technology (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Biophysics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Neurology (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Complex Calculations (AREA)
Abstract
本公开涉及用于卷积运算的改进的电路、芯片、设备及方法。一种用于卷积运算的电路包括:卷积电路,被配置为在每个周期对以下两项执行卷积运算:(1)来自卷积网络的多个输入通道的输入数据的至少一部分,和(2)卷积网络的多个卷积核的系数数据的至少一部分,其中多个卷积核中的每个卷积核与卷积网络的多个输出通道中的相应输出通道相关联。该电路被配置为:使得提供给卷积电路以执行卷积运算的以下一项跨多个连续的周期保持不变:(1)输入数据中被提供给卷积电路的第一数据块,或(2)系数数据中被提供给卷积电路的第二数据块。
Description
技术领域
本公开涉及电子电路领域,并且更具体地,涉及用于卷积运算的改进的电路、芯片、设备及方法。
背景技术
卷积运算是一种常见数学运算。卷积运算具有广泛的应用场景。例如,作为深度学习的代表算法之一,卷积神经网络(Convolutional Neural Network,CNN)包含大量的卷积运算并且具有深度结构。随着技术的发展和需求的增长,在诸如卷积神经网络之类的应用场景中所执行的卷积运算显著增长。
发明内容
本公开的一方面提供了一种用于卷积运算的电路,该电路包括卷积电路,卷积电路被配置为在每个周期对以下两项执行卷积运算:(1)来自卷积网络的多个输入通道的输入数据的至少一部分,和(2)卷积网络的多个卷积核的系数数据的至少一部分,其中多个卷积核中的每个卷积核与卷积网络的多个输出通道中的相应输出通道相关联。该电路被配置为使得提供给卷积电路以执行卷积运算的以下一项跨多个连续的周期保持不变:(1)输入数据中被提供给卷积电路的第一数据块,或(2)系数数据中被提供给卷积电路的第二数据块。
本公开的另一方面提供了一种用于卷积运算的方法,包括:提供卷积电路,该卷积电路被配置为在每个周期对以下两项执行卷积运算:(1)来自卷积网络的多个输入通道的输入数据的至少一部分,和(2)卷积网络的多个卷积核的系数数据的至少一部分,多个卷积核中的每个卷积核与卷积网络的多个输出通道中的相应输出通道相关联;使得提供给卷积电路以执行卷积运算的以下一项跨多个连续的周期保持不变:(1)输入数据中被提供给卷积电路的第一数据块,或(2)系数数据中被提供给卷积电路的第二数据块。
本公开的还有一方面提供了一种计算芯片,包括如本公开所述的用于卷积运算的电路。
本公开的还有一方面提供了一种计算设备,包括如本公开所述的计算芯片。
本公开的还有一方面提供了一种计算装置,包括:一个或多个处理器;以及存储计算机可执行指令的存储器,所述计算机可执行指令在被所述一个或多个处理器执行时使得所述一个或多个处理器执行根据本公开所述的任何方法。
本公开的还有一方面提供了一种其上存储有计算机可执行指令的非瞬态存储介质,所述计算机可执行指令在被一个或多个处理器执行时使得所述一个或多个处理器执行根据本公开所述的任何方法。
通过以下参照附图对本公开的示例性实施例的详细描述,本公开的其它特征及其优点将会变得更为清楚。
附图说明
构成说明书的一部分的附图描述了本公开的实施例,并且连同说明书一起用于解释本公开的原理。
参照附图,根据下面的详细描述,可以更加清楚地理解本公开。
图1示出了执行多通道卷积运算的示例性实例的示意图。
图2示出了根据本公开的实施例的逻辑门元件的示意图。
图3示出了根据本公开的实施例的用于卷积运算的电路的示意图。
图4示出了根据本公开的实施例的执行多通道卷积运算的一种示例性过程的示意图。
图5示出了根据本公开的实施例的执行多通道卷积运算的另一示例性过程的示意图。
图6示出了根据本公开的实施例的用于卷积运算的示例性方法的流程图。
图7示出了根据本公开的实施例的计算芯片的示意图。
图8示出了根据本公开的实施例的计算设备的示意图。
注意,在以下说明的实施方式中,有时在不同的附图之间共同使用同一附图标记来表示相同部分或具有相同功能的部分,而省略其重复说明。在本说明书中,使用相似的标号和字母表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
为了便于理解,在附图等中所示的各结构的位置、尺寸及范围等有时不表示实际的位置、尺寸及范围等。因此,所公开的发明并不限于附图等所公开的位置、尺寸及范围等。此外,附图不必按比例绘制,一些特征可能被放大以示出具体组件的细节。
实施方式
卷积网络是一种被广泛应用的模型。训练或使用卷积网络时,需要执行大量的卷积运算。例如,卷积网络可以包含卷积层。卷积层可以包括一个或多个卷积核(convolutionkernel)。每个卷积核可以由相应的系数数据来表示。卷积层的卷积核可以被用于针对输入通道提供的输入数据执行多通道卷积运算。在多通道卷积运算中,通过对来自多个输入通道的输入数据与多个卷积核的系数数据执行卷积运算,可以生成表示与输入数据的一个或多个特征相关联的结果值。这些结果值可以被提供给与该多个卷积核相关联的多个输出通道,作为多通道输出数据。
图1示出了执行多通道卷积运算的示例性实例1000的示意图。作为示例而非限制,在实例1000中,示出了多通道输入数据1100、多通道系数数据1200以及多通道输出数据1300。可选地,在实例1000中还示出了多通道偏置(bias)数据1400。
多通道输入数据1100可以来自卷积网络的多个输入通道。根据本公开的实施例,多通道输入数据1100可以包括与卷积网络相关联的各种类型的输入数据而不受限制。在一些实施例中,多通道输入数据1100可以包括卷积网络的原始输入数据。取决于训练或使用卷积网络的目的,原始输入数据可以包括但不限于图像数据、音频数据、视频数据、传感器数据等等。在另一些实施例中,多通道输入数据1100可以是卷积网络的至少一部分所产生的结果数据。例如,该结果数据可以包括卷积网络的一个或多个层基于原始输入数据而生成的特征数据。该特征数据可以用作卷积网络的附加卷积层的输入。在还有的一些实施例中,多通道输入数据1100可以是原始输入数据和特征数据的组合。这些数据可以是在卷积网络的训练、测试或使用时提供的。
多通道输入数据1100可以被整体地表示为多维输入数组。该多维输入数组的尺寸可以表示为L×H×CIN,其中CIN表示输入通道的数量,L表示与每个输入通道的输入数据对应的二维数组的宽度,并且H表示每个输入通道的输入数据对应的二维数组的高度。在实例1000中,多通道输入数据1100被表示为多维输入数组X,其中CIN=3,并且L=H=7。来自第一输入通道的输入数据被表示为X[:, :, 0],其在本文中可以被表示为X0。来自第二输入通道的输入数据被表示为X[:, :, 1],其在本文中可以被表示为X1。来自第三输入通道的输入数据被表示为X[:, :, 2],其在本文中可以被表示为X2。注意到,如无特别说明,本公开中的表示索引的值一般从0开始。此外,每个输入通道的输入数据被表示为尺寸为7×7的二维数组。本领域技术人员可以理解,上述L、H、CIN的值仅仅是示例性的。在其他实施例中,L、H、CIN的值可以是其他合适的正整数(例如,不小于2的整数)而不受限制。
在一些可选的实施例中,来自三个输入通道的多通道输入数据1100可以包括图像数据。在一些场景中,该图像数据可以表示RGB图像。该三个输入通道可以分别对应于图像数据的R(红)通道、G(绿)通道或B(蓝)通道。输入数组X中的每个数据点的值可以与相应通道中的相应像素值相关联。在一些可选的实施例中,图像数据可以包括填充(padding)值。例如,图1中来自各个输入通道的输入数据的外周被填充了“0”值。在一些实施例中,填充值可以是任何合适的指定值。在一些实施例中,图像数据的外周可以不包括填充值。
多通道系数数据1200可以与卷积网络的多个卷积核相关联。卷积核又可以称为滤波器(filter)。将输入数据与卷积核的系数数据进行卷积运算而生成的结果值可以表示输入数据的一个或多个特征。作为示例而非限制,系数数据可以与卷积网络的一个或多个参数相关联。例如,系数数据可以与卷积网络的一个或多个权重系数相关联。在卷积网络为神经网络的场景中,该权重系数可以是与神经网络的层中的神经元或神经连接相关联的权重系数。在一些实施例(例如,训练神经网络期间)中,每个卷积核的系数数据可以动态改变。在一些实施例(例如,使用经训练的神经网络期间)中,每个卷积核的系数数据可以是固定的。
多通道系数数据1200可以包括与多个卷积核对应的多个系数数组。该多个卷积核中的每个卷积核对应于卷积网络的多个输出通道中的相应输出通道。因此,多个系数数组中的每个系数数组也对应于该多个输出通道中的相应输出通道。在本公开中,多个输出通道的数量可以被表示为COUT。因此,多通道系数数据1200可以包括COUT个系数数组,其可以被表示为w0、w1、……、wCOUT-1。每个系数数组可以是多维的。在一些实施例中,每个系数数组可以被表示为n×n×CIN的多维数组,其中CIN是输入通道的数量,n是与卷积核的尺寸相关联的参数。n是不小于2的正整数。例如,卷积核的尺寸通常可以被选择为n×n。当n=3时,采用的是3×3的卷积。每个系数数组可以具有与多个输入通道中的相应输入通道对应的一部分。该一部分可以被表示为一个二维数组。在实例1000中,多通道系数数据1200包括分别与两个卷积核相关联的系数数组w0、w1。每个系数数组的尺寸为3×3×3。系数数组w0包括对应于第一输入通道的二维数组w0[:, :, 0]、对应于第二输入通道的二维数组w0[:, :, 1]以及对应于第三输入通道的二维数组w0[:, :, 2]。类似地,系数数组w1包括对应于第一输入通道的二维数组w1[:, :, 0]、对应于第二输入通道的二维数组w1[:, :, 1]以及对应于第三输入通道的二维数组w1[:, :, 2]。本领域技术人员可以理解,上述COUT、n、CIN的值仅仅是示例性的。在其他实施例中,COUT、n、CIN的值可以是其他合适的正整数而不受限制。
多通道输出数据1300可以表示对多通道输入数据1100和多通道系数数据1200执行多通道卷积运算的结果。多通道卷积运算的结果可以表示通道输入数据1100的一个或多个特征。多通道输出数据1300可以包含与卷积网络的多个输出通道对应的多个输出数组。该多个输出数组中的每个输出数组可以对应于多个卷积核中的相应卷积核。在实例1000中,多通道输出数据1300可以包括两个输出数组,即第一输出数组out[:, :, 0]和第二输出数组out[:, :, 1]。第一输出数组和第二输出数组分别与第一输出通道和第二输出通道相关联。第一输出数组和第二输出数组分别与第一卷积核和第二卷积核相关联。第一输出数组和第二输出数组中的每个输出数组的尺寸为3×3。本领域技术人员可以理解,当前述L、H、CIN、COUT、n的值改变时,多通道系数数据1300的尺寸也会相应地改变。
在可选的实施例中,多通道偏置数据1400被应用于多通道卷积运算中。多通道偏置数据1400可以包括与每个卷积核对应的偏置值。该偏置值可以被添加到与每个卷积核相关联的卷积结果,以提供附加的校正。经校正的卷积结果可以被提供给相应的输出数组。在一些实施例(例如,训练神经网络期间)中,每个卷积核的偏置值可以动态改变。在一些实施例(例如,使用经训练的神经网络期间)中,每个卷积核的偏置值可以是固定的。在实例1000中,多通道偏置数据1400包括分别与第一卷积核和第二卷积核相关联的偏置值bias0和bias1。
应当理解,实例1000所示的多通道输入数据1100、多通道系数数据1200或多通道偏置数据1400中的各个数据点的值仅仅是示例性的,而不旨在进行限制。在其他实施例中,这些数据点的值中的至少一些可以与实例1000不同。相应地,多通道输出数据1300的各个数据点的值中的至少一些也将与实例1000不同。
在实际应用中,可以使用硬件来实现卷积网络。例如,专用芯片可以被用来实现卷积神经网络。通常由硬件中的卷积电路来执行卷积运算。多通道卷积运算通常被划分到多个周期。卷积电路可以被配置为在每个周期对多通道输入数据1100的一部分和多通道系数数据1200的一部分这二者执行卷积运算。每个卷积运算可以包括乘累加运算,其包括一组乘法运算以及累加运算。每个卷积运算的结果可以对应于多通道输出数据1300中的一个数据点。跨多个周期,卷积电路可以遍历多通道输入数据1100的多个部分和多通道系数数据1200的多个部分。
下面继续结合图1描述根据一种方法的多通道卷积运算的示例性过程S100。作为多通道卷积运算的一部分,过程S100可以包括按顺序执行的步骤S101-S106。
步骤S101可以在第一周期发生。在该步骤中,来自多通道输入数据1100的第一输入通道的输入数据X0的一部分,即X[0:2, 0:2, 0],被提供给卷积电路作为用于卷积运算的第一数据块。X[0:2, 0:2, 0]在图1中被表示为阴影。多通道系数数据1200的系数数组w0的对应于第一输入通道的一部分,即w0[:, :, 0],被提供给卷积电路作为用于卷积运算的第二数据块。卷积电路可以对第一数据块和第二数据块执行卷积运算。即,R = X[0:2, 0:2, 0]* w0[:, :, 0]。本公开中使用符号“*”表示两个数据块之间的卷积运算。对第一数据块和第二数据块的卷积运算可以包括对这两个数据块中的相应对数据点执行乘法运算,并累加各个乘法运算的结果,如下所示:
R = X[0:2, 0:2, 0]* w0[:, :, 0]
= 0×1+0×1+0×(-1)+ 0×(-1)+ 0×0+1×1+0×(-1)+ 0×(-1)+1×0
= 1
当前卷积运算的结果R可以被存储在寄存器temp中。
然后,过程S100可以前进到步骤S102。步骤S102可以在第一周期之后的第二周期发生。在步骤S102中,来自多通道输入数据1100的第二输入通道的输入数据X1的一部分,即X[0:2, 0:2, 1],被提供给卷积电路作为第一数据块。X[0:2, 0:2, 1]在图1中被表示为阴影。多通道系数数据1200的系数数组w0的对应于第二输入通道的一部分,即w0[:, :, 1],被提供给卷积电路作为第二数据块。此时卷积电路的卷积运算的结果R可以被计算为:R = X[0:2, 0:2, 1]* w0[:, :, 1] = -1。当前卷积运算的结果R可以被累加到存储在寄存器temp中的先前值(即,1)。此时,寄存器temp中的累加值=1+(-1)=0。
然后,过程S100可以前进到步骤S103。步骤S103可以在第二周期之后的第三周期发生。在步骤S103中,来自多通道输入数据1100的第三输入通道的输入数据X2的一部分,即X[0:2, 0:2, 2],被提供给卷积电路作为第一数据块。X[0:2, 0:2, 2]在图1中被表示为阴影。多通道系数数据1200的系数数组w0的对应于第三输入通道的一部分,即w0[:, :, 2],被提供给卷积电路作为第二数据块。此时卷积电路的卷积运算的结果R可以被计算为:R = X[0:2, 0:2, 2]* w0[:, :, 2] = 0。当前卷积运算的结果R可以被累加到存储在寄存器temp中的先前值(即,0)。此时,寄存器temp中的累加值=0+0=0。
在与第一卷积核相关联的系数数组w0已经执行了多个输入通道的卷积运算之后,可以将与第一卷积核相关联的偏置值(即,bias0)添加到寄存器temp中的当前累加值。所得的结果可以作为多通道输出数据1300中的第一输出数组的相应数据点,即,out[0,0,0] =0+1 =1。该数据点在图1中被表示为阴影。寄存器temp中的累加值可以被清零。
然后,过程S100可以前进到步骤S104。步骤S104可以在第三周期之后的第四周期发生。在步骤S104中,来自多通道输入数据1100的第一输入通道的输入数据X0的一部分,即X[0:2, 0:2, 0],再次被提供给卷积电路作为第一数据块。多通道系数数据1200的系数数组w1的对应于第一输入通道的一部分,即w1[:, :, 0],被提供给卷积电路作为第二数据块。卷积电路可以对第一数据块和第二数据块中的相应对数据点执行乘法运算,并累加各个乘法运算的结果。此时卷积电路的卷积运算的结果R可以被计算为:R = X[0:2, 0:2, 0]* w1[:, :, 0] = 0。当前卷积运算的结果R可以被存储在寄存器temp中。
然后,过程S100可以前进到步骤S105。步骤S105可以在第四周期之后的第五周期发生。在步骤S105中,来自多通道输入数据1100的第二输入通道的输入数据X1的一部分,即X[0:2, 0:2, 1],被再次提供给卷积电路作为第一数据块。多通道系数数据1200的系数数组w1的对应于第二输入通道的一部分,即w1[:, :, 1],被提供给卷积电路作为第二数据块。此时卷积电路的卷积运算的结果R可以被计算为:R = X[0:2, 0:2, 1]* w1[:, :, 1] = -1。当前卷积运算的结果R可以被累加到存储在寄存器temp中的先前值(即,0)。此时,寄存器temp中的累加值=0+(-1)=-1。
然后,过程S100可以前进到步骤S106。步骤S106可以在第五周期之后的第六周期发生。在步骤S106中,来自多通道输入数据1100的第三输入通道的输入数据X2的一部分,即X[0:2, 0:2, 2],被再次提供给卷积电路作为第一数据块。多通道系数数据1200的系数数组w1的对应于第三输入通道的一部分,即w1[:, :, 2],被提供给卷积电路作为第二数据块。此时卷积电路的卷积运算的结果R可以被计算为:R = X[0:2, 0:2, 2]* w1[:, :, 2] =0。当前卷积运算的结果R可以被累加到存储在寄存器temp中的先前值(即,0)。此时,寄存器temp中的累加值=(-1)+0=-1。
在与第二卷积核相关联的系数数组w1已经计算了多个输入通道的卷积运算之后,可以将与第二卷积核相关联的偏置值(即,bias1)添加到寄存器temp中的当前累加值。所得的结果可以作为多通道输出数据1300中的第二输出数组的相应数据点,即,out[0,0,1] =(-1)+0= -1。该数据点在图1中被表示为阴影。寄存器temp中的累加值可以被清零。
过程S100可以包括附加的步骤。在附加的步骤中,可以滑动各个输入通道的输入数据以得到提供给卷积电路作为用于卷积运算的第一数据块。通过滑动,可以遍历输入数据X,从而获得多通道输出数据1300的第一输出数组和第二输出数组中剩余的数据点。
发明人认识到,在过程S100中,提供给卷积电路以执行卷积运算的第一数据块和第二数据块在当前周期和下一周期之间总是发生改变。例如,在第一周期与第二周期之间,第一数据块从X[0:2, 0:2, 0]改变为X[0:2, 0:2, 1],并且第二数据块从w0[:, :, 0]改变为w0[:, :, 1]。又例如,第二周期与第三周期之间,第一数据块从X[0:2, 0:2, 1]改变为X[0:2, 0:2, 2],并且第二数据块从w0[:, :, 1]改变为w0[:, :, 2]。在其他相邻的两个周期之间也是如此。对于使用半导体元件(例如,逻辑门元件)实现的硬件电路而言,提供给半导体元件作为输入的数据的频繁改变将不利地增加逻辑门元件的功耗。
图2示出了根据本公开的实施例的逻辑门元件2000的示意图。逻辑门元件2000可以是实现卷积电路的基本硬件单元。逻辑门元件2000包括彼此连接的PMOS管和NMOS管。应当理解,图2所述的逻辑门元件2000的构造仅仅是示例性的。实际使用的逻辑门元件可以包括其他的构造,并且也符合本公开所阐述的一般原理。
逻辑门元件2000的功耗包括静态功耗和动态功耗。静态功耗又称为漏电功耗。动态功耗包括短路功耗和翻转功耗。PMOS和NMOS管的互联结构都导通时将产生短路电流,其所导致的功耗称为短路功耗。当逻辑门元件2000的输入VIN翻转时,负载电容CLOAD将发生充电或放电,其所导致的功耗称为翻转功耗。翻转功耗Pswitch可以被计算为:
Pswitch= ½ ×VDD2 × CLOAD × Tr
其中,VDD表示电源电压,CLOAD表示逻辑门元件2000的负载电容。Tr表示翻转率,其表示逻辑门元件的输入的翻转频率。翻转频率可以用单位时间内的翻转次数来表示。因此,逻辑门元件2000的翻转功耗与翻转频率相关联。可以通过降低翻转频率来降低逻辑门元件2000的翻转功耗。
卷积电路是由类似于逻辑门元件2000的大量逻辑门元件所组成的。例如,这些逻辑门元件可以被用来实现卷积电路的乘法器或加法器。这些逻辑门元件也可以被用来实现寄存器,等等。发明人认识到,当提供给卷积电路的数据块频繁地变化时,组成卷积电路的逻辑门元件的输入将频繁地翻转。这可能导致这些逻辑门元件的一个或多个输出也频繁地翻转。这些输出可能是下一级逻辑门元件的输入。相应地,提供给卷积电路的数据块的频繁变化将不利地提高卷积电路的逻辑门元件的翻转频率,从而增大逻辑门元件的翻转功耗。增大的功耗不仅增加了计算成本,也带来了散热方面的问题。这对于集成了大量卷积电路的硬件(例如,计算芯片)来说是不期望的。
本公开的实施例提供了用于卷积运算的改进的电路、芯片、设备及方法。在至少一个方面,本公开的实施例能够降低卷积电路的翻转功耗,从而降低与卷积运算相关联的整体功耗。
图3示出了根据本公开的实施例的用于卷积运算的电路3000的示意图。电路3000可以包括卷积电路3100。卷积电路3100可以被配置为在每个周期对以下项执行卷积运算:(1)来自卷积网络的多个输入通道的输入数据的至少一部分,和(2)卷积网络的多个卷积核的系数数据的至少一部分。
例如,输入数据可以是关于图1所讨论的多通道输入数据1100,而系数数据可以是关于图1所讨论的多通道系数数据1200。多个卷积核中的每个卷积核可以与卷积网络的多个输出通道中的相应输出通道相关联。例如,图1中的第一卷积核可以与第一输出通道相关联,并且第二卷积核可以与第二输出通道相关联。来自卷积网络的多个输入通道的输入数据的该至少一部分可以被用作卷积运算的第一数据块。卷积网络的多个卷积核的系数数据的该至少一部分可以被用作卷积运算的第二数据块。在该周期中,卷积运算可以是对整个第一数据块和整个第二数据块执行的。
应当理解,尽管图3将输入数据1100和系数数据1200示出为电路3000外部的数据源,但是在一些实施例中,输入数据1100和系数数据1200可以是电路3000内部的数据源。例如,电路3000内部可以具有附加的存储装置,其可以被用于接收并存储输入数据1100和系数数据1200。在一些场景中,系数数据1200对于给定的卷积网络是固定的。因此,可以将系数数据1200存储在电路3000内部。
为了实现卷积运算,卷积电路3100可以包括一组乘法器3110和加法器3120。乘法器3110可以被配置为对来自输入数据1100的第一数据块和来自系数数据1200的第二数据块中的相应对数据点执行n×n次乘法运算。加法器3120可以被配置为对这些乘法运算的n×n个结果值进行累加。在一些实施例中,卷积电路3100可以包括一组n×n个乘法器。在一些实施例中,卷积电路3100可以包括多组n×n个乘法器。
乘法器3110和加法器3120可以包括各种逻辑门元件。逻辑门元件可以被配置为通过如上所述的乘累加运算来执行卷积运算。可以使用各种合适的逻辑门元件及其组合来实现乘法器3110和加法器3120,而不脱离本公开的范围。对于逻辑门元件而言,数据的输入和输出通常是被周期性的时钟信号(图中未示出)所触发的。在本公开中,用于卷积运算的周期可以表示卷积电路3100完成一对数据块(即,第一数据块和第二数据块)的卷积运算所需的时间段。该时间段通常是基本稳定的。该时间段可以跨时钟信号的一个或多个时钟周期。
根据本公开的实施例,电路3000可以可选地包括控制电路3200。针对每个周期,控制电路3200可以被配置为从输入数据1100中选择用于当前周期的卷积运算的第一数据块,并且从系数数据1200中选择用于当前周期的卷积运算的第二数据块。在一些实施例中,控制电路3200可以被实现为硬连线逻辑。在一些实施例中,控制电路3200可以被实现为受软件逻辑控制的硬件电路,软件可以是可执行的代码指令。在一些实施例中,控制电路3200可以被省略。
根据本公开的实施例,电路3000可以可选地包括一个或多个寄存器3300。寄存器3300可以被用于存储一个或多个卷积运算的一个或多个结果,或多个卷积运算的结果的累加值。尽管图3示出寄存器3300是电路3000的一部分,但是本领域技术人员可以理解,寄存器3300也可以位于电路3000之外。
根据本公开的实施例,电路3000可以被配置为使得提供给卷积电路3100以执行卷积运算的至少一个数据块跨多个连续的周期保持不变。这例如可以通过控制电路3200来执行。在一些实施例中,保持不变的该至少一个数据块包括从输入数据1100中提供给卷积电路的第一数据块。在一些实施例中,保持不变的该至少一个数据块包括从系数数据1200中提供给卷积电路的第二数据块。
在一些实施例中,电路3000可以被配置为使得从输入数据1100中提供给卷积电路的第一数据块跨多个连续的周期保持不变,而从系数数据1200中提供给卷积电路的第二数据块在这些周期可以变化。例如,对于具有CIN个输入通道和COUT个输出通道的多通道卷积运算,电路3000可以被配置为执行CIN轮卷积运算。每轮卷积运算可以包括连续的COUT个周期,其中输入数据1100中被提供给卷积电路3100的第一数据块在该连续的COUT个周期中保持不变。
具体而言,在一轮卷积运算的COUT个周期中的每个周期中,电路3000可以被配置为向卷积电路3100提供来自同一特定输入通道的相同输入数据作为第一数据块。换句话说,该相同输入数据跨该轮卷积运算的COUT个周期保持不变。在每个周期中,电路3000可以被配置为向卷积电路3100提供多个卷积核中的相应卷积核的相应系数数据作为第二数据块。在一些实施例中,每个周期所关联的相应卷积核是至少基于当前周期而确定的。例如,可以采用在COUT个周期中遍历COUT个卷积核的任何方式,使得在该COUT个周期中的不同周期中提供的第二数据块来自于与不同卷积核相关联的系数数据。在以上述方式确定每个周期所使用的第一数据块和第二数据块的情况下,可以通过卷积电路3100对所确定的第一数据块和第二数据块执行卷积运算以获得相应卷积结果。相应卷积结果可以被累加到多个寄存器3300中的相应寄存器中。
在一些实施例中,进一步地,跨该CIN轮卷积运算中的每轮卷积运算,可以改变从其获得第一数据块的特定输入通道。换句话说,与每轮卷积运算相关联的特定输入通道可以是不同的。每轮卷积运算所使用的第一数据块可以来源于不同的输入通道。通过这种方式,可以在CIN轮卷积运算中遍历CIN个输入通道。
在一些实施例中,进一步地,可以至少基于多个寄存器3300中的多个累加值,确定与多个输出通道相关联的多个结果值。可选地,可以将偏置数据1400所包含的多个偏置值中的相应偏置值添加到该多个寄存器3300中的相应寄存器中的相应累加值,以确定与多个输出通道中的相应输出通道相关联的相应结果值。这些相应结果值可以表示与多个输出通道相关联的多个结果值。该多个结果值可以被输出作为多通道输出数据1300的一部分。应当理解,偏置值的使用仅仅是为了提供对卷积结果的附加校正。在一些场景中,该附加校正是可选的。在一些场景中,可以不提供附加校正。相应地,可以省略添加任何偏置值。
图4示出了根据本公开的实施例的执行多通道卷积运算的示例性过程S400的示意图。过程S400在与前述过程S100相同的实例1000中执行。因此,过程S400针对相同的多通道输入数据1100、多通道系数数据1200和多通道偏置数据1400执行。相应地,过程S400产生与过程S100相同的卷积结果(即,多通道输出数据1300)。然而,与过程S100相比,过程S400具有不同的调度,使得从输入数据1100中提供给卷积电路的第一数据块跨多个连续的周期保持不变。
作为多通道卷积运算的一部分,过程S400可以包括按顺序执行的步骤S401-S406。步骤S401-S406可以被划分为3个轮次(CIN=3),每个轮次包括2个周期的卷积运算(COUT=2)。具体而言,第一轮次包括步骤S401-S402,第二轮次包括步骤S403-S404,第三轮次包括步骤S405-S406。每个轮次可以与多个输入通道中的相应输入通道相关联。作为示例,第一轮次、第二轮次和第三轮次可以分别与第一输入通道、第二输入通道、第三输入通道相关联。
第一轮次中的步骤S401可以在第一周期发生。在该步骤中,来自多通道输入数据1100的第一输入通道的输入数据X0的一部分,即X[0:2, 0:2, 0],被提供给卷积电路作为第一数据块。多通道系数数据1200的系数数组w0的对应于第一输入通道的一部分,即w0[:,:, 0],被提供给卷积电路作为第二数据块。相应地,卷积运算可以被计算为:R = X[0:2,0:2, 0]* w0[:, :, 0] = 1。当前卷积运算的结果R可以被存储在与第一输出通道对应的寄存器temp0中。
然后,过程S400可以前进到第一轮次中的步骤S402。步骤S402可以在第一周期之后的第二周期发生。在步骤S402中,被提供给卷积电路的第一数据块保持不变,即,保持为X[0:2, 0:2, 0]。第二数据块被改变为多通道系数数据1200的系数数组w1的对应于第二输入通道的一部分,即w1[:, :, 0]。此时卷积电路的卷积运算的结果R可以被计算为:R = X[0:2, 0:2, 0]* w1[:, :, 0] = 0。当前卷积运算的结果R可以被存储在与第二输出通道对应的寄存器temp1中。
然后,过程S400可以前进到第二轮次。第二轮次可以从步骤S403开始。步骤S403可以在第二周期之后的第三周期发生。在步骤S403中,第一数据块被改变为来自多通道输入数据1100的第二输入通道的输入数据X1的一部分,即X[0:2, 0:2, 1]。第二数据块被改变为多通道系数数据1200的系数数组w0的对应于第二输入通道的一部分,即w0[:, :, 1]。此时卷积电路的卷积运算的结果R可以被计算为:R = X[0:2, 0:2, 1]* w0[:, :, 1] = -1。当前卷积运算的结果R可以被累加到与第一输出通道对应的寄存器temp0中的先前值(即,1)。此时,寄存器temp0中的累加值=1+(-1)=0。
然后,过程S400可以前进到第二轮次的步骤S404。步骤S404可以在第三周期之后的第四周期发生。在步骤S404中,第一数据块保持为X[0:2, 0:2, 1]。第二数据块被改变为多通道系数数据1200的系数数组w1的对应于第二输入通道的一部分,即w1[:, :, 1]。此时卷积电路的卷积运算的结果R可以被计算为:R = X[0:2, 0:2, 1]* w1[:, :, 1] = -1。当前卷积运算的结果R可以被累加到存储在与第二输出通道对应的寄存器temp1中的先前值(即,0)。此时,寄存器temp1中的累加值=0+(-1)=-1。
然后,过程S400可以前进到第三轮次。第三轮次可以从步骤S405开始。步骤S405可以在第四周期之后的第五周期发生。在步骤S405中,第一数据块可以被改变为来自多通道输入数据1100的第三输入通道的输入数据X2的一部分,即X[0:2, 0:2, 2]。第二数据块可以被改变为多通道系数数据1200的系数数组w0的对应于第三输入通道的一部分,即w0[:,:, 2]。此时卷积电路的卷积运算的结果R可以被计算为:R = X[0:2, 0:2, 2]* w0[:, :,2] = 0。当前卷积运算的结果R可以被累加到存储在与第一输出通道对应的寄存器temp0中的先前值(即,0)。此时,寄存器temp0中的累加值=0+0=0。
在关于系数数组w0已经计算了多个输入通道的卷积运算之后,可以将与第一卷积核相关联的偏置值(即,bias0)添加到寄存器temp0中的当前累加值。所得的结果可以作为多通道输出数据1300中的第一输出数组的相应数据点,即,out[0,0,0] = 0+1 =1。寄存器temp0中的累加值可以被清零。
然后,过程S400可以前进到第三轮次的步骤S406。步骤S406可以在第五周期之后的第六周期发生。在步骤S406中,第一数据块保持为X[0:2, 0:2, 2]。第二数据块被改变为多通道系数数据1200的系数数组w1的对应于第三输入通道的一部分,即w1[:, :, 2]。此时卷积电路的卷积运算的结果R可以被计算为:R = X[0:2, 0:2, 2]* w1[:, :, 2] = 0。当前卷积运算的结果R可以被累加到存储在寄存器temp1中的先前值(即,-1)。此时,寄存器temp1中的累加值= (-1)+0=-1。
在关于系数数组w1已经计算了多个输入通道的卷积运算之后,可以将与第二卷积核相关联的偏置值(即,bias1)添加到寄存器temp1中的当前累加值。所得的结果可以作为多通道输出数据1300中的第二输出数组的相应数据点。即,out[0,0,1] = (-1)+0= -1。该数据点在图4中被表示为阴影。寄存器temp1中的累加值可以被清零。
在过程S400中,来自多通道输入数据1100的第一数据块跨不同的轮次发生变化。对于同一轮次中的2个计算周期,第一数据块保持不变。因此,与过程S100相比,过程S400能够降低卷积电路的第一数据块和第二数据块的总体变化频率。例如,在过程S100的前述6个周期中,第一数据块变化了6次,并且第二数据块变化了6次,两者的变化次数之和为12。与之相比,在过程S400的前述6个周期中,第一数据块仅变化了3次,并且第二数据块变化了6次,两者的变化次数之和为9次。通过减少第一数据块和第二数据块的总体变化频率,可以有利地减少构成卷积电路的各个逻辑门电路的翻转频率,从而降低这些逻辑门电路的翻转功耗。
应当理解,过程S400的步骤S401-S406的执行顺序仅仅是示例性的。在其他实施例中,可以改变步骤S401-S406的执行顺序,并取得类似的技术效果。例如,同一轮次内的步骤的顺序可以交换,只要该轮次的各个步骤中使用的是相同的第一数据块。进一步地,三个轮次执行的顺序也可以变换。例如,可以先执行第二轮次(S403-S404)、再执行第三轮次(S405-S406),然后执行第一轮次(S401-S402。也可以以其他合适的顺序执行这三个轮次。
应当理解,过程S400可以包括附加的轮次。在附加的轮次中,可以在各个输入通道的输入数据上滑动以得到提供给卷积电路作为用于卷积运算的第一数据块。通过滑动,可以遍历多通道输入数据1100,从而获得多通道输出数据1300的第一输出数组和第二输出数组中剩余的数据点。该滑动可以基于预定滑动步长。预定滑动步长可以被表示为每次滑过的数据点的数量。
作为示例而非限制,过程S400可以针对实例1000执行附加的3个轮次,即,第四轮次、第五轮次、第六轮次。作为示例,第四轮次、第五轮次、第六轮次可以分别与三个输入通道中的第一输入通道、第二输入通道、第三输入通道相关联。在第四轮次中,第一数据块可以保持为第一输入通道的输入数据X0的一部分,例如,X[0:2, 2:4, 0]。X[0:2, 2:4, 0]相对于第一轮次中的X[0:2, 0:2, 0]向右滑动预定滑动步长2。在该轮次的两个周期中,第二数据块可以分别为w0[:, :, 0]和w1[:, :, 0]。在第五轮次中,第一数据块可以保持为第二输入通道的输入数据X1的一部分,例如,X[0:2, 2:4, 1]。X[0:2, 2:4, 1]相对于第二轮次中的X[0:2, 0:2, 1]向右滑动预定滑动步长2。在该轮次的两个周期中,第二数据块可以分别为w0[:, :, 1]和w1[:, :, 1]。在第六轮次中,第一数据块可以保持为第三输入通道的输入数据X2的一部分,例如,X[0:2, 2:4, 2]。X[0:2, 2:4, 2]相对于第二轮次中的X[0:2,0:2, 2]向右滑动预定滑动步长2。在该轮次的两个周期中,第二数据块可以分别为w0[:,:, 2]和w1[:, :, 2]。可以类似地滑动以遍历全部输入数据,并相应地执行一个或多个轮次(其中滑动的方向可以向右,也可以向下)。在其他实施例中,预定滑动步长可以是其他合适的正整数值。
下面对于更一般的多通道输入数据1100和多通道系数数据1200进行描述。如前所述,多通道输入数据1100可以被表示为尺寸为L×H×CIN的多维数组,其中CIN表示输入通道的数量,L表示与每个输入通道的输入数据对应的二维数组的宽度,并且H表示每个输入通道的输入数据对应的二维数组的高度。多通道系数数据1200可以被表示为COUT个系数数组w0、w1、……、wCOUT-1。每个系数数组可以被表示为尺寸为n×n×CIN的多维数组。在这种情况下,可以如表1所示的那样选择每个周期提供给卷积电路的第一数据块和第二数据块。
表1
具体而言,卷积电路可以被配置为执行CIN轮卷积运算。每轮卷积运算可以包括COUT个周期。相应地,表1中一共示出了CIN×COUT个周期。在CIN轮卷积运算的第一轮次中,第一数据块保持为X[0:n-1,0:n-1,0],而第二数据块遍历COUT个系数数组w0、w1、……、wCOUT-1。在第二轮次中,第一数据块保持为X[0:n-1,0:n-1,1],而第二数据块遍历该COUT个系数数组。依次类推,直到第CIN个轮次。在第CIN个轮次中,第一数据块保持为X[0:n-1,0:n-1, CIN-1],而第二数据块遍历COUT个系数数组。每个轮次的第K个周期中所使用的系数数组可以基于该周期的计数K而确定(1≤K≤COUT)。在表1的示例中,该系数数组可以是wK-1。此外,该周期中所得到的卷积结果可以被累加到COUT个寄存器中的相应寄存器中。在表1的示例中,该相应寄存器可以是TempK-1。
可选地,可以将COUT个偏置值中的相应偏置值添加到所述COUT个寄存器中的相应寄存器中的相应累加值,以确定与COUT个输出通道中的相应输出通道相关联的相应结果值。具体地,可以将与第K个输出通道相关联的偏置值BiasK-1添加到寄存器TempK-1中的累加值。
通过表1所示的CIN×COUT个周期,可以得到计算COUT个输出通道上各一个点结果。在此过程中,第一数据块的变化次数仅为过程S100所示方法的1/COUT。
应当理解,表1所示的执行顺序仅仅是示例性的。在其他实施例中,CIN个轮次执行的顺序也可以改变。此外,在保证同一轮次内的COUT个步骤所使用的第一数据块不变的情况下,该COUT个步骤的顺序可以改变。
在替代的实施例中,电路3000可以被配置为不是使得第一数据块保持不变,而是从系数数据1200中提供给卷积电路的第二数据块跨多个连续的周期保持不变。在这些实施例中,从输入数据1100中提供给卷积电路的第一数据块在这些周期可以变化。例如,对于具有CIN个输入通道的多通道卷积运算,电路3000可以被配置为执行CIN轮卷积运算。每轮卷积运算可以包括连续的P个周期,其中系数数据1200中被提供给卷积电路3100的第二数据块在该连续的P个周期中保持不变。P可以是不小于2的整数。
在一些实施例中,P的值可以基于每个输入通道的输入数据的尺寸以及预定滑动步长来确定。如前所述,每个输入通道的输入数据可以被表示为尺寸为L×H的二维数组,其中L表示该二维数组的宽度,并且H表示该二维数组的高度。如果每轮卷积运算中的滑动是在该二维数组上横向执行的(例如,向左或向右滑动),则P的最大值Pmax1可以表示所允许的最大横向滑动次数。例如,Pmax1的值可以基于卷积核的尺寸参数n、宽度L以及预定横向滑动步长D1来确定。如果每轮卷积运算中的滑动是在该二维数组上纵向执行的(例如,向上或向下滑动),则P的最大值Pmax2可以表示所允许的最大纵向滑动次数。例如,Pmax2的值可以基于卷积核的尺寸参数n、高度H以及预定纵向滑动步长D2来确定。如果每轮卷积运算中的滑动是在该二维数组上横向和纵向执行的(例如,向右滑动与向下滑动的组合),则P的最大值Pmax3可以表示所允许的最大滑动次数。例如,Pmax3的值可以基于卷积核的尺寸参数n、宽度L、预定横向滑动步长D1、高度H以及预定纵向滑动步长D2来确定。在一些实施例中,预定横向滑动步长D1可以与预定纵向滑动步长D2相同。在另一些实施例中,预定横向滑动步长D1可以与预定纵向滑动步长D2不同。可以根据需要选择合适的P值,只要所选择的值不超过对应的所允许的最大值(Pmax1、Pmax2或Pmax3)。
对于该CIN轮卷积运算中的每轮卷积运算,在该轮卷积运算的P个周期中的每个周期中,电路3000可以被配置为向卷积电路3100提供来自多个输入通道中的同一特定输入通道的输入数据的相应一部分作为第一数据块,其中所提供的相应一部分是至少基于预定滑动步长和该周期而确定的。也就是说,该相应一部分可以随周期的变化而变化。
进一步地,在该轮卷积运算的P个周期中的每个周期中,电路3000可以被配置为向卷积电路3100提供多个卷积核中的同一特定卷积核的相同系数数据作为第二数据块。换句话说,该相同系数数据跨该轮卷积运算的P个周期保持不变。在以上述方式确定每个周期所使用的第一数据块和第二数据块的情况下,可以通过卷积电路3100对所确定的第一数据块和第二数据块执行卷积运算以获得相应卷积结果。相应卷积结果可以被累加到多个寄存器3300中的相应寄存器中。
在一些实施例中,在一轮卷积运算中,可以通过基于周期计数的递增而在与该轮次相关联的特定输入通道的输入数据上滑动,从而获得该轮次的P个周期中的每个周期中被用作第一数据块的相应一部分。每个周期可以滑动一预定滑动步长。以这种方式,在相邻两个周期中,向卷积电路提供的第一数据块分别是来自该特定输入通道的输入数据的两个相近的部分,其中第二部分相对于第一部分偏移一预定滑动步长。发明人认识到,一些输入数据具有局部相似性。相应地,该输入数据中空间上相近的两个数据部分之间很可能具有小的差异。这使得通过滑动而得到的第一部分和第二部分之间的差异很可能较小。作为结果,作为相邻两个周期的第一数据块而被提供给卷积电路3100的该第一部分和该第二部分可能不会导致卷积电路3100的各元件的大量的翻转。这有助于降低卷积电路的翻转功耗。具有显著局部相似性的输入数据的示例包括但不限于图像数据。例如,一些图像数据中可能存在大面积相同或相似的图案。在一些实施例中,图像的每个像素由8位数据表示,那么表示同一图像中两个相近的像素的两个数据值一般不会全部8个位都不同。相反,该8个位中可能仅有几个位不同,而剩余位是相同的。
在一些实施例中,进一步地,跨CIN轮卷积运算中的各轮卷积运算,从特定卷积核的系数数据中,改变提供给卷积电路的第二数据块。换句话说,CIN轮卷积运算中的不同轮次所使用的第二数据块可以是该特定卷积核的系数数据的不同部分。具体而言,每轮卷积运算所使用的第二数据块可以来源于该特定卷积核的系数数据中与不同的输入通道对应的一部分。通过这种方式,可以在CIN轮卷积运算中遍历特定卷积核的系数数据中与CIN个输入通道对应的不同部分。
在一些实施例中,进一步地,在一轮卷积运算中,可以至少基于多个寄存器3300中的多个累加值,确定多个输出通道中与特定卷积核相关联的特定输出通道的多个结果值。可选地,可以将同一偏置值分别添加到该多个寄存器中的该多个累加值,以确定该特定输出通道的该多个结果值。该同一偏置值可以是偏置数据1400中与该特定卷积核相关联(即,与该特定输出通道相关联)的偏置值。这些相应结果值可以表示与同一特定输出通道相关联的多个结果值。该多个结果值可以被输出作为多通道输出数据1300的一部分。偏置值的使用是可选而非必须的。
图5示出了根据本公开的实施例的执行多通道卷积运算的示例性过程S500的示意图。为便于比较,过程S500在与前述过程S100和过程S400相同的实例1000中执行。因此,过程S500针对相同的多通道输入数据1100、多通道系数数据1200和多通道偏置数据1400执行。相应地,过程S500产生与过程S100和过程S400相同的卷积结果(即,多通道输出数据1300)。然而,与过程S100和过程S400相比,过程S500具有不同的调度。
作为多通道卷积运算的一部分,过程S500可以包括按顺序执行的步骤S501-S506。步骤S501-S506可以被划分为3个轮次(CIN=3),每个轮次包括2个周期的卷积运算(P=2)。在示例性过程S500中,P被选择为2以方便将过程S500与前面的过程S100和过程S400进行对比。可以理解,在替代的实施例中,P可以被选择为其他合适的值。在过程S500中,第一轮次包括步骤S501-S502,第二轮次包括步骤S503-S504,第三轮次包括步骤S505-S506。作为示例,第一轮次、第二轮次和第三轮次可以与同一卷积核(例如,第一卷积核)的系数数组w0相关联。具体地,第一轮次、第二轮次和第三轮次可以分别与系数数组w0的三个不同部分相关联。例如,第一轮次可以与系数数组w0中对应于第一输入通道的一部分(即,w0[:, :, 0])相关联,第二轮次可以与系数数组w0中对应于第二输入通道的一部分(即,w0[:, :, 1])相关联,并且第三轮次可以与系数数组w0中对应于第三输入通道的一部分(即,w0[:, :, 2])相关联。
第一轮次中的步骤S501可以在第一周期发生。在该步骤中,来自多通道输入数据1100的第一输入通道的输入数据X0的一部分,即X[0:2, 0:2, 0],被提供给卷积电路作为第一数据块。X[0:2, 0:2, 0]用阴影表示。系数数组w0中对应于第一输入通道的一部分,即w0[:, :, 0],被提供给卷积电路作为第二数据块。相应地,卷积运算可以被计算为:R = X[0:2, 0:2, 0]* w0[:, :, 0] = 1。当前卷积运算的结果R可以被存储在寄存器temp0中。
然后,过程S500可以前进到第一轮次中的步骤S502。步骤S502可以在第一周期之后的第二周期发生。在步骤S502中,被提供给卷积电路的第二数据块保持不变,即,保持为w0[:, :, 0]。第一数据块被改变为第一输入通道的输入数据X0的另一部分。该另一部分可以是通过在输入数据X0中将在先的第一数据块(即,X[0:2, 0:2, 0])滑动一预定滑动步长而得到的。在图5的示例中,预定滑动步长为2(即,2个数据点),并且滑动的方向为向右。因此,所得到的该另一部分可以被表示为X[0:2, 2:4, 0],其被作为步骤S502中的第一数据块,如图5中的加粗框所示。相应地,卷积运算可以被计算为:R = X[0:2, 2:4, 0]* w0[:,:, 0] = -1。当前卷积运算的结果R可以被存储在寄存器temp1中。
然后,过程S500可以前进到第二轮次。第二轮次可以从步骤S503开始。步骤S503可以在第二周期之后的第三周期发生。在步骤S503中,第一数据块被改变为来自多通道输入数据1100的第二输入通道的输入数据X1的一部分,即X[0:2, 0:2, 1]。第二数据块被改变为多通道系数数据1200的系数数组w0的对应于第二输入通道的一部分,即w0[:, :, 1]。此时卷积电路的卷积运算的结果R可以被计算为:R = X[0:2, 0:2, 1]* w0[:, :, 1] = -1。当前卷积运算的结果R可以被累加到寄存器temp0中的先前值(即,1)。此时,寄存器temp0中的累加值=1+(-1)=0。
然后,过程S500可以前进到第二轮次的步骤S504。步骤S504可以在第三周期之后的第四周期发生。在步骤S504中,被提供给卷积电路的第二数据块保持不变,即,保持为w0[:, :, 1]。第一数据块被改变为第二输入通道的输入数据X1的另一部分。该另一部分可以是通过在输入数据X1中将在先的第一数据块(即,X[0:2, 0:2, 1])滑动一预定滑动步长而得到的。在图5的示例中,所得到的该另一部分可以被表示为X[0:2, 2:4, 1],其被作为步骤S504中的第一数据块,如图5中的加粗框所示。相应地,卷积运算可以被计算为:R = X[0:2, 2:4, 1]* w0[:, :, 1] = -1。当前卷积运算的结果R可以被可以被累加到存储在寄存器temp1中的先前值(即,-1)。此时,寄存器temp1中的累加值=(-1)+(-1)=-2。
然后,过程S500可以前进到第三轮次。第三轮次可以从步骤S505开始。步骤S505可以在第四周期之后的第五周期发生。在步骤S505中,第一数据块可以被改变为来自第三输入通道的输入数据X2的一部分,即X[0:2, 0:2, 2]。第二数据块可以被改变为系数数组w0的对应于第三输入通道的一部分,即w0[:, :, 2]。此时卷积电路的卷积运算的结果R可以被计算为:R = X[0:2, 0:2, 2]* w0[:, :, 2] = 0。当前卷积运算的结果R可以被累加到存储在寄存器temp0中的先前值(即,0)。此时,寄存器temp0中的累加值=1+(-1)+0=0。
然后,过程S500可以前进到第三轮次的步骤S506。步骤S506可以在第五周期之后的第六周期发生。在步骤S506中,被提供给卷积电路的第二数据块保持不变,即,保持为w0[:, :, 2]。第一数据块被改变为第三输入通道的输入数据X2的另一部分。该另一部分可以是通过在输入数据X2中将在先的第一数据块(即,X[0:2, 0:2, 2])滑动一预定滑动步长而得到的。在图5的示例中,所得到的该另一部分可以被表示为X[0:2, 2:4, 2],其被作为步骤S506中的第一数据块,如图5中的加粗框所示。相应地,卷积运算可以被计算为:R = X[0:2, 2:4, 2]* w0[:, :, 2] = 1。当前卷积运算的结果R可以被累加到存储在寄存器temp1中的先前值(即,-2)。此时,寄存器temp1中的累加值1+(-2)=-1。
附加地,可以将与第一卷积核相关联的偏置值(即,bias0)添加到寄存器temp0和temp1中的当前累加值。相应地,可以得到多通道输出数据1300中的第一输出数组的相应数据点,即,out[0,0,0] = 0+1 =1,out[0,1,0]= 0+1 =(-1)+1=0,如阴影部分所示。寄存器temp0和temp1中的各累加值可以被清零。
在过程S500中,来自多通道系数数据1200的第二数据块可以跨不同的轮次发生变化。对于同一轮次中的2个计算周期,第二数据块保持不变。因此,与过程S100相比,过程S500能够降低卷积电路的第一数据块和第二数据块的总体变化频率。例如,在过程S100的前述6个周期中,第一数据块变化了6次,并且第二数据块变化了6次,两者的变化次数之和为12。与之相比,在过程S500的前述6个周期中,第一数据块变化了6次,并且第二数据块变化了3次,两者的变化次数之和为9次。通过减少第一数据块和第二数据块的总体变化频率,可以有利地减少构成卷积电路的各个逻辑门电路的翻转频率,从而降低这些逻辑门电路的翻转功耗。
应当理解,过程S500中选择的P值(即,P=2)是示例性的。在其他实施例中,P可以取不同的值,使得每个轮次的卷积运算所跨的周期数更多。例如,在针对实例1000的另一实施例中,P可以被选择为3。在这种情况下,过程S500的三轮卷积运算中的每轮卷积运算可以跨3个周期。相应地,第一轮卷积运算还可以包括步骤S501和S502之后的附加的步骤。在该附加的步骤中,被提供给卷积电路的第二数据块保持不变,即,保持为w0[:, :, 0]。第一数据块被改变为第一输入通道的输入数据X0的另一部分。该另一部分可以是通过在输入数据X0中将在先的第一数据块(即,X[0:2, 2:4, 0])向右滑动预定滑动步长2而得到的。所得到的该另一部分可以被表示为X[0:2, 4:6, 0],其被作为该附加的步骤中的第一数据块。卷积运算可以被计算为:R = X[0:2, 4:6, 0]* w0[:, :, 0]。当前卷积运算的结果R可以被存储在寄存器temp2中。可以理解,过程S500的第二轮和第三轮卷积运算可以各自具有类似的附加的步骤。
应当理解,过程S500中所示的滑动的起点(即,X[0:2, 0:2, 0])和方向(即,向右)是示例性的。在其他实施例中,该滑动可以具有不同的起点和/或不同的方向。在一些实施例中,第一数据块可以从X[0:2, 4:6, 0]起向左滑动。在一些实施例中,第一数据块可以从X[0:2, 0:2, 0]起向下滑动。在P大于3的一些实施例中,第一数据块可以从X[0:2, 0:2,0]起向右滑动,并在抵达X[0:2, 4:6, 0]后继续向下滑动。取决于P的值、滑动的方向以及滑动的步长,存在在输入数据上进行滑动的各种方式。
进一步地,同一轮次内的相邻两个周期中被使用的第一数据块是同一输入通道的输入数据中彼此相近的两个部分。对于具有局部相似性的输入数据,这两个部分之间的差异很可能较小。因此,尽管相邻两个周期发生了第一数据块的变化,但这种变化可能足够小。足够小的变化可能不会导致卷积电路3100的各元件的大量的翻转。这可以有利地进一步降低卷积电路的翻转功耗。
应当理解,过程S500可以包括附加的轮次。例如,可以针对通过进一步滑动而得到的第一数据块执行一些附加的轮次,如前所述。又例如,可以针对第二卷积核的系数数组w1执行一些附加的轮次。可以执行附加的轮次直到遍历多通道输入数据1100,从而获得多通道输出数据1300的第一输出数组和第二输出数组中剩余的数据点。
下面对于更一般的多通道输入数据1100和多通道系数数据1200进行描述。如前所述,多通道输入数据1100可以被表示为尺寸为L×H×CIN的多维数组,其中CIN表示输入通道的数量,L表示与每个输入通道的输入数据对应的二维数组的宽度,并且H表示每个输入通道的输入数据对应的二维数组的高度。多通道系数数据1200可以被表示为COUT个系数数组w0、w1、……、wCOUT-1。每个系数数组可以被表示为尺寸为n×n×CIN的多维数组。在这种情况下,可以如表2所示的那样选择每个周期提供给卷积电路的第一数据块和第二数据块,其中D可以是表示预定滑动步长的正整数。
表2
具体而言,卷积电路可以被配置为执行CIN轮卷积运算。每轮卷积运算可以包括P个周期。相应地,表2中一共示出了CIN×P个周期。在第一轮次中,第二数据块保持为w0[:,:, 0],而第一数据块以滑动的方式遍历第一输入数据的P个部分。在第二轮次中,第二数据块保持为w0[:, :, 1],而第一数据块以滑动的方式遍历第二输入数据的P个部分。依次类推,直到第CIN个轮次。在第CIN个轮次中,第二数据块保持为w0[:, :, CIN-1],而第一数据块以滑动的方式遍历第CIN个输入数据的P个部分。每个轮次的第K个周期中所使用的输入数据的相应一部分可以基于该周期的计数K而确定(1≤K≤P)。此外,该周期中所得到的卷积结果可以被累加到P个寄存器中的相应寄存器中。在表2的示例中,该相应寄存器可以是TempK-1。
可选地,可以将与COUT个输出通道相关联的COUT个偏置值中的同一偏置值添加到所述P个寄存器中的相应寄存器中的相应累加值,以确定与COUT个输出通道中的同一输出通道相关联的P个结果值。通过表2所示的CIN×P个周期,可以得到一个输出通道上P个点结果。在此过程中,第二数据块的变化率仅为过程S100所示方法的1/P。并且,由于输入数据的局部相似性,第一数据块的变化所造成的逻辑门元件的翻转也可能减少,这进一步降低了卷积电路的翻转功耗。
应当理解,表2所示的执行顺序仅仅是示例性的。在其他实施例中,CIN个轮次执行的顺序也可以改变。此外,在保证同一轮次内的P个步骤所使用的第二数据块不变的情况下,该P个步骤的顺序可以改变。此外,表2中所示的滑动是向右滑动。如前所述,在其他实施例中可以采用不同的滑动方向。
图6示出了根据本公开的实施例的用于卷积运算的示例性方法6000的流程图。方法6000可以包括步骤S601-S602。步骤S601可以包括提供卷积电路。该卷积电路可以被配置为在每个周期对以下两项执行卷积运算:(1)来自卷积网络的多个输入通道的输入数据的至少一部分,和(2)卷积网络的多个卷积核的系数数据的至少一部分。卷积网络的多个卷积核中的每个卷积核可以与卷积网络的多个输出通道中的相应输出通道相关联。卷积电路的示例可以包括前面描述的卷积电路3100。步骤S602可以包括使得提供给卷积电路以执行卷积运算的以下一项跨多个连续的周期保持不变:(1)输入数据中被提供给所述卷积电路的第一数据块,或(2)系数数据中被提供给所述卷积电路的第二数据块。在一些实施例中,步骤S602可以例如通过前面描述的控制电路3200来执行。
在可选的实施例中,方法6000可以包括一个或多个附加的步骤。在一些实施例中,多个输入通道的数量为CIN,多个输出通道的数量为COUT,方法6000可以包括:将卷积电路配置为执行CIN轮卷积运算,每轮卷积运算包括连续的多个周期,其中:输入数据中被提供给卷积电路的第一数据块在该连续的多个周期中保持不变;或者系数数据中被提供给卷积电路的第二数据块在该连续的多个周期中保持不变。
在一些实施例中,该连续的多个周期为COUT个周期。方法6000可以包括:在连续的COUT个周期中的每个周期中:向卷积电路提供来自同一特定输入通道的相同输入数据作为第一数据块;向卷积电路提供多个卷积核中的相应卷积核的相应系数数据作为第二数据块,其中相应卷积核是至少基于周期而确定的;通过卷积电路对第一数据块和第二数据块执行卷积运算以获得相应卷积结果;以及将相应卷积结果累加到多个寄存器中的相应寄存器中。
在上述实施例的一些中,方法6000还可以包括跨CIN轮卷积运算中的每轮卷积运算,改变从其获得第一数据块的特定输入通道。
在上述实施例的一些中,方法6000还可以包括至少基于多个寄存器中的多个累加值,确定与多个输出通道相关联的多个结果值。具体而言,该方法可以包括将多个偏置值中的相应偏置值添加到多个寄存器中的相应寄存器中的相应累加值,以确定与多个输出通道中的相应输出通道相关联的相应结果值。
在另一些实施例中,该连续的多个周期为P个周期。方法6000可以包括:在连续的P个周期中的每个周期中:向卷积电路提供来自多个输入通道中的同一特定输入通道的输入数据的相应一部分作为第一数据块,其中相应一部分是至少基于预定滑动步长和周期而确定的;向卷积电路提供多个卷积核中的同一特定卷积核的相同系数数据,作为第二数据块;通过卷积电路对第一数据块与第二数据块执行卷积运算以获得相应卷积结果;以及将相应卷积结果累加到多个寄存器中的相应寄存器中。
在上述实施例的一些中,方法6000还可以包括在连续的P个周期中的相邻两个周期中,分别向卷积电路提供来自特定输入通道的输入数据的第一部分和第二部分,其中第二部分相对于第一部分偏移预定滑动步长。
在优选的实施例中,方法6000所使用的输入数据可以是图像数据。
在上述实施例的一些中,方法6000还可以包括跨CIN轮卷积运算中的各轮卷积运算,从特定卷积核的系数数据中,改变提供给卷积电路的第二数据块。
在上述实施例的一些中,方法6000还可以包括至少基于多个寄存器中的多个累加值,确定多个输出通道中与特定卷积核相关联的特定输出通道的多个结果值。例如,可以将同一偏置值分别添加到多个寄存器中的多个累加值,以确定特定输出通道的多个结果值。
在一些实施例中,方法6000所使用的输入数据与以下中的至少一项相关联:卷积网络的原始输入数据;卷积网络的一个或多个层基于原始输入数据而生成的特征数据;或二者的组合。
在一些实施例中,方法6000所使用的系数数据与卷积网络的一个或多个权重系数相关联。
图7示出了根据本公开的实施例的计算芯片7000的示意图。计算芯片7000可以包括一个或多个卷积计算电路7100。卷积计算电路7100的示例可以包括前面关于图3所描述的电路3000。计算芯片7000可以被用于执行与卷积运算相关联的一个或多个功能。在一些实施例中,计算芯片7000可以被实现为专用的CNN芯片。本领域技术人员可以理解,计算芯片7000可以包括未示出的其他部件。
图8示出了根据本公开的实施例的计算设备8000的示意图。计算设备8000可以包括计算芯片8100。计算芯片8100的示例可以包括前面关于图7所描述的计算芯片7000。计算设备8000可以被用于执行与卷积运算相关联的一个或多个功能。在一些实施例中,计算设备8000可以被实现为专用的CNN服务器。在一些实施例中,计算设备8000可以是装载由计算芯片8100的通用计算设备。本领域技术人员可以理解,计算设备8000可以包括未示出的其他部件。
本公开还可以提供一种计算装置,该计算装置可以包括一个或多个处理器以及存储计算机可执行指令的存储器,计算机可执行指令在被一个或多个处理器执行时使得一个或多个处理器执行根据本公开的前述任一实施例所述的方法。计算装置可以包括(一个或多个)处理器以及存储计算机可执行指令的存储器,计算机可执行指令在被(一个或多个)处理器执行时使得(一个或多个)处理器执行根据本公开的前述任一实施例所述的方法。例如,该处理器可以控制对电路3000的操作进行控制。(一个或多个)处理器例如可以是计算装置的中央处理单元(CPU)。(一个或多个)处理器可以是任何类型的通用处理器,或者可以是专门设计用于SOC芯片的数据传输类型转换的处理器,诸如专用集成电路(“ASIC”)。存储器可以包括可由(一个或多个)处理器访问的各种计算机可读介质。在各种实施例中,本文描述的存储器可以包括易失性和非易失性介质、可移除和不可移除介质。例如,存储器可以包括以下的任何组合:随机存取存储器(“RAM”)、动态RAM(“DRAM”)、静态RAM(“SRAM”)、只读存储器(“ROM”)、闪存、高速缓冲存储器和/或任何其它类型的非瞬态计算机可读介质。存储器可以存储在被处理器执行时使得处理器执行根据本公开的前述任一实施例所述的数据传输类型转换方法的指令。
另外,本公开还可以提供一种其上存储有计算机可执行指令的非瞬态存储介质,计算机可执行指令在被一个或多个处理器执行时使得所述一个或多个处理器执行根据本公开的前述任一实施例所述的方法。
说明书及权利要求中的词语“左”、“右”、“前”、“后”、“顶”、“底”、“上”、“下”、“高”、“低”等,如果存在的话,用于描述性的目的而并不一定用于描述不变的相对位置。应当理解,这样使用的词语在适当的情况下是可互换的,使得在此所描述的本公开的实施例,例如,能够在与在此所示出的或另外描述的那些取向不同的其它取向上操作。例如,在附图中的装置倒转时,原先描述为在其它特征“之上”的特征,此时可以描述为在其它特征“之下”。装置还可以以其它方式定向(旋转90度或在其它方位),此时将相应地解释相对空间关系。
在说明书及权利要求中,称一个元件位于另一元件“之上”、“附接”至另一元件、“连接”至另一元件、“耦合”至另一元件、或“接触”另一元件等时,该元件可以直接位于另一元件之上、直接附接至另一元件、直接连接至另一元件、直接耦合至另一元件或直接接触另一元件,或者可以存在一个或多个中间元件。相对照的是,称一个元件“直接”位于另一元件“之上”、“直接附接”至另一元件、“直接连接”至另一元件、“直接耦合”至另一元件或“直接接触”另一元件时,将不存在中间元件。在说明书及权利要求中,一个特征布置成与另一特征“相邻”,可以指一个特征具有与相邻特征重叠的部分或者位于相邻特征上方或下方的部分。
如在此所使用的,词语“示例性的”意指“用作示例、实例或说明”,而不是作为将被精确复制的“模型”。在此示例性描述的任意实现方式并不一定要被解释为比其它实现方式优选的或有利的。而且,本公开不受在技术领域、背景技术、发明内容或具体实施方式中所给出的任何所表述的或所暗示的理论所限定。
如在此所使用的,词语“基本上”意指包含由设计或制造的缺陷、器件或元件的容差、环境影响和/或其它因素所致的任意微小的变化。词语“基本上”还允许由寄生效应、噪声以及可能存在于实际的实现方式中的其它实际考虑因素所致的与完美的或理想的情形之间的差异。
另外,仅仅为了参考的目的,还可以在本文中使用“第一”、“第二”等类似术语,并且因而并非意图限定。例如,除非上下文明确指出,否则涉及结构或元件的词语“第一”、“第二”和其它此类数字词语并没有暗示顺序或次序。
还应理解,“包括/包含”一词在本文中使用时,说明存在所指出的特征、整体、步骤、操作、单元和/或组件,但是并不排除存在或增加一个或多个其它特征、整体、步骤、操作、单元和/或组件以及/或者它们的组合。
在本公开中,术语“提供”从广义上用于涵盖获得对象的所有方式,因此“提供某对象”包括但不限于“购买”、“制备/制造”、“布置/设置”、“安装/装配”、和/或“订购”对象等。
如本文所使用的,术语“和/或”包括相关联的列出项目中的一个或多个的任何和所有组合。本文中使用的术语只是出于描述特定实施例的目的,并不旨在限制本公开。如本文中使用的,单数形式“一”、“一个”和“该”也旨在包括复数形式,除非上下文另外清楚指示。
本领域技术人员应当意识到,在上述操作之间的边界仅仅是说明性的。多个操作可以结合成单个操作,单个操作可以分布于附加的操作中,并且操作可以在时间上至少部分重叠地执行。而且,另选的实施例可以包括特定操作的多个实例,并且在其它各种实施例中可以改变操作顺序。但是,其它的修改、变化和替换同样是可能的。可以以任何方式和/或与其它实施例的方面或元件相结合地组合以上公开的所有实施例的方面和元件,以提供多个附加实施例。因此,本说明书和附图应当被看作是说明性的,而非限制性的。
虽然已通过示例对本公开的一些特定实施例进行了详细说明,但本领域的技术人员应该理解,以上示例仅是为了进行说明,而不是为了限制本公开的范围。在此公开的各实施例可以任意组合,而不脱离本公开的精神和范围。本领域的技术人员还应理解,可以对实施例进行多种修改而不脱离本公开的范围和精神。本公开的范围由所附权利要求来限定。
Claims (20)
1.一种用于卷积运算的电路,其中,所述电路包括:
卷积电路,被配置为在每个周期对以下两项执行卷积运算:(1)来自卷积网络的多个输入通道的输入数据的至少一部分,和(2)所述卷积网络的多个卷积核的系数数据的至少一部分,其中所述多个卷积核中的每个卷积核与所述卷积网络的多个输出通道中的相应输出通道相关联;
其中,所述电路被配置为:使得提供给所述卷积电路以执行卷积运算的以下一项跨多个连续的周期保持不变:(1)所述输入数据中被提供给所述卷积电路的第一数据块,或(2)所述系数数据中被提供给所述卷积电路的第二数据块。
2.如权利要求1所述的电路,其中,所述多个输入通道的数量为CIN,所述多个输出通道的数量为COUT,所述电路被配置为:
执行CIN轮卷积运算,每轮卷积运算包括连续的COUT个周期,其中所述输入数据中被提供给所述卷积电路的所述第一数据块在所述连续的COUT个周期中保持不变。
3.如权利要求2所述的电路,其中,所述电路被配置为:
在所述连续的COUT个周期中的每个周期中:
向所述卷积电路提供来自同一特定输入通道的相同输入数据作为第一数据块;
向所述卷积电路提供所述多个卷积核中的相应卷积核的相应系数数据作为第二数据块,其中所述相应卷积核是至少基于所述周期而确定的;
通过所述卷积电路对所述第一数据块和所述第二数据块执行卷积运算以获得相应卷积结果;以及
将所述相应卷积结果累加到多个寄存器中的相应寄存器中。
4.如权利要求3所述的电路,其中,所述电路被配置为:
跨所述CIN轮卷积运算中的每轮卷积运算,改变从其获得所述第一数据块的所述特定输入通道。
5.如权利要求4所述的电路,其中,所述电路还被配置为:
至少基于所述多个寄存器中的多个累加值,确定与所述多个输出通道相关联的多个结果值。
6.如权利要求5所述的电路,其中,所述电路还被配置为:
将多个偏置值中的相应偏置值添加到所述多个寄存器中的相应寄存器中的相应累加值,以确定与所述多个输出通道中的相应输出通道相关联的相应结果值。
7.如权利要求1所述的电路,其中,所述多个输入通道的数量为CIN,所述电路被配置为:
执行CIN轮卷积运算,每轮卷积运算包括连续的P个周期,其中,所述系数数据中被提供给所述卷积电路的所述第二数据块在所述连续的P个周期中保持不变,其中P是不小于2的整数。
8.如权利要求7所述的电路,其中,所述电路被配置为:
在所述连续的P个周期中的每个周期中:
向所述卷积电路提供来自所述多个输入通道中的同一特定输入通道的输入数据的相应一部分作为第一数据块,其中所述相应一部分是至少基于预定滑动步长和所述周期而确定的;
向所述卷积电路提供所述多个卷积核中的同一特定卷积核的相同系数数据,作为第二数据块;
通过所述卷积电路对所述第一数据块与所述第二数据块执行卷积运算以获得相应卷积结果;以及
将所述相应卷积结果累加到多个寄存器中的相应寄存器中。
9.如权利要求8所述的电路,其中,所述电路被配置为:
在所述连续的P个周期中的相邻两个周期中,分别向所述卷积电路提供来自所述特定输入通道的输入数据的第一部分和第二部分,其中所述第二部分相对于所述第一部分偏移所述预定滑动步长。
10.如权利要求9所述的电路,其中所述输入数据为图像数据。
11.如权利要求8所述的电路,其中,所述电路还被配置为:
跨所述CIN轮卷积运算中的各轮卷积运算,从所述特定卷积核的系数数据中,改变提供给所述卷积电路的所述第二数据块。
12.如权利要求8所述的电路,其中,所述电路被配置为:
至少基于所述多个寄存器中的多个累加值,确定所述多个输出通道中与所述特定卷积核相关联的特定输出通道的多个结果值。
13.如权利要求12所述的电路,其中,所述电路被配置为:
将同一偏置值分别添加到所述多个寄存器中的所述多个累加值,以确定所述特定输出通道的所述多个结果值。
14.如权利要求1所述的电路,其中,所述卷积电路包括乘法器和加法器,所述乘法器和所述加法器包括逻辑门元件,所述逻辑门元件被配置为通过乘累加运算来执行所述卷积运算。
15.如权利要求1所述的电路,所述输入数据与以下中的至少一项相关联:
卷积网络的原始输入数据;或
卷积网络的一个或多个层基于原始输入数据而生成的特征数据。
16.如权利要求1所述的电路,其中,所述系数数据与所述卷积网络的一个或多个权重系数相关联。
17.一种计算芯片,包括如权利要求1-16中任一项所述的用于卷积运算的电路。
18.一种计算设备,包括如权利要求17所述的计算芯片。
19.一种用于卷积运算的方法,包括:
提供卷积电路,所述卷积电路被配置为在每个周期对以下两项执行卷积运算:(1)来自卷积网络的多个输入通道的输入数据的至少一部分,和(2)所述卷积网络的多个卷积核的系数数据的至少一部分,所述多个卷积核中的每个卷积核与所述卷积网络的多个输出通道中的相应输出通道相关联;
使得提供给所述卷积电路以执行卷积运算的以下一项跨多个连续的周期保持不变:(1)所述输入数据中被提供给所述卷积电路的第一数据块,或(2)所述系数数据中被提供给所述卷积电路的第二数据块。
20.如权利要求19所述的方法,其中,所述多个输入通道的数量为CIN,所述方法包括:
将所述卷积电路配置为执行CIN轮卷积运算,每轮卷积运算包括连续的多个周期,其中:
所述输入数据中被提供给所述卷积电路的所述第一数据块在所述连续的多个周期中保持不变;或者
所述系数数据中被提供给所述卷积电路的所述第二数据块在所述连续的多个周期中保持不变。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311134860.XA CN116861973B (zh) | 2023-09-05 | 2023-09-05 | 用于卷积运算的改进的电路、芯片、设备及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311134860.XA CN116861973B (zh) | 2023-09-05 | 2023-09-05 | 用于卷积运算的改进的电路、芯片、设备及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116861973A true CN116861973A (zh) | 2023-10-10 |
CN116861973B CN116861973B (zh) | 2023-12-15 |
Family
ID=88225319
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311134860.XA Active CN116861973B (zh) | 2023-09-05 | 2023-09-05 | 用于卷积运算的改进的电路、芯片、设备及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116861973B (zh) |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190205780A1 (en) * | 2016-10-19 | 2019-07-04 | Sony Semiconductor Solutions Corporation | Operation processing circuit and recognition system |
CN110046700A (zh) * | 2017-11-03 | 2019-07-23 | 畅想科技有限公司 | 深度神经网络的卷积层的硬件实现 |
KR20190091817A (ko) * | 2018-01-29 | 2019-08-07 | (주)스마트레이더시스템 | 길쌈 신경회로망을 이용한 레이더 신호 처리 장치 및 방법 |
US20190317732A1 (en) * | 2016-12-29 | 2019-10-17 | Huawei Technologies Co., Ltd. | Convolution Operation Chip And Communications Device |
US20210019606A1 (en) * | 2019-07-18 | 2021-01-21 | Gyrfalcon Technology Inc. | Cellular neural network integrated circuit having multiple convolution layers of duplicate weights |
CN113556101A (zh) * | 2021-07-27 | 2021-10-26 | 展讯通信(上海)有限公司 | Iir滤波器及其数据处理方法 |
CN113792868A (zh) * | 2021-09-14 | 2021-12-14 | 绍兴埃瓦科技有限公司 | 神经网络计算模块、方法和通信设备 |
CN113869498A (zh) * | 2021-10-13 | 2021-12-31 | 安徽芯纪元科技有限公司 | 一种卷积运算电路及其运算方法 |
US20220043630A1 (en) * | 2019-12-16 | 2022-02-10 | Samsung Electronics Co., Ltd. | Electronic device and control method therefor |
US20220101086A1 (en) * | 2020-09-30 | 2022-03-31 | Stmicroelectronics S.R.L. | Reconfigurable hardware buffer in a neural networks accelerator framework |
CN115238863A (zh) * | 2022-07-19 | 2022-10-25 | 西安交通大学 | 一种卷积神经网络卷积层的硬件加速方法、系统及应用 |
CN115759212A (zh) * | 2021-09-03 | 2023-03-07 | Oppo广东移动通信有限公司 | 卷积运算电路及方法、神经网络加速器和电子设备 |
-
2023
- 2023-09-05 CN CN202311134860.XA patent/CN116861973B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190205780A1 (en) * | 2016-10-19 | 2019-07-04 | Sony Semiconductor Solutions Corporation | Operation processing circuit and recognition system |
US20190317732A1 (en) * | 2016-12-29 | 2019-10-17 | Huawei Technologies Co., Ltd. | Convolution Operation Chip And Communications Device |
CN110046700A (zh) * | 2017-11-03 | 2019-07-23 | 畅想科技有限公司 | 深度神经网络的卷积层的硬件实现 |
KR20190091817A (ko) * | 2018-01-29 | 2019-08-07 | (주)스마트레이더시스템 | 길쌈 신경회로망을 이용한 레이더 신호 처리 장치 및 방법 |
US20210019606A1 (en) * | 2019-07-18 | 2021-01-21 | Gyrfalcon Technology Inc. | Cellular neural network integrated circuit having multiple convolution layers of duplicate weights |
US20220043630A1 (en) * | 2019-12-16 | 2022-02-10 | Samsung Electronics Co., Ltd. | Electronic device and control method therefor |
US20220101086A1 (en) * | 2020-09-30 | 2022-03-31 | Stmicroelectronics S.R.L. | Reconfigurable hardware buffer in a neural networks accelerator framework |
CN113556101A (zh) * | 2021-07-27 | 2021-10-26 | 展讯通信(上海)有限公司 | Iir滤波器及其数据处理方法 |
CN115759212A (zh) * | 2021-09-03 | 2023-03-07 | Oppo广东移动通信有限公司 | 卷积运算电路及方法、神经网络加速器和电子设备 |
CN113792868A (zh) * | 2021-09-14 | 2021-12-14 | 绍兴埃瓦科技有限公司 | 神经网络计算模块、方法和通信设备 |
CN113869498A (zh) * | 2021-10-13 | 2021-12-31 | 安徽芯纪元科技有限公司 | 一种卷积运算电路及其运算方法 |
CN115238863A (zh) * | 2022-07-19 | 2022-10-25 | 西安交通大学 | 一种卷积神经网络卷积层的硬件加速方法、系统及应用 |
Also Published As
Publication number | Publication date |
---|---|
CN116861973B (zh) | 2023-12-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11003985B2 (en) | Convolutional neural network system and operation method thereof | |
US20210406647A1 (en) | Method and apparatus for reducing computational complexity of convolutional neural networks | |
US20220207110A1 (en) | Interpolating a Sample Position Value by Interpolating Surrounding Interpolated Positions | |
US11720783B2 (en) | Multiplication and addition device for matrices, neural network computing device, and method | |
TW201935266A (zh) | 卷積運算裝置及卷積神經網路的卷積輸入的調規方法 | |
US12015428B2 (en) | MAC processing pipeline using filter weights having enhanced dynamic range, and methods of operating same | |
US11194585B2 (en) | Multiplier-accumulator circuitry having processing pipelines and methods of operating same | |
US12008066B2 (en) | Mac processing pipeline having conversion circuitry, and methods of operating same | |
US20230315388A1 (en) | Multiply-Accumulate Circuit | |
CN110109646A (zh) | 数据处理方法、装置和乘加器及存储介质 | |
CN116861973B (zh) | 用于卷积运算的改进的电路、芯片、设备及方法 | |
US11764801B2 (en) | Computing-in-memory circuit | |
US20240111990A1 (en) | Methods and systems for performing channel equalisation on a convolution layer in a neural network | |
CN109102069A (zh) | 一种基于查找表的快速图像卷积运算实现方法 | |
US20230083597A1 (en) | Configurable nonlinear activation function circuits | |
CN113298843A (zh) | 数据量化处理方法、装置、电子设备和存储介质 | |
CN111695312A (zh) | 基于最优补偿的近似乘法器设计方法和近似乘法器 | |
EP4345692A1 (en) | Methods and systems for online selection of number formats for network parameters of a neural network | |
WO2022088157A1 (zh) | 一种浮点数计算电路以及浮点数计算方法 | |
CN118312133A (zh) | 基于Karatsuba的超高阶二进制多项式乘法器 | |
WO2023244905A1 (en) | Configurable nonlinear activation function circuits | |
Bleeker | LOW OVERHEAD BINARY SKIPPING IN ALL-DIGITAL COMPUTE-IN-MEMORY ARCHITECTURE |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |