CN113033765A - 用于实现卷积神经网络的可配置处理器元件阵列 - Google Patents
用于实现卷积神经网络的可配置处理器元件阵列 Download PDFInfo
- Publication number
- CN113033765A CN113033765A CN202011027064.2A CN202011027064A CN113033765A CN 113033765 A CN113033765 A CN 113033765A CN 202011027064 A CN202011027064 A CN 202011027064A CN 113033765 A CN113033765 A CN 113033765A
- Authority
- CN
- China
- Prior art keywords
- neural network
- data
- convolutional neural
- descriptors
- tensor processing
- 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
- 238000013527 convolutional neural network Methods 0.000 title claims abstract description 142
- 238000012545 processing Methods 0.000 claims abstract description 197
- 230000004913 activation Effects 0.000 claims abstract description 108
- 230000015654 memory Effects 0.000 claims abstract description 57
- 238000000034 method Methods 0.000 claims description 42
- 239000011159 matrix material Substances 0.000 claims description 37
- 239000013598 vector Substances 0.000 claims description 29
- 238000011176 pooling Methods 0.000 claims description 28
- 238000004364 calculation method Methods 0.000 claims description 17
- 238000011068 loading method Methods 0.000 claims description 8
- 238000001994 activation Methods 0.000 description 80
- 238000013528 artificial neural network Methods 0.000 description 64
- 238000009825 accumulation Methods 0.000 description 34
- 230000035508 accumulation Effects 0.000 description 33
- 230000008569 process Effects 0.000 description 24
- 238000003860 storage Methods 0.000 description 20
- 239000000872 buffer Substances 0.000 description 19
- 238000005192 partition Methods 0.000 description 15
- 230000007704 transition Effects 0.000 description 15
- 238000010586 diagram Methods 0.000 description 12
- 238000004891 communication Methods 0.000 description 11
- 238000013507 mapping Methods 0.000 description 11
- 238000000638 solvent extraction Methods 0.000 description 7
- 238000003491 array Methods 0.000 description 6
- 238000010801 machine learning Methods 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 238000013135 deep learning Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000001914 filtration Methods 0.000 description 3
- 230000003139 buffering effect Effects 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000001815 facial effect Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013075 data extraction Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000001747 exhibiting effect Effects 0.000 description 1
- 230000008921 facial expression Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000033001 locomotion Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003032 molecular docking Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 230000001502 supplementing effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012546 transfer Methods 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
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computer Hardware Design (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
Abstract
本公开涉及用于实现卷积神经网络的可配置处理器元件阵列。所公开的示例装置包括处理器元件的阵列,该阵列包括各自具有第一数量的处理器元件的行和各自具有第二数量的处理器元件的列。示例装置还包括配置寄存器,用于存储描述符,这些描述符用于将处理器元件的阵列配置为基于与多个张量处理模板中的一个张量处理模板相对应的数据流调度来实现卷积神经网络的层,处理器元件中的一些处理器元件将基于描述符而被配置为实现上述一个张量处理模板,以对与卷积神经网络的层相关联的输入激活数据和过滤器数据进行操作,以生成与卷积神经网络的层相关联的输出激活数据。示例装置还包括存储器,用于存储上述输入激活数据、过滤器数据和输出激活数据。
Description
技术领域
本公开总地涉及神经网络,并且更具体地涉及用于实现卷积神经网络的可配置处理器元件阵列。
背景技术
神经网络已经并且持续被采用作为广泛技术领域(诸如面部识别、语音识别、导航、市场研究等,仅举几例)中的基础技术解决方案。这样,在推理算法开发以及用于实现演化的推理算法的硬件平台开发方面,神经网络的领域已经并且持续快速增长。诸如深度学习卷积神经网络之类的神经网络的网络层有许多可能的张量形状,其尺寸随着现有的神经网络推理算法被修改和/或新的神经网络推理算法被开发而持续改变。
发明内容
根据本公开的一方面,提供了一种用于实现卷积神经网络的装置,该装置包括:处理器元件的阵列,该阵列包括行和列,所述行中的各行具有第一数量的处理器元件,所述列中的各列具有第二数量的处理器元件;配置寄存器,用于存储多个描述符,所述描述符用于将所述处理器元件的阵列配置为基于与多个张量处理模板中的一个张量处理模板相对应的数据流调度来实现所述卷积神经网络的层,所述处理器元件中的一些处理器元件将基于所述描述符而被配置为实现所述多个张量处理模板中的所述一个张量处理模板,以对与所述卷积神经网络的所述层相关联的输入激活数据和过滤器数据进行操作,以产生与所述卷积神经网络的所述层相关联的输出激活数据;和存储器,用于存储与所述卷积神经网络的所述层相关联的所述输入激活数据、所述过滤器数据和所述输出激活数据。
根据本公开的另一方面,提供了一种计算机可读介质,包括计算机可读指令,所述计算机可读指令当被执行时使至少一个处理器至少执行以下操作:将第一组描述符写入到配置寄存器,以将处理器元件的阵列配置为基于与多个张量处理模板中的第一个张量处理模板相对应的第一数据流调度来实现卷积神经网络的第一层,所述阵列包括行和列,所述行中的各行具有第一数量的处理器元件,所述列中的各列具有第二数量的处理器元件,所述第一组描述符用于将所述处理器元件中的一些处理器元件配置为实现所述多个张量处理模板中的所述第一个张量处理模板,以对与所述卷积神经网络的所述第一层相关联的输入激活数据和过滤器数据进行操作,以产生与所述卷积神经网络的所述第一层相关联的输出激活数据;和将第二组描述符写入到所述配置寄存器,以将所述处理器元件的阵列配置为基于与所述多个张量处理模板中的第二个张量处理模板相对应的第二数据流调度来实现所述卷积神经网络的第二层,所述第二组描述符用于将所述处理器元件中的所述一些处理器元件配置为实现所述多个张量处理模板中的所述第二个张量处理模板,以对与所述卷积神经网络的所述第二层相关联的输入激活数据和过滤器数据进行操作,以产生与所述卷积神经网络的所述第二层相关联的输出激活数据。
根据本公开的另一方面,提供了一种用于实现卷积神经网络的方法,该方法包括:利用至少一个处理器将第一组描述符写入到配置寄存器,以将处理器元件的阵列配置为基于与多个张量处理模板中的第一个张量处理模板相对应的第一数据流调度来实现所述卷积神经网络的第一层,所述阵列包括行和列,所述行中的各行具有第一数量的处理器元件,所述列中的各列具有第二数量的处理器元件,所述第一组描述符用于将所述处理器元件中的一些处理器元件配置为实现所述多个张量处理模板中的所述第一个张量处理模板,以对与所述卷积神经网络的第一层相关联的输入激活数据和过滤器数据进行操作,以产生与所述卷积神经网络的所述第一层相关联的输出激活数据;和利用所述至少一个处理器将第二组描述符写入到所述配置寄存器,以将所述处理器元件的阵列配置为基于与所述多个张量处理模板中的第二个张量处理模板相对应的第二数据流调度来实现所述卷积神经网络的第二层,所述第二组描述符用于将所述处理器元件中的所述一些处理器元件配置为实现所述多个张量处理模板中的第二个张量处理模板,以对与所述卷积神经网络的所述第二层相关联的输入激活数据和过滤器数据进行操作,以产生与所述卷积神经网络的所述第二层相关联的输出激活数据。
根据本公开的又一方面,提供了一种用于实现卷积神经网络的装置,该装置包括:处理器元件的阵列,该阵列包括行和列,所述行中的各行具有第一数量的处理器元件,所述列中的各列具有第二数量的处理器元件;配置装置,用于基于多个描述符来配置所述处理器元件的阵列,以基于与多个张量处理模板中的一个张量处理模板相对应的数据流调度来实现所述卷积神经网络的层,所述描述符用于将所述处理器元件中的一些处理器元件配置为实现所述多个张量处理模板中的所述一个张量处理模板,以对与所述卷积神经网络的所述层相关联的输入激活数据和过滤器数据进行操作,以产生与所述卷积神经网络的所述层相关联的输出激活数据;和用于存储与所述卷积神经网络的所述层相关联的所述输入激活数据、所述过滤器数据和所述输出激活数据的装置。
附图说明
图1是根据本公开的教导的用于实现卷积神经网络的示例可配置处理器元件阵列的框图。
图2示出了由图1的可配置处理器元件阵列执行的示例张量操作。
图3-4示出了要由图1的可配置处理器元件阵列中包括的示例处理器元件实现的示例张量处理模板和对应的示例数据流调度。
图5示出了由图1的可配置处理器元件阵列实现的示例操作流水线。
图6是图1的可配置处理器元件阵列中包括的示例处理器元件的框图。
图7-12示出了图1的可配置处理器元件阵列的示例操作阶段以及操作阶段之间的示例转换。
图13A-B示出了用于支持图1的可配置处理器元件阵列中的外部部分和累加的示例硬件架构。
图14示出了用于支持图1的可配置处理器元件阵列中的逐元素操作的示例硬件架构。
图15示出了用于支持图1的可配置处理器元件阵列中的最大池化(maxpool)操作的示例硬件架构。
图16-19示出了当根据四个对应的示例张量处理模板进行配置时由图1的可配置处理器元件阵列实现的四个示例数据流调度。
图20-21示出了图16的第一示例数据流调度的示例数据划分和分块操作方面。
图22-25示出了配置寄存器描述符值的示例集合,其将用于配置图1的可配置处理器元件阵列以实现图16-19的对应示例数据流调度。
图26是表示示例计算机可读指令的流程图,这些指令可被执行以操作图1和/或图6的可配置处理器元件阵列。
图27是示例处理器平台的框图,该处理器平台被构造为包括图1和/或图6的示例可配置处理器元件阵列并被构造为执行图26的示例计算机可读指令以操作图1和/或图6的可配置处理器元件阵列。
附图不是按比例的。通常,贯穿一个或多个附图和随附的书面描述将使用相同的附图标记来指代相同或相似的部分、元件等。
当标识可被单独提及的多个元素或组件时,在本文中使用描述符“第一”、“第二”、“第三”等。除非基于它们的使用上下文另有指定或理解,否则这样的描述符不旨在赋予优先级或时间顺序的任何含义,而是仅仅作为分别指代多个元素或组件的标签,以便于理解所公开的示例。在一些示例中,可以使用描述符“第一”来指代详细描述中的元素,而在权利要求中可以利用诸如“第二”或“第三”之类的不同描述符来指代相同的元素。在这样的情况下,应当明白,仅仅为了便于引用多个元素或组件而使用这样的描述符。
具体实施方式
本文公开了用于实现卷积神经网络的示例可配置处理器元件阵列。如上所述,在推理算法开发以及用于实现演化的推理算法的硬件平台开发方面,神经网络领域已经并且持续快速增长。诸如深度学习卷积神经网络之类的神经网络的网络层有许多可能的张量形状,其尺寸随着现有的神经网络推理算法被修改和/或新的神经网络推理算法被开发而持续改变。为了适应神经网络的快速演化,用于实现神经网络的硬件平台需要可配置为支持网络层张量形状的变化尺寸。先前的神经网络平台采用现场可编程门阵列(FPGA)来提供这样的可配置性,而不是采用专用集成电路(ASIC),因为在ASIC实现中重新配置网络层张量形状可能需要替换ASIC,并且ASIC设计周期可能较长。因此,到针对特定深度学习推理算法的基于ASIC的解决方案进入市场的时候,推理算法可能已经发展,从而使基于ASIC的解决方案过时。然而,FPGA缺乏ASIC的处理性能和能量效率。
与这样的先前神经网络硬件平台形成对比,本文公开的示例可配置处理器元件阵列在保持ASIC的能量效率的同时提供类似于FPGA的可配置性。所公开的示例可配置处理器元件阵列使得能够在运行时配置不同的张量形状计算,这可以适应迅速演进的神经网络算法领域,同时保留ASIC所提供的性能和能量效率,这些神经网络算法包括具有广泛变化的张量尺寸的网络层。
所公开的示例可配置处理器元件阵列基于软件可配置处理器元件(PE)的阵列,PE在本文中也称为处理元件或原始内核模块,其可以对灵活形状的张量数据执行卷积计算(诸如过滤器权重、输入激活和/或输出激活)以实现神经网络的给定层。如在下面更详细公开的,可配置处理器元件阵列中包括的示例PE的微架构在运行时可重新配置(例如,基于软件可编程配置寄存器),以实现给定神经网络的连续层,或实现其他神经网络。在一些示例中,PE通过将某一分布式本地存储装置放置在靠近PE自身中所包括的计算单元的位置来为了能量效率而利用激活和权重重用。
如在下面更详细公开的,所公开的示例PE以硬件方式支持可变张量形状计算的灵活性基于将与神经网络的给定层相关联的张量计算分解为一组可能的张量处理模板中的一个。这样的张量处理模板的示例包括但不限于矢量—矢量、矢量—矩阵和矩阵—矩阵张量处理模板。如在下面更详细公开的,基于一组配置描述符来控制示例PE以硬件方式支持特定张量计算,其中在神经网络的给定层的执行开始时初始化该组配置描述符。这样,本文公开的示例PE可以被实现为纯硬件解决方案(例如,经由ASIC),但是其将硬件配置寄存器暴露给软件,这使软件能够在运行时期间为给定的网络层配置张量数据流。因此,本文公开的示例PE以及布置成本文公开的示例可配置处理器元件阵列的PE的关联布置使卷积神经网络层的灵活数据流能够在硬件加速器中执行,而没有由于例如必须将任何工作卸载到外部的处理器或软件而造成的性能损失。
与用于实现卷积神经网络的现有硬件平台相比,本文公开的示例可配置处理器元件阵列提供了许多益处。例如,可配置处理器元件阵列可以用ASIC而不是FPGA来实现,因此表现出相对于现有平台的改进的性能和功耗。本文公开的示例可配置处理器元件阵列的节能性质可以使得能够在诸如面部识别、语音识别、导航、市场研究等的广泛应用中进一步使用机器学习加速器。本文公开的示例可配置处理器元件阵列的节能性质还可以使得能够在由于现有神经网络硬件平台所表现出的相对高的功耗而无法利用机器学习技术的应用(诸如物联网(IoT)应用、无人机(例如,无人载具)应用等)中采用机器学习加速器。
转到附图,图1中示出了用于实现根据本公开的教导的卷积神经网络的示例可配置处理器元件阵列100的框图。图1的示例可配置处理器元件阵列100包括:布置成包括示例行110a-c和示例列115a-c的阵列的示例PE 105a-i,其中行110a-c中的各个行具有第一数量的PE并且列115a-c中的各个列具有第二数量的PE。行110a-c中的PE的第一数量和列115a-c中的PE的第二数量可以是相同的或不同的。在所示出的示例中,行110a-c中的PE的第一数量和列115a-c中的PE的第二数量是相同的并且在图1中被标记为“N”。例如,N可以是16或某个其他值。
图1的示例可配置处理器元件阵列100还包括示例配置寄存器120,其可以由例如一个或多个硬件寄存器、阵列、存储器、数据单元等或其任何一个或多个组合来实现。配置寄存器120基于数据流调度将PE 105a-i的阵列配置为实现示例卷积神经网络的给定层。在所示出的示例中,数据流调度对应于PE 105a-i所支持的一组可能的张量处理模板中的一个。如在下面更详细公开的,配置寄存器120接受一组描述符,该组描述符将PE 105a-i中的一些PE 105a-i配置为实现可能的张量处理模板中的一个,以对与卷积神经网络的给定层相关联的输入激活数据和过滤器数据进行操作,以产生与卷积神经网络的给定层相关联的输出激活数据。如在下面更详细公开的,配置寄存器120可以接受新的一组描述符,以将PE105a-i的阵列重新配置为实现卷积神经网络的后续层。例如,新的一组描述符可以与应用于配置寄存器120的先前的一组描述符相同。通过在这样的示例中保持描述符相同,可以将PE 105a-i中的一些PE 105a-i配置为实现与先前的神经网络层相同的张量处理模板。在其他示例中,新的一组描述符可以与应用于配置寄存器120的先前的一组描述符不同。通过在这样的示例中使用不同的描述符,可以将PE 105a-i中的一些PE 105a-i配置为实现可能的张量处理模板中的另一个,以对与卷积神经网络的后续层相关联的输入激活数据和过滤器数据进行操作,以产生与卷积神经网络的后续层相关联的输出激活数据。这样,配置寄存器120是用于基于多个描述符来配置PE 105a-i的阵列以基于与多个张量处理模板之一相对应的数据流调度来实现卷积神经网络的层的装置的示例。而且,PE 105a-i是用于基于张量处理模板对与卷积神经网络的层相关联的输入激活数据和过滤器数据进行操作以产生与卷积神经网络的层相关联的输出激活数据的装置的示例。
图1的所示示例包括示例配置加载器122,配置加载器122将一组描述符加载到配置寄存器120中。在一些示例中,配置加载器122包括编译器,该编译器将要由可配置处理器元件阵列100实现的卷积神经网络的层的描述转换为与一组可能的张量处理模板中的所选定的一个模板相对应的数据流调度。这样的示例中的编译器可以利用一个或多个标准(诸如但不限于执行时间、存储器使用率、要激活的PE的数量等)来选择要用于构造数据流调度的张量处理模板。另外,这样的示例中的编译器然后可以将由此得到的数据流调度转换为要写入到配置寄存器120中的一组描述符。在一些示例中,配置加载器122由一个或多个处理器(诸如在下面结合图27讨论的示例处理器平台2700中示出的示例处理器2712)实现。这样,配置加载器122是用于确定描述符和/或将描述符写入/加载到配置寄存器120中的装置的示例。
图1的示例可配置处理器元件阵列100还包括示例存储器125,存储器125存储与PE105a-i正在实现的卷积神经网络的给定层相关联的输入激活数据、过滤器数据和输出激活数据。在所示出的示例中,存储器125由静态随机存取存储器(SRAM)组实现。然而,在其他示例中,可以使用其他数量和/或类型的存储器和/或其一种或多种组合来实现存储器125。这样,存储器125是用于存储与卷积神经网络的层相关联的输入激活数据、过滤器数据和输出激活数据的装置的示例。
图1的示例可配置处理器元件阵列100还包括示例张量数据分配单元130,张量数据分配单元130从存储器125读取数据并将数据写入到PE 105a-i。基于由用于要由PE105a-i实现的给定神经网络层的一组描述符配置的张量处理模板,张量数据分配单元130还接受来自PE 105a-i的数据并将数据存储在存储器125中。张量数据分配单元130的示例实现在2019年6月28日提交的序列号为16/456,707的美国专利申请中描述,该美国专利申请通过引用合并于此。
可能的张量处理模板提供不同的方式来分解为了实现给定的神经网络层而要由可配置处理器元件阵列100执行的整体张量操作,使得可以通过可配置处理器元件阵列100中包括的PE 105a-i的组合来实现该整体张量操作。在图2中示出了为了实现给定神经网络层而要由可配置处理器元件阵列100执行的示例整体张量操作200。图2的示例介绍了将贯穿本公开使用的符号。
示例张量操作200对应于神经网络层,其中一组输入数据205(也称为输入激活数据205或输入激活205)将与一组过滤器内核210(也称为过滤器权重210或简单地称为权重210)进行卷积,以产生一组输出数据215(也称为输出激活数据215或输出激活215)。在所示出的示例中,输入激活205被布置为具有x维度上的Ix个元素、y维度上的Iy个元素以及输入激活数据的Ic个不同通道的阵列。维度Ix、Iy和Ic可以是相同的或不同的,并且可以是任何一个或多个值。例如,如果与张量操作200相对应的神经网络层是图像处理神经网络的输入层(例如,第一层),则Ix和Iy维度可以分别对应于输入图像的行和列中的像素数,并且Ic维度可以对应于图像数据的通道数,诸如以红蓝绿(RGB)格式表示的图像数据的3个通道。作为另一示例,如果与张量操作200相对应的神经网络层是图像处理神经网络的中间层(例如,第二层),则Ix和Iy维度可以分别对应于正在被处理的图像的行和列中的像素数,并且Ic维度可以对应于与前一神经网络层的输入激活数据进行卷积的不同过滤器的数量,诸如64个过滤器或某一其他数量的过滤器。
在所示出的示例中,通过一组过滤器210来处理维度为Ix乘Iy乘Ic的输入激活数据205。在所示出的示例中,将过滤器210布置为具有x维度上的Fx个元素(例如,权重)、y维度上的Fy个元素(例如,权重)和通道维度上的Ic个元素的阵列,后者与输入激活数据的通道数Ic相同。例如,Fx维度和Fy维度可以各自对应于3和3,使得3乘3过滤器210与每个输入激活数据元素及其相邻邻居进行卷积。当然,过滤器210可以具有用于Fx维度和Fy维度的其他值,并且Fx维度和Fy维度可以彼此相同或不同。
图2的示例张量操作200涉及将过滤器210中的每一个过滤器与输入激活数据205进行卷积,以及在通道维度(Ic)上对由此得到的数据进行求和(累加)以产生输出激活数据215。例如,将过滤器中的给定过滤器210a与输入激活数据205的以给定输入激活数据元素225为中心的给定部分220进行卷积。如图所示,对每个通道维度的结果进行求和(例如,对应于Ic维度上的累加),以产生与输入激活数据元素225的阵列位置相对应的阵列位置处的输出激活数据元素230。在所示出的示例中,过滤器210中的每一个过滤器与输入激活数据205的卷积产生输出激活数据215,输出激活数据215被布置为具有x维度上的Ox个元素、y维度上的Oy个元素以及输出激活数据的Oc个不同通道的阵列。Ox维度和Oy维度可具有相同的值或不同的值,并且可以与Ix维度和Iy维度相同或不同。Oc维度可以对应于与输入激活数据205进行卷积的不同过滤器210的数量。
在本公开中使用的其他术语如下。On是指批量大小。例如,如果可配置处理器元件阵列100要实现卷积神经网络以处理图像,则On是指要并行处理的图像的数量。缩写“IF”用于指代输入激活数据,缩写“FL”用于指代过滤器数据(例如,权重),并且缩写“OF”用于指代输出激活数据。另外,术语“Psum”用于指代卷积运算中的部分结果,并且在下面更详细描述。
在图3和图4中分别示出将由图1的可配置处理器元件阵列100中包括的示例PE105a-i实现的示例张量处理模板305、310和315以及对应的示例数据流调度405、410和415。张量处理模板305是矢量—矢量张量处理模板的示例。张量处理模板310是矢量—矩阵张量处理模板的示例。张量处理模板315是矩阵—矩阵张量处理模板的示例。数据流调度405表示根据矢量—矢量张量处理模板305将实现示例卷积神经网络的给定层的示例张量操作的一部分映射到PE 105a-i之一。数据流调度410表示根据矢量—矩阵张量处理模板310将实现示例卷积神经网络的给定层的示例张量操作的一部分映射到PE 105a-i之一。数据流调度415表示根据矩阵—矩阵张量处理模板315将实现示例卷积神经网络的给定层的示例张量操作的一部分映射到PE 105a-i之一。示例可配置处理器元件阵列100可以支持其他张量处理模板,诸如标量—矢量处理模板。
图3和图4的所示示例使用符号“DTd/j/k”来定义特定的张量处理模板。在该符号中,“DT”是指数据类型,其对于要由PE根据所定义的模板处理的输入激活数据可以是“I”,或者对于要由PE根据所定义的模板产生的输出激活数据可以是“O”。符号“d”表示维度,并且可以是“x”、“y”或“c”。符号“j”表示要由给定PE根据所定义的模板处理的维度“d”上的数据类型“DT”的元素数。符号“k”表示在以下操作中所涉及的PE的数量:处理/产生维度“d”上的数据类型“DT”的元素以产生正在根据所定义的模板实现的给定神经网络层的总张量运算输出。在所示出的示例中,当指代正在应用于PE 105a-i中的单个PE的模板时,符号“k”被设置为破折号(-)。在所示出的示例中,当省略特定的数据类型和/或维度时,认为模板指定PE将处理/产生该维度上的该数据类型的一(1)个元素。
例如,所示示例的张量处理模板305由符号“Ox/1/-”、“Oy/1/-”和“Ic/64/-”定义,该符号指定根据该模板配置的PE将处理Ic维度上的64个IF数据元素,以在Ox和Oy维度上的一(1)个位置处产生OF数据。所示示例的张量处理模板310由符号“Oc/8/-”和“Ic/8/-”定义,该符号指定根据该模板配置的PE将处理Ic维度上的八(8)个IF元素数据,以在Ox和Oy维度上的一(1)个位置处在Oc维度上的八(8)个位置处产生OF数据。所示示例的张量处理模板315由符号“Ox/8/-”、“Ic/8/-”和“Oc/8/-”定义,该符号指定根据该模板配置的PE将处理在Ox维度的八(8)个位置和Ic维度的八(8)个位置处的IF数据元素,以在Oc维度的八(8)个位置以及Ox和Oy维度的一(1)个位置处产生OF数据。
如示例数据流调度405所示,矢量—矢量张量处理模板310可以用于将PE 105a-i中的一些PE 105a-i配置为实现用于执行张量操作的对应于将矢量与矢量相乘的相应部分的数据流调度,诸如通过在给定的Ox和Oy位置处累加Ic维度上的多个(例如,在该示例中为64个)经过滤的IF数据(例如,乘以对应的FL数据的IF数据)元素来计算该Ox和Oy位置处的1个数据元素的调度。如示例数据流调度410所示,矢量—矩阵张量处理模板310可以用于将PE 105a-i中的一些PE 105a-i配置为实现用于执行张量操作的对应于将矢量与矩阵相乘的相应部分的数据流调度,诸如通过在利用来自第一数量个(例如,在该示例中为8个)过滤器的对应FL数据进行过滤之后在给定的Ox和Oy位置处累加Ic维度上的第二数量个(例如,在该示例中为8个)IF数据元素来计算该Ox和Oy位置处的Oc维度上的第一数量个数据元素的调度。如示例数据流调度415所示,矩阵—矩阵张量处理模板315可以用于将PE 105a-i中的一些PE 105a-i配置为实现用于执行张量操作的对应于将矩阵与矩阵相乘的相应部分的数据流调度,诸如通过在利用来自第三数量个(例如,在该示例中为8个)过滤器的对应FL数据进行过滤之后在Ox维度上的第二数量个(例如,在该示例中为8个)位置中的每一个处但在同一Oy位置处累加Ic维度上的第三数量个IF数据元素来计算那些Ox位置和Oy位置处的Oc维度上的第一数量个(例如,在该示例中为8个)数据元素的调度。
在将卷积神经网络层的特定数据流映射到可能的张量模板之一上之后,(例如,由编译器)将由符号“DTd/j/k”表示的宏级别指令分解为可以由给定PE使用灵活的PE流水线进行处理的几个微指令。图5示出了由图1的可配置处理器元件阵列100中的PE实现的示例操作流水线500。示例流水线500表示将宏粒度指令分解为多个更简单的微指令,诸如配置(Config)、加载(Load)、计算(Compute)、累加(Accum.)和排出(Drain)。在所示出的示例中,同一组微指令可以用于实现不同的宏指令。为此,微指令内的字段发生变化,以适应不同的可能的张量处理模板(例如,矢量—矢量张量处理模板,矢量—矩阵张量处理模板,矩阵—矩阵张量处理模板,标量—矢量张量处理模板,等等)。
返回图1,示例可配置处理器元件阵列100基于为卷积神经网络的当前层配置的数据流调度对IF、FL和OF张量数据(以及如下所述的Psum张量数据)执行计算,其中该数据流调度被投射到矢量—矢量张量处理模板、矢量—矩阵张量处理模板、矩阵—矩阵张量处理模板或标量—矢量张量处理模板中的一个中。如上所述,可配置处理器元件阵列100包括配置寄存器120,配置寄存器120用于接受可配置的描述符,这些可配置的描述符控制与一组可能的张量处理模板之一相对应的数据流。可配置处理器元件阵列100还包括PE 105a-i的阵列,其被布置为各个PE 105a-i的NxN网格(例如,其中N=16或某个其他值)。
所示示例的可配置处理器元件阵列100还包括列缓冲器存储135a-c,列缓冲器存储135a-c用于在存储器125的SRAM组与PE 105a-i内的本地寄存器文件存储之间缓冲数据,其中列缓冲器存储135a-c中的各个列缓冲器存储与PE 105a-i的列115a-c中的对应列相关联。在所示出的示例中,列缓冲器135a-c还包括各个示例输出数据处理器138a-c,输出数据处理器138a-c能够对正在从PE 105a-i输出的数据执行截断(Trun.)和/或修正线性单元(ReLU)操作以存储在存储器135中。所示示例的可配置处理器元件阵列100包括示例专用总线140a-c,专用总线140a-c用于在PE 105a-i的阵列与列缓冲器135a-c之间分别移动IF、FL和OF张量数据。
如示出的示例中所示,PE 105a-i中的各个PE包括用于分别存储该PE的IF、FL和OF张量数据的示例寄存器文件(RF)本地存储145a-c。PE 105a-i中的各个PE还包括:示例乘法和累加(MAC)单元150(其可被流水线化),用于对要由该PE处理的IF和FL数据执行乘法和累加运算;示例逐元素计算单元155,用于对要由该PE处理的IF数据执行逐元素运算;以及具有示例池寄存器165的示例最大池化单元160,用于执行最大池化操作以产生与该PE相关联的OF张量数据。PE 105a-i中的各个PE还包括一个或多个示例配置寄存器170和示例有限状态机(FSM)175。FSM 175管理以下各项:(i)将IF和FL张量数据从RF存储145a-b加载到PE内的不同计算单元150-160中;(ii)相应计算单元150-160内的计算的排序;(iii)提供控制信号用于根据配置的数据流调度累加PE内的部分和;(iv)提供控制信号用于向和从PE传送部分和OF张量数据以便跨不同的处理迭代和/或跨PE累加部分和;(v)经由列缓冲器135a-c将完整的OF张量数据从PE提取到存储器135的SRAM缓冲器中,其中在存储到存储器125的SRAM中以进行下一层计算之前,可以进行截断(Trun.)和/或ReLU操作以将OF张量数据从一个尺寸(例如,32位数据)删减为不同的(例如,更小的)尺寸(例如,8位)。
下面的表1描绘了示例的一组描述符字段,这些描述符字段通过根据一个或一组可能的张量处理模板控制PE 105a-i内的输入张量数据的各种计算阶段的适当排序来支持灵活的数据流调度。
表1
表1中的描述符字段被应用于可配置处理器元件阵列100中所包括的每个PE。这样,尽管PE中的每个活动PE将对给定网络层的IF和FL数据的总量的不同块进行操作,但是PE中的每个活动PE所操作的数据量将是类似的。
在表1中,步幅描述符字段是卷积神经网络的参数。IcPF描述符字段是Ic划分因数,其指示多少PE正在给定Ic维度上的数据分区上工作。因此,该字段指示多少PE具有需要在Ic维度上累加的部分和。PEColActv描述符字段指示PE 105a-i的列115a-c中的哪些列在可配置处理器元件阵列100中是活动的。PERowActv描述符字段指示PE 105a-i的行110a-c中的哪些行在可配置处理器元件阵列100中是活动的。OpPEColActv描述符字段指示列115a-c中的哪一个将具有正在实现的当前网络层的输出。OpPERowActv描述符字段指示行110a-c中的哪一个将具有正在实现的当前网络层的输出。例如,IcPF描述符字段指示何时跨多个PE 105a-i划分Ic维度。在这种情况下,PE 105a-i中的一些将仅对输出数据产生部分和贡献,并且OpPEColActv和OpPERowActv描述符字段指示在部分和被累加之后哪些PE105a-i将具有最终输出数据。
在表1中,TotalWrIFRF描述符字段指示要向PE 105a-i写入多少IF数据点。TotalWrFLRF描述符字段指示要向PE 105a-i写入多少FL数据点。TotalWrOFRF描述符字段指示要向PE 105a-i写入多少OF数据点。
在表1中,StAddrIFRF描述符字段指示IF RF存储145a的起始地址。LenAddrIFRF描述符字段指示在一个计算周期期间要访问多少IF数据点。例如,考虑张量处理模板315,其中存在8个过滤器通道(FL)并且每个通道将处理不同Ix维度上的8个IF数据点。LenAddrIFRF描述符字段将指示每组8个IF数据点将由不同的过滤器通道处理。Reset2StartIF描述符字段指示当LenAddrIFRF描述符字段的值被达到时PE 105a-i是否将被重置为IF RF存储145a中的起始地址,或者PE 105a-i是否应当继续通过IF RF存储145a递增。IncCycIFRF描述符字段指示计算周期的数量,在这些计算周期之后,IF RF存储145a的起始地址将被递增。
同样,StAddrFLRF描述符字段指示FL RF存储145b的起始地址。LenAddrFLRF描述符字段指示在一个计算周期期间要访问多少FL数据点。Reset2StartFL描述符字段指示当LenAddrFLRF描述符字段的值被达到时PE 105a-i是否将被重置为FL RF存储145b中的起始地址,或者PE 105a-i是否应当继续通过FL RF存储145b递增。IncCycFLRF描述符字段指示计算周期的数量,在这些计算周期之后,FL FL存储145b的起始地址将被递增。
同样,StAddrOFRF描述符字段指示OF RF存储145c的起始地址。LenAddrOFRF描述符字段指示在一个计算周期期间要访问多少OF数据点。Reset2StartOF描述符字段指示当LenAddrOFRF描述符字段的值被达到时PE 105a-i是否将被重置为OF RF存储145c中的起始地址,或者PE 105a-i是否应当继续通过OF RF存储145c递增。IncCycOFRF描述符字段指示计算周期的数量,在这些计算周期之后,OF RF存储145c的起始地址将被递增。
在表1中,BlocksPERF描述符字段指示PE 105a-i执行了多少计算工作块,其中一个工作块对应于计算1个输出点(或与给定输出点相关联的1个部分和)。NumPEComp描述符字段指示需要多少周期来处理为了根据配置的张量处理模板进行处理而被送入PE 105a-i的数据量。例如,矢量—矢量张量处理模板305(其将利用64个FL数据元素来处理Ic维度上的64个IF数据元素,以在Ox和Oy维度上的1个位置处产生OF数据)将利用64个周期,这对应于用于将Ic维度上的64个IF数据元素与64个FL数据元素相乘并累加结果的64个乘法和累加运算。
在表1中,IcMapDirX描述符字段是布尔值(例如,True(真)或False(假)),用于指示是否跨PE 105a-i的行110a-c来映射IC维度的划分。IcMapDirY描述符字段是布尔值(例如,True或False),用于指示是否跨PE 105a-i的列115a-c来映射IC维度的划分。这些描述符字段指示要如何在PE 105a-i之间共享部分和。
在表1中,NumIncStAddr描述符字段、IncStAddrPerBlockIFRF描述符字段和StepIFRF描述符字段被用于指定要如何在IF数据上移动具有Fx和Fy维度的FL数据以产生OF数据。
在表1中,ExtPsum描述符字段是布尔值(例如,True或False),用于指示所配置的张量处理模板是否涉及部分和。如果该值为False,则每个PE可以自主运行以输出给定的OF数据点。如果该值为True,则部分和将用于产生OF数据。
在表1中,OFGenStartNthBlock描述符字段和PsumLoadStartNthBlock描述符字段指定为了生成正在实现的神经网络层的OF数据点而要执行所配置的张量处理模板的次数,以及先前计算的部分和何时将被重新加载以进一步累加。例如,如果当前网络层中有256个Ic维度并且所配置的张量处理模板处理64个Ic维度,则所配置的张量处理模板将被执行4次来处理所有256个Ic维度,以确定当前神经网络层的OF数据点。
在表1中,LinesPsumPerLoad描述符字段指定为了基于所配置的张量处理模板来累加部分和而要加载的Psum的大小(例如,在SRAM的行中)。LinesTotalPsum描述符字段指定为了计算OF数据点而要加载的Psum的数量。
在表1中,Relu描述符字段是布尔值(例如,True或False),用于指示ReLU操作对正在实现的当前神经网络层而言是否是活动的。ReluThreshold描述符字段指定ReLU操作要使用的阈值。
在表1中,EltWise描述符字段是布尔值(例如,True或False),用于指示逐元素操作对正在实现的当前神经网络层而言是否是活动的。Drain2FLSRAM描述符字段与逐元素操作一起使用。
在表1中,Maxpool描述符字段是布尔值(例如,True或False),用于指示最大池化操作对正在实现的当前神经网络层而言是否是活动的。
在图6中示出了图1的PE 105a-i之一的示例实现方式的框图。为了方便起见,图6的框图示出了PE 105a的示例实现方式。然而,图6的示例实现方式可用来实现PE 105a-i中的任何PE。图6的示例PE 105a包括一组配置寄存器170,配置寄存器170用于接受表1中所示的描述符的值,这些值在PE 105a正在处理的卷积神经网络的每一层的开始处被更新。在所示出的示例中,经由配置加载器122对应用于配置寄存器170的一组描述符字段进行编程,以基于张量处理模板来实现数据流调度,以处理正在实现的卷积神经网络的当前层(L)的IF和FL张量数据。例如,FSM 175使用该组经编程的描述符字段来在要对输入张量数据执行的加载、计算和排出操作期间执行数据重定向。这样,PE 105a-i中的各个PE中的配置寄存器170是用于基于多个描述符来配置PE 105a-i的阵列以基于与多个张量处理模板之一相对应的数据流调度来实现卷积神经网络的层的装置的示例。
图6的示例PE 105a还包括FSM 175。在所示出的示例中,FSM 175包括内部计数器以及用于生成以下控制信号的逻辑:(i)读和写控制信号,用于驱动IF、FL和OF寄存器文件145a-c;(ii)复用器控制信号,用于基于PE 105a要对正在实现的卷积神经网络的当前层的张量数据执行的操作的类型(例如,MAC单元150的乘法和累加,最大池化单元160的比较,等等)将数据从寄存器文件145a-c路由到MAC计算单元150、逐元素计算单元155或最大池化计算单元160中的适当一个。在所示出的示例中,为了生成到IF、FL和OF寄存器文件145a-c中的读和写控制信号,FSM 170使用描述符字段“StAddr<IF/FL/OF>RF”、“LenAddr<IF/FL/OF>RF”、“Reset2Start<IF/FL/OF>”、“IncCyc<IF/FL/OF>RF”来生成相关的控制信号。在内部,计数器ifcount、wcount和ofcount跟踪IF、FL、OF寄存器文件145a-c的地址/索引,这些地址/索引根据在计算块期间计算每个OF点(或pSum)所需的输入激活次数和权重(由“<LenAddrIF/FL>RF”描述符字段设置)而被递增或重置。块的数量(由“BlocksPERF”描述符字段设置)确定要写入到OF寄存器文件145c的总点数(或pSum)。给定神经网络层的数据流(无论是IF、FL还是OF静止)由上述计数器以及“Reset2Start<IF/FL/OF>”描述符字段所生成的信号在内部控制。“StAddr<IF/FL/OF>RF”描述符字段针对每个新的计算块来跟踪寄存器文件145a-c中的每个寄存器文件的起始地址。FSM 170中所包括的这些内部结构和关联的控制逻辑支持PE 105a中的灵活的数据流调度。
在图6的所示示例中,PE 105a包括示例共享计算逻辑605,其被在MAC计算单元150、逐元素计算单元155和最大池化计算单元160之间共享以实现有效的硬件资源重用。示例共享计算逻辑605包括示例乘法器610、示例加法器615和示例比较器620,以及关联的示例复用器控制逻辑625、630、635、640、645、650、655和660(总体称为复用器控制逻辑625-660),复用器控制逻辑625-660将适当的张量数据路由到元件610-615中的一个或多个以实现MAC计算单元150、逐元素计算单元155或最大池化计算单元160的处理。在所示出的示例中,共享计算逻辑605的复用器控制逻辑625-660的默认配置是实现最大池化计算单元160。描述符字段“Eltwise”和“Maxpool”用于重新配置共享计算逻辑605,以分别实现逐元素计算单元155和最大池化计算单元160。
图6的示例PE 105a包括RF本地存储145a-c。所示示例包括分别用于存储IF、FL和OF张量数据的三个RF 145a-c。在所示出的示例中,RF 145a-c中的每一个由一组1读1写寄存器实现,这些1读1写寄存器支持同时从一个寄存器读取和向一个寄存器写入。在所示出的示例中,存储在IF和FL RF 145a-b中的张量数据为8位宽(尽管其他示例实现方式可以支持其他宽度),并且存储在OF RF 145c中的张量数据为32位宽(尽管其他示例实现方式可以支持其他宽度)以适应数据流调度的部分和累加特征,其中无法在一个处理迭代/块中累加所有输入通道,因此部分和将从PE 105a中被送出并在稍后的时间点送回以完成最终的OF张量数据计算。
在IF RF 145a的输出处,示例复用器逻辑625包括1:3复用器,该复用器将IF张量数据重定向到MAC计算单元150、逐元素计算单元155或最大池化计算单元160之一。在FL RF145b的输出处,示例复用器逻辑630包括1:2复用器,该复用器将FL张量数据重定向到MAC计算单元150或逐元素计算单元155之一,因为最大池化计算单元160不对FL RF145b中容纳的数据进行操作。在OF RF 145c的输入处,示例复用器逻辑635在通往OF RF 145c的写路径上包括1:2复用器,以存储MAC计算单元150、逐元素计算单元155或最大池化计算单元160之一的输出。池寄存器165的形式的附加存储用于存储最大池化计算单元160的中间结果。
图6的示例PE 105a被构造为同时支持内部和外部的部分和累加。PE 105a可以接受来自水平方向(pSumX)或垂直方向(pSumY)上的其相邻PE的部分和。在一些示例中,PE105a不能接受来自其他方向上的其他PE的部分和。应用于配置寄存器170的可编程描述符字段可以用于经由示例“accum_dir”信号665来指定内部累加的方向。示例“accum_Nbr”控制信号670用于识别部分和的累加是在PE 105a内部还是在包括PE 105a和允许的相邻PE在内的PE之间。对于外部的部分和累加,一个值集被保存在“ext_pSum”寄存器675中,而第二值集存在于OF RF 145c中。示例复用器控制信号“en_ext_pSum”680用于在内部的部分和累加与外部的部分和累加之间进行选择。
图7-12示出了图1的示例可配置处理器元件阵列100所支持的示例操作阶段,以及在可配置处理器元件阵列100所支持的操作阶段之间的示例允许转换。如图7的示例状态转换图700所示,可配置处理器元件阵列100所支持的示例操作阶段包括示例配置阶段705、示例加载阶段710、示例计算阶段715、示例累加阶段720、示例外部部分和累加阶段725以及示例检索(retrieve)阶段730(也称为示例排出阶段730)。在配置阶段705(其示例在图8中被更详细示出)中,应用于正在实现的当前神经网络层(以及一些示例中的后续神经网络层)的可配置处理器元件阵列100的配置寄存器120(或在一些示例中存储在存储器125中)的描述符值被移动到PE 105a-i的配置寄存器170,并且基于那些描述符来配置PE 105a-i的FSM175。例如,描述符值被加载到PE 105a-i中的一些PE的配置寄存器170中,这将计算引向可能的张量处理模板类型(例如,矢量—矢量,矢量矩阵,矩阵—矩阵,标量矢量,等等)之一。
在加载阶段710(其示例在图9中被更详细示出)中,将张量数据从存储器125加载到PE 105a-i的RF 145a-c。例如,IF、FL或OF张量数据经由列缓冲器135a-c从存储器125被传送到PE 105a-i中的一些PE内的本地RF存储145a-c中。在计算阶段710(其示例在图10中被更详细示出)中,对驻留在PE 105a-i中的一些PE的RF 145a-c中的张量数据执行算术运算(例如,MAC、逐元素或最大池化之一)。例如,PE 105a-i中的一些PE可以计算MAC运算,以便为正在实现的当前卷积神经网络层生成部分和(Psum)或最终OF张量数据。内部累加阶段720和外部部分和累加阶段725(其示例在图12中被更详细示出)分别是对被配置为实现卷积神经网络的当前网络层L的给定数据流调度而言可能存在或可能不存在的可选阶段。在所示出的示例中,内部累加阶段720对应于累加的内部阶段,其中在相同OF张量数据的单独输入通道上工作的相邻PE的部分和被累加。累加方向被约束为水平或垂直。在外部部分和累加阶段725中,在时间上更早计算出但必须从本地PE RF 145c中逐出的部分和被送回到PE中进行累加,以生成最终的OF张量输出。在检索阶段730(其示例在图11中被更详细示出)中,部分和或最终OF张量数据被从PE 105a-i中的一些PE的本地PE RF 145c传送到与那些PE 105a-i相对应的各个列缓冲器135a-c中,以便被移动到存储器125中。
配置阶段705、加载阶段710、计算阶段715、内部累加阶段720、外部部分和累加阶段725和检索阶段730之间的允许转换由图7的状态转换图700中的有向线表示。在所示出的示例状态转换图700中,配置阶段705、加载阶段710、计算阶段715和检索阶段730是强制性的,而内部累加阶段720和外部部分和累加阶段725取决于正在实现的特定数据流调度。示例状态转换图700从配置阶段705开始,在配置阶段705中,用描述符字段来填充可配置处理器元件阵列100的配置寄存器120,然后用描述符字段来填充PE 105a-i中的各个PE的配置寄存器170。然后,处理转换到加载阶段710,在加载阶段710中,将IF和FL张量数据从存储器125移动到对正在实现的当前卷积神经网络层而言是活动的PE 105a-i中的各个PE的PE RF145a-b中。
在所示出的示例中,允许从加载阶段710中转出,这是到计算阶段715的转换。从计算阶段715,处理可以转换到加载阶段710、计算阶段715、累加阶段720、外部部分和累加阶段725和检索阶段730中的任何一个。例如,处理可以停留在计算阶段715中并继续计算,或者处理可以回到加载阶段710以将新的IF/FL张量数据加载到PE 105a-i中。这通常是当正在实现的当前神经网络层的数据流调度中没有Ic划分时的情况。如果在正在实现的当前神经网络层的数据流调度中有Ic划分,那么根据所有Ic处理是在当前神经网络层的数据流调度中的相邻PE 105a-i之间进行划分还是在由相同PE 105a-i执行的不同处理迭代之间进行划分,处理从计算阶段715转换到内部累加阶段720或外部部分和累加阶段725。
如果最终的OF结果在计算阶段715期间可用,则处理转换到检索阶段730。在内部累加阶段720中,一旦最终的OF结果可用,则处理可以转换到检索阶段730,或者,如果这是在外部累加阶段725开始之前的最后一轮内部累加,则处理转换到外部累加阶段725。从外部累加阶段725,处理可以转换到加载阶段705以从存储器125中获取附加的部分和数据,或者,一旦最终的OF结果可用,则处理可以转换到检索阶段730以将OF数据传送到存储器125。
在图13A-B中示出了图1的示例可配置处理器元件阵列100中的支持外部部分和累加的示例硬件架构。在一些数据流调度中,IF张量数据的过滤后的输入通道(Ic)的累加不是在一次处理迭代中完成的。而是将一部分输入通道送入给定PE 105a-i的IF RF 145a中,并将计算出的部分和提取到存储器125中。然后,在其余输入通道已被累加时的稍后时间点,该部分和被送回到给定PE 105a-i的OF RF 145c中。为了保持最终卷积结果的准确性,示例可配置处理器元件阵列100不对部分和数据执行截断或ReLU。例如,作为给定PE 105a-i的MAC单元150的输出的部分和数据具有32位精度(或者在其他示例中为某个其他精度)。在正常操作模式(例如,不涉及部分和)期间,每个张量数据点的加载和排出数据路径具有8位精度(或者在其他示例中为某个其他精度)。为了支持外部部分和累加,可配置处理器元件阵列100包括示例旁路数据路径1305a-c,旁路数据路径1305a-c支持以部分和数据的原始精度(其在所示示例中为32位)在列缓冲器135a-c和存储器125之间对部分和数据进行直接读和写访问。另外,在所示出的示例中,通过绕过被包括在列缓冲器1305a与存储器125之间的OF排出复用逻辑1310,给定列缓冲器的旁路数据路径(诸如列缓冲器135a的旁路数据路径1305a)在列缓冲器1305a与存储器125之间将32位宽的数据路径分成1字节的块。
回到图1的示例,尽管输入IF和FL张量数据是8位精度(或者在其他示例中为某个其他精度),但是PE内的MAC的输出是32位精度(或者在其他示例中为某个其他更大精度)以负责累加并防止精度损失。然而,由于给定神经网络层(L)所生成的OF张量数据用作后续神经网络层(L+1)的IF张量数据,因此可配置处理器元素阵列100包括与对应的列缓冲器135a-c相关联的示例输出数据处理器138a-c,输出数据处理器138a-c执行截断操作以在写入到存储器125之前将累加的OF张量数据值的位精度调整为8位。此外,如果要由给定的神经网络层执行ReLU操作,则输出数据处理器138a-c执行该ReLU操作,这导致位精度调整以生成最终的OF张量数据。这样,在将数据写入到SRAM缓冲器之前,输出数据处理器138a-c将饱和截断或ReLU应用于从对应的列缓冲器135a-c输出的32位OF张量数据。输出数据处理器138a-c所采用的ReLU阈值也可以经由表1中的“ReluThreshold”描述符进行调整。
在图14中示出了图1的示例可配置处理器元件阵列100中的支持逐元素操作的示例硬件架构。诸如ResNet之类的一些残差神经网络采用逐元素操作,诸如添加来自神经网络的两个卷积层的张量数据元素。为了在利用硬件资源重用的同时支持逐元素操作,可配置处理器元素阵列100通过重用现有的加载路径和排出路径来将两个不同层的OF张量数据元素路由到PE 105a-i中给定的一个PE。例如,可配置处理器元件阵列100将来自层中的第一层的OF张量数据路由到给定PE 105a-i的IF RF 145a中,并将来自层中的第二层的OF张量数据路由到给定PE 105a-i的FL RF 145b中。因此,IF RF 145a和FL RF 145b将包含来自两个不同层的OF张量数据。表1中的“Eltwise”可编程描述符字段被设置为“True”,以指示逐元素操作被激活,并且eltwise使能信号用于绕过给定PE 105a-i内的MAC操作,给定PE105a-i改为执行IF RF 145a中存储的第一OF张量数据和FL RF 145b中存储的第二OF张量数据的逐元素操作(例如,相加或最大)。
在图15中示出了图1的示例可配置处理器元件阵列100中的支持最大池化操作的示例硬件架构。在许多深度神经网络(DNN)中广泛使用最大池化操作来修剪所生成的特征图的大小。为了支持最大池化操作,可配置处理器元件阵列100还重用加载和排出路径,以使要最大池化的网络层的OF数据被存储在给定PE 105a-i的IF RF 145a中。给定的PE105a-i的池寄存器165用于跟踪当前最大值,要被最大池化的层的后续OF点将被与当前最大值进行比较。
图16-25示出了示例用例,其中可配置处理器元件阵列100被配置为根据四(4)个不同的数据流调度进行操作以实现诸如ResNet之类的残差神经网络的层。图16-19示出了代表在这些示例中由可配置处理器元件阵列100实现的不同数据流调度的各个示例伪代码。如在下面更详细描述的,在这些示例中示出的四(4)个不同的数据流调度基于对应的四(4)个不同的张量处理模板。在以下示例中,可配置处理器元件阵列100中包括的PE 105a-i的阵列被假定为NxN=16x16,其总共是256个PE 105a-i。然而,可以用具有不同维度的PE105a-i的阵列来实现这些和其他的示例用例。
图16示出了用于第一示例数据流调度1600的示例伪代码,其将处理IF张量数据和FL张量数据以产生残差神经网络的示例层的OF张量数据。在图16的所示示例中,要处理的IF张量数据的卷在Ix维度上具有56个元素,在Iy维度上具有56个元素,并且在Ic维度上具有64个元素,并且要产生的张量数据的卷在Ox维度上具有56个元素,在Oy上具有56个元素,并且在Oc维度上具有256个元素,其对应于要应用于IF张量数据的256个不同的过滤器(FL数据)。示例数据流调度包括示例内部处理循环1605,内部处理循环1605将1元素Ox数据的8个分区和32元素Ic数据的2个分区映射到PE 105a-i的阵列的16行110a-c,并将2元素Oy数据的14个分区分别映射到PE 105a-i的阵列的14列115a-c。因此,PE 105a-i的阵列的16x14部分中的每个PE 105a-i取Ox的一(1)个点、Oy的2个点和32个输入通道(Ic)点,并为属于一(1)个输出通道(Oc)的两(2)个OF点生成部分和。因此,每个PE 105a-i处理针对32个不同的Ic的64个IF点和针对32个不同的Ic的32个FL点,同时产生属于单个Oc的两(2)个不同OF点。注意,由于沿着PE列115a-c的Ic划分因数是两(2),这意味着相邻行110a-c中的两(2)个PE正致力于在OF输出数据卷中的那个位置处产生最终的OF点。因此,跨相邻行110a-c中的两(2)个PE 105a-i的部分和的内部累加被用于在OF输出数据中的那个位置处生成最终的OF点。这导致八(8)个PE在PE 105a-i的阵列中的给定列115a-c内产生最终的OF点,并导致总共112个PE 106a-i(每列8个x14列),其产生从内部处理循环1605得到的最终OF点。因此,内部循环1605产生OF数据卷,该数据卷在Ox维度上具有八(8)个元素,在Oy维度上具有28个元素并且在Oc维度上具有一(1)个元素。示例数据流调度包括示例外部处理循环1610,外部处理循环1610在Oc维度上执行256次迭代,在Ox维度上执行七(7)次迭代,并且在Oy维度上执行两(2)次迭代,这产生56x56x256个OF点的最终OF数据卷。由于IF数据被外部循环1610重用,因此数据流1600是输入激活固定的(input activation stationary)。由于数据流在相同的Oc维度上累加Ic数据元素,因此数据流1600对应于矢量—矢量张量处理模板。
在图20中形象化地描绘了图16的示例数据流调度1600的示例数据划分和分块方面。在图21中形象化地描绘了为了实现图16的示例数据流调度1600而由PE 105a-i的阵列执行的示例卷积操作。图22示出了表1的配置描述符的示例值,其可以用于将示例可配置处理器元件阵列100配置为实现图16的示例数据流调度1600。
图17示出了用于第二示例数据流调度1700的示例伪代码,其将处理IF张量数据和FL张量数据以产生残差神经网络的示例层的OF张量数据。在图17的所示示例中,要处理的IF张量数据的卷在Ix维度上具有28个元素,在Iy维度上具有28个元素,并且在Ic维度上具有128个元素,并且要产生的OF张量数据的卷在Ox维度上具有28个元素,在Oy维度上具有28个元素,并且在Oc维度上具有512个元素,其对应于要应用于IF张量数据的512个不同的过滤器(FL数据)。示例数据流调度1700包括示例内部处理循环1705,内部处理循环1705将8元素Oc数据的16个分区和8元素Ic数据的16个分区分别映射到PE 105a-i的阵列的16行110a-c和16列115a-c。每个PE 105a-i取八(8)个输入通道(Ic)点和八(8)个输出通道(Oc)点来生成八(8)个OF数据点。因此,每个PE 105a-i对八(8)个不同Ic的八(8)个IF数据点和要应用于八(8)个不同Ic数据点的64个FL点进行操作,以产生八(8)个不同的Oc数据点。因此,内部循环1705产生OF数据卷,该数据卷在Ox维度上具有一(1)个元素,在Oy维度上具有一(1)个元素并且在Oc维度上具有8x16=128个元素。示例数据流调度包括示例外部处理循环1710,外部处理循环1710在Ox维度上执行28次迭代,在Oy维度上执行28次迭代,并且在Oc维度上执行四(4)次迭代。由于Ic数据的16个分区映射到16列115a-c,因此通过沿PE行方向(例如,对于“i=0至15”的PE(i,15))进行累加来确定最终的OF数据,并且OF数据提取来自最后一个PE列115c。由于FL数据被Oy和Ox维度上的外部循环迭代所重用,因此示例数据流调度1700是权重固定的(weight stationary)。此外,因为数据流1700跨不同的OC维度累加IC数据,因此数据流1700对应于矢量—矩阵张量处理模板。图23示出了表1的配置描述符的示例值,其可以用于将示例可配置处理器元件阵列100配置为实现图17的示例数据流调度1700。
图18示出了用于第三示例数据流调度1800的示例伪代码,其将处理IF张量数据和FL张量数据以产生残差神经网络的示例层的OF张量数据。示例数据流1800包括示例内部处理循环1805,内部处理循环1805沿着PE 105a-i的阵列中的列115a-c映射8元素Ic数据的两(2)个分区和1元素Ox数据的八(8)个分区,并沿着PE 105a-i的阵列中的16行110a-c映射8元素Oc数据的16个分区。因此,每个PE通过处理7x8体积的IF数据和8x8体积的FL点来处理1x7x8体积的OF数据,以生成56个部分和OF数据点。示例数据流1800还包括示例外部处理循环1810,在该循环中,在Ic维度的32次迭代的每个间隔之后,沿水平方向的两(2)个相邻PE105a-i中的部分和被在内部累加以生成最终的OF数据点。由于在每次迭代中新的IF和FL数据点被送入PE 105a-i(外部循环中的Ic),并且部分和在PE 105a-i中是固定的,因此数据流调度1800是输出激活固定的(output activation stationary)。另外,因为数据流1800在不同Ox维度和不同OC维度的IC数据点上执行累加,因此数据流1800对应于矩阵—矩阵张量处理模板。图24示出了表1的配置描述符的示例值,其可以用于将示例可配置处理器元件阵列100配置为实现图18的示例数据流调度1800。
图19示出了用于第四示例数据流调度1900的示例伪代码,其将处理IF张量数据和FL张量数据以产生残差神经网络的示例层的OF张量数据。数据流调度1900是为采用3x3过滤器的神经网络层定制的(而其他示例数据流1600-1800对应于采用1x1过滤器的神经网络层)。示例数据流1900包括示例内部处理循环1905,内部处理循环1905沿着PE 105a-i的阵列中的列115a-c映射4元素Oy数据的14个分区,并且沿着PE 105a-i的阵列中的行110a-c映射1元素Ox数据的八(8)个分区和16元素Oc数据的两(2)个分区。因此,每个PE 105a-i处理1x4x16体积的数据,并消耗18个IF数据点(因为权重维度是3x3,所以产生1x4体积的OF数据涉及3x6体积的IF数据,对应于18个IF点)和16个FL数据点以产生64个部分和。示例数据流1900还包括示例外部处理循环1910,在该循环中,当九(9)个FL数据点(对应于3x3过滤器)和64个Ic数据点全部已在给定的PE 105a-i内被累加时,最终的OF点被生成。由于Ic存在于外部处理循环1910中,因此数据流调度1900是输出激活固定调度的示例。另外,因为数据流1900一个接一个地送入过滤器点,并且每个计算涉及将标量(过滤器)与多个输入激活点相乘,因此数据流1900对应于标量—矢量张量处理模板。图25示出了表1的配置描述符的示例值,其可以用于将示例可配置处理器元件阵列100配置为实现图19的示例数据流调度1900。
尽管在图1-25中示出了实现可配置处理器元件阵列100的示例方式,但是可以以任何其他方式来组合、划分、重新布置、省略、消除和/或实现图1-25所示的元件、过程和/或设备中的一个或多个。另外,可以通过硬件、软件、固件和/或硬件、软件和/或固件的任何组合来实现图1-25中的示例PE 105a-i、一个或多个示例配置寄存器120、示例存储器125、示例张量数据分配单元130、示例列缓冲器存储135a-c、示例输出数据处理器138a-c、示例总线140a-c、示例RF存储145a-c、示例MAC单元150、示例逐元素计算单元155、示例最大池化单元160、示例池寄存器165、一个或多个示例配置寄存器170、示例FSM 175、示例共享计算逻辑605、示例乘法器610、示例加法器615、示例比较器620、示例复用器控制逻辑625-660、示例寄存器675和/或更一般的示例可配置处理器元件阵列100。因此,例如,可以通过一个或多个模拟或数字电路、逻辑电路、一个或多个可编程处理器、一个或多个可编程控制器、一个或多个图形处理单元(GPU)、一个或多个数字信号处理器(DSP)、一个或多个专用集成电路(ASIC)、一个或多个可编程逻辑器件(PLD)、一个或多个现场可编程门阵列(FPGA)和/或一个或多个现场可编程逻辑器件(FPLD)来实现示例PE 105a-i、一个或多个示例配置寄存器120、示例存储器125、示例张量数据分配单元130、示例列缓冲器存储135a-c、示例输出数据处理器138a-c、示例总线140a-c、示例RF存储145a-c、示例MAC单元150、示例逐元素计算单元155、示例最大池化单元160、示例池寄存器165、一个或多个示例配置寄存器170、示例FSM 175、示例共享计算逻辑605、示例乘法器610、示例加法器615、示例比较器620、示例复用器控制逻辑625-660、示例寄存器675和/或更一般的示例可配置处理器元件阵列100中的任何一个。当阅读本专利的覆盖纯粹软件和/或固件实现方式的任何装置权利要求或系统权利要求时,据此将示例可配置处理器元件阵列100、示例PE 105a-i、一个或多个示例配置寄存器120、示例存储器125、示例张量数据分配单元130、示例列缓冲器存储135a-c、示例输出数据处理器138a-c、示例总线140a-c、示例RF存储145a-c、示例MAC单元150、示例逐元素计算单元155、示例最大池化单元160、示例池寄存器165、一个或多个示例配置寄存器170、示例FSM 175、示例共享计算逻辑605、示例乘法器610、示例加法器615、示例比较器620、示例复用器控制逻辑625-660和/或示例寄存器675中的至少一个明确定义为包括包含该软件和/或固件的非暂时性计算机可读存储设备或存储盘,诸如存储器、数字通用盘(DVD)、光盘(CD)、蓝光光盘等。另外,示例可配置处理器元件阵列100可包括除图1-25所示的那些之外或代替图1-25所示的那些的一个或多个元件、过程和/或器件,并且/或者可包括任何或所有所示出的元件、过程和器件中的多于一个。如本文所使用的,短语“在通信中”(包括其变体)包括直接通信和/或通过一个或多个中间组件的间接通信,并且不要求直接物理(例如,有线)通信和/或持续通信,而是另外包括按照周期性间隔、计划间隔、非周期性间隔和/或一次性事件的选择性通信。
在图26中示出了表示用于实现示例可配置处理器元件阵列100的示例硬件逻辑、机器可读指令、硬件实现的状态机和/或其任何组合的流程图。在这些示例中,机器可读指令可以是供计算机处理器(诸如在下面结合图27讨论的示例处理器平台2700中示出的处理器2712)执行的一个或多个可执行程序或可执行程序的一个或多个部分。这一个或多个程序或其一个或多个部分可以体现在存储在非暂时性计算机可读存储介质(诸如CD-ROM、软盘、硬盘驱动器、DVD、Blu-ray diskTM(蓝光光盘)或与处理器2712相关联的存储器)上的软件中,但是全部一个或多个程序和/或其部分可以替代地由除处理器2712之外的设备执行和/或体现在固件或专用硬件中。另外,尽管参考图26所示的流程图描述了一个或多个示例程序,但是可以替代地使用实现示例可配置处理器元件阵列100的许多其他方法。例如,参考图26所示的流程图,可以改变块的执行顺序,并且/或者可以改变、消除、组合所描述的块中的一些和/或将其细分成多个块。附加地或替代地,任何块或所有块可以由被构造成在不执行软件或固件的情况下执行对应操作的一个或多个硬件电路(例如,离散和/或集成的模拟和/或数字电路,FPGA,ASIC,比较器,运算放大器(op-amp),逻辑电路,等等)来实现。
本文描述的机器可读指令可以以压缩格式、加密格式、分段格式、打包格式等中的一种或多种来存储。本文描述的机器可读指令可被存储作为可用于创建、制造和/或产生机器可执行指令的数据(例如,指令、代码、代码表示等的部分)。例如,机器可读指令可被分段并存储在一个或多个存储设备和/或计算设备(例如,服务器)上。机器可读指令可能需要安装、修改、改编、更新、组合、补充、配置、解密、解压缩、解包、分发、再分配等中的一种或多种,以使它们可以由计算设备和/或其他机器直接读取和/或执行。例如,机器可读指令可以被存储在多个部分中,这些部分被单独压缩、加密并存储在单独的计算设备上,其中,这些部分当被解密、解压缩和组合时形成一组可执行指令,这些可执行指令实现诸如本文描述的程序。在另一示例中,机器可读指令可以在如下状态下被存储:它们可被计算机读取,但是需要添加库(例如,动态链接库)、软件开发工具包(SDK)、应用程序编程接口(API)等,以便在特定计算设备或其他设备上执行这些指令。在另一示例中,在可以整体或部分地执行机器可读指令和/或一个或多个对应程序之前,可能需要配置机器可读指令(例如,设置被存储,数据被输入,网络地址被记录,等等)。因此,所公开的机器可读指令和/或一个或多个对应程序旨在包含这样的机器可读指令和/或一个或多个程序,而不管该机器可读指令和/或一个或多个程序在被存储或以其他方式处于静态或正在传输时的特定格式或状态如何。
在另一示例中,机器可读指令可以在如下状态下被存储:它们可被计算机读取,但是需要添加库(例如,动态链接库)、软件开发工具包(SDK)、应用程序编程接口(API)等,以便在特定计算设备或其他设备上执行这些指令。在另一示例中,在可以整体或部分地执行机器可读指令和/或一个或多个对应程序之前,可能需要配置机器可读指令(例如,设置被存储,数据被输入,网络地址被记录,等等)。因此,所公开的机器可读指令和/或一个或多个对应程序旨在包含这样的机器可读指令和/或一个或多个程序,而不管机器可读指令和/或一个或多个程序当被存储或以其他方式处于静态或正在传输时的特定格式或状态如何。
本文描述的机器可读指令可以通过任何过去、现在或将来的指令语言、脚本语言、编程语言等来表示。例如,可以使用以下语言中的任何一种来表示机器可读指令:C,C++,Java,C#,Perl,Python,JavaScript,超文本标记语言(HTML),结构化查询语言(SQL),Swift,等等。
如上所述,可以使用在非暂时性计算机和/或机器可读介质(诸如硬盘驱动器,闪速存储器,只读存储器,光盘,数字通用盘,缓存,随机存取存储器和/或在任何持续时间内(例如,在延长的时间段内,永久地,在短暂的时刻,临时缓冲地,和/或对信息进行缓存地)存储信息的任何其他存储设备或存储盘)上存储的可执行指令(例如,计算机和/或机器可读指令)来实现图26的示例过程。如本文所使用的,术语非暂时性计算机可读介质明确地定义为包括任何类型的计算机可读存储设备和/或存储盘并排除传播信号并排除传输介质。并且,如本文所使用的,术语“计算机可读”和“机器可读”被认为是等同的,除非有另外的说明。
“包括”和“包含”(及其所有形式和时态)在本文中用作开放式术语。因此,每当权利要求采用任何形式的“包括”或“包含”(例如,包含,包括,包含,包括,具有,等等)作为前序或在任何种类的权利要求叙述中采用任何形式的“包括”或“包含”时,将会明白,可能存在附加的元素、术语等,而不落在对应的权利要求或叙述的范围之外。如本文所使用的,当短语“至少”在例如权利要求的前序中用作过渡术语时,它与术语“包含”和“包括”同样是开放式的。术语“和/或”当例如以诸如“A、B和/或C”的形式使用时是指A、B、C的任何组合或子集,诸如(1)单独A,(2)单独B,(3)单独C,(4)A与B,(5)A与C,(6)B与C,以及(7)A与B与C。如本文在描述结构、组件、项目、对象和/或事物的上下文中使用的,短语“A和B中的至少一个”旨在指代包括以下各项中的任一项的实现方式:(1)至少一个A,(2)至少一个B,以及(3)至少一个A和至少一个B。类似地,如本文在描述结构、组件、项目、对象和/或事物的上下文中使用的,短语“A或B中的至少一个”旨在指代包括以下各项中的任一项的实现方式:(1)至少一个A,(2)至少一个B,以及(3)至少一个A和至少一个B。如本文在描述过程、指令、动作、活动和/或步骤的进行或执行的上下文中使用的,短语“A和B中的至少一个”旨在指代包括以下各项中的任一项的实现:(1)至少一个A,(2)至少一个B,以及(3)至少一个A和至少一个B。类似地,如本文在描述过程、指令、动作、活动和/或步骤的进行或执行的上下文中使用的,短语“A或B中的至少一个”旨在指代包括以下各项中的任一项的实现:(1)至少一个A,(2)至少一个B,以及(3)至少一个A和至少一个B。
如本文所使用的,单数引用(例如,“一”,“一种”,“第一”,“第二”,等等)不排除多个。如本文所使用的,术语“一”或“一种”实体是指一个或多个该实体。术语“一”(或“一种”)、“一个或多个”和“至少一个”在本文中可以互换使用。另外,尽管被单独列出,但是多个装置、元件或方法动作可以由例如单个单元或处理器来实现。此外,尽管各个特征可被包括在不同的示例或权利要求中,但是这些特征可能被组合,并且包括在不同的示例或权利要求中并不暗示特征的组合不是可行和/或有利的。
由图26所示的流程图来表示示例程序2600,该程序可以被执行来操作图1的示例可配置处理器元件阵列100以实现卷积神经网络的层。参考前述附图和关联的书面描述,图26的示例程序2600在框2605处开始执行,在框2605处,配置加载器122执行指令(例如,编译程序、软件等)以将与要由可配置处理器元件阵列100实现的卷积神经网络相对应的输入数据(IF数据)和过滤器数据(FL数据)加载到可配置处理器元件阵列100的存储器125中。在框2610处,配置加载器122执行指令(例如,编译程序、软件等)以将描述符写入到配置寄存器120,以将可配置处理器元件阵列100配置为基于与可能的张量处理模板之一相对应的给定数据流调度来实现卷积神经网络的第一层,如上所述。这样,框2610对应于上面描述的配置阶段705的示例。在框2615处,可配置处理器元件阵列100的PE 105a-i将描述符值加载到各个PE 105a-i的对应配置寄存器170中。这样,框2615对应于上面描述的加载阶段710的示例。在框2620处,如上所述,可配置处理器元件阵列100的PE 105a-i根据所配置的描述符对与当前神经网络层相对应的输入数据和过滤器数据执行计算操作。如上所述,在框2620处执行的计算操作可以包括例如MAC操作、逐元素操作、最大池操作、内部部分和累加、外部部分和累加等。这样,块2620对应于上面描述的计算阶段715、累加阶段720和/或外部部分和累加阶段725的示例。在框2625处,如上所述,PE 105a-i将在框2620针对当前神经网络层确定的输出数据(OF数据)存储在可配置处理器元件阵列100的存储器中。这样,框2625对应于上面描述的检索阶段730的示例。
在框2630处,配置加载器122执行指令(例如,编译程序、软件等)以确定是否要实现神经网络的另一层(例如,第二层)。如果要实现另一神经网络层(在框2630处为“是”),则控制返回到框2610,在框2610处,配置加载器122执行指令(例如,编译程序、软件等)以将另一组描述符写入到配置寄存器120,以将可配置处理器元件阵列100配置为基于与可能的张量处理模板之一相对应的给定数据流调度来实现卷积神经网络的下一(例如,第二)层,如上所述。如上所述,由配置加载器122在框2610处为卷积神经网络的下一(例如,第二)层配置的张量处理模板和由此得到的关联数据流调度可以与在框2610的前一迭代期间为卷积神经网络的第一层配置的张量处理模板和由此得到的关联数据流调度相同,或者与之不同。控制然后前进到框2615和随后的框,以实现卷积神经网络的下一(例如,第二)层。
然而,如果没有其他神经网络层要被实现(在框2630处为“否”),则在框2635处,可配置处理器元件阵列100使其PE 105a-i执行任何最终的部分和累加(参见例如上面描述的示例数据流调度1600-1900),然后将最终输出数据(OF数据)写入到可配置处理器元件阵列100的存储器125中。示例程序2600然后结束。
图27是示例处理器平台2700的框图,处理器平台2700被构造为执行图26的指令以实现图1-25的可配置处理器元件阵列100。处理器平台2700可以例如是:服务器,个人计算机,工作站,自学习机(例如,神经网络),移动设备(例如,蜂窝电话,智能电话,诸如iPadTM之类的平板计算机),个人数字助理(PDA),互联网设备,DVD播放器,CD播放器,数字视频录像机,蓝光播放器,游戏机,个人录像机,机顶盒,耳机或其他可穿戴设备,或者任何其他类型的计算设备。
所示示例的处理器平台2700包括处理器2712。所示示例的处理器2712是硬件。例如,可以由来自任何期望的系列或制造商的一个或多个集成电路、逻辑电路、微处理器、GPU、DSP或控制器来实现处理器2712。硬件处理器2712可以是基于半导体的(例如,基于硅的)设备。在所示出的示例中,硬件处理器2712实现图1的配置加载器122。
所示示例的处理器2712包括本地存储器2713(例如,缓存)。所示示例的处理器2712经由链路2718与包括易失性存储器2714和非易失性存储器2716的主存储器通信。可以由总线、一个或多个点到点连接等或者其组合来实现链路2718。可以由同步动态随机存取存储器(SDRAM)、动态随机存取存储器(DRAM)、动态随机存取存储器和/或任何其他类型的随机存取存储器设备来实现易失性存储器2714。可以由闪速存储器和/或任何其他期望类型的存储器设备来实现非易失性存储器2716。由存储器控制器控制对主存储器2714、2716的访问。
所示示例的处理器平台2700还包括接口电路2720。可以通过任何类型的接口标准(诸如以太网接口,通用串行总线(USB),(蓝牙)接口,近场通信(NFC)接口,和/或PCI快速接口)来实现接口电路2720。
在所示出的示例中,一个或多个输入设备2722连接到接口电路2720。一个或多个输入设备2722允许用户将数据和/或命令输入到处理器2712中。可以由例如音频传感器、麦克风、相机(静止或视频)、键盘、按钮、鼠标、触摸屏、跟踪板、轨迹球、跟踪条(诸如等位点(isopoint))、语音识别系统和/或任何其他人机接口来实现一个或多个输入设备。另外,诸如处理器平台2700之类的许多系统可以允许用户使用物理手势(诸如但不限于手或身体运动、面部表情和面部识别)来控制计算机系统和向计算机提供数据。
处理器平台2700还包括可配置处理器元件阵列100,可配置处理器元件阵列100经由链路2718与处理器平台2700的其他元件通信。例如,可配置处理器元件阵列100可以经由接口电路2720从输入设备2722中的一个或多个获得输入IF数据,如上所述实现卷积神经网络的层以处理输入IF数据,以及经由接口电路2720将由此得到的OF数据输出到输出设备2724。
一个或多个输出设备2724还连接到所示示例的接口电路2720。可以例如由显示设备(例如,发光二极管(LED),有机发光二极管(OLED),液晶显示器(LCD),阴极射线管显示器(CRT),原地切换(IPS)显示器,触摸屏,等等)、触觉输出设备、打印机和/或一个或多个扬声器来实现输出设备2724。因此,所示示例的接口电路2720通常包括图形驱动器卡、图形驱动器芯片和/或图形驱动器处理器。
所示示例的接口电路2720还包括通信设备(诸如发射器、接收器、收发器、调制解调器、住宅网关、无线接入点和/或网络接口),以促进经由网络2726与外部机器(例如,任何种类的计算设备)的数据交换。通信可以经由例如以太网连接、数字用户线(DSL)连接、电话线连接、同轴电缆系统、卫星系统、直线对传无线系统、蜂窝电话系统等。
所示示例的处理器平台2700还包括用于存储软件和/或数据的一个或多个大容量存储设备2728。这样的大容量存储设备2728的示例包括软盘驱动器、硬盘驱动器、光盘驱动器、蓝光光盘驱动器、独立磁盘冗余阵列(RAID)系统和数字通用盘(DVD)驱动器。在一些示例中,一个或多个大容量存储设备2728实现可配置处理器元件阵列100的存储器125。另外或可替代地,在一些示例中,易失性存储器2714实现可配置处理器元件阵列100的存储器125。
与图26的指令相对应的机器可执行指令2732可以被存储在大容量存储设备2728中,易失性存储器2714中,非易失性存储器2716中,本地存储器2713中,和/或可移动的非暂时性计算机可读存储介质(诸如CD或DVD 2736)上。
根据之前的描述,将会认识到,已经公开了用于实现卷积神经网络的示例可配置处理器元件阵列。所公开的可配置处理器元件阵列提供了一种低成本的可编程深度神经网络(DNN)硬件解决方案,该解决方案通过将给定神经网络层的数据流映射到矢量—矢量、矢量—矩阵、矩阵—矩阵或标量—矢量宏指令张量处理模板之一中来支持灵活的数据流调度映射。所公开的可配置处理器元件阵列可以提供与FPGA的灵活性类似的灵活性,同时保持ASIC硬件加速器的能量效率。而且,所公开的可配置处理器元件阵列不限于特定的寄存器文件或存储器大小或布置,因此可以在广泛的机器学习加速器设计中采用。此外,所公开的可配置处理器元件阵列可以用于开发DNN加速器,这些DNN加速器利用来自数据重用的能量效率。所公开的可配置处理器元件阵列因此针对计算机技术的功能中的一项或多项改进。
前述公开提供了利用所公开的可配置处理器元件阵列来实现卷积神经网络的示例解决方案。本文公开了以下进一步的示例,其包括诸如以下各项的主题:一种用于实现卷积神经网络的装置;一种非暂时性计算机可读介质,该介质包括指令,这些指令当被执行时使至少一个处理器将装置配置为实现卷积神经网络;以及一种用于将装置配置为实现卷积神经网络的方法。所公开的示例可以单独实现和/或以一种或多种组合来实现。
示例1是一种用于实现卷积神经网络的装置。示例1的装置包括处理器元件的阵列,该阵列包括行和列,这些行中的各行具有第一数量的处理器元件,这些列中的各列具有第二数量的处理器元件。示例1的装置还包括配置寄存器,这些配置寄存器用于存储多个描述符,这些描述符用于将处理器元件的阵列配置为基于与多个张量处理模板中的一个相对应的数据流调度来实现卷积神经网络的层,处理器元件中的一些处理器元件将基于描述符而被配置为实现多个张量处理模板中的一个,以对与卷积神经网络的层相关联的输入激活数据和过滤器数据进行操作,以产生与卷积神经网络的层相关联的输出激活数据。示例1的装置还包括存储器,该存储器用于存储与卷积神经网络的层相关联的输入激活数据、过滤器数据和输出激活数据。
示例2包括示例1的主题,其中,层是卷积神经网络的第一层,多个描述符是第一多个描述符,多个张量处理模板中的一个是多个张量处理模板中的第一个,并且配置寄存器可重新配置为存储第二多个描述符,第二多个描述符用于将处理器元件的阵列配置为基于与多个张量处理模板中的第二个相对应的第二数据流调度来实现卷积神经网络的第二层,多个张量处理模板中的第二个与多个张量处理模板中的第一个不同。
示例3包括示例2的主题,其中,多个张量处理模板包括矢量—矢量模板、矢量—矩阵模板和矩阵—矩阵模板。
示例4包括示例1至3中的任一个的主题,其中,处理器元件的阵列中的第一处理器元件包括:(i)输入激活寄存器文件,用于存储要由第一处理器元件处理的第一输入激活数据;(ii)过滤器寄存器文件,用于存储要由第一处理器元件处理的第一过滤器数据;(iii)输出激活寄存器文件,用于存储要由第一处理器元件基于第一输入激活数据和第一过滤器数据产生的第一输出激活数据;以及(iv)有限状态机,用于控制第一处理器元件的操作以实现多个张量处理模板中的一个。
示例5包括示例4的主题,其中,配置寄存器是第一配置寄存器,并且第一处理器元件还包括第二配置寄存器,第二配置寄存器用于存储描述符中的至少一些,第二配置寄存器用于配置有限状态机。
示例6包括示例4的主题,其中,第一处理器元件还包括:(i)乘法和累加单元,用于对第一输入激活数据和第一过滤器数据执行乘法和累加运算;(ii)逐元素计算单元,用于对第一输入激活数据执行逐元素操作;(iii)最大池化单元,用于执行最大池化操作以产生第一输出激活数据;以及(iv)控制逻辑,其可由有限状态机配置为控制乘法和累加单元、逐元素操作单元和最大池化单元的操作。
示例7包括示例1至6中的任一个的主题,其中,第一数量等于第二数量。
示例8包括示例1至7中的任一个的主题,并且还包括处理器,该处理器用于执行计算机指令以将多个描述符写入到配置寄存器。
示例9包括示例8的主题,其中,层是卷积神经网络的第一层,多个描述符是第一多个描述符,多个张量处理模板中的一个是多个张量处理模板中的第一个,并且处理器将第二多个描述符写入到配置寄存器,第二多个描述符用于将处理器元件的阵列配置为基于与多个张量处理模板中的第二个相对应的第二数据流调度来实现卷积神经网络的第二层,多个张量处理模板中的第二个与多个张量处理模板中的第一个不同。
示例10是一种非暂时性计算机可读介质,其包括计算机可读指令,这些计算机可读指令当被执行时使至少一个处理器至少执行以下操作:(i)将第一组描述符写入到配置寄存器,以将处理器元件的阵列配置为基于与多个张量处理模板中的第一个相对应的第一数据流调度来实现卷积神经网络的第一层,阵列包括行和列,这些行中的各行具有第一数量的处理器元件,这些列中的各列具有第二数量的处理器元件,第一组描述符用于将处理器元件中的一些处理器元件配置为实现多个张量处理模板中的第一个,以对与卷积神经网络的第一层相关联的输入激活数据和过滤器数据进行操作,以产生与卷积神经网络的第一层相关联的输出激活数据;以及(ii)将第二组描述符写入到配置寄存器,以将处理器元件的阵列配置为基于与多个张量处理模板中的第二个相对应的第二数据流调度来实现卷积神经网络的第二层,第二组描述符用于将处理器元件中的一些处理器元件配置为实现多个张量处理模板中的第二个,以对与卷积神经网络的第二层相关联的输入激活数据和过滤器数据进行操作,以产生与卷积神经网络的第二层相关联的输出激活数据。
示例11包括示例10的主题,其中,多个张量处理模板中的第二个与多个张量处理模板中的第一个不同。
示例12包括示例11的主题,其中,多个张量处理模板包括矢量—矢量模板、矢量—矩阵模板和矩阵—矩阵模板。
示例13包括示例10至12中的任一个的主题,其中,指令当被执行时还使至少一个处理器将第三组描述符写入到配置寄存器,以将处理器元件的阵列配置为实现卷积神经网络的第三层,第三组描述符用于将处理器元件中的一些处理器元件配置为执行逐元素操作或最大池化操作中的至少一个。
示例14包括示例10至13中的任一个的主题,其中,第一数量等于第二数量。
示例15是一种用于实现卷积神经网络的方法。示例15的方法包括:通过用至少一个处理器执行指令,将第一组描述符写入到配置寄存器,以将处理器元件的阵列配置为基于与多个张量处理模板中的第一个相对应的第一数据流调度来实现卷积神经网络的第一层,阵列包括行和列,这些行中的各行具有第一数量的处理器元件,这些列中的各列具有第二数量的处理器元件,第一组描述符用于将处理器元件中的一些处理器元件配置为实现多个张量处理模板中的第一个,以对与卷积神经网络的第一层相关联的输入激活数据和过滤器数据进行操作,以产生与卷积神经网络的第一层相关联的输出激活数据。示例15的方法还包括:通过用至少一个处理器执行指令,将第二组描述符写入到配置寄存器,以将处理器元件的阵列配置为基于与多个张量处理模板中的第二个相对应的第二数据流调度来实现卷积神经网络的第二层,第二组描述符用于将处理器元件中的一些处理器元件配置为实现多个张量处理模板中的第二个,以对与卷积神经网络的第二层相关联的输入激活数据和过滤器数据进行操作,以产生与卷积神经网络的第二层相关联的输出激活数据。
示例16包括示例15的主题,其中,多个张量处理模板中的第二个与多个张量处理模板中的第一个不同。
示例17包括示例16的主题,其中,多个张量处理模板包括矢量—矢量模板、矢量—矩阵模板和矩阵—矩阵模板。
示例18包括示例15至17中的任一个的主题,并且还包括将第三组描述符写入到配置寄存器,以将处理器元件的阵列配置为实现卷积神经网络的第三层,第三组描述符用于将处理器元件中的一些处理器元件配置为执行逐元素操作或最大池化操作中的至少一个。
示例19包括示例15至18中的任一个的主题,其中,第一数量等于第二数量。
示例20是一种用于实现卷积神经网络的装置。示例20的装置包括处理器元件的阵列,该阵列包括行和列,这些行中的各行具有第一数量的处理器元件,这些列中的各列具有第二数量的处理器元件。示例20的装置还包括用于基于多个描述符来配置处理器元件的阵列以基于与多个张量处理模板中的一个相对应的数据流调度来实现卷积神经网络的层的装置,描述符用于将处理器元件中的一些处理器元件配置为实现多个张量处理模板中的一个,以对与卷积神经网络的层相关联的输入激活数据和过滤器数据进行操作,以产生与卷积神经网络的层相关联的输出激活数据。示例20的装置还包括用于存储与卷积神经网络的层相关联的输入激活数据、过滤器数据和输出激活数据的装置。
示例21包括示例20的主题,其中,层是卷积神经网络的第一层,多个描述符是第一多个描述符,多个张量处理模板中的一个是多个张量处理模板中的第一个,并且配置装置将基于第二多个描述符来配置处理器元件的阵列以基于与多个张量处理模板中的第二个相对应的第二数据流调度来实现卷积神经网络的第二层,多个张量处理模板中的第二个与多个张量处理模板中的第一个不同。
示例22包括示例21的主题,其中,多个张量处理模板包括矢量—矢量模板、矢量—矩阵模板和矩阵—矩阵模板。
示例23包括示例20至22中的任一个的主题,其中,第一数量等于第二数量。
示例24包括示例20至23中的任一个的主题,并且还包括用于将多个描述符加载到用于配置处理器元件的阵列的装置中的装置。
示例25包括示例24的主题,其中,层是卷积神经网络的第一层,多个描述符是第一多个描述符,多个张量处理模板中的一个是多个张量处理模板中的第一个,并且用于加载的装置将把第二多个描述符加载到用于配置的装置中,以将处理器元件的阵列配置为基于与多个张量处理模板中的第二个相对应的第二数据流调度来实现卷积神经网络的第二层,多个张量处理模板中的第二个与多个张量处理模板中的第一个不同。
尽管本文已经公开了某些示例方法、装置和制品,但是该专利的覆盖范围不限于此。相反,该专利涵盖了公平地落入该专利的权利要求的范围内的所有方法、装置和制品。
Claims (25)
1.一种用于实现卷积神经网络的装置,该装置包括:
处理器元件的阵列,该阵列包括行和列,所述行中的各行具有第一数量的处理器元件,所述列中的各列具有第二数量的处理器元件;
配置寄存器,用于存储多个描述符,所述描述符用于将所述处理器元件的阵列配置为基于与多个张量处理模板中的一个张量处理模板相对应的数据流调度来实现所述卷积神经网络的层,所述处理器元件中的一些处理器元件将基于所述描述符而被配置为实现所述多个张量处理模板中的所述一个张量处理模板,以对与所述卷积神经网络的所述层相关联的输入激活数据和过滤器数据进行操作,以产生与所述卷积神经网络的所述层相关联的输出激活数据;和
存储器,用于存储与所述卷积神经网络的所述层相关联的所述输入激活数据、所述过滤器数据和所述输出激活数据。
2.如权利要求1所述的装置,其中,所述层是所述卷积神经网络的第一层,所述多个描述符是第一多个描述符,所述多个张量处理模板中的所述一个张量处理模板是所述多个张量处理模板中的第一个张量处理模板,并且所述配置寄存器可重新配置为存储第二多个描述符,该第二多个描述符用于将所述处理器元件的阵列配置为基于与所述多个张量处理模板中的第二个张量处理模板相对应的第二数据流调度来实现所述卷积神经网络的第二层,所述多个张量处理模板中的所述第二个张量处理模板与所述多个张量处理模板中的所述第一个张量处理模板不同。
3.如权利要求2所述的装置,其中,所述多个张量处理模板包括矢量—矢量模板、矢量—矩阵模板和矩阵—矩阵模板。
4.如权利要求1所述的装置,其中,所述处理器元件的阵列中的第一处理器元件包括:
输入激活寄存器文件,用于存储要由所述第一处理器元件处理的第一输入激活数据;
过滤器寄存器文件,用于存储要由所述第一处理器元件处理的第一过滤器数据;
输出激活寄存器文件,用于存储要由所述第一处理器元件基于所述第一输入激活数据和所述第一过滤器数据产生的第一输出激活数据;和
有限状态机,用于控制所述第一处理器元件的操作以实现所述多个张量处理模板中的所述一个张量处理模板。
5.如权利要求4所述的装置,其中,所述配置寄存器是第一配置寄存器,并且第一处理器元件还包括第二配置寄存器,该第二配置寄存器用于存储所述描述符中的至少一些描述符,所述第二配置寄存器用于配置所述有限状态机。
6.如权利要求4所述的装置,其中,第一处理器元件还包括:
乘法和累加单元,用于对所述第一输入激活数据和所述第一过滤器数据执行乘法和累加运算;
逐元素计算单元,用于对所述第一输入激活数据执行逐元素操作;
最大池化单元,用于执行最大池化操作以产生所述第一输出激活数据;和
控制逻辑,其可由所述有限状态机配置为控制所述乘法和累加单元、所述逐元素操作单元和所述最大池化单元的操作。
7.如权利要求1至6中任一权利要求所述的装置,其中,所述第一数量等于所述第二数量。
8.如权利要求1至4中任一权利要求所述的装置,还包括处理器,该处理器用于执行计算机指令以将所述多个描述符写入到所述配置寄存器。
9.如权利要求8所述的装置,其中,所述层是所述卷积神经网络的第一层,所述多个描述符是第一多个描述符,所述多个张量处理模板中的所述一个张量处理模板是所述多个张量处理模板中的第一个张量处理模板,并且所述处理器用于将第二多个描述符写入到所述配置寄存器,该第二多个描述符用于将所述处理器元件的阵列配置为基于与所述多个张量处理模板中的第二个张量处理模板相对应的第二数据流调度来实现所述卷积神经网络的第二层,所述多个张量处理模板中的所述第二个张量处理模板与所述多个张量处理模板中的所述第一个张量处理模板不同。
10.一种计算机可读介质,包括计算机可读指令,所述计算机可读指令当被执行时使至少一个处理器至少执行以下操作:
将第一组描述符写入到配置寄存器,以将处理器元件的阵列配置为基于与多个张量处理模板中的第一个张量处理模板相对应的第一数据流调度来实现卷积神经网络的第一层,所述阵列包括行和列,所述行中的各行具有第一数量的处理器元件,所述列中的各列具有第二数量的处理器元件,所述第一组描述符用于将所述处理器元件中的一些处理器元件配置为实现所述多个张量处理模板中的所述第一个张量处理模板,以对与所述卷积神经网络的所述第一层相关联的输入激活数据和过滤器数据进行操作,以产生与所述卷积神经网络的所述第一层相关联的输出激活数据;和
将第二组描述符写入到所述配置寄存器,以将所述处理器元件的阵列配置为基于与所述多个张量处理模板中的第二个张量处理模板相对应的第二数据流调度来实现所述卷积神经网络的第二层,所述第二组描述符用于将所述处理器元件中的所述一些处理器元件配置为实现所述多个张量处理模板中的所述第二个张量处理模板,以对与所述卷积神经网络的所述第二层相关联的输入激活数据和过滤器数据进行操作,以产生与所述卷积神经网络的所述第二层相关联的输出激活数据。
11.如权利要求10所述的计算机可读介质,其中,所述多个张量处理模板中的所述第二个张量处理模板与所述多个张量处理模板中的所述第一个张量处理模板不同。
12.如权利要求11所述的计算机可读介质,其中,所述多个张量处理模板包括矢量—矢量模板、矢量—矩阵模板和矩阵—矩阵模板。
13.如权利要求10所述的计算机可读介质,其中,所述指令当被执行时还使所述至少一个处理器将第三组描述符写入到所述配置寄存器,以将所述处理器元件的阵列配置为实现所述卷积神经网络的第三层,所述第三组描述符用于将所述处理器元件中的所述一些处理器元件配置为执行逐元素操作或最大池化操作中的至少一个。
14.如权利要求10至13中任一权利要求所述的计算机可读介质,其中,所述第一数量等于所述第二数量。
15.一种用于实现卷积神经网络的方法,该方法包括:
利用至少一个处理器将第一组描述符写入到配置寄存器,以将处理器元件的阵列配置为基于与多个张量处理模板中的第一个张量处理模板相对应的第一数据流调度来实现所述卷积神经网络的第一层,所述阵列包括行和列,所述行中的各行具有第一数量的处理器元件,所述列中的各列具有第二数量的处理器元件,所述第一组描述符用于将所述处理器元件中的一些处理器元件配置为实现所述多个张量处理模板中的所述第一个张量处理模板,以对与所述卷积神经网络的第一层相关联的输入激活数据和过滤器数据进行操作,以产生与所述卷积神经网络的所述第一层相关联的输出激活数据;和
利用所述至少一个处理器将第二组描述符写入到所述配置寄存器,以将所述处理器元件的阵列配置为基于与所述多个张量处理模板中的第二个张量处理模板相对应的第二数据流调度来实现所述卷积神经网络的第二层,所述第二组描述符用于将所述处理器元件中的所述一些处理器元件配置为实现所述多个张量处理模板中的第二个张量处理模板,以对与所述卷积神经网络的所述第二层相关联的输入激活数据和过滤器数据进行操作,以产生与所述卷积神经网络的所述第二层相关联的输出激活数据。
16.如权利要求15所述的方法,其中,所述多个张量处理模板中的所述第二个张量处理模板与所述多个张量处理模板中的所述第一个张量处理模板不同。
17.如权利要求16所述的方法,其中,所述多个张量处理模板包括矢量—矢量模板、矢量—矩阵模板和矩阵—矩阵模板。
18.如权利要求15所述的方法,还包括将第三组描述符写入到所述配置寄存器,以将所述处理器元件的阵列配置为实现所述卷积神经网络的第三层,所述第三组描述符用于将所述处理器元件中的所述一些处理器元件配置为执行逐元素操作或最大池化操作中的至少一个。
19.如权利要求15至18中任一权利要求所述的方法,其中,所述第一数量等于所述第二数量。
20.一种用于实现卷积神经网络的装置,该装置包括:
处理器元件的阵列,该阵列包括行和列,所述行中的各行具有第一数量的处理器元件,所述列中的各列具有第二数量的处理器元件;
配置装置,用于基于多个描述符来配置所述处理器元件的阵列,以基于与多个张量处理模板中的一个张量处理模板相对应的数据流调度来实现所述卷积神经网络的层,所述描述符用于将所述处理器元件中的一些处理器元件配置为实现所述多个张量处理模板中的所述一个张量处理模板,以对与所述卷积神经网络的所述层相关联的输入激活数据和过滤器数据进行操作,以产生与所述卷积神经网络的所述层相关联的输出激活数据;和
用于存储与所述卷积神经网络的所述层相关联的所述输入激活数据、所述过滤器数据和所述输出激活数据的装置。
21.如权利要求20所述的装置,其中,所述层是所述卷积神经网络的第一层,所述多个描述符是第一多个描述符,所述多个张量处理模板中的所述一个张量处理模板是所述多个张量处理模板中的第一个张量处理模板,并且所述配置装置用于基于第二多个描述符来配置所述处理器元件的阵列以基于与所述多个张量处理模板中的第二个张量处理模板相对应的第二数据流调度来实现所述卷积神经网络的第二层,所述多个张量处理模板中的所述第二个张量处理模板与所述多个张量处理模板中的所述第一个张量处理模板不同。
22.如权利要求21所述的装置,其中,所述多个张量处理模板包括矢量—矢量模板、矢量—矩阵模板和矩阵—矩阵模板。
23.如权利要求20至22中任一权利要求所述的装置,其中,所述第一数量等于所述第二数量。
24.如权利要求20所述的装置,还包括加载装置,用于将所述多个描述符加载到所述配置装置中。
25.如权利要求24所述的装置,其中,所述层是所述卷积神经网络的第一层,所述多个描述符是第一多个描述符,所述多个张量处理模板中的所述一个张量处理模板是所述多个张量处理模板中的第一个张量处理模板,并且所述加载装置用于将第二多个描述符加载到所述配置装置中,以将所述处理器元件的阵列配置为基于与所述多个张量处理模板中的第二个张量处理模板相对应的第二数据流调度来实现所述卷积神经网络的第二层,所述多个张量处理模板中的所述第二个张量处理模板与所述多个张量处理模板中的所述第一个张量处理模板不同。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/726,709 US20200134417A1 (en) | 2019-12-24 | 2019-12-24 | Configurable processor element arrays for implementing convolutional neural networks |
US16/726,709 | 2019-12-24 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113033765A true CN113033765A (zh) | 2021-06-25 |
Family
ID=70326906
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011027064.2A Pending CN113033765A (zh) | 2019-12-24 | 2020-09-25 | 用于实现卷积神经网络的可配置处理器元件阵列 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20200134417A1 (zh) |
KR (1) | KR20210082058A (zh) |
CN (1) | CN113033765A (zh) |
DE (1) | DE102020131050A1 (zh) |
TW (1) | TW202127324A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114327676A (zh) * | 2021-12-28 | 2022-04-12 | 北京航天自动控制研究所 | 一种面向卷积神经网络的高可靠加速器 |
CN116702852A (zh) * | 2023-08-02 | 2023-09-05 | 电子科技大学 | 基于多阶段事件驱动的动态重构神经网络加速电路及系统 |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11328037B2 (en) * | 2017-07-07 | 2022-05-10 | Intel Corporation | Memory-size- and bandwidth-efficient method for feeding systolic array matrix multipliers |
US11422781B1 (en) * | 2020-02-04 | 2022-08-23 | Xilinx, Inc. | Generation of vector codes for tensor convolutions |
US11507831B2 (en) * | 2020-02-24 | 2022-11-22 | Stmicroelectronics International N.V. | Pooling unit for deep learning acceleration |
US11537860B2 (en) * | 2020-03-23 | 2022-12-27 | Arm Limited | Neural net work processing |
CN112100118B (zh) * | 2020-08-05 | 2021-09-10 | 中科驭数(北京)科技有限公司 | 神经网络计算方法、装置和存储介质 |
US20220114135A1 (en) * | 2020-09-21 | 2022-04-14 | Mostafizur Rahman | Computer architecture for artificial intelligence and reconfigurable hardware |
US11928472B2 (en) | 2020-09-26 | 2024-03-12 | Intel Corporation | Branch prefetch mechanisms for mitigating frontend branch resteers |
US20220147826A1 (en) * | 2020-11-06 | 2022-05-12 | Moffett Technologies Co., Limited | Method and system for convolution with workload-balanced activation sparsity |
US11971949B2 (en) * | 2020-12-21 | 2024-04-30 | Samsung Electronics Co., Ltd. | Flexible-access instructions for efficient access of ML data |
US11922178B2 (en) | 2021-06-25 | 2024-03-05 | Intel Corporation | Methods and apparatus to load data within a machine learning accelerator |
US11494627B1 (en) * | 2021-07-08 | 2022-11-08 | Hong Kong Applied Science and Technology Research Institute Company Limited | Dynamic tile parallel neural network accelerator |
US20220075659A1 (en) * | 2021-11-18 | 2022-03-10 | Intel Corporation | Runtime configurable register files for artificial intelligence workloads |
US20230177000A1 (en) * | 2021-12-07 | 2023-06-08 | Centre For Intelligent Multidimensional Data Analysis Limited | Tensor processor and a method for processing tensors |
WO2023129491A1 (en) * | 2021-12-31 | 2023-07-06 | Ascenium, Inc. | Compute element processing using control word templates |
US20230259758A1 (en) * | 2022-02-16 | 2023-08-17 | Moffett International Co., Limited | Adaptive tensor compute kernel for sparse neural network |
CN115600652B (zh) * | 2022-11-29 | 2023-04-07 | 深圳市唯特视科技有限公司 | 卷积神经网络处理装置、高速目标探测方法以及设备 |
-
2019
- 2019-12-24 US US16/726,709 patent/US20200134417A1/en active Pending
-
2020
- 2020-09-18 KR KR1020200120679A patent/KR20210082058A/ko active Search and Examination
- 2020-09-23 TW TW109132923A patent/TW202127324A/zh unknown
- 2020-09-25 CN CN202011027064.2A patent/CN113033765A/zh active Pending
- 2020-11-24 DE DE102020131050.1A patent/DE102020131050A1/de active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114327676A (zh) * | 2021-12-28 | 2022-04-12 | 北京航天自动控制研究所 | 一种面向卷积神经网络的高可靠加速器 |
CN116702852A (zh) * | 2023-08-02 | 2023-09-05 | 电子科技大学 | 基于多阶段事件驱动的动态重构神经网络加速电路及系统 |
CN116702852B (zh) * | 2023-08-02 | 2023-10-20 | 电子科技大学 | 基于多阶段事件驱动的动态重构神经网络加速电路及系统 |
Also Published As
Publication number | Publication date |
---|---|
US20200134417A1 (en) | 2020-04-30 |
DE102020131050A1 (de) | 2021-06-24 |
KR20210082058A (ko) | 2021-07-02 |
TW202127324A (zh) | 2021-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113033765A (zh) | 用于实现卷积神经网络的可配置处理器元件阵列 | |
KR102292349B1 (ko) | 처리 장치 및 처리 방법 | |
US8122078B2 (en) | Processor with enhanced combined-arithmetic capability | |
KR102492477B1 (ko) | 행렬 곱셈기 | |
US20210216318A1 (en) | Vector Processor Architectures | |
GB2474901A (en) | Multiply-accumulate instruction which adds or subtracts based on a predicate value | |
CN110073329A (zh) | 访存设备、计算设备和应用于卷积神经网络运算的设备 | |
US11804851B2 (en) | Methods, systems, articles of manufacture, and apparatus to decode zero-value-compression data vectors | |
KR20170096105A (ko) | 인공 신경망에서의 분산 및 협력 계산을 위한 방법 및 장치 | |
US10521225B2 (en) | Matrix multiplication at memory bandwidth | |
WO2006112045A1 (ja) | 演算処理装置 | |
US20210224185A1 (en) | Data layout optimization on processing in memory architecture for executing neural network model | |
JP2022169552A (ja) | オンチップの計算ネットワーク | |
US11983616B2 (en) | Methods and apparatus for constructing digital circuits for performing matrix operations | |
CN110991619A (zh) | 神经网络处理器、芯片和电子设备 | |
US20110185151A1 (en) | Data Processing Architecture | |
CN114556260A (zh) | 用于执行神经网络的装置和系统 | |
WO2015183851A1 (en) | Combining compute tasks for a graphics processing unit | |
US20200356836A1 (en) | Fast deep learning fully-connected column-major implementation | |
CN111091181A (zh) | 卷积处理单元、神经网络处理器、电子设备及卷积运算方法 | |
US11347828B2 (en) | Methods, apparatus, articles of manufacture to perform accelerated matrix multiplication | |
CN114595811A (zh) | 用于执行深度学习操作的方法和设备 | |
CN112906877A (zh) | 用于执行神经网络模型的存储器架构中的数据布局有意识处理 | |
WO2020059156A1 (en) | Data processing system, method, and program | |
US20230004871A1 (en) | Machine learning cluster pipeline fusion |
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 |