CN115904696A - 用于配置具有可配置流水线的神经网络加速器的方法和设备 - Google Patents
用于配置具有可配置流水线的神经网络加速器的方法和设备 Download PDFInfo
- Publication number
- CN115904696A CN115904696A CN202211208054.8A CN202211208054A CN115904696A CN 115904696 A CN115904696 A CN 115904696A CN 202211208054 A CN202211208054 A CN 202211208054A CN 115904696 A CN115904696 A CN 115904696A
- Authority
- CN
- China
- Prior art keywords
- neural network
- hardware
- hardware processing
- processing unit
- data
- 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
- 238000000034 method Methods 0.000 title claims abstract description 276
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 204
- 238000012545 processing Methods 0.000 claims abstract description 562
- 230000008569 process Effects 0.000 claims abstract description 129
- 230000006870 function Effects 0.000 claims description 56
- 230000004913 activation Effects 0.000 claims description 47
- 238000011176 pooling Methods 0.000 claims description 47
- 238000010606 normalization Methods 0.000 claims description 37
- 238000012546 transfer Methods 0.000 description 78
- 238000004519 manufacturing process Methods 0.000 description 45
- 238000010586 diagram Methods 0.000 description 20
- 230000005540 biological transmission Effects 0.000 description 12
- 238000013139 quantization Methods 0.000 description 9
- 238000004891 communication Methods 0.000 description 7
- 239000013598 vector Substances 0.000 description 7
- 230000006872 improvement Effects 0.000 description 6
- PXFBZOLANLWPMH-UHFFFAOYSA-N 16-Epiaffinine Natural products C1C(C2=CC=CC=C2N2)=C2C(=O)CC2C(=CC)CN(C)C1C2CO PXFBZOLANLWPMH-UHFFFAOYSA-N 0.000 description 5
- 238000009825 accumulation Methods 0.000 description 5
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 4
- 241001442055 Vipera berus Species 0.000 description 4
- 229910052710 silicon Inorganic materials 0.000 description 4
- 239000010703 silicon Substances 0.000 description 4
- 239000007787 solid Substances 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000013527 convolutional neural network Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012886 linear function Methods 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002194 synthesizing effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000004931 aggregating effect Effects 0.000 description 1
- 238000012993 chemical processing Methods 0.000 description 1
- 230000000295 complement effect Effects 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
- 238000007667 floating Methods 0.000 description 1
- 238000002955 isolation 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
- 230000008707 rearrangement Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000005389 semiconductor device fabrication Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000007723 transport mechanism Effects 0.000 description 1
Images
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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- 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/045—Combinations of networks
-
- 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)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
Abstract
公开用于配置具有可配置流水线的神经网络加速器的方法和设备。神经网络加速器包括多个硬件处理单元和耦合到多个硬件处理单元中的每个硬件处理单元的交叉开关。每个硬件处理单元包括加速对接收到的数据执行一个或多个神经网络运算的硬件。方法包括:获得将由神经网络加速器对输入数据执行的一个或多个神经网络运算的序列;从多个硬件处理单元中选择一组硬件处理单元来执行一个或多个神经网络运算;确定所选的一组硬件处理单元的顺序,以根据序列执行一个或多个神经网络运算;和向神经网络加速器提供控制信息,控制信息使得神经网络加速器的交叉开关以确定的顺序形成所选的一组硬件处理单元的流水线,以处理输入数据。
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层和从所述层输出的数据200可以被描述为张量。如本领域技术人员所知,张量是向量和矩阵的统称,并且可以被描述为n维数组。向量是一维张量,并且矩阵是二维张量。DNN中的张量通常是三维的,但不一定是三维的。参考图2,其示出了示例性三维(3D)张量200。3D张量200可以被描述为C平面的数据,其中每一个平面具有维度HxW。每个平面可以被称为张量的通道。张量的元素可以被称为张素(tensel),类似于图片的元素被称为像素。
对层的输入数据执行的处理取决于层的类型。例如,DNN的每一层可以是多种不同类型中的一种类型。示例性DNN层类型包括但不限于卷积层、激活层、归一化层、池化层,以及全连接层。对于本领域技术人员将显而易见的是,这些是示例性DNN层类型,并且这不是详尽的列表,并且可存在其他DNN层类型。
对于卷积层,将输入数据与与所述层相关联的权重进行卷积。具体地,每个卷积层与多个权重k0...kg相关联,这些权重也可以被称为过滤器权重或系数。权重被分组以形成或定义一个或多个过滤器或内核,并且每个过滤器可与偏移量偏差bias相关联。每个过滤器可以具有维度MxNxC(即,每个过滤器可包括一组MxNxC权重k)并且可以根据跨步长sW和sH在W和H方向上的卷积运算应用于输入数据,如图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在内的神经网络。
下文所描述的实施方案仅作为示例被提供,且并不限制解决已知神经网络加速器的缺点中的任一个或全部缺点的实施方式。
发明内容
提供本发明内容是为了介绍在以下详细描述中进一步描述的一些概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
本文描述了用于配置包括可配置硬件流水线的神经网络加速器的方法和设备。所述神经网络加速器包括多个硬件处理单元和耦合到所述多个硬件处理单元中的每个硬件处理单元的交叉开关。每个硬件处理单元包括加速对接收到的数据执行一个或多个神经网络运算的硬件。所述方法包括:获得将由所述神经网络加速器对所述输入数据执行的一个或多个神经网络运算的序列;从所述多个硬件处理单元中选择一组硬件处理单元来执行所述一个或多个神经网络运算;确定所选的一组硬件处理单元的顺序,以根据所述序列执行所述一个或多个神经网络运算;和向所述神经网络加速器提供控制信息,所述控制信息使得所述神经网络加速器的所述交叉开关以确定的顺序形成所述所选的一组硬件处理单元的流水线,以处理所述输入数据。
第一方面提供了一种用于配置神经网络加速器以处理输入数据的计算机实施的方法,所述神经网络加速器包括多个硬件处理单元和耦合到所述多个硬件处理单元中的每个硬件处理单元的交叉开关,每个硬件处理单元包括加速对接收到的数据执行一个或多个神经网络运算的硬件,所述方法包括:获得将由所述神经网络加速器对所述输入数据执行的一个或多个神经网络运算的序列;从所述多个硬件处理单元中选择一组硬件处理单元来执行所述一个或多个神经网络运算;确定所选的一组硬件处理单元的顺序,以根据所述序列执行所述一个或多个神经网络运算;和向所述神经网络加速器提供控制信息,所述控制信息使得所述神经网络加速器的所述交叉开关以确定的顺序形成所述所选的一组硬件处理单元的流水线,以处理所述输入数据。
所述控制信息可以包括标识所述所选的一组硬件处理单元的信息和标识所述所选的一组硬件处理单元的所述确定的顺序的信息。
所述交叉开关可以包括多个输入端口和多个输出端口,并且所述控制信息可以包括标识所述纵横开关的哪些输入端口将被连接到所述纵横开关的哪些输出端口以形成所述流水线的信息。
所述神经网络加速器可以包括用于每个输出端口的寄存器,并且向所述神经网络加速器提供所述控制信息可以包括使得值被写入每个寄存器,所述值标识所述多个输入端口中的哪个输入端口将被连接到对应的输出端口。
每个输入端口可以被分配一个编号,并且写入寄存器的值可以是要连接到对应输出端口的输入端口的编号。
当所述多个硬件处理单元中的硬件处理单元不来自所述一组硬件处理单元的一部分时,则可以将预定值写入与连接到所述硬件处理单元的所述输出端口相对应的所述寄存器,以指示所述硬件处理单元将被禁用。
所述方法可以还包括在向所述神经网络加速器提供所述控制信息之前确定所述控制信息是否有效,并且只有在确定所述控制信息有效的情况下才向所述神经网络加速器提供所述控制信息。
只有当第一硬件处理单元的输出将作为第二硬件处理单元的输入时,才可以确定控制信息有效,控制信息指示耦合到第一硬件处理单元的输出的交叉开关的输入端口将被连接到交叉开关的与第二硬件处理单元的输入耦合的输出端口。
所述方法可以还包括从存储器中读取预定义的一组限制,所述预定义的一组限制定义了哪些硬件处理单元能够有效地相互连接,并且其中确定所述所选的一组硬件处理单元的顺序可以包括确定所述顺序,使得不违反所述限制,并且只有硬件处理单元的有效组合才能使用所述交叉开关来连接。
可以选择所述一组硬件处理单元,使得所述一组硬件处理单元中的每个硬件处理单元在执行一个或多个神经网络运算的所述序列时仅使用一次。
所述神经网络加速器包括被配置为将所述输入数据加载到所述神经网络加速器中的多个数据输入单元,并且所述方法(1700)还包括基于所述输入数据和/或所述流水线的一个或多个特征选择所述多个数据输入单元中的一个数据输入单元以将所述输入数据加载到所述神经网络加速器中,并且所述控制信息包括识别所选数据输入单元的信息。
所述组中的所述硬件处理单元中的至少一个硬件处理单元可以能够配置为以多个可选处理顺序中的所选处理顺序传输或接收张量,并且所述方法可以还包括基于所述流水线选择将由所述至少一个处理单元中的一个或多个处理单元用于传输或接收张量的处理顺序。所述控制信息可以包括标识所述所选处理顺序的信息。
所述控制信息可以还包括标识将由所述一组硬件处理单元中的所述硬件处理单元中的一个或多个硬件处理单元实施的函数和/或一个或多个运算的信息。
所述方法可以还包括:获得将由所述神经网络加速器对第二输入数据执行的一个或多个神经网络运算的第二序列;从所述多个硬件处理单元中选择第二一组硬件处理单元来执行所述第二序列的所述一个或多个神经网络运算;确定所选的第二一组硬件处理单元的第二顺序,以根据所述第二序列执行所述一个或多个神经网络运算;和向所述神经网络加速器提供第二控制信息,所述第二控制信息使得所述神经网络加速器的所述交叉开关以确定的第二顺序形成所述所选的第二一组硬件处理单元的第二流水线,以处理所述第二输入数据。所述第二一组硬件处理单元可以与所述一组硬件处理单元相同,并且所述确定的第二顺序可以不同于所述确定的顺序。
所述多个硬件处理单元可以包括以下中的一者或多者:卷积处理单元,其被配置为加速输入数据与权重数据之间的卷积运算;激活处理单元,其被配置为加速将激活函数应用于数据;逐元素运算处理单元,其被配置为加速对一组数据执行一个或多个逐元素运算;池化处理单元,其被配置为加速对数据应用池化函数;归一化处理单元,其被配置为加速将归一化函数应用于数据;以及交错处理单元,其被配置为加速数据的重排。
第二方面提供了一种配置神经网络加速器以实施神经网络的方法,所述神经网络包括多个层,每个层被配置为接收输入数据并对接收到的输入数据执行一个或多个神经网络运算,所述方法包括:将所述神经网络的所述神经网络运算分组为一个或多个神经网络运算序列,每个神经网络运算序列能够由硬件处理元件的组合执行;和针对每个神经网络运算序列执行如所述第一方面所述的方法。
第三方面提供了一种用于配置神经网络加速器以处理输入数据的基于计算的设备,所述神经网络加速器包括多个硬件处理单元和耦合到所述多个硬件处理单元中的每个硬件处理单元的交叉开关,每个硬件处理单元包括加速对接收到的数据执行一个或多个神经网络运算的硬件,所述基于计算的设备包括一个或多个处理器,所述一个或多个处理器被配置为:获得将由所述神经网络加速器对所述输入数据执行的一个或多个神经网络运算的序列;从所述多个硬件处理单元中选择一组硬件处理单元来执行所述一个或多个神经网络运算;确定所选的一组硬件处理单元的顺序,以根据所述序列执行所述一个或多个神经网络运算;和向所述神经网络加速器提供控制信息,所述控制信息使得所述神经网络加速器的所述交叉开关以确定的顺序形成所述所选的一组硬件处理单元的流水线,以处理所述输入数据。
本文描述的神经网络加速器可以包括在集成电路上的硬件中。可以提供一种在集成电路制造系统处制造本文描述的神经网络加速器的方法。可以提供一种集成电路定义数据集,所述集成电路定义数据集当在集成电路制造系统中处理时使得所述系统制造本文描述的神经网络加速器。可以提供一种非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质上存储有本文描述的神经网络加速器的计算机可读描述,所述计算机可读描述当在集成电路制造系统中处理时使得所述集成电路制造系统制造包括所述神经网络加速器的集成电路。
可以提供一种集成电路制造系统,所述集成电路制造系统包括:非暂时性计算机可读存储介质,其上存储有本文描述的神经网络加速器的计算机可读描述;布局处理系统,其被配置为处理所述计算机可读描述,以便生成包括所述神经网络加速器的集成电路的电路布局描述;以及集成电路生成系统,其被配置为根据所述电路布局描述制造包括所述神经网络加速器的集成电路。
可以提供用于执行如本文描述的方法的计算机程序代码。可以提供其上存储有计算机可读指令的非暂时性计算机可读存储介质,所述计算机可读指令当在计算机系统处执行时使得计算机系统执行如本文描述的方法。
如对本领域技术人员显而易见的,上述特征可以适当地组合,并且可以与本文描述的示例的任何方面组合。
附图说明
现在将参考附图详细描述示例,在附图中:
图1是示例性深度神经网络(DNN)的示意图;
图2是示出对DNN中的示例性张量执行示例性卷积运算的示意图;
图3是具有可配置硬件流水线的示例性神经网络加速器(NNA)的框图;
图4是图3的交叉开关的示例性实施方式的框图;
图5是示出第一示例性张量处理顺序的示意图;
图6是根据图5的张量处理顺序传输张量的示例性方法的流程图;
图7是说明图5的示例性张量处理顺序的变型的示意图;
图8是示出第二示例性张量处理顺序的示意图;
图9是根据图8的张量处理顺序传输张量的示例性方法的流程图;
图10是说明图8的示例性张量处理顺序的变型的示意图;
图11是示出第三示例性张量处理顺序的示意图;
图12是根据图11的张量处理顺序传输张量的示例性方法的流程图;
图13是示出第四示例性张量处理顺序的示意图;
图14是根据图13的张量处理顺序传输张量的示例性方法的流程图;
图15是图3的卷积处理单元的示例性实施方式的框图;
图16是图15的卷积引擎的示例性实施方式的框图;
图17是配置具有可配置流水线的神经网络加速器以处理输入数据的示例性方法的流程图;
图18是示例性基于计算的设备的框图;
图19是可在其中实施本文描述的神经网络加速器的示例性计算机系统的框图;并且
图20是用于生成包括如本文描述的神经网络加速器的集成电路的示例性集成电路制造系统的框图。
附图示出了各种示例。技术人员将了解,附图中所示出的元件边界(例如框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
借助于示例呈现以下描述,以使得本领域的技术人员能够制造和使用本发明。本发明不限于本文描述的实施方案,并且对所公开的实施方案的各种修改对于本领域技术人员而言将是显而易见的。仅以举例的方式描述实施方案。
神经网络加速器(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中的层的顺序、可用的硬件处理单元和NNA存储单元的大小,确定在硬件传递过程中活动的或处理数据的硬件处理单元。具体来说,可以有软件工具,所述软件工具被配置为将神经网络映射到可以由NNA执行的一组运算,然后从NN的开始或结束以贪婪的方式将这些运算分组到硬件传递过程中。例如,软件工具可以首先将NN的层分组为层组,其中层组是一组层,其中用于实施这些层的运算可以在NNA的硬件传递过程中执行。在一些情况下,层组可以进一步分成更小的块,每个块可以在硬件传递过程中执行。由于对硬件传递过程中可以执行的处理量或硬件传递过程中可以存储的数据量的硬件限制,层组可以被分成更小的块。例如,卷积层可以包括64个过滤器,但是NNA在硬件传递过程中可能只能与最多32个过滤器执行卷积。在这种情况下,可以在第一硬件传递过程中处理32个过滤器,并且可以在第二硬件传递过程中处理剩余的32个过滤器。一般而言,在硬件传递过程中可以执行的运算越多,NN的实施效率就越高,因为这可以最大限度地减少内存读取和写入的次数,并通过允许在前一个运算完成之前开始处理后续运算来提高性能。
然而,虽然固定的流水线结构被设计成利用经典神经网络的结构,但是NN中的层(以及运算)的顺序可以是任意的。此外,随着NN的使用继续扩展和发展,越来越多的不具有经典结构的神经网络被开发出来。因此,具有固定顺序的流水线限制了NNA在处理一些神经网络时的效率。例如,如果NN包括池化层后跟卷积层,那么具有包括卷积处理单元后跟激活处理单元的固定硬件流水线的NNA将不得不在两个硬件传递过程中实施这样的序列,因为激活运算不能在同一硬件传递过程中先于卷积运算。
因此,发明人开发了具有硬件处理单元的可配置流水线的NNA。具体来说,在本文描述的NNA中,硬件处理单元连接到交叉开关,所述交叉开关可以在每个硬件传递过程基础上选择性地由硬件处理单元形成多个流水线中的一个流水线。这允许在不同的硬件传递过程中实施硬件处理单元的不同流水线。例如,在第一硬件传递过程中,交叉开关可以被配置为形成包括激活处理单元后跟卷积处理单元的流水线,使得到NNA的输入数据可以由激活处理单元处理,然后由卷积处理单元处理;并且在第二硬件传递过程中,交叉开关可以被配置为形成包括卷积处理单元、激活处理单元和池化处理单元的流水线,使得到NNA的输入数据可以由卷积处理单元、激活处理单元并且然后由池化处理单元处理。因此,在本文描述的NNA中,不仅在硬件传递过程中活动(即处理数据)的硬件处理单元是可配置的,而且硬件处理单元在硬件传递过程中处理数据的顺序也是可配置的。
如下面更详细描述的,本文描述的NNA可以显著提高处理一些NN的效率,因为它可以通过增加每个硬件传递过程可以执行的运算的数目来减少处理那些NN所需的硬件传递过程的数目。如上所述,每个硬件传递过程都涉及从存储器读取数据,并且可以包括向存储器写入数据。从存储器读取和写入数据会消耗大量的功率和处理周期,并且可能会在开始执行硬件传递过程时引入延迟。因此,减少实施NN的硬件传递过程的数目增加了NNA在实施NN时的功率效率。此外,当在硬件传递过程中执行一组运算时,所述一组中的后续运算可以在所述一组中的较早运算完成之前开始,这加速了那些运算的执行。因此,增加可以在同一硬件传递过程中执行的运算的数目可以减少执行这些运算的时间。
此外,大多数NNA具有卷积处理单元等,所述卷积处理单元被配置为执行/加速卷积运算。申请人已知的许多NNA具有卷积处理单元作为固定流水线中的第一个元件。然而,卷积处理单元通常是NNA中资源最密集的部件,并且将卷积处理单元限制为硬件传递过程的第一个元件会显著增加实施NN的硬件传递过程的数目。因此,将卷积处理单元连接到交叉开关以允许在硬件传递过程中的任何地方执行卷积运算已经显示出显著增加了本文描述的NNA可以实施NN的效率。
此外,由于在本文描述的示例中,硬件处理单元可以在不同的硬件传递过程中接收输入张量和/或向不同的硬件处理单元发送输出张量,所以一个或多个硬件处理单元可以被配置为支持用于传输和/或接收输入张量的多个不同的顺序,这些顺序在本文中可以被称为处理顺序,并且在硬件传递过程中用于传输或接收张量的处理顺序可以分别基于从所述硬件处理单元接收张量或向所述硬件处理单元传输张量的部件。例如,当卷积处理单元的输出张量被提供给激活处理单元时,使用第一处理顺序将输出张量传输给激活处理单元可能是有利的,并且当卷积处理单元的输出张量被提供给池化处理单元时,使用不同的第二处理顺序将输出张量传输给池化处理单元可能是有利的。因此,一个或多个硬件处理单元支持用于传输和/或接收张量的多个处理顺序是有利的,其中用于在硬件传递过程中传输或接收张量的处理顺序是基于所述硬件传递过程中使用的流水线。下面描述可以由一个或多个硬件处理单元支持的示例性不同处理顺序。
现在参考图3,其示出了具有硬件处理单元的可配置流水线的示例性NNA 300。NNA300包括多个硬件处理单元302、304、306、308、310、312、314、316;以及交叉开关(“Xbar”)320,其耦合到硬件处理单元并且可以选择性地由硬件处理单元形成多个流水线中的一个流水线。本文使用短语“由硬件处理单元形成流水线”来表示连接一组硬件处理单元的输入和输出,使得一个硬件处理单元的输出成为另一个硬件处理单元的输入。
每个硬件处理单元302、304、306、308、310、312、314、316包括被配置为加速对输入数据执行一个或多个神经网络运算的硬件。具体来说,每个硬件处理单元302、304、306、308、310、312、314、316包括被配置为接收输入数据的输入端口、对输入数据执行一个或多个运算的硬件逻辑,以及被配置为输出处理结果的输出端口,所述处理结果可以被称为输出数据。如下文更详细描述的,一个或多个硬件处理单元还可以包括一个或多个额外端口,以接收用于处理输入数据的辅助数据,和/或从缓冲区写入和/或读取数据。图3的NNA 300包括以下硬件处理单元:卷积处理单元302,其被配置为对接收到的输入数据执行卷积运算;激活处理单元304,其被配置为对接收到的输入数据执行非线性运算;逐元素运算处理单元306,其被配置为对接收到的输入数据执行逐元素运算;归一化处理单元308,其被配置为对接收到的输入数据执行归一化运算;池化处理单元310,其被配置为对接收到的输入数据执行池化运算;交错处理单元312,其被配置为对接收到的输入数据执行交错或重排;以及张素重缩放处理单元314、316,其被配置为缩放或重缩放输入数据。这些硬件处理单元中的每一个硬件处理单元将在下面更详细地描述。对于本领域技术人员将显而易见的是,这只是一组示例性硬件处理单元,并且其他NNA可以具有额外的硬件处理单元、更少的硬件处理单元和/或不同的硬件处理单元。
图3的NNA 300被配置为在NNA 300的一个或多个硬件传递过程中处理NN。在NNA300的硬件传递过程中,NNA 300将输入数据加载到NNA中(例如,从外部存储器),并且经由由一个或多个硬件处理单元302、304、306、308、310、312、314、316形成的流水线来处理所述输入数据,以生成处理后的数据。在大多数硬件传递过程中,处理后的数据然后经由输出单元318从NNA输出(例如输出到外部存储器)。然而,在一些情况下,处理后的数据可能会保留在NNA中,以供后续的硬件传递过程使用。例如,如下面更详细描述的,可能需要卷积处理单元302的若干遍次才能生成卷积层输出。因此,在一些情况下,卷积处理单元302可以在一个硬件传递过程中执行部分卷积处理,并将所述部分处理的结果存储在卷积处理单元(例如,其累积缓冲区)中;然后在一个或多个后续硬件传递过程中执行更多的部分卷积处理,然后组合在硬件传递过程中生成的部分结果以生成最终的卷积输出。由于NNA的内部存储限制(例如,输入缓冲器324可能不够大以存储整个输入张量和/或系数缓冲器322可能不够大以存储整个权重张量)和/或NNA的处理限制,卷积层可以在若干硬件传递过程上实施。
术语“到NNA的输入数据”在本文用于表示针对硬件传递过程被加载到NNA中的输入数据,并且可以替代地被称为“用于硬件传递过程的输入数据”。(i)如果所述硬件处理单元是所述硬件传递过程的流水线中的第一个硬件处理单元,则硬件处理单元的输入数据可以是用于所述硬件传递过程的输入数据,或者(ii)如果所述硬件处理单元不是所述硬件传递过程的流水线中的第一个硬件处理单元,则硬件处理单元的输入数据可以是由另一硬件处理单元生成的输出数据。
用于硬件传递过程的输入数据经由数据输入单元324、326加载到NNA中。NNA可以包括单个数据输入单元324或多于一个数据输入单元324、326。如图3所示,数据输入单元324中的一个数据输入单元可以是输入缓冲区324的形式,所述输入缓冲区可以被配置为存储用于硬件传递过程的输入数据。输入缓冲区324可以耦合到卷积处理单元302和交叉开关320,这允许输入缓冲区324向卷积处理单元302或交叉开关320提供接收到的输入数据。尽管输入缓冲区324在图3中被示为单个输入缓冲区,但是输入缓冲区可以由多个存储体形成。在一些情况下,在硬件传递过程中可能只可能使用输入缓冲区324一次,因此输入缓冲区324可能能够在硬件传递过程中向卷积处理单元302或交叉开关320提供输入数据,但不能两者都提供。
申请人已知的NNA具有单个数据输入单元324。然而,如图3所示,本文所述的NNA可以具有第二、辅助或备选数据输入单元326,通过所述数据输入单元,用于硬件传递过程的输入数据可以被加载到NNA中,这可以比主数据输入单元(例如,输入缓冲区324)更简单并且使用更少的能量。例如,如下文更详细描述的,逐元素运算处理单元306能够使用加载到NNA中的一组辅助输入数据对接收到的输入数据执行逐元素运算。因此,可以存在辅助数据输入单元326,其被配置为将辅助数据输入加载到NNA中,所述NNA被提供给逐元素运算处理单元306(例如,其第二数据接收器(Rx))。通过将辅助数据输入单元326耦合到交叉开关320,辅助数据输入单元326可以提供备选路径来将用于硬件传递过程的输入数据加载到NNA 300中。
为了允许辅助数据输入单元326比输入缓冲区324更简单和更节能,辅助数据输入单元326可以不具有输入缓冲区324的所有特征。例如,虽然NNA可以被配置为执行定点数格式运算,但是输入缓冲区324可能能够接收浮点数格式的输入数据并将其转换为定点数格式,而辅助数据输入单元326可能仅能够接收定点数格式的输入数据。此外,在一些情况下,输入缓冲区324可能能够接收多种不同格式的输入数据,而辅助数据输入单元可能仅能够接收这些格式的子集的输入数据。这可能是因为,例如,辅助数据输入单元326可能具有比输入缓冲区324更少的可用内存或存储空间。
因此,在用于硬件传递过程的输入数据将不首先由卷积处理单元处理的情况下(并且它满足使用辅助数据输入单元326的任何其他要求),经由辅助数据输入单元326将用于硬件传递过程的输入数据加载到NNA中可能比经由输入缓冲区324更节能。在一些情况下,可能仅可能在硬件传递过程中使用辅助数据输入单元326一次,因此辅助数据输入单元326可用于向逐元素运算处理单元306提供辅助输入数据或提供用于硬件传递过程的输入数据,但不能两者都提供。在这些情况下,如果辅助数据输入单元326用于提供用于硬件传递过程的输入数据,则逐元素运算处理单元306不能在所述硬件传递过程中对辅助输入数据执行逐元素运算。然而,逐元素运算处理单元306仍可用于在所述硬件传递过程中执行逐元素运算,而无需辅助输入数据。
在图3所示的示例中,逐元素运算处理单元306的辅助数据接收器(Rx)被耦合或连接到交叉开关320。这允许逐元素运算处理单元306的辅助数据接收器(Rx)经由交叉开关320从辅助数据输入单元326或另一个单元接收辅助输入数据。然而,在一些情况下,逐元素运算处理单元306的辅助数据接收器(Rx)可能只能从辅助数据输入单元326接收辅助输入数据。在这些情况下,交叉开关320可以通过移除逐元素运算处理单元306的辅助数据接收器(Rx)与交叉开关之间的连接并将辅助数据接收器(Rx)直接连接到辅助数据输入单元326来简化。在这种情况下,辅助数据输入单元可以包括逻辑(例如,解复用器),所述逻辑被配置为在每个硬件传递过程接收信息,所述信息指示所述逻辑在所述硬件传递过程中是否是活动的,并且如果是,则指示接收到的数据是将被提供给交叉开关320还是提供给辅助数据接收器(Rx),并将接收到的数据引导到适当的设备。这允许由辅助数据输入单元接收到的数据被用于经由交叉开关320提供用于硬件传递过程的输入数据,或者将辅助数据直接提供给逐元素运算处理单元306的辅助数据接收器(Rx)(而不必通过交叉开关320)。
在一些情况下,NNA 300可以包括被配置为在NNA 300与外部存储器(未示出)之间提供接口的存储器接口(未示出)。在这些情况下,存储器接口可以被配置为从外部存储器接收用于NNA的输入数据,并将其提供给输入缓冲区324和/或辅助数据输入单元326。
NNA在每个硬件传递过程接收控制信息(所述控制信息也可以被称为命令信息),所述控制信息标识在所述硬件传递过程中活动的NNA的部件,以及活动部件在硬件传递过程中使用的顺序。控制信息还可以指定用于硬件传递过程的任何单独的部件配置。例如,如下面更详细描述的,由激活处理单元304、逐元素运算处理单元306、归一化处理单元308和池化处理单元310中的一者或多者实施的函数和/或运算可以在每个硬件传递过程的基础上进行配置。在这些情况下,控制信息可以包括标识将由硬件传递过程中的一个或多个处理单元实施的函数和/或运算的信息。
在NNA 300包括存储器接口(未示出)的情况下,可以经由存储器接口接收控制信息。在一些情况下,控制信息可以由命令解码器(未示出)接收,所述命令解码器解码控制信息并将信息发送到NNA 300的部件,所述信息指示所述部件在硬件传递过程中是否是活动的,并且如果是,则所述部件将如何针对硬件传递过程配置自身。在其他情况下,NNA中的每个部件可以在每个硬件传递过程直接接收控制信息,所述控制信息指示所述部件在所述硬件传递过程中是否是活动的,并且如果是,则所述部件将如何针对硬件传递过程配置自身。无论哪种方式,NNA中的每个部件都在每个硬件传递过程接收控制信息,所述控制信息指示所述部件在所述硬件传递过程中是否是活动的,并且如果是,则所述部件将如何被配置。指示交叉开关320将如何被配置用于硬件传递过程的信息可以包括标识将由NNA的单元形成的多个流水线中的流水线的信息。
具体来说,在每个硬件传递过程,交叉开关320根据控制信息确定其在当前硬件传递过程中是否是活动的,并且如果其确定其在当前硬件传递过程中是活动的,则其动态地配置自身以形成由所述硬件传递过程的控制信息标识的多个流水线中的流水线。在一些情况下,如果例如在硬件传递过程中只有一个硬件处理单元(例如卷积处理单元302)是活动的,并且硬件传递过程的结果存储在内部(例如在NNA内)或者经由备选(例如旁路)路径被传递到输出单元318,则交叉开关320在硬件传递过程中可能不是活动的。例如,在一些情况下,在卷积处理单元302与输出单元318之间可能存在备选或旁路路径(未示出),所述路径允许卷积处理单元302的输出被直接发送到输出单元(例如,不穿过交叉开关320)。
交叉开关320包括多个输入端口(在图3中由指向交叉开关320的箭头示出)、多个输出端口(在图3中由从交叉开关320指向外的箭头示出)和路由逻辑(例如多路复用器(未示出)),所述路由逻辑允许交叉开关320选择性地将交叉开关320的输入端口连接到交叉开关320的输出端口。在图3的示例中,交叉开关320的每个输入端口可以耦合或连接到硬件处理单元或数据输入单元的输出端口,并且交叉开关320的每个输出端口可以耦合或连接到硬件处理单元或数据输入单元的输入端口。下面参考图4描述交叉开关320的示例性实施方式。
在一些情况下,交叉开关320可能能够从NNA的单元(例如,硬件处理单元和数据输入单元)形成任何可能的流水线。换句话说,在一些情况下,交叉开关320可能能够以任何可能的方式连接硬件处理单元和数据输入单元(例如,单元的任何输出端口可以连接到单元的任何输入端口)。然而,在其他情况下,对于NNA的哪些单元可以相互连接,可能存在一个或多个限制,这可能会限制可以由交叉开关320形成的流水线的数目。例如,在一些情况下,NNA 300的任何单元(例如,硬件处理单元、数据输入单元)在硬件传递过程期间只能使用一次。在这些情况下,可能不允许创建一个单元的输出端口连接到同一单元的输入端口的流水线。例如,可能不允许创建其中激活处理单元的输出端口耦合到激活处理单元的输入端口的流水线。在其他情况下,可能会有其他限制。例如,在一些情况下,第一单元可以为第二单元格式化数据,使得要由第二单元处理的数据必须首先被发送到第一单元。例如,在图3的示例中,归一化处理单元308可以被配置为将输入数据格式化到池化处理单元310,因此池化处理单元310可以被配置为经由归一化处理单元308接收用于硬件传递过程的输入数据。类似地,在图3的示例中,在许多情况下,交错处理单元312可以为输出单元318重新格式化数据,因此输出单元318可以被配置为经由交错处理单元312接收用于硬件传递过程的输入数据。可能存在到输出单元318的输入数据可能不需要被重新格式化的一些情况,在这些情况下,交错处理单元312可以被旁路。对于本领域的技术人员将显而易见的是,这些是示例性限制。
下面的表1提供了根据一组示例性限制的图3的NNA 300的单元中的每一个单元的可能的输入的列表。对本领域的技术人员将显而易见的是,这仅是示例。
表1
在一些情况下,标识要由交叉开关320在硬件传递过程中实施的多个流水线中的流水线的控制信息可以明确地标识交叉开关320的哪些输入端口要连接到交叉开关320的哪些输出端口。在一些情况下,交叉开关320可以包括用于每个输出端口的寄存器,并且寄存器的值指示要连接到所述输出端口的输入端口。例如,可以对输入端口进行编号,并且可以通过控制信息将输出端口的寄存器设置为相关输入端口的值。例如,如果来自激活处理单元304的输出将被引导到逐元素运算处理单元306的输入,并且激活处理单元304的输出端口被连接或耦合到交叉开关320的输入端口2,则与连接或耦合到逐元素运算处理单元306的输入端口的交叉开关320的输出端口相关联的寄存器可以被设置为2。
表2示出了图3的交叉开关320的输出端口的示例性编号,并且表3示出了图3的交叉开关320的输入端口的示例性编号。
表2
单元 | 交叉开关输出端口 |
输入缓冲区 | 1 |
激活处理单元 | 2 |
逐元素运算处理单元 | 3 |
辅助数据接收器 | 4 |
归一化处理单元 | 5 |
张素重缩放处理单元-A | 6 |
张素重缩放处理单元-B | 7 |
交错处理单元 | 8 |
表3
单元 | 交叉开关输入端口 |
卷积处理单元 | 1a |
输入缓冲区 | 1b |
激活处理单元 | 2 |
逐元素运算处理单元 | 3 |
辅助数据输入单元 | 4 |
池化处理单元 | 5 |
张素重缩放处理单元-A | 6 |
张素重缩放处理单元-B | 7 |
表4示出了一组示例性寄存器,其用于控制多个流水线中的哪一个流水线由交叉开关320在硬件传递过程中实施。在此示例中,表2中的每个输出端口都有一个寄存器。表4示出了根据表2和表3中描述的示例性交叉开关端口编号以及上面关于表1描述的示例性限制的每个寄存器的可接受值。在此示例中,每个寄存器是四个位,即使三个位也足以允许所有单元经由交叉开关320相互连接。
表4
在一些情况下,如表4所示,当与交叉开关320的输出端口相关联的寄存器被设置为预定值时,它可以指示硬件处理单元或与其耦合的数据输入单元在硬件传递过程中是不活动的还是部分不活动的。
如上所述,可以使用软件工具来识别NNA处理NN的硬件传递过程,例如,软件工具可以确定硬件传递过程的数目、在每个硬件传递过程中活动的部件以及每个硬件传递过程的交叉开关的配置(例如,每个硬件传递过程中的活动部件处理数据的顺序)。在一些情况下,这样的软件工具可以确定只有当处理单元的输出是硬件传递过程中的另一个处理单元的输入,交叉开关在交叉开关320的相关端口之间创建连接时,用于硬件传递过程的交叉开关320的配置才是有效的。例如,如果硬件传递过程中的处理单元的顺序使得卷积处理单元302的输出将作为输入被提供给激活处理单元304,则只有当交叉开关320的对应于卷积处理单元302的输出的端口被连接或耦合到交叉开关320的对应于激活处理单元304的输入的端口时,交叉开关320的配置才可以被确定为有效。在一些情况下,当卷积处理单元302的输出作为输入被提供给输出单元时,即使交叉开关320的对应于卷积处理单元302和输出单元318的端口没有被连接,交叉开关320的配置仍然有效,因为如上所述,在卷积处理单元302与输出单元318之间可能存在单独的路径。
在其他情况下,标识要由交叉开关320实施的多个流水线中的流水线的控制信息可以标识在硬件传递过程中活动的单元(例如,硬件处理单元、数据输入单元)和其顺序,并且交叉开关320可以被配置为动态地确定交叉开关320的哪些输入端口要连接到交叉开关320的哪些输出端口,以实施由所标识的硬件处理单元和所标识的顺序定义的硬件流水线。
在一些情况下,交叉开关320的每个输入端口和每个输出端口可以具有多个数据通道。数据通道的数目定义了可以在同一周期内在输入端口上接收或可以在同一周期内在输出端口上传输的数据值的数目。例如,如果一个输入端口有十六个数据通道,则每个周期可以在所述端口上接收16个数据值。在一些情况下,交叉开关320的每个输入端口和每个输出端口可以包括相同数目的数据通道(可以称为XBAR_PARALLELISM)。如下面更详细描述的,卷积处理单元302可以包括多个卷积引擎,每个卷积引擎被配置为对一组输入数据值和一组权重执行乘积累加计算。在一些情况下,每个输入/输出端口的通道的数目等于卷积引擎的数目。例如,在一些情况下,卷积处理单元302可以包括28个卷积引擎,并且交叉开关320的每个输入和输出端口可以包括28个数据通道。在其他情况下,每个输入/输出端口的数据通道的数目可能少于卷积引擎的数目。在又其他情况下,每个输入/输出端口的数据通道的数目可能大于卷积引擎的数目。使每个输入/输出端口的数据通道的数目大于卷积引擎的数目可以允许数据在一些处理单元之间更快地传输,特别是那些包括或者可以访问存储模块的处理单元(例如,可以访问共享缓冲区的池化处理单元)。例如,这种配置可以允许数据更快地加载到共享缓冲区中。
端口的每个数据通道可以具有相同的位宽。例如,输入端口或输出端口的所有数据通道都可以是32位宽,即所述输入端口或输出端口的每个数据通道都可以能够接收/输出32位数据元素。在一些情况下,当接收/输出数据元素的位宽小于或等于通道位宽的一半时,每个通道可以接收多个数据元素。换句话说,在这些情况下,可以将多个数据元素打包到单个通道中。例如,如果通道是32位宽,并且每个数据元素是16个位,那么可以在所述通道上一次接收/输出两个16位数据元素。
在一些情况下,交叉开关320的所有输入端口和输出端口具有相同的数据通道位宽(例如,32位)。然而,在其他示例中,交叉开关320的输入端口和/或输出端口中的一个或多个输入端口和/或输出端口可以具有不同的通道位宽。例如,一些部件(例如,硬件处理单元、数据输入单元)可能能够产生/接收高达第一位宽(例如,32位)的数据,而其他部件可能能够产生/接收仅高达较低第二位宽(例如,16位)的数据。在这些情况下,输入端口和/或输出端口的子集可以具有第一较高位宽(例如32位)的数据通道(即耦合或连接到产生/接收高达第一位宽的数据的硬件处理单元的数据通道),并且输入端口和/或输出端口的另一子集可以具有第二较低位宽(例如16位)的数据通道。减少交叉开关320的一个或多个输入端口和/或一个或多个输出端口的数据通道的位宽可以降低交叉开关320的复杂性,并减少部件之间的连接数目。下面的表5示出了可以由图3的NNA的单元(例如,硬件处理单元、数据输入单元)支持的最大输入和输出位宽的示例。
表5
单元 | 最大输入位宽 | 最大输出位宽 |
输入缓冲区 | 16 | 16 |
卷积处理单元 | - | 32 |
激活处理单元 | 16 | 16 |
逐元素运算处理单元 | 32 | 32 |
辅助数据输入单元 | 16 | 16 |
归一化处理单元 | 16 | - |
池化处理单元 | - | 32 |
张素重缩放处理单元-A | 32 | 32 |
张素重缩放处理单元-B | 32 | 32 |
交错处理单元 | 16 | - |
在交叉开关320具有不同位宽的输入和/或输出端口的情况下,为了允许交叉开关320的较高位宽输入端口耦合到交叉开关320的较低位宽输出端口,交叉开关320可以被配置为当较高位宽输入端口耦合或连接到交叉开关320的较低位宽输出端口时动态地执行位宽转换。例如,在一些情况下,任何较高位宽输入端口可以耦合到可以选择性地将接收到的数据元素的位宽减小到较低位宽的逻辑(例如,箝位电路)。所述逻辑可以被配置为丢弃较高位宽数据元素的最高有效位。所述逻辑(例如箝位电路)可以被配置为使得低于较低位宽中的最小值的任何较高位宽值被解析为新的最小值,并且高于较低位宽中的最大值的任何较高位宽值被解析为新的最大值。
类似地,为了允许交叉开关320的较低位宽输入端口耦合到交叉开关320的较高位宽输出端口,交叉开关320可以被配置为当交叉开关320的较低位宽输入端口耦合或连接到较高位宽输出端口时动态地执行位宽转换。例如,在一些情况下,任何较低位宽输入端口可以耦合到能够选择性地将接收到的数据元素的位宽扩展到较高位宽的逻辑。在输入数据元素被带符号的情况下,所述逻辑可以被配置为对数据元素的最高有效位(MSB)进行符号扩展。
如上所述,在硬件传递过程中活动的NNA的每个单元(例如,处理单元或数据输入单元)接收输入张量并产生输出张量。在多个单元在硬件传递过程中是活动的情况下,NNA的一个单元的输出张量可以经由交叉开关320传递到NNA的另一个单元。由于NNA的一个单元通常不能一次发送完整的输出张量,所以可以有一个预定的顺序,本文可以称为处理顺序,其中张量的元素从单元输出。在一些情况下,可能有多个处理顺序被NNA的单元使用。不同的处理顺序可以为某些运算提供优势。
在有多个处理顺序的情况下,NNA的单元中的一些单元(例如,处理单元和数据输入单元)可以仅支持一个处理顺序,而NNA的单元中的一些单元(例如,处理单元和数据输入单元)可以支持多个处理顺序。在NNA的不同单元可以使用不同的处理顺序的情况下,用于硬件传递过程的控制信息可以包括标识每个活动单元将使用哪个处理顺序的信息,使得活动单元可以根据正确的处理顺序来配置自身以传输/接收数据。以下参考图5至图14描述了可以由单元支持的示例性处理顺序。
现在将描述图3的示例性硬件处理单元中的每一个硬件处理单元。卷积处理单元302是被配置为接收输入数据和权重,并在输入数据与权重数据之间执行卷积运算,并输出卷积运算的结果的硬件。卷积处理单元302可以具有一个或多个卷积引擎,所述一个或多个卷积引擎被配置为在一组输入数据值与一组权重之间执行乘积累加运算。卷积处理单元302在硬件传递过程中使用的权重数据可以存储在系数缓冲器322中。在一些情况下,卷积处理单元302在硬件传递过程中使用的输入数据可以存储在输入缓冲区324中。下面参考图15描述卷积处理单元302的示例性实施方式。
激活处理单元304是被配置为接收输入数据并对其应用非线性函数(也可称为激活函数)的硬件。例如,可以由激活处理单元304实施(或近似)的非线性函数包括但不限于Tanh函数、sigmoid函数、整流线性单元(ReLU)函数或渗漏ReLU(LReLU)函数。在ReLU函数中,输出元素yi,j,k通过识别等式(1)中列出的最大值来计算,其中对于小于0的x值,y=0。LReLU函数在输入大于零时输出所述输入,并且在输入为负时输出所述输入的一部分(例如,0.01x)。LReLU函数的示例性实施方式在等式(2)中列出。
yi,j,k=f(xi,j,k)=max{0,xi,j,k} (1)
yi,j,k=f(xi,j,k)=max{0.01*xi,j,k,xi,j,k} (2)
在一些情况下,由激活处理单元304在硬件传递过程中执行的激活函数可以是可配置的。例如,在一些情况下,激活处理单元304可以接收用于硬件传递过程的信息,所述信息标识要应用于所述硬件传递过程中的输入数据的多个激活函数中的一个激活函数。
在一些情况下,激活处理单元304可以被配置为在查找表的条目中存储表示要在硬件传递过程中实施的激活函数的数据。在这些情况下,激活处理单元304可以被配置为使用输入数据在查找表中查找一个或多个条目,并且从查找表中的一个或多个条目和/或输入数据生成输出。例如,激活处理单元304可以被配置为通过在从查找表读取的两个或更多个条目之间进行插值来计算激活函数的输出。在申请人的GB专利第2552242号中描述了激活处理单元304的示例性实施方式,所述专利的全部内容通过引用并入本文。
逐元素运算处理单元306是硬件,所述硬件被配置为接收输入数据(例如,输入张量)并对输入数据(例如,输入张量)执行逐元素运算,可选地使用另一数据集(例如,另一张量),所述数据集可以经由辅助数据输入单元326从外部存储器获得或检索。逐元素运算是对输入数据/张量的每个元素(例如,每个输入数据值或每个张素)执行的相同运算。可以对输入数据执行的逐元素运算包括但不限于加法、乘法、最大值和最小值。
另一数据集/张量可以与输入数据/张量具有相同的大小(例如,具有相同的维数),使得使用逐元素运算来组合两个张量的对应元素。或者,另一数据集/张量和输入数据/张量可以具有不同的大小或维度。例如,如果张量中的一个张量的失配维数具有大小1,则可以使用广播技术在输入数据/张量与另一数据集/张量之间执行逐元素运算,其中较小的张量被广播(或扩展)到另一张量的大小。例如,通过扩展第一张量的W维度,大小为[N,H,W,C]=[1,10,1,10]的张量可以与大小为[N,H,W,C]=[1,10,10,10]的张量进行逐元素组合。
归一化处理单元308是被配置为接收输入数据并将归一化函数应用于接收到的输入数据以产生归一化数据的硬件。可以由归一化处理单元308实施的示例性归一化函数包括但不限于局部响应归一化(LRN)函数和局部对比度归一化(LCN)函数。在一些情况下,应用于输入数据的归一化函数可能是可配置的。例如,归一化处理单元308可以接收用于硬件传递过程的信息,所述信息指示多个归一化函数中的哪一个归一化函数将被应用于所述硬件传递过程中的输入数据。这允许在不同的硬件传递过程中应用不同的归一化函数。申请人的GB专利第2552242号中描述了归一化处理单元308的示例性实施方式,所述专利的全部内容通过引用并入本文。
池化处理单元310是被配置为接收输入数据并将池化函数应用于接收到的输入数据的硬件。池化函数是通过汇总数据块或数据子集来减小数据大小的函数。示例性池化函数包括最大值函数、最小值函数和平均值函数。池化函数的目的是减小表示的空间大小,以减少NN中参数和计算的数目,并且因此也控制过度拟合。
在一些情况下,池化处理单元310可以被配置为接收可以由归一化处理单元308生成的特定格式的输入数据。在这种情况下,如图3所示,池化处理单元310的输入端口可以耦合或连接到归一化处理单元308的输出端口,以便仅从归一化处理单元308接收输入数据。在这些情况下,为了允许归一化处理单元308而不是池化处理单元310处理用于硬件传递过程的输入数据,池化处理单元310可以包括允许池化处理单元310输出从归一化处理单元308接收到的数据或者由池化处理单元310生成的数据的逻辑(例如,多路复用器)。然后,池化处理单元310可以在每个硬件传递过程接收指示池化处理单元310是否活动的信息,并且如果是,则识别哪个输出将被提供给交叉开关320。然而,对于本领域技术人员将显而易见的是,这只是一个示例,并且在其他示例中,池化处理单元310的输入端口可以直接耦合或连接到交叉开关320,以允许池化处理单元310从NNA 300的其他单元接收输入数据。
交错处理单元312是被配置为接收输入数据并执行重排运算以产生特定顺序的数据的硬件。重排可以包括对接收到的输入数据进行排序和/或转置。
如图3所示,池化处理单元310和交错处理单元312可以各自访问共享缓冲区328,这些单元可以使用所述共享缓冲区来写入数据和从中检索数据。例如,这些单元可以使用共享缓冲区328来重排接收到的数据或所生成数据的顺序。例如,池化处理单元310和/或交错处理单元312可以被配置为将数据写入共享缓冲区,然后以不同的顺序读出相同的数据。在一些情况下,可以为每个单元分配共享缓冲区328的一部分,只有所述单元可以访问所述部分。在这些情况下,池化处理单元310和交错处理单元可能只能从它们已经写入的共享缓冲区328中读出数据。
张素重缩放处理单元314、316是被配置为对接收到的输入数据执行重缩放运算的硬件。如本领域的技术人员所知,对于处理一组值的硬件,每个值以数字格式表示。两种常见的数字格式是定点数格式和浮点数格式。如本领域的技术人员所知,定点数格式在基数点(例如,小数点或二进制点)之后具有固定数目的数位。相反,浮点数格式没有固定的基数点(即,可以“浮动”)。换句话讲,基数点可被放置在表示中的多个位置。虽然以浮点数格式表示NN的网络参数(例如,输入数据值、权重、偏差)可以允许产生更准确或更精确的输出数据,但是以浮点数格式在硬件中处理网络参数是复杂的,与以其他格式(例如,定点数格式)处理网络参数的硬件相比,这往往会增加硅面积、功耗、内存和带宽消耗以及硬件的复杂性。因此,NNA 300可以被配置为以定点数格式表示和处理NN的网络参数,以减少NNA的面积、功耗、内存和带宽消耗以及复杂性。
NNA 300可以支持网络参数(例如,输入数据值、权重、偏差)的一种或多种定点数格式,并且定点数格式可以在层的基础上或者甚至在部分层的基础上进行配置。例如,NNA300可以支持由固定整数指数exp和b位尾数m定义的定点数格式,使得值u等于u=2expm。在一些情况下,尾数m可以用二进制补码格式表示。然而,在其他情况下,可以使用其他带符号或无符号的整数格式。当使用这种定点数格式时,指数exp和尾数位数b只需要针对以所述数字格式表示的一组值存储一次。不同的网络参数集可以使用不同的尾数位长度m和/或不同的指数b来表示。
NNA 300可以替代地或另外支持仿射定点数格式——定义偏移量和缩放的定点数格式。仿射定点格式的一个示例是8位非对称定点(Q8A)格式。在一个示例中,Q8A格式由最小可表示数rmin、最大可表示数rmax和零点z定义,并且每个数由8位插值数dQbA表示。8位数字dQbA定义了最小和最大可表示数字之间的线性插值因子。在这种定点数格式的变型中,用于存储插值因子的位数可以在每个网络参数集的基础上进行配置。在这个变型中,位数是b,浮点值如等式(3)所示被近似:
在另一个示例中,Q8A格式可以由零点z定义,其将总是精确地映射到0、缩放因子和8位数字。在此示例中,浮点值如等式(4)所示被近似:
d浮动=(dQ8A-z)*缩放 (4)
在硬件处理单元的输入数据是仿射定点数格式的情况下,对于硬件来说,以使得输出数据不准确反映缩放和/或偏移量的方式来执行处理可能更具硬件效率。一般来说,以这种方式执行可能涉及缩放变化的运算可能是有效的。这种运算的示例包括但不限于卷积运算、加法运算和乘法运算。相比之下,诸如最大池化或平均池化的运算可能不会以这种方式执行,因为输入和输出缩放是相同的。因此,可以执行卷积运算的卷积处理单元和可以执行加法和乘法运算的逐元素运算处理单元可以被配置为以这种方式操作。在硬件处理单元被配置为以这种方式操作的情况下,硬件处理单元的输出然后可以被重新量化以将其置于正确的格式。
这种重新量化可以由张素重缩放处理单元314、316来执行。有许多已知的方法和技术用于将数据重新量化成仿射定点数格式。张素重缩放处理单元314、316可以被配置为使用任何已知的方法或技术来执行重新量化。由于多于一个活动硬件处理单元的输出数据可以被重新量化,所以在NNA 300中具有多个张素重缩放处理单元314、316允许在单个硬件传递过程中执行更多的运算。
当运算涉及仿射定点数格式的两个或更多个张量时,也可以使用重新量化,例如,当将多个张量连接在一起成为单个张量时,以使它们都具有相同的格式。
在一些情况下,每个张素重缩放处理单元314、316可配置为在每个张量的基础上或每个通道的基础上执行此重新量化。如上关于图2所描述,处理单元的输入数据通常是被称为张量的多维数据块。张量的每个平面称为通道,并且张量的每个元素称为张素。张素重缩放处理单元314、316能够在每张量的基础上(即所有输入数据值以相同的方式被量化或重新量化)或在每通道的基础上(即输入数据的每个通道可以以不同的方式被量化或重新量化)执行重缩放。在一些情况下,用于硬件传递过程的控制信息可以针对在硬件传递过程中活动的任何张素重缩放处理单元314、316指定所述张素重缩放处理单元314、316是执行每张量还是每通道重新量化。
张素重缩放处理单元314、316是被配置为执行每张量还是每通道重新量化可以取决于生成被发送到张素重缩放处理单元314、316的数据的处理模块的输入的格式。例如,如果卷积处理单元302接收用[scale_input,offset_input]量化的输入数据(例如,输入张量),并且期望用[scale_output,offset_output]量化输出数据,则取决于权重的格式,重新量化过程可以是每个通道或每个张量的。例如,如果所有的权重都用相同的参数[scale_weights,offset_weights]进行量化,则可以在每张量的基础上进行重新量化。然而,如果至少两个过滤器使用不同的参数进行量化,例如第一个过滤器使用参数[scale_weights1,offset_weights1]进行量化,并且第二个过滤器使用参数[scale_weights2,offset_weights2]进行量化,则因为输出数据(例如输出张量)的每个通道都是输入数据(输入张量)与过滤器卷积的结果,所以可以在每通道的基础上进行重新量化。对不同的过滤器使用不同的量化参数可以允许更好地量化过滤器,因为可以以更精细的粒度来选择过滤器参数。在一些情况下,可以仅对卷积处理单元302生成的输出执行每通道重新量化。
如上所述,在经典神经网络中,通常具有卷积层,后跟激活层。然而,也有可能是其他层后跟激活层。在每个硬件处理单元在硬件传递过程中只能使用一次的情况下,单个激活处理单元304可以限制可以在单个硬件传递过程中处理的运算的数目。例如,如果神经网络可以表示为卷积运算、激活运算、池化运算、激活运算、逐元素运算和激活运算,如果NNA只有一个激活处理单元,则这些运算必须在NNA的三个硬件传递过程中执行,例如,在NNA的第一个硬件传递过程中,可以执行卷积选项、第一个激活运算和池化运算,然后在NNA的第二个硬件传递过程中,可以执行第二个激活运算和逐元素运算,并且在NNA的第三个硬件传递过程中,可以执行最终激活运算。因此,在一些情况下,硬件处理单元中的一个或多个硬件处理单元可以包括逻辑(例如,箝位电路),所述逻辑被配置为选择性地对由所述硬件处理单元处理的数据执行ReLU运算。在一些示例中,一个或多个张素重缩放处理单元314、316、池化处理单元310和激活处理单元304可以包括选择性地对由所述硬件处理单元生成的数据执行ReLU运算的逻辑。尽管激活处理单元304可以包括可以被配置为对输入数据/张量执行多个激活函数中的一个激活函数的硬件,诸如查找表和插值逻辑,但是使用专用的低功率硬件(诸如箝位电路)来执行简单的激活运算(诸如ReLU运算)可能更节省功率和/或资源。用于执行ReLU运算的专用硬件单元也可以提高输出质量,因为它可以避免可能在截止点周围发生的插值问题。在激活处理单元304中具有专用硬件来执行ReLU运算还允许激活处理单元304在同一硬件传递过程中执行多个激活运算。由于ReLU运算是在NN中执行的最常见的非线性运算中的一种非线性运算,并且相对容易在硬件中实施,所以这可以显著增加可以在单个硬件传递过程中执行的运算的数目,而不会显著增加NNA 300的复杂性。
NNA 300还可以包括输出单元318,所述输出单元被配置为输出处理后的数据。例如,输出单元318可以将处理后的数据输出到存储器。在一些情况下,硬件传递过程可以与输出数据格式相关联,并且输出单元318可以被配置为在输出处理后的数据之前将处理后的数据转换成与硬件传递过程相关联的输出格式。
现在参考图4,示出了图3的交叉开关320的示例性实施方式。术语“交叉开关”在本文用来表示具有多个输入、多个输出和路由或交换逻辑的硬件块,所述逻辑可以选择性地将某些输入耦合或连接到某些输出。图3的交叉开关320包括多个输入端口或输入接口(由指向交叉开关320的箭头标识)、多个输出端口或输出接口(由指向远离交叉开关320的箭头标识)以及将输入端口连接到输出端口的多个多路复用器402。
交叉开关320的输入端口可以耦合到NNA的硬件处理单元或数据输入单元的输出端口,并且交叉开关320的输出端口可以耦合到NNA的硬件处理单元或数据输入单元的输入端口。
在图4所示的示例中,每个输出端口有一个多路复用器402,所述路复用器可以被称为主多路复用器或输出端口多路复用器402。每个主多路复用器402耦合到对应输出端口,并控制哪个输入端口连接或耦合到所述输出端口。因此,每个主多路复用器402驱动输出端口中的一个输出端口。例如,在图4中,有八个输出端口,因此有八个主多路复用器402。如本领域技术人员所知,多路复用器(“mux”)是一种硬件设备,它可以在几个输入信号之间进行选择,并将所选择的输入信号转发到输出线路。所述选择由一个或多个选择信号(未示出)驱动。在图4的交叉开关320中,多路复用器选择信号可以由控制逻辑(未示出)基于在每个硬件传递过程接收到的控制信息(即,标识要实施的硬件处理单元的多个流水线中的流水线的信息)来生成。
每个主多路复用器402连接到交叉开关320的一个或多个输入端口。在一些情况下,每个主多路复用器402可以连接到交叉开关320的每个输入端口,使得任何输入端口可以连接到任何输出端口。然而,如上关于图3所描述,对于哪些输入端口可以连接或耦合到哪些输出端口可能存在限制。因此,为了简化交叉开关320,只有输入端口的子集可以连接到一个或多个主多路复用器402。在一些情况下,每个主多路复用器可以仅连接到可以连接到或耦合到对应输出端口的输入端口。例如,如上所述,在一些情况下,NNA的每个单元在硬件传递过程中可能仅被使用一次,因此NNA的一个单元的输出端口不能被耦合到同一单元的输入端口,因为这将涉及一个单元在硬件传递过程中的不止一次使用。因此,用于耦合到NNA的单元的输入端口的交叉开关320的输出端口的主多路复用器402可以不耦合到交叉开关320的与所述单元的输出端口耦合的输入端口。例如,控制卷积处理单元的输入的多路复用器可能不接收卷积处理单元的输出作为输入。
在一些情况下,可以通过具有一个或多个预多路复用器408来简化交叉开关320的复杂性,当已知那些输入中的仅一个输入将在硬件传递过程中被传递到输出端口时,所述预多路复用器预多路复用一个或多个输入端口。具体来说,通过预复用多个输入端口,一个或多个主多路复用器可以少一个输入。例如,图3的NNA300包括输入缓冲区324,所述输入缓冲区可以在硬件传递过程中向卷积处理单元提供输入数据,或者向交叉开关320提供用于硬件传递过程的输入数据,但不能两者都提供。如果输入缓冲区向交叉开关320提供用于硬件传递过程的输入数据,则输入缓冲区324不能向卷积处理单元302提供输入数据,因此卷积处理单元302将不产生输出数据。然而,如果输入缓冲区向卷积处理单元302提供输入数据,则卷积处理单元302可以提供输出数据(在一些情况下,它可以存储所生成的数据用于后续的硬件传递过程)。因此,在硬件传递过程中,卷积处理单元302和输入缓冲区324中的仅一者可以向交叉开关320提供数据。因此,两个输入端口都不需要耦合到主多路复用器402。
在一些情况下,如图4所示,交叉开关320可以包括耦合到每个输入端口以缓冲从NNA的其他单元接收到的输入数据的寄存器或一组寄存器404,和/或耦合到每个输出端口以缓冲发送到NNA的其他单元的数据的寄存器或一组寄存器406。在这些情况下,其他单元(例如,处理单元和数据输入单元)可以在其输入和输出端口上具有对应的寄存器。在输入端口或输出端口被配置为使用握手信号接收和/或发送数据的情况下,对应的寄存器也可以被配置为存储/缓冲握手信息。
如上所述,NNA的每个单元(例如,处理单元或数据输入单元)可以被配置为以预定顺序(即,处理顺序)输出或接收张量的元素。一些单元可以仅支持一个处理顺序来接收和/或传输张量(即,一些单元可以被配置为根据单个处理顺序接收张量和/或根据单个处理顺序传输张量),而其他单元可以支持多个处理顺序来接收和/或传输张量(即,一些单元可以被配置为根据多个处理顺序中的任何一个处理顺序来接收张量和/或根据多个处理顺序中的任何一个处理顺序来传输张量)。由单元支持的用于接收张量的处理顺序可以不同于由所述单元支持的用于发送张量的处理顺序。例如,单元能够根据第一处理顺序接收张量,并根据不同的第二处理顺序传输张量。现在参考图5至图14,其示出了可以用于经由交叉开关320向另一个部件传输张量的示例性处理顺序。
具体来说,图5示出了可以被称为前端处理顺序的第一示例性处理顺序,其可以用于经由交叉开关320传输张量。在图5中,张量500的元素以元素的块或集合的方式传输。一起传输的一组元素可以被称为事务。一起传输的每组元素在图5中由实线箭头标识。传输元素集合的顺序由虚线标识。具体地说,在一组元素被传输之后,通过虚线链接到所述一组元素的所述一组元素被传输。例如,在传输了所述一组元素或块502之后,传输所述一组元素或块504。注意,在图5中没有明确标识被传输的张量500的所有元素集合。具体来说,在传输了所述一组元素或块508之后,传输更多元素或块的集合。根据本文的描述,对于本领域技术人员来说,张量500的剩余元素的传输顺序是显而易见的。如果张量500可以被描述为具有宽度W、高度H和通道或平面的数目C(也可以称为深度),如图5所示,则在前端处理顺序中,张量的元素以平面顺序、宽度顺序然后高度顺序传输。
如上所述,交叉开关320的每个输入和输出端口可以具有固定数目的数据通道(XBAR_PARALLELISM)。数据通道的数目定义了在同一周期内可以发送或接收的张量的元素的数目。在每个端口的通道的数目(XBAR_PARALLELISM)等于卷积处理单元302的卷积引擎的数目(CALC_BLOCKS)的情况下,根据前端处理顺序传输张量可以由图6的示例性方法600来描述。
方法600开始于步骤602,在所述步骤中,宽度计数器值w、高度计数器值h和平面计数器值c被初始化为0。方法600然后进行到步骤604,在所述步骤中,张量500的XBAR_PARALLELISM个元素的块被传输(例如,图5的块502)。元素块包括在不同宽度位置(宽度位置w到w+(XBAR_PARALLELISM-1))、相同高度位置(h)和同一平面(c)(例如,图5的块502)处的元素。方法600然后进行到步骤606,在所述步骤中,确定张量500是否包括另一平面(例如(C-1)>c?)。如果确定张量500包括另一平面,则方法600进行到步骤608。然而,如果确定张量500不包括另一平面,则方法600进行到步骤610。
在步骤608,计数器中的一个或多个计数器被调整以移动到下一个平面。这可以包括将平面计数器c递增一(例如c=c+1)。一旦平面计数器已经增加,方法600就返回到步骤604,在所述步骤中,传输来自下一个平面的张量的XBAR_PARALLELISM个元素的块,所述元素的块对应于相同的宽度位置(宽度位置w到w+(XBAR_PARALLELISM-1))和相同的高度位置(h)(例如,图5的块504)。因此,对每个平面重复步骤604,直到来自每个平面的XBAR_PARALLELISM个元素的相同块已经被传输。
在步骤610,一旦已经确定张量500的XBAR_PARALLELISM个元素的相同块已经针对所有平面被传输,就确定张量500在相同高度位置(h)的宽度维度上是否具有更多元素(例如(W-1)>(w+(XBAR_PARALLELISM-1))?)。如果确定张量500在相同高度位置(h)的宽度维度上具有更多元素,则方法600进行到步骤612。然而,如果确定张量500在相同高度(h)的宽度维度上不具有任何更多元素,则方法600进行到步骤614。
在步骤612,计数器中的一个或多个计数器被调整以从第一平面开始,在下一个宽度位置开始传输元素。这可以包括将宽度计数器w递增XBAR_PARALLELISM(例如w=w+XBAR_PARALLELISM),并设置平面计数器c归零(例如c=0)。方法600然后返回到步骤604,在所述步骤中,传输张量500的XBAR_PARALLELISM个元素的块,所述元素的块来自下一个宽度位置(例如,宽度位置w到w+(XBAR_PARALLELISM-1))和相同的高度位置(h)(例如,图5的块506)。因此,步骤610和612在相同高度位置(例如,相同行)迭代通过XBAR_PARALLELISM个元素的每个块。
在步骤614,一旦已经确定所有平面的张量的整行元素都已被传输,就确定张量在高度维度上是否具有更多元素(例如(H-1)>h?)。如果确定张量500在高度维度上具有更多元素,则方法600进行到步骤616。然而,如果确定张量500在高度维度上不具有任何更多元素,则方法600结束。
在步骤616,计数器中的一个或多个计数器被调整以从第一平面开始,开始传输来自下一行的元素。这可以包括将高度计数器h递增一(例如h=h+1),并设置宽度计数器w和平面计数器c归零(即,w=0,c=0)。方法600然后返回到步骤604,在所述步骤中,传输下一行的第一块(例如,图5的块508)。因此,图6的方法600迭代通过张量的平面、宽度然后是高度。
图6的示例性方法600描述了当交叉开关320的每个端口的数据通道的数目(XBAR_PARALLELISM)等于卷积处理单元中的卷积引擎的数目(CALC_BLOCKS)时的前端处理顺序。在交叉开关320的每个端口的数据通道的数目少于卷积引擎的数目的情况下,可以在移动到下一个通道之前传输同一行中的下一个元素的块。例如,在卷积引擎的数目是交叉开关320的每个端口的数据通道的数目的两倍(即,CALC_BLOCKS=2*XBAR_PARALLELISM)的情况下,图5的张量500的块506可以在图5的块504之前被传输。这在图7中示出。
参考图5至图7描述的前端处理顺序已经被证明在执行卷积运算时是有效的。这是因为它允许以有效的方式将数据提供给卷积引擎。具体来说,如申请人的GB专利2568086中所述,其允许将相同的过滤器并行应用于输入数据的多个窗口,所述专利的全部内容通过引用并入本文。然后输入数据可以保持静态,同时将不同的过滤器应用于所述输入数据。这可以节省将输入数据加载到卷积引擎中的功率。通常,应用于输入张量的过滤器越多,节省的功率就越多。
图8示出了可以被称为后端处理顺序的第二示例性处理顺序,其可以用于经由交叉开关320传输张量。在图8中,张量800的元素以元素的块或集合的方式传输。一起传输的一组元素可以被称为事务。一起传输的每组元素在图8中由实线箭头标识。传输元素集合的顺序由虚线标识。具体地说,在一组元素被传输之后,通过虚线链接到所述元素集合的所述一组元素被传输。例如,在传输了所述一组元素或块802之后,传输块804。注意,在图8中没有明确标识被传输的张量800的所有元素集合。具体来说,在传输所述一组元素或块808之后,传输另外的元素集合或块。根据本文的描述,对于本领域技术人员来说,张量800的剩余元素的传输顺序是显而易见的。如果张量800可以被描述为具有宽度W、高度H和通道或平面的数目C(也可以称为深度),如图8所示,则在后端处理顺序中,张量的元素以宽度顺序、平面顺序然后高度顺序传输。
如上所述,交叉开关320的每个输入和输出端口可以具有固定数目的数据通道(XBAR_PARALLELISM)。数据通道的数目定义了在同一周期内可以发送或接收的张量的元素的数目。此外,如上所述,共享缓冲区可以具有可以同时存储的单个位置的最大平面数目(NUM_PLANES)。在一些情况下,NUM_PLANES可以等于16,然而,对于本领域技术人员来说显而易见的是,这只是一个示例。在交叉开关320的每个端口的通道的数目(XBAR_PARALLELISM)等于共享缓冲区328的最大平面数目(NUM_PLANES)的情况下,根据后端处理顺序传输张量可以由图9的示例性方法900来描述。
方法900开始于步骤902,在所述步骤中,宽度计数器值w、高度计数器值h和平面计数器值c被初始化为0。方法900然后进行到步骤904,在所述步骤中,张量800的XBAR_PARALLELISM个元素的块被传输。元素块包括不同平面(平面c到c+(XBAR_PARALLELISM-1))中在相同的高度位置(h)和相同的宽度位置(w)(例如,图8的块802)处的元素。方法900随后进行到步骤906,在所述步骤中,确定张量800在相同高度(h)的宽度维度上是否具有更多元素(例如(w-1)>w?)。如果确定张量800在相同高度(h)的宽度维度上包括更多元素,则方法900进行到步骤908。然而,如果确定张量800在宽度维度上不包括更多元素,则方法900进行到步骤910。
在步骤908,计数器中的一个或多个计数器被调整以移动到下一个宽度位置。这可以包括将宽度计数器w递增一(例如w=w+1)并且方法900返回到步骤904,在所述步骤中,传输来自相同平面(平面c到c+(XBAR_PARALLELISM-1))和相同的高度位置(h)(例如,图8的块804)。因此,针对每个宽度位置重复步骤904,直到来自每个宽度位置的XBAR_PARALLELISM个元素的相同块已经被传输。
在步骤910,一旦已经确定张量800的XBAR_PARALLELISM个元素的相同块已经针对所有宽度位置被传输,则确定张量800是否具有更多平面(例如(C-1)>(c+(XBAR_PARALLELISM-1)?)。如果确定张量800具有更多平面,则方法900进行到步骤912。然而,如果确定张量800不具有任何更多平面,则方法900进行到步骤914。
在步骤912,计数器中的一个或多个计数器被调整以移动到下一组通道。这可以包括将平面计数器c递增XBAR_PARALLELISM(例如c=c+XBAR_PARALLELISM),并设置宽度计数器w归零(例如w=0)。方法900然后返回到步骤904,在所述步骤中,传输来自下一组平面(例如,平面c到c+(XBAR_PARALLELISM-1))在重量和高度位置(w,h)处的张量800的XBAR_PARALLELISM个元素的块(例如,图8的块806)。
在步骤914,一旦已经确定所有平面的张量800的整行元素已经被传输,就确定张量在高度维度上是否具有更多元素(例如(H-1)>h?还是有另一行?)。如果确定张量800在高度维度上具有更多元素,则方法900进行到步骤916。然而,如果已经确定张量800在高度维度上不具有任何更多元素,则方法900结束。
在步骤916,计数器中的一个或多个计数器被调整以从第一平面和第一宽度位置开始,移动到下一行。这可以包括将高度计数器h调整一(例如h=h+1),并设置宽度计数器w和平面计数器c归零(即,w=0,c=0)。方法900然后返回到步骤904,在所述步骤中,传输下一行的第一块(例如,图8的块808)。因此,图9的方法900迭代通过张量800的宽度、平面然后是高度。
图9的示例性方法900描述了当交叉开关320的每个端口的数据通道的数目(XBAR_PARALLELISM)等于可以一起存储在共享缓冲区中的平面的数目时的后端处理顺序。在交叉开关320的每个端口的数据通道的数目小于平面的数目的情况下,下一组平面的相同行和列中的元素可以在移动到下一行之前(即,在移动到下一宽度位置之前)被传输。例如,在平面的数目是交叉开关320的每个端口的数据通道的数目的两倍(即NUM_PLANES=2*XBAR_PARALLELISM)的情况下,图8的张量800的块806可以在图8的块804之前被传输。这在图10中示出。
参考图8至图10描述的后端处理顺序已经被证明对于执行2D池运算是有效的,因为2D池运算是平面的(即,它们是在通道基础上应用的)。通过按光栅顺序(即后端处理顺序)移动,可以重复使用列结果进行整行(row)或整行(line)的连续计算。
图11示出了可以被称为归一化部分后端处理顺序的第三示例性处理顺序,其可以被NNA的一个或多个部件用来经由交叉开关320传输张量。在图11中,张量1100的元素以元素的块或集合的方式传输。一起传输的一组元素可以被称为事务。一起传输的每组元素在图11中由实线箭头标识。传输元素集合的顺序由虚线标识。具体来说,在传输一组元素之后,通过虚线链接到所述元素集合的所述一组元素被传输。例如,在传输了所述一组元素或块1102之后,传输块1104。注意,在图11中没有明确标识被传输的张量1100的所有元素集合。具体来说,在传输了开始于点1108的所述一组元素之后,另外的元素集合或块被传输。根据本文的描述,对于本领域技术人员来说,张量1100的剩余元素的传输顺序是显而易见的。如果张量1100可以被描述为具有宽度W、高度H和通道或平面的数目C(也可以称为深度),如图11所示,则在归一化后端处理顺序中,张量的元素以宽度顺序、平面顺序然后高度顺序被传输,然而,在移动到下一组平面之前,只有预定数目(例如,CALC_BLOCKS)的不同宽度位置被传输。
如上所述,共享缓冲区可以具有能够同时存储的单个位置的最大平面数目(NUM_PLANES)。在一些情况下,NUM_PLANES可以等于16,然而,对于本领域技术人员来说显而易见的是,这只是一个示例。在可以同时传输的通道位置的数目等于NUM_PLANES,并且不同宽度位置的预定数目等于CALC_BLOCKS(即卷积引擎的数目)的情况下,根据归一化部分后端处理顺序传输张量可以由图12的示例性方法1200来描述。
方法1200开始于步骤1202,在所述步骤中,宽度计数器值w、高度计数器值h和平面计数器值c被初始化为0。方法1200然后进行到步骤1204,在所述步骤中,张量1100的NUM_PLANES个元素的块被传输。元素块包括不同平面(平面c到c+(NUM_PLANES-1))中在相同的高度位置(h)和相同的宽度位置(w)(例如,图11的块1102)处的元素。如果通道维度上的元素少于可以同时传输的元素(例如,作为同一事务的一部分),则可以为剩余值发送虚拟值,从而发送NUM_PLANES个元素。在这种情况下,传输器可以通知接收器哪些元素是无效的或者不应该被使用。方法1200然后进行到步骤1206,在所述步骤中,确定是否已经针对相同平面集合的CALC_BLOCKS个不同宽度(w)位置发送了NUM_PLANES个元素的块。可以确定已经针对相同平面集合的CALC_BLOCKS个不同宽度(w)位置发送了NUM_PLANES个元素的块,前提是在(w+1)mod(CALC_BLOCKS)=0(即,当(w+1)是CALC_BLOCKS的整数倍)的情况下。如果确定没有针对相同平面集合的CALC_BLOCKS个不同宽度(w)位置发送NUM_PLANES个元素的块,则方法1200进行到步骤1208。然而,如果确定已经针对相同平面集合的CALC_BLOCKS个不同宽度(w)位置发送了NUM_PLANES个元素的块,则方法1200进行到步骤1212。
在步骤1208,确定张量1100在相同高度(h)的宽度维度上是否具有更多元素(例如(W-1)>w?)。如果确定张量1100在相同高度(h)的宽度维度上包括更多元素,则方法1200进行到步骤1210。然而,如果确定张量1100在宽度维度上不包括更多元素(即,已经到达当前行的末尾),则方法1200进行到步骤1212。
在步骤1210,计数器中的一个或多个计数器被调整以移动到下一个宽度位置。这可以包括将宽度计数器w递增一(例如w=w+1)并且方法1200返回到步骤1204,在所述步骤中,传输来自相同平面(平面c到c+(NUM_PLANES-1))和相同的高度位置(h)(例如,图11的块1104)。因此,针对每个宽度位置重复步骤1204,直到已经针对CALC_BLOCKS个宽度(w)位置传输了NUM_PLANES个元素的相同块,或者已经到达当前行的末尾。
在步骤1212,一旦已经确定已经针对相同平面集合的CALC_BLOCKS个宽度(w)位置传输了NUM_PLANES个元素的相同块,或者已经到达当前行的末尾,则确定张量1100是否具有更多平面(例如(C-1)>(c+(NUM_PLANES-1)?)。如果确定张量1100具有更多平面,则方法1200进行到步骤1214。然而,如果确定张量1100不具有任何更多平面,则方法1200进行到步骤1216。
在步骤1214,计数器中的一个或多个计数器被调整以移动到下一组平面。这可以包括将平面计数器c递增NUM_PLANES(例如c=c+NUM_PLANES),并递减宽度计数器w以便指向高达CALC_BLOCKS个宽度(w)位置的块的开始(例如w=w-(w mod(CALC_BLOCKS))。方法1200然后返回到步骤1204,在所述步骤中,传输来自下一组平面(例如,平面c到c+(NUM_PLANES-1))在宽度和高度位置(w,h)处的张量1100的NUM_PLANES个元素的块(例如,图11的块1106)。换句话说,如果CALC_BLOCK等于4,如图11所示,则在已经针对四个不同的宽度位置(和相同的高度)传输NUM_PLANES个元素的相同块之后,针对新的一组通道的相同的四个宽度位置发送NUM_PLANES个元素。
在步骤1216,一旦已经确定同一行中的一组w个位置(即,相同的h个位置)的所有平面已经被传输,则确定在宽度(w)维度上是否存在更多元素(例如,(W-1)>w?))。换句话说,确定是否移动到下一组宽度(w)位置。如果确定张量1100在相同高度(h)的宽度维度上包括更多元素,则方法1200进行到步骤1218。然而,如果确定张量1100在宽度维度上不包括更多元素(即,已经发送了所有平面/通道的同一行中的所有元素),则方法1200进行到步骤1220。
在步骤1218,一旦已经确定已经发送了所有平面/通道的一组宽度(w)位置的所有元素,就将宽度计数器w递增一(即w=w+1)并且平面计数器c被设置归零(即c=0)。方法1200然后返回到步骤1204,在所述步骤中,不同平面(平面c到c+(NUM_PLANES-1))中在相同的高度位置(h)并且在下一个宽度位置(w)处的NUM_PLANES个元素的块被传输。
在步骤1220,一旦已经确定所有平面/通道的张量1100的整行元素已经被传输,就确定张量1100在高度维度上是否具有更多元素(例如(H-1)>h?还是有另一行?)。如果确定张量1100在高度(h)维度上具有更多元素(即,存在另一行),则方法1200进行到步骤1222。然而,如果已经确定张量1100在高度维度上不具有任何更多元素(即不再有行),则方法1200结束。
在步骤1222,计数器中的一个或多个计数器被调整以从第一宽度位置和第一平面开始,移动到下一行。这可以包括将高度计数器h递增一(例如h=h+1),并设置宽度计数器w和平面计数器c归零(即,w=0,c=0)。方法1200然后返回到步骤1204,在所述步骤中,传输下一行的第一块(例如,在图11的1108开始的块)。因此,图12的方法1200迭代通过张量1100的宽度、平面然后是高度,然而,与图9的方法900所示的后端处理顺序不同,在发送来自下一组平面的元素之前,仅发送NUM_PLANES个不同宽度位置。
图13示出了可以被称为光栅化前端处理顺序的第四示例性处理顺序,其可以被NNA的一个或多个部件用来经由交叉开关320传输张量。在图13所示的示例中,一起传输/接收的张量1300的一组元素(例如,作为同一事务的一部分)由实线箭头指示。例如,从a到b的箭头表示一起传输的张量1300的一组元素(例如,作为事务的一部分)。传输元素集合的顺序用字母表示。具体来说,每组元素(例如,每个事务)的开始和结束由字母(例如,a和b)标识。在所述一组元素被传输之后,所述一组元素中标识所述一组元素的开始的字母与标识最近传输的所述一组元素的结束的字母相匹配。例如,在由字母(a,b)标识的所述一组元素被传输之后,由字母(b,c)标识的所述一组元素被传输。类似地,在由字母(e,f)标识的所述一组元素被传输之后,由字母(f,g)标识的所述一组元素被传输。
如果张量1300可以被描述为具有宽度W、高度H和通道或平面的数目C(也可以称为深度),如图13所示,则在归一化后端处理顺序中,张量的元素以平面顺序、宽度顺序然后高度顺序传输,然而,不同于关于图5至图6描述的前端顺序,来自张量的不同行的元素可同时被传输(即,作为同一事务的一部分)。具体来说,当一行中剩余的元素少于XBAR_PARALLELISM个元素时,不是用虚拟值填充所述一组元素,而是从下一行的开始处选择剩余的元素。例如,如图13所示,当到达光栅化前端处理顺序中的点“l”时,当前行中的元素少于在单个事务中可以传输的元素(例如,当前行中的元素少于XBAR_PARLLELISM个元素),不是仅传输从l到m的元素,而是传输来自下一行的X个元素(即,从m到n的元素),其中X+元素l到m=XBAR_PARALLELISM。跨越多行张量的事务显示为两部分,并且这两部分由一个圆圈和一个字母连接。根据这个处理顺序传输张量可以提高吞吐量,但是实施起来可能更复杂。
根据光栅化前端处理顺序的张量元素的传输可以通过图14的方法1400来描述。
方法1400开始于步骤1402,其中宽度计数器值w、高度计数器值h、平面计数器值c和下一个行宽计数器值w1被初始化为0。然后,方法1400进行到步骤1404。
在步骤1404,确定当前行中是否至少剩下XBAR_PARALLELISM个元素(即w+XBAR_PARALLELISM≤W?)。如果确定在当前行(即,行h)中至少剩下XBAR_PARALLELISM个元素,则所述方法进行到步骤1406。然而,如果确定在当前行(即,行h)中没有至少剩下XBAR_PARALLELISM个元素,则所述方法进行到步骤1408。
在步骤1406,在已经确定当前行中至少剩下XBAR_PARALLELISM个元素之后,张量1300的XBAR_PARALLELISM个元素的块被传输。元素块包括在不同宽度位置(宽度位置w到w+(XBAR_PARALLELISM-1))、相同高度位置(h)和同一平面(c)(例如,图13的块1302)处的元素。一旦张量的这个元素块被传输,方法1400就进行到步骤1416。
在步骤1408,在已经确定当前行中剩余的元素少于XBAR_PARALLELISM个元素之后,确定张量中是否存在另一行(例如h<(H-1)?)。如果确定张量中没有另一行,则方法1400进行到步骤1410,在所述步骤中,传输所述行中的剩余元素。所传输的元素集合可以被填充(例如,用虚拟值),使得XBAR_PARALLELISM个元素被传输。在这种情况下,可以向接收器传输指示哪些元素无效或不被使用的信息。然而,如果确定张量中存在另一行,则方法1400进行到步骤1412和1414,在所述步骤中,当前行中的剩余元素与下一行的前X个元素一起传输,其中X+当前行中剩余的元素=XBAR_PARALLELISM(例如,由字母(l,m,n)定义的元素集合1304);并且下一个行宽计数器w1被设置为X。例如,如果16个元素可以一起发送(例如XBAR_PARALLELISM=16)并且当前行中只剩下8个元素,则这8个元素与下一行中的前8个元素一起传输。一旦传输了一组元素(并且可选地已经更新了下一个行宽计数器),方法1400就进行到步骤1416。
在步骤1416,在一组元素已经被传输之后(例如,在步骤1406、1410或1412),则确定在张量中是否存在另一个平面(例如c<(C-1)?)。如果确定在张量1300中存在另一个平面,则方法1400进行到步骤1418,在所述步骤中,将平面计数器值递增1(例如c=c+1)以移动到下一个平面,并且方法1400返回到步骤1404到1414,在所述步骤中,传输来自下一个平面的一组元素。然而,如果确定张量1400中没有更多的平面,这指示对于所有平面,在某些宽度位置处的所有元素都已被传输,则方法1400进行到步骤1420。
在步骤1420,确定当前行中是否还有任何更多元素尚未被传输(例如w+(XBAR_PARALLELISM–1)<W?)。如果确定当前行中有更多元素,则方法1400进行到步骤1422,在所述步骤中,计数器被调整以开始传输来自第一平面的下一组宽度位置的值。这可以包括将宽度位置计数器递增XBAR_PARALLELISM(即w=w+XBAR_PARALLELISM)并设置平面计数器归零(即c=0)。然而,如果确定当前行中没有更多元素,指示所有平面的相同行已经被传输,则方法1400进行到步骤1424。
在步骤1424,一旦已经确定所有平面/通道的张量1300的整行元素已经被传输,就确定张量1300在高度维度上是否具有更多元素(例如(H-1)>h?还是有另一行?)。如果确定张量1300在高度(h)维度上具有更多元素(即,存在另一行),则方法1400进行到步骤1426。然而,如果已经确定张量1300在高度维度上不具有任何更多元素(即不再有行),则方法1400结束。
在步骤1426,计数器被调整以开始传输来自第一平面的下一行的值。这可以包括将高度计数器值h递增1(例如h=h+1)到下一行,将宽度计数器值设置为下一个行宽计数器值(例如w=w1)(从行中尚未发送的第一个元素开始)并将平面计数器设置为0(例如c=0)以在第一平面处开始。
从图13和图14可以看出,除了到达行的末尾时之外,光栅化前端处理顺序与参考图5至图6描述的光栅化前端处理顺序相同。在图5至图6的前端处理顺序中,只有同一行中的元素被一起传输(例如,在同一事务或同一组元素中)。因此,即使所述行中剩余的元素少于可以一起传输的元素(例如,在同一事务或同一组元素中),也仅传输那些元素。相反,在图13和图14的光栅化前端处理顺序中,不同行中的元素可以一起传输(例如,在同一事务或同一组元素中)。因此,如果一行中剩余的元素少于可以一起传输的元素,则这些元素将与下一行中的元素一起传输(如果有另一行)。
在一些情况下,在硬件传递过程中穿过交叉开关320的张量可以处于前端处理顺序,除非池化处理单元在硬件传递过程中是活动的。具体来说,池化处理单元可以被配置为以后端处理顺序输出张量。在这种情况下,如果卷积处理单元302在池化处理单元之后处理数据,则卷积处理单元302能够将输出转换回前端处理顺序。
表6示出了可以由图3的NNA 300的单元支持的处理顺序的示例。显而易见的是,这只是一个示例。在其他示例中,支持前端处理顺序的NNA 300的一个或多个单元也可以支持光栅化前端处理顺序。
表6
现在参考图15,其示出了图3的卷积处理单元302的示例性实施方式。在这个示例中,卷积处理单元302包括多个卷积引擎1502、多个累加器1504和累加缓冲区1506。
每个卷积引擎1502包括硬件逻辑,所述硬件逻辑被配置为接收表示过滤器的全部或一部分的一组权重{W1,W2…,W8},以及表示输入数据的窗口的全部或一部分的一组输入数据值{D1,D2,…,D8},并对接收到的权重和输入数据值进行乘积累加计算。在一些示例中,如图16所示,每个卷积引擎1502可包括多个乘法器1602,每个乘法器被配置为将权重(Wi)和对应的输入数据值(Di)相乘以产生乘法输出值。乘法器1602之后是形成加法器树的多个加法器1604,以计算乘法输出的总和。在图16的示例中,卷积引擎1502包括八个乘法器1602,但在其他示例中,可存在更多或更少的乘法器。例如,在一些情况下,可能有128个乘法器。通常,如果有Z个乘法器,加法器树包括Z-1个加法器。图15的示例性卷积处理单元302包括四个卷积引擎1502,然而,对于本领域技术人员来说显而易见的是,这只是一个示例并且可以只有一个卷积引擎,可以有两个卷积引擎,或者可以有两个以上的卷积引擎。
由于卷积引擎1502可能要经过一个以上的硬件传递过程来生成完整的过滤器结果(例如,因为卷积引擎可能仅接收和处理过滤器权重的一部分和/或循环中窗口的输入数据值的一部分),所以卷积处理单元302可以包括多个累加器1504。卷积引擎的传递过程包括接收一组权重和一组输入数据值,并对其执行乘积累加运算。每个累加器1504接收一个卷积引擎1502的输出,并且将所述输出添加到与相同过滤器相关的先前卷积引擎输出。由于卷积引擎1502可能不在连续的循环中生成或产生与相同过滤器相关的输出,因此一个或多个过滤器的部分结果可被存储在累积缓冲区1506中,然后在每个循环中可由累积缓冲区1506将适当的部分结果提供给累加器1504。
如上所述,在一些情况下,输入缓冲区324可以被实施为多个存储体。在这些情况下,每个卷积引擎可以有一个多路复用器(未示出),所述多路复用器耦合到输入缓冲区的每个存储体,以允许存储在任何存储体中的数据被选择性地引导到任何卷积引擎。
现在参考图17,其示出了用于配置具有可配置流水线的神经网络加速器(例如图3的神经网络加速器300)以处理输入数据的示例性方法1700。神经网络加速器包括多个硬件处理单元和耦合到每个硬件处理单元的交叉开关。方法1700可以由基于计算的设备,诸如但不限于以下关于图18描述的基于计算的设备1800来实施。例如,可能存在其上存储有计算机可读指令的计算机可读存储介质,所述计算机可读指令当在基于计算的设备处执行时使得所述基于计算的设备执行图17的方法1700。
方法1700开始于框1702,其中获得将由神经网络加速器对一组输入数据执行的一个或多个神经网络运算的序列。如上所述,软件工具可以将神经网络中的多个神经网络运算划分成多个神经网络运算序列,每个神经网络运算序列可以在硬件传递过程中被处理。一旦获得了将由神经网络加速器对输入数据执行的一个或多个神经网络运算的序列,方法1700就进行到框1704。
在框1704,从多个硬件处理单元中选择一组硬件处理单元来执行一个或多个神经网络运算。所述一组硬件处理单元可以包括所有多个硬件处理单元或者仅包括硬件处理单元的子集。所述一组硬件处理单元将是活动的硬件处理单元。基于序列中的一个或多个神经网络处理运算来选择所述一组硬件处理单元。例如,如果神经网络运算序列包括卷积运算和激活运算,则所述一组硬件处理单元可以包括执行卷积运算的卷积处理单元和执行激活运算的激活处理单元。相反,如果神经网络运算序列包括池化运算和卷积运算,则所述一组硬件处理单元可以包括池化处理单元和卷积处理单元。一旦已经选择了所述一组硬件处理单元,方法1700就进行到框1706。
在框1706,确定所选的一组硬件处理单元的顺序,以根据所述序列执行一个或多个神经网络运算。例如,如果所述序列包括卷积运算,后跟激活运算,并且所述一组硬件处理单元包括卷积处理单元和激活处理单元,则可以确定激活处理单元在顺序上位于卷积处理单元之后,使得神经网络运算将以所识别的序列完成。在一些示例中,可能存在关于NNA的哪些硬件处理单元可以使用交叉开关彼此连接的限制,如以上参考表1至表4更详细描述的。在这样的示例中,实施用于配置具有可配置流水线的神经网络加速器的方法的基于计算的设备可以在存储器中存储预定义的一组限制,并且所述方法可以读取预定义的一组限制,并且确定所选的一组硬件处理单元的顺序,使得不违反所述限制,并且只有硬件处理单元的有效组合才能使用交叉开关来连接。一旦确定了所选的所述一组硬件处理单元的顺序,所述方法就进行到框1708。
在框1708,向神经网络加速器提供控制信息,所述控制信息使得神经网络加速器的交叉开关以确定的顺序形成所选的所述一组硬件处理单元的流水线,以处理输入数据。如上所述,在一些情况下,控制信息可以包括标识所选的所述一组硬件处理单元(例如,活动处理单元)的信息和标识所选的所述一组硬件处理单元的所确定顺序的信息。响应于接收到这个信息,交叉开关可以被配置为确定哪些输入端口连接到哪些输出端口以实施所识别的流水线。在其他情况下,控制信息可以包括显式信息,所述信息标识交叉开关的哪些输入端口将被连接到交叉开关的哪些输出端口以形成流水线。如上所述,在一些情况下,神经网络加速器可以具有用于交叉开关的每个输出端口的寄存器,并且向神经网络加速器提供控制信息可以包括使得值被写入每个寄存器,所述值标识交叉开关的哪个输入端口将被连接到对应的输出端口。每个输入端口可以被分配一个编号,并且写入寄存器的值可以是要连接到对应输出端口的输入端口的编号。例如,如果输出端口要连接到输入端口3,则值3可以被写入所述输出端口的寄存器。
对于本领域技术人员来说显而易见的是,方法1700只是示例,并且在其他示例中,所述方法的一个或多个框可以同时执行或者作为一个步骤的一部分执行。
在一些情况下,在向神经网络加速器提供控制信息之前,可以首先验证控制信息(即,可以确定控制信息是有效的)。在一些情况下,只有当第一硬件处理单元的输出将作为第二硬件处理单元的输入时,才可以确定控制信息有效,控制信息指示耦合到第一硬件处理单元的输出的交叉开关的输入端口将被连接或耦合到交叉开关的与第二硬件处理单元的输入耦合的输出端口。在另外的示例中,上面参考表1至表4描述的限制也可以用于验证控制信息是有效的。
在一些情况下,选择所述一组硬件处理单元,使得一个或多个神经网络运算的序列可以通过仅使用所述一组中的硬件处理单元中的每一个硬件处理单元一次来执行。
如上所述,在一些情况下,交叉开关可以具有多个数据输入单元。在这些情况下,图17的方法可以还包括基于输入和/或要实施的流水线的一个或多个特征,选择多个数据输入单元中的一个数据输入单元来将输入数据加载到神经网络加速器中。例如,如上所述,在一些情况下,如果卷积处理单元不在所述一组硬件处理单元中,或者不是顺序中的第一个硬件处理单元,则通过辅助数据输入单元将输入数据加载到神经网络加速器中可能更有效。控制信息然后可以被配置为包括标识所选数据输入单元的信息。
如上所述,在一些情况下,一个或多个硬件处理单元可以支持用于发送和/或接收张量的多个处理顺序。在这些情况下,图17的方法可以还包括选择由所述一组硬件处理单元中的一个或多个硬件处理单元使用的处理顺序,用于基于流水线传输或接收张量。然后,控制信息可以被配置为包括标识所选处理顺序的信息,所述信息使得所述一组中的一个或多个处理单元使用所选处理顺序来传输或接收张量。
测试数据
测试表明,具有如本文描述的可配置硬件流水线的NNA可以提高某些NN的NNA的性能和/或功耗。其中具有可配置硬件流水线的NNA已经显示出在性能和/或功耗方面的显著改进的示例性NN是Inception V3神经网络。Inception V3包括数个初始小区,所述小区包括若干分支,并且一个分支包括池化层,后跟1×1卷积层。在具有固定硬件流水线的NNA中,卷积处理单元(直接或间接)后跟池化处理单元,这样的层组合将在至少两个硬件传递过程中执行——在第一个硬件传递过程中,将执行或处理池化层,并且在第二个硬件传递过程中,将执行或处理卷积层。具有可配置硬件流水线的NNA可以在单个硬件传递过程中执行这样的层组合,因为它允许在同一硬件传递过程中在卷积层之前执行或处理池化层。
图18示出了示例性的基于计算的设备1800的各种部件,所述基于计算的设备可被实施为任何形式的计算和/或电子设备,并且在所述基于计算的设备中可以实施本文描述的方法的实施方案。
基于计算的设备1800包括一个或多个处理器1802,所述处理器可以是微处理器、控制器或任何其他合适类型的处理器,用于处理计算机可执行指令以控制设备的操作,以便配置神经网络加速器来处理输入数据。在一些示例中,例如在使用片上系统架构的情况下,处理器1802可以在硬件(而不是软件或固件)中包括一个或多个固定功能块(也被称为加速器),所述固定功能块实施配置神经网络加速器以处理输入数据的方法的一部分。可以在基于计算的设备上提供包括操作系统1804的平台软件或任何其他合适的平台软件,以使应用软件能够在所述设备上执行。
可以使用可由基于计算的设备1800访问的任何计算机可读介质来提供计算机可执行指令。计算机可读介质可以包括例如计算机存储介质,诸如存储器1806和通信介质。诸如存储器1806的计算机存储介质(即非暂时性机器可读介质)包括以用于存储诸如计算机可读指令、数据结构或程序模块或其他数据的信息的任何方法或技术实施的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于RAM、ROM、EPROM、EEPROM、闪存存储器或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光学存储设备、磁带盒、磁带、磁盘存储或其他磁性存储设备,或可用于存储信息以供计算设备访问的任何其他非传输介质。相反,通信介质可以在调制数据信号(诸如载波或者其他传输机制)中体现计算机可读指令、数据结构、程序模块或其他数据。如本文所定义,计算机存储介质不包括通信介质。尽管在基于计算的设备1800内示出了计算机存储介质(即,非暂时性机器可读介质,例如存储器1806),但是应当理解,存储器可以是分布式的或位于远程的,并且可以经由网络或其他通信链路(例如,使用通信接口1808)来访问。
基于计算的设备1800还包括输入/输出控制器1810,所述输入/输出控制器被布置为将显示信息输出到显示设备1812,所述显示设备可以与基于计算的设备1800分离或成一体。显示信息可以提供图形用户界面。输入/输出控制器1810还被布置为接收和处理来自一个或多个设备(诸如用户输入设备1814(例如,鼠标或键盘))的输入。此用户输入可用于启动神经网络加速器的配置。在一个实施方案中,如果显示设备1812是触敏显示设备,则其也可以充当用户输入设备1814。输入/输出控制器1810还可以将数据输出到除显示设备之外的设备,例如本地连接的打印设备(图18中未示出)。
图19示出了可在其中实施本文描述的神经网络加速器的计算机系统。计算机系统包括CPU 1902、GPU 1904、存储器1906和其他设备1914,诸如显示器1916、扬声器1918和相机1920。神经网络加速器1924(其可以是本文描述的任何神经网络加速器(例如,图3的神经网络加速器300))在GPU 1904上实施。计算机系统的部件可经由通信总线1922彼此进行通信。在其他示例中,神经网络加速器1924可以在CPU 1902上实施,或者独立地连接到通信总线1922。
图3、图4、图15和图16的神经网络加速器300、交叉开关320、卷积处理单元302和卷积引擎1502被示为包括数个功能块。这仅仅是示意性的,并且不旨在限定这类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式来提供。应当理解,本文描述的由神经网络加速器、交叉开关、卷积处理单元或卷积引擎形成的中间值不需要由所述部件在任何点物理生成,并且可以仅表示方便地描述由所述部件在其输入与输出之间执行的处理的逻辑值。
本文描述的神经网络加速器、交叉开关、卷积处理单元和卷积引擎可以包括在集成电路上的硬件中。本文描述的神经网络加速器可以被配置为执行本文描述的任何方法。一般来说,上文描述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如固定逻辑电路系统)或它们的任何组合中实施。本文中可以使用术语“模块”、“功能性”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或它们的任何组合。在软件实施方式的情况下,模块、功能性、部件、元件、单元、块或逻辑表示程序代码,当在处理器上被执行时,所述程序代码执行指定任务。本文中所描述的算法和方法可由执行代码的一个或多个处理器执行,所述代码使得处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存存储器、硬盘存储器,以及可使用磁性、光学和其他技术来存储指令或其他数据并且可由机器访问的其他存储器设备。
如本文中所使用的术语计算机程序代码和计算机可读指令是指用于处理器的任何种类的可执行代码,包括以机器语言、解译语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用诸如C、Java或OpenCL的编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解译、编译、运行时,这些软件、固件、脚本、模块或库使得支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。
处理器、计算机或计算机系统可以是任何种类的设备、机器或专用电路,或它们的具有处理能力以使得其可执行指令的集合或部分。处理器可以是任何种类的通用或专用处理器,诸如CPU、GPU、NNA、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可包括一个或多个处理器。
本发明还意图涵盖限定如本文描述的硬件的配置的软件,诸如硬件描述语言(HDL)软件,用于设计集成电路或用于配置可编程芯片以执行所要功能。也就是说,可以提供一种在其上编码有呈集成电路定义数据集形式的计算机可读程序代码的计算机可读存储介质,当在集成电路制造系统中处理(即,运行)时,所述计算机可读程序代码将所述系统配置成制造被配置为执行本文描述的方法中的任一种方法的神经网络加速器,或者制造包括本文描述的任何装置的神经网络加速器。集成电路定义数据集可以是例如集成电路描述。
因此,可以提供一种在集成电路制造系统处制造如本文描述的神经网络加速器的方法。此外,可以提供一种集成电路定义数据集,当在集成电路制造系统中处理时,所述集成电路定义数据集使得执行制造神经网络加速器的方法。
集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包括作为寄存器传输级(RTL)代码,作为高级电路表示法(诸如Verilog或VHDL),以及作为低级电路表示法(诸如OASIS(RTM)和GDSII)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如RTL)可在计算机系统处进行处理,所述计算机系统被配置为用于在软件环境的上下文中产生集成电路的制造定义,所述软件环境包括电路元件的定义以及用于组合这些元件以便产生由所述表示法如此定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
现在将参考图20描述在集成电路制造系统处对集成电路定义数据集进行处理以便将所述系统配置成制造神经网络加速器的示例。
图20示出了集成电路(IC)制造系统2002的示例,所述IC制造系统被配置为制造如本文的任何示例中描述的神经网络加速器(或其任何部件或单元)。特别地,IC制造系统2002包括布局处理系统2004和集成电路生成系统2006。IC制造系统2002被配置为接收IC定义数据集(例如,如在本文的任何示例中描述的那样定义神经网络加速器(或其任何部件或单元)),处理IC定义数据集,并根据IC定义数据集生成IC(例如,所述IC包括如在本文的任何示例中描述的神经网络加速器(或其任何部件或单元))。IC定义数据集的处理将IC制造系统2002配置成制造包括如在本文的任何示例中描述的神经网络加速器(或其任何部件或单元)的集成电路。
布局处理系统2004被配置为接收和处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定要生成的电路的门级表示,例如就逻辑部件(例如NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统2004已经确定电路布局时,其可将电路布局定义输出到IC生成系统2006。电路布局定义可以是例如电路布局描述。
如本领域已知的,IC生成系统2006根据电路布局定义来生成IC。例如,IC生成系统2006可实施用以生成IC的半导体设备制造工艺,所述半导体设备制造工艺可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可以呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成IC。可替代地,提供给IC生成系统2006的电路布局定义可呈计算机可读代码的形式,IC生成系统2006可使用所述计算机可读代码来形成用于生成IC的合适的掩模。
由IC制造系统2002执行的不同过程可全部在一个位置例如由一方来实施。替代地,IC制造系统2002可以是分布式系统,使得一些过程可以在不同位置执行,并且可以由不同方来执行。例如,以下阶段中的一些可以在不同位置和/或由不同各方来执行:(i)合成表示IC定义数据集的RTL码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
在其他示例中,在集成电路制造系统处对集成电路定义数据集的处理可以将所述系统配置为制造神经网络加速器(或其任何部件或单元),而无需处理IC定义数据集来确定电路布局。举例来说,集成电路定义数据集可以定义诸如FPGA的可重新配置的处理器的配置,并且对所述数据集进行的处理可以将IC制造系统配置成(例如,通过将配置数据加载到FPGA)生成具有所述所定义配置的可重新配置的处理器。
在一些实施方案中,当在集成电路制造系统中被处理时,集成电路制造定义数据集可使得集成电路制造系统产生如本文中描述的设备。例如,通过集成电路制造定义数据集以上文关于图20所描述的方式对集成电路制造系统进行配置可使得如本文中描述的设备得以制造。
在一些示例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图20中所展示的示例中,IC生成系统还可由集成电路定义数据集配置成在制造集成电路时,根据在集成电路定义数据集处定义的程序代码将固件加载到所述集成电路上,或以其他方式向集成电路提供与集成电路一起使用的程序代码。
与已知的实施方式相比,在本申请中阐述的概念在设备、装置、模块和/或系统中(以及在本文中实施的方法中)的实施方式可以改进性能。性能改进可包括计算性能提高、等待时间减少、吞吐量增大和/或功耗减小中的一者或多者。在制造这种设备、装置、模块和系统(例如在集成电路中)期间,可在性能改进与物理实施方式之间进行权衡,从而改进制造方法。例如,可在性能改进与布局面积之间进行权衡,从而匹配已知实施方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在设备、装置、模块和/或系统的元件之间共享功能块来完成。相反,本申请中所阐述的引起设备、装置、模块和系统的物理实施方式的改进(诸如硅面积减小)的概念可与性能提高进行权衡。这可以例如通过在预定义面积预算内制造模块的多个实例来完成。
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个这类特征的任何组合,其程度使得这类特征或组合能够鉴于本领域的技术人员的普通常识基于本说明书整体来实施,而不管这类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域技术人员将清楚,可以在本发明的范围内进行各种修改。
Claims (20)
1.一种用于配置神经网络加速器以处理输入数据的计算机实施的方法(1700),所述神经网络加速器包括多个硬件处理单元和耦合到所述多个硬件处理单元中的每个硬件处理单元的交叉开关,每个硬件处理单元包括加速对接收到的数据执行一个或多个神经网络运算的硬件,所述方法(1700)包括:
获得将由所述神经网络加速器对所述输入数据执行的一个或多个神经网络运算的序列(1702);
从所述多个硬件处理单元中选择一组硬件处理单元来执行所述一个或多个神经网络运算(1704);
确定所选的一组硬件处理单元的顺序,以根据所述序列执行所述一个或多个神经网络运算(1706);和
向所述神经网络加速器提供控制信息,所述控制信息使得所述神经网络加速器的所述交叉开关以确定的顺序形成所述所选的一组硬件处理单元的流水线,以处理所述输入数据(1708)。
2.如权利要求1所述的方法(1700),其中所述控制信息包括标识所述所选的一组硬件处理单元的信息和标识所述所选的一组硬件处理单元的所述确定的顺序的信息。
3.如权利要求1所述的方法(1700),其中所述交叉开关包括多个输入端口和多个输出端口,并且所述控制信息包括标识所述纵横开关的哪些输入端口将被连接到所述纵横开关的哪些输出端口以形成所述流水线的信息。
4.如权利要求3所述的方法(1700),其中所述神经网络加速器包括用于每个输出端口的寄存器,并且向所述神经网络加速器提供所述控制信息包括使得值被写入每个寄存器,所述值标识所述多个输入端口中的哪个输入端口将被连接到对应的输出端口。
5.如权利要求4所述的方法(1700),其中每个输入端口被分配一个编号,并且写入寄存器的所述值是要连接到所述对应的输出端口的所述输入端口的所述编号。
6.如权利要求4或权利要求5所述的方法(1700),其中当所述多个硬件处理单元中的硬件处理单元不来自所述一组硬件处理单元的一部分时,则将预定值写入与连接到所述硬件处理单元的所述输出端口相对应的所述寄存器,以指示所述硬件处理单元将被禁用。
7.如权利要求3至权利要求6中任一项所述的方法(1700),所述方法还包括在向所述神经网络加速器提供所述控制信息之前确定所述控制信息是否有效,并且只有在确定所述控制信息有效的情况下才向所述神经网络加速器提供所述控制信息。
8.如权利要求7所述的方法(1700),其中只有当第一硬件处理单元的输出将作为第二硬件处理单元的输入时,才确定所述控制信息有效,所述控制信息指示耦合到所述第一硬件处理单元的所述输出的所述交叉开关的所述输入端口将被连接到所述交叉开关的与所述第二硬件处理单元的所述输入耦合的所述输出端口。
9.如权利要求1至权利要求8中任一项所述的方法(1700),所述方法还包括从存储器中读取预定义的一组限制,所述预定义的一组限制定义了哪些硬件处理单元能够有效地相互连接,并且其中确定所述所选的一组硬件处理单元的顺序包括确定所述顺序,使得不违反所述限制,并且只有硬件处理单元的有效组合才能使用所述交叉开关来连接。
10.如权利要求1至权利要求9中任一项所述的方法(1700),其中选择所述一组硬件处理单元,使得所述一组硬件处理单元中的每个硬件处理单元在执行一个或多个神经网络运算的所述序列时仅使用一次。
11.如权利要求1至权利要求10中任一项所述的方法(1700),其中所述神经网络加速器包括被配置为将所述输入数据加载到所述神经网络加速器中的多个数据输入单元,并且所述方法(1700)还包括基于所述输入数据和/或所述流水线的一个或多个特征选择所述多个数据输入单元中的一个数据输入单元以将所述输入数据加载到所述神经网络加速器中,并且所述控制信息包括识别所选数据输入单元的信息。
12.如权利要求1至权利要求11中任一项所述的方法(1700),其中所述组中的所述硬件处理单元中的至少一个硬件处理单元能够配置为以多个可选处理顺序中的所选处理顺序传输或接收张量,并且所述方法还包括基于所述流水线选择将由所述至少一个处理单元中的一个或多个处理单元用于传输或接收张量的处理顺序,并且其中所述控制信息包括标识所述所选处理顺序的信息。
13.如权利要求1至权利要求12中任一项所述的方法(1700),其中所述控制信息还包括标识将由所述一组硬件处理单元中的所述硬件处理单元中的一个或多个硬件处理单元实施的函数和/或一个或多个运算的信息。
14.如权利要求1至权利要求13中任一项所述的方法(1700),所述方法还包括:
获得将由所述神经网络加速器对第二输入数据执行的一个或多个神经网络运算的第二序列(1702);
从所述多个硬件处理单元中选择第二一组硬件处理单元来执行所述第二序列的所述一个或多个神经网络运算(1704);
确定所选的第二一组硬件处理单元的第二顺序,以根据所述第二序列执行所述一个或多个神经网络运算(1706);和
向所述神经网络加速器提供第二控制信息,所述第二控制信息使得所述神经网络加速器的所述交叉开关以确定的第二顺序形成所述所选的第二一组硬件处理单元的第二流水线,以处理所述第二输入数据(1708);
其中所述第二一组硬件处理单元与所述一组硬件处理单元相同,并且所述确定的第二顺序不同于所述确定的顺序。
15.如权利要求1至权利要求14中任一项所述的方法(1700),其中所述多个硬件处理单元包括以下中的一者或多者:卷积处理单元(302),其被配置为加速输入数据与权重数据之间的卷积运算;激活处理单元(304),其被配置为加速将激活函数应用于数据;逐元素运算处理单元(306),其被配置为加速对一组数据执行一个或多个逐元素运算;池化处理单元(310),其被配置为加速对数据应用池化函数;归一化处理单元(308),其被配置为加速将归一化函数应用于数据;以及交错处理单元(312),其被配置为加速数据的重排。
16.一种配置神经网络加速器以实施神经网络的方法,所述神经网络包括多个层,每个层被配置为接收输入数据并对接收到的输入数据执行一个或多个神经网络运算,所述方法包括:
将所述神经网络的所述神经网络运算分组为一个或多个神经网络运算序列,每个神经网络运算序列能够由硬件处理元件的组合执行;和
针对每个神经网络运算序列执行如权利要求1至权利要求15中任一项所述的方法(1700)。
17.一种计算机可读代码,所述计算机可读代码被配置为使得在运行所述代码时执行如权利要求1至权利要求16中任一项所述的方法。
18.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机可读指令,所述计算机可读指令当在计算机系统处执行时使得所述计算机系统执行如权利要求1至权利要求16中任一项所述的方法。
19.一种用于配置神经网络加速器以处理输入数据的基于计算的设备(1800),所述神经网络加速器包括多个硬件处理单元和耦合到所述多个硬件处理单元中的每个硬件处理单元的交叉开关,每个硬件处理单元包括加速对接收到的数据执行一个或多个神经网络运算的硬件,所述基于计算的设备(1800)包括一个或多个处理器(1802),所述一个或多个处理器被配置为:
获得将由所述神经网络加速器对所述输入数据执行的一个或多个神经网络运算的序列(1702);
从所述多个硬件处理单元中选择一组硬件处理单元来执行所述一个或多个神经网络运算(1704);
确定所选的一组硬件处理单元的顺序,以根据所述序列执行所述一个或多个神经网络运算(1706);和
向所述神经网络加速器提供控制信息,所述控制信息使得所述神经网络加速器的所述交叉开关以确定的顺序形成所述所选的一组硬件处理单元的流水线,以处理所述输入数据(1708)。
20.一种基于计算的设备(1800),所述基于计算的设备包括一个或多个处理器(1802),所述一个或多个处理器被配置为执行如权利要求1至权利要求16中任一项所述的方法。
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2114052.0 | 2021-09-30 | ||
GB2114049.6A GB2611521B (en) | 2021-09-30 | 2021-09-30 | Neural network accelerator with a configurable pipeline |
GB2114047.0A GB2611520B (en) | 2021-09-30 | 2021-09-30 | Methods and devices for configuring a neural network accelerator with a configurable pipeline |
GB2114047.0 | 2021-09-30 | ||
GB2114049.6 | 2021-09-30 | ||
GB2114052.0A GB2611522B (en) | 2021-09-30 | 2021-09-30 | Neural network accelerator with a configurable pipeline |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115904696A true CN115904696A (zh) | 2023-04-04 |
Family
ID=83438383
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211208054.8A Pending CN115904696A (zh) | 2021-09-30 | 2022-09-30 | 用于配置具有可配置流水线的神经网络加速器的方法和设备 |
CN202211211240.7A Pending CN115906965A (zh) | 2021-09-30 | 2022-09-30 | 具有可配置流水线的神经网络加速器 |
CN202211208053.3A Pending CN115906964A (zh) | 2021-09-30 | 2022-09-30 | 具有可配置流水线的神经网络加速器 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211211240.7A Pending CN115906965A (zh) | 2021-09-30 | 2022-09-30 | 具有可配置流水线的神经网络加速器 |
CN202211208053.3A Pending CN115906964A (zh) | 2021-09-30 | 2022-09-30 | 具有可配置流水线的神经网络加速器 |
Country Status (3)
Country | Link |
---|---|
US (3) | US20230177321A1 (zh) |
EP (3) | EP4160485A1 (zh) |
CN (3) | CN115904696A (zh) |
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 |
WO2018058426A1 (zh) * | 2016-09-29 | 2018-04-05 | 清华大学 | 硬件神经网络转换方法、计算装置、编译方法和神经网络软硬件协作系统 |
US11023807B2 (en) * | 2016-12-30 | 2021-06-01 | Microsoft Technology Licensing, Llc | Neural network processor |
GB2566702B (en) | 2017-09-20 | 2021-11-03 | Imagination Tech Ltd | Hardware implementation of a deep neural network with variable output data format |
GB2568086B (en) | 2017-11-03 | 2020-05-27 | Imagination Tech Ltd | Hardware implementation of convolution layer of deep neutral network |
US11907827B2 (en) * | 2019-06-28 | 2024-02-20 | Intel Corporation | Schedule-aware tensor distribution module |
-
2022
- 2022-09-30 EP EP22199243.1A patent/EP4160485A1/en active Pending
- 2022-09-30 CN CN202211208054.8A patent/CN115904696A/zh active Pending
- 2022-09-30 CN CN202211211240.7A patent/CN115906965A/zh active Pending
- 2022-09-30 US US17/957,089 patent/US20230177321A1/en active Pending
- 2022-09-30 EP EP22199263.9A patent/EP4160486A1/en active Pending
- 2022-09-30 EP EP22199264.7A patent/EP4160487A1/en active Pending
- 2022-09-30 CN CN202211208053.3A patent/CN115906964A/zh active Pending
- 2022-09-30 US US17/956,985 patent/US20230177318A1/en active Pending
- 2022-09-30 US US17/957,044 patent/US20230177320A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
EP4160486A1 (en) | 2023-04-05 |
US20230177320A1 (en) | 2023-06-08 |
US20230177321A1 (en) | 2023-06-08 |
CN115906965A (zh) | 2023-04-04 |
CN115906964A (zh) | 2023-04-04 |
US20230177318A1 (en) | 2023-06-08 |
EP4160487A1 (en) | 2023-04-05 |
EP4160485A1 (en) | 2023-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7348971B2 (ja) | 畳み込みニューラルネットワークハードウエア構成 | |
US11886536B2 (en) | Methods and systems for implementing a convolution transpose layer of a neural network | |
CN110007896B (zh) | 具有时钟选通的用于执行矩阵乘法的硬件单元 | |
US20220391172A1 (en) | Implementation of Softmax and Exponential in Hardware | |
CN113887710A (zh) | 循环神经网络中的数字格式选择 | |
CN114723036A (zh) | 包括矩阵乘法的神经网络 | |
EP4345691A1 (en) | Methods and systems for performing channel equalisation on a convolution layer in a neural network | |
US20230259743A1 (en) | Neural network accelerator with configurable pooling processing unit | |
GB2614705A (en) | Neural network accelerator with configurable pooling processing unit | |
CN115545175A (zh) | 在硬件中运行双向递归神经网络 | |
CN115545174A (zh) | 包括矩阵乘法的神经网络 | |
CN115904696A (zh) | 用于配置具有可配置流水线的神经网络加速器的方法和设备 | |
CN113887714A (zh) | 用于在硬件中运行动态循环神经网络的方法和系统 | |
CN115115023A (zh) | 用于生成关于卷积层权重的损失函数的梯度的方法和系统 | |
GB2611521A (en) | Neural network accelerator with a configurable pipeline | |
GB2611522A (en) | Neural network accelerator with a configurable pipeline | |
GB2611520A (en) | Methods and devices for configuring a neural network accelerator with a configurable pipeline | |
GB2614327A (en) | Configurable pooling process unit for neural network accelerator | |
EP4300369A1 (en) | Methods and systems for executing a neural network on a neural network accelerator | |
CN115545146A (zh) | 双向rnn的数字格式选择 | |
CN117808046A (zh) | 在线选择神经网络的网络参数的数字格式的方法和系统 | |
CN117252244A (zh) | 基于注意力的神经网络的硬件实施 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |