CN113424201A - 神经网络处理器 - Google Patents

神经网络处理器 Download PDF

Info

Publication number
CN113424201A
CN113424201A CN201980092225.5A CN201980092225A CN113424201A CN 113424201 A CN113424201 A CN 113424201A CN 201980092225 A CN201980092225 A CN 201980092225A CN 113424201 A CN113424201 A CN 113424201A
Authority
CN
China
Prior art keywords
neural network
input
layer
data
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201980092225.5A
Other languages
English (en)
Inventor
K.H.李
S.拉维库马尔
P.唐内利
D.罗森班德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Waymo LLC
Original Assignee
Waymo LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Waymo LLC filed Critical Waymo LLC
Publication of CN113424201A publication Critical patent/CN113424201A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0207Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

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

Abstract

一种用于对包括多个神经网络(NN)层的神经网络执行计算的电路。电路包括提供用于执行计算的编程数据的处理设备和与处理设备进行数据通信以接收编程数据的核心。核心包括存储用于层的输入的激活存储器和存储用于第一NN层的参数的参数存储器。核心还包括基于编程数据旋转访问来自激活存储器的输入的旋转单元和接收用于第一NN层的相应输入和参数并使用输入和参数生成第一NN层的输出的计算单元。核心还包括交叉开关单元,该交叉开关单元使输出根据库分配模式被存储在激活存储器中。

Description

神经网络处理器
技术领域
本说明书涉及在硬件中计算神经网络推断。
背景技术
神经网络是机器学习模型,其采用一层或多层节点为接收到的输入生成输出,例如分类。一些神经网络除了输出层之外还包括一个或多个隐藏层。每个隐藏层的输出被用作网络中一个或多个其他层(例如,网络的其他隐藏层或输出层)的输入。网络的一些层根据相应参数集的当前值从接收的输入生成输出。
一些神经网络包括一个或多个卷积神经网络层。每个卷积神经网络层都有一组相关联的内核(kernel)。内核可以表示为参数的张量,即多维数组。每个卷积层还可以处理激活输入集。激活输入集还可以表示为张量。
发明内容
本说明书描述了执行神经网络计算的专用硬件电路。硬件电路包括核心(core),该核心与电路的组件交互,以加速神经网络工作负载的计算。核心包括可在硬件或软件中实现的控制逻辑和多个组件。控制逻辑用于向核心中的多个组件中的每一个提供用于神经网络计算的指令。核心包括存储输入、输入激活或输出、输出激活的激活存储器,以及存储用于神经网络(例如,卷积神经网络(CNN))的一层的至少一部分的参数集的参数存储器。核心还包括计算单元(computing unit)、旋转单元(rotation unit)和交叉开关单元(crossbar unit)。
计算单元用于执行神经网络计算,所述神经网络计算用于处理通过神经网络层的输入。例如,计算单元处理来自激活存储器的输入激活和来自参数存储器的参数,以生成层的一组输出。旋转单元从激活存储器获得输入,并将输入提供给计算单元的计算单元格(computing cell)。旋转单元从激活存储器获得输入,并以优化计算单元格的总体使用的方式将输入路由到计算单元。交叉开关单元使用库分配模式将层的输出存储在激活存储器中。交叉开关单元存储输出,使得当存储的输出作为后续层的输入被获得时,激活存储器不会经历库冲突(bank conflict)。
硬件电路还包括可以在核心处实现的内核位置存储器。内核位置存储器存储参数索引和其他表示内核结构的数据。内核结构可以对应于神经网络层的参数集。核心使用内核位置存储器以更有效地处理具有不同稀疏属性的内核结构,例如,内核结构中零值和非零值的布置。核心与内核位置存储器交互以支持任意内核形状,诸如在内核结构的不同空间维度上具有任意零值和非零值布置的内核。
硬件电路被配置为利用深度卷积中的并行性,与传统电路相比效率更高。通过使用硬件电路的核心和其他组件,利用并行性的机会不仅可以加速执行深度卷积,还可以加速执行密集卷积。例如,在密集卷积中,硬件电路可以基于在计算单元处可用的计算单元格的数量,为激活集支持一定数量的输入通道(zin)和输出通道(zout)。
在深度卷积中,输入通道可以用于生成多个输出通道,例如,单个输入通道可以用于生成1个输出通道、2个输出通道或4个输出通道。硬件电路采用可配置逻辑,该可配置逻辑使用旋转单元和交叉开关单元来执行电路的不同kx和ky并行性(例如,并行计算,其中在同一周期内计算使用x和y方向参数的多个乘积)特征。这些特性与从单个输入通道生成的多个输出通道有关。可配置逻辑使得硬件电路能够通过在深度卷积期间增加计算单元的总体使用来改进深度卷积的计算效率。
本说明书中描述的主题的一个方面可以体现在用于执行用于包括多个神经网络层的神经网络的计算的电路中。该电路包括:处理设备,被配置为处理数据信号并提供用于执行计算的编程数据;以及与处理设备进行数据通信以接收由处理设备提供的编程数据的核心。核心包括:激活存储器,被配置为存储层输入集;参数存储器,被配置为存储用于第一神经网络层的参数;旋转单元,被配置为基于编程数据旋转访问来自激活存储器的层输入集;以及具有多个计算单元格的计算单元。
多个计算单元格中的至少一个计算单元格被配置为:i)针对第一神经网络层,接收由旋转单元访问的层输入集的输入,ii)接收用于第一神经网络层的参数,以及iii)使用输入和参数生成第一神经网络层的输出的至少一部分。核心还包括交叉开关单元,被配置为根据基于编程数据和分配给第二神经网络层的属性值的库分配模式,使第一神经网络层的输出存储在激活存储器中。
这些和其他实现都可以可选地包括以下一个或多个功能。例如,在一些实现中,旋转单元还被配置为旋转输入张量的元素,其中输入张量的每个元素对应于存储在激活存储器中的输入集的相应输入。
在一些实现中,旋转单元还被配置为:基于第一旋转因子沿着输入张量的第一维度旋转输入张量的元素;基于不同于第一旋转因子的第二旋转因子,沿着输入张量的不同的第二维度旋转输入张量的元素;以及向计算单元的计算单元格提供对应于输入张量的旋转元素的输入。
在一些实现中,交叉开关单元还被配置为:响应于处理库分配模式,确定输出中的激活映射,其中,映射基于分配给第二神经网络层的属性值标识用于存储第二神经网络层的激活的激活存储器的存储器库。在一些实现中,交叉开关单元还被配置为:使用于第一神经网络层的输出的数据被存储在激活存储器的特定地址位置,基于用于神经网络的不同相应层而改变的可配置映射,使用于输出的数据被分配给激活存储器的地址位置。
在一些实现中,旋转单元还被配置为访问用于第一神经网络层的输出的输出数据作为用于第二神经网络层的层输入,用于在第二神经网络层进行处理;并且所确定的映射被配置为使得当所述旋转单元访问对应于第一神经网络层的输出的第二神经网络层的层输入时,在激活存储器的存储器库处不发生库冲突。
在一些实现中,分配给第二神经网络层的属性值是:第二神经网络层的步幅值(stride value),或第二神经网络层的跳过值(skip value)。在一些实现中,核心被配置为:使用旋转单元访问存储在激活存储器的第一组存储器库中的层输入,而不发生库冲突;以及使用交叉开关单元将层输出存储在激活存储器的第二组存储器库中,而不发生库冲突。
在一些实现中,核心被配置为:将旋转单元的基于旋转的数据访问操作与交叉开关单元的基于模式的数据存储操作同步,以实现计算单元的利用率超过阈值利用率。在一些实现中,处理设备被配置为:从外部控制器接收包括要在核心处使用的数据值的指令;以及至少将指令的数据值提供给内核,以存储在内核的组件处。
在一些实现中,处理设备是数字信号处理器(DSP),被配置为:处理从外部控制器接收的指令;以及响应于处理指令,使用该指令的数据值在核心处配置一个或多个寄存器。在一些实现中,核心被配置为访问一个或多个寄存器以获得定义用于神经网络的计算的配置数据,核心的计算单元基于从外部控制器接收的指令导出的数据值执行计算。
本说明书中描述的主题的一个方面可以体现在用于执行用于包括多个神经网络层的神经网络的计算的计算机实现的方法中。该方法包括:由硬件电路的处理设备提供用于执行神经网络计算的编程数据;由与处理设备通信的硬件电路的核心接收由处理设备提供的编程数据,其中核心包括被配置为存储层输入集的激活存储器和被配置为存储用于第一神经网络层的参数的参数存储器;以及由核心的旋转单元访问存储在激活存储器处的层输入集,其中旋转单元基于由核心接收的编程数据旋转访问层输入集。
方法还包括:由核心的计算单元接收由旋转单元访问的层输入集的输入,该输入被接收以在第一神经网络层处进行处理;由计算单元接收用于第一神经网络层的参数;由计算单元使用由旋转单元访问的输入和参数生成第一神经网络层的输出;以及根据基于编程数据和分配给第二神经网络层的属性值的库分配模式,使用核心的交叉开关单元将第一神经网络层的输出存储在激活存储器中。
这些和其他实现都可以可选地包括以下一个或多个功能。例如,在一些实现中,该方法还包括:由旋转单元旋转输入张量的元素,其中输入张量的元素中的每一个对应于存储在激活存储器中的输入集的相应输入。
在一些实现中,方法还包括:由旋转单元基于第一旋转因子沿着输入张量的第一维度旋转输入张量的元素;由旋转单元基于与第一旋转因子不同的第二旋转因子,沿着输入张量的不同的第二维度旋转输入张量的元素;以及由旋转单元向计算单元的计算单元格提供与输入张量的旋转元素相对应的输入。
在一些实现中,方法还包括:由交叉开关单元响应于处理库分配模式,确定的输出中的激活映射,其中,映射基于分配给第二神经网络层的属性值标识用于存储第二神经网络层的激活的激活存储器的存储器库。
在一些实现中,方法还包括:使用交叉开关单元,基于用于神经网络的不同相应层改变的可配置映射,将用于第一神经网络层的输出的数据分配到激活存储器的地址位置;以及基于用于第二神经网络层的可配置映射,使用交叉开关单元将用于第一神经网络层的输出的数据存储在激活存储器的特定分配地址位置处。
在一些实现中,旋转单元还被配置为访问用于第一神经网络层的输出的输出数据作为第二神经网络层的层输入,用于在第二神经网络层进行处理;并且所确定的映射被配置为使得当旋转单元访问对应于第一神经网络层的输出的第二神经网络层的层输入时,在激活存储器的存储器库处不发生库冲突。
在一些实现中,方法还包括:为第二神经网络层分配对应于属性值的步幅值;或者为第二神经网络层分配对应于属性值的跳过值。在一些实现中,该方法还包括:由核心使用旋转单元访问存储在激活存储器的第一组存储器库中的层输入,而不发生库冲突;以及由核心使用交叉开关单元将层输出存储在激活存储器的第二组存储器库中,而不发生库冲突。
在一些实现中,方法还包括:由核心将旋转单元的基于旋转的数据访问操作与交叉开关单元的基于模式的数据存储操作同步,以实现计算单元的利用率超过阈值利用率。在一些实现中,该方法还包括:由处理设备从外部控制器接收包括要在核心处使用的数据值的指令;以及由处理设备至少将指令的数据值提供给核心,用于存储在核心的组件处。
在一些实现中,处理设备是数字信号处理器(DSP),并且该方法还包括:由DSP处理从外部控制器接收的指令;以及响应于处理该指令,由DSP使用该指令的数据值在核心处配置一个或多个寄存器。在一些实现中,由核心访问所配置的一个或多个寄存器以获得定义用于神经网络的计算的配置数据;以及在计算单元处,基于从外部控制器接收的指令导出的数据值执行计算。
本说明书中描述的主题的一个方面可以体现在用于执行用于包括多个神经网络层的神经网络的计算的电路中。该电路包括被配置为处理数据信号并提供用于执行计算的编程数据的处理设备。该电路包括与处理设备进行数据通信的核心,以接收由处理设备提供的编程数据。该电路包括布置在核心中的内核位置存储器。内核位置存储器被配置为接收由编程数据标识的数据值,其中数据值包括用于一个或多个神经网络层的参数。内核位置存储器被配置为存储用于一个或多个神经网络层中的每一层的相应参数集,其中每个相应参数集对应于不同的内核结构。每个内核结构具有各自的稀疏性属性和各自的内核形状,其特征在于内核结构的稀疏性或内核结构的维数。内核位置存储器被配置为提供来自一个或多个参数集的参数值用于加载到内核的计算单元,这些参数集中的至少一个对应于在内核结构的一个或多个空间维度上具有任意内核形状的内核结构。至少一个参数集的每个参数值具有非零参数值。
这些和其他实现都可以可选地包括以下一个或多个功能。例如,在一些实现中,电路包括可在核心处访问的控制逻辑。控制逻辑被配置为:修改与用于处理输入张量的输入的一个或多个循环嵌套相对应的一个或多个循环索引,其中一个或多个循环索引中的每一个基于从内核位置存储器获得的任意内核结构的数据进行修改;以及响应于修改用于处理输入张量的一部分输入的循环嵌套的至少一个循环索引,仅加载任意内核结构的非零参数值。
在一些实现中,控制逻辑被配置为:通过修改由存储在内核位置存储器中的内核位置存储器字的数据字段标识的相应数据值来修改对应于一个或多个循环嵌套的一个或多个循环索引。在一些实现中,内核位置存储器被配置为存储用于一个或多个神经网络层的参数,并且这些参数对应于多个任意形状的内核结构,其中每个内核结构由多维张量表示。
本说明书中描述的主题的一个方面可以体现在被配置为执行用于包括多个神经网络层的卷积神经网络的计算的电路中。该电路包括被配置为响应于接收到由核心外部的处理设备提供的编程数据而执行计算的核心。核心包括计算单元,该计算单元被配置为使用布置在计算单元中的计算单元格来计算层输出。从要在卷积神经网络层处处理的输入张量的输入与由参数张量表示的卷积神经网络层的参数之间的乘法,计算卷积神经网络层的层输出。核心包括控制逻辑,该控制逻辑被配置为基于编程数据中指定卷积类型的操作模式来确定输入张量的输入通道的输入路由和参数张量的参数。控制逻辑被配置为基于所确定的路由将输入通道的输入和参数张量的参数路由到计算单元;以及使计算单元根据由编程数据指定的卷积类型,从为多个输出通道生成的输出计算层输出。在至少一个周期内,使用计算单元的乘法器和计算单元格的阈值数量,在计算单元处同时计算用于多个输出通道中的每一个的输出。
这些和其他实现都可以可选地包括以下一个或多个功能。例如,在一些实现中,卷积的类型对应于深度卷积或密集卷积的计算;深度卷积包括利用跨多维参数张量的至少两个维度的多个参数卷积对应于的输入通道的元素的单个激活。
在一些实现中,电路被配置为执行用于深度卷积的计算,包括处理输入通道的输入以生成多个输出通道,其中,基于计算单元的计算单元格的硬件配置,同时执行用于深度卷积的至少一部分计算。在一些实现中,该电路被配置为具有并行性度量,其特征至少在于,基于计算单元中计算单元格的阈值百分比的利用率,与输入通道的一个或多个输入同时卷积的参数张量的最大维数。
在一些实现中,控制逻辑可由内核基于由内核外部的处理设备提供的编程数据来配置;控制逻辑可以被配置为选择包括在电路中的多个数据处理路径中的一个或多个;多个数据处理路径基于跨电路的两个或多个组件之间的连接模式。
可以实现本说明书中描述的主题的特定实施例,以实现以下一个或多个优点。组件布局使神经网络处理器的电路能够更有效地执行计算。处理器包括旋转单元和交叉开关单元,用于协调将层输出(例如,激活)存储到激活存储器中以及从存储器获得或读取激活。处理器还可以被配置为使用旋转单元和交叉开关单元将用于层的参数加载到参数存储器中,以及从存储器读取参数。
处理器可以使用特定的组件特征在同一周期内完成某些存储器操作,而不会经历可能降低电路性能的存储器库冲突。处理器还可以通过为处理器的计算单元中的每个计算核心/单元格获得相当高的利用率,使用特定组件特征来最大化执行多个神经网络计算。处理器被配置为支持用于给定神经网络计算(例如,涉及卷积层的计算)的一系列步幅值和跳过值,而不损害计算单元的高利用率。
本说明书主题的一个或多个实施例的细节在附图和下面的描述中阐述。从说明书、附图和权利要求书中,主题的其他特征、方面和优点将变得显而易见。
附图说明
图1示出了示例神经网络处理系统。
图2示出了用于神经网络处理系统的示例数据路由拓扑。
图3示出了示出获得输入数据以执行卷积计算的示例图。
图4示出了示出处理输入数据以执行神经网络计算的示例图。
图5示出了示出处理输入数据以执行神经网络计算的另一示例图。
图6A和6B示出了示出输入数据和输出数据的示例库分配以及针对给定步幅值处理输入数据的图。
图7示出了示出示例内核结构、循环嵌套和用于内核位置存储器的存储器字的图。
图8示出了包括关于内核位置存储器的存储器地址的信息的示例表。
图9-12分别示出了示出深度卷积的输入数据处理的示例图。
图13示出了示出处理输入数据以生成输出数据的深度卷积层的示例图。
图14示出了示出深度卷积中并行性的输入窗口的示例图。
各种示图中类似的参考编号和名称表示类似的元件。
具体实施方式
具有多层的神经网络可以用于计算推断。例如,给定输入,神经网络可以计算该输入的推断。神经网络通过处理通过神经网络各层的输入来计算推断。特别地,神经网络各层之间的连接可以用有向图表示。因此,网络内的给定层被配置为(i)接收由通过有向图中的传入边连接到给定层的层生成的输出作为输入,以及(ii)提供由给定层生成的输出作为通过有向图中的传出边连接到给定层的每个层的输入。也就是说,任何特定层都可以接收多个输入、多个输出或两者。部分或所有层都有各自的参数集。这些层中的每一层接收输入,并根据该层的参数集处理该输入以生成输出。
因此,为了从接收到的输入计算推断,神经网络接收输入并通过网络中的每个神经网络层对其进行处理以生成推断,来自一个神经网络层的输出作为输入被提供给一个或多个其他神经网络层。神经网络层的数据输入,例如,神经网络的输入或有向图中另一层的输出,可以称为层输入或到层的输入。在一些情况下,到一层神经网络的输入是一个激活或激活集,激活集中包括作为另一层神经网络输出而生成的激活值。例如,处理在第一层处输入的层可以涉及第一层应用激活函数以生成作为第一层的输出的激活值集。然后将第一层输出的激活作为层输入提供给神经网络中的第二层,以便在第二层进行处理。
图1示出了示例系统100。系统100是用于执行神经网络计算的一个或多个专用集成电路的神经网络处理系统。系统100包括例如示例向量处理单元的核心102。在一些实现中,核心102可以是被配置用于加速神经网络计算性能的向量处理器核心。核心102与系统100的组件交互以加速执行用于训练神经网络或用于使用神经网络处理推断工作负载的计算。核心102包括控制逻辑106和可以体现在系统100的软件或硬件特征中的多个组件。核心102使用控制逻辑106向核心102中的多个组件中的每个组件提供指令。这些指令可以包括用于神经网络计算的数据。在一些实现中,在核心102处从外部控制器或主机设备接收指令。
多个硬件组件中的每一个都可以将指令转换为低电平控制信号,从而使系统100执行神经网络计算。通常,控制信号调节系统100中的数据流,例如,用于计算的数据如何至少通过核心102的组件特征移动。在一些实现中,控制逻辑106是处理器,其生成时钟信号或由处理器执行以生成时钟信号的程序代码,用于控制核心102中的组件。控制逻辑106可以在适当的时间使用时钟信号的定时,向系统100的每个组件发送指令和控制信号。在其他实现中,诸如外部控制器的主机设备从控制器的外部处理器传入时钟信号。
核心102包括激活存储器108和参数存储器116。激活存储器108被配置为存储通过多层神经网络的一层或多层处理的数据,诸如输入或输入激活。激活存储器108还被配置为存储层的输出或输出激活。如上所述,神经网络的第一层接收层输入并生成激活(例如,层输出)。第一层可以(也可以不)具有表示非线性函数的激活函数,诸如ReLU、sigmoid或tanh,其在神经网络中提供非线性。第一层生成的激活可以通过神经网络的第二层或后续层进行处理。参数存储器116可以被配置为存储用于多层神经网络的一层或多层的参数集。
在一些实现中,系统100包括多个核心102和多个计算结构(computation fabric)104(如下所述)。多个核心中的每个核心102包括激活存储器108和参数存储器116,并且被配置为与相应的计算结构104通信。在此实现中,一个或多个核心102可以使用其各自的参数存储器116来存储被分配给给定核心102的特定层或层的一部分的参数。通常,通过神经网络层处理输入是通过执行数学运算来完成的,例如乘法和加法。
如下所述,使用示例神经网络处理器的计算电路执行运算,诸如系统100的硬件电路上的示例神经网络。数学运算可以基于神经网络的类型或用于处理输入的神经网络层的类型而不同。
卷积神经网络(CNN)可以基于到神经网络的输入对应于图像的图像像素数据或包括多个位置处的特征的其他数据的假设来配置。例如,输入集可以形成表示示例数字图像(例如,车辆周围的图像)的颜色特征的多维数据结构,诸如张量。在一些实现中,到神经网络的输入对应于各种其他类型的数据,诸如从车辆的不同设备和传感器获得的数据、点云数据、在多个时间步中的每一步包括某些特征或原始音频的音频数据、或各种类型的一维或多维数据。卷积神经网络的卷积层可以处理输入,以转换由数据结构输入表示的图像特征。例如,通过使用数据结构的给定维度上的输入数据和用于卷积层的参数集执行点积操作来处理输入。
执行卷积层的计算可以包括对数据结构中的输入部分应用一组或多组内核。系统执行计算的方式可以基于示例多层神经网络或支持深度神经网络工作负载的深度神经网络的每一层的特定属性。深度神经网络可以包括一个或多个卷积塔(或层)以及其他计算层。特别地,例如计算机视觉应用,这些卷积塔通常占执行的推断计算的很大一部分。CNN的卷积层可以有三个维度的人工神经元集,一个是宽度维度,一个是高度维度,一个是深度维度。深度维度对应于输入或激活卷的第三维,并且可以表示图像的各个颜色通道。例如,输入图像可以形成数据的输入体积(例如,激活),该体积的尺寸为32x32x3(分别为宽度、高度和深度)。深度维度3可以对应于红色(R)、绿色(G)和蓝色(B)的RGB颜色通道。
一般来说,CNN的层被配置为将三维输入体积(输入)转换为神经元激活(激活)的多维输出体积。例如,32x32x3的3D输入结构保持示例图像的原始像素值,在这种情况下,图像的宽度为32,高度为32,并且具有三个颜色通道R、G、B。系统100的神经网络的卷积层计算可以连接到输入体积中的局部区域的神经元的输出。卷积层中的每个神经元只能在空间上连接到输入体积中的局部区域,但连接到输入体积的全深度(例如,所有颜色通道)。对于卷积层的神经元集,该层计算神经元的参数(权重)与神经元连接的输入体积中的特定区域之间的点积。此计算可能会产生诸如32×32×12的体积,其中12对应于用于计算的内核的数量。神经元与区域输入的连接可以沿深度轴具有与输入体积深度相等的空间范围。空间范围对应于内核的空间维度(例如,x和y维度)。
内核集可以具有空间特征,包括宽度和高度,并延伸通过输入体积的深度。层的每一内核集被应用于提供给层的一个或多个输入集。也就是说,对于每个内核或内核集,系统100可以将可以多维表示的内核覆盖在可以多维表示的第一部分层输入(例如,形成输入体积或输入张量)上。例如,CNN的第一层的内核集的大小可以是5×5×3×16,对应于5个像素的宽度、5个像素的高度、3个的深度(对应于应用了内核的输入体积的颜色通道),以及对应于输出通道的数量的16个输出维度。在此上下文中,内核集包括16个内核,使得卷积的输出具有16个深度维度。
然后,系统可以从重叠元素计算点积。例如,系统100可以跨输入体积的宽度和高度卷积(或滑动)每个内核,并计算内核条目与图像位置或区域的输入之间的点积。卷积输出中的每个输出值都是内核与示例输入张量的某组输入之间的点积的结果。点积可以产生对应于单层输入的卷积输出,例如,在重叠多维空间中具有左上位置的激活元素。如上所述,卷积层的神经元可以连接到包括多个输入的输入体积区域。系统100可以在输入体积的每个输入上卷积每个内核。系统100通过例如在区域中的每个输入上移动(或滑动)每个内核来执行该卷积操作。
系统100基于给定卷积层的步幅值在区域的输入上移动每个内核。例如,当步幅设置为1时,系统100将内核在区域上一次移动一个像素(或输入)。类似地,当步幅为2时,系统100将内核在区域上一次移动两个像素。因此,可以基于层的步幅值来移动内核,并且系统100可以重复执行该过程,直到区域的输入具有相对应的点积。与步幅值相关的是跳过值或扩张值(dilation value)。跳过值可以标识输入体积区域中的一个或多个输入集(例如,2×2),当在神经网络层加载输入进行处理时跳过这些输入。在一些实现中,图像的像素输入量可以用零“填充”,例如,在图像的边界区域周围。此零填充用于控制输出体积的空间大小。
如上所述,CNN的卷积层被配置为将三维输入体积(区域的输入)转换为神经元激活的多维输出体积。例如,在内核在输入体积的宽度和高度上卷积时,系统100生成多维激活映射,该多维激活映射包括基于步幅值在一个或多个空间位置卷积内核的结果。在一些情况中,增加步幅值会在空间上产生较小的激活输出体积。在一些实现中,在将输出发送到神经网络的后续层之前,可以将激活函数应用于卷积的输出。
示例卷积层可以具有表示层属性的层的一个或多个控制参数。例如,控制参数可以包括内核的数量K、内核的空间范围F、步幅(或跳过)S和零填充量P。这些参数的数值、到层的输入以及层的内核的参数值形成在层处发生的计算以及层的输出体积的大小。在一个实现中,使用公式(W-F+2P)/S+1计算输出体积的空间大小作为输入体积大小W的函数。例如,输入张量可以表示大小为[227×227×3]的像素输入体积。神经网络的卷积层可以具有F=11的空间范围值、S=4的步幅值以及没有零填充(P=0)。使用上述公式和K=96的层内核量,系统100对导致卷积层输出体积大小[55×55×96]的层执行计算,其中55是从[(227-11+0)/4+1=55]中获得的。
神经网络的卷积层或其他层的计算(例如点积计算)涉及使用系统100的硬件电路的多个计算单元格执行数学运算,例如乘法和加法。硬件电路的设计可能导致系统在执行神经网络层的计算时,其充分利用电路计算单元的能力受到限制。
基于本文档中描述的技术,系统100可以本地支持对各种神经网络层执行计算。例如,系统100可以被配置为支持具有不同属性的卷积层,同时在用于对不同层中的每一层执行特定类型的神经网络计算的计算单元格(如下所述)的百分比上同时实现改进。在一些实现中,卷积层的不同属性可以对应于表示内核的参数的矩阵结构的大小、表示层的深度以及应用于输入数据结构的内核的量、或者用于将内核应用于输入区域的步幅(或跳过)值。
在一些实现中,由神经网络层处理的多维数据结构表示数字图像的输入特征,例如,由穿越道路或地形的车辆的成像传感器捕获的数字图像。对于这些实现,通过处理通过神经网络的各个层的输入,系统100计算可以用于在车辆穿越地形时导航车辆的多组推断。
核心102还包括旋转单元110、计算单元112和交叉开关单元114。控制逻辑106用于向计算单元112发送激活输入集和参数输入集。计算单元112包括用于执行数学运算(例如乘法和加法)的电路。该电路包括多个计算单元格,这些计算单元格被配置为使用激活输入和参数的集合执行数学运算。例如,计算单元112可以包括一个或多个乘法累加单元格(MAC),每个MAC分别接收从激活存储器108和参数存储器116获得的激活集和参数集。计算单元112处理输入和参数以生成输出集。
旋转单元110与激活存储器108通信以获得用于在层处处理的输入数据,并将所获得的输入提供给计算单元112的MAC。如下所述,旋转单元110接收并旋转从激活存储器108的存储器地址位置访问的层输入。层输入基于由控制逻辑106确定的旋转指令进行旋转。旋转指令定义旋转量,并允许从地址位置获得输入,并将其移动到计算单元112以优化计算单元处MAC的使用的方式。在一些实现中,系统100的电路的示例逻辑连接可以包括在电路的一部分处逻辑连接或物理耦合的旋转单元110,以使数据(输入或激活)能够从激活存储器108接收并提供给计算单元112。类似地,交叉开关单元114可以在计算单元112和激活存储器108之间逻辑连接,以使计算单元112的输出数据能够提供给激活存储器108以存储在存储器库中,而计算单元112逻辑地耦合或连接到参数存储器116以从参数存储器接收用于执行计算的权重。在其他实现中,旋转单元110和交叉开关单元114两者都例如逻辑上位于激活存储器108和计算单元112之间。在一些实现中,计算单元112的输入和输出是多维数据结构。
采用不同于本说明书所述专用电路的结构的神经网络处理器在某些存储器操作期间可能会遇到存储器库冲突。库冲突会妨碍在同一周期中从存储器读取和写入数据,这会降低神经网络处理器的性能和计算效率。
通常,电路可以具有被划分为多个存储器库(“存储器库”)的共享存储器的部分,以及多个存储器库中每个存储器库的相应地址位置集合。在一些情况下,每个库一次只能处理一个数据集。因此,如果系统试图从(或向)同一个库加载(或存储)数据,那么对存储器库地址位置的访问必须序列化,即系统不能并行访问同一个存储器库中的两个位置。这种所需的序列化称为库冲突。例如,如果两个存储器位置(地址)出现在同一个库中,则会发生库冲突,并且对地址位置的访问被串行处理,从而失去并行访问的优势。如下文更详细地描述的,旋转单元110和交叉开关单元114可以用于在相同周期内从激活存储器108和参数存储器116获得数据或将数据存储在其中,而不会在系统100处发生存储器库冲突。
旋转单元110被配置为从激活存储器108获得数据以通过层进行处理。如上所述,数据可以是形成与数字图像的一部分相关联的多维数据结构(例如,阵列或张量)的激活集。此后,这种多维数据结构应被称为输入激活的基本张量单位,诸如示例bx×by×bz3D张量。在下文中,基本张量单位是指可以从激活存储器108一次加载并传递到旋转单元110的3D张量结构,并且它是在系统100中处理的基本数据单元。在核心102中,神经网络层可以处理特定大小的输入,并生成另一大小的输出。输出可以是存储在激活存储器108处的激活集。该激活集随后使用激活存储器108的地址位置被获得,并被提供作为神经网络的另一层的输入。在一些实现中,旋转单元110用于旋转从激活存储器108的地址位置访问的激活集。
举例来说,神经网络可以包括层1、2和3,其被配置用于处理与三维张量相关联的数据。层1可以处理170×170×3的图像,并输出激活值的28×28×96张量。激活值的28×28×96张量由层2-3处理,层3的输出可以用于生成神经网络的推断。在一些实现中,层1-3可以是卷积层或完全连接层。在一些情况下,一个或多个层可以是池层、非线性层或分类器层。
交叉开关单元114用于基于从控制逻辑106获得的特定计算指令生成某些库分配模式。库分配模式的生成使得数据在经过一层处理后可以被存储,并且可以被读回以供下一层处理,而不会针对在单个时钟周期期间执行的多个读取操作发生存储器库冲突。交叉开关单元114的该库分配特征尤其有利,因为它使得即使当下一层具有与当前层不同的步幅值时,也能够为下一层存储和访问数据而不发生库冲突。以这种方式,可以基于使用各个存储器库的地址位置的唯一模式从系统100的存储器获得数据或将数据写入系统100的存储器。
在单个时钟周期中,旋转单元110和交叉开关单元114可以各自执行用于处理在系统100处执行的神经网络计算期间生成的库分配模式的指令。例如,当处理图像的输入数据时,旋转单元110可以每个时钟周期将访问输入旋转一个或多个像素。
在一些实现中,旋转单元110处理从控制逻辑106接收的指令或控制信号,以对示例基本张量单位执行旋转操作。控制信号可以为3D张量的x维定义x旋转因子和/或为3D张量的y维定义y旋转因子。例如,给定存储在激活存储器108中的基本张量单位,旋转单元110可以处理从控制逻辑106接收的控制信号,以基于由控制信号定义的旋转因子旋转张量中的输入数据元素的位置。响应于处理控制信号,旋转单元110可以基于x旋转因子沿着张量的x维旋转张量元素的输入数据和/或基于y旋转因子沿着y维旋转张量元素的输入数据。
在一些实现中,当旋转单元110沿x维旋转输入数据时,沿x维的每个单独的数据元素在x方向上偏移相同的量,例如,由x旋转因子定义的量。该量可以基于一个整数值,该整数值指示元素在旋转操作期间沿给定维度偏移的位置的数量。例如,如图1所示,给定的2D基本张量单位118可以包括5×5个单独的数据元素。核心102使用控制逻辑106使旋转单元110沿着2D张量118的x维120旋转输入数据。在该示例中,2D张量118的各个数据元素在x方向122上被偏移以创建旋转的2D张量124。如图所示,2D张量124具有x维126,其中单个数据元素被偏移相同的量,例如,偏移两个量。通常,单个数据元素的偏移量由x旋转因子、y旋转因子或两者定义。
如下面更详细地描述的,系统100可以至少基于计算单元112处的计算单元格的配置,以及当前神经网络层(例如,卷积层)的其他属性,以及使用计算单元格处理的到层的输入来确定旋转方案。系统100使用确定的旋转方案使旋转单元110旋转层的访问输入。通常,旋转单元110负责确保访问给定输出值所需的输入,并将其提供给对应于该输出值的计算单元112的适当计算单元格。在一些实现中,旋转单元110在单个时钟周期期间并行地执行一定数量的旋转操作。
旋转单元110可以执行数据旋转,以使系统100能够在一个或多个时钟周期上并行地执行神经网络计算集。以这种方式,旋转单元110和交叉开关单元114被配置为使得系统100可以实现计算单元112中包括多个计算单元格或MAC的计算块的相对较高的利用率(例如,>80%的利用率)。例如,旋转单元110被配置为使得系统100能够支持给定神经网络计算的任何步幅值和任何跳过值,而计算单元112的高利用率中的损失最小(或没有)。
一个或多个因子可以影响系统的计算单元112的利用率。在一些实现中,对于多维张量(例如,h×w×d),多维张量的各个维度的特性可以影响计算单元112处计算块的利用率。例如,如果系统100处理h×w×d 3D输入激活张量,则当3D输入张量的各个维度(例如,沿维度的元素数量)对应于基本张量单位维度(bx×by×bz)的特定整数倍(诸如,2×2×1和整数倍6×6×3,或10×12×6和整数倍20×36×12)时,计算单元112的利用率最大化。因此,系统100可以被配置为具有支持示例输入张量h×w×d的计算体系结构,该输入张量具有一定数量的维度元素,这些元素是基本张量单位的特定高度值(by)、宽度值(bx)或深度值(bz)的倍数。使用该整数倍实现,则系统100可以实现计算单元112的100%利用率,而不管给定神经网络层的步幅值和/或跳过值。在其他实现中,系统100可以被配置为使得各种其他基本张量单位配置和相应的整数倍可以被用于实现100%的利用率,而与神经网络层的步幅值和/或跳过值无关。
如本文所述,计算单元112可以包括大量计算单元格或MAC,其用于通过神经网络层执行用于处理神经网络输入的数学运算。在一些实现中,当对某些类型的神经网络层执行计算时,使用由旋转单元110和交叉开关单元114执行的库分配模式,系统100可以实现更高的核心利用率。使用这些组件特征,系统100还可以为各种步幅值和跳过值实现相对较高的核心利用率。核心利用率是指计算单元112处用于执行用于处理输入的计算的MAC的百分比。在一些情况下,参考单个时钟周期或参考多个时钟周期来确定核心利用率。
交叉开关单元114使用用于库分配模式的指令来促进将激活存储在系统100的存储器(例如,激活存储器108)中。激活由一层生成,交叉开关单元114使用库分配模式以允许从存储器访问激活并用作神经网络中下一层或后续层的输入的方式存储激活。使用交叉开关单元114和用于库分配模式的指令,激活可以被存储,例如,在激活存储器108的特定地址位置处,并且随后被访问以用作下一层的输入,而不发生库冲突,即使下一层与生成激活的上一层具有不同的步幅或跳过值。
在一些实现中,交叉开关单元114参考用于后续层的步幅值和/或特定跳过值(如下所述)。在一些实现中,交叉开关单元114是使用至少一阶段或两阶段处理来存储输出数据的稀疏交叉开关。此一阶段或两阶段处理可以用于根据至少行和列格式在激活存储器108中存储示例输出数据阵列/张量。例如,在用于存储输出数据的第一阶段期间,交叉开关单元114执行第一混排(shuffle)操作以混排或调整与阵列的行相关联的数据。在用于存储输出数据的第二阶段期间,交叉开关单元114执行第二混排操作以混排或调整与阵列的列相关联的数据。在一些情况下,交叉开关单元114执行至少一个混排操作以混排或调整与张量的行和列两者相关联的数据。
一般来说,旋转单元110和交叉开关单元114中的每一个使用用于库分配模式的指令来访问用于输入或激活集的输入数据,并在激活存储器108处不发生库冲突的情况下存储输出数据。库模式使得输出数据能够在经过一层处理后被写入激活存储器108然后从激活存储器108被读取或获得,以便由下一后续层进行处理,而不会在形成激活存储器108的各个库处发生地址冲突。
通过旋转所访问的输入数据,旋转单元110利用系统100的控制特征,该控制特征优化访问输入数据用于通过神经网络层进行处理。例如,基于指定模式旋转数据访问有助于在单个时钟周期内并行访问存储在激活存储器108的不同库的地址位置处的输入集。这使得能够从激活存储器108和参数存储器116向每个乘法累加单元格(MAC)提供相应的激活集和参数集。
如上所述,交叉开关单元114可以参考后续层的步幅值和/或特定跳过值。例如,在第一层处理图像的第一部分的输入集激活。此处理生成输出数据集,这些输出数据具有与输出激活相对应的特定数量的元素。然后这些元素被神经网络的下一层访问以进行处理。在某些实现中,为下一层指定特定步幅值,或为下一层指定特定跳过值。
例如,跳过值可以标识在加载数据输入以在神经网络层处进行处理时跳过的一个或多个元素集。在一些实现中,可以通过使用任何交错滑动窗口访问方案加载相邻的bx×by个像素来支持跳过,以遍历输入数据数组的[row,column]元素。在此示例中,bx和by各自可以表示大于或等于1的各自整数值,例如,3×3个像素或2×2个像素。基于核心102的库分配模式和旋转和交叉特征,输入数据阵列中的任何bx×by个元素补丁可以在一个周期内被加载,而不会发生库冲突。因此,基于所描述的技术,可以在系统100处支持任何跳过值。对于神经网络的给定卷积层,具有跳过的卷积也可称为扩张卷积,其中跳过值对应于扩张因子。在这种情况下,扩张可以支持感受野(receptive field)的指数扩展,而不会丧失分辨率或覆盖范围。例如,应用于3×3内核的跳过值2(例如,2-放大卷积)导致初始3×3感受野的扩展,例如,扩展到5×5,因为当内核参数每两个像素出现一个像素时,单个内核参数似乎跳过一个像素。
步幅值定义了当内核被应用于图像另一部分的输入数据(例如,像素值)时,每个内核的偏移量。在一些实现中,在存储将用作后续层的层输入的当前层生成的激活时,参考步幅值,例如,stride=8。在一些情况下,步幅值可以在表示输入张量元素的二维(2D)窗口中被参考,以加载彼此不相邻的bx×by个像素元素。通常,系统100可以被配置为无限制地支持任何步幅值。
在每个时钟周期期间,在激活存储器108处接收输出数据的元素集。基于库分配模式,以说明下一层的步幅值的方式存储这些元素。所生成的存储器库分配模式定义了为每个数据元素集分配的特定存储器库。控制逻辑106被配置为为下一层生成唯一的库分配模式,以便于存储具有特定步幅值(例如,步幅=8)的元素,并在系统100获得用于由下一层处理的元素时防止库冲突。在一些实现中,控制逻辑106为多层神经网络的每一层生成唯一的库分配模式。
激活存储器108可以被配置为共享存储器,其由核心102和柔性计算结构104(例如,数字信号处理器(DSP)或其他标量或向量处理器)在各种神经网络层的计算期间使用。在一些情况下,计算结构104在系统100的电路处由可以支持在深度神经网络层处处理的计算的示例处理设备表示。在核心102和计算结构104之间共享数据提供了对不同计算结构中的神经网络层的更有效和通用的支持。计算结构104提供增强的可编程性,该可编程性使得核心102获得并处理用于使用旋转和交叉开关特征以及用于使用库分配模式的指令。计算结构104可以被配置为从主机设备或外部控制器接收指令,这些指令被处理并发送到核心102。这些指令可以包括用于在核心102处配置寄存器或其他数据处理设备的数据值。核心102和计算结构104可以交互以提供补充系统100内的数据处理功能。例如,核心102中计算单元112的计算单元格可以用于加速深网工作负载的计算,而计算结构104使特定深网层的工作负载能够以改进的效率被完成。
在一些实现中,示例深网中的每一层都可以在计算结构104或核心102中执行。当在核心102中执行层时,输入数据从激活存储器108被加载,通过旋转单元110、计算单元112和交叉开关单元114被路由,然后,输出数据被写入激活存储器108。例如,使用计算单元112从输入数据生成的输出数据在作为输出存储在激活存储器108的存储器库中之前,然后通过交叉开关单元114被路由。当在计算结构104中执行层时,输入数据从激活存储器108被加载,被路由到计算结构104进行计算,然后输出数据被写入激活存储器108。
在一些实现中,系统100包括至少两个各自的计算单元集,核心102的计算单元(例如,单元112)和计算结构104的计算单元。核心102可以被配置为支持神经网络层的计算,包括密集/深度卷积、完全连接的非线性运算(例如,应用激活函数)和池运算。核心102还被配置为支持数据布置层的计算,诸如用于执行深度串联。计算结构104被配置为支持一个或多个其他神经网络层,并且可以用于执行与这些其他层相关联的操作的计算。
在一些实现中,支持涉及任意形状内核结构的神经网络计算的内核位置存储器130可以位于核心102处。例如,内核位置存储器130可以作为与控制逻辑106通信的嵌入式存储器结构被包括在核心102处。下面参考图7更详细地描述内核位置存储器130。
在核心102中,示例计算路径可以以下列方式运行。在计算单元112中执行一组计算,例如,用于卷积和完全连接层的计算。在一些实现中,计算单元112被配置为还包括用于使用非线性函数和完成池运算的硬件组件,其中这些组件可以在管道配置中运行。计算单元112可以响应于执行卷积计算而生成全和。在一些实现中,将全和路由到核心102的非线性单元以应用激活函数,而在其他实现中,可以跳过该路由操作。在一些情况下,非线性单元的输出被路由到核心102的池单元以完成池运算,而在其他情况下,该路由也可以被跳过。计算单元112的最终输出被路由到交叉开关单元114。如本文所述,交叉开关单元114使用库分配模式在激活存储器108中的存储器库的地址位置处写入/存储最终输出的数据值。该示例计算路径和相关数据路由不涉及计算结构104。
如上所述,示例深网中的每一层都可以在计算结构104或核心102中执行。当在计算结构104中执行层时,输入数据从激活存储器108被加载,被路由到计算结构104进行计算,并且计算的最终输出数据被写入激活存储器108。在一些实现中,计算结构104用于执行核心102中可能不支持的特定类型的计算。例如,可以对argmax层进行计算,以获得值向量内的最大值索引。
计算结构104被配置用于与激活存储器108进行数据通信。在一些情况下,前一层的输出(A)被写入激活存储器108用于存储在存储器库中。计算结构104可以被配置为:i)读取或获得前一层output_A的数据,ii)将数据作为输入路由到另一层,iii)使用计算结构104的计算单元执行该层的计算以生成输出(B),以及iv)然后将用于该output_B的数据写入/存储在激活存储器108中。然后,核心102可以用于从激活存储器108获得用于output_B的数据,以计算一个或多个其他层。
通常,计算结构104被配置为管理和执行控制和数据同步,以处理在神经网络各种层处的输入。在一些实现中,计算结构104用于通过在核心102中的不同寄存器处加载指令和控制值来编程核心102中的寄存器。控制值可以定义包括用于神经网络计算的步幅和跳过值的库分配模式。这些指令由旋转单元110和交叉开关单元114执行,以参考步幅和跳过值来处理库分配模式。在其他实现中,核心102可以包括标量处理器,核心102使用标量处理器来执行控制和数据同步功能。标量处理器被配置用于与计算结构104进行数据通信,并且可以使用计算结构104直接编程。
系统100可以包括多个子系统,其中每个子系统包括各自的核心102。例如,第一个子系统可以包括核心102a,第二子系统可以包括核心102b,第三子系统可以包括核心102c。核心102a、102b和102c可以对应于系统100的相邻核心。系统100的示例边界像素逻辑可以用于促进包括在系统100的每个子系统中的相邻核心102a、102b和102c之间的数据共享,如上所述。例如,图像的边缘像素值可以由核心102a/b/c使用核心102的边界像素逻辑共享以进行并行处理。核心102的示例数据仲裁器可以用于控制系统100的不同接口接收的信息。例如,数据仲裁器可以包括用于对计算结构104、控制逻辑106或诸如外部控制器的主机设备提供的信息进行优先级排序和分发的控制逻辑。
图2示出了用于神经网络处理系统100的示例数据路由拓扑200。路由拓扑200通常包括表示向计算单元112中的多个相应单元格提供的输入的旋转访问的数据路由线。例如,可以从激活存储器108获得特定大小的输入数据结构(例如,输入基本张量单位)。计算单元112可以包括各自的计算块202,每个计算块202包括MAC集群。尽管图2中示出了16个计算块,但是系统100可以被设计为包括更多或更少的计算块202。每个MAC集群可以用于基于示例输入数据计算更大点积的一部分。在一些实现中,在同一时钟周期内并行计算较大点积的各个部分。
在卷积层的示例计算期间,MAC可以对应于卷积输出中的给定输出值。在一些实现中,系统100基于与卷积输出中的给定输出值相对应的特定MAC来确定旋转方案。在一些情况下,示例旋转方案可以定义如何基于将接收数据的特定MAC来旋转层的数据。系统100使用所确定的旋转方案使旋转单元110为层旋转所访问的输入基本张量单位。旋转单元110负责确保访问给定卷积输出值所需的输入,并将其提供给对应于该输出值的适当MAC。旋转单元110基于使用控制逻辑106处理的库分配模式旋转所访问的输入基本张量单位。例如,控制逻辑106基于库分配模式生成旋转因子,其中旋转单元110使用旋转因子旋转层的数据。
对于旋转,旋转单元110可以访问数据的一部分(例如,对于基本张量单位),并将所访问的数据提供给计算单元112中的计算块202的MAC集群。在每个周期中,每个计算块202从旋转单元110接收一部分数据。对于不同的操作模式(例如,密集卷积、深度卷积等模式),旋转单元110和计算块202之间的数据路由模式可以不同。在一些实现中,旋转单元110在单个时钟周期期间并行地执行这些旋转操作中的每一个。在其他实现中,计算单元112中的一些或全部计算块202用于在一个或多个时钟周期上并行计算较大的点积。
例如,当计算较大的点积时,计算块202中的一个或多个可以各自接收表示用于神经网络层的参数的数据的相应部分。每个计算块202可以使用其MAC集群来使用用于激活输入的数据部分和用于参数的数据部分来执行点积计算的一部分。在一些情况下,计算块202可以生成相应的输出数据集。输出数据集被提供给交叉开关单元114,用于在形成激活存储器108的各个存储器库的地址位置处进行处理和存储。
图3示出了示例图300,其示出了从激活存储器108获得并用于执行示例神经网络计算的输入数据。图300示出了包括具有多个元素(例如,00、01、02、03等)的示例输入数据结构的第一输入窗口302。每个元素具有要在神经网络层(诸如卷积神经网络层)处处理的对应输入值(例如,像素值)。在图3中,输入窗口302(即,10、11、20、21)的数字参考可以对应于输入值映射到的输入张量的各个位置或元素。对应于输入张量元素的每个输入(例如,激活)可以被存储在数据存储器304的相应存储器地址位置处。例如,数据存储器304可以包括memory bank_0、memory bank_1、memory bank_2和memory bank_3,并且元素00的输入(“输入00”)可以被存储在memory bank_0的示例存储器地址位置处。数据存储器304的存储器库可以对应于激活存储器108的示例存储器库。
如上所述,在一些实现中,到当前神经网络层的输入可以是来自前一层的输出激活,其使用交叉开关单元114被存储在激活存储器108的地址位置处。交叉开关单元114基于库分配模式存储输出激活,例如,使输出激活被存储,使得激活可以被访问,不存在库冲突,并被用作当前神经网络层的输入,用于在当前层进行处理。数据模式306示出了当从数据存储器304获得映射到元素的输入或激活以在当前神经网络层处进行处理时,示例数据结构308的元素可以如何布置的示例。例如,如数据模式306所示,可以基于用于在数据存储器304(激活存储器108的)的地址位置处存储输出激活的库分配模式来布置数据结构308的各个输入映射到的特定元素。例如,因为交叉开关单元114使用特定的库分配模式在激活存储器108处存储数据,所以当稍后访问存储的数据时,以与交叉开关单元114用于存储数据的特定库分配模式(诸如示例数据模式306)一致或对应的方式对其进行布置。
在一些实现中,当基于先前的库分配模式布置从数据存储器304访问的输入数据时,可以使用旋转单元110旋转访问的输入数据以与输入窗口302的输入数据布局对齐。如上所述,旋转单元110可以使用旋转阶段312、314旋转输入数据。例如,至少一个旋转阶段可以用于获得与输入窗口302的数据布局匹配的输入数据结构310。在一些实现中,基于模式306布置的输入数据结构308的元素处的输入数据可以对应于数字图像的像素值。在此上下文中,使用旋转单元110的一个或多个旋转阶段旋转输入数据,使得输入数据的像素值与数字图像的像素位置对齐,如输入窗口302所示。然后,旋转的数据结构310被路由到计算块202或MAC集以执行计算316。
图4示出了示例图400,其示出了处理输入数据402以执行神经网络计算(例如,使用stride=1和skip=1)。该计算可以涉及1D张量。然而,如下所述,计算还可以被扩展到更高维度的张量,例如2D或3D张量。在该实现中,使用常规硬件电路处理输入数据以计算给定神经网络层的卷积。因此,图400涉及传统电路,其中仅使用一个乘法器404来计算给定层的卷积。图400的描述示出了参考传统电路的有限能力计算卷积的示例过程。这些描述还提供了用于展示本文档中参考系统100描述的专用硬件电路所提供的增强特征和计算优势的上下文。
如图400所示,使用常规硬件电路的一个乘法器,在第一周期(cycle=1)中,在常规电路处加载in[0]的输入值,并使用乘法器404与参数k0相乘,以生成第一结果或乘积403。在下一个或第二周期(cycle=2)中,传统电路使用乘法器404在[1]*k1中进行计算,以生成第二结果405。然后,电路可以将第一/前一个结果403与第二结果405累加或相加,以生成总和406。在下一个/第三周期中(cycle=3),常规电路使用单个乘法器404在[2]*k2中进行计算并生成第三结果407。然后,常规电路可以将总和406与第三结果407累加或相加以生成和408。
在一些情况下,结果403、结果405、总和406以及结果407每个都是在若干处理器周期上累加的部分总和,以生成示例输出激活。总和408可以对应于为给定层生成的激活输出410out[0]。图400可以与缺乏系统100的专用硬件电路的至少一些特征的示例常规电路相关联,这些特征有助于改进加载/存储多个3D张量的效率。
图5示出了示出用于处理输入数据以执行神经网络计算的改进方法的另一示例图。在一些实现中,使用为给定神经网络层分配的步幅和/或跳过值来处理输入数据以计算该层的卷积。如上所述,图4的图400的描述示出了用于参考传统电路的有限能力计算卷积的示例过程。相比之下,图5的图500提供了比用于处理输入数据以计算卷积的传统系统更好的方法。
在图5的实现中,可以使用包括在系统100中包括的专用硬件电路的示例计算块202处的MAC的多个乘法器来并行处理输入数据402的集合(例如,图5中1D示例中的输入基本张量单位)。例如,系统100可以被配置为通过使用多个乘法器中的每一个在一批激活中将不同的激活与从参数存储器116获得的相同参数相乘来扩展或扩张其并行性。
作为说明,将参考一维(1D)数据结构描述将不同输入与相应参数相乘的示例。然而,该计算方法还可以扩展到多维计算上下文,例如,通过使用沿输入张量的第一维度(例如,x维)获得的输入执行第一组计算,并且并行地,使用沿输入张量的第二维度(例如,y维度)获得的输入执行基本相似的第二组计算。该计算方法表示说明2D并行性的示例计算上下文,其中可以使用沿输入张量的x、y和z维中的每一个获得的相应输入集来采用类似方法,然后并行处理这些输入集以说明3D并行性。
如图5所示,使用输入集来生成输出激活的示例向量的神经网络计算可以包括为该集合中的每个输入值生成相应的部分总和,并在几个周期内累加部分总和以生成输出激活的向量。例如,给定输入的1D、2D或3D向量,例如,其中至少一个维度具有24个输入的大小,系统100可以使用示例内核大小3来计算卷积以生成输出激活。使用本文档中描述的技术,系统100可以并行地执行多个计算以计算卷积,并且可以使用减少的处理器周期数量以及其乘法器相对于传统硬件电路更高的总体利用率来执行。
例如,系统100可以初始化输入大小为12(或24)的1D输入向量402的计算。系统100可以使用3的内核大小计算卷积,其中内核包括参数k0、k1和k2。通常,1D输入向量402可以包括离散输入值,每个离散输入值由in[0]、in[1]、in[2]、…、in[11]表示。[n]中的每个向量项可以表示各自的输入,其中n是大于或等于零的整数。在一些实现中,1D向量中的输入子集(例如in[0]、in[1]、in[2]和in[3])可以表示示例输入窗口302的输入。在一些情况下,输入窗口302的输入可以对应于由图像传感器获得的数字图像的像素,或者对应于由系统100外部的传感器设备获得的其他类型的原始输入数据。如下文更详细地描述的,系统100可以使用例如1D、2D或3D内核或任意稀疏的内核(诸如在数据布局中任意分配零值的内核结构)加速卷积计算。
图500示出了系统100的专用硬件电路如何扩展与计算单元112的多个MAC的并行性的示例。例如,计算单元112的计算块202可以包括一组或多组至少八个乘法器,其中,一组中的八个乘法器中的每一个都接收并存储相同的参数值k0、k1或k2。因此,给定内核大小3,系统100可以被配置为从激活存储器108获得或加载由8个输入或激活组成的集合,并将集合中的8个输入中的每一个与相应的参数相乘,以生成不同的部分总和集合,这些部分总和可以在一定数量的周期内累加,以生成输出激活的向量。
例如,在周期=1时,系统100从激活存储器108获得8个输入402(示例1-D基本张量单位)(in[0]-in[7]),并使用乘法器512将每个输入与参数k0相乘,以生成一组部分总和513。所获得的输入402可以用于特定的输入窗口302。在cycle=2且stride=1且skip=2时,系统100可以从激活存储器108获得另一组8个输入(in[2]-in[9]),并使用同一组乘法器将每个输入与参数k1相乘,生成一组部分总和515。一组累加器516接收相应的部分总和513和515,累加部分总和513和515,并基于累加的部分总和生成一组累加值517。在cycle=3时,系统100可以从激活存储器108获得另一组8个输入(in[4]-in[11]),并使用同一组乘法器将每个输入与参数k2相乘,以生成一组部分总和519。一组累加器520接收一组累加值517和一组部分总和519,将值517与部分总和519累加,并基于该累加的结果生成输出激活向量522。累加器516和518可以表示一组累加器,这些累加器在每个周期中重复使用以生成或计算累加值。
输出激活522可以被存储在激活存储器108处,并随后被获得以在计算单元112的MAC(例如,用于使用另一神经网络层的权重执行计算的MAC)处加载。通常,系统100使用特定的库分配模式将用于输出激活522的数据存储在激活存储器108的存储器库中。
在一些实现中,该组8个输入402可以是在对神经网络中的另一层执行计算之后先前存储的输出激活。输出激活522可以从激活存储器108被获得,并根据该另一层的步幅或跳过值被用作神经网络另一层的输入。例如,如图5所示,对于MAC 514的8个乘法器,系统100可以加载8个skip=2的值。这是经由数据跳过可视化524显示的,其中输入数据in[0]是在cycle=1时获得的,skip=2导致输入数据in[2]是在cycle=2时。因此,在每个周期中,系统100获得8个输入以计算一组部分总和,并且在下一个周期中,系统100通过根据神经网络层的跳过参数跳过一些输入或激活来获得或读取数据。
系统100可以包括一组或多组累加器516、520,其用于在一个或多个时钟周期上累加结果数据。结果数据可以包括各部分总和或累加值的集合。在一些实现中,累加器组:i)具有乘法器512,包括在计算单元112的相应MAC中;ii)由加法器电路形成,加法器电路将从部分和或累加值集合接收的两个或多个操作数相加;以及iii)用于规范化加法结果以生成输出激活的示例向量。
在前面的示例中,系统100仅在三个处理器周期内累加多组结果数据。因此,相对于传统硬件电路,并且使用其处理器硬件电路的多个MAC,系统100被配置为有效地生成可以在减少的处理器周期数上累加的更大的部分总和集,以加速生成输出激活向量。
在一些实现中,系统100可以计算下一组输出,例如out[8]-out[15],例如针对24个输入大小的示例1D输入(in[0]…in[23])。对于该实现,系统100随后可以加载下一组8个输入526(in[8]-in[15]),并使用计算单元112的特定MAC集将该集合中的每个输入与参数k0相乘。系统100可以继续迭代1D输入窗口的24个输入,直到系统到达输入窗口的结束。
在一些实现中,获得8个输入的示例集包括在计算单元112处将每组中的相应8个输入加载到MAC 512、514、518的每个单元格之前,使用旋转单元110旋转8个输入。MAC 512、514、518对应于相同MAC,或者,替代地,还可以对应于不同MAC。在其他实现中,存储输出激活522包括基于使用控制逻辑106生成的库分配模式,使用交叉开关单元114混排用于每个输出激活的存储器地址分配。如上所述,旋转单元110和交叉开关单元114使系统100能够获得并存储用于在神经网络层进行处理的数据,而不会发生库冲突。以这种方式,系统100可以实现并行效率和加速计算,而不会因存储器库冲突而导致性能降低。
系统100可以在每个处理器周期、每个其他周期或基于由控制逻辑106处理的指令定义的特定周期迭代获得输入集(即,基本张量单位)。类似地,系统100可以基于由控制逻辑106接收到的指令,改变为特定计算而获得的输入的数量。在一些实现中,系统100将其计算扩展到3D并行性,并且可以改变为特定计算而获得的输入的数量,使得正在处理的输入张量是bx×by×bz的倍数。以这种方式,系统100可以被配置为实现计算单元112中MAC的更大利用率,而不管给定神经网络层的步幅值和/或跳过值。
图6A示出了示例图600A,其示出了基于步幅值处理输入数据以执行神经网络计算。通常,当配置系统以支持神经网络层的步幅功能时,至少存在两个约束。第一个约束是确保在系统将输出激活集写入或存储到存储器时没有存储器库冲突。第二个约束是确保系统从存储器读取或获得输入或激活时没有存储器库冲突。如本文所述,为了解决每个约束,系统100的专用硬件电路包括交叉开关单元114,其使得用于输出激活的数据存储在激活存储器108的存储器库中。交叉开关单元114使用特定的库分配模式来防止存储和加载操作期间的库冲突。
图6A和图6B的以下描述分别演示了系统100如何为下一层支持至少stride=1和为下一层支持至少stride=2。这些描述可以扩展到其他步幅参数,例如,stride=3或更高,这些参数可以被分配给下一层,该下一层处理用于给定神经网络计算的数据。例如,示例1D计算用于图6A和6B的描述。尽管1D示例用于说明,但是与图6A和6B的实现相关联的计算方案也可以扩展到更高的维度,诸如2D和更高的维度。此外,图6A和6B的描述中参考的库分配模式是用于说明系统100如何支持神经网络的各个层的不同步幅值的示例。因此,一个或多个其他库分配模式可以服务于给定的步幅值,并且在本公开的范围内。
通常,当计算当前层时,系统100可以使用控制逻辑106来为下一层确定步幅值。例如,控制逻辑106可以参考在神经网络的一组计算中为下一层定义步幅值的编程指令。指令可以指定步幅=1,这意味着接收来自激活存储器108的输入的下一层的步幅等于1。如图6A所示,当计算当前层时,系统100可以被配置为以8个连续输出激活为单位生成输出。在上面参考图5的示例中,系统100在前3个周期中使用内核大小3生成一组输出激活out[0]-out[7]。在接下来的3个周期中,系统100生成另一组输出激活out[8]-out[15]。在接下来的3个周期中,系统100生成另一组输出激活,out[16]-out[23]。
当存储为当前层生成的输出激活时,系统100可以参考下一层的步幅值。例如,当下一层的步幅为1时,系统100可以存储当前层的输出,使得第一输出集602被存储在第一组存储器库614(例如,bank_0-bank_7)中,第二输出集604存储在第二组存储器库616(例如,bank_0-bank_7)中,第三输出集606存储在第三组存储器库618(例如,bank_0-bank_7)中。在一些实现中,输出激活集602、604、606中的每个框表示一个输出激活。框中的数字,例如0、1、2、3等,表示输出激活数据写入或存储在哪个存储器库中。
例如,集合602中的前8个输出激活按bank_0、bank_1、bank_2、bank_3、bank_4、bank_5、bank_6和bank_7的顺序写入激活存储器108的存储器库。在一些实现中,该写入顺序对于集合604中的下面8个输出激活和集合606中的最后8个输出激活都是相同的。在其他实现中,该写入顺序可以根据使用控制逻辑106生成的特定库分配模式和下一层的步幅值而不同。交叉开关单元114处理用于库分配模式的指令,以基于指令中指定的库分配使输出602、604、606的集合存储在适当的存储器库中。
如上所述,交叉开关单元114使用特定的库分配模式将输出602、604、606的集合存储在激活存储器108中的存储器库的地址位置处。基于库分配模式,存储用于输出集的数据,因此在存储操作期间不发生库冲突,并且在后续读取操作期间不发生库冲突,以获得与存储的输出相对应的输入数据。
在一些实现中,系统100被配置为以不同偏移存储或放置存储在同一存储器库(例如,bank_0)中的不同输出集的数据。当存储和/或从存储器中检索输入数据时,可以使用偏移来确定存储输入数据的地址位置。例如,系统100可以发出数据请求以检索从偏移8100开始的数据。通常,偏移是一个标识符,诸如偏移ID号,可以用于指定存储器库中数据的正确位置。交叉开关单元114使用偏移值来标识存储特定输出的存储器库的特定地址位置。
在图6A的实现中,存储在同一存储器库(例如,bank_1)处的各个集合602、604、606中的每个输出的数据也以不同的偏移被存储。例如,集合602的8个输出激活的数据存储在8个存储器库(bank_0-bank_7)的偏移0处,例如偏移ID号0000。集合604的8个输出激活的数据存储在存储器库的偏移1处,例如偏移ID号0001。类似地,用于集合606的8个输出激活的数据存储在存储器库的偏移2处,例如,偏移ID号0002。
系统100从激活存储器108(存储器_0-存储器_7)的存储器库读取或获得输入数据,以执行下一层的计算,其中下一层的步幅等于1。在一些实现中,从激活存储器108获得的输入数据对应于来自输出集合602、604和606的输出激活。图6A中示出了处理器周期1、2和3的数据读取过程。如下文所述,在图6A的示例中,在三个时钟周期内从激活存储器108的存储器库获得相应的输入激活集。然而,这种读取、加载或以其他方式获得数据的过程(例如,激活)可能发生在三个处理器周期以上或三个处理器周期以下。
在第一周期中,系统100从memory bank_0到bank_7读取输入集608(激活)。在第二周期中,系统100读取输入集610,其中包括从bank_1到bank_7的7个激活和从memory bank_0的一个激活。如图6A所示,在由系统100执行的这些读取操作期间没有库冲突。在第三周期中,系统100加载或获得输入集612,其中包括从bank_2到bank_7的6个激活以及从memorybank_0和bank_1的两个激活。同样,对于系统100执行的该读取操作,不存在库冲突。
在图6A的实现中,旋转单元110用于在从激活存储器108读取激活之后旋转输入数据。例如,在涉及参数k0、k1和k2的计算的周期1中,8个激活中的第一个激活可以从bank_0读取并与参数k0相乘。在周期2中,8个激活中的第一个激活可以从bank_1读取并与参数k1相乘,然后与前一个周期(即周期1)的结果累加。以这种方式,可能需要系统100将从不同存储器库获得的激活路由到同一计算单元,例如,访问特定参数k0或k1的特定MAC。在一些实现中,必须旋转(或偏移)从8个不同的存储器库获得的输入数据,以便系统100将输入数据提供给计算单元112的正确MAC。
图6B示出了示例图600B,其示出了基于另一步幅值处理输入数据以执行神经网络计算。如上所述,当存储为当前层生成的输出激活时,系统100参考下一层的步幅值。当下一层的步幅为2时,系统100可以存储当前层的输出,使得第一输出集630存储在第一组存储器库642中,第二输出集632存储在第二组存储器库644中,第三输出集634存储在第三组存储器库646中。在该实现中,交叉开关单元114参考下一层的步幅值2,并基于该步幅值,生成库分配模式,该库分配模式使得用于各个输出集合的数据存储在激活存储器108的特定存储器库中,从而在存储操作或后续读取操作期间不发生库冲突以获得存储的数据。
例如,集合630中的8个输出激活按bank_0、bank_4、bank_1、bank_5、bank_2、bank_6、bank_3和bank_7的顺序写入激活存储器108的存储器库。集合632中的8个输出激活按bank_4、bank_0、bank_5、bank_1、bank_6、bank_2、bank_7和bank_3的顺序写入激活存储器108的存储器库。集合634中的8个输出激活以与集合630中的输出激活顺序匹配的顺序写入激活存储器108的存储器库。在一些实现中,写入顺序基于使用控制逻辑106生成的特定库分配模式和下一层的步幅值而不同。
在图6B的实现中,存储在同一存储器库(例如,bank_4)处的各个集合630、632、634中的每个输出的数据也存储在存储器库的不同偏移处。例如,集合630的8个输出激活的数据存储在偏移0处,集合632的8个输出激活的数据存储在偏移1处,并且集合634的8个输出激活的数据存储在偏移2处。该示例演示了在将输出激活存储或写入激活存储器108时交叉开关单元114的优点。为了支持可以被分配给下一层的不同步幅(或跳过)参数,在将数据存储在激活存储器108的存储器库中之前,可能需要系统100对输出数据进行混排。该混排操作由交叉开关单元114启用。以处理对应于前一层存储的输出激活的下一层的输入,如图650所示,系统100以步幅=2读取先前存储的输出激活的数据。如下所述,在图6B的示例中,在三个时钟周期内从激活存储器108的存储器库获得相应的输入激活集。然而,这种读取、加载或以其他方式获得数据的过程(例如,激活)可能发生在三个处理器周期以上或三个处理器周期以下。
图6B示出了处理器周期1、2和3的数据读取过程。在第一周期中,系统100从bank_0到bank_7读取输入集636(激活)。在第二周期中,系统100从bank_4到bank_7以及从bank_0到bank_3读取输入集638。如图6B所示,在由系统100执行的这些读取操作期间没有库冲突。在第三周期中,系统100从bank_1到bank_7加载或获得输入集640,并从memory bank_0加载或获得一个输入。同样,系统100执行的此读取操作没有库冲突。在一些实现中,系统100使用特定的重复模式来支持下一层的特定步幅值(例如,stride=2),而不存在任何读库冲突或写库冲突。
在图6B的实现中,旋转单元110可以用于在从激活存储器108读取激活之后旋转输入数据,从激活存储器108的不同存储器库获得的输入数据可能需要旋转(或偏移),使得系统100将输入数据提供给计算单元112的正确MAC。
图7示出了示出示例内核结构702、704、706、循环嵌套710和用于内核位置存储器的示例存储器字712的图。内核位置存储器被配置为存储表示一个或多个内核结构(例如,内核702、704、706)的数据。如本文所述,核心102可以被配置为包括内核位置存储器,其增强或增加内核的控制逻辑106的灵活性。增强的灵活性允许系统100和核心102有效地处理在其各自的形状和稀疏属性上可能不同的各种类型的内核结构。例如,核心102可以使用控制逻辑106的内核位置存储器来有效地支持内核结构中的不同类型的数据稀疏性。
通常,内核位置存储器130可以位于核心102处,例如,嵌入在控制逻辑106处。内核位置存储器130使系统100能够支持可以涉及任意形状内核结构的各种神经网络计算。内核结构的形状可以参考内核结构的各自稀疏性来描述。内核结构的稀疏性对应于分配给表示内核结构的张量的各个元素的单个零的数量。例如,内核结构702对应于非稀疏内核,因为该结构没有为其元素分配零。内核结构704对应于菱形内核,因为该结构在其元素处具有零,这使得该结构具有通常对应于菱形的形状。内核结构706对应于任意稀疏内核,因为零似乎被任意分配给其元素。如图7所示,内核结构706可以具有具有非零值的第一数据元素708a和具有零值的第二数据元素708b。
核心102的内核位置存储器被配置为在示例神经网络计算期间支持内核结构的一个或多个空间维度(x,y)上的任意形状。除了空间维度x、y之外,核心102的内核位置存储器还可以支持zin方向上的稀疏性。如上所述,zin或深度维度可以对应于输入或激活体积的第三维度,并且可以表示图像的各个颜色通道。
在一个实例中,具有任意内核形状的示例矩形内核可以包括多个被分配零值的元素。内核结构或张量中的多个零会降低系统的效率或硬件利用率。当系统因加载不包含用于执行计算的有用数据的零元素而丢失处理周期时,就会出现效率降低和硬件利用率降低的情况。如下,本文档描述了使用由内核位置存储器启用的控制功能来仅将非零内核组件加载到计算单元112的计算单元的技术。所描述的技术改进了系统的效率,因为系统不会丢失加载零内核组件的周期。系统100或其他硬件可以用于训练神经网络,使其具有特定的稀疏性或稀疏模式。该训练框架可以构造有效的网络来利用由系统100支持的稀疏性。
核心102被配置为使用控制逻辑106的内核位置存储器来存储非零内核位置。在一些实现中,内核位置存储器是与激活存储器108分离的存储器。在一些情况下,系统100使用示例存储介质,例如,随机存取存储器,作为包括在系统100中的每个核心102的内核位置存储器。包括以下示例以提供以下与内核位置存储器相关的描述的上下文。在一个实现中,核心102使用嵌套循环710在神经网络的示例卷积层处处理输入集或输入激活。例如,将3×3内核结构应用于16×16×8个输入激活的输入张量,以生成16×16×32个输出激活的输出张量。添加x_loop和kx_loop中的用于循环的索引以计算3D输入张量的x索引,添加y_loop和ky_loop以计算y索引,添加zin_loop以计算z索引。以这种方式,系统100可以基于(x,y,z)=(x_loop+kx_loop,y_loop+ky_loop,zin_loop)迭代输入张量位置。在一些实现中,这对应于上面讨论的bx×by×bz基本张量单位的锚定点,其中锚定点指基本张量单位原点处的激活。例如,参考基本张量单位原点处激活的锚定点可以是z方向上第一个通道x和y位置左上角的激活。
对于任意形状的内核,系统100被配置为使用从内核位置存储器获得的数据来替换ky_loop、kx_loop和zin_loop。例如,内核位置存储器的存储器字712可以具有三个数据字段,其中三个字段中的特定字段指示各自的x、y或zin索引。在一些实现中,存储器字中的第四字段用于指示给定zin索引的内核计算的结束。在一些情况下,x和y索引的数据大小可以分别为m比特和n比特,并且系统100可以被配置为基于此m比特和n比特数据大小支持最多2mx2n内核窗口。类似地,系统100可以在单个周期中读取zin索引的部分数据(例如,2、4或6zin)。zin索引的参数值可以指示正在读取的数据的zin部分的索引。例如,转换为{zinindex}=0的参数值可以指示对应于zin元素[0]的数据部分,或者转换为{zin index}=1的参数值可以指示对应于zin元素[1]的数据部分。在一些情况下,zin索引可以具有1比特的数据大小,并且系统100可以被配置为支持基于该1比特数据大小的特定zin索引大小。如图7所示,存储器字可以包括结束标志,其指示存储器字对应于索引的最后一个元素。
图8示出了包括关于内核位置存储器的存储器地址的信息的示例数据表800。例如,表800示出了存储在示例内核的x索引806、y索引808和zin索引810的存储器地址位置的数据内容。数据内容可以被访问并用于处理输入张量。在一些实现中,系统100被配置为标识存储在参数存储器中的参数张量的索引。然后,系统可以将所标识的索引添加到存储在激活存储器108处的输入张量的(x,y,z)位置,以计算最终(x,y,z)位置。例如,可以处理16×16×8输入张量802的激活以生成用于16×16×32输出张量的输出激活。核心102可以使用嵌套循环804处理16×16×8输入张量802的激活。
当该处理操作开始时,核心102可以初始化嵌套循环804,使得zout_loop=0、y_loop=0和x_loop=0。使用所述技术,系统100被配置为例如逐个读取内核位置存储器的存储器地址位置。例如,在第一循环中,系统使核心102读取x索引806、y索引808和zin索引810中的每一个的存储器地址,以从内核位置存储器获得数据内容(0,2,0)。为内核位置存储器的这些索引获得的数据被添加到用于循环804的输出,以计算等于(0+0,0+2,0)=(0,2,0)的最终(x,y,z)位置。从锚点位置(0,2,0)读取新的基本张量单位。
在第二周期中,系统100使核心102从内核位置存储器读取x索引806、y索引808和zin索引810中的每一个的存储器地址以获得数据812(1,4,0)。在该实例中,系统基于(0+1,0+4,0)计算最终(x,y,z)以获得结果(1,4,0)。系统100可以对第三、第四或第五循环执行类似的计算。在一些实现中,系统100被配置为标识用于指示结束标志条件已经满足(例如,结束标志=1)的参数(例如,结束标志)的出现。如上所述,满足的结束标志条件的出现意味着当前存储器字是涉及内核位置存储器的进程迭代的结束。例如,end_flag参数可以用于表示内核位置存储器迭代已完成。
在一些实现中,第一内核位置存储器迭代的完成使相对于正在处理的输入张量802的当前位置[元素,索引]的增加。以这种方式,为内核位置存储器的下一次迭代增加输入张量802的当前位置值。例如,基于输入张量802,x_loop可以增加相当于(zout_loop,y_loop,x_loop)=(0,0,1)的步幅量。在此实现中,系统100开始读取内核位置存储器的一组存储器地址中的第一位置,以获得数据内容以执行如上参考第一迭代所述的类似计算。响应于读取内核位置存储器,系统100应用该类似计算来计算最终集合x、y和z输出。
第二迭代的处理可以与第一迭代基本相似。例如,系统100可以标识结束标志参数的出现,并读取结束标志参数的值814以确定是否满足结束标志条件(例如,end flag=1)。系统可以生成信号来指示内核位置存储器迭代已完成,以响应于确定已满足结束标志条件。当内核位置存储器的迭代完成时,其中x_loop从0迭代到15,系统随后可增加输入张量802的当前位置值,其可以对应于(zout_loop,y_loop,x_loop)=(0,1,0)。内核位置存储器的迭代的完成,其中y_loop从0迭代到15,可以导致输入张量802的当前位置增加,其触发对不同zout的改变,例如,对应于(zout_loop,y_loop,x_loop)=(1,0,0)。因此,内核位置存储器的另一迭代可以开始从存储器地址816读取zout=1(818)。在一些实现中,系统100包括zout监视逻辑,被配置为监视用于循环的zout以确定用于循环的zout的当前位置值并检测用于循环的zout的位置值的增加。
图9示出了在执行深度神经网络计算时可以利用的并行性的示例图。如下面更详细地讨论的,至少可以参考深度卷积来描述并行性。通常,给定具有多个输入通道的输入张量,深度卷积的计算可以包括:i)将输入张量和相应的参数滤波器(例如k0、k1、k2)拆分为通道;以及ii)对于输入张量的每个通道,将通道的输入与相应的滤波器参数卷积以生成相应的输出。多个输出可以合并或连接,以生成示例输出张量的输出激活。通常,涉及一个或多个输入通道的深度卷积可以生成输出张量的一个或多个输出通道的输出激活。
如上所述,示例输入张量可以是多维(例如,3D)输入张量,其可以包括输入张量的宽度、高度和深度。这些维度可以分别对应于x维度、y维度和zin维度。深度或zin维度可以对应于输入或激活体积的第三维度,并且可以表示图像的各个颜色通道。在一些实现中,当计算深度卷积时,给定通道中的单个激活可以与多个参数(kx和ky并行性)卷积。以这种方式,可以利用利用系统100的并行性特征的机会,例如,相对于可以使用传统电路执行深度卷积的速度来加速执行深度卷积。在一些实现中,使用系统100的专用处理器硬件电路,深度卷积被加速,而系统100也在计算单元112处实现相对高的利用率。例如,高利用率的特征在于超过70%的MAC被用于执行计算。
系统100被配置为利用其并行性特征来支持可以用于在多层神经网络上执行计算的不同计算方案。在一些实现中,根据在核心102处(例如,从外部控制器或主机设备)接收的用于神经网络计算的参数和指令,可以利用不同类型的并行性。在一些情况下,对于特定卷积计算,诸如密集卷积,可能存在各种并行计算机会。例如,在密集卷积中,系统100可以被配置为基于计算单元112处可用的MAC数量来支持激活集的特定数量的输入通道(zin)和输出通道(zout)。在一些实现中,系统100使用zin、zout、x和y并行性用于密集卷积中的计算。特定方向(或沿特定维度)上的并行性可以对应于在同一计算周期中计算该方向上的多个元素。例如,在计算示例500中,当同时(例如并发)计算x方向上的8个元素时,可以对应8x并行性。系统100被配置为支持a-zin、b-zout、c-x和d-y并行性,这需要a×b×c×d个MAC单元,其中a、b、c和d是整数值。例如,系统100可以被配置为支持8zin、8zout、6x和6y并行性,其在计算单元112处需要8x 8x 6x 6=2304个MAC单元。
然而,在深度卷积中,输入通道可以用于生成多个输出通道。例如,单个输入通道可以用于生成1个输出通道、2个输出通道或4个输出通道。如下面更详细地描述的,深度卷积减少了并行计算的机会,因为深度卷积在zin和zout维度之间的连接较少,导致效率低下的zin和zout并行性。深度卷积的这一特性可以显著降低计算单元中的MAC单元利用率,从而导致处理器电路中的低效率。
在系统100的处理器硬件电路所支持的并行性特征中,kx和ky并行性可以提供机会来提高MAC单元对深度卷积相关联计算的利用率。在kx和ky并行性中,x和y方向上的多个参数与激活同时相乘,参考在密集卷积示例500中,x和y方向上的单个参数(k0、k1和k2)在单个周期中相乘。如下所述,kx和ky并行性可以在不同的zout倍数(zout-multiple)情况下执行,其中“zout倍数”是指从单个输入通道生成的多个输出通道。例如,如果一个输入通道生成两个输出通道,则对于此计算,zout multiple=2。
现在参考图9-图12,例如,使用示例1D计算来说明使用kernal size=7的kx并行性。尽管图中示出了1D示例以供说明,但该用于执行1D计算的方案可以扩展到更高的维度,诸如2D和更高的维度。具体而言,示例1D计算示出了如何读取特定周期的输入或激活,以及如何执行2kx并行性。对于给定的深度卷积,系统100在输入结构的x方向的单个周期中读取8个激活902。例如,在第一循环中,从激活存储器108读取索引in[0]-in[7]处的激活902。激活902可以基于控制逻辑106发出的计算指令被分发到特定数量的MAC上。例如,两个激活904的集合可以被分发到用于执行计算的MAC组中的至少一个MAC 906。输入908可以表示具有零值的图像像素。如图所示,输入0和1分别与参数k0和k1相乘。然后,乘法结果被累加以形成输出激活0(912),例如,完全或部分输出激活。类似地,输入1和2分别与参数k0和k1相乘,然后乘法结果也被累加以形成完全或部分输出激活1。在MAC910中,输入7可以与参数k0相乘以形成部分输出7。
在一些实现中,图9所示的1-D示例可以用MAC单元(诸如MAC 906)实现,其具有两个乘法器和一个累加器,其中累加器包括加法器电路,该加法器电路将在一个或多个处理器周期上累加的部分总和相加。当MAC单元(诸如MAC 906)包括用于x方向和y方向两者的四个乘法器(和一个累加器)时,这样的实现可以扩展到二维,其中两个乘法器启用kx并行性,另外两个乘法器启用ky并行性。对于这个1D示例,只描述了两个乘法器,因为只参考x方向。如图9所示,在1D输入结构的x方向上的两个激活的集合904对于单个输出被相乘和累加,从而表示kx并行性为2。
在一些实现中,在下一个处理器周期期间,使用参数k0、k1中的至少一个,对于沿x方向的另一个输入窗口,也可能发生与在cycle=1时发生的计算类似的计算。在一些情况下,当在前一个周期中读取或使用时,参数(例如k1)可以被存储在临时寄存器中,该临时寄存器随后被访问以检索参数以执行后续计算。例如,访问寄存器以获得k1并将其馈送到计算单元112的MAC910以生成后续乘法结果。乘法结果被累加到输出。
在第二循环中,如图10所示加载索引in[2]-in[9]处的激活。如MAC 1002所示,将用于前两个激活in[2]和in[3]的数据分别乘以k2和k3,然后累加到来自第一循环的结果,以生成部分总和in[0]*k0+in[1]*k1+in[2]*k2+in[3]*k3。然而,在MAC 1004中,用于激活in[8]和in[9]的数据与k1和k2相乘,其中k1从上一个周期读取,并被存储在临时寄存器中,以在周期2中使用。使用MAC 1004生成部分总和in[7]*k0+in[8]*k1+in[9]*k2。
在第三循环中,如图11所示,使用不同的数据集(in[4]-in[11])和参数(k4和k5)运行相同的计算。在1102中,in[4]和in[5]分别与k4和k5相乘,生成部分总和in[0]*k0+in[1]*k1+in[2]*k2+in[3]*k3+in[4]*k4+in[5]*k5。在1104中,生成部分总和in[7]*k0+in[8]*k1+in[9]*k2+in[10]*k3+in[11]*k4。
在图12所示的最后一个循环中,在1202中in[6]与k6相乘,然后累加得到完整总和in[0]*k0+in[1]*k1+in[2]*k2+in[3]*k3+in[4]*k4+in[5]*k5+in[6]*k6。将7个输入数据与k0-k6相乘并累加以计算7的内核大小。第二输入1204为零,因为内核大小为7。在1206中,有两个数据可用于乘法,in[12]和in[13],与k5和k6相乘。1206生成的完整总和为[7]*k0+in[8]*k1+in[9]*k2+in[10]*k3+in[11]*k4+in[12]*k5+in[13]*k6,它还将7个数据与k0-k6相乘,并累加以计算7的内核大小。在一些实现中,上述示例中的操作的控制可以由控制逻辑106统筹,以将激活和参数分配和馈送到MAC单元。在一些实现中,系统100可以利用使用相同激活但不同参数集的不同MAC单元集来支持zout倍数,其中一个输入通道生成多个输出通道。
通常,系统100可以支持多种不同的kx-ky并行性机制,甚至可以在单个硬件电路中支持多个不同的kx-ky并行性机制。尽管图9-图12示出了2kx并行性的数据和参数分发模式,但类似的分发方案可以支持4kx并行性,可配置的分发逻辑可以用于支持多个不同的kx-ky并行性机制。为了便于讨论,可以考虑以下配置类型:i)2×2kx-ky并行性,zout倍数等于4;ii)4×4kx-ky平并行性,zout倍数等于1;以及iii)4×2kx-ky并行性,zout倍数等于2。对于kx-ky配置iii),这可以实现为kx parallelism=4和ky parallelism=2或kxparallelism=2和ky parallelism=4。
通常,深度卷积内核在输入通道到输出通道之间的连接较少,从而减少了可以被利用的zin和zout并行性。系统100可以通过利用内核x和y方向的并行性(即kx-ky并行性)来克服并行性的降低。此外,可以选择kx-ky并行性的确切范围,以便在密集卷积和深度卷积中最大限度地利用乘法器。
在一些实现中,对于4×4kx-ky并行性,系统100可能仍然需要2×2kx-ky并行性中相同数量的总乘法器。例如,相对于覆盖2kx并行性所需的乘法器数量而言,覆盖4kx并行性可能需要两倍的乘法器。这与y方向上的ky并行性相同,总共需要4倍多的乘法器,但这一要求可以被否定,因为如上所述,对于4×4kx-ky并行性,zout multiplier=1,而对于2×2kx-ky并行性,zout multiplier=4。在一些实现中,4×4kx-ky并行性需要额外的加法器来从中间部分总和生成输出激活914。然而,在2×2kx-ky并行性中可以跳过附加加法器阶段。
再次参考图9,在该1D示例中,有两个“激活分发+MAC单元”模块支持2kx和4kx并行性。在2D示例中,需要四个这样的模块来支持2×2、2×4、4×2和4×4kx-ky并行性。加法器阶段916接收两组输出激活,即输出激活A和输出激活B。在本示例中,每组输出激活包含8个输出激活。对于涉及2kx并行性的第一种情况,跳过加法器阶段916。在输出端,有两组输出激活被选为2kx并行性模式下的最终输出。对于涉及4kx并行性的第二种情况,加法器阶段916将两组输出激活相加,得到一组输出激活,该输出激活被选择为4kx并行性模式下的最终输出。
在一些实现中,该体系结构可以采用可配置逻辑以取决于操作模式(诸如密集卷积、以2×2kx-ky并行性的深度卷积、以2×4kx-ky并行性的深度卷积、以4×2kx-ky并行性的深度卷积、以及以4×4kx-ky并行性的深度卷积)重新布置输入激活和/或参数。在一些实现中,该体系结构可以采用可配置逻辑来取决于操作模式重新布置输出激活。
图13示出了示例图,其示出了当zout multiple=1时的深度卷积层1320。在一些实现中,每个输入通道的内核可以使用不同的参数,但具有相同的形状,例如3×3或7×7。在一些实现中,普通密集卷积可以使用4D权重张量,而纵深卷积只能使用3D权重张量。
通常,与普通密集卷积相比,深度卷积可以是稀疏的(例如,非常稀疏的)。这是因为连接数量除以通道数量。在执行深度卷积时,严重利用输入和输出激活通道并行性的传统电路无法实现其计算单元的高利用率。这是因为深度卷积涉及输入和输出通道的计算与存储器带宽的比率远低于典型的密集卷积。然而,从旋转单元110到系统100的专用硬件电路的计算单元112中的MAC的路由可以被配置为实现高于用常规硬件电路观察到的速率的利用率。在一些实现中,可以通过改变输入和权重到计算单元112的MAC的连接模式来实现改进的利用率。这可能需要可配置逻辑来根据操作模式(例如密集卷积和深度卷积)改变路由方案。
通过利用可配置逻辑来支持灵活的连接模式,系统100可以在密集卷积和深度卷积中实现高利用率。例如,深度卷积在通道(例如,输入或输出通道)之间具有较少的链路,即,单个输入通道用于生成多个输出通道。另一方面,密集卷积使用多个输入通道来生成多个输出通道。核心102可以被配置为利用深度卷积中的空间内核内的并行性机会。以这种方式,系统100可以通过将例如bx×by×bz基本输入张量中的bz-zin数据作为空间维度的一部分来处理,使用可配置连接性逻辑来实现高利用率。
可以使用图14中的示例方案获得该配置,图14示出了支持2×2kx-ky并行性的4×4×bz示例基本输入张量。输入张量的x和y空间维度参考4×4数据大小是用于描述系统100如何支持kx-ky并行性的示例。x和y维度的其他数据大小在本说明的范围内。
4×4×bz输入激活1402可以分为bz 4×4×1激活1404。此示例显示如何分发第一输入通道1406并将其馈送至MAC单元,以及如何以相同方式分发所有其他通道。对于2×2kx-ky并行性,4×4×1输入激活1406被分成多个2×2片1408,其中每个2×2片表示一个输入窗口,2×2窗口中的每个元素是4×4×1窗口1406中的相邻数据。在一些实现中,边缘1410、1412和1414处的一个或多个2×2窗口是冗余的,以支持908中的最后一个像素窗口。这些2×2窗口可能需要与其相邻的2×2窗口相同的数据,但一些数据可以如上所述被屏蔽或置零。在图14的实现中,输入窗口1410显示2kx并行性所需的冗余窗口,输入窗口1412是2ky并行性所需的冗余窗口。输入窗口1414是用于2×2kx-ky并行性的冗余窗口。在4×4和2×4(4×2)kx-ky并行性中,可以使用不同的分发模式来支持给定的kx-ky并行性。
当使用4×4kx-ky并行性时,此计算方案可能涉及在4个周期内进行5×5卷积。使用系统100的专用硬件电路,与传统电路相比,该计算方案可以被配置为在示例计算单元中实现MAC集群的改进的百分比利用率。例如,计算方案可以至少取决于内核大小、zout倍数和kx-ky并行性在计算单元112处实现大于70%的MAC单元利用率。在一些实现中,该第一计算方案可能仍然需要额外的计算来执行部分总和的完全减少。
利用计算单元112处MAC的改进的利用率百分比,系统100可以在9个周期中使用2x2 kx-ky并行性计算4个同时(即,zout multiple=4)的例如5×5深度卷积。在第二计算方案中,输出通道可以对应于与输入通道相同的2×2块,跨越属于4个单独的深度卷积的4个输出。该第二计算方案可以提供实质上更高的利用率,并且避免了减少步骤的需要。
利用计算单元112处改进的MAC的利用率百分比,系统100还可以在6个周期内使用2×4kx-ky并行性计算2个同时(即,zout multiple=2)的例如5×5深度卷积。
在一些实现中,使用利用交叉开关单元114处理的库分配模式,参考图13描述的计算的第一部分的结果可以被写入到激活存储器108的地址位置,例如,跨多个存储器库。在一些情况下,为了能够并行地从多个存储器库读取,交叉开关单元114可以处理定义不同的x维度和y维度布置的指令。

Claims (25)

1.一种用于对包括多个神经网络层的神经网络执行计算的电路,所述电路包括:
处理设备,被配置为处理数据信号并提供用于执行所述计算的编程数据;以及
核心,与所述处理设备进行数据通信,以接收由所述处理设备提供的所述编程数据,其中所述核心包括:
激活存储器,被配置为存储层输入集;
参数存储器,被配置为存储用于第一神经网络层的参数;
旋转单元,被配置为基于所述编程数据,旋转访问来自所述激活存储器的所述层输入集;
计算单元,具有多个计算单元格,所述多个计算单元格中的至少一个计算单元格被配置为:
i)接收用于所述第一神经网络层的、由所述旋转单元访问的所述层输入集的输入,
ii)接收用于所述第一神经网络层的参数,以及
iii)使用所述输入和所述参数生成所述第一神经网络层的输出的至少一部分;以及
交叉开关单元,被配置为根据基于所述编程数据和分配给第二神经网络层的属性值的库分配模式,使所述第一神经网络层的所述输出被存储在所述激活存储器中。
2.根据权利要求1所述的电路,其中,所述旋转单元还被配置为旋转输入张量的元素,其中所述输入张量的每个元素对应于存储在所述激活存储器中的输入集的相应的输入。
3.根据权利要求2所述的电路,其中,所述旋转单元还被配置为:
基于第一旋转因子沿所述输入张量的第一维度旋转所述输入张量的元素;
基于不同于所述第一旋转因子的第二旋转因子,沿所述输入张量的不同的第二维度旋转所述输入张量的元素;以及
向所述计算单元的计算单元格提供与旋转的所述输入张量的元素相对应的输入。
4.根据权利要求1所述的电路,其中,所述交叉开关单元还被配置为:
响应于处理所述库分配模式,确定所述输出中的激活的映射,其中所述映射基于分配给所述第二神经网络层的所述属性值,标识用于存储用于所述第二神经网络层的所述激活的所述激活存储器的存储器库。
5.根据权利要求4所述的电路,其中,所述交叉开关单元还被配置为:
使得用于所述第一神经网络层的所述输出的数据被存储在所述激活存储器的特定地址位置处,用于所述输出的所述数据基于针对所述神经网络的不同相应层改变的可配置映射被分配到所述激活存储器的地址位置。
6.根据权利要求4所述的电路,其中:
所述旋转单元还被配置为访问用于所述第一神经网络层的所述输出的输出数据,作为到所述第二神经网络层的层输入,用于在所述第二神经网络层处进行处理;以及
所确定的映射被配置使得当所述旋转单元访问对应于所述第一神经网络层的所述输出的、用于所述第二神经网络层的层输入时,在所述激活存储器的所述存储器库处不发生库冲突。
7.根据权利要求1所述的电路,其中,分配给所述第二神经网络层的所述属性值为:
用于所述第二神经网络层的步幅值,或者
用于所述第二神经网络层的跳过值。
8.根据权利要求1所述的电路,其中,所述核心被配置为:
使用所述旋转单元访问存储在所述激活存储器的第一组存储器库中的层输入,而不发生库冲突;以及
使用所述交叉开关单元将层输出存储在所述激活存储器的第二组存储器库中,而不发生库冲突。
9.根据权利要求7所述的电路,其中,所述核心被配置为:
将所述旋转单元的基于旋转的数据访问操作与所述交叉开关单元的基于模式的数据存储操作进行同步,以实现所述计算单元的利用率超过阈值利用率。
10.根据权利要求1所述的电路,其中,所述处理设备被配置为:
从外部控制器接收包括要在所述核心处使用的数据值的指令;以及
至少向所述核心提供所述指令的所述数据值,用于存储在所述核心的组件处。
11.根据权利要求10所述的电路,其中,所述处理设备是数字信号处理器DSP,被配置为:
处理从所述外部控制器接收的指令;以及
响应于处理所述指令,使用所述指令的数据值在所述核心处配置一个或多个寄存器。
12.根据权利要求11所述的电路,其中,所述核心被配置为访问所述一个或多个寄存器,以获得定义对所述神经网络的计算的配置数据,所述计算是由所述核心的所述计算单元基于从自所述外部控制器接收的所述指令导出的数据值来执行的。
13.一种计算机实现的方法,用于对包括多个神经网络层的神经网络执行计算,所述方法包括:
由硬件电路的处理设备,提供用于执行对所述神经网络的所述计算的编程数据;
由与所述处理设备通信的、所述硬件电路的核心接收由所述处理设备提供的所述编程数据,其中所述核心包括被配置为存储层输入集的激活存储器和被配置为存储用于第一神经网络层的参数的参数存储器;
由所述核心的旋转单元访问存储在所述激活存储器处的所述层输入集,其中所述旋转单元基于由所述核心接收的所述编程数据,旋转访问所述层输入集;
由所述核心的计算单元接收由所述旋转单元访问的所述层输入集的输入,所述输入被接收用于在所述第一神经网络层处进行处理;
由所述计算单元接收用于所述第一神经网络层的参数;
由所述计算单元使用所述参数和由所述旋转单元访问的所述输入生成所述第一神经网络层的输出;以及
根据基于所述编程数据和分配给第二神经网络层的属性值的库分配模式,使用所述核心的交叉开关单元将所述第一神经网络层的所述输出存储在所述激活存储器中。
14.根据权利要求13所述的方法,还包括:
由所述旋转单元旋转输入张量的元素,其中所述输入张量的每个元素对应于存储在所述激活存储器中的输入集的相应的输入。
15.根据权利要求14所述的方法,还包括:
由所述旋转单元基于第一旋转因子沿所述输入张量的第一维度旋转所述输入张量的元素;
由所述旋转单元基于不同于所述第一旋转因子的第二旋转因子,沿所述输入张量的不同的第二维度旋转所述输入张量的元素;以及
由所述旋转单元向所述计算单元的计算单元格提供与旋转的所述输入张量的元素相对应的输入。
16.根据权利要求13所述的方法,还包括:
由所述交叉开关单元响应于处理所述库分配模式,确定所述输出中的激活的映射,其中所述映射基于分配给所述第二神经网络层的所述属性值,标识用于存储用于所述第二神经网络层的所述激活的所述激活存储器的存储器库。
17.根据权利要求16所述的方法,还包括:
使用所述交叉开关单元,基于针对所述神经网络的不同相应层改变的可配置映射,将用于所述第一神经网络层的所述输出的数据分配到所述激活存储器的地址位置;以及
使用所述交叉开关单元,基于用于所述第二神经网络层的所述可配置映射,将用于所述第一神经网络层的所述输出的所述数据存储在所述激活存储器的特定分配的地址位置。
18.根据权利要求16所述的方法,其中:
所述旋转单元还被配置为访问用于所述第一神经网络层的所述输出的输出数据,作为到所述第二神经网络层的层输入,用于在所述第二神经网络层处进行处理;以及
所确定的映射被配置使得当所述旋转单元访问对应于所述第一神经网络层的所述输出的、用于所述第二神经网络层的层输入时,在所述激活存储器的所述存储器库处不发生库冲突。
19.根据权利要求13所述的方法,还包括:
分配用于所述第二神经网络层的、对应于所述属性值的步幅值;或者
分配用于所述第二神经网络层的、对应于所述属性值的跳过值。
20.根据权利要求13所述的方法,还包括:
由所述核心使用所述旋转单元访问存储在所述激活存储器的第一组存储器库中的层输入,而不发生库冲突;以及
由所述核心使用所述交叉开关单元将层输出存储在所述激活存储器的第二组存储器库中,而不发生库冲突。
21.根据权利要求20所述的方法,还包括:
由所述核心将所述旋转单元的基于旋转的数据访问操作与所述交叉开关单元的基于模式的数据存储操作进行同步,以实现所述计算单元的利用率超过阈值利用率。
22.根据权利要求13所述的方法,还包括:
由所述处理设备从外部控制器接收包括要在所述核心处使用的数据值的指令;以及
由所述处理设备至少向所述核心提供所述指令的所述数据值,用于存储在所述核心的组件处。
23.根据权利要求22所述的方法,其中,所述处理设备是数字信号处理器DSP,所述方法还包括:
由所述DSP处理从所述外部控制器接收的指令;以及
响应于处理所述指令,由所述DSP使用所述指令的数据值在所述核心处配置一个或多个寄存器。
24.根据权利要求23所述的方法,还包括:
由所述核心访问所配置的一个或多个寄存器,以获得定义对所述神经网络的计算的配置数据;以及
在所述计算单元处,基于从自所述外部控制器接收的所述指令导出的数据值来执行所述计算。
25.一个或多个非暂时性机器可读存储设备,用于存储可由一个或多个处理设备执行以引起操作性能的指令,所述操作包括:
由硬件电路的处理设备,提供用于执行对所述神经网络的所述计算的编程数据;
由与所述处理设备通信的、所述硬件电路的核心接收由所述处理设备提供的所述编程数据,其中所述核心包括被配置为存储层输入集的激活存储器和被配置为存储用于第一神经网络层的参数的参数存储器;
由所述核心的旋转单元访问存储在所述激活存储器处的所述层输入集,其中所述旋转单元基于由所述核心接收的所述编程数据,旋转访问所述层输入集;
由所述核心的计算单元接收由所述旋转单元访问的所述层输入集的输入,所述输入被接收用于在所述第一神经网络层处进行处理;
由所述计算单元接收用于所述第一神经网络层的参数;
由所述计算单元使用所述参数和由所述旋转单元访问的所述输入生成所述第一神经网络层的输出;以及
根据基于所述编程数据和分配给第二神经网络层的属性值的库分配模式,使用所述核心的交叉开关单元将所述第一神经网络层的所述输出存储在所述激活存储器中。
CN201980092225.5A 2018-12-21 2019-12-20 神经网络处理器 Pending CN113424201A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/230,740 2018-12-21
US16/230,740 US20200202198A1 (en) 2018-12-21 2018-12-21 Neural network processor
PCT/US2019/068092 WO2020132593A1 (en) 2018-12-21 2019-12-20 Neural network processor

Publications (1)

Publication Number Publication Date
CN113424201A true CN113424201A (zh) 2021-09-21

Family

ID=69191267

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201980092225.5A Pending CN113424201A (zh) 2018-12-21 2019-12-20 神经网络处理器

Country Status (6)

Country Link
US (1) US20200202198A1 (zh)
EP (1) EP3891663A1 (zh)
JP (1) JP7245338B2 (zh)
CN (1) CN113424201A (zh)
CA (1) CA3124369A1 (zh)
WO (1) WO2020132593A1 (zh)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10387298B2 (en) 2017-04-04 2019-08-20 Hailo Technologies Ltd Artificial neural network incorporating emphasis and focus techniques
US11544545B2 (en) 2017-04-04 2023-01-03 Hailo Technologies Ltd. Structured activation based sparsity in an artificial neural network
US11551028B2 (en) 2017-04-04 2023-01-10 Hailo Technologies Ltd. Structured weight based sparsity in an artificial neural network
US11615297B2 (en) 2017-04-04 2023-03-28 Hailo Technologies Ltd. Structured weight based sparsity in an artificial neural network compiler
US11238334B2 (en) * 2017-04-04 2022-02-01 Hailo Technologies Ltd. System and method of input alignment for efficient vector operations in an artificial neural network
US11061738B2 (en) * 2019-02-28 2021-07-13 Movidius Limited Methods and apparatus to store and access multi dimensional data
EP3719696A1 (en) * 2019-04-04 2020-10-07 Aptiv Technologies Limited Method and device for localizing a sensor in a vehicle
US11455368B2 (en) 2019-10-02 2022-09-27 Flex Logix Technologies, Inc. MAC processing pipeline having conversion circuitry, and methods of operating same
US11687764B2 (en) * 2020-04-17 2023-06-27 Samsung Electronics Co., Ltd. System and method for increasing utilization of dot-product based neural network accelerator
GB202008299D0 (en) * 2020-06-02 2020-07-15 Imagination Tech Ltd Manipulation of data in a memory
US11586442B2 (en) * 2020-08-06 2023-02-21 Nxp Usa, Inc. System and method for convolving image with sparse kernels
US11237894B1 (en) 2020-09-29 2022-02-01 Hailo Technologies Ltd. Layer control unit instruction addressing safety mechanism in an artificial neural network processor
US11874900B2 (en) 2020-09-29 2024-01-16 Hailo Technologies Ltd. Cluster interlayer safety mechanism in an artificial neural network processor
US11263077B1 (en) 2020-09-29 2022-03-01 Hailo Technologies Ltd. Neural network intermediate results safety mechanism in an artificial neural network processor
US11811421B2 (en) 2020-09-29 2023-11-07 Hailo Technologies Ltd. Weights safety mechanism in an artificial neural network processor
US11221929B1 (en) 2020-09-29 2022-01-11 Hailo Technologies Ltd. Data stream fault detection mechanism in an artificial neural network processor
US20220129744A1 (en) * 2020-10-26 2022-04-28 Arm Limited Method for permuting dimensions of a multi-dimensional tensor
CN112686374A (zh) * 2020-12-31 2021-04-20 中山大学 基于自适应负载分配的深度神经网络模型协同推理方法
US20220283779A1 (en) * 2021-03-03 2022-09-08 Flex Logix Technologies, Inc. MAC Processing Pipelines, Circuitry to Configure Same, and Methods of Operating Same
WO2023070324A1 (en) * 2021-10-26 2023-05-04 Intel Corporation Method and apparatus for optimizing inference of deep neural networks
US11709611B2 (en) 2021-10-26 2023-07-25 SambaNova Systems, Inc. Determining and using memory unit partitioning solutions for reconfigurable dataflow computing systems
US11657260B2 (en) * 2021-10-26 2023-05-23 Edgecortix Pte. Ltd. Neural network hardware accelerator data parallelism
WO2024058810A1 (en) * 2022-09-15 2024-03-21 Google Llc Reducing memory bank conflicts in a hardware accelerator

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9710265B1 (en) * 2016-10-27 2017-07-18 Google Inc. Neural network compute tile
US9721203B1 (en) * 2016-11-10 2017-08-01 Google Inc. Performing kernel striding in hardware
US20170323224A1 (en) * 2016-05-07 2017-11-09 1026 Labs, Inc. Apparatus for hardware accelerated machine learning
US9836691B1 (en) * 2016-10-27 2017-12-05 Google Inc. Neural network instruction set architecture
US20180157962A1 (en) * 2016-12-01 2018-06-07 Via Alliance Semiconductor Co., Ltd. Neural network unit with memory layout to perform efficient 3-dimensional convolutions
CN108701236A (zh) * 2016-01-29 2018-10-23 快图有限公司 卷积神经网络

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05101031A (ja) * 1991-10-09 1993-04-23 Nec Corp ニユーラルネツトワーク装置
KR100874949B1 (ko) 2006-11-15 2008-12-19 삼성전자주식회사 단일 명령 다중 자료 프로세서 및 그것을 위한 메모리어레이 구조
WO2020059073A1 (ja) * 2018-09-20 2020-03-26 株式会社Pfu 情報処理装置、方法及びプログラム

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108701236A (zh) * 2016-01-29 2018-10-23 快图有限公司 卷积神经网络
US20170323224A1 (en) * 2016-05-07 2017-11-09 1026 Labs, Inc. Apparatus for hardware accelerated machine learning
US9710265B1 (en) * 2016-10-27 2017-07-18 Google Inc. Neural network compute tile
US9836691B1 (en) * 2016-10-27 2017-12-05 Google Inc. Neural network instruction set architecture
US9721203B1 (en) * 2016-11-10 2017-08-01 Google Inc. Performing kernel striding in hardware
CN108073983A (zh) * 2016-11-10 2018-05-25 谷歌有限责任公司 在硬件中执行核心跨越
US20180157962A1 (en) * 2016-12-01 2018-06-07 Via Alliance Semiconductor Co., Ltd. Neural network unit with memory layout to perform efficient 3-dimensional convolutions

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
SHOUYI YIN等: "A High Energy Efficient Reconfigurable Hybrid Neural Network Processor for Deep Learning Applications", IEEE JOURNAL OF SOLID-STATE CIRCUITS, pages 968 - 982 *

Also Published As

Publication number Publication date
EP3891663A1 (en) 2021-10-13
WO2020132593A1 (en) 2020-06-25
CA3124369A1 (en) 2020-06-25
US20200202198A1 (en) 2020-06-25
JP7245338B2 (ja) 2023-03-23
JP2022514680A (ja) 2022-02-14

Similar Documents

Publication Publication Date Title
JP7245338B2 (ja) ニューラルネットワークプロセッサ
KR102261768B1 (ko) 대안적인 루프 제한
CN113039541B (zh) 矩阵的空间局部变换
CN109034373B (zh) 卷积神经网络的并行处理器及处理方法
CN110073359B (zh) 用于卷积神经网络的有效数据布局
CN111758107B (zh) 用于基于硬件的池化的系统和方法
KR20190113973A (ko) 가산기를 이용한 다차원 텐서의 데이터 액세스
CN114358237A (zh) 多核硬件中神经网络的实现方式
US11120328B1 (en) Systems and methods for reducing power consumption of convolution operations for artificial neural networks
CN110414672B (zh) 卷积运算方法、装置及系统
CN113312285B (zh) 一种卷积神经网络加速器及其工作方法
CN112732630A (zh) 针对深度学习的浮点矩阵乘算子众核并行优化方法
CN110533177B (zh) 一种数据读写装置、方法、设备、介质及卷积加速器
CN112712457A (zh) 数据处理方法以及人工智能处理器
GB2567038B (en) Accessing prologue and epilogue data
CN116721006B (zh) 特征图处理方法和装置
CN113837923B (zh) 数据处理装置、数据处理方法及相关产品
CN113837921B (zh) 数据处理装置、数据处理方法及相关产品
US20230376562A1 (en) Integrated circuit apparatus for matrix multiplication operation, computing device, system, and method
CN116050474A (zh) 一种卷积计算方法、soc芯片、电子设备及存储介质
Fujiwara et al. A simple parallel algorithm for the medial axis transform of binary images
CN118227516A (zh) 在处理单元处对值阵列执行运算
CN118227515A (zh) 在包括存储器的处理单元处对二维值阵列执行可分离运算
CN118093179A (zh) 众核架构下的神经形态芯片的计算任务处理方法和处理器
CN118132230A (zh) 众核架构下的神经形态芯片的数据拆分处理方法和处理器

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20210921

WD01 Invention patent application deemed withdrawn after publication