CN116384443A - 具有可配置池化处理单元的神经网络加速器 - Google Patents
具有可配置池化处理单元的神经网络加速器 Download PDFInfo
- Publication number
- CN116384443A CN116384443A CN202211709957.4A CN202211709957A CN116384443A CN 116384443 A CN116384443 A CN 116384443A CN 202211709957 A CN202211709957 A CN 202211709957A CN 116384443 A CN116384443 A CN 116384443A
- Authority
- CN
- China
- Prior art keywords
- input
- data
- hardware
- output
- neural network
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000012545 processing Methods 0.000 title claims abstract description 554
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 160
- 238000000034 method Methods 0.000 claims abstract description 198
- 230000008569 process Effects 0.000 claims abstract description 172
- 238000011176 pooling Methods 0.000 claims abstract description 151
- 238000012546 transfer Methods 0.000 claims description 105
- 230000009467 reduction Effects 0.000 claims description 62
- 230000004913 activation Effects 0.000 claims description 51
- 238000004519 manufacturing process Methods 0.000 claims description 45
- PXFBZOLANLWPMH-UHFFFAOYSA-N 16-Epiaffinine Natural products C1C(C2=CC=CC=C2N2)=C2C(=O)CC2C(=CC)CN(C)C1C2CO PXFBZOLANLWPMH-UHFFFAOYSA-N 0.000 claims description 19
- 239000000872 buffer Substances 0.000 description 83
- 230000006870 function Effects 0.000 description 49
- 238000010606 normalization Methods 0.000 description 33
- 238000006243 chemical reaction Methods 0.000 description 30
- 238000010586 diagram Methods 0.000 description 26
- 238000013139 quantization Methods 0.000 description 17
- 238000004364 calculation method Methods 0.000 description 10
- 238000004891 communication Methods 0.000 description 7
- 239000013598 vector Substances 0.000 description 7
- 230000006872 improvement Effects 0.000 description 6
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 4
- 241001442055 Vipera berus Species 0.000 description 4
- 238000009825 accumulation Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 4
- 238000007667 floating Methods 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 229910052710 silicon Inorganic materials 0.000 description 4
- 239000010703 silicon Substances 0.000 description 4
- 238000013527 convolutional neural network Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 2
- 230000000295 complement effect Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000002194 synthesizing effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012993 chemical processing Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000000945 filler Substances 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000012886 linear function Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000000206 photolithography Methods 0.000 description 1
- 238000007639 printing Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000005389 semiconductor device fabrication Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000007723 transport mechanism Effects 0.000 description 1
Images
Classifications
-
- 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
-
- 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
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/40—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using contact-making devices, e.g. electromagnetic relay
- G06F7/44—Multiplying; Dividing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0464—Convolutional networks [CNN, ConvNet]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/048—Activation functions
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Health & Medical Sciences (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Neurology (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Electromagnetism (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
- Nuclear Medicine (AREA)
- Image Processing (AREA)
Abstract
具有可配置池化处理单元的神经网络加速器。本发明公开了一种神经网络加速器。该神经网络加速器包括:多个硬件处理单元,每个硬件处理单元包括用以加速对数据执行一个或多个神经网络运算的硬件;交叉开关,其耦合到多个硬件处理单元中的每个硬件处理单元并且被配置为从多个可选流水线中选择性地形成来自多个硬件处理单元中的一个或多个硬件处理单元的流水线,以处理到神经网络加速器的输入数据。多个硬件处理单元包括(i)卷积处理单元,其被配置为加速对数据执行卷积运算,(ii)可配置池化处理单元,其被配置为选择性地对数据执行多个可选运算中的运算,多个可选运算包括深度方向卷积运算和一个或多个池化运算。
Description
技术领域
本申请是针对神经网络加速器。
背景技术
深度神经网络(DNN)是人工神经网络的一种形式,包括可用于机器学习应用程序的多个互连层。特别地,DNN可用于信号处理应用程序,包含但不限于图像处理和计算机视觉应用程序。图1示出了包括多个层102、104、106的示例DNN 100。每一层102、104、106接收输入数据,并且根据层来处理输入数据以产生输出数据。输出数据要么作为输入数据提供给另一层,要么作为DNN的最终输出数据输出。例如,在图1的DNN 100中,第一层102接收到DNN 100的原始输入数据108,并且根据第一层102处理输入数据以产生输出数据110。第一层102的输出数据110成为第二层104的输入数据,并且第二层104根据第二层104处理输入数据110以产生输出数据112。第二层104的输出数据112成为第三层106的输入数据,并且第三层106根据第三层106处理输入数据112以产生输出数据114。然后,第三层106的输出数据114作为DNN的最终输出数据输出。在DNN用于分类的情况下,输出数据114是长度矢量A,其中A是类别的数量并且矢量中的每个值表示某个类别的概率。
输入到DNN层和从该层输出的数据可以被描述为张量。如本领域技术人员所知,张量是向量和矩阵的统称,并且可以被描述为n维阵列。向量是一维张量,并且矩阵是二维张量。DNN中的张量通常是三维的,但不一定是三维的。参考图2,其示出了示例性三维(3D)张量200。3D张量200可被描述为C个数据平面,其中每个平面具有维度HxW。每个平面可以被称为张量的通道。类似于图片的元素被称为像素,张量的元素可被称为张素(tensel)。
对层的输入数据执行的处理取决于层的类型。例如,DNN的每一层可以是多种不同类型中的一种类型。示例DNN层类型包含但不限于卷积层、激活层、归一化层、池化层,以及全连接层。对于本领域技术人员将显而易见的是,这些是示例DNN层类型,并且这不是详尽的列表,并且可存在其他DNN层类型。
对于卷积层,将输入数据与与所述层相关联的权重进行卷积。具体地,每个卷积层与多个权重k0…kg相关联,所述多个权重还可以被称为滤波器权重或系数。权重被分组以形成或定义一个或多个滤波器或内核,并且每个滤波器可与偏移量偏差bias相关联。每个滤波器的尺寸可为M×N×C(即,每个滤波器可包括一组M×N×C个权重k),并且可根据在W方向和H方向上跨步sW和步sH的卷积运算被应用于输入数据,如图2所示。步长sW和sH可以被称为卷积的步幅。滤波器的数量和/或每个滤波器的权重的数量可在卷积层与卷积层之间变化。卷积神经网络(CNN)是一种有效的图像识别和分类方法,它是DNN的一种特殊类型,一般包括多个卷积层。
通常但不一定在卷积层之后的激活层将一个或多个激活函数应用于到层的输入数据。激活函数接收输入张量,并对输入张量中的每个值或元素执行特定的非线性数学运算。换句话说,激活函数分别对输入张量中的每个值或元素进行运算。在一些示例中,激活层可通过实现ReLU函数(即,f(x)=max(0,x))充当整流线性单元(ReLU),或者可通过实现PreLU函数充当参数化整流线性单元(PReLU)。
归一化层被配置为对输入数据执行归一化函数,诸如局部响应归一化(LRN)函数。通常但不一定插入连续卷积层之间的池化层执行池化函数,例如max函数、min函数或average函数,以汇总输入数据的子集。因此,池化层的目的是减小表示的空间大小,以减少网络中参数和计算的数量,并且因此还控制过度拟合。
通常但不一定在多个卷积层和池化层之后的全连接层取一组三维输入数据值,并且输出长度矢量A。在DNN用于分类的情况下,A是类别的数量,并且矢量中的每个值表示某个类别的概率。长度矢量A通过一组权重的矩阵相乘而生成,可选地后面是偏差偏移量。因此,全连接层接收一组权重和偏差。
因此,DNN的每一层接收输入数据值(例如,输入张量)并生成输出数据值(例如,输出张量);并且一些层(诸如但不限于卷积层和全连接层)也接收权重和/或偏差。
DNN通常实施起来是在计算上复杂的。因此,已经开发了神经网络加速器,其允许以有效的方式(例如,以需要更少硅面积或更少处理能力的方式)实施包括DNN在内的神经网络。
下文所描述的实施方案仅作为示例被提供,并且并不限制解决已知神经网络加速器和/或其部件的缺点中的任一个或全部缺点的实施方式。
发明内容
提供本发明内容是为了介绍在以下详细描述中进一步描述的一些概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
本文描述了神经网络加速器。神经网络加速器包括:多个硬件处理单元,每个硬件处理单元包括用以加速对数据执行一个或多个神经网络运算的硬件;以及交叉开关,该交叉开关耦合到多个硬件处理单元中的每个硬件处理单元并且被配置为从多个可选流水线中选择性地形成来自多个硬件处理单元中的一个或多个硬件处理单元的流水线,以处理到神经网络加速器的输入数据。多个硬件处理单元包括(i)卷积处理单元,该卷积处理单元被配置为加速对数据执行卷积运算,以及(ii)可配置池化处理单元,该可配置池化处理单元被配置为选择性地对数据执行多个可选运算中的运算,该多个可选运算包括深度方向卷积运算和一个或多个池化运算。
第一方面提供了一种神经网络加速器,该神经网络加速器包括:多个硬件处理单元,每个硬件处理单元包括用以加速对数据执行一个或多个神经网络运算的硬件,该多个硬件处理单元包括(i)卷积处理单元,该卷积处理单元被配置为加速对数据执行卷积运算,以及(ii)可配置池化处理单元,该可配置池化处理单元被配置为选择性地对数据执行多个可选运算中的运算,该多个可选运算包括深度方向卷积运算和一个或多个池化运算;以及交叉开关,该交叉开关耦合到多个硬件处理单元中的每个硬件处理单元,该交叉开关被配置为从多个可选流水线中选择性地形成来自多个硬件处理单元中的一个或多个硬件处理单元的流水线以处理到神经网络加速器的输入数据。
所述多个可选流水线中的至少两个可选流水线可以包括所述多个硬件处理单元中以不同顺序的同一组两个或更多个硬件处理单元。
一个或多个池化运算包括平均池化运算、最小池化运算和/或最大池化运算。
可配置池化处理单元可包括一个或多个池引擎,每个池引擎可配置为接收输入张量的通道的张素并生成多种不同类型的通道输出中的一个通道输出,多种不同类型的通道输出包括深度方向卷积通道输出以及一个或多个池化运算通道输出。
一个或多个池化运算可包括平均池化运算。
一个或多个池引擎中的每一者可包括归约引擎,该归约引擎可配置为对于输入张量的通道的张素块生成多种类型的块输出中的一个块输出,多种类型的块输出包括块中张素的总和以及块中张素的加权和;以及除法引擎,该除法引擎可配置为对由归约引擎生成的块输出选择性地执行除法运算。当要对输入张量执行平均池化运算时,归约引擎可被配置为生成块中的张素的总和,并且除法引擎被启用以将由归约引擎生成的块输出除以块中张素的数量。当要对输入张量执行深度方向卷积运算时,归约引擎可被配置为生成块的加权和,并且除法引擎被禁用。
张素块可包括一行或多行张素和一列或多列张素,并且归约引擎可以被配置为通过生成列输出并从一个或多个列输出生成块输出来生成块输出。
当要对输入张量执行平均池化运算时,归约引擎可被配置为生成每列块的总和,并且通过对适当的列总和求和来生成块的总和,并且当要对输入张量执行深度方向卷积运算时,归约引擎可被配置为生成每列块的加权和,并且通过对适当的列加权和求和来生成该块的加权和。
归约引擎可包括:竖直池引擎,该竖直池引擎可配置为接收张素的列,并且生成该列的多种类型的列输出中的一种列输出;收集器存储单元,该收集器存储单元被配置为临时存储由竖直池引擎生成的列输出;以及水平池引擎,该水平池引擎被配置为从存储在收集器存储单元中的适当的列输出生成块输出。
当要对输入张量执行平均池化运算时,竖直池引擎可被配置为接收块中的张素的列,并生成所接收的张素的总和;并且当要对输入张量执行深度方向卷积运算时,竖直池引擎可被配置为接收块中的张素的列,并且基于所接收的张素生成多个加权和,每个加权和基于不同的一组权重。
可配置池化处理单元可被配置为以前端处理顺序和部分后端处理顺序中的一者或多者从交叉开关接收输入张量,该输入张量包括宽度维度、高度维度和通道维度;其中在前端处理顺序中,输入张量的张素在块基础上以通道顺序、宽度顺序和高度顺序接收,每个块包括在相同通道中和相同高度处的输入张量的张素;并且其中在部分后端处理顺序中,输入张量的张素在块基础上以高达最大数量的宽度的宽度顺序、通道顺序和高度顺序接收,每个块包括在相同高度和相同宽度处的输入张量的张素。
神经网络加速器可被配置为在神经网络加速器的多个硬件传递过程中处理神经网络,其中在神经网络加速器的硬件传递过程中,神经网络加速器可被配置为将输入数据加载到神经网络加速器中,并且经由多个可选流水线中的流水线来处理输入数据。
交叉开关可被配置为针对硬件传递过程接收标识要在该硬件传递过程中形成的多个可选流水线中的流水线的信息。
神经网络加速器还可包括数据输入单元,该数据输入单元可配置为接收到神经网络加速器的输入数据,并将所接收的输入数据输出到数据输入单元的输出端口;其中数据输入单元的输出端口可耦合到交叉开关,并且交叉开关可被配置为选择性地将数据输入单元的输出端口连接到多个硬件处理单元中的硬件处理单元的输入端口。
神经网络加速器还可包括第二数据输入单元,该第二数据输入单元可配置为接收到神经网络加速器的输入数据,并将所接收的输入数据输出到第二输入数据单元的输出端口;其中第二数据输入单元的输出端口可耦合到交叉开关,并且交叉开关可被配置为选择性地将第二数据输入单元的输出端口连接到多个硬件处理单元中的硬件处理单元的输入端口。
多个硬件处理单元可以包括逐元素运算处理单元,该逐元素运算处理单元被配置为加速对一组数据执行一个或多个逐元素运算,逐元素运算处理单元可以被配置为使用辅助输入数据来执行一个或多个逐元素运算;并且第二数据输入单元可以被配置为接收到神经网络加速器的输入数据和辅助输入数据中的一者。
多个硬件处理单元可以包括激活处理单元,该激活处理单元被配置为加速将激活函数应用于数据,并且多个硬件处理单元中的至少一个硬件处理单元可以包括逻辑,该逻辑被配置为在输出由该硬件处理单元生成的数据之前将激活函数应用于该生成的数据。
多个硬件处理单元可以包括多个张素重缩放处理单元,每个张素重缩放处理单元可以被配置为接收包括一个或多个通道的张量,并且在每个张量或每个通道基础上将所接收的张量量化为仿射定点数格式。
所述交叉开关可以包括多个输入端口、多个输出端口和多个多路复用器,所述多个多路复用器选择性地将所述交叉开关的所述输入端口连接到所述交叉开关的所述输出端口。
多个多路复用器可以包括用于交叉开关的每个输出端口的输出端口多路复用器,每个输出端口多路复用器被配置为选择性地将交叉开关的多个输入端口的子集中的一个输入端口连接到交叉开关的该输出端口(320)。
多个硬件处理单元可以包括被配置为加速将激活函数应用于数据的激活处理单元、被配置为加速对一组数据执行一个或多个逐元素运算的逐元素运算处理单元、被配置为加速将归一化函数应用于数据的归一化处理单元、以及被配置为加速数据的重排的交错处理单元中的一者或多者。
第二方面提供了一种在神经网络加速器处处理神经网络的方法,该神经网络在神经网络加速器的一个或多个硬件传递过程中被处理,该方法包括,对于一个或多个硬件传递过程中的至少一个硬件传递过程:在神经网络加速器处接收标识多个可选流水线中的流水线的信息,多个可选流水线中的每个流水线由多个硬件处理单元中的一个或多个硬件处理单元形成,多个硬件处理单元中的每个硬件处理单元包括用以加速对数据执行一个或多个神经网络运算的硬件,该多个硬件处理单元包括:(i)卷积处理单元,该卷积处理单元被配置为加速对数据执行卷积运算,以及(ii)可配置池化处理单元,该可配置池化处理单元被配置为选择性地对数据执行多个可选运算中的运算,该多个可选运算包括深度方向卷积运算和一个或多个池化运算;动态连接所标识的流水线的一个或多个处理单元以形成所标识的流水线;以及使用所形成的流水线来处理硬件传递过程的输入数据以生成硬件传递过程的经处理的数据。
本文描述的可配置池化处理单元和神经网络加速器可以体现在集成电路上的硬件中。可以提供一种在集成电路制造系统处制造本文描述的可配置池化处理单元或神经网络加速器的方法。可以提供一种集成电路定义数据集,该集成电路定义数据集当在集成电路制造系统中处理时将系统配置为制造本文描述的可配置池化处理单元或神经网络加速器。可以提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质上存储有本文描述的可配置池化处理单元或神经网络加速器的计算机可读描述,该计算机可读描述当在集成电路制造系统中处理时使集成电路制造系统制造体现可配置池化处理单元或神经网络加速器的集成电路。
可以提供一种集成电路制造系统,该集成电路制造系统包括:非暂态计算机可读存储介质,该非暂态计算机可读存储介质上存储有本文描述的可配置池化处理单元或神经网络加速器的计算机可读描述;布局处理系统,该布局处理系统被配置为处理计算机可读描述以便生成体现可配置池化处理单元或神经网络加速器的集成电路的电路布局描述;以及集成电路生成系统,该集成电路生成系统被配置为根据电路布局描述制造体现可配置池化处理单元或神经网络加速器的集成电路。
可以提供用于执行如本文描述的方法的计算机程序代码。可以提供其上存储有计算机可读指令的非暂态计算机可读存储介质,当在计算机系统处执行时,所述计算机可读指令使计算机系统执行如本文所述的方法。
如对本领域技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
附图说明
现在将参考附图详细描述示例,在附图中:
图1是示例性深度神经网络(DNN)的示意图;
图2是示出对DNN中的示例性张量执行示例性卷积运算的示意图;
图3是示出示例性2D卷积的示意图;
图4是示出示例性2D深度方向卷积的示意图;
图5是包括具有归约引擎和后计算引擎的池引擎的示例性可配置池化处理单元的框图;
图6是包括竖直池引擎、收集器存储单元和水平池引擎的图5的归约引擎的示例性实现方式的框图;
图7是图6的竖直池引擎的示例性实现方式的框图;
图8是示出输入张量的4×4通道和3×3滤波器之间的示例性卷积的示意图;
图9是示出在执行图8的卷积的第一周期中可由图7的竖直池引擎执行的乘法的示意图;
图10是示出当归约引擎被配置为执行图8的卷积时图6的收集器存储单元在若干周期内的状态的示意图;
图11是示出在执行图8的卷积的第二周期中可由图7的竖直池引擎执行的乘法的示意图;
图12是示出在执行图8的卷积的第三周期中可由图7的竖直池引擎执行的乘法的示意图;
图13是示出输入张量的填充的3×3通道和3×3滤波器之间的示例性卷积的示意图;
图14是示出当归约引擎被配置为执行图13的卷积时图6的收集器存储单元在若干周期内的状态的示意图;
图15是图5的后计算引擎的示例性实现方式的框图;
图16是包括参数存储单元的图5的可配置池化处理单元的示例性实现方式的框图;
图17是示出张量的部分后端处理顺序的示意图;
图18是示出张量的前端处理顺序的示意图;
图19是示出用于在图16的参数存储单元中存储参数的示例性格式的示意图;
图20是包括图5的可配置池化处理单元、卷积处理单元和交叉开关的示例性神经网络加速器的框图;
图21是图20的交叉开关的示例性实施方式的框图;
图22是包括多个卷积引擎的图20的卷积处理单元的示例性实现方式的框图;
图23是图22的卷积引擎的示例性实现方式的框图;
图24是示例性基于计算的设备的框图;
图25是可在其中实现本文描述的可配置池化处理单元和神经网络加速器的示例性计算机系统的框图;并且
图26是用于生成体现本文描述的可配置池化处理单元和神经网络加速器的集成电路的示例性集成电路制造系统的框图。
附图示出了各种示例。技术人员将了解,附图中所示出的元件边界(例如框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
借助于示例呈现以下描述,以使得本领域的技术人员能够制造和使用本发明。本发明不限于本文所描述的实施方案,并且对所公开的实施方案的各种修改对于本领域技术人员而言将是显而易见的。仅以举例的方式描述实施方案。
神经网络加速器(NNA)是被设计成加速神经网络(NN)处理的硬件。如本领域技术人员所知,硬件加速器是被设计成比诸如中央处理单元(CPU)的通用处理单元更有效地执行一组特定的一个或多个函数的硬件。因此,与可被配置为执行任意数目的函数的通用CPU相比,加速器只能执行有限的一组一个或多个函数。NNA具有一个或多个硬件处理单元,每个硬件处理单元被设计成加速一个或多个神经网络运算。因此,每个硬件处理单元本身是硬件加速器。神经网络运算在本文被定义为用于实施全部或部分神经网络层的运算。神经网络层可以通过一个或多个神经网络运算来实施。示例性神经网络运算包括但不限于卷积运算、非线性运算、池化运算和归一化运算。
因此,NNA可以具有例如被配置为加速卷积运算的卷积处理单元、被配置为加速非线性运算的激活处理单元、被配置为加速池化运算的池化处理单元和/或被配置为加速归一化运算的归一化处理单元。对于本领域技术人员将显而易见的是,这只是NNA可以具有的硬件处理单元的示例性集合,并且NNA可以具有额外的硬件处理单元、更少的硬件处理单元或者硬件处理单元的不同组合。
一些NNA,诸如在申请人公开的英国专利申请第2566702号(其全部内容通过引用并入本文)中描述的NNA,可以被配置为在NNA的数个硬件传递过程上处理或实施NN。NNA的硬件传递过程在本文被定义为将输入数据加载到NNA中,并使用NNA的一个或多个硬件处理单元来处理输入数据,以生成处理后的数据或输出数据。硬件传递过程的输出数据可以从NNA输出到存储器,或者存储在NNA中以用于后续的硬件传递过程。用于存储硬件传递过程的输出数据的存储器可以是NNA外部的存储器,但是在NNA所在的芯片内部(即,片上存储器),或者是NNA外部的存储器,并且在NNA所在的芯片外部(即,片外存储器)。
在一些NNA中,为了允许由多于一个硬件处理单元在硬件传递过程中处理用于硬件传递过程的输入数据,硬件处理单元可以被配置在固定顺序流水线中。如本领域技术人员所知,流水线包括一组处理单元,其中所述一组中的处理单元的输出是到所述一组中的处理单元的输入。例如,如果NNA包括卷积处理单元、激活处理单元、归一化处理单元和池化处理单元,则硬件处理单元可以被连接以形成流水线,使得输入数据可以由卷积处理单元、激活处理单元、归一化处理单元并且然后由池化处理单元在硬件传递过程中进行处理。NNA可以具有流水线,所述流水线被配置为允许输入数据由卷积处理单元并且然后由激活处理单元处理,因为经典神经网络包括卷积层后跟激活层的序列。此外,为了允许输入数据在硬件传递过程中仅由单个硬件处理单元处理,NNA可以允许在硬件传递过程中旁路流水线中的硬件处理单元中的任何硬件处理单元。硬件处理单元可以通过以下任一方式被旁路:(i)具有旁路路径,使得数据不被输入到硬件处理单元;或者(ii)配置硬件处理单元简单地将接收到的数据传递到输出端。然而,由于流水线是固定的,所以硬件处理单元在硬件传递过程中处理数据的顺序是固定的。
虽然固定的流水线结构被设计成利用经典神经网络的结构,但是NN中的层(以及运算)的顺序可以是任意的。此外,随着NN的使用继续扩展和发展,越来越多的不具有经典结构的神经网络被开发出来。因此,具有固定顺序的流水线限制了NNA在处理一些神经网络时的效率。例如,如果NN包括池化层后跟卷积层,那么具有包括卷积处理单元后跟激活处理单元的固定硬件流水线的NNA将不得不在两个硬件传递过程中实施这样的序列,因为激活运算不能在同一硬件传递过程中先于卷积运算。
因此,如申请人的英国专利申请号2114052.0中所述,申请人开发了一种具有硬件处理单元的可配置流水线的NNA,该申请全文以引用方式并入本文。具体地,在此类NNA中,硬件处理单元连接到交叉开关,该交叉开关可在每个硬件传递过程的基础上选择性地由硬件处理单元形成多个流水线中的一个流水线(即,以所选择的顺序动态地连接所选择的一组硬件处理单元以由其形成流水线)。这允许在不同的硬件传递过程中实施硬件处理单元的不同流水线。例如,在第一硬件传递过程中,交叉开关可以被配置为形成包括激活处理单元后跟卷积处理单元的流水线,使得到NNA的输入数据可以由激活处理单元处理,然后由卷积处理单元处理;并且在第二硬件传递过程中,交叉开关可以被配置为形成包括卷积处理单元、激活处理单元和池化处理单元的流水线,使得到NNA的输入数据可以由卷积处理单元、激活处理单元并且然后由池化处理单元处理。因此,在此类NNA中,不仅在硬件传递过程中活动(即,处理数据)的硬件处理单元是可配置的,而且硬件处理单元在硬件传递过程中处理数据的顺序也是可配置的。
例如,可以在软件中基于NN中的层的顺序、可用的硬件处理单元和NNA存储单元的大小,确定在硬件传递过程中活动的或处理数据的硬件处理单元,以及任选地,活动的硬件处理单元的顺序。具体来说,可以有软件工具,所述软件工具被配置为将神经网络映射到可以由NNA执行的一组运算,然后从NN的开始或结束以贪婪的方式将这些运算分组到硬件传递过程中。例如,软件工具可以首先将NN的层分组为层组,其中层组是一组层,其中用于实施这些层的运算可以在NNA的硬件传递过程中执行。在一些情况下,层组可以进一步分成更小的块,每个块可以在硬件传递过程中执行。由于对硬件传递过程中可以执行的处理量或硬件传递过程中可以存储的数据量的硬件限制,层组可以被分成更小的块。例如,卷积层可以包括64个滤波器,但是NNA在硬件传递过程中可能仅能够与最多32个滤波器执行卷积。在这种情况下,可以在第一硬件传递过程中处理滤波器中的32个滤波器,并且可以在第二硬件传递过程中处理剩余的32个滤波器。在硬件传递过程中可以执行的运算越多,NN的实施效率就越高,因为这可以最大限度地减少内存读取和写入的次数,并通过允许在前一个运算完成之前开始处理后续运算来提高性能。
一旦软件工具已经标识出一组硬件传递过程来实现NNA,就可以为每个硬件传递过程向NNA发送控制或命令信息,该信息向NNA指示它应该如何为该硬件传递过程配置自身。
此类NNA可以具有卷积处理单元,该卷积处理单元被配置为加速卷积运算,并且用于实现NN的任何卷积运算都由卷积处理单元处理。在硬件处理单元在NNA的硬件传递过程中只能使用一次的情况下,这意味着在硬件传递过程中只能执行一次卷积运算。
此类卷积处理单元可以被设计成有效地实现2D卷积。如本领域技术人员所知,在2D卷积中,权重形成多个3D滤波器,并且多个滤波器中的每个滤波器与3D输入张量卷积。每个滤波器具有与输入张量相同数量的通道,并产生输出的一个通道。因此,如果存在L个滤波器,则输出中存在L个通道。因此,滤波器的数量也可以被称为输出通道的数量。
图3示出了具有高度H、宽度W和通道C的三维(3D)输入张量X302与形成四维(4D)张量的一组权重K304之间的示例性2D卷积,该四维张量包括具有高度M、宽度N和通道C的多个(例如,L个)3D滤波器或内核3060、3061、3062、3063。每个滤波器3060、3061、3062、3063与3D输入张量X302卷积,以产生输出张量Y308的一个通道或一个平面。通过以下方式来生成输出张量Y的每个通道:在输入张量X上在高度维度H和宽度维度W上滑动滤波器3060、3061、3062或3063(根据卷积的步幅和扩张),并且生成每个位置处的输入值和权重的点积。
虽然2D卷积是在NN中实现的最常见类型的卷积,但其他卷积,诸如深度方向卷积,在NN中变得越来越重要。如本领域技术人员所知,在深度方向卷积中,输入张量的每个通道存在一组一个或多个滤波器,并且输入张量的每个通道与对应组滤波器中的每个滤波器卷积以生成输出通道。在一些情况下,每个通道存在单个滤波器,但在其他情况下,每个通道可能存在多个滤波器。每个通道的滤波器数量可以称为通道乘法器T。因此,深度方向卷积的输出张量的通道数量是T*C。
图4示出深度方向卷积的示例,其中通道乘法器是1(即,输入张量的每个通道存在单个滤波器)。具体地,图4示出具有高度H、宽度W和通道C的三维(3D)输入张量X402与形成三维(3D)张量的一组权重K404之间的示例性深度方向卷积,该三维张量包括具有高度M、宽度N的多个(例如,C个)2D滤波器或内核4060、4061、4062。每个滤波器4060、4061、4062与3D输入张量X402的单个通道卷积,以产生输出张量Y408的一个通道或一个平面。具体地,输入张量402的第一通道与第一滤波器4060卷积,输入张量402的第二通道与第二滤波器4061卷积,并且输入张量402的第三通道与第三滤波器4062卷积。通过以下方式来生成输出张量Y的每个通道:在输入张量402上在高度维度H和宽度维度W上滑动滤波器4060、4061、4062(根据卷积的步幅和扩张),并且生成每个位置处的输入值和权重的点积。可以看出,深度方向卷积是比2D卷积更简单的运算。因此,使用卷积处理单元来实现深度方向卷积可能是低效的。
此外,将卷积分解实现为2D卷积、激活、深度方向卷积和激活已经变得普遍。在这种运算序列发生在NN中的情况下,这将需要具有单个卷积处理单元的NNA的两个硬件传递过程,因为2D卷积和深度方向卷积将必须由卷积处理单元在单独的硬件传递过程中执行。
发明人已经认识到,通过具有可被动态配置来执行池化运算或深度方向卷积的可配置池化处理单元,NNA可以更有效地实现具有类似运算序列的NN。一些池化运算,诸如平均池化运算,可以以与深度方向卷积类似的方式执行,因为它们均在相同通道中的输入张量的窗口上运算,所以可以使用相同的硬件来有效地执行这两种运算。
因此,本文描述了用于神经网络加速器中的可配置池化处理单元,其可被动态配置为执行池化运算或深度方向卷积运算。增加池化处理单元执行深度方向卷积的能力具有允许在同一硬件传递过程中执行多个卷积运算的优点(例如,2D卷积可由卷积处理单元执行,并且深度方向卷积可由可配置池化处理单元执行),并且可以允许在功耗和资源方面更有效地执行深度方向卷积运算。
现在参考图5,其示出了示例性可配置池化处理单元500,其可以被动态地配置为对输入张量执行深度方向卷积运算或池化运算。可配置池化处理单元是用以加速深度方向的卷积运算和一个或多个池化运算的硬件加速器。可配置池化处理单元500被配置为接收输入张量和标识要对输入张量执行的运算的配置信息,并对输入张量执行所标识的运算以生成输出张量。所标识的运算是多个可选运算中的一者。多个可选运算包括至少一个池化运算和深度方向卷积运算。池化运算是通过汇总同一通道中的数据块或数据子集来减小数据大小的运算。示例性池化运算包括最大运算、最小运算和平均运算。在NN中,池化运算的目的是减小表示的空间大小,以减少NN中参数和计算的数量,并且因此也控制过度拟合。由于池化运算和深度方向卷积运算均涉及对输入张量的通道中的张素的窗口或块执行数学运算,所以可以使用在处理输入张量的通道的窗口方面高效的硬件来高效地实现池化运算和深度方向卷积运算。
在一些情况下,如图5所示,可配置池化处理单元500可包括多个池引擎502。每个池引擎502被配置为接收输入张量的通道和指示要生成多个不同通道输出中的哪个通道输出的配置信息,并且从输入张量的所接收的通道生成所标识的通道输出。多个不同的通道输出包括一个或多个池化通道输出和深度方向卷积通道输出。
具有多个池引擎502允许同时处理输入张量的多个通道。在一些情况下,可能存在十六个池引擎502。然而,对于本领域的技术人员将显而易见的是,这仅是示例,并且可配置池化处理单元500可具有任何数量的池引擎502。在可配置池化处理单元旨在成为具有固定或动态可配置流水线的神经网络加速器的一部分的情况下,可以选择池引擎502的数量,使得可配置池化处理单元500不是任何流水线的瓶颈。如下文更详细描述的,神经网络加速器可以具有被配置为执行卷积运算的卷积处理单元。卷积处理单元可以具有多个卷积引擎,每个卷积引擎被配置为执行乘积累加运算。卷积引擎的数量可以决定神经网络加速器可操作的速度。在一些情况下,池引擎的数量等于卷积引擎的数量可能是有利的。在其他情况下,池引擎的数量大于卷积引擎的数量可能是有利的。例如,具有比卷积引擎更多的池引擎在硬件传递过程中可能是有利的,其中输入张量可以以比卷积处理单元可以产生输出数据的速率更快的速率被提供给可配置池化处理单元。这可能发生在其中输入数据在卷积处理单元之前由可配置池化处理单元处理的硬件传递过程,或者其中数据由可配置池化处理单元处理的硬件传递过程中,并且卷积处理单元在该硬件传递过程中不是活动的。
根据输入张量中通道的数量以及池引擎502的数量,每个池引擎502可以处理输入张量的多于一个通道。例如,第一池引擎502可以首先接收和处理输入张量的通道(例如,通道0)以生成输出张量的一个通道,并且随后接收和处理输入张量的另一个通道(例如,通道5)以生成输出张量的另一个通道。在一些情况下,可配置池化处理单元500可以被配置为在池引擎502之间均等地划分输入张量的通道。在一些情况下,池引擎502可以被配置为使多个通道的处理交错。例如,池引擎502可被配置为生成第一通道的输出的部分,生成第二通道的输出的部分,然后返回处理第一通道。
在一些情况下,如图5所示,每个池引擎502可以包括归约引擎504、除法引擎506以及任选后计算引擎508。归约引擎504被配置为对于输入张量的所接收通道的N×M个块或窗口(其中N和M是大于或等于1的整数)生成多种不同类型的块输出中的一个块输出。块输出是从块或窗口中的张素生成的单个值。归约引擎504支持的多种不同类型的块输出取决于由可配置池化处理单元500支持的运算类型。如上所述,可配置池化处理单元500支持深度方向卷积运算和一个或多个池化运算。一个或多个池化运算可以包括例如平均池化运算、最大池化运算和最小池化运算中的一者或多者。
在可配置池化处理单元支持平均池化运算的情况下,不同类型的块输出可以包括(i)加权和块输出,其是块中张素的加权和,以及(ii)总和块输出,其是块中张素的总和。加权和块输出可用于生成深度方向卷积输出,并且总和块输出可用于生成平均池化输出。在可配置池化处理单元500还支持最大池化运算和/或最小池化运算的情况下,由归约引擎504支持的不同类型的块输出还可以包括作为块中张素的最大值的最大块输出和/或作为块中张素的最小值的最小块输出。
由归约引擎504处理的块的大小可以由配置信息指定。如下文更详细描述的,可以存在可由归约引擎504处理的最大块大小,并且最大块大小对于不同的运算可以是不同的。例如,在一些情况下,池化运算的最大块大小可以大于深度方向卷积运算的最大块大小,以减少归约引擎504中乘法器的数量。参考图6和图7描述了归约引擎504的示例性实现方式。
除法引擎506被配置为将归约引擎504的输出除以N×M,其中块或窗口的大小为N×M。除法引擎只能用于一些类型的运算。因此,除法引擎506可被禁用或旁路。
如果池引擎502以这种方式配置,则(i)当可配置池化处理单元500被配置为执行深度方向卷积运算时,归约引擎504可以被配置为对于输入张量的所接收的通道的每个N×M块或窗口生成块中的张素的加权和,其中权重对应于要应用于所接收的通道的滤波器的权重,并且除法引擎506可被禁用或旁路;(ii)当可配置池化处理单元500被配置为执行平均池化运算时,归约引擎504可被配置为对于输入张量的所接收的通道的每个N×M块或窗口生成块中张素的总和,并且除法引擎506可被启用以便将归约引擎504的输出除以N×M;(iii)当可配置池化处理单元500被配置为执行最大池化运算时,归约引擎504可被配置为对于输入张量的所接收的通道的每个N×M块或窗口输出块中的最大张素,并且除法引擎506可被禁用或旁路;并且(iv)当可配置池化处理单元500被配置为执行最小池化运算时,归约引擎504可以被配置为对于输入张量的所接收的通道的每个N×M块或窗口输出块中的最小张素,并且除法引擎506可被禁用或旁路。
如上所述,池引擎502还可包括后计算引擎508,该后计算引擎可用于将格式化改变等应用于归约引擎504或除法引擎506的输出。下面参考图15描述了后计算引擎508的示例性实现方式。
如下文更详细描述的,在一些情况下,可配置池化处理单元500可以包括图5中未示出的其他部件或元件。例如,可配置池化处理单元500还可以包括一个或多个控制器,该一个或多个控制器被配置为控制输入张量、权重和/或配置信息的接收,并且向池引擎502(及其部件)提供适当的输入张量、权重和控制信息。
现在参考图6,示出了图5的归约引擎504的示例性实现方式。如上所述,每个归约引擎504可以生成输入张量的所接收的通道的每个N×M块的多种不同类型的块输出中的一个块输出。由归约引擎504支持的多种不同类型的块输出可以包括例如块中张素的加权和、块中张素的总和、块中张素的最大值和/或块中张素的最小值。
图6的示例性归约引擎504被配置为首先在列基础上生成块输出,并且然后从列输出生成最终块输出。具体地,图6的归约引擎504包括竖直池引擎602、收集器存储单元604和水平池引擎606。竖直池引擎602被配置为接收块或窗口中的张素的列,并且基于此生成特定类型的一个或多个列输出。由竖直池引擎602生成的列输出的类型以及每列的列输出的数量基于归约引擎504将生成的块输出的类型。例如,如果归约引擎504被配置为输出块中张素的总和,则竖直池引擎602可被配置为生成所接收的列中张素的总和;如果归约引擎504被配置为输出块中张素的最大值,则竖直池引擎602可被配置为输出所接收的列中的最大张素(即,具有最大值的张素);并且如果归约引擎504被配置为输出块中张素的最小值,则竖直池引擎602可被配置为输出所接收的列中的最小张素(即,具有最小值的张素)。因此,在归约引擎504的这些配置的每个配置中,竖直池引擎602每列生成单个列输出。因为列可以属于多于一个块或窗口,所以在列基础上执行这些运算允许使用列输出来生成多于一个块输出。
然而,如果归约引擎504被配置为生成块或窗口中的张素的加权和,则竖直池引擎602可以被配置为生成张素的每个所接收的列的一个或多个加权和。在一些情况下,竖直池引擎602可以被配置为张素的每个所接收的列生成多个列输出(加权和)。例如,竖直池引擎602可被配置为对于要应用于通道的滤波器中的权重的每列,从列中的张素生成加权和。如上所述,输入张素的列可以属于多个块或窗口,并且对于深度方向卷积,并且对于深度卷积,对于其所属的每个块或窗口,不同的权重将被应用于该列。因此,计算该列可能同时属于的每个块或窗口的加权和可以节省时间和功率,因为该列不必多次加载到竖直池引擎602中以具有应用于其的不同权重。这将在下面使用示例更详细地描述。
下面参考图7描述竖直池引擎602的示例性实现方式。
收集器存储单元604被配置为临时存储由竖直池引擎602生成的列输出。收集器存储单元604可能不必大到足以存储通道的所有列输出,或者甚至存储输出的整行。可以存储在收集器存储单元604中的列输出的数量可以定义用于池化运算或深度方向卷积运算的窗口或块的最大宽度。如下文更详细描述的,池化运算可以具有比深度方向卷积更大的最大窗口宽度。这是因为对于深度方向卷积而言,窗口的每一列必须存储在收集器存储单元604中的数据量增加。例如,对于深度方向卷积,对于窗口的每一列,多个列输出可以存储在收集器存储单元中,而对于池化运算,对于窗口的每一列,只有一个列输出可以存储在收集器存储单元604中。因此,在池化运算的最大窗口宽度可以等于可存储在收集器存储单元604中的列输出的数量的情况下,深度方向池化运算的最大窗口宽度(步幅为1)可以等于可以存储在收集器存储单元中的列输出的数量除以每列必须存储的列输出的数量。然而,深度方向的理论最大宽度可能取决于宽度方向上深度方向卷积的步幅。在一个示例中,池化运算的最大窗口宽度是十六,而深度方向卷积运算的最大窗口宽度是三。
在一些情况下,收集器存储单元604可以由移位寄存器实现。如下面更详细描述的,这可以允许特定运算的列输出总是位于收集器存储单元604的相同位置。然而,在其他示例中,收集器存储单元604可以由简单的寄存器实现,并且由水平池引擎606使用的列输出可以由指向寄存器的指针来标识,这些指针在由竖直池引擎602生成的每组一个或多个列输出之后被更新。比起实际移位数据,这可以提供功率节省。
水平池引擎606被配置为从存储在收集器存储单元604中的多个列输出中生成块输出。收集器存储单元604中用于生成块输出的特定列输出以及它们如何被组合将取决于要生成的块输出的类型。例如,如果归约引擎504被配置为输出块的最大或最小张素,则水平池引擎606被配置为标识收集器存储单元604中对应于块的每一列的列输出,并分别选择所标识的列输出的最高者或最低者。然而,如果归约引擎504被配置为输出块中张素的总和,则水平池引擎606被配置为标识收集器存储单元604中对应于块的每一列的列输出,并生成所标识的列输出的总和。
最后,如果归约引擎504被配置为输出块或窗口中张素的加权和,则水平池引擎606被配置为标识收集器存储单元604中对应于块的每一列并且由适当的权重生成的列输出,并且生成所标识的列输出的总和。例如,如上所述,竖直池引擎602可以被配置为张素的每个所接收的列输出例如多个列输出,其中每个列输出是基于不同的一组权重的张素的加权和。例如,如果滤波器的大小为3×3,那么每个块或窗口的大小将为3×3。一个加权和块输出将通过对以下各项求和来生成:(i)基于滤波器的第一列中的权重的通道的第一列中的前三个张素的加权和;(ii)基于滤波器的第二列中的权重的通道的第二列中的前三个张素的加权和;以及(iii)基于滤波器的第三列中的权重的通道的第三列中的前三个张素的加权和。因此,为了生成该加权和块输出,水平池引擎606识别收集器存储单元604中对应于(i)、(ii)和(iii)的列输出,并生成它们的总和。
另一个加权和块输出将通过对以下各项求和来生成:(i)基于滤波器的第一列中的权重的通道的第二列中的前三个张素的加权和;(ii)基于滤波器的第三列中的权重的通道的第二列中的前三个张素的加权和;以及(iii)基于滤波器的第三列中的权重的通道的第四列中的前三个张素的加权和。因此,为了生成该加权和块输出,水平池引擎606识别收集器存储单元604中对应于(i)、(ii)和(iii)的列输出,并生成它们的总和。这将在下面通过使用示例更详细地描述。
在一些情况下,水平池引擎606可能每个周期仅能够处理最大数量的列输出。例如,水平池引擎606可能每个周期仅能够处理四列输出。如果窗口宽度大于每个周期最大数量的列输出,则水平池引擎606可能需要多个周期来生成块输出。例如,如果水平池引擎606每个周期可以处理多达四个列输出,并且窗口的宽度是16,则可能需要四个周期来生成块输出。
现在参考图7,示出了图6的竖直池引擎602的示例性实现方式。如上所述,竖直池引擎602被配置为接收输入张量的张素的列,并且从其生成一个或多个列输出。如上所述,为张素的列生成的列输出的数量和类型基于归约引擎504的配置,竖直池引擎602形成该归约引擎的一部分。
如下面将更详细描述的,在一些情况下,竖直池引擎602可能每个周期仅能够接收和处理预定数量的张素,因此,根据列的大小,可能需要多个周期来生成一个或多个列输出。术语“张素的列”将在本文中用于指输入张量的窗口或块的列,并且术语“张素的部分列”将在本文中指张素的列的一部分或子集(即,比张素的列更少的张素)。例如,如果张素的列包括十六个张素,并且竖直池引擎每个周期只能接收和处理四个张素,则可能需要四个周期来生成该列的一个或多个列输出。此外,如将在下面更详细描述的,在周期中可以接收和处理的张素的最大数量可以在要生成的列输出的类型之间变化。
图7的示例竖直池引擎602包括多个乘法单元702和多个求和单元704、706。
多个乘法单元702中的每一者被配置为接收一组乘法输入元素和一组权重,并使用一组乘法器708将每个接收的乘法输入元素与权重中的对应一个权重相乘以生成乘法输出。在图7所示的示例中,每个乘法单元702接收相同组的乘法输入元素,其对应于由竖直池引擎602在周期中接收的张素的列或部分列。每个乘法单元702可以接收一组不同的权重。在图7所示的示例中,存在三个乘法单元702,其允许张素的所接收的列或部分列与多达三组权重相乘。然而,对于本领域的技术人员将显而易见的是,这仅是示例,并且竖直池引擎602可以包括两个或更多个乘法单元。
每个求和单元704、706被配置为接收一组输入元素,并将所接收的输入元素求和以生成总和输出。由求和单元704中的第一者接收的输入元素可以是乘法单元702中的第一者的乘法输出,或者是由竖直池引擎602在周期中接收的张素的列或部分列。因此,第一求和单元704可以生成一组权重的输入张素的总和或输入张素的加权和。在图7所示的示例中,第一求和单元704之前是多路复用器710,该多路复用器被配置为接收由竖直池引擎602在周期中接收的张素的列或部分列以及第一乘法单元702的乘法输出,并且响应于控制信号(例如“加权和”控制信号)选择性地向第一求和单元704提供输入集合中的一者。然而,对于本领域的技术人员将显而易见的是,这仅是可用于选择性地向第一求和单元704提供多组输入元素中的一者的硬件的示例,并且任何合适的硬件都可用于选择性地向第一求和单元704提供多组输入元素中的一者。
剩余的求和单元706被配置为接收其他乘法单元702中的一者的乘法输出。例如,图7的第二求和单元706被配置为接收第二乘法单元702的乘法输出,并且第三求和单元706被配置为接收第三乘法单元702的乘法输出。因此,剩余求和单元706中的每一着被配置为生成不同的一组权重的张素的列的加权和。每个乘法单元702存在一个求和单元704、706。因此,由于在图7所示的示例中存在三个乘法单元702,所以存在三个求和单元704、706。
当可配置池化处理单元500被配置为对输入张量执行深度方向卷积运算时,池引擎502的竖直池引擎602可以被配置为接收输入张量的通道的张素的列或部分列,要应用于通道的滤波器的不同列被加载到不同的乘法单元702中,乘法单元702被配置为将每个所接收的张素与对应权重相乘以生成乘法输出,并且求和单元704、706被配置为生成乘法单元702中的一者的乘法输出的总和。相反,在可配置池化处理单元500被配置为对输入张量执行平均池化运算的情况下,池引擎502的竖直池引擎602被配置为接收输入张量的通道的张素的列或部分列,第一求和单元704被配置为生成其总和,并且乘法单元702不被使用和/或被禁用。
为了限制竖直池引擎602的大小和复杂性,竖直池引擎602可能一次(例如,每个周期)仅能够接收和处理多达最大数量的张素。例如,竖直池引擎602可能一次仅能够接收和处理多达四个张素。在一些情况下,一次可以接收和处理的张素的最大数量可能基于要生成的列输出的类型。具体地,为了减少竖直池引擎602中乘法器708的数量,可以从中生成加权和的张素的最大数量可以小于可以从中生成总和的张素的最大数量。例如,在图7所示的示例中,可以为多达Y个张素生成加权和,并且可以为多达Y+1个张素生成总和。在一个示例中,Y等于三,使得可以为多达三个张素生成加权和,并且可以为多达四个张素生成总和。对于本领域的技术人员将显而易见的是,这仅是示例,并且Y可以是大于或等于二的任何整数。在此类情况下,第一求和单元704可能能够对Y+1个输入元素求和,并且其他求和单元706可能仅能够对Y个输入元素求和。在又一些情况下,总和与加权和的最大张素数可以相同。
在一些情况下,可以针对加权和(Y)处理的输入元素的数量以及乘法单元的数量可以定义深度方向卷积的最大滤波器尺寸/窗口大小。发明人已经确定,用于深度方向卷积的3×3的最大滤波器大小/窗口大小在配置池化处理单元的大小和复杂性及其用途之间产生了良好的平衡。具体地,如上所述,如果张素的列仅加载到竖直池引擎602中一次,则这是有利的。因此,将张素的列同时乘以所有必要的重量是有利的。因此,如果滤波器(和窗口)具有宽度A(例如,滤波器和窗口具有A列),那么张素的每列有利地同时乘以权重的A列中的每一列。由于将采用与A个不同输入列相关的列输出来生成块输出,所以收集器存储单元将必须能够存储多达A*A个列输出,以支持与A×A滤波器的深度方向卷积。因此,如果收集器存储单元能够存储十六列输出,那么收集器存储单元可以支持与大小为4×4的最大滤波器的深度方向卷积,而不必增加收集器存储单元的大小。然而,与最大大小为3×3的支持滤波器相比,这将需要竖直池引擎中的七个附加乘法器和一个附加求和单元。此外,发明人已经发现,在神经网络中,深度方向卷积的滤波器倾向于具有奇数维度(例如3×3,5×5…)。因此,将支持滤波器大小从3×3增加到4×4会显著增加每个竖直池引擎(以及可配置池化处理单元)的大小,其中益处有限。
在一些情况下,由可配置池化处理单元为特定运算支持的张素的列的最大大小可以大于竖直池引擎602在该运算的周期中可以处理的张素的最大数量。在这些情况下,竖直池引擎602可被配置为在多个周期内生成一个或多个列输出。例如,如果可以为总和输出接收和处理的张素的最大数量是四,并且列中张素的最大数量是十六,则竖直池引擎602可以被配置为在四个周期内生成列输出。具体地,为了生成16个张素的列的总和列输出,竖直池引擎602可以被配置为在第一周期中接收列的前四个张素并生成其总和(部分列输出),在第二周期中接收列的接下来的四个张素并生成其总和(部分列输出),在第三周期中接收列的接下来的四个张素并生成其总和(部分列输出),在第四周期中接收列的最后四个张素并生成其总和(部分列输出),并且通过对四个周期中生成的部分列输出求和来生成最终列输出。
在这些情况下,竖直池引擎602可以包括硬件(未示出),该硬件被配置为从在多个周期中生成的部分列输出中生成最终列输出。硬件可被配置为保持在每个周期之后更新的运行列输出。具体地,运行列输出可以被初始化为起始值,并且在第一周期之后,对在该周期中生成的部分输出执行运算,并且所使用的运行列输出更新运行列输出。然后,一旦完成了期望数量的周期,运行列输出被输出到收集器存储单元,作为最终列输出。起始值以及对部分输出和运行列输出执行的运算取决于竖直池引擎602要生成的列输出的类型。例如,如果竖直池引擎602被配置为生成总和列输出,则起始值可以是零,使得运行列输出可以被初始化为零,然后在每个周期之后,在该周期中生成的部分输出被添加到运行列输出。类似地,如果竖直池引擎602被配置为生成最大列输出或最小列输出,则起始值可以被分别设置为最小张素值或最大张素值,并且在每个周期之后,在该周期中生成的部分输出与运行列输出进行比较,并且运行列输出被分别设置为部分输出和运行列输出中较高者或较低者。
竖直池引擎602可被配置为接收和处理具有最大位宽的张素。在一些情况下,为了降低竖直池引擎602中乘法器708的复杂性,加权和的张素的最大位宽(也可以称为位深度)可以小于总和的张素的最大位宽。例如,可以从最大位宽为16的张素产生总和,并且可以从最大位宽为9的张素产生加权和。这允许乘法器708的大小显著减小。具体地,可以使用产生18位输出的9位×9位乘法器,而不是产生32位输出的16位×16位乘法器。在张素的最大位宽在要执行的运算之间不同的情况下,竖直池引擎602可包括格式单元712,该格式单元被配置为将所接收的输入张素转换成简化格式(例如,将16位有符号输入简化为9位)。在一些情况下,在加权和的最大位宽是Z并且接收的输入张素的最大位宽是Q的情况下,格式单元712可被配置为选择并输出所接收的输入张素中的每一者的Z-1个最低有效位(LSB),并且添加符号作为第Z个位。在这些情况下,假设虽然所接收的输入张素各自为十六位,但当竖直池引擎602被配置以产生加权和时,仅八个LSB具有有效数据,使得八个MSB仅为八个位的符号扩展。因此,格式单元712可以简单地丢弃冗余位。
在一些情况下,竖直池引擎602可能能够接收一个或多个定点数格式中的一个定点数格式中的输入张素。例如,竖直池引擎602可能能够以对称定点数格式(其中由定点数格式支持的值的范围以零为中心的定点格式)接收输入张素,诸如由固定整数指数exp和b位尾数m定义的定点数格式,使得值u等于u=2expm。在一些情况下,尾数m可以二进制补码格式表示。然而,在其他情况下,可以使用其他经签名或未签名的整数格式。不同的张量和张量的不同层可以使用不同的尾数位长度m和/或不同的指数b来表示。
另选地或附加地,竖直池引擎602可能能够接收仿射定点数格式的输入张素,即定义偏移和缩放的定点数格式。仿射定点格式的一个示例是8位非对称定点(Q8A)格式。在一个示例中,Q8A格式由最小可表示数rmin、最大可表示数rmax和零点z定义,并且每个数由8位插值数dQbA表示。8位数dQbA定义了最小和最大可表示数字之间的线性插值因子。在这种定点数格式的变型中,用于存储插值因子的位数可以在每个网络参数集的基础上进行配置。在该变型中,在位数为b的情况下,浮点值如等式(1)所示被近似:
在另一个示例中,Q8A格式可以由零点z定义,该零点总是精确地映射到0、缩放因子和8位数。在该示例中,浮点值如等式(2)所示被近似:
dfloat=(dQ8A-z)*scale(2)
在一些情况下,在以仿射定点数格式对张素执行诸如乘法之类的运算会导致缩放变化的情况下,以使得输出数据不准确反映缩放和/或偏移的方式来执行处理可能更加硬件高效。因此,为了能够在张素是仿射定点数格式时更有效地执行乘法,竖直池引擎602可包括减法单元714,该减法单元被配置为在所接收的张素被提供给乘法单元702之前从所接收的张素中移除所接收的偏移(例如,零点)。移除偏移可能意味着可配置池化处理单元500的输出可以随后被重新量化为仿射定点数格式。如下面更详细描述的,这种重新量化可以由张素重缩放处理单元来执行。
求和单元704、706和乘法单元702允许竖直池引擎602生成张素的总和以及张素的一个或多个加权和。这允许池引擎502以及因此可配置池化处理单元500对输入张量执行深度方向卷积运算或平均池化运算。在可配置池化处理单元还支持最大池化运算和/或最小池化运算的情况下,竖直池引擎602还可以包括最大/最小单元716,其被配置为接收张素的所接收的列或部分列,并输出那些张素的最大值或最小值。在这些情况下,竖直池引擎602还可包括第二多路复用器718,其被配置为响应于控制信号(例如“模式”信号)来选择性地输出最大/最小单元716的输出和第一求和单元704的输出中的一者。
现在将对于使用图8至图12的示例描述当竖直池引擎602如图7所示实现时,图6的归约引擎504生成加权和(作为深度方向卷积运算的一部分)的运算。具体地,图8示出了输入张量的4×4通道802,其将与竖直和水平步幅为1的3×3滤波器804卷积。输入通道802的张素表示为Xx,y,其中x表示张素的行,并且y表示张素的列。例如,X1,2是通道第1行第2列处的输入张素。滤波器804中的权重表示为Wx,y,其中x表示滤波器的行,并且y表示滤波器的列。例如,W1,2是滤波器的第1行和第2列处的权重。图8的输入通道802和滤波器804之间的卷积运算通过分别根据水平和竖直步幅在宽度和高度维度上滑动滤波器804穿过输入通道802并计算每个滤波器位置处的重叠输入张素和权重之间的点积来执行。这将产生2×2输出806。输出806的张素表示为Zx,y,其中x表示输出的行,并且y表示输出的列。例如,Z1,1是第1行第1列处的输出张素。
为了使用图6的归约引擎504和图7的竖直池引擎602来执行该卷积运算,滤波器的第一列中的权重(W0,0、W1,0、W2,0)被加载到第一乘法单元中,滤波器的第二列中的权重(W0,1、W1,1、W2,1)被加载到第二乘法单元中,并且滤波器的第三列中的权重(W0,2、W1,2、W2,2)被加载到第三乘法单元中。然后,输入通道802的输入张素被一次一列地提供给归约引擎504,并且然后提供给其乘法单元,其中输入通道802的列是输入通道的窗口的列。输入通道的窗口及其大小由滤波器的大小、卷积的步幅和卷积的扩张来定义。具体地,在图8的示例中,由于滤波器的大小是3×3,扩张是1并且在水平和竖直方向上的步幅是1,所以窗口包括相隔一列或一行的3×3张素块。例如,表1示出形成输入通道的第一3×3窗口的张素,而表2示出输入通道的第二3×3窗口的张素。因此,在该示例中,提供给归约引擎504的张素的每列包括同一列中的3个连续张素的块。以水平顺序然后竖直顺序提供列。具体地,在提供接下来的三行中的列之前,提供相同三行中的所有列。
表1–输入通道的第一3×3窗口
第一列 | 第二列 | 第三列 |
X0,0 | X0,1 | X0,2 |
X1,0 | X1,1 | X1,2 |
X2,0 | X2,1 | X2,2 |
表2–输入通道的第二3×3窗口
第一列 | 第二列 | 第三列 |
X0,1 | X0,2 | X0,3 |
X1,1 | X1,2 | X1,3 |
X2,1 | X2,2 | X2,3 |
因此,在第一周期(周期0)中,竖直池引擎602被设置有输入通道的第0列中的前三个张素(X0,0、X1,0、X2,0),并且竖直池引擎602被配置为对于权重的每列计算这些张素的加权和。具体地,第一乘法单元被配置为生成W0,0*X0,0、W1,0*X1,0、W2,0*X2,0,第二乘法单元被配置为生成W0,1*X0,0、W1,1*X1,0、W2,1*X2,0,第三乘法单元被配置为生成W0,2*X0,0、W1,2*X1,0、W2,2*X2,0,并且第一求和单元被配置为生成总和W0,0*X0,0+W1,0*X1,0+W2,0*X2,0,第二求和单元被配置为生成总和W0,1*X0,0+W1,1*X1,0+W2,1*X2,0,并且第三求和单元被配置为生成总和W0,2*X0,0+W1,2*X1,0+W2,2*X2,0。这产生以下三个列输出(这也可以称为部分输出)–P0、P1、P2-这在图9的900处示出。
P0=W0,0*X0,0+W1,0*X1,0+W2,0*X2,0
P1=W0,1*X0,0+W1,1*X1,0+W2,1*X2,0
P2=W0,2*X0,0+W1,2*X1,0+W2,2*X2,0
三个列输出(P0、P1、P2)存储在收集器存储单元中。在收集器存储单元被实现为移位寄存器的情况下,三个列输出(P0、P1、P2)可以以如图10的1002处所示的顺序被移位到移位寄存器上。此时,收集器存储单元中不存在足够的列输出来生成块输出。具体地,第一加权和块输出是输入通道(在表1中示出)的第一窗口与滤波器的加权和。此时,只有第一列输出在收集器存储单元中。因此,水平池引擎606在该周期中可以不执行任何运算。
在下一个周期(周期1)中,竖直池引擎602被设置有输入张量的第1列中的前三个张素(X0,1、X1,1、X2,1),并且竖直池引擎602被配置为对于权重的每列计算这些张素的加权和。具体地,第一乘法单元被配置为生成W0,0*X0,1、W1,0*X1,1、W2,0*X2,1,第二乘法单元被配置为生成W0,1*X0,1、W1,1*X1,1、W2,1*X2,1,第三乘法单元被配置为生成W0,2*X0,1、W1,2*X1,1、W2,2*X2,1,并且第一求和单元被配置为生成总和W0,0*X0,1+W1,0*X1,1+W2,0*X2,1,第二求和单元被配置为生成总和W0,1*X0,1+W1,1*X1,1+W2,0*X2,1,并且第三求和单元被配置为生成总和W0,2*X0,1+W1,2*X1,1+W2,2*X2,1。这产生以下三个列输出(这也可以称为部分输出)–P3、P4、P5-这在图11的1100处示出。
P3=W0,0*X0,1+W1,0*X1,1+W2,0*X2,1
P4=W0,1*X0,1+W1,1*X1,1+W2,1*X2,1
P5=W0,2*X0,1+W1,2*X1,1+W2,2*X2,1
三个列输出(P3、P4、P5)存储在收集器存储单元中。在收集器存储单元被实现为移位寄存器的情况下,三个列输出(P3、P4、P5)可以以如图10的1004处所示的顺序被移位到移位寄存器上。此时,在收集器存储单元中仍然没有足够的列输出来生成输出张素,因此水平池引擎606可以不在该周期中执行任何运算。
在下一个周期(周期2)中,竖直池引擎602被设置有输入通道的第2列中的前三个张素(X0,2、X1,2、X2,2),并且竖直池引擎602被配置为对于权重的每列计算这些张素的加权和。具体地,第一乘法单元被配置为生成W0,0*X0,2、W1,0*X1,2、W2,0*X2,2,第二乘法单元被配置为生成W0,1*X0,2、W1,1*X1,2、W2,1*X2,2,第三乘法单元被配置为生成W0,2*X0,2、W1,2*X1,2、W2,2*X2,2,并且第一求和单元被配置为生成总和W0,0*X0,2+W1,0*X1,2+W2,0*X2,2,第二求和单元被配置为生成总和W0,1*X0,2+W1,1*X1,2+W2,1*X2,2,并且第三求和单元被配置为生成总和W0,2*X0,2+W1,2*X1,2+W2,2*X2,2。这产生以下三个列输出(这也可以称为部分输出)–P6、P7、P8-这在图12的1200处示出。
P6=W0,0*X0,2+W1,0*X1,2+W2,0*X2,2
P7=W0,1*X0,2+W1,1*X1,2+W2,1*X2,2
P8=W0,2*X0,2+W1,2*X1,2+W2,2*X2,2
三个列输出(P6、P7、P8)存储在收集器存储单元中。在收集器存储单元被实现为移位寄存器的情况下,三个列输出(P6、P7、P8)可以以如图10的1006处所示的顺序被移位到移位寄存器上。此时,收集器存储单元包括足够的列输出以生成块输出(例如,输出张素Z0,0)。具体地,列输出P0、P4和P8可被组合以生成输入通道的第一块或窗口的加权和(即,输出张素Z0,0)。因此,水平池引擎606可被配置为选择列输出P0、P4和P8并生成其总和以生成第一块输出。
在下一个周期(周期3)中,输入通道的第3列的前三个张素(X0,3、X1,3、X2,3)被提供给竖直池引擎602。然后,乘法单元和求和单元一起产生以下三个列输出–P9、P10、P11。
P9=W0,0*X0,3+W1,0*X1,3+W2,0*X2,3
P10=W0,1*X0,3+W1,1*X1,3+W2,1*X2,3
P11=W0,2*X0,3+W1,2*X1,3+W2,2*X2,3
三个列输出(P9、P10、P11)存储在收集器存储单元中。在收集器存储单元被实现为移位寄存器的情况下,三个列输出(P9、P10、P11)可以以如图10的1008处所示的顺序被移位到移位寄存器上。然后,水平池引擎606选择列输出P3、P7和P11,并生成其总和以生成第二块输出(例如,输出张素Z0,1),即窗口2的块输出(上面的表2)。
由于在该竖直位置处没有更多的输入通道的列,所以对在下一个竖直位置处开始的列重复这一过程。具体地,列0的第1-3行中的张素被提供给竖直池引擎,并且加权和列输出因此被生成并存储在收集器存储单元中;列1的第1-3行中的张素被提供给竖直池引擎602,并且加权和列输出因此被生成并存储在收集器存储单元中;列2的第1-3行中的张素被提供给竖直池引擎,并且加权和列输出因此被生成并存储在收集器存储单元中;并且然后将列3的第1-3行中的张素提供给竖直池引擎,并且加权和列输出因此被生成并存储在收集器存储单元中。这显示在下面的表3和图10中。在图10的1010、1012、1014和1016处示出了周期4、5、6和7之后的移位寄存器。
表3
可以看出,在同一周期中生成的列输出可用于生成多于一个块输出。例如,在第三周期中,生成列输出P6、P7、P8,P8用于生成块输出Z0,0,并且P7用于生成块输出Z0,1。
还可以看出,每当竖直池引擎开始处理新的一行窗口时,水平池引擎必须等待多个周期,之后其可以开始生成块输出。水平池引擎必须等待的周期数量基于要应用于输入张量的通道的滤波器的大小。如下所述,周期数量也可以基于是否存在任何填充。例如,需要三个不同列的加权和列输出来生成3×3滤波器的加权和块输出,因此在竖直池引擎的3个处理周期之后,将有足够的列输出来生成加权和块输出。但是,从那时起,每个周期可以生成一个块输出,直到到达行的末端。例如,仅需要两个不同列的加权和列输出来生成2×2滤波器的加权和块输出,因此在竖直池引擎602的2个处理周期之后,有足够的列输出来生成加权和块输出。
可以看出,输入通道的输出一次生成一个输出行或线。具体地,首先生成第一行输出元素(Z0,0、Z0,1),然后生成第二行输出元素(Z1,0、Z1,1)。
可以看出,在上面的示例中,不是由竖直池引擎602生成并存储在收集器存储单元604中的所有列输出都被水平池引擎606用来生成块输出。具体地,P1、P2、P5、P6、P9、P10等不用于生成块输出。在一些情况下,如果加权和列输出不用于生成块输出,则可以简单地丢弃该列输出。然而,在其他情况下,竖直池引擎602可以包括附加逻辑(未示出),以在已知由此生成的加权和将不会被水平池引擎606用来生成块输出的情况下,禁用乘法单元和/或求和单元。在确定是否添加这样的逻辑时,与禁用乘法单元和/或求和单元相关联的功率节省可以在附加逻辑(和它消耗的功率)之间进行平衡。在确定这样的逻辑将仅偶尔使用的情况下(例如,当大多数列输出预期用于生成块输出时),则有限的功率节省可能不证明附加硬件是合理的。
上面的示例描述了归约引擎及其竖直池引擎可如何实现深度方向卷积,其中在水平和竖直方向上的步幅是1,并且不存在填充。然而,竖直池引擎602也可以支持在水平和/或竖直方向上步幅大于1的深度方向卷积,以及在一个或多个方向上的填充。如本领域技术人员所知,默认情况下,卷积开始于与滤波器的左上角的权重(例如,图8的滤波器804的权重W0,0)对准的输入张量的左上角的数据或元素(例如,图8的输入通道802的元素X0,0),并且滤波器根据水平和竖直方向上的步幅在输入上步进。这被称为零填充卷积。填充是向输入中添加具有空值的行和/或列。例如,图13示出填充的输入通道1302,其是3×3输入通道,具有添加到顶部的一行填充、添加到底部的一行填充、添加到左侧的一列填充和添加到右侧的一列填充。在该示例中,填充输入通道1302和3×3滤波器1304之间的卷积开始于与滤波器1304的权重W1,1对准的元素X0,0,并且产生3×3输出1306。
在存在至少一列填充的情况下,在一些情况下,可以在生成下一个或前一个列输出的同时将零列输出简单地存储在收集器存储单元中,而不是生成该列的列输出。这可以减少水平池引擎606必须等待的周期数量,直到收集器存储单元中有足够的列输出来生成输出值或元素。例如,为了以与图8的输入通道802和图8的滤波器804之间的卷积相同的方式执行图13的填充的输入通道1302和图13的滤波器1304之间的卷积,填充的输入通道1302的第一列中的前三个张素在第一周期中被提供给竖直池引擎,在该第一周期中为每列权重的那些张素生成加权和。然而,由于已知张素的该列的每个列输出将是零,所以收集器存储单元用这些列输出的零值来初始化,而不是对张素的该列执行加权和计算,并且张素的下一列(即,填充的输入通道1302的第二列中的前三个张素)被提供给竖直池引擎。这意味着在第一周期之后,收集器存储单元已经具有前两列的列输出。
这在表4和图14中示出。具体地,表4示出了每个周期哪些输入张素被提供给竖直池引擎,以及从其生成哪些加权和列输出,以生成第一行输出(即,输出元素Z0,0、Z0,1和Z0,2)。图14示出了这些周期中的每个周期后的收集器存储单元。可以看出,由于第一列仅由零或空值组成,而不是向竖直池引擎提供零,因此在1402处将一组零列输出写入收集器存储单元,并且将输入张素的第二列提供给竖直池引擎。类似地,由于最后一列仅包括零或空值,而不是将这些零提供给竖直池引擎602,所以可以将一组零列输出写入收集器存储单元,同时,例如,竖直池引擎602正在处理输入通道的下一个竖直位置。
表4
从该示例可以看出,与不存在填充时相比,当存在填充时,更多的列输出被用于生成块输出。例如,只有P2和P6不用于生成块输出。此时,用于实现神经网络的最常见的深度方向卷积是在左侧、右侧、顶部和底部具有填充的3×3滤波器的深度方向卷积。
在又一些情况下,在存在至少一列填充的情况下,水平池引擎606可被配置为对于每个块输出仅选择和组合来自收集器存储单元的生成该块输出所需的列输出,而不是生成该列的列输出,或者将零列输出存储在收集器存储单元中。例如,在表4和图14所示的示例中,为了生成块输出Z0,0,水平池引擎606可被配置为仅选择列输出P1和P5。这可以允许以更有效的方式生成块输出。
如上参考图5所述,在一些情况下,池引擎502可包括后计算引擎508,该后计算引擎可用于将格式化改变等应用于归约引擎504或除法引擎506的输出。现在参考图15,其示出了后计算引擎508的示例性实现方式。在图15的示例中,后计算引擎508包括偏差单元1502、定点到定点转换单元1504和箝位单元1506。然而,这仅仅是示例,并且后计算可以具有本文描述的单元、附加单元和/或不同单元的不同组合。
偏差单元1502被配置为接收归约引擎的输出(即,块输出)或除法引擎的输出(例如,除法块输出),并且任选地向其添加偏差值。如本领域技术人员所知,除了与一组权重相关联之外,神经网络的卷积层可以与一个或多个偏差值相关联。具体地,应用于输入张量的每个滤波器可能存在偏差值。当卷积层的滤波器与偏差值相关联时,通过将偏差值添加到由滤波器和输入张量的相关部分的卷积生成的每个输出元素来生成最终输出张素。例如,在图8所示的示例中,将输入通道802与滤波器804卷积产生四个输出元素Z0,0、Z0,1、Z1,0和Z1,1。如果滤波器与偏差值E相关联,则E被加到Z0,0、Z0,1、Z1,0和Z1,1中的每一者以生成最终输出张素。
由于可以任选地将偏差应用于归约引擎和/或除法引擎的输出,所以偏差单元1502可以被配置为接收(i)控制信息(例如,偏差控制),该控制信息指示偏差值是否要被应用于所接收的输出,以及(ii)如果将偏差值应用于接收的输出,则接收偏差值(例如,偏差)。在控制信息指示偏差值将被应用于所接收的值的情况下,则偏差单元1502将所提供的偏差添加到所接收的值。然而,在控制信息指示不将偏差添加到所接收的值的情况下,偏差单元1502可以被配置为简单地将接收的值不加改变地传递到定点到定点转换单元1504。在其他示例中,代替偏差单元1502被配置为在不将偏差添加到定点到定点转换单元1504时将所接收的值传递到该定点到定点转换单元,可存在旁路路径,该旁路路径允许在不将偏差添加到所接收的输出时将所接收的值直接提供给定点到定点转换单元1504。在一些情况下,或者深度方向卷积的每个滤波器与偏差相关联,或者没有滤波器与偏差相关联。
偏差单元1502可能仅能够接收具有最大位宽(或最大位数)的偏差值。例如,在一些情况下,偏差单元1502可能仅支持高达32位的偏差值。对于本领域的技术人员将显而易见的是,这仅是示例,并且其他偏差单元可以支持偏差值的不同的最大位宽。偏差值可以是带符号的。
如上所述,相对于竖直池引擎,归约引擎504可能能够接收和处理一种或多种数据格式的输入张素和权重。例如,如上所述,归约引擎504可能能够接收一种或多种以下格式的输入张素和权重:(1)对称定点数格式,其中每个输入张素由固定长度尾数和在一组值上共享的指数来表示(例如,输入通道中的所有输入张素可以共享相同的指数);以及(2)仿射定点数格式,即定义偏移和缩放的定点数格式,诸如但不限于Q8A格式。
当输入张素(和任何权重)是由尾数位长度和指数定义的对称定点数格式时,定点到定点转换单元1504可以接收第一对称定点数格式的值,并将所接收的值转换成第二对称定点数格式。第一定点数格式和第二定点数格式可以具有不同的尾数位长度和相同的指数,相同的尾数位长度和不同的指数,或者不同的尾数位长度和不同的指数。可以执行这样的转换以将输出数据置于要接收可配置池化处理单元的输出的部件所预期的格式和/或可配置池化处理单元所支持的输出格式中。
定点到定点转换单元1504可以被配置为通过根据舍入模式(诸如但不限于,舍入到最接近、远离零)将第一定点数格式的值舍入到第二定点数格式的可表示数来实现转换。
由于可以任选地执行定点到定点转换,所以定点到定点转换单元1504可以被配置为接收(i)控制信息(例如,固定到固定控制),该控制信息指示是否要对所接收的值执行定点到定点转换,以及(ii)如果要执行定点到定点转换,则接收标识第一定点数格式和/或第二定点数格式的信息(例如,指数)。在图15所示的一个示例中,第一定点数格式和第二定点数格式可以仅在指数上不同,并且定点到定点转换单元1504可以被配置为接收指示接收值的指数以及定点到定点转换单元1504的输出的期望指数的信息。在这些示例中,定点到定点转换单元1504可以根据两个指数值之间的差来确定要丢弃的所接收的值的最高有效位(MSB)的数量。在另一个示例中,代替定点到定点转换单元接收所接收的值的指数和定点到定点转换单元的期望输出,定点到定点转换单元可简单地接收两个指数值之间的差。
在图15所示的示例中,定点到定点转换单元1504可以接收以下中的一项:(1)归约引擎504的输出(即,块输出),(2)除法引擎506的输出(即,除法输出),或(3)偏差单元1502的输出。虽然在执行定点到定点转换之前添加偏差以使得在重缩放输出时考虑偏差是有利的,但是对于本领域的技术人员将显而易见的是,这仅是示例,并且后计算引擎508的部件可以是不同的顺序。
在不对所接收的值执行定点到定点转换的情况下,定点到定点转换单元1504可被配置为简单地将所接收的值不加改变地传递到箝位单元1506。在其他示例中,代替定点到定点转换单元1504被配置为在不执行定点到定点转换时将所接收的值传递到箝位单元1506,可存在旁路路径,该旁路路径允许在不执行定点到定点转换时将值直接提供给箝位单元1506。
箝位单元1506被配置为接收值并对其执行最大箝位运算和/或最小箝位运算。对值执行最大箝位运算包括确定该值是否超过最大值,并且如果是,则用最大值替换所接收的值(或将所接收的值解析为最大值)。对值执行最小箝位运算包括确定该值是否下降到低于最小值,并且如果是,则用该最小值替换所接收的值(或将所接收的值解析为该最小值)。换句话说,箝位单元1506可以用于确保输出通道的输出张素落在期望的范围内。箝位单元1506可用于实现简单的激活函数,诸如ReLU函数(即,f(x)=max(0,x))。
如下面更详细描述的,在神经网络加速器中使用可配置池化处理单元500的情况下,该神经网络加速器在几个硬件传递过程内实现神经网络并且还具有专用的激活处理单元,能够在可配置池化处理单元500中执行简单的激活函数可以允许(i)将简单的激活函数更有效地应用于张量,并且(ii)可以允许在单个硬件传递过程中应用多于一个激活函数。由于ReLU运算是在NN中执行的最常见的非线性运算中的一种非线性运算,并且相对容易在硬件中实现,所以这可以显著增加可以在单个硬件传递过程中执行的运算的数目,而不会显著增加神经网络加速器的复杂性。
由于可任选地执行箝位运算,箝位单元1506可被配置为接收(i)指示是否将执行最大箝位运算和/或最小箝位运算的控制信息(例如,箝位控制);(ii)如果要执行最大箝位运算,则接收标识最大值的信息(例如,最大值);并且(iii)如果要执行最小箝位运算,则接收标识最小值的信息(例如,最小值)。
在不对所接收的值执行箝位运算的情况下,箝位单元1506可以被配置为简单地将所接收的值传递到后计算引擎508的输出,作为最终输出张素。在其他示例中,代替箝位单元1506被配置为在不执行箝位运算时将接收的值传递到后计算引擎508的输出,可存在旁路路径,该旁路路径允许再不执行箝位运算时将值直接提供给后计算引擎508的输出。
在一些情况下,当接收的值从仿射定点数格式的输入(输入张量或权重)生成并且在计算之前从中移除偏移时,不执行箝位运算。这是因为尚未执行重新量化/重缩放。例如,当从仿射定点数格式的输入张量生成加权和作为深度方向卷积运算的一部分时,这可能发生。
由后计算引擎508生成的输出张素的位长度可以取决于对所接收的值执行的运算。例如,在一些情况下,归约引擎或除法引擎的输出可以是24位,并且如果向其添加32位偏差值,则偏差单元的输出可以是32位。如果在其上既没有执行定点到定点转换也没有执行箝位运算,则输出张素可以是32位。然而,如果直接对所接收的值执行定点到定点转换,或者在已经向所接收的值添加了偏差之后对其执行定点到定点转换,则该值可以被减少到例如16位值。因此,在这些情况下,输出张素可能只有16位。
如上所述,如果深度方向卷积运算的输入张量和/或权重是仿射定点数格式,则在执行卷积计算之前从其移除偏移可能是有效的。在此类情况下,输出值随后被重新量化为适当的仿射定点数格式。在一些情况下,重新量化可以由可配置池化处理单元外部的模块或单元来执行,诸如下面描述的张素重缩放处理单元。在其他情况下,可配置池化处理单元可以包括(例如,在后计算引擎508中)能够执行到适当定点数格式的重新量化的硬件。在可配置池化处理单元将形成神经网络加速器的一部分的情况下,与将重新量化能力内置于可配置池化处理单元中相比,具有诸如张素重缩放处理单元之类的外部单元可能更有效,该外部单元可用于重新量化由多个不同处理单元生成的数据。
现在参考图16,其示出了可配置池化处理单元500的示例性实现方式。图16的可配置池化处理单元500包括图5的池引擎502和多个控制器模块1602、1604、1606、1608、1610,该池引擎如上所述操作以一次处理输入张量的通道,该控制器模块被配置为控制通过可配置池化处理单元500的数据流和控制信息。
在图16所示的示例中,可配置池化处理单元500被配置为接收输入张量作为输入张素的流,并将所接收的输入张素临时存储在外部缓冲区1612中,直到它们被池引擎502处理。外部缓冲区1612不一定大到足以存储整个输入张量,因此当输入张量被处理时,它们可以从外部缓冲区1612中移除或者被标记为可用于驱逐。如下文更详细描述的,当可配置池化处理单元500是神经网络加速器的一部分时,外部缓冲区1612可以与其他处理单元共享(并且因此称为共享缓冲区)。然而,在其他示例中,缓冲区可以在可配置池化处理单元500内部,或者形成该可配置池化处理单元的一部分。
为了管理输入张量的输入张素的接收、存储和检索,可配置池化处理单元500包括写控制器1602和读控制器1604。写控制器1602被配置为接收输入张量的输入张素并将所接收的输入张素存储在外部缓冲区1612中。读控制器1604被配置为从外部缓冲区1612检索适当的输入张素,并在适当的时间将它们提供给池引擎502。
在一些情况下,写控制器1602可能能够每个周期接收多个输入张素,其可以被称为一组输入张素,并且将该组输入张素存储在外部缓冲区1612中。如下所述,在可配置池化处理单元500形成神经网络加速器(NNA)的一部分的情况下,写控制器1403在一些情况下可以被配置为从归一化处理单元接收输入张量。
在一些情况下,写控制器1602可以被配置为以预定顺序接收输入张量的输入张素。在一些情况下,写控制器1602可以被配置为以第一处理顺序接收输入张量的输入张素,该第一处理顺序可以被称为部分后端处理顺序。在其他情况下,写控制器1602可以被配置为以不同的第二处理顺序接收输入张素,该第二处理顺序可以被称为前端处理顺序。在又一些情况下,写控制器1602可以被配置为以另一个顺序接收输入张量的输入张素。例如,写控制器1602可以被配置为以前端处理顺序的变型形式接收输入张量。具体地,如下面更详细描述的,在前端处理顺序中,张素以组接收,其中每组包括具有相同通道和高度但具有不同宽度位置的张素。在可配置池化处理单元的输入总线或接口可以接收特定数量的元素,每个元素具有最大位宽,并且每个元素的位宽或位长度小于特定位宽的一半的情况下,写控制器1602可以被配置为在多个通道中接收具有张素的组。例如,如果可配置池化处理单元的输入总线或接口可以每个周期接收高达32位宽的PARALLELISM元素,并且输入张素只有8位宽,则写控制器1602可以被配置为每个周期接收4×PARALLELISM张素。这可以允许在一些情况下更快地加载外部缓冲区。
在部分后端处理顺序中,以宽度顺序、平面/通道顺序、然后是高度顺序接收张量的元素或张素,然而,在接收下一组平面/通道之前,仅接收预定数量(例如,CALC_BLOCKS)的不同宽度位置。
部分后端处理顺序在图17中示出。具体地,在图17中,张量1700的张素是以张素的块或组来接收的。一起接收的一组张素可以被称为事务。一起接收的每组张素在图17中由实线箭头标识。接收张素集合的顺序由虚线标识。具体地,在接收到一组张素之后,接收到通过虚线链接到该组元素的该组张素。例如,在接收到一组张素1702之后,接收到一组张素1704。注意,在图17中没有明确标识所接收的张量1700的所有组张素。具体地,在接收到开始于点1708处的一组张素之后,接收另外组的张素。根据本文的描述,对于本领域的技术人员将显而易见的是张量1700的剩余张素被接收的顺序。如果张量1700可以被描述为具有如图17所示的宽度W、高度H以及通道或平面的数量C(其也可以称为深度),则在部分后端处理顺序中,以宽度顺序、平面/通道顺序、然后是高度顺序接收张素。然而,在移动到下一组平面之前,仅接收到预定数量(例如,CALC_BLOCKS)的不同宽度位置。
具体地,在部分后端处理顺序中,所接收的每组张素包括在相同高度位置和相同宽度位置(例如,相同列和行)处的第一预定数量(例如,NUM_PLANES)的平面/通道中的张素。在步骤(1)处,连续接收不同宽度位置处的第二预定数量(例如,CALC_BLOCK)的组的张素。然后在步骤(2)处,对下一组平面重复步骤(1)。一旦接收到所有平面的一组宽度位置的所有张素,则在步骤(3)处,从第一组平面/通道开始,对下一组宽度位置重复步骤(1)和(2)。一旦接收到所有通道的输入张量的整行的所有张素,则在步骤(4)处,从第一组平面/通道和第一宽度位置开始,对下一行重复步骤(1)、(2)和(3)。然后重复步骤(4),直到接收到整个输入张量。以这种顺序接收输入张量的张素可以允许张素被有效地存储在外部缓冲区1612中。
在一些情况下,写控制器1602可能能够将来自预定数量的平面/通道的张素写入外部缓冲区中的相同位置或地址。该预定数量可以被称为NUM_PLANES。NUM_PLANES可以基于外部缓冲区的存储器的每个可寻址块的大小和每个张素的最大大小。例如,如果外部缓冲区的存储器的每个可寻址块是256位,并且每个张素具有16的最大位宽,则NUM_PLANES可以是十六。NUM_PLANES可以是固定的,使得如果张素的位宽小于16位,则仅使用存储器的每个块的一部分。例如,如果输入张量的张素仅为8位,则仅使用存储器的每个块的一半,并且如果输入张量的输入张素仅为4位,则仅使用存储器的每个块的四分之一。为了节省这些较低位宽的功率,存储器的每个可寻址块可以被分成子区段(例如,128位可寻址块可以被分成64位子区段),使得如果子区段没有被访问,则它可以不消耗功率。对于本领域的技术人员将显而易见的是,这些仅是示例,并且其他示例可以具有不同的可寻址存储器块大小、不同的最大张素位宽和/或不同的NUM_PLANES值。
在一些情况下,第一预定数量可以等于NUM_PLANES,使得每组张素可以包括来自多达NUM_PLANES个不同平面/通道的张素。在一些情况下,如果最后一组通道包括少于NUM_PLANES个通道,则发射器可以插入剩余通道的虚设值,并通知写控制器1602哪些张素是无效的或者不应被使用。在一些情况下,NUM_PLANES可以等于16,然而,对于本领域技术人员来说显而易见的是,这只是一个示例。
在可配置池化处理单元500形成神经网络加速器的一部分的情况下,该神经网络加速器包括卷积处理单元,该卷积处理单元包括多个卷积引擎,这些卷积引擎可以被称为CALC_BLOCKS,第二预定数量可以等于CALC_BLOCKS,使得在移动到下一组平面/通道之前接收CALC_BLOCKS个宽度位置。
在前端处理顺序中,以平面/通道顺序、宽度顺序、然后高度顺序接收张量的元素或张素。部分后端处理顺序在图18中示出。具体地,在图18中,张量1800的张素是以张素的块或组来接收的。组中张素的数量(即,PARALLELISM)可以是可配置池化处理单元的输入总线或输入接口的宽度(例如,可以同时接收的元素的数量)。一起接收的一组张素可以被称为事务。一起接收的每组张素在图18中由实线箭头标识。接收张素集合的顺序由虚线标识。具体地,在接收到一组张素之后,接收到通过虚线链接到该组元素的该组张素。例如,在接收到一组张素1802之后,接收到一组张素1804。注意,在图18中没有明确标识所接收的张量1800的所有组张素。具体地,在接收到一组张素1808之后,接收另外组的张素。根据本文的描述,对于本领域的技术人员将显而易见的是张量1800的剩余张素被接收的顺序。如果张量1800可以被描述为具有如图18所示的宽度W、高度H以及通道或平面的数量C(其也可以称为深度),则在前端处理顺序中,以平面/通道顺序、宽度顺序、然后是高度顺序接收张素。
具体地,在前端处理顺序中,每组张素包括在相同高度位置处和相同通道/平面中的第一预定数量(例如,PARALLELISM)的宽度位置中的张素。在步骤(1)处,从第一通道中的那些开始,连续接收在相同高度位置和相同宽度位置处的每组张素(例如,接收一组张素1802,然后接收一组张素1804,依此类推)。一旦已经为所有通道接收到那些宽度位置处的所有张素,则在步骤(2)处,从第一通道开始,为下一组宽度位置重复步骤(1)(例如,在已经从所有通道接收到一组张素1804中的宽度位置处的所有张素之后,接收一组张素1806)。一旦接收到所有通道的输入张量的整行的所有张素,则在步骤(3)处,从第一通道和第一宽度位置开始,对下一行重复步骤(1)和(2)(例如,接收一组张素1808)。然后重复步骤(3),直到接收到整个输入张量。
如上所述,写控制器1602可能能够将来自预定数量的平面/通道(NUM_PLANES)的张素写入外部缓冲区1612中的相同位置或地址。可以看出,当以前端处理顺序接收输入张量时,将需要若干周期(例如NUM_PLANES个周期)来接收足够的张量以用于写入外部缓冲区1612。因此,当可配置池化处理单元被配置为以前端处理顺序接收输入张量时,写控制器可以具有小缓冲区或其他存储单元,其可以用于在将张素写入外部缓冲区1612之前临时存储多个所接收组的张素。在一些情况下,外部缓冲区1612可以被分成预定数量(例如,NUM_BANKS)的存储体。在此类情况下,在NUM_PLANES个周期之后,写控制器1602可能能够一次将NUM_PLANES个块写入外部缓冲区,这可以被称为写事务。如果ARALLELISM>NUM_BANKS,则每个NUM_PLANES周期将存在PARALLELISM/NUM_BANKS个写事务。
如下所述,在可配置池化处理单元形成具有可配置流水线的神经网络加速器的一部分的情况下,能够以前端处理顺序接收输入张量可以允许可配置池化处理单元从多个处理单元等接收输入张量,而不是局限于能够以部分后端处理顺序输出张量的那些处理单元。
返回到图16,读控制器1604被配置为从外部缓冲区1612检索适当的输入张素,并在适当的时间将它们提供给池引擎502。例如,如果图8的输入通道802表示要与图8的滤波器804卷积的所接收的输入张量的通道,则读控制器1604可被配置为在第一周期中向池引擎(并且具体地,其竖直池引擎602)提供输入张素X0,0、X1,0、X2,0,在下一个周期中向相同的池引擎502提供输入张素X0,1、X1,1、X2,1,在第三周期中向相同的池引擎502提供输入张素X0,2、X1,2,X2,2,依此类推。一旦第一行输入张素(X0,0、X0,1、X0,2、X0,3)已经被提供给池引擎,它们就不再被需要,并且可以从外部缓冲区1612移除,或者被标记为可用于从该外部缓冲区驱逐。
如上所述,在一些情况下,外部缓冲区1612的每个地址可能能够在相同的地址处存储在相同的宽度和高度位置、但不同的通道处的多达NUM_PLANES个张素。在NUM_PLANES大于或等于池引擎的数量的情况下,这允许读控制器1604从外部缓冲区1612中高效地检索多达NUM_PLANES个不同通道的相同列或部分列。然后,读控制器1604可以向池引擎502中的每一者提供属于一个通道的每列或部分列。每个池引擎502然后并行地在不同通道的相同列或部分列上工作。在一些情况下,读控制器1604可能能够利用单个读取请求或单个事务从外部缓冲区1612中读取多达NUM_PLANES个通道中的每一者的至少G张素列或部分列,其中G是竖直池引擎602在周期中可以处理的张素的数量。在一些情况下,读控制器1604可能能够利用单个读取请求或单个事务从外部缓冲区1612中读取多达NUM_PLANES个通道中的每一者的至少两个G张素列或部分列。
在一些情况下,读控制器1604可以被配置为向池引擎502提供第一NUM_PLANES个通道的所有列或部分列,以在移动到下一组NUM_PLANES个通道之前生成输出的整行。这允许有效地使用存储在收集器存储单元中的列输出。
然而,在其他情况下,读控制器1604可以被配置为仅向池引擎提供第一NUM_PLANES个通道的足够列或部分列,以在移动到下一组NUM_PLANES个通道之前生成行的第一预定数量的输出。第一预定数量的输出可以等于输出总线或接口宽度(例如OUTPUT_PARALLELISM),即可以同时输出的元素的数量。例如,在OUTPUT_PARALLELISM等于十六,NUM_PLANES等于十六,输入张量的通道数量大于十六,并且输出张量的宽度大于十六的情况下,读控制器1604可以被配置为向池引擎提供前十六个通道的足够列或部分列,以生成对应输出通道的第一行的前十六个宽度位置,然后,读控制器1604可以被配置为向池引擎提供足够列或部分列,以生成下一组十六个输出通道的前十六个宽度位置。仅在已经生成每个输出通道的第一行的前十六个宽度位置之后,读控制器1604才提供下一列或部分列来生成前十六个输出通道的第一行的下十六个宽度位置。这可以允许输出张量以期望的顺序(例如,前端处理顺序)被有效地输出或传输。
然而,在这些情况下,竖直池引擎、收集器存储单元和水平池引擎在完成第一输出通道的行之前从处理第一输出通道的一行跳到不同输出通道的行。这意味着将存在存储在每个收集器存储单元中的列输出,其将被需要以用于计算该第一输出通道的该行的宽度位置的下一个块。如果不保存这些列输出,它们最终将会丢失,并且将必须重新计算。因此,为了保存将再次使用的列输出,读控制器1604可以被配置为将这些列输出存储在外部缓冲区1612中,并且当池引擎再次开始处理该通道时,将它们重新加载到收集器存储单元中。在一些情况下,可用于存储列输出的外部缓冲区1612的存储或存储器的量可能是有限的,这可能限制输入通道的连续窗口之间的重叠量。在一些情况下,可用于存储列输出的外部缓冲区1612的存储或存储器的量可以被选择为支持具有最大两列重叠的窗口,例如,对于多达预定数量的通道(在一些示例中可以是512),在外部缓冲区1612中可以有足够的空间用于存储两列的相关列输出(即,最左侧列的一个列输出和第二左侧列的两个列输出)。这允许3×3深度方向卷积运算在宽度维度上的步幅为1,并且在神经网络中的大多数池化运算(因为在池化窗口之间通常不存在重叠)被实现,而不必重新计算列输出中的任一者。然而,对于本领域的技术人员将显而易见的是,这仅是示例,并且其他示例可以支持更大的列重叠。
在一些情况下,当写控制器1602将一组输入张素写入外部缓冲区1612时,写控制器1602可以向读控制器1604提供指示该组输入张素在外部缓冲区1612中的位置的信息(例如,指针)。类似地,在一些情况下,一旦读控制器1604已经确定不再需要一组输入张素(例如,它们已经被池引擎502处理),读控制器1604便可以通知写控制器1602该组输入张素在外部缓冲区1612中不再需要并且可被驱逐。
如下面更详细描述的,写控制器1602可以接收指示输入张素如何存储在外部缓冲区1612中的控制信息(例如,来自配置控制器1608),并且读控制器1604可以接收指示何时从外部缓冲区1612读取哪些输入张素以及将它们提供给哪个池引擎502的控制信息(例如,来自配置控制器1608)。
在图16所示的示例中,可配置池化处理单元500被配置为,当可配置池化处理单元500被配置为对输入张量执行深度方向卷积时,检索深度方向卷积的参数(例如,权重、偏差、零点),将参数存储在参数存储单元1614中,并在适当的时间将适当的参数提供给池引擎502。如上所述,对于深度方向卷积,输入张量的每个通道与由多个权重形成的滤波器相关联。每个滤波器还可以与偏差值相关联,该偏差值被添加到通过滤波器与输入张量的对应通道的卷积而生成的每个元素。此外,如上所述,当输入张素是仿射定点格式时,在卷积之前从输入张素和权重中移除零点然后重新量化输出值可能是有效的。在此类情况下,参数还可以包括每个通道的权重零点。如上所述,输入张量的零点可以作为主配置信息的一部分来提供,并由竖直池引擎602从每个输入张量中移除。
为了管理深度方向卷积的参数的检索和存储,可配置池化处理单元500可以包括存储器控制器1606。存储器控制器1606被配置为,当可配置池化处理单元500被配置为执行深度方向卷积时,从外部存储器检索深度方向卷积的参数,并且将检索到的参数存储在本地参数存储单元1614中。如上所述,深度方向卷积的参数包括输入张量的每个通道的一组权重,以及任选每个通道的偏差值和/或每个通道的权重零值。如上相对于竖直池引擎602所述,为了限制每个竖直池引擎602中乘法器的数量并减少存储参数的存储器的量,可配置池化处理单元500可能仅能够执行与高达最大大小的滤波器的深度方向卷积。例如,可配置池化处理单元可能仅能够执行与大小高达3×3的滤波器的深度方向卷积。
在一些情况下,存储器控制器1606可以被配置为预获取深度方向卷积的参数,使得在深度方向卷积处理开始之前,深度方向卷积的所有参数被存储在参数存储单元1614中。这可以隐藏在从存储器读取参数时引入的延迟。在这些情况下,参数存储单元1614可以足够大以存储输入张量的深度方向卷积运算的所有参数。能够存储深度方向卷积的参数的最小存储量可以取决于输入张量的通道数量、每个滤波器的最大权重数量、权重的最大位宽、零点的最大位宽和偏差的最大位宽。例如,如果可配置池化处理单元500可以对具有多达512个通道的输入张量执行深度方向卷积运算,每个滤波器的最大权重数量是9(例如,滤波器的大小可以高达3×3),权重的最大位宽是8,权重零点的最大位宽是8,偏差值的最大位宽是32,则深度方向卷积的参数的最大大小是7168字节的数据。在此类情况下,参数存储单元1614的最小大小是7168字节。任何超过最小大小的额外大小都可以用来隐藏延迟,并帮助更均匀地分配存储器获取。在一些情况下,参数存储单元1614可以是最小大小的至少两倍(例如,7168字节×2),以允许在可配置池化处理单元500正在处理第一深度方向卷积时,将第二深度方向卷积的参数预获取或预加载到参数存储单元1614中。对于本领域的技术人员将显而易见的是,这仅是示例,并且可以支持另一种数量的通道、另一种大小的滤波器和/或其他位宽。
现在参考图19,其示出了当最大滤波器大小为3×3时,用于在参数存储单元1614中存储深度方向卷积参数的示例性格式1900。在该示例中,与相同通道相关的参数被打包在一起。具体地,形成通道的滤波器的权重1902被一个接一个地打包,之后是该滤波器的零点或偏移1904,然后是与该滤波器/通道相关联的偏差值1906。这之后是下一个通道的参数,依此类推。滤波器的权重可以按行顺序打包在一起,使得第一行中的权重首先按顺序存储,然后是第二行中的权重,依此类推。图19示出了可如何以这种方式存储图8的滤波器804的权重。如果任何权重、偏差或零点不用于特定的深度方向卷积,则这些权重、偏差和/或零点可被设置为零。以诸如这样的方式存储参数(其中每个通道被分配相同数量的存储器,并且通道的特定参数总是被存储在该存储器内的相同位置中)允许容易地检索与特定通道相关的参数及其特定参数。此外,由于预期可配置池化处理单元500将最有可能用于处理与3×3滤波器的深度方向卷积,因此以这种方式存储参数对于最有可能的使用情况优化了参数存储单元1614的使用。对于本领域的技术人员将显而易见的是,这仅是示例,并且深度方向卷积的参数可以以任何合适的方式存储在参数存储单元1614中。例如,以相对于图19描述的方式存储参数对于1×1深度方向卷积可能是低效的,因此另一种格式可以用于1×1深度方向卷积。
在上述示例中,当权重是仿射定点数格式时,深度方向卷积的参数可以包括每个滤波器的权重零点,在硬件中使用该滤波器执行卷积运算之前,从该滤波器的每个权重中移除该权重零点。然而,在其他示例中,当权重是仿射定点数格式时,在存储器控制器1606从外部存储器检索权重之前,可以从权重中移除权重零点。因此,在这些示例中,通道的参数可能不包括权重零点。这可以增加每个权重的位宽(例如,每个权重可以从8位增加到9位),但是节省了必须在硬件中执行从每个权重中减去零点的时间和资源。相反,分别提供权重和零点可以允许权重更小(就位数而言),当权重最初是8位时,这允许各个参数(以及每个通道的参数)在参数存储单元1614中字节对准。
返回到图16,如上所述,参数存储单元1614被配置为,当可配置池化处理单元500被配置为对输入张量执行深度方向卷积时,在其存储器中存储深度方向卷积的参数,并在适当的时间向池引擎502提供适当的参数。例如,参数存储单元1614可以被配置为当第一池引擎和第二池引擎502被配置为分别对第一通道和第二通道执行卷积时,向第一池引擎502提供第一通道(例如,通道0)的参数,向第二池引擎502提供第二通道(例如,通道1)的参数。传送到池引擎502以开始处理一组通道的数据的量取决于可以同时处理的通道的数量和每个通道的参数大小。例如,在存在十六个池引擎502以使得可以同时处理十六个通道,并且每个通道的参数可以是14字节(如图19所示)的情况下,那么为了开始处理一组十六个通道,从参数存储单元1614向池引擎502传送224字节的参数数据。如下面更详细描述的,参数存储单元1614可以被配置为从配置控制器1608接收控制信息,该控制信息告诉参数存储单元哪些参数应该在何时被提供给哪些池引擎。
如上所述,在一些情况下,存储器控制器1606可以被配置为预获取深度方向卷积的参数。在此类情况下,为了允许存储器控制器1606更快地开始预获取下一个深度方向卷积的参数,参数存储单元1614可以被配置为当一组参数不再被需要并且因此可从参数存储单元中移除或驱逐时通知存储器控制器1606。在池引擎502被配置为在逐行基础上处理通道的情况下,参数存储单元1614可以被配置为在通道的最后一行已经被池引擎502处理之后通知存储器控制器1606不再需要该通道的参数。
可配置池化处理单元500可以包括输出控制器1610,该输出控制器被配置为接收由池引擎502生成的输出张素,并且以期望的顺序将它们传输到外部部件。例如,在一些情况下,输出控制器1610可以被配置为根据后端处理顺序输出输出张量,该后端处理顺序类似于所描述的部分后端处理顺序,因为张素以块传输,其中每个块包括相同行和列以及不同通道/平面中的张素,并且块以行、通道/平面和张素顺序传输,除了在移动到下一组通道/平面之前传输一组通道/平面的张素的整行之外。在一些情况下,当读控制器1604被配置为使得池引擎502一次生成一组通道的输出的整行时,可以根据后端处理顺序输出输出张量。在其他情况下,输出控制器1610可以被配置为根据上面相对于图18描述的前端处理顺序输出输出张量。在一些情况下,当读控制器1604被配置为使得池引擎502在移动到下一组通道之前每次仅生成一组通道的输出的部分行时,可以根据前端处理顺序输出输出张量。在这些情况下,输出控制器1610可包括或访问转置缓冲区,该转置缓冲区被配置为将从池引擎接收的输出转换成前端处理顺序。例如,转置缓冲区可以接收用于OUTPUT_PARALLELISM个输出的NUM_PLANES个通道的一个宽度位置的块,并且转置和输出一个通道的具有OUTPUT_PARALLELISM个宽度位置的块。
可配置池化处理单元500还可以包括配置控制器1608,该配置控制器被配置为接收指示将如何处理所接收的输入张量的控制信息,并且控制部件(例如,写控制器1602、读控制器1604、参数存储单元1614、输出控制器1610和池引擎502)以所指示的方式处理所接收的输入张量。具体地,控制信息可以指示要对所接收的输入张量执行哪个运算,例如,深度方向卷积运算或者一个或多个池化运算中的一个池化运算(例如,平均池化运算、最小池化运算或最大池化运算)。控制信息还可以指定关于输入张量的信息,诸如但不限于其张素的维度和/或格式;并且/或者对于深度方向卷积运算指定关于权重、偏差等的信息。基于所接收的配置信息,配置控制器1608被配置为向可配置池化处理单元的其他部件(写控制器1602、读控制器1604、参数存储单元1614、输出控制器1610和池引擎502)发送控制信息,以根据所接收的控制信息来控制这些部件的操作。
例如,在所接收的控制信息指示可配置池化处理单元将执行深度方向卷积运算的情况下,配置控制器1608可以(i)向参数存储单元发送控制信息,该控制信息指示哪些参数将被发送到哪些池引擎502,(ii)向读控制器1604发送控制信息,该控制信息指示存储在外部缓冲区1612中的哪些张素将被提供给哪些池引擎502,并且(iii)向池引擎502发送控制信息,该控制信息指示其竖直池引擎将被配置为生成加权和列输出,并且其水平池引擎将被配置为生成加权和块输出。
神经网络加速器
如上所述,可配置池化处理单元500可以在神经网络加速器(NNA)中使用,以对张量执行池化运算和深度方向卷积运算。神经网络加速器可以具有固定的流水线结构或可配置的流水线结构。如本文所述,具有带有卷积处理单元和可配置池化处理单元两者的NNA(其可以执行深度方向卷积运算或池化运算)可以显著提高处理一些NN的效率,因为它可以通过增加每次硬件传递过程可以执行的运算的数量来减少处理这些NN所需的硬件传递过程的数量。如上所述,每个硬件传递过程都涉及从存储器读取数据,并且可以包括向存储器写入数据。从存储器读取和写入数据会消耗大量的功率和处理周期,并且可能会在开始执行硬件传递过程时引入延迟。因此,减少实施NN的硬件传递过程的数目增加了NNA在实施NN时的功率效率。此外,当在硬件传递过程中执行一组运算时,所述一组中的后续运算可以在所述一组中的较早运算完成之前开始,这加速了那些运算的执行。因此,增加可以在同一硬件传递过程中执行的运算的数量可以减少执行这些运算的时间。
现在参考图20,其示出了具有硬件处理单元的可配置流水线的示例性NNA2000。NNA2000包括多个硬件处理单元2002、2004、2006、2008、2012、2014、2016(包括本文描述的可配置池化处理单元500);以及交叉开关(“Xbar”)2020,其耦合到硬件处理单元并且可以选择性地由硬件处理单元形成多个流水线中的一个流水线。本文使用短语“由硬件处理单元形成流水线”来表示连接一组硬件处理单元的输入和输出,使得一个硬件处理单元的输出成为另一个硬件处理单元的输入。
每个硬件处理单元2002、2004、2006、2008、2012、2014、2016、500包括被配置为加速对输入数据执行一个或多个神经网络运算的硬件。具体地,每个硬件处理单元2002、2004、2006、2008、2012、2014、2016、500包括被配置为接收输入张量的输入端口、对输入张量执行一个或多个运算的硬件逻辑,以及被配置为输出处理结果的输出端口,该处理结果可以被称为输出张量。如下文更详细描述的,一个或多个硬件处理单元还可以包括一个或多个附加端口,以接收用于处理输入张量的辅助数据,和/或从缓冲区写入和/或读取数据。
图20的NNA2000包括以下硬件处理单元:卷积处理单元2002,该卷积处理单元被配置为对所接收的输入张量执行卷积运算;激活处理单元2004,该激活处理单元被配置为对所接收的输入张量执行非线性运算;逐元素运算处理单元2006,该逐元素运算处理单元被配置为对所接收的输入张量执行逐元素运算;归一化处理单元2008,该归一化处理单元被配置为对所接收的输入张量执行归一化运算;本文所述的可配置池化处理单元500,该可配置池化处理单元被配置为对所接收的输入张量执行池化运算或深度方向卷积运算;交错处理单元2012,该交错处理单元被配置为对所接收的输入张量执行交错或重排;以及张素重缩放处理单元2014、2016,该张素重缩放处理单元被配置为缩放或重缩放输入张量。这些硬件处理单元中的每一个硬件处理单元将在下面更详细地描述。对于本领域技术人员将显而易见的是,这只是一组示例性硬件处理单元,并且其他NNA可以具有额外的硬件处理单元、更少的硬件处理单元和/或不同的硬件处理单元。
图20的NNA2000被配置为在NNA2000的一个或多个硬件传递过程中处理NN。在NNA2000的硬件传递过程中,NNA2000将输入数据加载到NNA中(例如,从外部存储器),并且经由由一个或多个硬件处理单元2002、2004、2006、2008、2012、2014、2016、500形成的流水线来处理所述输入数据,以生成处理后的数据。在大多数硬件传递过程中,处理后的数据然后经由输出单元2018从NNA输出(例如输出到外部存储器)。然而,在一些情况下,处理后的数据可能会保留在NNA中,以供后续的硬件传递过程使用。例如,如下面更详细描述的,可能需要卷积处理单元2002的若干遍次才能生成卷积层输出。因此,在一些情况下,卷积处理单元2002可以在一个硬件传递过程中执行部分卷积处理,并将该部分处理的结果存储在卷积处理单元2002(例如,其累积缓冲区)中;然后在一个或多个后续硬件传递过程中执行更多的部分卷积处理,然后组合在硬件传递过程中生成的部分结果以生成最终的卷积输出。由于NNA的内部存储限制(例如,输入缓冲区2024可能不够大以存储整个输入张量和/或系数缓冲区2022可能不够大以存储整个权重张量)和/或NNA的处理限制,卷积层可以在若干硬件传递过程上实现。
术语“到NNA的输入数据”在本文用于表示针对硬件传递过程被加载到NNA中的输入数据,并且可以替代地被称为“用于硬件传递过程的输入数据”。(i)如果所述硬件处理单元是所述硬件传递过程的流水线中的第一个硬件处理单元,则硬件处理单元的输入数据可以是用于所述硬件传递过程的输入数据,或者(ii)如果所述硬件处理单元不是所述硬件传递过程的流水线中的第一个硬件处理单元,则硬件处理单元的输入数据可以是由另一硬件处理单元生成的输出数据。
用于硬件传递过程的输入数据经由数据输入单元2024、2026加载到NNA中。NNA可以包括单个数据输入单元2024或多于一个数据输入单元2024、2026。如图20所示,数据输入单元2024中的一个数据输入单元可以是输入缓冲区2024的形式,所述输入缓冲区可以被配置为存储用于硬件传递过程的输入数据。输入缓冲区2024可以被称为主数据输入单元。输入缓冲区2024可以耦合到卷积处理单元2002和交叉开关2020,这允许输入缓冲区2024向卷积处理单元2002或交叉开关2020提供接收到的输入数据。尽管输入缓冲区2024在图20中被示为单个输入缓冲区,但是输入缓冲区可以由多个存储体形成。在一些情况下,在硬件传递过程中可能只可能使用输入缓冲区2024一次,因此输入缓冲区2024可能能够在硬件传递过程中向卷积处理单元2002或交叉开关2020提供输入数据,但不能两者都提供。
图20的NNA2000包括第二、辅助或备选数据输入单元2026,通过该数据输入单元,用于硬件传递过程的输入数据可以被加载到NNA中,这可以比主数据输入单元(例如,输入缓冲区2024)更简单并且使用更少的能量。例如,如下文更详细描述的,逐元素运算处理单元2006能够使用加载到NNA中的一组辅助输入数据对接收到的输入数据执行逐元素运算。因此,可以存在辅助数据输入单元2026,其被配置为将辅助数据输入加载到NNA中,所述NNA被提供给逐元素运算处理单元2006(例如,其第二数据接收器(Rx))。通过将辅助数据输入单元2026耦合到交叉开关2020,辅助数据输入单元2026可以提供备选路径来将用于硬件传递过程的输入数据加载到NNA2000中。
为了允许辅助数据输入单元2026比输入缓冲区2024更简单和更节能,辅助数据输入单元2026可以不具有输入缓冲区2024的所有特征。例如,虽然NNA可以被配置为执行定点数格式运算,但是输入缓冲区2024可能能够接收浮点数格式的输入数据并将其转换为定点数格式,而辅助数据输入单元2026可能仅能够接收定点数格式的输入数据。此外,在一些情况下,输入缓冲区2024可能能够接收多种不同格式的输入数据,而辅助数据输入单元可能仅能够接收这些格式的子集的输入数据。这可能是因为,例如,辅助数据输入单元2026可能具有比输入缓冲区2024更少的可用内存或存储空间。
因此,在用于硬件传递过程的输入数据将不首先由卷积处理单元2002处理的情况下(并且它满足使用辅助数据输入单元2026的任何其他要求),经由辅助数据输入单元2026将用于硬件传递过程的输入数据加载到NNA中可能比经由输入缓冲区2024更节能。在一些情况下,可能仅可能在硬件传递过程中使用辅助数据输入单元2026一次,因此辅助数据输入单元2026可用于向逐元素运算处理单元2006提供辅助输入数据或提供用于硬件传递过程的输入数据,但不能两者都提供。在这些情况下,如果辅助数据输入单元2026用于提供用于硬件传递过程的输入数据,则逐元素运算处理单元2006不能在所述硬件传递过程中对辅助输入数据执行逐元素运算。然而,逐元素运算处理单元2006仍可用于在所述硬件传递过程中执行逐元素运算,而无需辅助输入数据。
在图20所示的示例中,逐元素运算处理单元2006的辅助数据接收器(Rx)被耦合或连接到交叉开关2020。这允许逐元素运算处理单元2006的辅助数据接收器(Rx)经由交叉开关2020从辅助数据输入单元2026或另一个单元接收辅助输入数据。然而,在一些情况下,逐元素运算处理单元2006的辅助数据接收器(Rx)可能只能从辅助数据输入单元2026接收辅助输入数据。在这些情况下,交叉开关2020可以通过移除逐元素运算处理单元2006的辅助数据接收器(Rx)与交叉开关之间的连接并将辅助数据接收器(Rx)直接连接到辅助数据输入单元2026来简化。在这种情况下,辅助数据输入单元可以包括逻辑(例如,解复用器),所述逻辑被配置为在每个硬件传递过程接收信息,所述信息指示所述逻辑在所述硬件传递过程中是否是活动的,并且如果是,则指示接收到的数据是将被提供给交叉开关2020还是提供给辅助数据接收器(Rx),并将接收到的数据引导到适当的设备。这允许由辅助数据输入单元接收到的数据被用于经由交叉开关2020提供用于硬件传递过程的输入数据,或者将辅助数据直接提供给逐元素运算处理单元2006的辅助数据接收器(Rx)(而不必通过交叉开关2020)。
在一些情况下,NNA2000可以包括被配置为在NNA2000与外部存储器(未示出)之间提供接口的存储器接口(未示出)。在这些情况下,存储器接口可以被配置为从外部存储器接收用于NNA的输入数据,并将其提供给输入缓冲区2024和/或辅助数据输入单元2026。
NNA在每个硬件传递过程接收控制信息(该控制信息也可以被称为命令信息或配置信息),该控制信息标识在硬件传递过程中活动的NNA的部件,以及活动部件在硬件传递过程中使用的顺序。控制信息还可以指定用于硬件传递过程的任何单独的部件配置。例如,如下面更详细描述的,由激活处理单元2004、逐元素运算处理单元2006、归一化处理单元2008和可配置池化处理单元500中的一者或多者实现的函数和/或运算可以在每个硬件传递过程的基础上进行配置。在这些情况下,控制信息可以包括标识将由硬件传递过程中的一个或多个处理单元实施的函数和/或运算的信息。
在NNA2000包括存储器接口(未示出)的情况下,可以经由存储器接口接收控制信息。在一些情况下,NNA2000可以包括命令解码器(未示出),该命令解码器被配置为接收控制信息,解码所接收的控制信息,并且将信息发送到NNA2000的部件,该信息指示这些部件在硬件传递过程中是否是活动的,并且如果是,则这些部件将如何针对硬件传递过程配置自身。在其他情况下,NNA中的每个部件可以在每个硬件传递过程直接接收控制信息,所述控制信息指示所述部件在所述硬件传递过程中是否是活动的,并且如果是,则所述部件将如何针对硬件传递过程配置自身。无论哪种方式,NNA中的每个部件都在每个硬件传递过程内接收控制信息,该控制信息指示该部件在硬件传递过程中是否是活动的,并且如果是,则该部件将如何被配置。指示交叉开关2020将如何被配置用于硬件传递过程的信息可以包括标识将由NNA的单元形成的多个流水线中的流水线的信息。
具体地,每个硬件传递过程,交叉开关2020从控制信息中确定其在当前硬件传递过程中是否是活动的。如果交叉开关2020确定其在当前硬件传递过程中是活动的,则交叉开关2020动态地配置自身以形成由该硬件传递过程的控制信息标识的多个流水线中的流水线。在一些情况下,如果例如在硬件传递过程中只有一个硬件处理单元(例如卷积处理单元2002)是活动的,并且硬件传递过程的结果存储在内部(例如在NNA内)或者经由备选(例如旁路)路径被传递到输出单元2018,则交叉开关2020在硬件传递过程中可能不是活动的。例如,在一些情况下,在卷积处理单元2002与输出单元2018之间可能存在另选或旁路路径(未示出),该路径允许卷积处理单元2002的输出被直接发送到输出单元2018(例如,不穿过交叉开关2020)。
交叉开关2020包括多个输入端口(在图20中由指向交叉开关2020的箭头示出)、多个输出端口(在图20中由从交叉开关2020指向外的箭头示出)和路由逻辑(例如多路复用器(未示出)),所述路由逻辑允许交叉开关2020选择性地将交叉开关2020的输入端口连接到交叉开关2020的输出端口。在图20的示例中,交叉开关2020的每个输入端口可以耦合或连接到硬件处理单元或数据输入单元的输出端口,并且交叉开关2020的每个输出端口可以耦合或连接到硬件处理单元或数据输入单元的输入端口。下面参考图21描述交叉开关2020的示例性实施方式。
在一些情况下,交叉开关2020可能能够从NNA的单元(例如,硬件处理单元和数据输入单元)形成任何可能的流水线。换句话说,在一些情况下,交叉开关2020可能能够以任何可能的方式连接硬件处理单元和数据输入单元(例如,单元的任何输出端口可以连接到单元的任何输入端口)。然而,在其他情况下,对于NNA的哪些单元可以相互连接,可能存在一个或多个限制,这可能会限制可以由交叉开关2020形成的不同流水线的数量。例如,在一些情况下,NNA2000的任何单元(例如,硬件处理单元、数据输入单元)在硬件传递过程期间只能使用一次。在这些情况下,可能不允许创建一个单元的输出端口连接到同一单元的输入端口的流水线。例如,可能不允许创建其中激活处理单元的输出端口耦合到激活处理单元的输入端口的流水线。在其他情况下,可能会有其他限制。例如,在一些情况下,第一单元可以为第二单元格式化数据,使得要由第二单元处理的数据必须首先被发送到第一单元。例如,在图20的示例中,归一化处理单元2008可被配置为将输入数据格式化到可配置池化处理单元500(例如,归一化处理单元可以将数据置于部分后端处理顺序),因此可配置池化处理单元500可以被配置为经由归一化处理单元2008接收用于硬件传递过程的输入数据。类似地,在图20的示例中,在许多情况下,交错处理单元2012可以为输出单元2018重新格式化数据,因此输出单元2018可以被配置为经由交错处理单元2012接收任何输入数据。可能存在到输出单元2018的输入数据可能不需要被重新格式化的一些情况,在这些情况下,交错处理单元2012可以被旁路。对于本领域的技术人员将显而易见的是,这些是示例性限制。
在一些情况下,标识要由交叉开关2020在硬件传递过程中实施的多个流水线中的流水线的控制信息可以明确地标识交叉开关2020的哪些输入端口要连接到交叉开关2020的哪些输出端口。在一些情况下,交叉开关2020可以包括用于每个输出端口的寄存器,并且寄存器的值指示要连接到所述输出端口的输入端口。例如,可以对输入端口进行编号,并且可以通过控制信息将输出端口的寄存器设置为相关输入端口的值。例如,如果来自激活处理单元2004的输出将被引导到逐元素运算处理单元2006的输入,并且激活处理单元2004的输出端口被连接或耦合到交叉开关2020的输入端口2,则与连接或耦合到逐元素运算处理单元2006的输入端口的交叉开关2020的输出端口相关联的寄存器可以被设置为2。
如上所述,可以使用软件工具(例如在图24的基于计算的设备2400上运行)来识别NNA处理NN的硬件传递过程,例如,软件工具可以确定硬件传递过程的数量、在每个硬件传递过程中活动的部件以及每个硬件传递过程的交叉开关的配置(例如,每个硬件传递过程中的活动部件处理数据的顺序)。在一些情况下,这样的软件工具可以确定只有当处理单元的输出是硬件传递过程中的另一个处理单元的输入,交叉开关在交叉开关2020的相关端口之间创建连接时,用于硬件传递过程的交叉开关2020的配置才是有效的。例如,如果硬件传递过程中的处理单元的顺序使得卷积处理单元2002的输出将作为输入被提供给激活处理单元2004,则只有当交叉开关2020的对应于卷积处理单元2002的输出的端口被连接或耦合到交叉开关2020的对应于激活处理单元2004的输入的端口时,交叉开关2020的配置才可以被确定为有效。在一些情况下,当卷积处理单元2002的输出作为输入被提供给输出单元时,即使交叉开关2020的对应于卷积处理单元2002和输出单元2018的端口没有被连接,交叉开关2020的配置仍然有效,因为如上所述,在卷积处理单元2002与输出单元2018之间可能存在单独的路径。
在其他情况下,标识要由交叉开关2020实现的多个流水线中的流水线的控制信息可以简单地标识在硬件传递过程中活动的单元(例如,硬件处理单元、数据输入单元)和其顺序,并且交叉开关2020可以被配置为动态地确定交叉开关2020的哪些输入端口要连接到交叉开关2020的哪些输出端口,以实施由所标识的硬件处理单元和所标识的顺序定义的硬件流水线。
在一些情况下,交叉开关2020的每个输入端口和每个输出端口可以具有多个数据通道。数据通道的数目定义了可以在同一周期内在输入端口上接收或可以在同一周期内在输出端口上传输的数据值的数目。例如,如果一个输入端口有十六个数据通道,则每个周期可以在所述端口上接收16个数据值。在一些情况下,交叉开关2020的每个输入端口和每个输出端口可以包括相同数目的数据通道(可以称为XBAR_PARALLELISM)。如下面更详细描述的,卷积处理单元2002可以包括多个卷积引擎,每个卷积引擎被配置为对一组输入数据值和一组权重执行乘积累加计算。在一些情况下,每个输入/输出端口的通道的数目等于卷积引擎的数目。例如,在一些情况下,卷积处理单元2002可以包括28个卷积引擎,并且交叉开关2020的每个输入和输出端口可以包括28个数据通道。在其他情况下,每个输入/输出端口的数据通道的数目可能少于卷积引擎的数目。在又其他情况下,每个输入/输出端口的数据通道的数目可能大于卷积引擎的数目。使每个输入/输出端口的数据通道的数目大于卷积引擎的数目可以允许数据在一些处理单元之间更快地传输,特别是那些包括或者可以访问存储模块的处理单元(例如,可以访问共享缓冲区的可配置池化处理单元500)。例如,这种配置可以允许数据更快地加载到共享缓冲区中。
端口的每个数据通道可以具有相同的位宽。例如,输入端口或输出端口的所有数据通道都可以是32位宽,即所述输入端口或输出端口的每个数据通道都可以能够接收/输出32位数据元素。在一些情况下,当接收/输出数据元素的位宽小于或等于数据通道位宽的一半时,每个数据通道可以接收多个数据元素。换句话说,在这些情况下,可以将多个数据元素打包到单个数据通道中。例如,如果数据通道是32位宽,并且每个数据元素是16个位,那么可以在该数据通道上一次接收/输出两个16位数据元素。
在一些情况下,交叉开关2020的所有输入端口和输出端口具有相同的数据通道位宽(例如,32位)。然而,在其他示例中,交叉开关2020的输入端口和/或输出端口中的一个或多个输入端口和/或输出端口可以具有不同的通道位宽。例如,一些部件(例如,硬件处理单元、数据输入单元)可能能够产生/接收高达第一位宽(例如,32位)的数据,而其他部件可能能够产生/接收仅高达较低第二位宽(例如,16位)的数据。在这些情况下,输入端口和/或输出端口的子集可以具有第一较高位宽(例如32位)的数据通道(即耦合或连接到产生/接收高达第一位宽的数据的硬件处理单元的数据通道),并且输入端口和/或输出端口的另一子集可以具有第二较低位宽(例如16位)的数据通道。减少交叉开关2020的一个或多个输入端口和/或一个或多个输出端口的数据通道的位宽可以降低交叉开关2020的复杂性,并减少部件之间的连接数目。
在交叉开关2020具有不同位宽的输入和/或输出端口的情况下,为了允许交叉开关2020的较高位宽输入端口耦合到交叉开关2020的较低位宽输出端口,交叉开关2020可以被配置为当较高位宽输入端口耦合或连接到交叉开关2020的较低位宽输出端口时动态地执行位宽转换。例如,在一些情况下,任何较高位宽输入端口可以耦合到可以选择性地将接收到的数据元素的位宽减小到较低位宽的逻辑(例如,箝位电路)。所述逻辑可以被配置为丢弃较高位宽数据元素的最高有效位。所述逻辑(例如箝位电路)可以被配置为使得低于较低位宽中的最小值的任何较高位宽值被解析为新的最小值,并且高于较低位宽中的最大值的任何较高位宽值被解析为新的最大值。
类似地,为了允许交叉开关2020的较低位宽输入端口耦合到交叉开关2020的较高位宽输出端口,交叉开关2020可以被配置为当交叉开关2020的较低位宽输入端口耦合或连接到较高位宽输出端口时动态地执行位宽转换。例如,在一些情况下,任何较低位宽输入端口可以耦合到能够选择性地将接收到的数据元素的位宽扩展到较高位宽的逻辑。在输入数据元素被带符号的情况下,所述逻辑可以被配置为对数据元素的最高有效位(MSB)进行符号扩展。
如上所述,在硬件传递过程中活动的NNA的每个单元(例如,处理单元或数据输入单元)接收输入张量并产生输出张量。在多个单元在硬件传递过程中是活动的情况下,NNA的一个单元的输出张量可以经由交叉开关2020传递到NNA的另一个单元。由于NNA的一个单元通常不能一次发送完整的输出张量,所以可以有一个预定的顺序,本文可以称为处理顺序,其中张量的元素从单元输出。在一些情况下,可能有多个处理顺序被NNA的单元使用。不同的处理顺序可以为某些运算提供优势。
在有多个处理顺序的情况下,NNA的单元中的一些单元(例如,处理单元和数据输入单元)可以仅支持一个处理顺序,而NNA的单元中的一些单元(例如,处理单元和数据输入单元)可以支持多个处理顺序。在NNA的不同单元可以使用不同的处理顺序的情况下,用于硬件传递过程的控制信息可以包括标识每个活动单元将使用哪个处理顺序的信息,使得活动单元可以根据正确的处理顺序来配置自身以传输/接收数据。
现在将描述图20的示例性硬件处理单元中的每一个硬件处理单元。卷积处理单元2002是硬件,该硬件被配置为接收输入张量和一组权重,并在输入张量和权重之间执行卷积运算,并输出卷积运算的结果。卷积处理单元2002可以具有一个或多个卷积引擎,该一个或多个卷积引擎被配置为在一组输入数据值(例如,输入张素)与一组权重之间执行乘积累加运算。要由卷积处理单元2002在硬件传递过程中使用的权重可以存储在系数缓冲区2022中。在一些情况下,由卷积处理单元2002在硬件传递过程中处理的输入张量可以存储在输入缓冲区2024中。下面参考图22描述卷积处理单元2002的示例性实施方式。
激活处理单元2004是被配置为接收输入数据(例如,输入张量)并对其应用非线性函数(也可称为激活函数)的硬件。例如,可以由激活处理单元2004实施(或近似)的非线性函数包括但不限于Tanh函数、sigmoid函数、整流线性单元(ReLU)函数或渗漏ReLU(LReLU)函数。在ReLU函数中,输出元素yi,j,k通过标识等式(3)中列出的最大值来计算,其中对于小于0的x值,y=0。LReLU函数在输入大于零时输出所述输入,并且在输入为负时输出所述输入的一部分(例如,0.01x)。LReLU函数的示例性实施方式在等式(4)中列出。
yi,j,k=f(xi,j,k)=max{0,xi,j,k}(3)
yi,j,k=f(xi,j,k)=max{0.01*xi,j,k,xi,j,k} (4)
在一些情况下,由激活处理单元2004在硬件传递过程中执行的激活函数可以是可配置的。例如,在一些情况下,激活处理单元2004可以接收用于硬件传递过程的信息,所述信息标识要应用于所述硬件传递过程中的输入数据的多个激活函数中的一个激活函数。
在一些情况下,激活处理单元2004可以被配置为在查找表的条目中存储表示要在硬件传递过程中实施的激活函数的数据。在这些情况下,激活处理单元2004可以被配置为使用输入数据在查找表中查找一个或多个条目,并且从查找表中的一个或多个条目和/或输入数据生成激活函数的输出。例如,激活处理单元2004可以被配置为通过在从查找表读取的两个或更多个条目之间进行插值来计算激活函数的输出。在申请人的GB专利第2552242号中描述了激活处理单元2004的示例性实施方式,所述专利的全部内容通过引用并入本文。
逐元素运算处理单元2006是硬件,所述硬件被配置为接收输入数据(例如,输入张量)并对输入数据(例如,输入张量)执行逐元素运算,可选地使用另一数据集(例如,另一张量),所述数据集可以经由辅助数据输入单元2026从外部存储器获得或检索。逐元素运算是对输入数据/张量的每个元素(例如,每个输入数据值或每个张素)执行的相同运算。可以对输入数据执行的逐元素运算包括但不限于加法、乘法、最大值和最小值。
另一数据集/张量可以与输入数据/张量具有相同的大小(例如,具有相同的维数),使得使用逐元素运算来组合两个张量的对应元素。或者,另一数据集/张量和输入数据/张量可以具有不同的大小或维度。例如,如果张量中的一个张量的失配维数具有大小1,则可以使用广播技术在输入数据/张量与另一数据集/张量之间执行逐元素运算,其中较小的张量被广播(或扩展)到另一张量的大小。例如,通过扩展第一张量的W维度,大小为[N,H,W,C]=[1,10,1,10]的张量可以与大小为[N,H,W,C]=[1,10,10,10]的张量进行逐元素组合。
归一化处理单元2008是被配置为接收输入数据(例如,输入张量)并将归一化函数应用于所接收的输入数据以产生归一化数据的硬件。可以由归一化处理单元2008实施的示例性归一化函数包括但不限于局部响应归一化(LRN)函数和局部对比度归一化(LCN)函数。在一些情况下,应用于输入数据的归一化函数可能是可配置的。例如,归一化处理单元2008可以接收用于硬件传递过程的信息,所述信息指示多个归一化函数中的哪一个归一化函数将被应用于所述硬件传递过程中的输入数据。这允许在不同的硬件传递过程中应用不同的归一化函数。申请人的GB专利第2552242号中描述了归一化处理单元2008的示例性实施方式,所述专利的全部内容通过引用并入本文。
如上所述,可配置池化处理单元500可以在每个硬件传递过程的基础上被配置为对所接收的输入张量执行深度方向卷积运算或一个或多个池化运算中的一个池化运算。
在一些情况下,可配置池化处理单元500可被配置为接收特定格式的输入数据(例如,以上面相对于图17描述的部分后端处理顺序),该特定格式可以由归一化处理单元2008生成。在此类情况下,如图20所示,可配置池化处理单元500的输入端口可以耦合或连接到归一化处理单元2008的输出端口,以便仅从归一化处理单元2008接收输入数据。在这些情况下,为了允许归一化处理单元2008而不是可配置池化处理单元500处理用于硬件传递过程的输入数据,可配置池化处理单元500可以包括允许可配置池化处理单元500输出从归一化处理单元2008接收到的数据或者由可配置池化处理单元500生成的数据的逻辑(例如,多路复用器(未示出))。然后,可配置池化处理单元500可以在每个硬件传递过程接收指示可配置池化处理单元500是否活动的信息,并且如果是,则标识哪个输出将被提供给交叉开关2020。然而,对于本领域技术人员将显而易见的是,这只是一个示例,并且在其他示例中,可配置池化处理单元500的输入端口可以直接耦合或连接到交叉开关2020,以允许可配置池化处理单元500从NNA2000的其他单元接收输入数据。
交错处理单元2012是被配置为接收输入数据(例如,输入张量)并执行重排运算以产生特定顺序的数据的硬件。重排可以包括对接收到的输入数据进行排序和/或转置。
如图20所示,可配置池化处理单元500和交错处理单元2012可以各自访问共享缓冲区1612,这些单元可以使用所述共享缓冲区来写入数据和从中检索数据。例如,如上所述,可配置池化处理单元500可以将所接收的输入张素存储在共享缓冲区1612中,直到所接收的张素已经被可配置池化处理单元500处理。交错处理单元2012可以使用共享缓冲区1612来重新排所接收的数据或所生成的数据的顺序。例如,交错处理单元2012可被配置为将数据写入共享缓冲区1612,并且然后以不同的顺序读取相同的数据。在一些情况下,可以为每个单元分配共享缓冲区1612的一部分,只有所述单元可以访问所述部分。在这些情况下,可配置池化处理单元500和交错处理单元2012可能只能从它们已经写入的共享缓冲区1612中读出数据。
张素重缩放处理单元2014、2016是被配置为对接收到的输入数据执行重缩放运算的硬件。如本领域的技术人员所知,对于处理一组值的硬件,每个值以数字格式表示。两种常见的数字格式是定点数格式和浮点数格式。如本领域的技术人员所知,定点数格式在基数点(例如,小数点或二进制点)之后具有固定数目的数位。相反,浮点数格式没有固定的基数点(即,可以“浮动”)。换句话说,基数点可被放置在表示中的多个位置。虽然以浮点数格式表示NN的网络参数(例如,输入数据值(即,输入张素)、权重、偏差)可以允许产生更准确或更精确的输出数据,但是以浮点数格式在硬件中处理网络参数是复杂的,与以其他格式(例如,定点数格式)处理网络参数的硬件相比,这往往会增加硅面积、功耗、内存和带宽消耗以及硬件的复杂性。因此,NNA2000可以被配置为以定点数格式表示和处理NN的网络参数,以减少NNA的面积、功耗、内存和带宽消耗以及复杂性。
NNA2000可以支持网络参数(例如,输入数据值(即,输入张素)、权重、偏差)的一种或多种定点数格式,并且定点数格式可以在层的基础上或者甚至在部分层的基础上进行配置。例如,NNA 2000可以支持由固定整数指数exp和b位尾数m定义的定点数格式,使得值u等于u=2expm。在一些情况下,尾数m可以二进制补码格式表示。然而,在其他情况下,可以使用其他经签名或未签名的整数格式。当使用这样的定点数格式时,指数exp和尾数位数b只需为以该数字格式表示的一组值存储一次。不同的网络参数集可以使用不同的尾数位长度m和/或不同的指数b来表示。
NNA2000可另选地或附加地支持仿射定点数格式,如上所述,该仿射定点数格式是定义偏移和缩放的定点数格式。如上所述,在硬件处理单元(例如,可配置池化处理单元500)的输入数据是仿射定点数格式的情况下,对于硬件来说,以使得输出数据不准确反映缩放和/或偏移量的方式来执行处理可能更具硬件效率。一般来说,以这种方式执行可能涉及缩放变化的运算可能是有效的。这种运算的示例包括但不限于卷积运算、加法运算和乘法运算。相比之下,诸如最大池化或平均池化的运算可能不会以这种方式执行,因为输入和输出缩放是相同的。因此,可以执行卷积运算的卷积处理单元2002、可以执行深度方向卷积运算的可配置池化处理单元500以及可以执行加法和乘法运算的元素方向运算处理单元2006可以被配置为以这种方式运算。在硬件处理单元被配置为以这种方式操作的情况下,硬件处理单元的输出然后可以被重新量化以将其置于正确的格式。
这种重新量化可以由张素重缩放处理单元2014、2016来执行。有许多已知的方法和技术用于将数据重新量化成仿射定点数格式。张素重缩放处理单元2014、2016可以被配置为使用任何已知的方法或技术来执行重新量化。由于多于一个活动硬件处理单元的输出数据可以被重新量化,所以在NNA2000中具有多个张素重缩放处理单元2014、2016允许在单个硬件传递过程中执行更多的运算。
当运算涉及仿射定点数格式的两个或更多个张量时,也可以使用重新量化,例如,当将多个张量连接在一起成为单个张量时,以使它们都具有相同的格式。
在一些情况下,每个张素重缩放处理单元2014、2016可在每个张量的基础上或每个通道的基础上执行此重新量化。如上关于图2所描述,处理单元的输入数据通常是被称为张量的多维数据块。张量的每个平面称为通道,并且张量的每个元素称为张素。张素重缩放处理单元2014、2016能够在每张量的基础上(即所有输入数据值以相同的方式被量化或重新量化)或在每通道的基础上(即输入数据的每个通道可以以不同的方式被量化或重新量化)执行重缩放。在一些情况下,用于硬件传递过程的控制信息可以针对在硬件传递过程中活动的任何张素重缩放处理单元2014、2016指定所述张素重缩放处理单元2014、2016是执行每张量还是每通道重新量化。
张素重缩放处理单元2014、2016是被配置为执行每张量还是每通道重新量化可以取决于生成被发送到张素重缩放处理单元2014、2016的数据的处理模块的输入的格式。例如,如果卷积处理单元2002接收用[scale_input,offset_input]量化的输入数据(例如,输入张量),并且期望用[scale_output,offset_output]量化输出数据,则取决于权重的格式,重新量化过程可以是每个通道或每个张量的。例如,如果所有的权重都用相同的参数[scale_weights,offset_weights]进行量化,则可以在每张量的基础上进行重新量化。然而,如果至少两个滤波器使用不同的参数进行量化,例如第一个滤波器使用参数[scale_weights1,offset_weights1]进行量化,并且第二个滤波器使用参数[scale_weights2,offset_weights2]进行量化,则因为输出数据(例如,输出张量)的每个通道都是输入数据(输入张量)与滤波器卷积的结果,所以可以在每通道的基础上进行重新量化。对不同的滤波器使用不同的量化参数可以允许更好地量化滤波器,因为可以以更精细的粒度来选择滤波器参数。在一些情况下,可以仅对卷积处理单元2002生成的输出执行每通道重新量化。
NNA2000还可以包括输出单元2018,所述输出单元被配置为输出处理后的数据。例如,输出单元2018可以将处理后的数据输出到存储器。在一些情况下,硬件传递过程可以与输出数据格式相关联,并且输出单元2018可以被配置为在输出处理后的数据之前将处理后的数据转换成与硬件传递过程相关联的输出格式。
交叉开关
现在参考图21,示出了图20的交叉开关2020的示例性实施方式。术语“交叉开关”在本文用来表示具有多个输入、多个输出和路由或交换逻辑的硬件块,所述逻辑可以选择性地将某些输入耦合或连接到某些输出。图21的交叉开关2020包括多个输入端口或输入接口(由指向交叉开关2020的箭头标识)、多个输出端口或输出接口(由指向远离交叉开关2020的箭头标识)以及将输入端口连接到输出端口的多个多路复用器2102。
交叉开关2020的输入端口可以耦合到NNA2000的硬件处理单元或数据输入单元的输出端口,并且交叉开关2020的输出端口可以耦合到NNA2000的硬件处理单元或数据输入单元的输入端口。
在图21所示的示例中,每个输出端口有一个多路复用器2102,所述路复用器可以被称为主多路复用器或输出多路复用器2102。每个主多路复用器2102耦合到对应输出端口,并控制哪个输入端口连接或耦合到所述输出端口。因此,每个主多路复用器2102驱动输出端口中的一个输出端口。例如,在图21中,有八个输出端口,因此有八个主多路复用器2102。如本领域技术人员所知,多路复用器(“mux”)是一种硬件设备,它可以在几个输入信号之间进行选择,并将所选择的输入信号转发到输出线路。所述选择由一个或多个选择信号(未示出)驱动。在图21的交叉开关2020中,多路复用器选择信号可以由控制逻辑(未示出)基于在每个硬件传递过程接收到的控制信息(即,标识要实施的硬件处理单元的多个流水线中的流水线的信息)来生成。
每个主多路复用器2102连接到交叉开关2020的一个或多个输入端口。在一些情况下,每个主多路复用器2102可以连接到交叉开关2020的每个输入端口,使得任何输入端口可以连接到任何输出端口。然而,如上关于图20所描述,对于哪些输入端口可以连接或耦合到哪些输出端口可能存在限制。因此,为了简化交叉开关2020,只有输入端口的子集可以连接到一个或多个主多路复用器2102。在一些情况下,每个主多路复用器可以仅连接到可以连接到或耦合到对应输出端口的输入端口。例如,如上所述,在一些情况下,NNA2000的每个单元在硬件传递过程中可能仅被使用一次,因此NNA2000的一个单元的输出端口不能被耦合到同一单元的输入端口,因为这将涉及一个单元在硬件传递过程中的不止一次使用。因此,用于耦合到NNA 2000的单元的输入端口的交叉开关2020的输出端口的主多路复用器2102可以不耦合到交叉开关2020的与所述单元的输出端口耦合的输入端口。例如,控制卷积处理单元2002的输入的多路复用器可能不接收卷积处理单元2002的输出作为输入。
在一些情况下,可以通过具有一个或多个预多路复用器2108来简化交叉开关2020的复杂性,当已知那些输入中的仅一个输入将在硬件传递过程中被传递到输出端口时,所述预多路复用器预多路复用一个或多个输入端口。具体来说,通过预复用多个输入端口,一个或多个主多路复用器可以少一个输入。例如,图20的NNA 2000包括输入缓冲区2024,所述输入缓冲区可以在硬件传递过程中向卷积处理单元提供输入数据,或者向交叉开关2020提供用于硬件传递过程的输入数据,但不能两者都提供。如果输入缓冲区2024向交叉开关2020提供用于硬件传递过程的输入数据,则输入缓冲区2024不能向卷积处理单元2002提供输入数据,因此卷积处理单元2002将不在该硬件传递过程中产生输出数据。然而,如果输入缓冲区2024向卷积处理单元2002提供输入数据,则卷积处理单元2002可以提供输出数据(在一些情况下,它可以存储所生成的数据以用于后续的硬件传递过程)。因此,在硬件传递过程中,卷积处理单元2002和输入缓冲区2024中的仅一者可以向交叉开关2020提供数据。因此,两个输入端口都不需要耦合到主多路复用器2102。
在一些情况下,如图21所示,交叉开关2020可以包括耦合到每个输入端口以缓冲从NNA的其他单元接收到的输入数据的寄存器或一组寄存器2104,和/或耦合到每个输出端口以缓冲发送到NNA的其他单元的数据的寄存器或一组寄存器2106。在这些情况下,其他单元(例如,处理单元和数据输入单元)可以在其输入和输出端口上具有对应的寄存器。在输入端口或输出端口被配置为使用握手信号接收和/或发送数据的情况下,对应的寄存器也可以被配置为存储/缓冲握手信息。
卷积处理单元
现在参考图22,其示出了图20的卷积处理单元2002的示例性实施方式。在这个示例中,卷积处理单元2002包括多个卷积引擎2202、多个累加器2204和累加缓冲区2206。
每个卷积引擎2202包括硬件逻辑,该硬件逻辑被配置为接收表示滤波器的全部或一部分的一组权重{W1,W2…,W8},以及表示输入数据的窗口的全部或一部分的一组输入数据值{X1,X2,…,X8},并对所接收的权重和输入数据值进行乘积累加计算。在一些示例中,如图23所示,每个卷积引擎2202可包括多个乘法器2302,每个乘法器被配置为将权重(Wi)和对应的输入数据值(Xi)相乘以产生乘法输出值。乘法器2302之后是形成加法器树的多个加法器2304,以计算乘积输出的总和。在图23的示例中,卷积引擎2202包括八个乘法器2302,但是在其他示例中,可以存在更多或更少的乘法器。例如,在一些情况下,可能有128个乘法器。通常,如果存在Z个乘法器,加法器树包括Z-1个加法器。图22的示例性卷积处理单元2002包括四个卷积引擎2202,然而,对于本领域技术人员来说显而易见的是,这只是一个示例并且可以只有一个卷积引擎,可以有两个卷积引擎,或者可以有两个以上的卷积引擎。
由于卷积引擎2202可能要经过一个以上的硬件传递过程来生成完整的滤波器结果(例如,因为卷积引擎可能仅接收和处理滤波器权重的一部分和/或周期中窗口的输入数据值的一部分),所以卷积处理单元2002可以包括多个累加器2204。卷积引擎的传递过程包括接收一组权重和一组输入数据值,并对其执行乘积累加运算。每个累加器2204接收一个卷积引擎2202的输出,并且将输出添加到与相同滤波器相关的先前卷积引擎输出。由于卷积引擎2202可能不在连续的周期中生成或产生与相同滤波器相关的输出,因此一个或多个滤波器的部分结果可被存储在累积缓冲区2206中,然后在每个周期中可由累积缓冲区2206将适当的部分结果提供给累加器2204。
如上所述,在一些情况下,输入缓冲区2024可以被实施为多个存储体。在这些情况下,每个卷积引擎可以存在多路复用器(未示出),该多路复用器耦合到输入缓冲区的每个存储体,以允许存储在任何存储体中的数据被选择性地引导到任何卷积引擎2202。
测试数据
如上所述,具有能够执行包括复杂2D卷积的任何类型的卷积运算的卷积处理单元和能够执行深度方向卷积运算或池化运算的如本文所述的可配置池化处理单元的NNA可以更有效地处理多个NN,因为它可以允许在更少的硬件传递过程上处理一些NN。可以在这样的NNA上更有效地实现的示例性NN是MobileNet NN。这是因为MobileNet NN包括1×1 2D卷积,随后是3×3 2D深度方向卷积的序列。具体地,在Howard等人,“MobileNets:EfficientConvolutional Neural Networks for Mobile Vision Applications”中描述的一个示例性MobileNet NN包括以下序列十七次:(1)2D卷积;(2)ReLU;(3)深度方向卷积;以及(4)ReLU。如果NNA只有一个能够执行卷积运算的处理单元,那么在硬件传递过程中只能执行一次卷积运算,这意味着需要至少34次硬件传递过程来执行这十七个序列。而具有卷积处理单元和可配置池化处理单元的NNA可以在少至十七个硬件传递过程中执行十七个序列。这在存储器读取和写入(因为每次硬件传递过程至少与存储器读取相关联)以及处理时间(因为在硬件传递过程中可以执行的运算越多,可以执行运算的效率就越高)方面产生了显著的节省。
图24示出了示例性的基于计算的设备2400的各种部件,所述基于计算的设备可被实施为任何形式的计算和/或电子设备,并且在所述基于计算的设备中可以实施本文描述的方法的实施方案。
基于计算的设备2400包括一个或多个处理器2402,该处理器可以是微处理器、控制器或任何其他合适类型的处理器,以用于处理计算机可执行指令以实现本文描述的方法。在一些示例中,例如在使用片上系统架构的情况下,处理器2402可以在硬件(而不是软件或固件)中包括一个或多个固定功能块(也被称为加速器),该固定功能块实现该方法的一部分。可以在基于计算的设备上提供包括操作系统2404的平台软件或任何其他合适的平台软件,以使应用软件能够在所述设备上执行。
可以使用可由基于计算的设备2400访问的任何计算机可读介质来提供计算机可执行指令。计算机可读介质可以包括例如计算机存储介质,诸如存储器2406和通信介质。诸如存储器2406的计算机存储介质(即非暂时性机器可读介质)包括以用于存储诸如计算机可读指令、数据结构或程序模块或其他数据的信息的任何方法或技术实施的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于RAM、ROM、EPROM、EEPROM、闪存存储器或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光学存储设备、磁带盒、磁带、磁盘存储或其他磁性存储设备,或可用于存储信息以供计算设备访问的任何其他非传输介质。相反,通信介质可以在调制数据信号例如载波或者其他传输机制中体现计算机可读指令、数据结构、程序模块或其他数据。如本文所定义,计算机存储介质不包括通信介质。尽管在基于计算的设备2400内示出了计算机存储介质(即,非暂时性机器可读介质,例如存储器2406),但是应当理解,存储器可以是分布式的或位于远程的,并且可以经由网络或其他通信链路(例如,使用通信接口2408)来访问。
基于计算的设备2400还包括输入/输出控制器2410,所述输入/输出控制器被布置为将显示信息输出到显示设备2412,所述显示设备可以与基于计算的设备2400分离或成一体。显示信息可以提供图形用户界面。输入/输出控制器2410还被布置为接收和处理来自一个或多个设备(诸如用户输入设备2414(例如,鼠标或键盘))的输入。在一个实施方案中,如果显示设备2412是触敏显示设备,则其也可以充当用户输入设备2414。输入/输出控制器2410还可以将数据输出到除显示设备之外的设备,例如本地连接的打印设备(图24中未示出)。
图25示出了可在其中实现本文描述的可配置池化处理单元和/或神经网络加速器的计算机系统。计算机系统包括CPU 2502、GPU 2504、存储器2506和其他装置2514,诸如显示器2516、扬声器2518和相机2520。在GPU 2504上实现逻辑块2524(其可以是本文描述的可配置池化处理单元500或神经网络加速器2000)。计算机系统的部件可通过通信总线2522彼此通信。在其他示例中,逻辑块2524可在CPU 2502上实现,或者独立地连接到通信总线2522。
图5、图20、图21、图22和图23的可配置池化处理单元500、神经网络加速器2000、交叉开关2020、卷积处理单元2002和卷积引擎2202被示出为包括多个功能块。这仅仅是示意性的,并且不旨在限定这类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当理解,本文描述的由可配置池化处理单元、神经网络加速器、交叉开关、卷积处理单元或卷积引擎形成的中间值不需要由该部件在任何点物理生成,并且可以仅表示方便地描述由该部件在其输入与输出之间执行的处理的逻辑值。
本文描述的可配置池化处理单元、神经网络加速器、交叉开关、卷积处理单元和卷积引擎可以体现在集成电路上的硬件中。本文描述的神经网络加速器可以被配置为执行本文描述的任何方法。一般来说,上文描述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如固定逻辑电路系统)或它们的任何组合中实施。本文中可以使用术语“模块”、“功能性”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或它们的任何组合。在软件实施方式的情况下,模块、功能性、部件、元件、单元、块或逻辑表示程序代码,当在处理器上被执行时,所述程序代码执行指定任务。本文中所描述的算法和方法可由执行代码的一个或多个处理器执行,所述代码促使处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存存储器、硬盘存储器,以及可使用磁性、光学和其他技术来存储指令或其他数据并且可由机器访问的其他存储器设备。
如本文中所使用的术语计算机程序代码和计算机可读指令是指用于处理器的任何种类的可执行代码,包括以机器语言、解译语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用诸如C、Java或OpenCL等编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解译、编译、运行时,这些软件、固件、脚本、模块或库使得支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或它们的具有处理能力以使得其可执行指令的集合或部分。处理器可以是任何种类的通用或专用处理器,诸如CPU、GPU、NNA、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可包括一个或多个处理器。
本发明还旨在涵盖限定如本文中所描述的硬件的配置的软件,诸如HDL(硬件描述语言)软件,如用于设计集成电路或用于配置可编程芯片以执行期望功能。也就是说,可以提供一种在其上编码有呈集成电路定义数据集形式的计算机可读程序代码的计算机可读存储介质,当在集成电路制造系统中处理(即,运行)时,该计算机可读程序代码将系统配置为制造被配置为执行本文描述的方法中的任一种方法的可配置池化处理单元或神经网络加速器,或者制造包括本文描述的任何装置的神经网络加速器。集成电路定义数据集可以是例如集成电路描述。
因此,可以提供一种在集成电路制造系统处制造如本文描述的可配置池化处理单元或神经网络加速器的方法。此外,可以提供一种集成电路定义数据集,当在集成电路制造系统中处理时,该集成电路定义数据集使得执行制造可配置池化处理单元或神经网络加速器的方法。
集成电路定义数据集可呈计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件的硬件描述语言,包括作为寄存器传输级(RTL)代码,作为高级电路表示(诸如Verilog或VHDL),以及作为低级电路表示(诸如OASIS(RTM)和GDSII)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如RTL)可在计算机系统处进行处理,所述计算机系统被配置成用于在软件环境的上下文中产生集成电路的制造定义,所述软件环境包括电路元件的定义以及用于组合这些元件以便产生由所述表示法如此定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为生成集成电路的制造定义,以执行定义集成电路以便生成该集成电路的制造定义的代码。
现在将参考图26描述在集成电路制造系统处对集成电路定义数据集进行处理以便将系统配置成制造可配置池化处理单元或神经网络加速器的示例。
图26示出集成电路(IC)制造系统2602的示例,该IC制造系统被配置为制造如本文的任何示例中描述的可配置池化处理单元或神经网络加速器(或其任何部件或单元)。特别地,IC制造系统2602包括布局处理系统2604和集成电路生成系统2606。IC制造系统2602被配置为接收IC定义数据集(例如,如在本文的任何示例中描述的那样定义可配置池化处理单元或神经网络加速器(或其任何部件或单元)),处理IC定义数据集,并根据IC定义数据集生成IC(例如,该IC体现如在本文的任何示例中描述的可配置池化处理单元或神经网络加速器(或其任何部件或单元))。IC定义数据集的处理将IC制造系统2602配置成制造体现如在本文的任何示例中描述的可配置池化处理单元或神经网络加速器(或其任何部件或单元)的集成电路。
布局处理系统2604被配置为接收和处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定要生成的电路的门级表示,例如就逻辑部件(例如NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统2604已经确定电路布局时,其可将电路布局定义输出到IC生成系统2606。电路布局定义可以是例如电路布局描述。
如所属领域中已知,IC生成系统2606根据电路布局定义来生成IC。举例来讲,IC生成系统2606可实施生成IC的半导体装置制造工艺,其可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可以呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成IC。替代地,提供给IC生成系统2606的电路布局定义可呈计算机可读代码的形式,IC生成系统2606可使用所述计算机可读代码来形成用于生成IC的合适掩码。
由IC制造系统2602执行的不同过程可全部在一个位置例如由一方来实施。替代地,IC制造系统2602可以是分布式系统,使得一些过程可在不同位置执行,并且可由不同方来执行。例如,以下阶段中的一些可以在不同位置和/或由不同方来执行:(i)合成表示IC定义数据集的RTL码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩码;以及(iv)使用掩模来制造集成电路。
在其他示例中,在集成电路制造系统处对集成电路定义数据集的处理可以将系统配置为制造可配置池化处理单元或神经网络加速器(或其任何部件或单元),而无需处理IC定义数据集来确定电路布局。例如,集成电路定义数据集可以定义诸如FPGA的可重新配置的处理器的配置,并且对数据集的处理可将IC制造系统配置为(例如,通过将配置数据加载到FPGA)生成具有该定义的配置的可重新配置的处理器。
在一些实施方案中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文所述的设备。例如,通过集成电路制造定义数据集以上文关于图26所描述的方式对集成电路制造系统进行配置可使得如本文中描述的设备得以制造。
在一些示例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图26中所展示的示例中,IC生成系统还可由集成电路定义数据集配置成在制造集成电路时,根据在集成电路定义数据集处定义的程序代码将固件加载到所述集成电路上,或以其他方式向集成电路提供与集成电路一起使用的程序代码。
与已知的具体实现相比,在本申请中阐述的概念在设备、装置、模块和/或系统中(以及在本文中实现的方法中)的具体实现可带来性能改进。性能改进可包括计算性能提高、等待时间减少、吞吐量增大和/或功耗减小中的一者或多者。在制造这种设备、装置、模块和系统(例如在集成电路中)期间,可在性能改进与物理实施方式之间进行权衡,从而改进制造方法。例如,可在性能改进与布局面积之间进行权衡,从而匹配已知实施方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在设备、装置、模块和/或系统的元件之间共享功能块来完成。相反,本申请中所阐述的引起设备、装置、模块和系统的物理实施方式的改进(诸如硅面积减小)的概念可与性能提高进行权衡。这可以例如通过在预定义面积预算内制造模块的多个实例来完成。
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个这类特征的任何组合,其程度使得这类特征或组合能够鉴于本领域的技术人员的普通常识基于本说明书整体来实施,而不管这类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域技术人员将清楚,可以在本发明的范围内进行各种修改。
Claims (20)
1.一种神经网络加速器(2000),包括:
多个硬件处理单元(2002,2004,2006,2008,2012,2014,2016,500),每个硬件处理单元包括用以加速对数据执行一个或多个神经网络运算的硬件;所述多个硬件处理单元包括(i)卷积处理单元(2002),所述卷积处理单元被配置为加速对数据执行卷积运算,以及(ii)可配置池化处理单元(500),所述可配置池化处理单元被配置为选择性地对数据执行多个可选运算中的运算,所述多个可选运算包括深度方向卷积运算和一个或多个不同的池化运算;以及
交叉开关(2020),所述交叉开关耦合到所述多个硬件处理单元(2002,2004,2006,2008,2012,2014,2016,500)中的每个硬件处理单元,所述交叉开关(2020)被配置为从多个可选流水线中选择性地形成来自所述多个硬件处理单元中的一个或多个硬件处理单元的流水线,以处理到所述神经网络加速器(2000)的输入数据。
2.如权利要求1所述的神经网络加速器(2000),其中所述多个可选流水线中的至少两者以不同顺序包括所述多个硬件处理单元中相同的一组两个或更多个硬件处理单元。
3.如权利要求1所述的神经网络加速器(2000),其中所述一个或多个不同的池化运算包括平均池化运算、最小池化运算和/或最大池化运算。
4.如权利要求1所述的神经网络加速器(2000),其中所述可配置池化处理单元(500)包括一个或多个池引擎(502),每个池引擎(502)可配置为接收输入张量的通道的元素并生成多种不同类型的通道输出中的一个通道输出,所述多种不同类型的通道输出包括深度方向卷积通道输出以及一个或多个池化运算通道输出。
5.如权利要求4所述的神经网络加速器(2000),其中所述一个或多个不同的池化运算包括平均池化运算。
6.如权利要求5所述的神经网络加速器(2000),其中所述一个或多个池引擎(502)中的每一者包括:
归约引擎(504),所述归约引擎可配置为对于所述输入张量的通道的元素块生成多种类型的块输出中的一个块输出,所述多种类型的块输出包括所述块中元素的总和以及所述块中元素的加权和;以及
除法引擎(506),所述除法引擎可配置为对由所述归约引擎(504)生成的所述块输出选择性地执行除法运算;
其中当要对所述输入张量执行平均池化运算时,所述归约引擎(504)被配置为生成所述块中的元素的总和,并且所述除法引擎(506)被启用以将由所述归约引擎(504)生成的所述块输出除以所述块中元素的数量;并且
其中当要对所述输入张量执行深度方向卷积运算时,所述归约引擎(504)被配置为生成所述块的加权和,并且所述除法引擎(506)被禁用。
7.如权利要求6所述的神经网络加速器(2000),其中元素块包括一行或多行元素和一列或多列元素,并且所述归约引擎(504)被配置为通过生成列输出并从一个或多个列输出生成块输出来生成所述块输出。
8.如权利要求7所述的神经网络加速器(2000),其中:
当要对所述输入张量执行平均池化运算时,所述归约引擎(504)被配置为生成每列块的总和,并且通过对适当的列总和求和来生成所述块的所述总和,并且
当要对所述输入张量执行深度方向卷积运算时,所述归约引擎(504)被配置为生成每列块的加权和,并且通过对适当的列加权和求和来生成所述块的所述加权和。
9.如权利要求6至8中任一项所述的神经网络加速器(2000),其中所述归约引擎(504)包括:
竖直池引擎(602),所述竖直池引擎可配置为接收元素的列,并且生成所述列的多种类型的列输出中的一种列输出;
收集器存储单元(604),所述收集器存储单元被配置为临时存储由所述竖直池引擎(602)生成的所述列输出;以及
水平池引擎(606),所述水平池引擎被配置为从存储在所述收集器存储单元(604)中的适当的列输出生成块输出。
10.如权利要求9所述的神经网络加速器(2000),其中:
当要对所述输入张量执行平均池化运算时,所述竖直池引擎(602)被配置为接收块中的元素的列并且生成所接收的元素的总和;并且
当标识要对所述输入张量执行深度方向卷积运算时,所述竖直池引擎(602)被配置为接收块中的元素的列,并且基于所接收的元素生成多个加权和,每个加权和基于不同的一组权重。
11.如权利要求1至8中任一项所述的神经网络加速器(2000),其中所述可配置池化处理单元(500)被配置为以前端处理顺序和部分后端处理顺序中的一者或多者从所述交叉开关(2020)接收输入张量,所述输入张量包括宽度维度、高度维度和通道维度;
其中在所述前端处理顺序中,所述输入张量的元素在块基础上以通道顺序、宽度顺序和高度顺序接收,每个块包括在相同通道中和相同高度处的所述输入张量的元素;并且
其中在所述部分后端处理顺序中,所述输入张量的元素在块基础上以高达最大数量的宽度的宽度顺序、通道顺序和高度顺序接收,每个块包括在相同高度和相同宽度处的所述输入张量的元素。
12.如权利要求1至8中任一项所述的神经网络加速器(2000),其中所述神经网络加速器被配置为在所述神经网络加速器(2000)的多个硬件传递过程中处理神经网络,其中在所述神经网络加速器(2000)的硬件传递过程中,所述神经网络加速器(2000)被配置为将输入数据加载到所述神经网络加速器(2000)中,并且经由所述多个可选流水线中的流水线来处理所述输入数据,并且所述交叉开关(2020)被配置为针对硬件传递过程接收标识要在所述硬件传递过程中形成的所述多个可选流水线中的流水线的信息。
13.如权利要求1至8中任一项所述的神经网络加速器(2000),还包括数据输入单元(2024,2026),所述数据输入单元可配置为接收到所述神经网络加速器(2000)的所述输入数据,并将所接收的输入数据输出到所述数据输入单元(2024,2026)的输出端口;其中所述数据输入单元(324,326)的所述输出端口耦合到所述交叉开关(2020),并且所述交叉开关(2020)被配置为选择性地将所述数据输入单元(2024,2026)的所述输出端口连接到所述多个硬件处理单元(2002,2004,2006,2008,500)中的硬件处理单元的输入端口。
14.如权利要求13所述的神经网络加速器(2000),还包括第二数据输入单元(2026),所述第二数据输入单元可配置为接收到所述神经网络加速器(2000)的所述输入数据,并将所接收的输入数据输出到所述第二输入数据单元(2026)的输出端口;其中所述第二数据输入单元(2026)的所述输出端口可耦合到所述交叉开关(2020),并且所述交叉开关(2020)被配置为选择性地将所述第二数据输入单元(2026)的所述输出端口连接到所述多个硬件处理单元中的硬件处理单元的输入端口。
15.如权利要求14所述的神经网络加速器(2000),其中所述多个硬件处理单元包括逐元素运算处理单元(2006),所述逐元素运算处理单元被配置为加速对一组数据执行一个或多个逐元素运算,所述逐元素运算处理单元(2006)可配置为使用辅助输入数据来执行所述一个或多个逐元素运算;并且所述第二数据输入单元(2026)被配置为接收到所述神经网络加速器(2000)的所述输入数据和所述辅助输入数据中的一者。
16.如权利要求1至8中任一项所述的神经网络加速器(2000),其中所述多个硬件处理单元包括激活处理单元(2004),所述激活处理单元被配置为加速将激活函数应用于数据,并且所述多个硬件处理单元中的至少一个其他硬件处理单元包括逻辑,所述逻辑被配置为在输出由所述硬件处理单元生成的数据之前将激活函数应用于所生成的数据。
17.如权利要求1至8中任一项所述的神经网络加速器(2000),其中所述多个硬件处理单元包括多个张素重缩放处理单元(2014,2016),每个张素重缩放处理单元(2014,2016)被配置为接收包括一个或多个通道的张量,并且在每个张量或每个通道基础上将所接收的张量量化为仿射定点数格式。
18.如权利要求1至8中任一项所述的神经网络加速器(2000),其中所述交叉开关(2020)包括多个输入端口、多个输出端口和多个多路复用器(2102,2108),所述多个多路复用器选择性地将所述交叉开关(2020)的所述输入端口连接到所述交叉开关(2020)的所述输出端口。
19.一种计算机可读存储介质,所述计算机可读存储介质上存储有如权利要求1至8中任一项所述的神经网络加速器(2000)的计算机可读描述,所述计算机可读描述当在集成电路制造系统中处理时使得所述集成电路制造系统制造体现所述神经网络加速器(2000)的集成电路。
20.一种在神经网络加速器处处理神经网络的方法,所述神经网络在所述神经网络加速器的一个或多个硬件传递过程中被处理,所述方法包括,对于所述一个或多个硬件传递过程中的至少一个硬件传递过程:
在所述神经网络加速器处接收标识多个可选流水线中的流水线的信息,所述多个可选流水线中的每个流水线由多个硬件处理单元中的一个或多个硬件处理单元形成,所述多个硬件处理单元中的每个硬件处理单元包括用以加速对数据执行一个或多个神经网络运算的硬件,所述多个硬件处理单元包括:(i)卷积处理单元,所述卷积处理单元被配置为加速对数据执行卷积运算,以及(ii)可配置池化处理单元,所述可配置池化处理单元被配置为选择性地对数据执行多个可选运算中的运算,所述多个可选运算包括深度方向卷积运算和一个或多个池化运算;
动态连接所标识的流水线的所述一个或多个处理单元以形成所标识的流水线;以及
使用所形成的流水线来处理所述硬件传递过程的输入数据以生成所述硬件传递过程的经处理的数据。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2119144.0 | 2021-12-31 | ||
GB2119145.7 | 2021-12-31 | ||
GB2119144.0A GB2614327A (en) | 2021-12-31 | 2021-12-31 | Configurable pooling process unit for neural network accelerator |
GB2119145.7A GB2614705B (en) | 2021-12-31 | 2021-12-31 | Neural network accelerator with configurable pooling processing unit |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116384443A true CN116384443A (zh) | 2023-07-04 |
Family
ID=84569184
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211709957.4A Pending CN116384443A (zh) | 2021-12-31 | 2022-12-29 | 具有可配置池化处理单元的神经网络加速器 |
CN202211710878.5A Pending CN116384444A (zh) | 2021-12-31 | 2022-12-29 | 用于神经网络加速器的可配置池化处理单元 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211710878.5A Pending CN116384444A (zh) | 2021-12-31 | 2022-12-29 | 用于神经网络加速器的可配置池化处理单元 |
Country Status (3)
Country | Link |
---|---|
US (2) | US20230259578A1 (zh) |
EP (2) | EP4206993A1 (zh) |
CN (2) | CN116384443A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116679988A (zh) * | 2023-08-02 | 2023-09-01 | 武汉芯必达微电子有限公司 | 硬件加速单元、硬件加速方法、芯片及存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB201607713D0 (en) | 2016-05-03 | 2016-06-15 | Imagination Tech Ltd | Convolutional neural network |
GB2566702B (en) | 2017-09-20 | 2021-11-03 | Imagination Tech Ltd | Hardware implementation of a deep neural network with variable output data format |
GB2560600B (en) * | 2017-11-06 | 2020-03-04 | Imagination Tech Ltd | Nueral Network Hardware |
US10678508B2 (en) * | 2018-03-23 | 2020-06-09 | Amazon Technologies, Inc. | Accelerated quantized multiply-and-add operations |
US11270197B2 (en) * | 2019-03-12 | 2022-03-08 | Nvidia Corp. | Efficient neural network accelerator dataflows |
US11501151B2 (en) * | 2020-05-28 | 2022-11-15 | Arm Limited | Pipelined accumulator |
-
2022
- 2022-12-29 CN CN202211709957.4A patent/CN116384443A/zh active Pending
- 2022-12-29 CN CN202211710878.5A patent/CN116384444A/zh active Pending
- 2022-12-30 EP EP22217356.9A patent/EP4206993A1/en active Pending
- 2022-12-30 US US18/092,132 patent/US20230259578A1/en active Pending
- 2022-12-30 US US18/092,095 patent/US20230259743A1/en active Pending
- 2022-12-30 EP EP22217346.0A patent/EP4206996A1/en active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116679988A (zh) * | 2023-08-02 | 2023-09-01 | 武汉芯必达微电子有限公司 | 硬件加速单元、硬件加速方法、芯片及存储介质 |
CN116679988B (zh) * | 2023-08-02 | 2023-10-27 | 武汉芯必达微电子有限公司 | 硬件加速单元、硬件加速方法、芯片及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116384444A (zh) | 2023-07-04 |
EP4206993A1 (en) | 2023-07-05 |
EP4206996A1 (en) | 2023-07-05 |
US20230259743A1 (en) | 2023-08-17 |
US20230259578A1 (en) | 2023-08-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7348971B2 (ja) | 畳み込みニューラルネットワークハードウエア構成 | |
CN110383237B (zh) | 可重新配置的矩阵乘法器系统和方法 | |
CN111723904A (zh) | 实现神经网络卷积转置层的方法和系统 | |
CN114816331B (zh) | 具有时钟选通的用于执行矩阵乘法的硬件单元 | |
US20210326111A1 (en) | FPGA Processing Block for Machine Learning or Digital Signal Processing Operations | |
US20220391172A1 (en) | Implementation of Softmax and Exponential in Hardware | |
CN113887710A (zh) | 循环神经网络中的数字格式选择 | |
CN116384443A (zh) | 具有可配置池化处理单元的神经网络加速器 | |
CN112241251B (zh) | 用于处理浮点数的设备和方法 | |
EP3767455A1 (en) | Apparatus and method for processing floating-point numbers | |
CN115545175A (zh) | 在硬件中运行双向递归神经网络 | |
CN113887714A (zh) | 用于在硬件中运行动态循环神经网络的方法和系统 | |
US20230177320A1 (en) | Neural network accelerator with a configurable pipeline | |
GB2614705A (en) | Neural network accelerator with configurable pooling processing unit | |
GB2614327A (en) | Configurable pooling process unit for neural network accelerator | |
GB2611521A (en) | Neural network accelerator with a configurable pipeline | |
GB2611520A (en) | Methods and devices for configuring a neural network accelerator with a configurable pipeline | |
GB2611522A (en) | Neural network accelerator with a configurable pipeline | |
CN117808045A (zh) | 用于对神经网络中的卷积层执行通道均衡的方法和系统 | |
CN117808046A (zh) | 在线选择神经网络的网络参数的数字格式的方法和系统 | |
CN115545146A (zh) | 双向rnn的数字格式选择 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |