CN113536216A - 用分布流水线可分离卷积运算将卷积映射到相连处理元件 - Google Patents

用分布流水线可分离卷积运算将卷积映射到相连处理元件 Download PDF

Info

Publication number
CN113536216A
CN113536216A CN202110429712.5A CN202110429712A CN113536216A CN 113536216 A CN113536216 A CN 113536216A CN 202110429712 A CN202110429712 A CN 202110429712A CN 113536216 A CN113536216 A CN 113536216A
Authority
CN
China
Prior art keywords
point
wise
convolution
vector
depth
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
CN202110429712.5A
Other languages
English (en)
Inventor
阿卜杜勒卡迪尔·乌特库·迪里尔
克里希纳库马尔·纳拉亚南·奈尔
阿努普·拉梅什·卡德科尔
伊赫桑·基什阿德斯坦尼扎德
郝宇辰
托马斯·马克·乌尔里希
拉凯什·科姆拉韦利
阿敏·费鲁沙希安
马丁·沙茨
奥利维亚·吴
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.)
Meta Platforms Inc
Original Assignee
Facebook Inc
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 Facebook Inc filed Critical Facebook Inc
Publication of CN113536216A publication Critical patent/CN113536216A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • 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/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
    • 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)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Medical Informatics (AREA)
  • Neurology (AREA)
  • Complex Calculations (AREA)
  • Image Processing (AREA)

Abstract

公开了使用分布式流水线式可分离卷积运算将卷积映射到相连的处理元件。一种处理器系统包括多个点积处理器单元和逐元素乘法单元。点积处理器单元为每个数据矩阵通道执行数据矩阵与单独的逐深度卷积权重矩阵的逐深度卷积。每个点积处理器单元为一个或更多个数据矩阵通道执行至少一部分逐深度卷积。逐元素乘法单元执行逐点卷积的乘法运算。每个逐元素乘法单元向从点积处理器单元中的一个或更多个接收的每个逐深度卷积部分结果元素应用来自多个逐点卷积权重滤波器的每一个的相应数据元素,以确定逐元素乘法单元结果。处理器系统将来自逐元素乘法单元结果的数据元素的不同组相加在一起,以至少部分地计算逐点卷积结果的不同数据元素。

Description

用分布流水线可分离卷积运算将卷积映射到相连处理元件
发明背景
使用神经网络可以解决一整类复杂的人工智能问题。由于这些问题通 常是计算和数据密集型的,所以硬件解决方案通常有利于提高神经网络的 性能。人工智能问题的解决方案通常可以使用基于硬件的解决方案来更快 地解决,这些解决方案优化了传统卷积运算的性能。卷积运算的传统优化 方法需要专门的硬件和复杂的存储器组织或转换方案。创建与解决传统卷 积运算兼容的硬件平台,同时也显著提高性能和效率,是一项技术挑战。 因此,存在对硬件和数据路径解决方案(data path solution)的需求,该硬 件和数据路径解决方案提高了有效计算解决复杂人工智能问题所需的卷 积运算的能力,而不会引入显著的复杂性和限制。
附图简述
在以下详细描述和附图中公开了本发明的各种实施例。
图1是示出使用神经网络解决人工智能问题的系统的实施例的框图。
图2是示出使用神经网络解决人工智能问题的处理元件的实施例的框 图。
图3是示出用于解决卷积问题的过程的实施例的流程图。
图4是示出通过在处理元件之间分配运算来解决卷积问题的过程的实 施例的流程图。
图5是示出通过在处理元件之间分配运算来解决卷积问题的过程的实 施例的流程图。
图6是示出使用处理器系统执行卷积运算的流水线式过程的实施例的 流程图。
图7是示出使用处理器系统执行卷积运算的流水线式过程的实施例的 流程图。
图8是示出使用神经网络解决人工智能问题的点积引擎的实施例的框 图。
图9是示出使用点积引擎执行二维卷积运算的过程的实施例的流程图。
图10是示出使用点积引擎执行二维卷积运算的过程的实施例的流程 图。
图11是示出使用点积引擎和向量单元运算来执行二维逐深度 (depthwise)卷积运算的过程的实施例的流程图。
图12是示出使用点积引擎和向量单元运算来执行二维逐深度卷积运 算的过程的实施例的流程图。
图13A和图13B是示出用于执行逐深度卷积的示例矩阵操作数的图示。
图14A和图14B是示出用于执行逐深度卷积的展开的数据矩阵的示例 的图示。
图15A和图15B是示出用于执行逐深度卷积的展开的权重矩阵的示例 的图示。
图16A和图16B是示出用于执行逐深度卷积的向量计算的示例的图示。
详细描述
本发明可以以多种方式实现,包括作为过程;装置;系统;物质的组 成;体现在计算机可读存储介质上的计算机程序产品;和/或处理器,例如 被配置为执行存储在耦合到处理器的存储器上和/或由该存储器提供的指 令的处理器。在本说明书中,这些实现或者本发明可以采取的任何其他形 式可以被称为技术。通常,在本发明的范围内,可以改变所公开的过程的 步骤顺序。除非另有说明,否则被描述为被配置成执行任务的诸如处理器或存储器的组件可以被实现为在给定时间被临时配置为执行任务的通用 组件或者被制造为执行任务的特定组件。如本文所使用的,术语“处理器” 指的是被配置成处理数据(例如计算机程序指令)的一个或更多个设备、 电路和/或处理核心。
下面提供了本发明的一个或更多个实施例的详细描述以及说明本发 明原理的附图。结合这些实施例描述了本发明,但是本发明不限于任何实 施例。本发明的范围仅由权利要求限定,并且本发明包括许多替代、修改 和等同物。为了提供对本发明的全面理解,在以下描述中阐述了许多具体 细节。这些细节是出于示例的目的而提供的,并且本发明可以根据权利要 求来实施,而不需要这些具体细节中的一些或全部。为了清楚起见,没有 详细描述与本发明相关的技术领域中已知的技术材料,以免不必要地模糊 本发明。
公开了一种用于执行有效卷积运算的处理器系统。使用所公开的技术, 传统卷积运算的工作负荷被分解成流水线式可分离卷积,并分布在多个连 接的处理元件上。流水线式可分离卷积非常接近传统卷积运算,但需要较 少的整体运算和资源,同时产生相似的预期结果。例如,使用逐深度和逐 点(pointwise)卷积的组合来解决卷积运算。数据矩阵及其相应的逐深度 卷积权重矩阵的每个通道被分配给一个处理元件。在每个处理元件,逐深度卷积运算使用点积引擎来执行。当确定部分逐深度卷积结果时,逐深度 卷积部分结果元素被传递到逐点卷积单元,例如逐元素乘法单元。每个处 理元件的逐元素乘法单元准备接收逐深度卷积部分结果元素和来自逐点 卷积权重滤波器的相应的数据元素,以确定作为部分逐点结果的逐元素乘 法单元结果。例如,每个逐深度卷积部分结果元素与来自逐点卷积权重滤 波器的相应数据元素相乘。然后,逐元素乘法单元的结果被传递到处理元 件的缩减单元(reduction unit),以将来自不同逐元素乘法单元的数据元素 的不同组相加在一起。在一些实施例中,缩减单元是由处理元件和它们的 缩减单元之间的点对点连接组成的缩减网络的一部分。在缩减网络的每个 节点处,当前处理元件的逐元素乘法单元结果被添加到从上游节点接收的 逐元素乘法单元结果。在每个处理元件中,逐深度卷积、逐元素乘法运算 和缩减运算都是流水线式的。通过使用流水线式逐深度和逐点卷积运算在 不同处理器元件之间分配工作负荷,并在缩减网络上对结果求和,硬件处 理元件的效率和利用率显著提高。与传统的通用处理器和/或标准矩阵处理 器硬件相比,卷积可以以显著的性能优势来执行。与使用通用处理器和传 统硬件配置相比,本文公开的处理单元的专用硬件配置导致显著的性能改 进和资源效率。
在一些实施例中,处理器系统包括多个(a plurality of)点积处理器单 元。例如,处理器系统包括多个通信连接的处理元件,其中每个处理元件 包括具有点积处理器单元的点积引擎。多个点积处理器单元被配置为执行 具有多个通道的数据矩阵与多个逐深度卷积权重矩阵的逐深度卷积。例如, 卷积运算可以使用可分离卷积的组合来求解,该可分离卷积包括近似原始 卷积运算的逐深度卷积和逐点卷积。使用多个点积处理器单元求解逐深度 卷积部分,使用多个逐元素乘法单元和缩减网络求解逐点卷积部分。诸如 具有宽度、高度和通道(深度)维度的3D卷积数据矩阵的数据矩阵是使 用处理元件的点积引擎解决逐深度卷积问题的一个参数。在一些实施例中, 数据矩阵是用于解决机器学习问题的3D机器学习数据矩阵。对应集合的 逐深度卷积权重矩阵是逐深度卷积问题的第二个参数。在一些实施例中, 多个逐深度卷积权重矩阵包括用于多个通道的每个通道的单独的逐深度 卷积权重矩阵。例如,对于3D卷积数据矩阵的每个通道,存在2D逐深度 卷积权重矩阵。在一些实施例中,逐深度卷积权重矩阵每个都是2D机器 学习权重矩阵。
在一些实施例中,每个点积处理器单元被配置为对包括在多个通道中 的一个或更多个通道执行逐深度卷积的至少一部分。例如,逐深度卷积问 题分布在不同的处理元件上,其中每个指定处理元件的点积处理器单元执 行逐深度卷积问题的指定部分。逐深度卷积问题可以基于通道分布。例如, 数据矩阵和相应的逐深度卷积权重矩阵的不同通道被分配给不同的处理 元件及其相应的点积引擎和点积处理器单元。
在一些实施例中,处理器系统还包括多个逐元素乘法单元,其被配置 为至少部分地执行逐点卷积的乘法运算。例如,每个处理元件的逐元素乘 法单元执行对应于逐点卷积运算的部分的逐元素乘法运算。逐元素乘法单 元中的每一个被配置为将来自多个逐点卷积权重滤波器的每个逐点卷积 权重滤波器的相应数据元素应用于从点积处理器单元中的一个或更多个 接收的每个逐深度卷积部分结果元素,以确定逐元素乘法单元结果。例如,每个逐元素乘法单元被分配与数据矩阵的分配通道相匹配的逐点卷积权 重滤波器的一个或更多个对应通道。在一些实施例中,逐点卷积权重滤波 器每个都是机器学习权重矩阵,其宽度和高度为1,并且通道深度与数据 矩阵的通道深度相同。使用其逐元素乘法单元,每个处理器元件可以通过 将分配的逐点卷积权重元素的元素与使用处理元件的点积处理器单元计 算的逐深度卷积部分结果元素相乘来计算部分逐点卷积结果。在一些实施 例中,点积部分结果和逐点卷积运算是流水线式的。例如,可以在点积处 理器单元完成逐深度卷积之前,执行使用逐元素乘法单元的逐点卷积运算。
在一些实施例中,处理器系统被配置为将来自多个逐元素乘法单元的 逐元素乘法单元结果的数据元素的不同组相加(sum)在一起,以至少部 分地计算逐点卷积的结果的不同数据元素。例如,使用缩减网络,将多个 逐元素乘法单元的输出相加在一起。在每个下游处理元件处,缩减单元将 由其对应的逐元素乘法单元计算的逐元素乘法单元结果与从上游处理元 件接收的逐元素乘法单元结果相加在一起。求和运算可以流水线方式执行。例如,求和运算可以在点积处理器单元完成逐深度卷积之前执行。在一些 实施例中,可以并行执行来自逐元素乘法单元结果的数据元素的不同组的 求和运算。例如,逐元素乘法单元可以使用向量加法运算并行对多个数据 元素进行运算。
图1是示出使用神经网络解决人工智能问题的系统的实施例的框图。 例如,系统100可被应用以使用神经网络来解决诸如图像识别和推荐系统 匹配的问题。对应于神经网络不同层的卷积运算可以通过将计算工作负荷 分配给系统100的不同处理元件来解决。特别地,传统的卷积运算可以被 映射到系统100,作为使用近似传统卷积运算的逐深度和逐点卷积的可分 离卷积。在所示的例子中,系统100包括多个处理元件,例如处理元件101、103、105和109。附加的处理元件显示在虚线框中。系统100可以利用每 个处理元件来执行逐深度和逐点卷积运算的指定部分。在各种实施例中, 系统100可以包括更少或更多的处理元件。例如,处理元件的数量可以根 据预期的计算和数据要求而按比例增加(scaledup)或减少。在一些实施 例中,系统100通信连接到存储器单元(未示出)。例如,存储器单元可 以是末级高速缓存(LLC)、共享存储器,和/或可以使用静态随机存取存 储器(SRAM)来实现。
在一些实施例中,系统100的处理元件,包括处理元件101、103、105 和109,连接到通信总线(未示出)。通信总线可用于传输处理元件指令和 可选的指令参数。例如,卷积运算指令和卷积操作数(operand)可以通过 通信总线传输到处理元件,例如处理元件101。在各种实施例中,通过使 用系统100将问题用分布式运算(例如对应于逐深度和逐点卷积的部分的 运算)分开,可以解决大型复杂的人工智能问题。分布式运算可以分配给 不同的处理元件。卷积参数——诸如卷积数据矩阵的数据元素以及逐深度 卷积权重矩阵和逐点卷积权重滤波器的数据元素——可以被分配给适当 指定的处理元件。分配的分布式运算的结果可以被缩减和合并,以确定更 大和更复杂的卷积问题(例如传统的卷积问题)的解。在某些情况下,分 布式运算并行和/或在流水线级进行求解。在某些情况下,逐深度和逐点卷积运算是流水线式的和/或并行求解的。当部分逐深度卷积的结果被求解时, 部分逐深度卷积结果被用于计算部分逐点卷积结果。逐点卷积结果可以使 用缩减网络来缩减。在一些实施例中,第一处理元件的部分结果作为输入 被馈送到第二处理元件。例如,第一处理元件的部分逐点卷积结果与第二 处理元件的部分逐点卷积结果求和。然后,将结果与第三处理元件的部分 逐点卷积结果求和,以此类推,直到确定了求和结果的最终向量,该向量 对应于与传统卷积问题对应的确定结果。
在各种实施例中,系统100的处理元件,例如处理元件101、103、105 和109,每个可以包括控制逻辑(未示出)、点积引擎(未示出)、逐元素 乘法单元(未示出)、缩减单元(未示出)和与另一处理元件的点对点连 接(未示出)。例如,点对点连接将一个处理元件的计算结果提供给下游 处理元件的缩减单元。缩减单元不仅接收其处理元件的结果而且还接收上 游结果,并将这两个结果合并在一起。合并的结果可以通过与后续下游处 理元件的单独点对点连接提供给后续下游处理元件。在一些实施例中,多 个处理元件通过多个点对点连接呈菊花链状连接在一起,以合并多个处理 元件的结果。在各种实施例中,通过经由点对点连接将第一逐元素乘法单 元的结果传输到第二处理元件的缩减单元,第一处理元件的逐元素乘法单 元的输出可以与第二处理元件的第二逐元素乘法单元的输出求和。第二处 理元件的缩减单元合并两个逐元素乘法单元的输出。
图2是示出使用神经网络解决人工智能问题的处理元件的实施例的框 图。在所示的示例中,处理元件211包括控制逻辑213、点积引擎215、逐 元素乘法单元217和缩减单元219。处理元件211经由点对点连接231连 接到处理元件201,并且经由点对点连接233连接到处理元件221。处理 元件211也连接到通信总线251。处理元件201和221显示为虚线框,并且没有示出处理元件201和221的一些细节。导向处理元件201和来自处 理元件221的虚线箭头是与附加(可选)处理元件(未示出)的可选点对 点连接。类似于处理元件211,处理元件201和221连接到通信总线251。 在一些实施例中,处理元件211是图1的处理元件101、103、105和/或 109之一,并且点对点连接231和/或233是连接到图1的另一个处理元件 的点对点连接。
在一些实施例中,处理元件211的控制逻辑213用于控制处理元件211 的操作,包括点积引擎215、逐元素乘法单元217和缩减单元219的操作。 例如,控制逻辑213可用于确定如何处理在缩减单元219接收的数据,包 括分配不同数据参数的字节通道(byte lane)。在一些实施例中,控制逻辑 213用于处理由处理元件211经由通信总线251接收的指令。例如,处理 元件指令可以包括逐深度卷积运算指令、逐深度卷积参数、逐点卷积运算 指令、逐点卷积参数、字节对齐命令等。在一些实施例中,控制逻辑213 用于将来自卷积权重矩阵和/或逐点卷积权重滤波器的数据元素引导到处 理元件211的适当组件。
在一些实施例中,点积引擎215包括点积处理器单元,用于执行卷积 运算,例如逐深度卷积运算。例如,点积引擎215可以是用于使用来自卷 积数据矩阵的数据元素和相应的权重作为参数来执行逐深度卷积运算的 点积引擎。在一些实施例中,点积引擎215可以从卷积数据矩阵的一个或 更多个通道接收数据元素的一部分和相应逐深度卷积权重矩阵的相应数 据元素,以确定卷积数据矩阵的特定通道的逐深度卷积结果数据元素。处 理元件211的点积引擎215可以部分地用于通过用诸如处理元件201和221 的相邻处理元件对可分离逐深度卷积的一部分求解来解决传统卷积问题。 在一些实施例中,点积引擎215可以包括用于加载输入数据元素和写出结 果数据元素的输入和/或输出缓冲器。在所示的示例中,点积引擎215向逐 元素乘法单元217提供输出结果。
在一些实施例中,逐元素乘法单元217是用于执行逐元素乘法的硬件 单元。例如,逐元素乘法单元217可以将元素与对应的元素相乘,以确定 逐元素乘法单元结果。在一些实施例中,逐元素乘法单元217获取两个输 入,数据元素输入和向量输入,并将数据元素与向量输入的每个元素相乘, 以确定相乘输出结果的向量。在一些实施例中,逐元素乘法单元217获取 两个输入向量,并将第一输入向量的每个元素与第二输入向量的每个元素 相乘。例如,两个32元素输入向量可以产生1024个相乘结果。相乘结果 可以在多个周期内一次计算一个向量。例如,可以在32个周期内计算32 个不同的向量结果,每个向量结果有32个元素。
在一些实施例中,缩减单元219是用于缩减两个数据输入的硬件单元。 在所示的示例中,缩减单元219通过点对点连接231从逐元素乘法单元217 接收第一输入操作数,从处理元件201接收第二输入操作数。在一些实施 例中,输入是向量输入,其中每个输入包括多个元素。在各种实施例中, 来自逐元素乘法单元217的第一输入操作数是逐元素相乘结果的向量,并 且可以对应于部分逐点卷积结果。第二输入操作数是来自处理元件201的 处理结果。在一些实施例中,来自处理元件201的处理结果可以是由处理 元件201执行的逐点卷积运算的结果和/或来自使用处理元件201的相应缩 减单元(未示出)合并处理元件201的逐点卷积运算结果的结果。一旦缩 减单元219接收到两个输入操作数,缩减单元219通过点对点连接233将 缩减结果提供给处理元件221。在各种实施例中,缩减单元219将两个输入合并(或缩减)成单个输出。在一些实施例中,缩减运算是缩减单元219 的两个输入的向量和运算。例如,缩减单元219可以包括用于执行向量加 法运算的加法器,例如向量加法器。对两个输入的其他运算也可能是合适 的,例如逻辑运算(与、或、异或等)、移位运算、减法运算等,以及运 算的组合。然后,输出可以通过点对点连接提供给下游处理元件。在一些实施例中,一个或两个输入可以被移位,使得每个输入被保留但被不同地 对齐。例如,缩减单元219可以移位一个输入以将两个输入级联在一起。 例如,两个8字节的输入可以合并成一个16字节的输出结果。同样,两 个16字节的输入可以合并成一个32字节的输出结果。在各种实施例中, 不同的输入数据大小(例如,4字节、8字节、16字节等)和对齐选项可 能是合适的,这取决于计算上下文。
在一些实施例中,对于处理元件211,点对点连接231和233分别是 来自处理元件201和到处理元件221的网络连接。点对点连接231用于向 处理元件211的缩减单元219提供卷积运算结果和/或处理元件201的缩减 单元(未示出)的结果。点对点连接233用于将处理元件211的缩减单元 219的结果提供给处理元件221的缩减单元(未示出)。在各种实施例中, 处理元件可以包括到上游处理元件的连接,例如用于处理元件211的点对 点连接231,和/或到下游处理元件的连接,例如用于处理元件211的点对 点连接233。通过利用点对点连接,处理元件的计算结果不需要通过通信 总线251传输。避免了总线协议和总线通信的其他相关开销。
图3是示出用于解决卷积问题的过程的实施例的流程图。例如,使用 可分离卷积的组合来解决传统卷积问题,该可分离卷积非常接近传统卷积 问题。可分离卷积的处理分布在多个处理元件上。在各种实施例中,硬件 系统包括多个处理元件,每个处理元件配置有硬件点积引擎、逐元素乘法 单元和缩减单元。使用点对点连接的缩减网络来连接处理元件。传统的卷 积问题可以分解为多个运算,这些运算被分配给处理元件的不同组件。在 一些实施例中,图3的过程使用诸如图1的系统100的硬件系统来实现。 在一些实施例中,硬件系统的每个处理元件是诸如图2的处理元件211的 处理元件。在一些实施例中,步骤301和/或303以软件实现,例如,使用 软件编译器来接收和分解传统的卷积运算。在各种实施例中,步骤301和 /或303也可以使用诸如图1的系统100的硬件系统以硬件实现,以接收和 分解传统的卷积运算。
在301,接收卷积运算。诸如传统卷积运算的卷积运算包括诸如3D卷 积数据矩阵和卷积权重矩阵的操作数。在各种实施例中,卷积运算可能需 要在大量数据元素和大量计算和资源上计算卷积。为了提高卷积运算的计 算效率,可以用近似卷积运算的可分离卷积的组合来代替卷积运算。为了 更有效地执行可分离卷积,该问题被分解成多个较小的运算,例如多个部 分逐深度和逐点卷积运算。
在303,卷积运算被分解。例如,在301接收的传统卷积运算被分解 成更小的子问题。每个子问题都利用卷积运算,例如部分逐深度和逐点卷 积运算,单个处理元件及其组件可以处理这些运算。例如,配置有能够计 算32个部分逐深度卷积数据元素结果的点积引擎的处理元件被分配原始 卷积数据矩阵的一个或更多个通道以及相应逐深度卷积权重用于执行逐 深度卷积运算。类似地,可以分配逐元素乘法单元来执行逐点卷积的部分, 并且可以分配缩减单元来对多个处理元件的部分逐点卷积结果求和。在各 种实施例中,一个处理元件的输出可以与另一个处理元件的输出缩减,例 如,通过将结果相加在一起。在一些实施例中,子问题可以并行和/或在流 水线级解决。例如,逐深度和逐点卷积部分可以以流水线方式求解,部分 逐深度卷积运算的结果用作逐点卷积运算的输入。
在305,分解的运算分布在处理元件上。例如,303的分解卷积运算 的每个子问题被分配给处理元件。在各种实施例中,硬件系统的多个处理 元件各自接收一个或更多个要解决的子问题。子问题可以针对每个处理元 件的不同组件。接收到的子问题可以利用原始卷积参数的子集,例如来自 3D卷积数据矩阵的一部分数据元素和来自逐深度卷积权重矩阵和逐点卷 积权重滤波器的相应数据元素。在一些实施例中,处理元件还可以接收由 另一个处理元件计算的结果作为输入,例如,将部分结果的两个集合相加 在一起(或缩减)。分布式运算可以由分配的处理元件并行求解,以实现 显著的性能改进。
在307,来自分布式运算的结果被合并。例如,在每个处理元件计算 的结果被缩减和合并,以确定在301处接收的卷积运算的最终结果。在一 些实施例中,首先通过将处理元件呈菊花链状连接并利用如本文所述的处 理元件之间的点对点连接来部分缩减结果。缩减的结果可以更有效地写入, 以避免不必要的存储器写入,这导致显著的性能改进。在各种实施例中, 使用硬件系统的分布式处理元件求解的缩减结果最终例如通过写入共享 存储器位置而被合并在一起,以确定在301接收的卷积运算的最终结果。
图4是示出通过在处理元件之间分配运算来解决卷积问题的过程的实 施例的流程图。例如,传统的卷积问题是通过将部分可分离的卷积运算分 配给不同的处理元件并缩减分配的结果来解决的。在一些实施例中,3D卷 积数据矩阵的不同部分和相应的权重被分配并传输到不同的处理元件。每 个相应处理元件的不同组件处理接收到的输入参数,以确定部分卷积结果, 例如分别由点积引擎和逐元素乘法单元进行的部分逐深度卷积和逐点卷 积结果。在一些实施例中,每个卷积结果数据元素部分地通过使用缩减网 络将由多个处理元件确定的部分结果相加在一起来确定。在一些实施例中, 步骤401和403在图3的303和/或305处执行,步骤405在图3的305处 执行,和/或步骤407在图3的307处执行。在一些实施例中,图4的过程 使用诸如图1的系统100的硬件系统来实现。
在401,数据输入元素被分配并传输到处理元件。例如,来自数据矩 阵的数据元素被分配给每个合格的处理元件。数据元素可以来自数据矩阵 的一个或更多个通道。例如,在一些实施例中,每个处理元件与其他处理 元件并行处理数据矩阵的单通道。一旦处理元件完成了来自单个分配通道 的其分配的元素,该处理元件就可以开始处理来自其下一个分配通道的数 据元素。在一些实施例中,卷积数据矩阵是C通道深,并且有64个处理 元件作为硬件系统的一部分。C个通道分为64个通道的组。从每组64个 通道中,一个通道被分配给64个处理元件中的每一个。在一些实施例中, 每个处理元件在处理下一个分配的通道之前处理其分配的通道中的单个 通道。在各种实施例中,64个处理元件各自并行处理分配的通道。尽管在 该示例中使用了64个处理元件,但是不同数量的处理元件也可以是合适 的。
在403,权重输入元素被分配并传输到处理元件。例如,来自逐深度 卷积权重矩阵和逐点卷积权重滤波器的数据元素被分配并传输到每个处 理元件。来自逐深度卷积权重矩阵和逐点卷积权重滤波器的分配的数据元 素对应于来自在401分配的数据矩阵的数据输入元素。在一些实施例中, 对于每个处理元件,点积引擎利用来自逐深度卷积权重矩阵的数据元素, 逐元素乘法单元利用来自逐点卷积权重滤波器的数据元素。
在一些实施例中,每个逐深度卷积权重矩阵对应于卷积数据矩阵的一 个通道,并且每个逐深度卷积权重矩阵的数据元素被相应地分配。例如, 在一种情况下,卷积数据矩阵是C通道深,有C个对应的逐深度卷积权重 矩阵,并且有64个处理元件作为硬件系统的一部分。C个逐深度卷积权重 矩阵中的每一个被分配给处理元件,该处理元件被分配其相应的数据矩阵 通道。例如,在C是128的情况下,第一处理元件可以被分配第1和第65 个逐深度卷积权重矩阵。第二处理元件可以被分配第2和第66个逐深度 卷积权重矩阵。第64个处理元件可以被分配第64个和第128个逐深度卷 积权重矩阵。诸如此类。C个逐深度卷积权重矩阵中的每一个被分配给适 当的处理元件。对于较大的C值,从每组64个逐深度卷积权重矩阵中, 为每个处理元件分配相应的逐深度卷积权重矩阵。
在一些实施例中,逐点卷积权重滤波器的每个数据元素对应于数据矩 阵的不同通道。该对应通道也对应于使用数据矩阵的逐深度卷积结果。每 个逐点卷积权重滤波器的数据元素被相应地分配。例如,在一种情形下, 卷积数据矩阵是C通道深,每个C通道深有K个相应的逐点卷积权重滤 波器,并且有64个处理元件作为硬件系统的一部分。每个逐点卷积权重 滤波器都是一个1x1xC权重滤波器。K个逐点卷积权重滤波器的每个数据 元素对应于数据矩阵的不同通道和使用数据矩阵的逐深度卷积结果。K个 滤波器的每个数据元素被分配给处理元件,该处理元件被分配其相应的数 据矩阵通道。例如,在C为128的情况下,第一处理元件可以被分配每个 逐点卷积权重滤波器的第1和第65个元素。第二处理元件可以被分配每 个逐点卷积权重滤波器的第2和第66个元素。第64个处理元件可以被分 配每个逐点卷积权重滤波器的第64个和第128个元素。对于较大的C值, 每个处理元件被分配来自每个逐点卷积权重滤波器的每组64个元素的相 应元素。尽管在示例中使用了64个处理元件,但是不同数量的处理元件 也可以是合适的。
在405,执行局部处理元件运算,并且在处理元件之间缩减结果。在 一些实施例中,每个处理元件使用分配和接收的数据和权重元素来执行对 应于逐深度和逐点卷积的运算,并缩减处理元件之间的结果。例如,点积 引擎确定部分逐深度卷积结果,这些结果被逐元素乘法单元用来确定部分 逐点卷积结果。部分逐点卷积结果在处理元件之间相加在一起,以确定针 对原始卷积问题的卷积结果数据元素。
在一些实施例中,每个处理元件可以计算多个局部结果,以确定局部 结果的向量。每个局部卷积结果可以对应于与一个或更多个其他处理元件 的局部结果一起使用的部分结果,以确定传统的卷积结果数据元素。例如, 使用缩减网络来缩减跨多个处理元件计算的部分结果,以确定卷积结果数 据元素。在一些实施例中,通过在缩减网络上传输局部结果(例如部分 逐点卷积结果)并在网络的每个节点处执行运行求和来对部分结果求和。 例如,每个处理元件使用其点积引擎为数据矩阵的一个或更多个通道确定 逐深度卷积结果。逐深度结果被馈送到处理元件的逐元素乘法单元,以使 用逐点卷积权重滤波器的相应数据元素来计算部分逐点卷积结果。并行地, 多个处理元件确定对应于不同通道的部分逐点卷积结果。不同通道的部分 逐点卷积结果通过使用处理元件的缩减单元相加在一起。例如,在总共有 64个通道和64个处理元件的情况下,第二处理元件的缩减单元将第一和 第二处理元件的部分结果相加在一起。第三处理元件的缩减单元通过将第 三处理元件的结果加到来自第一和第二处理元件的结果的和上,来将第一、 第二和第三处理元件的部分结果相加在一起。在第64个处理元件,缩减 单元的输出是所有相应的64个通道的总和,并且是原始卷积问题的卷积 结果数据元素。
在407,处理元件的结果被合并。例如,在405计算的卷积结果数据 元素被合并在一起,以确定原始卷积问题的最终结果。在一些实施例中, 卷积结果数据元素由它们各自的处理元件通过写入诸如共享存储器位置 的共享位置来合并。通过将所有结果写入共享存储器位置,卷积结果数据 元素可以合并到卷积结果矩阵中。
图5是示出通过在处理元件之间分配运算来解决卷积问题的过程的实 施例的流程图。在各种实施例中,图5的过程由用于执行解决分布在多个 处理元件上的传统卷积问题所需的部分计算的每个处理元件来执行。在一 些实施例中,至少部分地在图3的303、305和/或307和/或图4的405和 /或407或者响应于图3的303、305和/或307和/或图4的405和/或407 来执行图5的过程。在一些实施例中,图5的过程由图1的系统100的一 个或更多个处理元件来执行。在一些实施例中,每个处理元件是诸如图2 的处理元件211的处理元件。
在501,接收局部指令。例如,在处理元件处接收逐深度卷积指令、 逐点卷积指令和/或缩减指令。在一些实施例中,指令由处理元件的控制逻 辑例如图2的控制逻辑213处理。在各种实施例中,指令包括特定的卷积 运算和指定要对其执行卷积运算的数据元素的卷积参数。例如,指令可以 指定利用点积引擎来确定部分逐深度卷积结果。作为另一个示例,该指令 可以指定利用逐元素乘法单元来确定部分逐点卷积结果。作为又一个示例, 指令可以指定利用缩减单元将多个部分逐点卷积结果相加在一起。在一些 实施例中,局部指令被用于使用点积引擎、逐元素乘法单元和/或缩减单元, 至少部分地解决可分离卷积问题。在一些实施例中,指令配置负责可分离 卷积问题的不同部分的处理元件的多个组件的使用。
在一些实施例中,接收对应于局部指令的局部参数。例如,接收卷积 数据矩阵的数据元素以及逐深度卷积权重矩阵的相应数据元素。作为另一 个示例,数据元素可以对应于逐点卷积权重滤波器的数据元素。这些元素 可以对应于数据矩阵和权重矩阵/滤波器的一个或更多个通道,并且被分配 给处理元件,作为分配用于解决卷积问题的计算的一部分。在一些实施例 中,数据元素在点积引擎的数据输入单元例如图8的数据输入单元803处被处理,权重元素在点积引擎的权重输入单元例如图8的权重输入单元805 处被处理。
在503,执行局部运算。在一些实施例中,点积引擎执行逐深度卷积 运算,而逐元素乘法单元执行逐点卷积运算。例如,使用点积引擎,由处 理元件执行局部逐深度卷积运算。在一些实施例中,点积引擎是图2的点 积引擎215。在一些实施例中,逐深度卷积运算是并行执行的,例如,由 点积引擎的不同向量单元来执行。每个向量单元能够输出部分逐深度运算 结果。例如,具有32个向量单元的点积引擎可以为同一分配通道输出32 个逐深度运算结果。在一些实施例中,在诸如图8的输出单元809的输出 单元处,结果被输出为输出结果的32元素向量。逐深度卷积输出结果被 传输到局部逐元素乘法单元,例如图2的逐元素乘法单元217。使用逐元 素乘法单元,处理元件使用来自点积引擎的输出来执行局部逐点卷积运算。 在一些实施例中,例如,通过接受逐元素乘法单元的向量输入,并行执行 多个逐点卷积运算。例如,每个部分逐深度卷积结果元素可以与来自每个 逐点卷积权重滤波器的数据元素相乘,以确定部分逐点卷积结果。逐元素 乘法单元的结果是部分逐点卷积输出结果,并被传输到局部缩减单元,例 如图2的缩减单元219。
在505,接收上游结果。例如,通过点对点连接接收上游处理元件的 处理结果。处理结果可以是使用上游处理元件的逐元素乘法单元确定的部 分逐点卷积结果的向量。在一些实施例中,处理结果是合并来自多个上游 处理元件的结果的上游缩减单元的结果。在各种实施例中,上游卷积结果 在诸如图2的缩减单元219的缩减单元处被接收。
在507,缩减局部和上游卷积结果。例如,由在503执行的局部卷积 运算计算的局部部分逐点卷积结果与在505接收的上游部分逐点卷积结果 合并。在一些实施例中,通过使用诸如图2的缩减单元219的缩减单元将 两个输入相加在一起,来缩减局部和上游结果。在各种实施例中,缩减将 不同通道的部分结果相加在一起。在一些实施例中,并行缩减了对应于不 同逐点卷积权重滤波器的多个结果。
在509,转发缩减结果。在一些实施例中,缩减的结果经由点对点连 接被转发到下游处理元件。下游处理元件可以将缩减的结果与由下游处理 元件的逐元素乘法单元计算的逐元素乘法单元结果合并。通过将缩减的结 果直接转发到下游处理元件,所需的存储器写入的数量被最小化,并导致 性能的提高和功率需求的降低。
图6是示出使用处理器系统执行卷积运算的流水线式过程的实施例的 流程图。例如,使用以流水线方式执行并分布在多个处理元件上的可分离 卷积的组合来求解传统卷积运算。虽然在数学上不等价,但是可分离卷积 的组合非常接近传统卷积运算,同时需要更少的资源。在每个处理元件处, 接收对应于为该处理元件分配的计算的一个或更多个局部指令。每个分配 的处理元件都配置有硬件点积引擎、硬件逐元素乘法器单元和硬件缩减单 元。硬件点积引擎执行逐深度卷积,硬件逐元素乘法器单元与缩减单元和 缩减网络一起使用来自点积引擎单元的输出执行逐点卷积。响应于一个或 更多个接收到的处理器元件指令,执行图6的过程。在一些实施例中,图 6的过程在图5的503、505、507和509处和/或由图1的系统100的一个 或更多个处理元件来执行。在一些实施例中,每个处理元件是诸如图2的 处理元件211的处理元件。
在601,使用点积引擎执行流水线式逐深度卷积。例如,在点积引擎 处接收数据矩阵和一个或更多个相应的逐深度卷积权重矩阵的数据元素。 数据矩阵的数据元素由通道分配,并且每个都是二维矩阵切片。每个对应 的逐深度卷积权重矩阵是2D权重矩阵。例如,每个逐深度卷积权重矩阵 可以是3x3的权重矩阵。点积引擎对输入参数执行逐深度卷积,以确定部 分逐深度卷积结果数据元素。在一些实施例中,通过沿着数据矩阵的两个 维度遍历,例如遍历数据矩阵的高度和宽度,但是保持相同的通道深度, 来执行逐深度卷积运算。随着逐深度卷积运算的计算,相应的逐深度卷积 结果数据元素被传输到处理元件的逐元素乘法器单元,以流水线化逐点卷 积运算。
在603,使用逐元素乘法器单元执行流水线式逐点卷积。例如,部分 逐深度卷积结果与来自逐点卷积权重滤波器的数据元素配对,以通过使用 逐元素乘法器单元应用逐元素乘法来确定部分逐点卷积结果。部分逐深度 卷积结果和来自逐点卷积权重滤波器的相应的数据元素按通道分配。在一 些实施例中,来自逐点卷积权重滤波器的每个数据元素从相同的通道中选 择,并且对应于分配给点积引擎的通道。在各种实施例中,对每个逐深度卷积结果和来自逐点卷积权重滤波器的每个分配的数据元素执行逐元素 乘法。部分逐点卷积结果被传输到处理元件的缩减单元,以流水线化部分 逐点卷积结果的求和。
在605,使用缩减网络执行流水线累加。例如,使用缩减单元及其点 对点连接,接收对应于每个逐点卷积权重滤波器的部分逐点卷积结果以及 来自上游处理元件的缩减结果。在603确定的部分逐点卷积结果是从处理 元件的逐元素乘法器单元接收的。在缩减单元通过到上游处理元件的点对 点连接接收缩减的结果。在各种实施例中,缩减单元执行向量累加运算来 对两个输入向量求和,以确定输出向量。例如,对应于通道的求和后的上 游部分逐点卷积结果的每个缩减结果与在603确定的局部部分逐点卷积结 果相加。结果通过缩减网络的点对点连接输出到下游处理元件。在各种实 施例中,输出是对应于每个逐点卷积权重滤波器的求和逐点卷积结果的向 量。
在图6的过程中,步骤601、603和605是流水线式过程的一部分。 点积引擎继续计算对应于输入数据矩阵的不同部分的逐深度卷积结果,以 供逐元素乘法单元处理。类似地,逐元素乘法单元继续输出部分逐点结果 供缩减单元处理。当点积引擎在601处理下一组逐深度卷积结果以供逐元 素乘法单元在603处理时,点积引擎(在603)处理结果以供缩减单元在 605处理。在初始集合的结果之后,点积引擎、逐元素乘法单元和缩减单 元同时运行。在一些实施例中,一个或更多个组件可以等待一个或更多个 其他组件完成,因为步骤601、603和/或605中的一些步骤可能比其他步 骤花费更长的时间。
在607,输出最终处理元件结果。例如,对应于原始卷积问题的不同 最终卷积结果的求和部分逐点卷积结果被输出到诸如共享存储器的存储 器。结果对应于卷积结果矩阵的不同数据元素。在一些实施例中,卷积结 果被输出到不同的存储位置,例如暂存存储器(scratchpad memory)位置 或另一个适当的位置。
图7是示出使用处理器系统执行卷积运算的流水线式过程的实施例的 流程图。在所示的示例中,图7的过程的不同部分由处理元件的不同组件 并行执行。例如,步骤701、703和/或705的至少一部分由诸如图2的点 积引擎215和/或图8的点积引擎800的点积引擎执行,步骤707和/或709 的至少一部分由诸如图2的逐元素乘法单元217的逐点卷积单元执行,和 /或步骤711、713和/或715的至少一部分由包括缩减网络组件(例如图2 的缩减单元219以及点对点连接231和233)的缩减网络执行。在一些实 施例中,图7的过程作为图3-图6的过程的一部分来执行。例如,在一些 实施例中,步骤701、703和/或705在图6的601处执行,步骤707和/或 709在图6的603处执行,和/或步骤711、713和/或715在图6的605和/ 或607处执行。
在701,准备逐深度卷积权重。例如,准备与卷积数据矩阵的通道相 关联的逐深度卷积权重矩阵。在一些实施例中,逐深度卷积权重矩阵从二 维权重矩阵转换为用于点积引擎的线性化权重输入向量。准备好的逐深度 卷积权重被提供给点积引擎。在一些实施例中,点积引擎的每个向量单元 从数据矩阵的相同通道接收对应于不同矩阵切片的输入向量但接收相同 逐深度卷积权重矩阵。在一些实施例中,逐深度卷积权重由点积引擎的权重输入单元例如图8的权重输入单元805准备。
在703,准备数据矩阵的通道的卷积数据。例如,来自卷积数据矩阵 的分配通道的数据元素被准备作为点积引擎的输入。卷积数据是数据矩阵 的二维矩阵切片,并且对应于在701准备的逐深度卷积权重矩阵。在一些 实施例中,卷积数据被准备为用于点积引擎的线性化数据输入向量。准备 好的卷积数据被提供给点积引擎。在一些实施例中,点积引擎的每个向量 单元接收对应于数据矩阵的不同部分(例如,来自数据矩阵的相同通道的 不同矩阵切片)的不同数据输入向量。在一些实施例中,卷积数据由点积 引擎的数据输入单元例如图8的数据输入单元803准备。
在705,为数据矩阵的通道确定逐深度卷积结果。例如,点积引擎单 元使用在701准备的逐深度卷积权重和在703准备的相应卷积数据来执行 逐深度卷积运算。在一些实施例中,点积引擎包括一组计算或向量单元。 每个向量单元可以使用所提供的向量输入来执行逐深度卷积运算的一部 分。逐深度卷积运算的结果是逐深度卷积部分结果元素或部分逐深度卷积 结果。在一些实施例中,对于点积引擎的每个向量单元,第一逐深度卷积 部分结果元素对应于点积引擎的第一向量单元的输出,第二逐深度卷积部 分结果元素对应于第二向量单元的输出,以此类推。在各种实施例中,点 积引擎的输出被传送并用作步骤709的输入。例如,当确定逐深度卷积结 果时,即使正在计算额外的逐深度卷积结果,结果也被传输到逐点卷积单 元,例如逐元素乘法单元。
在一些实施例中,只要存在附加的卷积数据并且要被处理成部分逐深 度卷积结果,步骤703和/或705就继续进行。当卷积数据的每个新部分被 处理时,相应的输出结果被传送到步骤709。在一些实施例中,点积引擎 是图2的点积引擎215和/或图8的点积引擎800。
在707,准备逐点卷积权重。例如,准备与部分逐深度卷积结果相关 联的逐点卷积权重。在一些实施例中,逐点权重是来自一组逐点卷积权重 滤波器的一个或更多个特定通道的数据元素。每个特定通道对应于分配给 相应点积引擎的数据矩阵的特定通道。在一些情况下,每个处理元件可以 在任何给定时间仅处理数据矩阵的单个通道以及来自一组逐点卷积权重 滤波器的相应通道的其相应数据元素。在各种实施例中,逐点权重由逐点 卷积单元例如图2的逐元素乘法单元217准备。在一些实施例中,逐元素 乘法单元的每个乘法单元接收不同的对应逐点权重数据元素。在一些实施 例中,逐点卷积权重滤波器的数量超过逐点卷积单元的大小,并且需要多 次迭代来处理所有对应的权重。例如,在一些实施例中,64宽的逐元素乘 法单元可以并行处理64个不同的权重元素。在存在128个逐点卷积权重 滤波器的情况下,64宽的逐元素乘法单元需要两次迭代来从128个不同的 逐点卷积权重滤波器加载对应于分配通道的128个权重。
在709,确定逐点卷积结果。例如,来自步骤705的部分逐深度卷积 结果连同来自步骤707的相应逐点卷积权重被用作逐点卷积单元的输入。 在一些实施例中,逐点卷积单元是逐元素乘法单元,例如图2的逐元素乘 法单元217。在步骤709,执行逐元素乘法以确定对应于部分逐点卷积结 果的逐元素乘法单元结果。由逐元素乘法单元在步骤709确定的部分逐点 结果被传送到步骤713。例如,在709确定的结果向量被传输到处理元件 的缩减单元,在缩减单元它可以与相应的上游结果累加。
在一些实施例中,从步骤705接收的部分逐深度卷积结果的向量的每 个逐深度卷积部分结果元素可以被广播到逐元素乘法单元的乘法单元。每 个乘法单元对接收到的逐深度卷积部分结果元素以及相应的逐点卷积权 重执行乘法运算。结果是逐元素乘法单元结果的向量,其中每个结果元素 对应于不同的逐点卷积权重滤波器。例如,在存在K个逐点卷积权重滤波 器的情况下,每个逐深度卷积部分结果元素与来自K个滤波器中的每一个滤波器的逐点权重相乘,以计算K个结果。在一些实施例中,滤波器的数 量(K)超过了逐元素乘法单元的大小,并且逐元素乘法单元需要多次迭代来 计算所选通道的所有K个滤波器的结果。例如,64宽的逐元素乘法单元可 以并行计算64个部分逐点结果。在有128个滤波器的情况下,需要两次 迭代来计算所有128个部分逐点结果。
在一些实施例中,首先确定来自步骤709的每个逐深度卷积部分结果 元素的迭代的乘法结果,然后使用每个相同的逐深度卷积部分结果元素循 环回计算另一个迭代。例如,在用第一逐深度卷积部分结果元素执行第二 次迭代之前,为第二逐深度卷积部分结果元素计算部分逐点卷积结果。这 允许在逐元素乘法单元的每个乘法单元加载的逐点卷积权重在具有不同 逐深度卷积部分结果元素的多次迭代中重复使用。例如,在一些实施例中, 第一逐深度卷积部分结果元素可以对应于点积引擎的第一向量单元的在 步骤705确定的输出。第一逐深度卷积部分结果元素与在步骤707从一组 逐点卷积权重滤波器的特定通道准备的逐点卷积权重数据元素相乘。确定 逐元素乘法结果的向量,并输出到步骤713。第二逐深度卷积部分结果元 素可以对应于点积引擎的第二向量单元的在步骤705确定的输出。逐点卷 积权重数据元素被重复使用,并且第二逐深度卷积部分结果元素与逐元素乘法单元中的现有权重相乘。确定对应于第二逐深度卷积部分结果元素的 逐元素乘法结果的向量,并将其输出到步骤713。当逐元素乘法结果的每 个后续向量被确定时,结果被传送到步骤713。该过程继续,直到所有逐 深度卷积部分结果元素和相应的逐点卷积权重被处理。在一些实施例中, 使用替代方法,并且在前进到下一逐深度卷积部分结果元素之前,计算特 定逐深度卷积部分结果元素的所有部分逐点卷积结果。
在一些实施例中,步骤707和/或709继续,只要额外的部分逐深度卷 积结果仍要被处理成部分逐点卷积结果。例如,当在步骤705确定部分逐 深度卷积结果的每个新集合时,利用先前确定的部分逐深度卷积结果来确 定部分逐点卷积结果,然后将其发送到步骤713。在一些实施例中,逐点 卷积单元是图2的逐元素乘法单元217。
在711,准备上游逐元素乘法结果。例如,从上游处理元件接收对应 于不同逐点卷积权重滤波器的一组逐元素乘法结果。在一些实施例中,接 收的结果是来自两个或更多个处理元件的累加结果。在各种实施例中,上 游逐元素乘法结果是在缩减单元处经由点对点连接接收的,例如经由图2 的点对点连接231在缩减单元219接收。接收到的结果可以是使用上游处 理元件的逐元素乘法单元确定的部分逐点卷积结果的向量。在一些实施例 中,接收到的结果是上游缩减单元的结果,该上游缩减单元将来自其相应 处理元件的逐元素乘法单元的结果与上游结果合并。
在713,累加上游和局部逐元素乘法结果。例如,由局部逐点卷积单 元在709计算的局部部分逐点卷积结果与在711准备和接收的上游部分逐 点卷积结果合并。在一些实施例中,通过使用诸如图2的缩减单元219的 缩减单元将两个输入相加在一起,来缩减局部和上游结果。在各种实施例 中,对于每个逐点卷积权重滤波器,缩减单元将不同通道的部分结果相加 在一起。在一些实施例中,并行缩减对应于不同逐点卷积权重滤波器的多 个结果。例如,缩减单元并行地将对应于不同逐点卷积权重滤波器的不同 通道的结果求和。
在715,输出累加的逐元素乘法结果。例如,输出来自713的累加逐 点卷积结果。在需要额外的下游部分逐点卷积结果来完成逐点卷积运算的 情况下,使用点对点连接经由缩减网络将结果从缩减单元传输到下游处理 元件。例如,在一些实施例中,结果从诸如图2的处理元件211的处理元 件经由诸如图2的点对点连接233的点对点连接传输到诸如图2的处理元 件221的下游处理元件。传输的结果对应于不同逐点卷积权重滤波器的部 分逐点卷积结果的运行和(running sum),并将与相应的下游结果相加在 一起。
在一些实施例中,在713累加的结果是最终逐点卷积结果。例如,处 理元件是逐点卷积运算的缩减网络链中的最终处理元件。在一些实施例中, 处理元件是被分配来处理数据矩阵的最后一个通道的元件,并且在711接 收的上游累加结果对应于数据矩阵的所有其他通道的累加结果。在715, 最终逐点卷积结果可以被写入存储器位置或另一个适当的存储位置,而不 是下游处理元件。例如,可以将结果写入共享存储器,以将结果与其他最 终结果合并。在一些实施例中,结果被输出到不同的存储位置,例如暂存 存储器位置或另一个处理组件。在各种实施例中,最终结果对应于使用逐 深度和逐点卷积运算的组合解决的原始卷积问题的卷积结果元素。
在一些实施例中,只要还有额外的部分逐点卷积结果有待计算,步骤 711、713和715就继续。例如,当在709处理部分逐点卷积结果的新组时, 来自先前接收的部分逐点卷积结果的累加结果被累加,然后被输出。在各 种实施例中,由处理元件的不同组件执行的图7的不同步骤并行且以流水 线方式操作。该过程允许以更有效的方式利用处理元件的硬件组件,并且 该技术显著提高了计算卷积问题的性能。
图8是示出使用神经网络解决人工智能问题的点积引擎的实施例的框 图。在所示的示例中,点积引擎800包括数据输入单元803、权重输入单 元805、点积处理器单元807和输出单元809。在一些实施例中,点积引 擎800是硬件集成电路,例如专用集成电路(ASIC),并且包括硬件组件 数据输入单元803、权重输入单元805、点积处理器单元807和输出单元809。与通用处理器相比,点积引擎800使用专用硬件集成电路来设计和 实现,以更有效地执行与执行卷积运算和/或使用神经网络解决人工智能问 题相关的一个或更多个特定计算任务。与使用通用处理器相比,专用硬件 实现了显著的性能提高和资源效率增益。在一些实施例中,点积引擎800 是图2的点积引擎215。
在所示的示例中,点积处理器单元807包括用于计算点积结果的多个 向量计算单元,至少包括向量单元811和821。每个向量单元至少包括向 量乘法单元和向量加法器单元。例如,向量单元811包括向量乘法单元813 和向量加法器单元815,向量单元821包括向量乘法单元823和向量加法 器单元825。在各种实施例中,点积处理器单元807至少包括与由数据输 入单元803生成的输入数据向量中的元素数量相匹配的数量的向量单元。 在一些实施例中,点积处理器单元807被配置为执行多个逐深度卷积运算, 并且点积处理器单元807的每个向量单元被配置为从两个输入向量(一个 由数据输入单元803提供,另一个由权重输入单元805提供)确定点积结 果。结果被输出到输出单元809,输出单元809可用于将点积结果写入存 储器或另一个局部组件,例如逐元素乘法单元。例如,在一些实施例中,每个向量单元,例如向量单元811和821,接收对应于数据矩阵的数据元 素的数据向量和逐深度卷积权重的权重向量的两对输入向量(未示出)。 计算两个输入向量的点积结果,并将其传输到输出单元809。在一些实施 例中,点积处理器单元807包括32个向量单元,并且32个点积结果被确 定并输出到输出单元809。在各种实施例中,点积处理器单元807可以包括另一适当数量的向量单元。在所示的示例中,只示出了点积处理器单元 807的向量单元中的两个。在各种实施例中,图8的箭头表示数据移动通 过点积引擎800的组件的方向。例如,箭头可以对应于多元素宽通信/数据 总线和/或数据线。在一些实施例中,点积引擎800的附加组件未示出。
在一些实施例中,点积处理器单元807被配置成使用其向量单元来执 行逐深度卷积。例如,数据输入单元803可以接收数据矩阵的数据元素的 向量,例如来自数据矩阵的通道的2D矩阵切片。对于每个接收的输入向 量,数据输入单元803可以为点积处理器单元807的向量单元(例如向量 单元811和821之一)准备数据输入向量。权重输入单元805可以准备逐 深度卷积权重矩阵作为点积处理器单元807的每个向量单元的权重输入向 量。在一些实施例中,不同的数据输入向量被准备并发送到每个向量单元 (对应于数据矩阵的不同矩阵切片),但是相同的权重输入向量被准备并 广播到每个向量单元。这允许将相同的权重矩阵应用于数据矩阵的不同部 分。
在一些实施例中,数据输入单元803和/或权重输入单元805包括移位 硬件(未示出)以移位向量操作数的元素。例如,权重输入单元805可以 加载有用于第一次迭代的一个或更多个向量操作数。在第二次迭代期间, 向量操作数可以被适当地(向右或向左)移位一个或更多个位置。新移位 的向量操作数可以用于向量单元计算。一旦向量单元计算完成,可以再次 移位向量操作数,并且新移位的向量操作数可以用于下一次迭代。以这种 方式,在每次迭代期间应用新的向量操作数(通过移位输入向量的内容来 确定),并且可以在权重输入单元寄存器(未示出)中存储或移位在适当 的位置。例如,在一些实施例中,移位逻辑用于展开的矩阵操作数(例如 展开的权重矩阵),以将展开的矩阵操作数与来自第二矩阵操作数(例如 展开的数据矩阵)的适当元素对齐。
在一些实施例中,点积处理器单元807包括多个向量单元,每个向量 单元包括向量乘法单元和向量加法器单元。每个向量乘法单元(例如向量 乘法单元813或823)被配置为使经由数据输入单元803和权重输入单元 805接收的相应元素相乘。在一些实施例中,结果是相乘结果的向量。例 如,对于两个32字节的输入向量,向量乘法单元的结果是32个相乘结果 的向量。由数据输入单元803准备的数据输入向量的第一元素与由权重输 入单元805准备的权重输入向量的第一元素相乘。类似地,数据输入向量 的第二元素与权重输入向量的第二元素相乘。在各种实施例中,来自由数 据输入单元803生成的数据输入向量和由权重输入单元805生成的权重输 入向量的相应元素被并行相乘。在各种实施例中,相乘结果的向量被传递 到向量单元的向量加法器单元。例如,向量乘法单元813将其相乘结果传 递给向量加法器单元815,并且向量乘法单元823将其相乘结果传递给向 量加法器单元825。
在一些实施例中,每个向量加法器单元(例如向量加法器单元815或 825)被配置为计算来自输入向量的元素的和。例如,向量加法器单元815 计算来自由向量乘法单元813计算的相乘结果的向量的每个元素的和。类 似地,向量加法器单元825计算来自由向量乘法单元823计算的相乘结果 的向量的每个元素的和。在一些实施例中,向量加法器单元的结果是用作 相应向量乘法单元的输入的向量的点积。在各种实施例中,每个向量加法 器单元(例如向量加法器单元815或825)被实现为加法器树。例如,加 法器树的顶层可以将成对的元素相加以确定一组部分和,例如将元素0和 1相加以确定第一部分和,以及将元素2和3相加以确定第二部分和,等 等。每个后续层可以对来自前一层的成对的部分和进行求和,直到最后一 层计算出最终结果和(result sum)。在各种实施例中,每个加法器树并行计算部分和,以得到结果和。并行运算显著提高了对数字向量进行求和的 效率。在各种实施例中,多个向量单元可以并行操作以并行计算多个点积, 这显著提高了逐深度卷积运算的吞吐量。
在一些实施例中,点积引擎800的多个实例可以并行操作,以处理卷 积数据矩阵的不同通道的逐深度卷积结果。例如,每个处理元件和对应的 点积引擎可以从数据矩阵的适当通道接收数据元素,并且还接收与接收的 数据矩阵元素相关联的对应的逐深度卷积权重矩阵。
图9是示出使用点积引擎执行二维卷积运算的过程的实施例的流程图。 例如,卷积运算被包括逐深度和逐点卷积的可分离卷积的组合代替。图9 的过程描述了如何以流水线方式求解逐深度卷积,该方式还将部分逐深度 卷积结果馈送到流水线式过程以求解逐点卷积。在一些实施例中,图9的 过程是基于处理元件接收一个或更多个卷积运算指令和诸如数据元素的 对应参数来启动的。可以通过发出一个或更多个二维卷积运算指令来启动 适当的逐深度卷积运算。指令可以指示两个操作数矩阵,例如,通过指定 每个矩阵操作数在存储器、寄存器或另一个适当位置中的位置。在一些实 施例中,指令对应于使用数据(或激活)矩阵和权重矩阵的逐深度卷积。 在一些实施例中,使用诸如图2的点积引擎215和/或图8的点积引擎800 的点积引擎来执行卷积运算。
在901,接收描述二维逐深度卷积运算的指令。例如,指令由例如包 括点积引擎、逐点卷积单元、控制逻辑单元和/或缩减单元等组件的处理器 元件的处理器元件接收。在各种实施例中,除了点积引擎和逐点卷积单元 之外,处理器元件可以包括附加的或更少的组件。在一些实施例中,逐点 卷积单元是逐元素乘法单元。接收的二维卷积运算指令指示处理器元件执 行一个或更多个二维卷积运算。每个卷积运算指定两个矩阵操作数。例如,第一操作数可以是数据矩阵的二维数据矩阵切片,第二操作数可以是逐深 度卷积权重矩阵。在一些实施例中,如果不首先将一个或更多个矩阵操作 数分成更小的矩阵切片,矩阵操作数可能太大而不能加载到点积引擎中。 在一些实施例中,使用多个指令来指定不同的卷积运算。
在903,准备二维数据输入操作数。例如,准备一个二维数据矩阵作 为每个卷积运算的操作数。检索的数据可以是数据输入操作数的某些行和 /或列。在一些实施例中,从存储器或另一位置检索对应于二维数据输入操 作数的数据。在各种实施例中,准备可以包括展开二维数据输入操作数的 部分。例如,数据输入矩阵的指定部分可以线性化为向量。在一些实施例 中,仅矩阵的一部分或矩阵切片被线性化,例如,仅行的子集。在展开并 线性化矩阵的所选部分时,可以通过填充元素(例如零元素)来分隔行, 以至少部分地将所选矩阵元素与来自权重输入操作数的相应元素对齐。在 各种实施例中,每个准备好的数据输入操作数被加载到点积引擎的向量单 元中。根据输入操作数,相应矩阵的附加部分被展开、线性化并加载到点 积引擎中。例如,对应于二维数据输入操作数的不同(且可能重叠)部分的向量被展开、线性化并加载到点积引擎的不同向量单元中。在一些实施 例中,使用诸如图8的数据输入单元803的数据输入单元来加载准备好的 数据输入操作数。
在905,准备二维权重输入操作数。例如,准备二维权重矩阵作为每 个卷积运算的第二操作数。在一些实施例中,从存储器或另一位置检索对 应于二维权重输入操作数的数据。检索到的权重数据可以是权重输入操作 数的某些行和/或列,并且可以对应于特定逐深度卷积权重矩阵。在各种实 施例中,准备可以包括展开二维权重输入操作数的部分。例如,权重输入 矩阵的指定部分可以线性化为向量。在一些实施例中,仅矩阵的一部分或 矩阵切片被线性化,例如,仅行的子集。在展开并线性化矩阵的所选部分 时,可以通过填充元素(例如零元素)来分隔行,以至少部分地将所选矩 阵元素与来自数据输入操作数的相应元素对齐。填充元素的数量可以至少 部分地基于点积引擎支持的数据大小和权重输入矩阵的维度而变化。在各 种实施例中,准备好的权重输入操作数被加载到点积引擎的向量单元中。 在一些实施例中,所准备的权重输入操作数被广播并加载到点积引擎的多 个向量单元中。例如,同一权重输入操作数可以被广播到点积引擎的每个 向量单元。在一些实施例中,使用诸如图8的权重输入单元805的权重输 入向量来加载准备好的权重输入操作数。
在907,执行二维逐深度卷积运算。使用分别在903和905准备的数 据输入操作数和权重输入操作数,由点积引擎执行二维卷积运算。卷积运 算可以包括跨不同迭代计算部分和/或中间结果。当计算每个部分逐深度卷 积结果时,结果被传递到逐点卷积单元,例如逐元素乘法单元。例如,在 计算对应于数据矩阵的不同2D矩阵切片的下一个点积结果之前,对应于 数据矩阵的2D矩阵切片和逐深度卷积权重矩阵的点积的点积结果被传递 到逐点卷积单元。在各种实施例中,点积引擎提供输出结果的向量作为输 出向量。例如,每个向量单元与其他向量单元并行地计算相应卷积运算的 结果或部分结果,并且结果作为部分逐深度卷积结果的输出向量输出。在 一些实施例中,输出向量由诸如图8的输出单元809的输出单元接收。在 一些实施例中,完整的二维卷积运算可以包括移位权重输入操作数的元素, 以至少部分地计算权重输入矩阵与数据输入矩阵的不同部分的逐深度卷 积。
图10是示出使用点积引擎执行二维卷积运算的过程的实施例的流程 图。例如,二维卷积运算的结果是通过对矩阵参数的二维切片执行多个向 量运算来计算的。一个或更多个输入参数(例如数据输入矩阵)可能超过 点积引擎的最大操作数大小。结果,输入操作数可以被分割成与点积引擎 的操作数大小兼容的更小的矩阵。兼容大小的切片可以作为操作数传递给 点积引擎。在各种实施例中,可以响应于卷积运算指令(例如在图9的901 处接收的逐深度卷积运算指令)来执行图10的过程。在一些实施例中, 在图9的903、905和/或907处执行图10的过程。在一些实施例中,使用 诸如图2的点积引擎215和/或图8的点积引擎800的点积引擎来执行图 10的过程。
在1001,识别矩阵操作数的下一个二维切片。例如,识别其大小与点 积引擎的操作数大小兼容的一个或更多个矩阵操作数。可以在存储器中识 别切片,并且可以发出读取请求以加载所识别的数据。在一些实施例中, 与权重输入矩阵的大小相比,数据输入矩阵的大小通常非常大。数据输入 矩阵被分割成更小的尺寸以用于处理。在一些实施例中,基于分配给卷积 运算的向量单元的数量,数据输入矩阵被分割成切片。在1001,识别下一 个切片以进行处理。
在1003,展开输入参数并执行向量运算。例如,展开数据输入矩阵的 切片和权重输入矩阵。在各种实施例中,展开将二维矩阵(或矩阵切片) 线性化为向量操作数,该向量操作数被加载到点积引擎的至少一个向量单 元中。展开可能需要一次以上迭代。例如,在一些实施例中,展开的矩阵 操作数经过几次迭代来被展开,使得每次迭代仅展开行的子集。例如,对 于较大的权重矩阵,权重矩阵不能被展开成使其整体适应向量单元。使用 多次迭代,直到整个矩阵展开。在各种实施例中,权重矩阵可以展开成向 量操作数,并广播给点积引擎的多于一个的向量单元。在一些实施例中, 每次迭代还可以包括移位展开的权重矩阵,以将权重矩阵的元素应用于展 开的数据矩阵的不同列。执行的向量运算可以包括向量乘法和向量加法。 例如,点积引擎的每个向量单元可以对向量数据和权重参数执行点积运算, 以计算逐深度卷积结果的至少一部分。
在1005,输出向量单元结果。例如,每个向量单元向输出向量的元素 输出向量单元结果。输出向量可以存储在例如图8的输出单元809的输出 单元中。当计算结果时,向量单元结果可以由输出单元以流水线方式传输 到逐点卷积单元。在一些实施例中,逐深度卷积结果可以在多次迭代中确 定,并且逐深度卷积部分结果元素在每次迭代中被输出到逐点卷积单元。 在一些实施例中,每个向量单元结果是部分逐深度卷积结果和逐深度卷积部分结果元素。
在1007,确定额外的二维切片是否需要处理。如果还有额外的二维切 片待被处理,则处理循环回到1001以处理下一个切片。如果没有额外的 二维切片需要处理,则处理结束。
图11是示出使用点积引擎和向量单元运算来执行二维逐深度卷积运 算的过程的实施例的流程图。例如,使用图11的过程,输入矩阵被展开、 线性化,并作为输入向量被馈送到点积引擎的向量单元。执行向量单元运 算以计算二维卷积运算的至少部分结果。在各种实施例中,数据输入矩阵 和权重输入矩阵被转换成输入向量。例如,可以从数据输入矩阵中识别数 据切片,并将其转换成一个或更多个数据输入向量。类似地,逐深度卷积 权重矩阵被识别并转换成权重输入向量。在一些实施例中,在图10的1003 和/或1005处执行图11的过程。在一些实施例中,使用诸如图2的点积引 擎215和/或图8的点积引擎800的点积引擎来执行图11的过程。在各种 实施例中,当计算部分逐深度卷积结果时,可以将结果输出到单独的组件, 例如逐点卷积单元,以执行流水线卷积运算。
在1101,识别数据输入向量。例如,从数据输入矩阵的切片中识别一 个或更多个数据输入向量。在一些实施例中,为点积引擎的每个向量单元 识别并准备数据输入向量。数据输入向量可以包括重叠元素,并且对应于 用于执行矩阵运算(例如二维逐深度卷积运算)的选定元素。
在1103,准备数据输入向量并将其加载到向量单元。例如,识别对应 于数据矩阵子集的元素。在一些实施例中,数据矩阵可以是较大数据矩阵 的二维矩阵切片。在各种实施例中,所识别的元素是数据矩阵的子集,并 且基于相应的权重矩阵,特别是权重矩阵的维度和将要展开的行数来选择。 例如,在一些实施例中,整个权重矩阵可以被展开并线性化以适应向量单 元操作数。然而,随着权重矩阵的维数相对于向量单元所支持的操作数的大小有所增加,权重矩阵可能太大而不能展开成单个输入向量,取而代之 的是权重矩阵和相应的数据矩阵在多次迭代中被展开。
在各种实施例中,权重矩阵或者在一次迭代中完全展开,或者可以在 多次迭代中部分展开。矩阵是完全展开还是部分展开可以取决于矩阵参数 的维数,特别是权重矩阵的维数,与点积引擎支持的输入向量的大小的比 较。例如,在具有3x3权重矩阵并支持32元素输入向量的场景中,权重 矩阵的所有九个元素(对应于三行)可以展开到单个32元素权重输入向 量中。作为准备相应数据输入向量的一部分,从对应于数据矩阵的三行的 列中选择元素。从三行中选择的元素被展开成一维向量。所使用的列数可 以基于数据输入向量的大小。在具有32元素数据输入向量的示例场景中, 识别三行,并且为每行选择10个元素(对应于10列)。总共从三行十列 中选择30个元素。数据输入向量中的用于两个元素的剩余两个位置不足 以适应所识别的三行中的整个列,而是被填充,例如,用两个零值元素填 充。以这种方式,数据矩阵的3x10部分可以被展开并线性化成数据输入 向量,并用两个零值元素填充。一旦准备好,数据输入向量被加载到点积 引擎的适当向量单元中。在各种实施例中,点积引擎的每个向量单元加载 有准备好的数据输入向量。例如,可以通过选择从不同行开始的元素来加 载点积引擎的每个向量单元。
在一些实施例中,通过将数据输入向量的大小除以被展开的行数来确 定准备数据输入向量所选择的初始列数。例如,在展开两行、三行或四行 的情况下,32元素数据输入向量可以分别加载十六列、十列或八列的元素。 数据输入向量中任何未使用的元素都可以用作为填充的零值元素来填充。 一旦确定了列的数量,每次迭代可以使用相同数量的列。例如,可以通过 四次迭代将7x7矩阵加载到32元素数据输入向量中。对于前三次迭代, 每次迭代展开两行(即,第1-2行、第3-4行和第5-6行),并且第四次迭 代展开最后一行(即第7行)。每次迭代可以从相应的选定行的不同的列 中选择16个元素。最后一次迭代有额外的填充,因为只有一行被展开。 在各种实施例中,零值元素被用作填充元素。值为零的填充元素允许向量 单元执行乘法和加法向量运算,而不会影响结果向量和或点积结果。
在各种实施例中,一旦使用适当的格式被适当地准备好,数据输入向 量被加载到点积引擎的相应向量单元中。在一些实施例中,数据输入向量 被准备并加载到点积引擎的每个向量单元中。例如,为每个向量单元准备 的数据输入向量可以对应于数据输入矩阵的子矩阵,其中每个子矩阵从数 据输入矩阵的不同行开始。例如,在权重矩阵是完全展开的3x3矩阵的情 况下,第一向量单元可以对应于具有来自第1-3行的元素的子矩阵,第二 向量单元可以对应于具有来自第2-4行的元素的子矩阵,第三向量单元可 以对应于具有来自第3-5行的元素的子矩阵,等等。在一个实施例中,利 用32个向量单元,第32个向量单元可以对应于具有来自第32-34行的元 素的子矩阵。
在1105,识别权重输入行。例如,来自权重输入矩阵的一行或更多行 被识别用于执行向量单元运算。在一些实施例中,权重输入矩阵被完全展 开,并且权重输入矩阵的每行被识别用于展开。在各种实施例中,权重输 入矩阵对于完全展开来说可能太大,并且仅被部分展开。只有被选择用于 展开的行被识别用于在1107进一步处理。例如,3x3权重矩阵(有9个元 素)可以完全展开到一个32元素权重输入向量中,这样就可以利用权重 矩阵的每一行。作为另一个示例,7x7权重矩阵(有49个元素)不能完全 展开到32元素权重输入向量中。对于当前迭代,仅识别展开的行。在各 种实施例中,后续的迭代被用来识别剩余的行。
在1107,准备权重输入掩码并将其广播给向量单元。例如,对应于在 1105识别的权重输入行的元素被准备到权重输入掩码中。权重输入掩码被 线性化为用于点积引擎的向量单元的一维输入向量。在各种实施例中,用 填充来对线性化的权重元素进行格式化,以将每个权重输入行的开始与在 1103准备的相关数据输入行对齐。例如,使用32元素向量和3x3权重矩 阵(其中在1105识别了所有行)选择权重矩阵的所有九个元素。使用额外 的23个填充元素将权重矩阵的九个元素格式化为权重输入掩码。在一些 实施例中,30个元素用于所选3x3矩阵的三行。每行包括一行中的三个元 素,后面跟着七个填充元素。用附加填充元素来填充未用于所选3x3矩阵 的行的数据输入向量的剩余元素(在该示例中为两个元素)。在各种实施 例中,零值元素被用作填充元素。值为零的填充元素允许向量单元执行乘法和加法向量运算,而不会影响结果向量和。
在各种实施例中,格式化的权重输入掩码是向点积引擎的多个向量单 元广播的输入向量。例如,权重输入向量用于存储线性化的一维向量格式 的准备好的权重输入掩码。权重输入掩码然后作为输入向量操作数被广播 给每个适当的向量单元。例如,单个权重输入掩码可以被准备并由点积引 擎的所有向量单元使用。在一些实施例中,行填充元素被用来允许权重输 入掩码被移位,以将权重矩阵的元素与数据输入向量中引用的数据矩阵的 不同列重新对齐。
在1109,执行向量单元运算。利用从数据输入向量加载的输入向量和 广播的权重输入掩码,点积引擎的相应向量单元执行向量单元运算。在一 些实施例中,向量单元运算包括向量乘法和加法运算。例如,数据输入向 量中的每个元素乘以权重输入掩码中的其相应元素。结果是相乘结果的向 量。在一些实施例中,向量相乘运算由向量单元的向量乘法单元执行。使 用向量相乘结果,通过将相乘结果向量中的每个元素相加来计算向量和结果(vector sum result)。在一些实施例中,使用向量单元的向量加法器单元 来确定和。例如,使用加法器树的向量加法器单元可以计算向量元素的和。 在一些实施例中,矩阵处理器单元包括累加器,用于将向量加法器结果与 先前的向量加法器结果相加。例如,可以使用累加器来累加每次迭代的中 间结果或部分结果,以确定运行的累加和。累加和允许一次迭代(或运行 (pass))的向量和结果被添加到下一次迭代(或运行)的结果中。在各种 实施例中,为权重输入掩码(和/或数据输入向量)准备的零填充元素导致 零相乘结果,并且对向量加法结果没有影响。在一些实施例中,点积引擎 的每个向量单元使用其相应的加载的数据输入向量和广播的权重输入掩 码来执行点积运算。点积结果可以与来自先前迭代(或运行)的结果进行 累加和/或被存储以添加到未来迭代的结果中。在各种实施例中,点积结果 是逐深度卷积部分结果元素。
在1111,输出向量结果。例如,通过在1109执行向量单元运算确定 的向量结果从点积引擎输出。在一些实施例中,向量结果被输出到输出向 量结果,其用于将输出写入存储器、处理元件的另一组件或另一适当位置。 在一些实施例中,结果被输出并用作后续运算的参数。例如,逐深度卷积 部分结果元素的向量可以输出到逐点卷积单元,例如逐元素乘法单元,用 于执行逐点卷积运算的至少一部分。
图12是示出使用点积引擎和向量单元运算来执行二维逐深度卷积运 算的过程的实施例的流程图。例如,使用数据输入矩阵和数据权重矩阵, 执行矩阵乘法和加法运算,以计算二维卷积运算的至少部分结果。输入矩 阵被展开、线性化,并作为输入向量被馈送到点积引擎的向量单元。不适 合输入向量大小的权重输入矩阵在不同的迭代中被部分展开。为了进一步 增加矩阵计算的吞吐量和效率,通过移位展开的输入权重掩码以将权重掩 码的元素与加载的数据输入向量的不同元素(和相应列)重新对齐来执行 额外的运行。通过重新使用准备好的数据输入向量以及重新对齐的权重掩 码,对与数据传输相关的性能的影响,尤其是从数据输入矩阵向点积引擎 加载元素的影响,被显著降低。例如,对于输入权重掩码的每次迭代,通 过仅修改输入权重掩码同时保持加载的数据输入向量不变,在每个数据输 入向量上执行多遍运行。在一些实施例中,使用图11的过程来执行图12 的过程。例如,在一些实施例中,可以在图11的1109处执行步骤1205、 1207和/或1209。在一些实施例中,使用诸如图2的点积引擎215和/或图 8的点积引擎800的点积引擎来执行图12的过程。在各种实施例中,当计 算部分逐深度卷积结果时,可以将结果输出到单独的组件,例如逐点卷积 单元,以执行流水线卷积运算。
在1201,准备数据输入向量并将其加载到点积引擎中。在一些实施例 中,如参考图11的步骤1101和1103所述,准备并加载数据输入向量。例 如,数据输入向量被加载为与权重输入向量的相应行兼容。在一些实施例 中,数据输入向量包括填充元素(例如零值元素)以防止加载元素的部分 列。作为示例,使用3x3权重输入矩阵和32元素数据输入向量,完全展 开的权重输入矩阵引用三行。相应地,三行数据元素被加载到数据输入向 量中。三行的列(three-row columns)的数量取决于数据输入向量中可用 的元素数量。在该示例中,为总共30个元素加载了10个三行的列。数据 输入向量的其余两个元素未使用,可以用零值元素清零。可以从数据矩阵 的下一个相应行开始加载下一个数据输入向量。以这种方式,来自数据矩 阵的不同(但可能重叠)切片的数据输入向量被加载到点积引擎的不同向量单元中。作为另一个示例,使用7x7权重输入矩阵和32元素数据输入 向量,部分展开的权重输入矩阵在前三次迭代的每一次中引用两行,并在 第四次迭代中引用单个最后一行。相应地,对于使用两个权重行的迭代, 两行数据元素被加载到数据输入向量中,并且对于使用最后(和第七)权 重行的最终迭代,一行数据元素被加载到数据输入向量中。两行的列的数 量取决于数据输入向量中可用的元素数量。在该示例中,前三次迭代加载 了总共32个元素的16个两行的列,不需要填充元素。对于第四次迭代, 来自单个行的十六个元素被加载,并且数据输入向量的十六个剩余元素未 被使用,并且可以用零值元素清零。类似于3x3权重矩阵示例,在每次迭 代中,可以从数据矩阵的下一个相应行开始加载下一个数据输入向量。在 7x7权重输入矩阵示例中,来自数据矩阵不同(但可能重叠)切片的数据 输入向量被加载到点积引擎的不同向量单元中,一次加载两行(用于前三 次迭代)或一行(用于最后一次和第四次迭代)。
在1203,准备权重输入掩码并将其广播给点积引擎的一个或更多个向 量单元。在一些实施例中,如参照图11的步骤1105和1107所述,准备并 广播权重输入掩码。例如,对于完全展开的权重矩阵,权重矩阵的每一行 都被展开并线性化为输入向量。为了提高矩阵运算的效率,零填充元素被 用于在输入向量内均匀地隔开权重矩阵的行。如上所述,零填充元素允许 权重输入向量充当权重输入掩码。移位权重元素重新对齐权重输入掩码, 以将权重元素与数据矩阵中不同的相应列相关联。在某些情况下,权重掩 码会被填充,以考虑不完整的相应数据列。一旦被加载到权重输入向量中, 权重输入掩码就被广播到点积引擎的一个或更多个适用的向量单元。
在一些实施例中,权重矩阵仅被部分展开。经过多次迭代,权重矩阵 的所有行都被展开。对于特定迭代,所选行被展开并用零值元素填充,以 创建与所选行相关联的部分权重掩码。后续迭代(或并行执行的迭代)用 于展开剩余的权重行。例如,7x7权重矩阵(包含49个元素)不能完全展 开到32元素权重输入向量中。对于当前迭代,仅识别展开的行。如果最 多展开两行,则需要四次迭代来完全展开7x7权重矩阵。在一些实施例中, 选择不同数量的行用于部分展开。例如,基于权重矩阵维度和向量单元的 向量参数大小,可以适当地选择两行、三行或更多行来用于展开。
在1205,执行向量单元乘法和加法运算。在一些实施例中,参照图11 的步骤1109描述向量单元运算。利用从数据输入向量加载的输入向量和广 播的权重输入掩码,点积引擎的相应向量单元执行向量单元运算,包括向 量乘法和加法运算。每个向量单元可以使用数据输入向量和权重输入掩码 来执行向量乘法。未经掩蔽的元素导致权重矩阵元素与数据矩阵元素相乘, 而经掩蔽的元素导致零值结果。在各种实施例中,使用向量加法器将相乘 结果相加,以计算结果和。例如,32元素向量单元接收两个32元素输入 向量(数据输入向量和权重输入掩码),并执行向量乘法以计算32个相乘 结果。执行向量加法运算,将所有32个相乘结果相加,以计算单个结果 和。在一些实施例中,结果和是中间结果,并且被添加到先前计算的结果 和。例如,累加器可以用于存储结果和,并且在连续迭代中,中间结果被添加到当前计算的结果和中,以在多次迭代中保持运行和。
在一些实施例中,每个向量单元并行执行其向量运算。例如,具有32 个向量单元的点积引擎可以计算对应于32个结果和的32个结果。在各种 实施例中,点积引擎的每个向量单元使用其相应的加载的数据输入向量和 广播的权重输入掩码来执行点积运算。点积结果可以与来自先前迭代(或 运行)的结果进行累加和/或被存储以添加到未来迭代的结果中。
在各种实施例中,随着逐深度卷积部分结果元素的计算,结果元素被 输出到下游组件,例如逐点卷积单元,用于执行逐点卷积运算。例如,对 应于逐深度卷积部分结果元素的向量的向量结果是通过由不同的向量单 元执行向量乘法和加法运算来确定的。向量结果从点积引擎输出,供下游 组件处理,同时点积引擎开始计算附加结果。在一些实施例中,在每次通 过步骤1205期间,确定一列部分逐深度卷积结果,并输出相应的结果。
在1207,确定数据输入矩阵的附加列是否待被处理。如果数据输入矩 阵的附加列待被处理,则处理进行到1209。如果没有数据输入矩阵的附加 列待被处理,则处理进行到1211。
在1209,对应于每个权重输入向量的权重被移位。例如,向量输入掩 码的元素被移位以将权重元素与来自数据输入向量的不同数据元素重新 对齐。例如,在1201加载的现有数据输入向量与新的权重输入向量一起 在附加运行中使用。通过移位权重元素,例如,通过将每个权重元素向右 移位一个元素,来准备新的权重输入向量。该移位将权重元素与对应于下 一列的数据元素重新对齐。例如,对应于3x3权重矩阵的权重输入掩码可 以与对应于数据矩阵的3x10切片的数据输入向量一起被加载到向量单元 中。移位权重元素有效地滑动权重输入掩码,以将权重矩阵与3x10切片 的不同三列相关联。利用3x3的权重矩阵,在到达数据切片的末尾之前, 可以执行八遍运行(对应于七次移位)。作为另一个示例,使用具有两个 展开的权重行的7x7权重矩阵,每个数据输入向量引用16列。在到达数 据切片的末尾之前,可以执行十遍运行(对应于九次移位)。通过在权重 输入向量中用填充元素隔开权重元素,填充元素的数量决定了以加载的数 据输入向量可以执行的最大移位(和运行)次数。
在各种实施例中,一旦权重输入向量被移位,新准备的权重输入向量 被广播到每个适用的向量单元。处理进行到1205,其中使用重新对齐的权 重输入掩码和先前加载的数据输入向量来执行矩阵运算。
在1211,确定是否仍有待处理的权重输入矩阵的附加行。如果权重输 入矩阵的附加行待被处理,则处理进行到1213。例如,部分展开的矩阵可 能具有需要被展开并处理的附加行。相比之下,完全展开的权重矩阵不会 有额外的权重行进行处理。如果权重输入矩阵没有额外的行待被处理,则 处理进行到1215。
在1213,使数据输入和权重行前进。例如,对于部分展开的权重(和 相应的数据)矩阵,使所识别的行前进以选择下一组行进行展开。权重矩 阵和数据矩阵一起前进,以便将正确的权重和数据元素关联在一起。以7x7 权重矩阵为例,每次迭代最多展开两行,第一次迭代选择第1行和第2行。 在1211,额外的权重输入行仍待被处理,因此在步骤1213,所选行前进以 选择第3行和第4行。后续迭代选择第5行和第6行。最后一次迭代选择 第7行。处理然后进行到1201。
在1215,输出结果。在一些实施例中,如参照图11的步骤1111所述, 输出结果。例如,通过在1205执行向量乘法和加法运算确定的向量结果 从点积引擎输出。在各种实施例中,向量结果作为输出向量结果被输出, 例如输出到输出单元(例如图8的输出单元809)。输出向量单元可用于将 输出向量结果写入存储器、处理元件的另一组件或另一适当位置。在一些 实施例中,结果被输出并用作后续卷积运算的参数。例如,逐深度卷积部 分结果元素的向量可以输出到逐点卷积单元,例如逐元素乘法单元,用于 执行逐点卷积运算的至少一部分。
图13A和图13B是示出用于执行逐深度卷积的示例矩阵操作数的图示。 在图13A中,权重矩阵1301表示权重元素的示例3x3矩阵。权重矩阵的 其他尺寸也可能是合适的,例如1x1、5x5、7x7、9x9等。在所示的示例 中,与每个权重元素相关联的下标使用行和列表示法。对于权重矩阵1301 的第一行,W1,1是位于第1列的权重元素,W1,2是位于第2列的权重元素, 以及W1,3是位于第3列的权重元素。在图13B中,数据矩阵1303表示数 据元素的示例数据矩阵。数据矩阵1303的维度大于权重矩阵1301。在图 13B的示例中,仅示出了数据矩阵1303的第1-4行和第32-34行。数据矩 阵1303的宽度可以延伸超过11列。类似地,数据矩阵1303的高度可以延 伸超过34行(未示出)。在图13B中,数据矩阵1303被示出为具有34行,以使其与3x3权重矩阵1301和具有32个向量单元的点积引擎兼容。在一 些实施例中,权重矩阵1301和数据矩阵1303是用于使用本文描述的技术 执行卷积运算的输入矩阵。在一些实施例中,使用图2的点积引擎215和 /或图8的点积引擎800和/或图9-图12的过程,来对权重矩阵1301和数 据矩阵1303执行卷积运算,例如逐深度卷积。例如,在图9的901处接 收的卷积运算指令可以指定诸如权重矩阵1301的权重矩阵和诸如数据矩 阵1303的数据矩阵。在一些实施例中,权重矩阵1301是逐深度卷积权重 矩阵,数据矩阵1303是对应于权重矩阵1301的3D卷积数据矩阵的单个 通道。
图14A和图14B是示出用于执行逐深度卷积的展开的数据矩阵的示例 的图示。图14A和图14B包括指示数据元素在32元素数据输入向量中的 位置的索引标签1401和1402。图14A和图14B包括七个示例数据输入向 量1403/1404、1405/1406、1407/1408、1409/1410、1411/1412、1413/1414 和1415/1416。图14A中示出了每个数据输入向量的前半部分,并且图14B 中示出了每个输入向量的相应的后半部分。由于向量的大小较大,为了便 于说明,数据输入向量被示为向量对,并在图14A和图14B中分开。例如, 七个32元素数据输入向量包括16元素向量对1403/1404、1405/1406、 1407/1408、1409/1410、1411/1412、1413/1414和1415/1416。
在一些实施例中,图14A和图14B所示的数据输入向量是从图13B 的数据矩阵1303展开的数据输入向量。例如,数据输入向量1403/1404对 应于来自图13B的数据矩阵1303的前三行的元素,展开成一维向量,并 且包括来自数据矩阵1303的第1-3行和第1-10列的数据元素。类似地, 参考来自图13B的数据矩阵1303的第1-10列的元素,数据输入向量 1405/1406对应于来自第2-4行的元素,数据输入向量1407/1408对应于来 自第3-5行的元素,数据输入向量1409/1410对应于来自第4-6行的元素, 数据输入向量1411/1412对应于来自第5-7行的元素,数据输入向量 1413/1414对应于来自第6-8行的元素,以及数据输入向量1415/1416对应 于来自第32-34行的元素。与图13B的数据矩阵1303的不同3x10切片相 关联的数据元素被加载到每个数据输入向量1403/1404、1405/1406、 1407/1408、1409/1410、1411/1412、1413/1414和1415/1416中。每个数据 输入向量1403/1404、1405/1406、1407/1408、1409/1410、1411/1412、 1413/1414和1415/1416的位置30和31处的元素(第31个和第32个元素) 是零值元素。在各种实施例中,位置30和31处的元素是填充元素。
在一些实施例中,图14A和图14B的每个数据输入向量被加载到点积 引擎的独立向量单元中。对于具有32个向量单元的点积引擎,加载32个 数据输入向量,并且可以从不同的行开始准备每个数据输入向量。在所示 的示例中,数据输入向量1403/1404、1405/1406、1407/1408、1409/1410、 1411/1412和1413/1414被加载到前六个向量单元中,并且数据输入向量 1415/1416被加载到第32个向量单元中。尽管未示出,向量单元7-31加载 有相应的数据输入向量。在一些实施例中,数据输入向量1403/1404、 1405/1406、1407/1408、1409/1410、1411/1412、1413/1414和1415/1416 由诸如图8的数据输入单元803的数据输入单元生成并加载到诸如图2的 点积引擎215和/或图8的点积引擎800的点积引擎中。在一些实施例中, 在图9的903、图10的1001和/或1003、图11的1101和/或1103和/或图 12的1201处执行创建数据输入向量1403/1404、1405/1406、1407/1408、 1409/1410、1411/1412、1413/1414和1415/1416的展开过程。在一些实施 例中,图14A和图14B的数据输入向量表示为展开过程的一次迭代准备的 数据输入向量的部分集合,并且被格式化为与完全展开的3x3权重矩阵(诸 如图13A的权重矩阵1301)对齐。
图15A和图15B是示出用于执行逐深度卷积的展开的权重矩阵的示例 的图示。图15A和图15B包括指示权重元素在32元素权重输入向量中的 位置的索引标签1501和1502。图15A和图15B包括八个示例权重输入向 量1503/1504、1505/1506、1507/1508、1509/1510、1511/1512、1513/1514、1515/1516和1517/1518。图15A中示出了每个权重输入向量的前半部分, 并且图15B中示出了每个输入向量的相应后半部分。由于向量的大小较大, 为了便于说明,权重输入向量被示为向量对,并在图15A和图15B中分开。 例如,八个32元素权重输入向量包括16元素向量对1503/1504、1505/1506、 1507/1508、1509/1510、1511/1512、1513/1514、1515/1516和1517/1518。 权重输入向量代表八个不同的权重输入向量,这些向量在八遍运行中被广 播到点积引擎的向量单元。图14A和图14B中示出了相应的数据输入向量 的示例,并且在权重输入向量改变时的整个八遍运行中可以保持不变。
在一些实施例中,图15A和图15B中所示的权重输入向量是从图13A 的权重矩阵1301展开的权重输入向量。例如,权重输入向量1503/1504、 1505/1506、1507/1508、1509/1510、1511/1512、1513/1514、1515/1516和 1517/1518中的每一个对应于图13A的权重矩阵1301中展开成一维向量并 在一维向量上隔开的元素。在不同位置处准备权重元素和行,以将权重输 入向量与相应数据输入向量的不同列对齐。零值填充元素被包括在行之间 以及在位置30和31处的向量的末尾。例如,权重输入向量1503/1504在 元素位置0-2处包括图13A的权重矩阵1301的第1行,在元素位置10-12 处包括图13A的权重矩阵1301的第2行,以及在元素位置20-22处包括 图13A的权重矩阵1301的第3行。可以通过将权重输入向量1503/1504 的元素向右移位一个位置来准备权重输入向量1505/1506。类似地,分别 通过移位权重输入向量1505/1506、1507/1508、1509/1510、1511/1512、 1513/1514和1515/1516的元素来创建权重输入向量1507/1508、1509/1510、 1511/1512、1513/1514、1515/1516和1517/1518。在一些实施例中,当权 重输入向量向右移位时,零值填充元素被引入到权重输入向量的前面。
在一些实施例中,图15A和图15B的每个权重输入向量在对相应数据 输入向量的不同遍运行处被广播到点积引擎的适当向量单元中。对于具有 32个向量单元的点积引擎,32个权重输入向量在每遍运行时加载有相同 的权重输入向量。例如,对于第一遍运行,权重输入向量1503/1504被广 播到每个向量单元,对于第二遍运行,权重输入向量1505/1506被广播到 每个向量单元,对于第三遍运行,权重输入向量1507/1508被广播到每个 向量单元,以此类推,直到对于第八遍运行,权重输入向量1517/1518被 广播到每个向量单元。
在一些实施例中,权重输入向量1503/1504、1505/1506、1507/1508、 1509/1510、1511/1512、1513/1514、1515/1516和1517/1518由权重输入单 元(如图8的权重输入单元805)生成和/或加载到例如图2的点积引擎215 和/或图8的点积引擎800的点积引擎中。在一些实施例中,在图9的905、 图10的1001和/或1003、图11的1105和/或1107和/或图12的1203、1207 和/或1209处执行创建权重输入向量1503/1504、1505/1506、1507/1508、 1509/1510、1511/1512、1513/1514、1515/1516和1517/1518的展开过程。 在一些实施例中,图15A和图15B的不同权重输入向量表示为包括八遍运 行的展开过程的一次迭代准备的不同权重输入掩码。每个权重输入掩码是 完全展开的3x3权重矩阵(例如图13A的权重矩阵1301),并且被格式化 为与例如图13B的数据矩阵1303的数据矩阵的不同3x3切片对齐。
图16A和图16B是示出用于执行逐深度卷积的向量计算的示例的图示。 图16A和图16B包括索引标签1601和1602,它们分别指示权重和数据元 素在32元素权重输入向量1603/1604和数据输入向量1605/1606中的位置。 在一些实施例中,权重输入向量1603/1604是图15A和图15B的权重输入 向量1503/1504,数据输入向量1605/1606是图14A和图14B的数据输入 向量1403/1404。在一些实施例中,权重输入向量1603/1604和数据输入向量1605/1606是加载到向量单元中用于执行向量运算的两个输入向量的示 例。在各种实施例中,点积引擎的每个向量单元加载有相应的一对输入向 量。
在一些实施例中,单元(cell)1611示出了由点积引擎的向量单元对 权重输入向量1603/1604和数据输入向量1605/1606的输入向量执行的等 效向量计算。单元1611中所示的向量计算结果是通过将权重输入向量 1603/1604的每个元素与数据输入向量1605/1606的相应元素相乘而确定的 结果。来自权重输入向量1603/1604的32个元素与数据输入向量1605/1606 的32个元素相乘,以确定32个相乘结果。在所示的示例中,单元1611 仅包括9个乘法项,而不是32个。九个乘法项对应于来自权重输入向量1603/1604的九个权重元素以及来自数据输入向量1605/1606的它们的相应 数据元素。权重输入向量1603/1604的零值元素起到权重掩码的作用,使 得乘法项的数量从可能的32个减少到9个。在一些实施例中,使用诸如 图8的向量乘法单元813或823的向量乘法单元来执行乘法。在一些实施 例中,相乘结果作为向量被馈送到向量加法器单元,以计算相乘结果的和。 可以使用向量加法器单元(例如图8的向量加法器单元815或825)来执 行向量求和。在所示的示例中,执行的向量运算的结果是单个结果和。在 一些实施例中,结果和是部分或中间结果和,并且可以存储在累加器中。 在一些实施例中,结果和是使用权重输入向量1603/1604和数据输入向量 1605/1606计算的点积。结果和可以作为向量结果的一个元素被输出,并 被写到输出单元,例如图8的输出单元809。在一些实施例中,使用图2 的点积引擎215和/或图8的点积引擎800和/或图9-12的过程来执行单元 1611中所示的向量计算结果的等效物。在一些实施例中,在图9的907、 图10的1003、图11的1109和/或图12的1205处执行向量计算。
尽管为了清楚理解的目的已经详细描述了前述实施例,但是本发明不 限于所提供的细节。有许多实现本发明的替代方式。所公开的实施例是说 明性的,而不是限制性的。

Claims (20)

1.一种处理器系统,包括:
多个点积处理器单元,其被配置为执行具有多个通道的数据矩阵与多个逐深度卷积权重矩阵的逐深度卷积,所述多个逐深度卷积权重矩阵包括用于所述多个通道中的每个通道的单独的逐深度卷积权重矩阵,其中所述点积处理器单元中的每一个被配置为执行用于所述多个通道中包括的一个或更多个通道的逐深度卷积的至少一部分;和
多个逐元素乘法单元,其被配置为至少部分地执行逐点卷积的乘法运算,其中所述逐元素乘法单元中的每一个被配置为向从所述点积处理器单元中的一个或更多个接收的每个逐深度卷积部分结果元素应用来自多个逐点卷积权重滤波器的每个逐点卷积权重滤波器的对应数据元素,以确定逐元素乘法单元结果;
其中所述处理器系统被配置成将来自所述多个逐元素乘法单元的逐元素乘法单元结果的数据元素的不同组相加在一起,以至少部分地计算所述逐点卷积的结果的不同数据元素。
2.根据权利要求1所述的系统,其中所述多个逐元素乘法单元被配置为在所述逐深度卷积完成之前至少部分地执行所述逐点卷积的乘法运算。
3.根据权利要求1所述的系统,其中所述处理器系统被配置为至少部分并行地将来自所述逐元素乘法单元结果的数据元素的不同组相加在一起。
4.根据权利要求1所述的系统,其中所述点积处理器单元中的每一个包括多个计算单元。
5.根据权利要求4所述的系统,其中所述多个计算单元中的每个计算单元包括向量乘法单元和向量加法器单元。
6.根据权利要求5所述的系统,其中所述向量加法器单元包括加法器树。
7.根据权利要求1所述的系统,其中所述数据矩阵是三维机器学习数据矩阵。
8.根据权利要求1所述的系统,其中所述单独的逐深度卷积权重矩阵和所述多个逐点卷积权重滤波器中的每一个逐点卷积权重滤波器是机器学习权重矩阵。
9.根据权利要求1所述的系统,其中所述单独的逐深度卷积权重矩阵是3x3矩阵。
10.根据权利要求1所述的系统,其中所述单独的逐深度卷积权重矩阵是3x3、5x5、7x7、9x9或11x11矩阵。
11.根据权利要求1所述的系统,其中所述多个逐点卷积权重滤波器中的每一个具有对应于所述数据矩阵的多个通道的计数的通道深度。
12.根据权利要求1所述的系统,还包括:
多个缩减单元;
多个点对点连接,其中所述多个点对点连接的每个点对点连接被配置为向所述多个缩减单元中的第二缩减单元提供所述多个缩减单元中的第一缩减单元的结果;和
通信总线,其将所述多个点积处理器单元连接在一起。
13.根据权利要求12所述的系统,其中所述第一缩减单元包括被配置为执行向量加法运算的加法器。
14.根据权利要求12所述的系统,其中所述多个点积处理器单元中的每一个被配置成经由所述通信总线接收逐深度卷积运算指令。
15.根据权利要求12所述的系统,其中所述多个逐元素乘法单元中的每一个被配置成经由所述通信总线接收逐点卷积运算指令。
16.根据权利要求12所述的系统,其中所述多个缩减单元中的所述第二缩减单元被配置为将所述多个逐元素乘法单元中的逐元素乘法单元的局部结果与所述多个缩减单元中的所述第一缩减单元的缩减结果相加在一起,以确定缩减单元结果。
17.根据权利要求16所述的系统,其中所述第二缩减单元还被配置成经由所述多个点对点连接中的点对点连接向所述多个缩减单元中的第三缩减单元提供所述缩减单元结果。
18.一种方法,包括:
使用第一处理元件的点积引擎确定逐深度卷积部分结果元素的向量,其中所述逐深度卷积部分结果元素的向量对应于单独的逐深度卷积权重矩阵和来自三维数据矩阵的分配通道的矩阵切片;
将所述逐深度卷积部分结果元素的向量提供给所述第一处理元件的逐元素乘法单元;
通过使用所述逐深度卷积部分结果元素的向量的每个元素和来自多个逐点卷积权重滤波器的通道的相应的数据元素来执行逐点卷积的乘法运算,来确定所述每个元素的逐元素相乘结果;
向所述第一处理元件的缩减单元提供所述逐深度卷积部分结果元素的向量的每个元素的所述逐元素相乘结果;
经由第一点对点连接从第二处理元件接收上游结果;
将所述上游结果与相应的逐元素相乘结果相加在一起,以确定缩减单元结果;和
经由第二点对点连接将所述缩减单元结果发送到第三处理元件。
19.根据权利要求18所述的方法,其中所述上游结果至少部分是使用来自所述多个逐点卷积权重滤波器的相应通道的相应数据元素来确定的。
20.一种处理元件系统,包括:
点积处理器单元,其被配置为使用三维数据矩阵的二维矩阵切片与多个逐深度卷积权重矩阵的逐深度卷积权重矩阵来执行逐深度卷积;
逐元素乘法单元,其被配置为通过向从所述点积处理器单元接收的每个逐深度卷积部分结果元素应用来自多个逐点卷积权重滤波器中的每一个的相应数据元素来至少部分地执行逐点卷积的乘法运算,从而确定局部逐元素乘法单元结果;
第一点对点连接,其被配置为从上游处理元件接收上游结果;
缩减单元,其被配置为将所接收的上游结果和所确定的局部逐元素乘法单元结果相加在一起,以确定缩减单元结果;和
第二点对点连接,其被配置为向下游处理元件提供所确定的缩减单元结果。
CN202110429712.5A 2020-04-22 2021-04-21 用分布流水线可分离卷积运算将卷积映射到相连处理元件 Pending CN113536216A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/855,927 US20210334072A1 (en) 2020-04-22 2020-04-22 Mapping convolution to connected processing elements using distributed pipelined separable convolution operations
US16/855,927 2020-04-22

Publications (1)

Publication Number Publication Date
CN113536216A true CN113536216A (zh) 2021-10-22

Family

ID=75252514

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110429712.5A Pending CN113536216A (zh) 2020-04-22 2021-04-21 用分布流水线可分离卷积运算将卷积映射到相连处理元件

Country Status (3)

Country Link
US (1) US20210334072A1 (zh)
EP (1) EP3940605A1 (zh)
CN (1) CN113536216A (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20240004647A1 (en) * 2022-07-01 2024-01-04 Andes Technology Corporation Vector processor with vector and element reduction method

Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104137055A (zh) * 2011-12-29 2014-11-05 英特尔公司 点积处理器、方法、系统和指令
US20190042235A1 (en) * 2017-12-29 2019-02-07 Intel Corporation Systems and methods for computing dot products of nibbles in two tile operands
CN109388777A (zh) * 2017-08-07 2019-02-26 英特尔公司 一种用于经优化的Winograd卷积加速器的系统和方法
US20190179869A1 (en) * 2017-12-12 2019-06-13 Facebook, Inc. Hardware accelerator pre-configured with coefficients for matrix-transform operations
CN109901878A (zh) * 2019-02-25 2019-06-18 北京灵汐科技有限公司 一种类脑计算芯片及计算设备
EP3499428A1 (en) * 2017-12-18 2019-06-19 Nanjing Horizon Robotics Technology Co., Ltd. Method and electronic device for convolution calculation in neutral network
CN110119809A (zh) * 2018-02-05 2019-08-13 联发科技股份有限公司 深度学习处理中乘法和累加运算的非对称量化
WO2019190139A1 (ko) * 2018-03-27 2019-10-03 에스케이텔레콤 주식회사 합성곱 연산을 위한 장치 및 방법
CN110312993A (zh) * 2017-02-23 2019-10-08 Arm有限公司 数据处理装置中的向量逐元素操作
CN110494846A (zh) * 2017-03-20 2019-11-22 英特尔公司 用于矩阵加法、减法和乘法的系统、方法和装置
US20200090030A1 (en) * 2018-09-19 2020-03-19 British Cayman Islands Intelligo Technology Inc. Integrated circuit for convolution calculation in deep neural network and method thereof
CN110989920A (zh) * 2018-10-03 2020-04-10 马克西姆综合产品公司 能量高效的存储器系统和方法
US20200117700A1 (en) * 2018-10-12 2020-04-16 Hewlett Packard Enterprise Development Lp Sparse matrix vector multiplication with a matrix vector multiplication unit

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019143024A1 (ko) * 2018-01-16 2019-07-25 한국과학기술원 라인 단위 연산을 이용한 초해상화 방법 및 장치
CN112106078A (zh) * 2018-05-08 2020-12-18 多伦多大学管理委员会 神经网络处理元件
GB2582352B (en) * 2019-03-20 2021-12-15 Imagination Tech Ltd Methods and systems for implementing a convolution transpose layer of a neural network
CN113811900A (zh) * 2019-05-10 2021-12-17 索尼集团公司 算术运算装置和算术运算系统

Patent Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104137055A (zh) * 2011-12-29 2014-11-05 英特尔公司 点积处理器、方法、系统和指令
CN110312993A (zh) * 2017-02-23 2019-10-08 Arm有限公司 数据处理装置中的向量逐元素操作
CN110494846A (zh) * 2017-03-20 2019-11-22 英特尔公司 用于矩阵加法、减法和乘法的系统、方法和装置
CN109388777A (zh) * 2017-08-07 2019-02-26 英特尔公司 一种用于经优化的Winograd卷积加速器的系统和方法
US20190179869A1 (en) * 2017-12-12 2019-06-13 Facebook, Inc. Hardware accelerator pre-configured with coefficients for matrix-transform operations
EP3499428A1 (en) * 2017-12-18 2019-06-19 Nanjing Horizon Robotics Technology Co., Ltd. Method and electronic device for convolution calculation in neutral network
US20190042235A1 (en) * 2017-12-29 2019-02-07 Intel Corporation Systems and methods for computing dot products of nibbles in two tile operands
CN110119809A (zh) * 2018-02-05 2019-08-13 联发科技股份有限公司 深度学习处理中乘法和累加运算的非对称量化
WO2019190139A1 (ko) * 2018-03-27 2019-10-03 에스케이텔레콤 주식회사 합성곱 연산을 위한 장치 및 방법
US20200090030A1 (en) * 2018-09-19 2020-03-19 British Cayman Islands Intelligo Technology Inc. Integrated circuit for convolution calculation in deep neural network and method thereof
CN110989920A (zh) * 2018-10-03 2020-04-10 马克西姆综合产品公司 能量高效的存储器系统和方法
US20200117700A1 (en) * 2018-10-12 2020-04-16 Hewlett Packard Enterprise Development Lp Sparse matrix vector multiplication with a matrix vector multiplication unit
CN109901878A (zh) * 2019-02-25 2019-06-18 北京灵汐科技有限公司 一种类脑计算芯片及计算设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
周聖元;杜子东;陈云霁: "稀疏神经网络加速器设计", 高技术通讯, vol. 29, no. 03, 15 March 2019 (2019-03-15), pages 222 - 231 *

Also Published As

Publication number Publication date
EP3940605A1 (en) 2022-01-19
US20210334072A1 (en) 2021-10-28

Similar Documents

Publication Publication Date Title
EP3816824A1 (en) High throughput matrix processor with support for concurrently processing multiple matrices
KR102443546B1 (ko) 행렬 곱셈기
US11520853B2 (en) Mapping convolution to a partition channel convolution engine
JP3639323B2 (ja) メモリ分散型並列計算機による連立1次方程式計算処理方法および計算機
EP3937085A1 (en) Mapping convolution to a channel convolution engine
CN107665126A (zh) 用于外积累加操作的处理器和方法
EP3968237A1 (en) Grouped convolution using point-to-point connected channel convolution engines
EP3798927A1 (en) Memory organization for matrix processing
EP3835949A1 (en) Hardware accelerated matrix manipulation operations using processor instructions
CN113536216A (zh) 用分布流水线可分离卷积运算将卷积映射到相连处理元件
CN113626759A (zh) 使用低位宽点积引擎对高位宽数求和
CN113435569A (zh) 使用每通道卷积运算的流水线逐点卷积
CN111522776B (zh) 一种计算架构
EP3783478A1 (en) Mapping convolution to a matrix processor unit
US11379557B2 (en) Device and method for flexibly summing matrix values

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
CB02 Change of applicant information

Address after: California, USA

Applicant after: Yuan platform Co.

Address before: California, USA

Applicant before: Facebook, Inc.

CB02 Change of applicant information