CN113344172A - 将卷积映射到通道卷积引擎 - Google Patents

将卷积映射到通道卷积引擎 Download PDF

Info

Publication number
CN113344172A
CN113344172A CN202110190104.3A CN202110190104A CN113344172A CN 113344172 A CN113344172 A CN 113344172A CN 202110190104 A CN202110190104 A CN 202110190104A CN 113344172 A CN113344172 A CN 113344172A
Authority
CN
China
Prior art keywords
matrix
data
vector
convolution
channel
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
CN202110190104.3A
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 CN113344172A publication Critical patent/CN113344172A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • 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
    • G06N3/065Analogue means
    • 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
    • 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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • 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)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biophysics (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Databases & Information Systems (AREA)
  • Algebra (AREA)
  • Neurology (AREA)
  • Complex Calculations (AREA)

Abstract

本申请涉及将卷积映射到通道卷积引擎。一种处理器系统包括第一组寄存器和第二组寄存器以及硬件通道卷积处理器单元。第一组寄存器被配置为存储卷积数据矩阵的一部分的通道的数据元素。每个寄存器存储来自每个通道的至少一个数据元素。第二组寄存器被配置为存储卷积权重矩阵的数据元素,该卷积权重矩阵包括每个通道的独立卷积权重矩阵。每个寄存器存储来自每个卷积权重矩阵的至少一个数据元素。硬件通道卷积处理器单元被配置为将第一组寄存器中的每个数据元素与第二组寄存器中的对应数据元素相乘,并将每个特定通道的相乘结果相加在一起,以确定对应通道卷积结果矩阵中的对应通道卷积结果数据元素。

Description

将卷积映射到通道卷积引擎
发明背景
使用神经网络可以解决一整类复杂的人工智能问题。由于这些问题通常是计算和数据密集型的,硬件解决方案通常有利于提高神经网络的性能。人工智能问题通常可以使用基于硬件的解决方案而更快地得到解决,这些解决方案优化了卷积运算的性能,并且特别是逐深度卷积运算(depthwise convolution operation)的性能。传统的逐深度卷积优化方法需要专门的硬件和复杂的存储器组织方案。创建一个兼容求解不同矩阵运算同时还显著提高求解卷积运算的性能和效率的硬件平台是一项技术挑战。因此,存在对硬件和数据路径解决方案(data path solution)的需求,该硬件和数据路径解决方案提高了有效计算解决复杂人工智能问题所需的卷积运算的能力,而不会引入显著的复杂性和限制。
附图简述
在以下详细描述和附图中公开了本发明的各种实施例。
图1是示出使用神经网络解决人工智能问题的系统的实施例的框图。
图2是示出数据输入单元的实施例的框图,该数据输入单元用于准备通道卷积处理器的数据输入矩阵。
图3是示出权重输入单元的实施例的框图,该权重输入单元用于准备通道卷积处理器的权重输入矩阵。
图4是示出用于使用神经网络解决人工智能问题的通道卷积处理器单元的实施例的框图。
图5是示出用于使用通道卷积处理器执行三维卷积运算的过程的实施例的流程图。
图6是示出用于使用通道卷积处理器执行逐深度卷积的过程的实施例的流程图。
图7是示出用于执行卷积运算的示例激活数据(activation data)输入矩阵的示意图。
图8是示出用于执行卷积运算的示例权重矩阵组的示意图。
图9是示出用于执行通道卷积运算的示例权重矩阵的示意图。
图10是示出用于执行通道卷积运算的示例激活数据输入矩阵的单个通道的示意图。
图11是示出用于执行通道卷积运算的向量计算的示例的示意图。
图12是示出用于执行卷积运算的激活数据输入矩阵的示例水平遍历的示意图。
图13是示出被水平遍历以执行通道卷积运算的示例激活数据输入矩阵的单个通道的示意图。
图14是示出用于在激活数据输入矩阵被水平遍历时执行通道卷积运算的向量计算的示例的示意图。
图15是示出用于执行卷积运算的激活数据输入矩阵的示例垂直遍历的示意图。
图16是示出被垂直遍历以执行通道卷积运算的示例激活数据输入矩阵的单个通道的示意图。
图17是示出用于在激活数据输入矩阵被垂直遍历时执行通道卷积运算的向量计算的示例的示意图。
详细描述
本发明可以以多种方式实现,包括作为过程;装置;系统;物质的组成;体现在计算机可读存储介质上的计算机程序产品;和/或处理器,例如被配置为执行存储在耦合到处理器的存储器上和/或由该存储器提供的指令的处理器。在本说明书中,这些实现或者本发明可以采取的任何其他形式可以被称为技术。通常,在本发明的范围内,可以改变所公开的过程的步骤顺序。除非另有说明,否则被描述为被配置成执行任务的诸如处理器或存储器的组件可以被实现为在给定时间被临时配置为执行任务的通用组件或者被制造为执行任务的特定组件。如本文所使用的,术语“处理器”指的是被配置成处理数据(例如计算机程序指令)的一个或更多个设备、电路和/或处理核心。
下面提供了本发明的一个或更多个实施例的详细描述以及说明本发明原理的附图。结合这些实施例描述了本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求限定,并且本发明包括许多替代、修改和等同物。为了提供对本发明的全面理解,在以下描述中阐述了许多具体细节。这些细节是出于示例的目的而提供的,并且本发明可以根据权利要求来实施,而不需要这些具体细节中的一些或全部。为了清楚起见,没有详细描述与本发明相关的技术领域中已知的技术材料,以免不必要地模糊本发明。
公开了一种用于使用通道卷积处理器执行有效卷积运算的处理器系统。使用所公开的技术,特别地对于具有小宽度维度(dimension)和高度维度的输入激活数据,计算卷积运算特别是逐深度卷积的吞吐量和功率效率显著提高。在一些实施例中,处理器系统包括通道卷积处理器单元,该通道卷积处理器单元能够通过对数据卷积矩阵的部分的不同通道应用不同的权重矩阵,使用两个输入矩阵来执行卷积运算。通道卷积处理器单元包括多个计算单元,例如用于处理输入矩阵的输入向量的向量单元。在各种实施例中,计算单元至少包括向量乘法单元和向量加法器单元。向量乘法单元能够使用两个输入向量的对应元素(来自同一通道的数据元素和来自权重矩阵的权重输入元素)来执行乘法运算。在一些实施例中,向量加法器单元用于对使用向量乘法单元计算的相乘结果的向量进行求和。例如,向量加法器单元可以用于使用来自对应输入向量的向量元素的向量相乘结果来计算两个向量的点积结果。在一些实施例中,向量加法器单元是加法器树(adder tree)。例如,加法器树通过对相乘结果和随后的部分和(partial sums)进行并行求和来计算相乘结果的和。
在一些实施例中,处理器系统包括数据输入单元和权重输入单元,用于为通道卷积处理器准备向量操作数(operands)。数据输入单元加载数据卷积矩阵的一部分,例如较大的三维(高度x宽度x通道)矩阵的3x3x32部分。例如,对于数据输入单元的每个向量寄存器,数据卷积矩阵的对应于不同通道的一部分被加载。要加载的向量寄存器的数量可以对应于权重矩阵中的元素数量。例如,使用多个3x3权重矩阵,数据输入单元准备9个向量寄存器,每个向量寄存器保存对应于多个通道(例如32个或其他合适数量的通道)的数据元素。在一些实施例中,加载的通道数量基于缓存行(cache line)大小,并且可以匹配向量寄存器大小。每个向量寄存器的每个相似深度处的对应元素是数据卷积矩阵的针对单个通道的子矩阵的元素。
在一些实施例中,权重输入单元为通道卷积处理器准备多个权重矩阵。准备的权重矩阵的数量对应于为数据输入单元的每个向量寄存器加载的通道的数量。例如,可以使用权重输入单元的9个向量寄存器来加载32个权重矩阵,以对应于加载数据卷积矩阵的3x3x32部分。一旦数据输入单元和权重输入单元的向量寄存器加载了激活数据和权重数据,向量寄存器的对应元素就被加载到通道卷积处理器单元的向量单元中。同一通道的数据输入元素和对应的权重矩阵被加载到同一向量单元。每个向量单元通过将相对应的数据输入元素和权重输入元素相乘并将相乘结果相加在一起来计算点积结果,以确定一个通道卷积结果数据元素。每个向量单元的通道卷积结果数据元素被组合以确定通道卷积结果矩阵的对应部分,例如,通道卷积结果矩阵的针对数据卷积矩阵的每个3x3x32部分的1x1x32部分。
在各种实施例中,一旦确定了数据卷积矩阵的一部分的对应卷积结果,就处理数据卷积矩阵的下一个部分。例如,数据卷积矩阵的附加垂直(或水平)切片(slice)由数据输入单元加载,并与来自数据卷积矩阵的前一个部分的一部分数据一起使用。在各种实施例中,连续的迭代可以重复使用数据卷积矩阵的从前一次迭代使用的部分,并且只需要附加数据元素的新切片。例如,数据卷积矩阵的下一个3x3x32部分仅需要加载数据卷积矩阵的对应于一个垂直切片的1x3x32切片,以与来自前一次迭代的2x3x32部分组合。类似地,数据卷积矩阵的对应于一个水平切片的3x1x32切片可以与来自前一次迭代的3x2x32部分组合。重复使用上一次迭代中与当前迭代中的数据元素重叠的数据元素,以最大限度地减少重复数据的重新加载。在各种实施例中,权重输入数据在迭代中被重复使用,导致显著提高性能和效率。
在一些实施例中,大激活输入数据矩阵上的逐深度卷积可以分布在多个处理元件上,每个处理元件具有它自己的数据输入单元、权重输入单元和通道卷积处理器。激活数据的部分可以被分配给不同的处理元件,以分别执行逐深度卷积运算的一部分。可以将适用的权重广播给所有适用的处理元件。不同处理元件的结果被合并以并行确定通道卷积结果矩阵。在各种实施例中,激活输入数据矩阵、权重数据矩阵和通道卷积结果矩阵的布局使用提高存储器和处理效率的通道优先布局格式。例如,卷积处理器单元的输入参数和输出参数采用与在存储器中存储相同的格式,并且不需要复杂的处理器和存储器带宽密集型运算,例如布局变换运算。利用通道卷积处理器进行逐深度运算导致显著提高性能和效率。
在一些实施例中,处理器系统包括第一组寄存器、第二组寄存器和通道卷积处理器单元。例如,处理元件包括具有第一组向量寄存器的数据输入单元和具有第二组向量寄存器的权重输入单元。第一组寄存器被配置为存储卷积数据矩阵的一部分的多个通道的数据元素,其中第一组寄存器中的每个寄存器存储来自多个通道中每个通道的至少一个数据元素。在一些实施例中,卷积数据矩阵是三维矩阵,例如三维机器学习矩阵,具有宽度维度、高度维度和通道维度。例如,在一些实施例中,第一组寄存器中的每个寄存器是存储数据元素向量的向量寄存器,每个数据元素对应于卷积数据矩阵的不同通道,例如32元素向量寄存器的通道1至32。在各种实施例中,第一组寄存器的每个寄存器还可以对应于卷积数据矩阵的不同宽度和高度位置。第二组寄存器被配置为存储多个卷积权重矩阵的数据元素,该多个卷积权重矩阵包括用于多个通道中每个通道的独立卷积权重矩阵,其中第二组寄存器中的每个寄存器存储来自多个卷积权重矩阵中每一个的至少一个数据元素。在一些实施例中,每个权重矩阵是具有宽度维度和高度维度的二维矩阵,并且可以有与卷积数据矩阵的通道一样多的权重矩阵。例如,在一些实施例中,第二组寄存器中的每个寄存器是存储权重数据元素向量的向量寄存器,每个权重数据元素对应于不同的卷积权重矩阵。32元素向量寄存器可以存储来自32个不同卷积权重矩阵的权重数据元素,每个权重矩阵对应于卷积数据矩阵的不同通道。在各种实施例中,第二组寄存器中的每个寄存器对应于对应卷积权重矩阵的不同宽度和高度位置。在各种实施例中,第一组寄存器的存储数据元素的总计数与第二组寄存器的存储数据元素的总计数相同。例如,从卷积数据矩阵存储的数据元素的数量等于从多个卷积权重矩阵存储的权重数据元素的数量。
在一些实施例中,通道卷积处理器单元被配置为,对于第一组寄存器中的每个数据元素,将第一组寄存器中的该数据元素与第二组寄存器中的对应数据元素相乘。例如,与卷积数据矩阵相关联的每个数据元素与卷积权重矩阵的对应权重数据元素相乘。通道卷积处理器单元被配置为,对于多个通道中的每个特定通道,将相乘结果中对应于该特定通道的相乘结果相加在一起,以确定对应通道卷积结果矩阵中一个对应的通道卷积结果数据元素。例如,将同一通道的相乘结果相加在一起,以确定对应的通道卷积结果数据元素。相乘结果的每次求和对应于将卷积权重矩阵应用于卷积数据矩阵的单个通道和子集的数据元素。在一些实施例中,相乘结果的每个和对应于卷积数据矩阵的一个通道的至少部分点积结果。
图1是示出使用神经网络解决人工智能问题的系统的实施例的框图。在所示的示例中,系统100包括处理元件101和存储器161。处理元件101包括数据输入单元103、权重输入单元105、通道卷积处理器单元107和输出单元151。在一些实施例中,处理元件101是硬件集成电路,例如,专用集成电路(ASIC),并且包括硬件组件数据输入单元103、权重输入单元105、通道卷积处理器单元107和输出单元151。与通用处理器相比,处理元件101使用专用硬件集成电路来设计和实现,以更有效地执行一个或更多个特定计算任务,该一个或更多个特定计算任务与使用神经网络执行卷积运算和/或解决人工智能问题相关。与使用通用处理器相比,专用硬件显著提高了性能和资源效率。在所示的示例中,通道卷积处理器单元107包括多个向量计算单元,该多个向量计算单元至少包括向量单元111、121、131和141。在各种实施例中,通道卷积处理器单元107从数据输入单元103接收数据输入向量(未示出),并从权重输入单元105接收权重输入向量(未示出)。例如,在一些实施例中,对应于3D激活数据输入矩阵的2D子矩阵的数据输入向量由数据输入单元103生成,其中每个2D子矩阵对应于该3D激活数据输入矩阵的不同通道。权重输入向量由权重输入单元105生成,并且对应于不同的权重矩阵。在各种实施例中,3D激活数据输入矩阵的2D子矩阵和权重矩阵可以是3x3矩阵或其他合适的大小。激活数据输入矩阵和权重输入矩阵的数据元素可以被存储并从存储器161检索。
在一些实施例中,每个生成的数据输入向量和权重输入向量对可以作为参数被传递给通道卷积处理器单元107的向量计算单元,例如向量单元111、121、131和141中的一个。例如,通道卷积处理器单元107的向量单元可以使用数据输入向量和权重输入向量对来确定通道卷积结果数据元素,例如点积结果。在一些实施例中,通道卷积处理器单元107包括32个向量单元和/或其他合适数量的向量单元。向量单元的数量可以基于缓存行大小,例如,缓存行大小或缓存行大小的倍数。例如,缓存行倍数可以是1,向量单元的数量可以等于缓存行大小。每个向量单元可以采用对应于两个向量的数据元素作为参数,并且每个向量单元可以产生单元素结果。以3x3矩阵为例,每个向量单元采用两个9元素向量作为参数,一个向量对应于激活数据输入矩阵的子矩阵,一个向量对应于权重矩阵。在通道卷积处理器单元107的所有向量单元上进行,结果是输出向量结果,并且对应于通道卷积结果矩阵的数据元素。在附加的迭代中,通道卷积处理器单元107使用相同的权重矩阵来处理激活数据输入矩阵的不同部分,以确定通道卷积结果矩阵的附加数据元素。在各种实施例中,通道卷积处理器单元107针对每次迭代的输出可以是输出向量,并且在输出单元151处被接收。在一些实施例中,在输出单元151处接收的输出向量是32元素向量。尽管在上面的示例中,针对每次迭代使用3x3矩阵来处理32个通道,但是由系统100处理的元素和矩阵的大小可以被适当地配置。例如,元素可以是4位、8位、2字节、4字节或其他合适的大小。类似地,激活数据输入矩阵的子矩阵和权重矩阵可以是3x3、5x5或其他合适的大小。
在一些实施例中,通道卷积处理器单元107被配置为接收多对输入矩阵。每对输入矩阵包括数据输入矩阵和对应的权重矩阵。每个数据输入矩阵对应于激活数据输入矩阵的一部分的特定通道,并由数据输入单元103处理。每个权重输入矩阵对应于要应用于该通道的权重矩阵,并由权重输入单元105处理。数据输入单元103、权重输入单元105和输出单元151可以使用硬件寄存器(例如触发器电路(flip-flop circuits))来实现,用于向/从通道卷积处理器单元107传送多个输入和输出元素。在一些实施例中,从存储器161中检索对应于每个数据输入向量的元素,并经由数据输入单元103将其加载到通道卷积处理器单元107的对应向量单元(例如向量单元111、121、131或141)中。例如,具有32个向量单元的通道卷积处理器单元可以经由数据输入单元103加载对应于激活数据输入矩阵的32个不同通道的32个数据输入元素向量。类似地,从存储器161中检索对应于每个权重输入向量的元素,并经由权重输入单元105将其加载到通道卷积处理器单元107的对应向量单元(例如向量单元111、121、131或141)中。例如,具有32个向量单元的通道卷积处理器单元可以经由权重输入单元105加载对应于32个不同权重矩阵的32个权重输入元素向量。当确定了对应于激活数据输入矩阵的部分的结果时,加载附加数据元素,用于用相同的权重矩阵处理激活数据输入矩阵的附加部分。例如,数据输入单元103加载附加的所需数据元素,并生成对应于激活数据输入矩阵的新部分的新数据输入向量,用于确定附加的通道卷积结果。当数据输入向量改变以对应于激活数据输入矩阵的新部分时,权重输入向量可以保持不变并且可以重复使用,从而显著提高卷积运算的效率。在各种实施例中,图1的粗箭头表示数据移动通过系统100的组件的方向。例如,箭头可以对应于多元素宽的通信/数据总线和/或数据线。在各种实施例中,在输出单元151处接收的输出向量结果可以写回到存储器161。
在各种实施例中,通道卷积处理器单元107的每个向量单元(例如向量单元111、121、131或141)接收两个向量操作数,并且可以执行一个或更多个向量运算。例如,向量单元可以计算两个输入操作数的点积,并将结果作为输出向量的一个元素输出到输出单元151。在各种实施例中,向量单元的输出结果对应于对应通道卷积结果矩阵的一个通道卷积结果数据元素。在一些实施例中,通道卷积处理器单元107的每个向量单元(例如向量单元111、121、131或141)包括乘法单元和加法器单元(未示出)。
在一些实施例中,处理元件101的多个实例可以并行操作以处理激活数据输入矩阵的不同部分。例如,每个处理元件可以从存储器161中检索激活数据输入矩阵中被分配给该处理元件的数据元素和对应的权重矩阵。在一些实施例中,不同的处理元件共享权重矩阵,并且所共享的权重矩阵的数据元素可以被广播到合适的处理元件以提高存储器效率。每个处理元件使用其自己的通道卷积处理器单元对激活数据输入矩阵的分配部分执行逐深度卷积运算。例如,可以通过将结果写入共享存储器位置(例如存储器161)来组合每个处理元件的结果。在一些实施例中,通道卷积处理器单元107包括数据输入单元103、权重输入单元105和/或输出单元151的功能。
图2是示出数据输入单元的实施例的框图,该数据输入单元用于准备通道卷积处理器的数据输入矩阵。数据输入单元200包括多个数据输入向量寄存器,例如数据输入向量寄存器201、203、205、207和209。数据输入单元200经由连接211接收输入数据,并经由连接221将输出数据作为卷积矩阵参数写入。在一些实施例中,连接211和/或221是多元素宽的通信/数据总线和/或数据线。在一些实施例中,连接211将数据输入单元200可通信地连接到存储器,例如图1的存储器161,并且连接221将数据输入单元200可通信地连接到通道卷积处理器单元,例如图1的通道卷积处理器单元107。例如,数据元素可以经由连接211从存储器中检索,由数据输入单元200处理成按通道排列的合适的卷积矩阵参数,并经由连接221传递到通道卷积处理器单元作为卷积矩阵参数。在一些实施例中,卷积矩阵参数作为数据输入向量被传递,其中每个数据输入向量对应于激活数据输入矩阵的一部分的特定通道。
在一些实施例中,数据输入单元200的数据输入向量寄存器的数量对应于用于执行逐深度卷积的对应权重矩阵的大小。例如,3x3权重矩阵具有九个权重元素,并且对应于激活数据输入矩阵的3x3子矩阵的九个激活数据输入元素。在各种实施例中,存在对应于卷积矩阵参数的每个元素的一个数据输入向量。当应用3x3权重矩阵时,至少使用九个数据输入向量寄存器。每个数据输入向量寄存器对应于激活数据输入矩阵的一个3x3部分的数据元素中的一个。每个数据输入向量寄存器的长度对应于可并行处理的通道数量。在一些实施例中,并行处理的通道数量对应于缓存行大小或缓存行大小的倍数。例如,32元素缓存行和32元素数据输入向量寄存器允许将整个缓存行读入单个数据输入向量寄存器,例如数据输入向量寄存器201、203、205、207或209。
在所示的示例中,每个数据输入向量寄存器,例如数据输入向量寄存器201、203、205、207和209,存储来自不同通道的数据元素。例如,对应于激活数据输入矩阵的32个不同通道的32个不同数据元素被存储在数据输入单元200的每个数据输入向量寄存器中。使用数据输入向量寄存器,数据输入单元200为通道卷积处理器单元准备卷积矩阵参数。每个数据输入向量寄存器中的数据元素基于通道进行识别。例如,每个数据输入向量寄存器的第一元素被识别,并且在该示例中,对应于激活数据输入矩阵的第一通道。使用3x3矩阵的示例,九个数据元素被识别并且对应于来自通道1的3x3矩阵。每个数据输入向量寄存器的第二数据元素的组对应于来自通道2的3x3矩阵。每个数据输入向量寄存器的第三数据元素的组对应于来自通道3的3x3矩阵,以此类推。尽管该示例使用通道1的初始偏移,但是第一元素在适当的情况下可以对应于另一个通道,并且可以基于缓存行大小。例如,每个数据输入向量寄存器的第一元素可以对应于通道1、33、65或其他合适的通道。在各种实施例中,来自数据输入向量寄存器中相同索引的数据元素的组一起形成数据输入向量。对于32元素数据输入向量寄存器,数据元素的32个组对应于32个不同的数据输入向量,每个数据输入向量与激活数据输入矩阵的不同通道相关联。在一些实施例中,数据输入单元200包括用于存储按通道排列的数据输入向量的附加向量寄存器(未示出)。数据输入单元200经由连接221将准备好的数据输入向量传递到通道卷积处理器。在各种实施例中,在通道卷积处理器处,不同的数据输入向量被加载到具有用于执行卷积运算的对应权重输入向量的不同向量单元中。
在一些实施例中,数据输入单元200是图1的数据输入单元103,并且经由连接221连接到数据输入单元200的通道卷积处理器单元是图1的通道卷积处理器单元107。在各种实施例中,由数据输入单元200为通道卷积处理器单元准备的数据向量输入被导向通道卷积处理器的向量单元,例如图1的向量单元111、121、131或141。尽管在上面的示例中使用了3x3矩阵,但是不同的矩阵大小可能是合适的,并且数据输入单元200可以被配置为通过利用合适数量的数据输入向量寄存器来处理不同的矩阵大小。例如,25个数据输入向量寄存器可用于处理和准备5x5矩阵的卷积矩阵参数。
在一些实施例中,在处理激活数据输入矩阵的后续部分时,数据输入单元200仅加载激活数据输入矩阵的附加数据元素。例如,在激活数据输入矩阵的初始部分被处理之后,只需要下一部分的子集。可以使用存储在数据输入向量寄存器的子集中的现有部分。例如,在一些实施例中,3x3x32的初始部分首先被加载到数据输入单元200的9个32元素数据输入向量寄存器中。当水平遍历以处理激活数据输入矩阵的下一个部分时,后续迭代只需要加载激活数据输入矩阵的一个1x3x32部分。新部分只需要加载三个新的数据输入向量寄存器。可以重复使用六个数据输入向量寄存器中的数据元素。例如,对应于来自前一次迭代的卷积矩阵的第二列的数据输入向量寄存器现在被用于准备新卷积矩阵的第一列。类似地,对应于来自前一次迭代的卷积矩阵的第三列的数据输入向量寄存器现在被用于准备新卷积矩阵的第二列。三个新加载的数据输入向量寄存器用于准备新卷积矩阵的第三列。在一些实施例中,一个或更多个多路复用器被用于选择正确的数据元素和/或数据输入向量寄存器,以准备卷积矩阵。在一些实施例中,在垂直遍历以处理激活数据输入矩阵的下一个部分时,新的附加数据是激活数据输入矩阵的一个3x1x32部分。
图3是示出权重输入单元的实施例的框图,该权重输入单元用于准备通道卷积处理器的权重输入矩阵。权重输入单元300包括多个权重输入向量寄存器,例如权重输入向量寄存器301、303、305、307和309。权重输入单元300经由连接311接收权重输入数据,并经由连接321将输出权重数据作为卷积矩阵参数写入。在一些实施例中,连接311和/或321是多元素宽的通信/数据总线和/或数据线。在一些实施例中,连接311将权重输入单元300可通信地连接到存储器,例如图1的存储器161,并且连接321将权重输入单元300可通信地连接到通道卷积处理器单元,例如图1的通道卷积处理器单元107。例如,权重数据元素可以经由连接311从存储器中检索,由权重输入单元300处理成按权重过滤器排列的合适的卷积矩阵参数,并经由连接321传递到通道卷积处理器单元作为卷积矩阵参数。在一些实施例中,卷积矩阵参数作为权重输入向量被传递,其中每个权重输入向量对应于与激活数据输入矩阵的一部分的特定通道相关联的特定权重过滤器矩阵。
在一些实施例中,权重输入单元300的权重输入向量寄存器的数量对应于用于执行逐深度卷积的对应权重矩阵的大小。例如,3x3的权重矩阵具有9个权重元素,每个权重元素可以存储在不同的权重输入向量寄存器中。每个权重矩阵的9个权重元素对应于九个权重输入向量寄存器。作为另一个示例,5x5权重矩阵具有25个权重元素,并且每个权重元素可以存储在25个不同权重输入向量寄存器中不同的一个中。在各种实施例中,权重输入单元300可以被配置有对应数量的权重输入向量寄存器,以在适当情况下用于其他权重矩阵大小。
在一些实施例中,每个权重输入向量寄存器的长度对应于可以与激活数据输入矩阵的对应通道并行处理的权重矩阵的数量。在一些实施例中,针对激活数据输入矩阵的每个通道都存在一个权重矩阵,激活数据输入矩阵可能远远超过权重输入向量寄存器的长度。并行处理的权重矩阵的数量和并行处理的通道的对应数量可以基于缓存行大小或缓存行大小的倍数。例如,32元素缓存行和32元素权重输入向量寄存器允许来自不同权重矩阵的权重数据元素的整个缓存行被读入单个权重输入向量寄存器,例如权重输入向量寄存器301、303、305、307或309。在各种实施例中,权重矩阵以通道优先布局格式存储,当加载缓存行大小的权重输入数据时,该格式允许非常有效的存储器访问。
在所示的示例中,每个权重输入向量寄存器,例如权重输入向量寄存器301、303、305、307和309,存储来自不同权重矩阵的权重数据元素。例如,对应于32个不同权重矩阵的32个不同权重数据元素被存储在权重输入单元300的每个权重输入向量寄存器中。使用权重输入向量寄存器,权重输入单元300为通道卷积处理器单元准备卷积矩阵参数。基于激活数据输入矩阵的对应通道识别来自每个权重输入向量寄存器的权重数据元素。例如,每个权重输入向量寄存器的第一元素被识别,并且在该示例中,对应于激活数据输入矩阵的第一通道的权重矩阵。使用3x3矩阵示例,9个权重数据元素被识别并对应于与通道1相关联的3x3权重矩阵。每个权重输入向量寄存器的第二权重数据元素的组对应于与通道2相关联的3x3权重矩阵。每个权重输入向量寄存器的第三权重数据元素的组对应于与通道3相关联的3x3权重矩阵,以此类推。尽管该示例将每个权重输入向量寄存器的初始偏移与通道1相关联,但是第一元素在适当的情况下可以与激活数据输入矩阵的另一通道相关联,并且可以基于缓存行大小。例如,每个权重输入向量寄存器的第一元素可以对应于通道1、33、65或另一合适的通道。在各种实施例中,来自权重输入向量寄存器中相同索引的权重数据元素的组一起形成权重输入向量。对于32元素权重输入向量寄存器,权重数据元素的32个组对应于32个不同的权重输入向量,每个对应于不同的权重矩阵,并且与激活数据输入矩阵的不同通道相关联。在一些实施例中,权重输入单元300包括用于在权重输入向量一旦被排列为权重矩阵并按照通道相关联之后就存储权重输入向量的附加向量寄存器(未示出)。权重输入单元300经由连接321将准备好的权重输入向量传递到通道卷积处理器。在各种实施例中,在通道卷积处理器处,不同的权重输入向量被加载到具有用于执行卷积运算的对应数据输入向量的不同向量单元中。在一些实施例中,当处理激活数据输入矩阵的不同部分时,应用相同的权重矩阵,并且通道卷积处理器单元可以重复使用相同的准备好的权重输入向量。通过重复使用相同的权重矩阵,卷积运算的性能和效率显著提高。
在一些实施例中,权重输入单元300是图1的权重输入单元105,并且经由连接321连接到权重输入单元300的通道卷积处理器单元是图1的通道卷积处理器单元107。在各种实施例中,由权重输入单元300为通道卷积处理器单元准备的权重向量输入被导向通道卷积处理器的向量单元,例如图1的向量单元111、121、131或141。尽管在上面的示例中使用了3x3矩阵,但是不同的矩阵大小可能是合适的,并且权重输入单元300可以被配置为通过利用合适数量的权重输入向量寄存器来处理不同的矩阵大小。例如,25个权重输入向量寄存器可用于处理和准备5x5权重矩阵的卷积矩阵参数。
图4是示出用于使用神经网络解决人工智能问题的通道卷积处理器单元的实施例的框图。在所示的示例中,通道卷积处理器单元400包括多个向量单元,该多个向量单元包括向量单元401、411、421和451。向量单元421和451之间的三个点表示可选的附加向量单元(未示出)。在各种实施例中,通道卷积处理器单元可以包括更多或更少的向量单元。向量单元的数量对应于可以并行处理的通道和相关权重矩阵的数量。例如,通道卷积处理器单元可以包括32个向量单元,每个向量单元能够处理激活数据输入矩阵的一部分的一个通道以及相关权重矩阵。在一些实施例中,每个向量单元包括向量乘法单元和向量加法器单元。在所示的示例中,向量单元401包括向量乘法单元403和向量加法器单元405。类似地,向量单元411包括向量乘法单元413和向量加法器单元415,向量单元421包括向量乘法单元423和向量加法器单元425,并且向量单元451包括向量乘法单元453和向量加法器单元455。在各种实施例中,通道卷积处理器单元400是图1的通道卷积处理器单元107,并且向量单元401、411、421和451分别是图1的向量单元111、121、131和141。
在一些实施例中,通道卷积处理器单元400的每个向量单元(例如向量单元401、411、421和451)接收两个向量操作数,并且可以使用该操作数执行一个或更多个向量运算。例如,向量单元可以通过将第一输入向量的每个元素与第二输入向量的对应元素相乘来计算多个乘法运算的结果。可以将所产生的相乘结果相加在一起,以确定通道卷积结果数据元素。在一些实施例中,向量操作数是数据输入向量和权重输入向量,并且分别对应于激活数据输入矩阵的一部分的单个通道的数据元素和权重矩阵的数据元素。在各种实施例中,分别从数据输入单元和权重输入单元接收数据输入向量和权重输入向量。在一些实施例中,数据输入单元是图1的数据输入单元103和/或图2的数据输入单元200,并且权重输入单元是图1的权重输入单元105和/或图3的权重输入单元300。
在所示的示例中,通道卷积处理器单元400包括多个向量单元,每个向量单元包括向量乘法单元和向量加法器单元。每个向量乘法单元,例如向量乘法单元403、413、423或453,被配置为使经由数据输入单元(未示出)和权重输入单元(未示出)接收的对应元素相乘。在一些实施例中,结果是相乘结果的向量。例如,对于对应于两个3x3矩阵的两个9字节的输入向量,向量乘法单元的结果是9个相乘结果的向量。来自数据输入向量的第一元素与权重输入向量的第一元素相乘。类似地,来自数据输入向量的第二元素与权重输入向量的第二元素相乘。在各种实施例中,来自数据输入向量和权重输入向量的对应元素被并行相乘。在各种实施例中,相乘结果的向量被传递到向量单元的向量加法器单元。例如,向量乘法单元403将其相乘结果传递给向量加法器单元405,向量乘法单元413将其相乘结果传递给向量加法器单元415,向量乘法单元423将其相乘结果传递给向量加法器单元425,并且向量乘法单元453将其相乘结果传递给向量加法器单元455。
在一些实施例中,向量单元的每个向量加法器单元,例如向量加法器单元405、415、425或455,被配置为使用来自输入向量的元素来计算加法运算。例如,向量加法器单元405计算来自由向量乘法单元403计算的相乘结果的向量的选定元素的和。类似地,向量加法器单元415计算来自由向量乘法单元413计算的相乘结果的向量的每个元素的和,向量加法器单元425计算来自由向量乘法单元423计算的相乘结果的向量的每个元素的和,并且向量加法器单元455计算来自由向量乘法单元453计算的相乘结果的向量的每个元素的和。在一些实施例中,向量加法器单元的结果是用作对应向量单元和向量乘法单元的输入的向量的点积。在各种实施例中,每个向量加法器单元,例如向量加法器单元405、415、425或455,被实现为加法器树。例如,加法器树的顶层可以将成对的元素相加以确定一组部分和,例如将元素0和1相加以确定第一部分和,以及将元素2和3相加以确定第二部分和,等等。每个后续层可以对来自前一层的成对的部分和进行求和,直到最后一层计算出最终结果和(result sum)。在各种实施例中,每个加法器树并行计算部分和,以得到结果和。并行运算显著提高了对数字向量进行求和的效率。在各种实施例中,多个向量单元可以并行操作以并行计算多个结果,显著提高了通道卷积处理器单元400的吞吐量。
在一些实施例中,每个向量单元(例如,向量单元401、411、421和451)的输出是通道卷积结果数据元素。通道卷积处理器单元400的向量单元的组用于并行确定多个通道卷积结果数据元素,分别用于与通道卷积处理器单元400的输入卷积矩阵参数相关联的每个通道。通过处理激活数据输入矩阵的不同部分,通道卷积处理器单元400为通道卷积结果矩阵的多个部分确定通道卷积结果数据元素。在各种实施例中,向量单元的权重输入参数可以跨越不同的数据输入参数被重复使用,从而导致效率和性能的显著提高。
在各种实施例中,一旦确定了通道卷积数据元素结果,通道卷积处理器单元400就可以将该结果推送到存储器或诸如下游处理组件的其他位置。例如,可以首先将向量结果写入输出单元,例如图1的输出单元151,然后可以将结果传输到下游处理组件或存储器。在一些实施例中,通道卷积处理器单元400写出对应于每个向量单元的结果的整个结果向量。在各种实施例中,使用通道优先布局格式将结果写入存储器,例如图1的存储器161。通过以与用于将结果写入存储器的布局相同的格式确定结果,可以获得显著的性能优势。
图5是示出用于使用通道卷积处理器执行三维卷积运算的过程的实施例的流程图。例如,通过求解一个或更多个三维卷积运算来分析神经网络的一个或更多个层,从而部分地使用神经网络来解决人工智能问题。可以通过发出卷积运算指令并指定合适的三维激活数据输入矩阵和对应的权重矩阵来启动三维卷积运算。卷积运算的对应于三维激活数据输入矩阵的不同部分和相关权重矩阵的部分可以被分配并由不同的处理元件执行。通过在不同的处理元件上分布工作负载,可以显著提高性能。每个处理元件接收三维激活数据输入矩阵的对应部分和相关权重矩阵。在一些实施例中,相同的权重矩阵被多个不同的处理元件使用,并且权重矩阵被广播到适用的处理元件以提高存储器带宽效率。在每个处理元件处,通道卷积处理器单元用于对激活数据的分配部分和权重卷积输入参数执行逐深度卷积运算。例如,每个处理元件可以处理指示激活数据输入矩阵的一部分和对应权重矩阵的指令,以执行逐深度卷积运算。用于特定处理元件的指令可以指定激活数据输入矩阵的分配部分和对应权重矩阵在存储器或其他位置中的位置。在一些实施例中,使用例如图1的处理元件101的处理元件,并且特别地,使用例如图1的通道卷积处理器单元107和/或图4的通道卷积处理器单元400的通道卷积处理器单元来执行卷积运算。在一些实施例中,数据输入单元和权重输入单元为通道卷积处理器单元准备卷积输入参数。在一些实施例中,数据输入单元是图1的数据输入单元103和/或图2的数据输入单元200,并且权重输入单元是图1的权重输入单元105和/或图3的权重输入单元300。在一些实施例中,每个通道卷积处理器单元的结果在处理元件的输出单元处被收集,例如在图1的输出单元151处被收集。
在501,接收卷积运算指令。例如,卷积运算指定三维激活数据输入矩阵或三维激活数据输入矩阵的一部分。该数据可以对应于具有宽度维度、高度维度和通道维度的图像或其他合适的数据集。卷积运算还指定过滤器集合,例如用于应用于指定激活数据的二维权重矩阵的集合。二维权重矩阵的大小都一样,并且可以是3x3矩阵,尽管其他大小也是合适的。在各种实施例中,权重矩阵的数量等于激活数据的通道深度。在一些实施例中,卷积运算被表示为一个或更多个指令,例如由处理系统接收的一个或更多个卷积运算指令。在各种实施例中,处理系统可以包括一个或更多个处理元件,其中每个处理元件包括通道卷积处理器单元、数据输入单元、权重输入单元和输出单元。
在503,数据输入被分配给处理元件。例如,指定激活数据的不同三维部分被分配给不同的处理元件。每个处理元件被分配来处理三维激活数据输入矩阵的对应于该处理元件的部分。通过在多个处理元件上分布工作负载,由于卷积运算的对应于激活数据的不同分配部分的部分被并行处理,卷积运算的性能得到提高。对于数据输入的每个分配部分,存在对应的权重矩阵集合。分配的数据被传输到合适的处理元件。
在505,权重输入被广播给处理元件。对应于指定激活数据的分配部分的合适的权重输入被传输到对应的处理元件。在各种实施例中,被分配给来自相同通道的激活数据的处理元件利用相同的权重输入,并且该相同的权重输入被广播给对应的处理元件。通过利用广播而不是单独的传输,减少了向处理元件加载合适的权重输入所需的资源,并且实现了显著的性能提高。
在507,使用通道卷积处理器执行逐深度卷积运算。例如,每个处理元件使用通道卷积处理器单元,用合适的权重矩阵来处理三维激活数据输入矩阵的被分配给该处理元件的部分。在各种实施例中,每个处理元件向其通道卷积处理器单元加载由数据输入单元处理的输入激活数据和由权重输入单元处理的权重数据。通道卷积处理器单元对激活数据的分配部分和通道执行逐深度卷积,以确定对应的通道卷积结果数据元素。在分配数据的初始部分被处理之后,处理元件迭代,直到所有剩余的分配数据被处理为止。在各种实施例中,即使附加的激活数据被增量地加载,权重输入仅被加载到每个处理元件的通道卷积处理器单元一次。使用通道卷积处理器执行逐深度卷积运算的结果对应于通道卷积结果矩阵的数据元素。在一些实施例中,每个处理元件在该处理元件的输出单元处收集其结果。然后可以将结果传输到处理元件之外的其他存储器位置(和/或组件)。
在509,处理元件结果被合并。例如,在步骤507确定的、来自每个处理元件的结果被写入存储器,例如图1的存储器161。在步骤507确定的通道卷积结果数据元素被合并以创建通道卷积结果矩阵。在各种实施例中,每个处理元件将其结果写入存储器,并且最终的通道卷积结果矩阵存储在存储器中。在一些实施例中,通道卷积结果矩阵存储在其他位置处,例如本地存储器高速缓存中,并用作后续矩阵和/或卷积运算的输入激活数据矩阵。
图6是示出用于使用通道卷积处理器执行逐深度卷积的过程的实施例的流程图。例如,数据输入向量与权重输入向量一起被加载到通道卷积处理器的向量单元中,以确定通道卷积结果数据元素结果。每个数据输入向量是三维激活数据输入矩阵的一部分的二维子矩阵。每个权重输入向量是与三维激活数据输入矩阵的通道相关联的二维权重矩阵。每个向量单元执行点积运算以确定通道卷积结果数据元素结果。在各种实施例中,一旦数据输入的初始集合和对应的权重输入矩阵被加载到通道卷积处理器的向量单元中,激活数据输入矩阵的后续部分通过仅加载激活数据输入矩阵的增量部分来被处理。权重输入矩阵和用于确定前一次卷积结果的数据输入部分被重复使用,其好处是提高了效率和性能。
在一些实施例中,图6的过程作为图5过程的一部分来执行。例如,在一些实施例中,步骤601、609和/或611在图5的503处执行,步骤603在图5的505处执行,并且步骤605和607在图5的507和/或509处执行。在一些实施例中,使用例如图1的处理元件101的处理元件和例如图1的通道卷积处理器单元107和/或图4的通道卷积处理器单元400的通道卷积处理器单元来执行图6的过程。在一些实施例中,通道卷积处理器单元的向量单元的数据输入和权重输入分别由数据输入单元和权重输入单元准备,并且在输出单元处收集通道卷积结果。在一些实施例中,数据输入单元是图1的数据输入单元103和/或图2的数据输入单元200,权重输入单元是图1的权重输入单元105和/或图3的权重输入单元300,而输出单元是图1的输出单元151。
在601,用数据输入的初始集合准备数据输入向量,并将其加载到通道卷积处理器单元的向量单元中。例如,对应于三维激活数据输入矩阵的子集的数据元素被准备好作为针对数据输入的初始集合的数据输入向量。在各种实施例中,数据输入的初始集合需要加载每个数据元素。在一些实施例中,每个数据输入向量对应于激活数据输入矩阵的二维子矩阵或矩阵切片,并且对应于特定通道。数据输入向量的数量对应于通道卷积处理器单元的向量单元的数量,并且是可以并行处理的通道的数量。例如,在并行处理32个通道的情况下,准备32个数据输入向量,并向通道卷积处理器单元的每个向量单元加载一个数据输入向量。在一些实施例中,存储在数据输入向量中的每个矩阵是3x3矩阵,并且匹配对应权重矩阵的大小。在各种实施例中,矩阵大小可以是另一大小,例如5x5、7x7、9x9、11x11或另一合适的大小。每个数据输入向量的大小基于矩阵的大小,并且是矩阵的元素数量。例如,对于3x3矩阵,每个数据输入向量有9个数据元素,并且向量单元可以处理9个数据元素和9个权重元素。作为另一个示例,对于5x5矩阵,每个数据输入向量具有25个数据元素,并且向量单元可以处理25个数据元素和25个权重元素。
在各种实施例中,一旦准备好,每个数据输入向量就被加载到通道卷积处理器单元的合适的向量单元中。例如,通道卷积处理器单元的每个向量单元加载有准备好的数据输入向量。准备好的数据输入向量的元素对应于来自激活数据输入矩阵的单个通道的子矩阵。在各种实施例中,每个数据输入向量的对应数据元素在激活数据输入矩阵中各自具有相同的宽度和高度位置,但是具有不同的通道位置。除了数据输入向量之外,在603,每个向量单元接收对应的权重输入向量。
在603,准备好权重输入向量并将其加载到通道卷积处理器单元的向量单元中。例如,对应于与三维激活数据输入矩阵的一部分相关联的权重矩阵集合的权重数据元素被准备好作为权重输入向量。在各种实施例中,与激活数据输入的初始集合相关联的权重元素需要将每个权重数据元素加载到对应的向量单元。在一些实施例中,后续附加激活数据的处理可以重复使用相同的权重输入数据,而无需附加的处理来准备新的权重输入向量。在一些实施例中,每个权重输入向量对应于与激活数据输入矩阵的不同通道相关联的不同二维权重矩阵。权重输入向量的数量对应于通道卷积处理器单元的向量单元的数量,并且是可以并行处理的通道的数量。例如,在并行处理32个通道的情况下,准备好32个权重输入向量,并且在通道卷积处理器单元的每个向量单元中加载一个权重输入向量。在一些实施例中,存储在权重输入向量中的每个权重矩阵是3x3权重矩阵,并且匹配对应的激活数据子矩阵的大小。在各种实施例中,权重矩阵的大小可以是另一大小,例如5x5权重矩阵或另一合适的大小。每个权重输入向量的大小基于权重矩阵的大小,并且是矩阵的元素数量。例如,对于3x3的权重矩阵,每个权重输入向量具有9个权重数据元素,并且向量单元可以将9个权重数据元素与9个激活数据元素一起进行处理。作为另一个示例,对于5x5权重矩阵,每个权重输入向量具有25个权重数据元素,并且向量单元可以将25个权重数据元素与25个激活数据元素一起进行处理。
在各种实施例中,一旦被准备好,每个权重输入向量就基于对应的数据输入向量,被加载到通道卷积处理器单元的合适的向量单元中。例如,通道卷积处理器单元的每个向量单元加载有准备好的权重输入向量。准备好的权重输入向量的元素对应于权重矩阵,该权重矩阵与来自激活数据输入矩阵的单个通道的子矩阵相关联。除了权重输入向量之外,在601,每个向量单元接收对应的数据输入向量。
在605,执行向量乘法和向量加法运算。利用在601或611从数据输入向量加载的输入向量和在603从权重输入向量加载的输入向量,通道卷积处理器单元的每个对应向量单元执行向量乘法和加法运算。数据输入向量中的每个元素乘以权重输入向量中的其对应元素。结果是相乘结果的向量。例如,使用3x3的数据矩阵和权重矩阵,9个数据元素中的每一个与9个权重元素中对应的一个相乘,以确定9个相乘结果。在一些实施例中,向量乘法运算由向量单元的向量乘法单元执行。使用向量相乘结果,通过将相乘结果向量中的每个元素相加来计算向量求和结果。在各种实施例中,结果是通道卷积结果矩阵的通道卷积结果数据元素。在一些实施例中,使用向量单元的向量加法器单元来确定和。例如,使用加法器树的向量加法器单元可以计算向量元素的和。在一些实施例中,通道卷积处理器单元的每个向量单元使用其对应的加载的数据输入向量和权重输入向量来执行点积运算。点积结果是通道卷积结果矩阵的通道卷积结果数据元素。
在一些实施例中,每个向量单元并行执行其向量运算。例如,具有32个向量单元的通道卷积处理器单元可以计算对应于32个不同通道的32个卷积结果数据元素。在一些实施例中,每个向量单元组与其他向量单元组的其他向量单元并行地独立地确定与其分配的卷积运算相关联的结果。
在607,输出结果。例如,通过在605执行矩阵乘法和加法运算确定的向量结果从通道卷积处理器单元输出。在各种实施例中,向量结果作为输出向量结果被输出,例如输出到输出单元(例如图1的输出单元151)。输出单元可用于将输出向量结果写入存储器。在一些实施例中,结果被输出并用作后续矩阵运算的参数。
在609,确定附加数据输入是否待被处理。例如,当沿着宽度维度水平遍历激活数据输入矩阵的分配部分时,确定是否存在激活数据输入矩阵的分配部分的附加列。类似地,当沿着激活数据输入矩阵的分配部分的高度维度垂直遍历时,确定是否存在附加行。在激活数据输入矩阵的分配部分的附加数据输入待被处理的情况下,则处理进行到611。在没有附加数据输入待被处理的情况下,则处理结束。
在611,准备好使用增量数据输入的数据输入向量,并将其加载到通道卷积处理器单元的向量单元中。例如,加载对应于激活数据输入矩阵的分配部分的下一列(或行)数据的增量数据。当沿着宽度维度水平遍历时,激活数据输入矩阵的分配部分的附加列被加载。类似地,当沿着高度维度垂直遍历时,激活数据输入矩阵的分配部分的附加行被加载。该增量数据与从601或611的前一次迭代加载的数据一起用于准备输入数据向量。例如,当水平遍历时,来自前一次迭代的第二列和第三列的数据被移位到第一列和第二列,并与新加载的第三列组合以创建新的数据输入向量。新的数据输入向量对应于水平移位激活数据输入矩阵的子矩阵切片。在一些实施例中,新的数据输入向量对应于沿着宽度维度滑动激活数据的相关卷积矩阵。类似地,当垂直遍历时,来自前一次迭代的第二行和第三行的数据被移位到第一行和第二行,并与新加载的第三行组合以创建新的数据输入向量。新的数据输入向量对应于垂直移位激活数据输入矩阵的子矩阵切片。在一些实施例中,新的数据输入向量对应于沿着高度维度滑动激活数据的相关卷积矩阵。在各种实施例中,只有数据输入的初始集合需要加载整个数据元素矩阵,并且在601执行。在611,仅需要增量数据元素。
在各种实施例中,对应于所分配的激活数据输入矩阵的新子矩阵的新数据输入向量被加载到对应的向量单元。现有的权重输入向量可以被重复使用,因为相应的通道维度没有改变。通过仅加载新的增量激活数据并重复使用权重数据元素,在执行卷积运算时,实现了显著的性能提高。
图7是示出用于执行卷积运算的示例激活数据输入矩阵的示意图。在所示的示例中,三维激活数据输入矩阵701包括三维子矩阵703和705。在一些实施例中,使用激活数据输入矩阵701以及一组二维权重矩阵来执行卷积运算。在一些实施例中,激活数据输入矩阵701可以是更大的三维矩阵(未示出)的一部分。激活数据输入矩阵701包括宽度维度、高度维度和通道维度。对应的二维权重矩阵可以包括与激活数据输入矩阵701的通道一样多的权重矩阵。
在一些实施例中,激活数据输入矩阵701的一部分被分配给用于执行部分卷积运算的处理元件。例如,可以将垂直或水平部分分配给不同的处理元件,以使用图5和/或图6的过程来执行卷积运算。与所分配的部分相关联的通道的数量基于通道卷积处理器单元的向量单元的数量。例如,具有32个向量单元的通道卷积处理器单元可以处理包括32个通道的激活数据输入矩阵701的三维部分。在一些实施例中,三维子矩阵703和705具有与相关联的二维权重矩阵相同的宽度维度和高度维度,以及与通道卷积处理器单元的向量单元数量相同的通道维度。例如,三维子矩阵703和705可以各自具有维度3x3x32。在一些实施例中,子矩阵703和705表示通道卷积处理器单元可以在一次迭代(或循环)期间处理的数据元素。随后的迭代(或循环)通过沿着激活数据输入矩阵701的宽度维度或高度维度水平或垂直滑动用作卷积参数的三维子矩阵(但保持相同的通道),来处理附加的数据元素列(或行)。子矩阵703和705只是通道卷积处理器单元的可能的卷积参数的两个示例。在一些实施例中,子矩阵703表示处理元件的通道卷积处理器单元的数据输入的初始集合,并且子矩阵705表示不同处理元件的数据输入的后续集合。在一些实施例中,对于每个相应分配的处理元件,在图6的601准备子矩阵703,并且在图6的611准备子矩阵705。在各种实施例中,通道卷积处理器单元是图1的通道卷积处理器单元107和/或图4的通道卷积处理器单元400。
在各种实施例中,子矩阵703和705由数据输入单元(例如图1的数据输入单元103和/或图2的数据输入单元200)准备好,作为通道卷积处理器单元的参数。通过将特定通道的二维矩阵线性化为针对通道卷积处理器单元的向量单元的一维向量,子矩阵的每个通道可以由数据输入单元转换为对应的数据输入向量。在各种实施例中,使用通道优先布局存储激活数据输入矩阵701以及子矩阵703和705,并且使用通道优先布局存储器读取来检索子矩阵703和705。例如,子矩阵的宽度、高度和通道位置(1,1,1)处的数据元素被存储为与同一子矩阵的宽度、高度和通道位置(1,1,2)处的数据元素相邻,并且这两个数据元素可以用单次存储器读取和/或缓存行存储器读取一起被读取。对于32个数据元素的缓存行,数据元素(1,1,1)至(1,1,32)可以在单次存储器读取中被读取。后续读取可以加载同一子矩阵的宽度、高度和通道位置(1,2,1)至(1,2,32)处的数据元素。在各种实施例中,每个存储器读取将对应的数据元素存储在数据输入向量寄存器中,例如图2的数据输入向量寄存器201、203、205、207或209。一旦从存储器中加载了数据元素,就可以将同一通道的对应元素准备成数据输入向量。
图8是示出用于执行卷积运算的示例权重矩阵组的示意图。在所示的示例中,二维权重矩阵801、803、805、807和809组成一组权重矩阵,用于执行与激活数据输入矩阵(例如图7的激活数据输入矩阵701)的卷积运算。权重矩阵的总数可以匹配适用的激活数据输入矩阵的通道维度。(在数量上匹配向量单元的数量和卷积数据参数的通道深度的)权重矩阵的子集(例如图7的子矩阵703和705)被用作通道卷积处理器单元的对应卷积权重参数。在所示的示例中,每个权重矩阵801、803、805、807和809的宽度维度和高度维度匹配每个三维卷积数据矩阵参数(例如图7的子矩阵703和705)的宽度维度和高度维度。例如,在一些实施例中,32个二维权重矩阵中的每一个都具有维度3x3x1,以与具有维度3x3x32的三维卷积数据矩阵一起使用。
在各种实施例中,权重矩阵801、803、805、807和809由权重输入单元(例如图1的权重输入单元105和/或图3的权重输入单元300)准备好,以作为通道卷积处理器单元的参数。通过将二维权重矩阵线性化为通道卷积处理器单元的向量单元的一维向量,每个权重矩阵可以由权重输入单元转换为对应的权重输入向量。在各种实施例中,使用深度优先布局来存储和检索权重矩阵801、803、805、807和809。例如,权重矩阵801、803、805和807的宽度和高度位置(1,1)处的数据元素彼此相邻存储,并且可以用单次存储器读取和/或缓存行存储器读取一起被读取。后续读取可以加载权重矩阵801、803、805和807的宽度和高度位置(1,2)处的数据元素。在各种实施例中,每次存储器读取将对应的数据元素存储在权重输入向量寄存器中,例如图3的权重输入向量寄存器301、303、305、307或309。一旦从存储器加载了数据元素,同一权重矩阵的对应元素就可以被准备好作为权重输入向量。权重矩阵809的数据元素可以通过任意数量的附加权重矩阵与权重矩阵801、803、805和807的数据元素分离。
图9是示出用于执行通道卷积运算的示例权重矩阵的示意图。在图9中,权重矩阵901表示权重元素的示例3x3矩阵。权重矩阵的其他维度也可能是合适的,例如1x1、5x5、7x7、9x9等。在所示示例中,与每个权重元素相关联的下标使用初始偏移从1开始的行和列表示法。对于权重矩阵901的第一行,W1,1是位于第1列的权重元素,W1,2是位于第2列的权重元素,并且W1,3是位于第3列的权重元素。在各种实施例中,权重矩阵901是图8的权重矩阵801、803、805、807或809中的一个。
在一些实施例中,权重矩阵901是用于执行通道卷积运算的输入卷积矩阵参数,并且由权重输入单元(例如图1的权重输入单元105和/或图3的权重输入单元300)准备。一旦被准备好,权重矩阵901的权重数据元素就被加载到通道卷积处理器单元的向量单元中。例如,权重输入单元可以准备好权重矩阵901作为权重输入向量,该权重输入向量作为一个向量操作数被加载到通道卷积处理器单元的向量单元。在一些实施例中,通道卷积处理器单元是图1的通道卷积处理器单元107和/或图4的通道卷积处理器单元400,并且使用图5和/或图6的过程来执行通道卷积。
图10是示出用于执行通道卷积运算的示例激活数据输入矩阵的单个通道的示意图。激活数据输入矩阵1000的维度大于其对应的权重矩阵,例如图9的权重矩阵901。在图10的示例中,仅示出了激活数据输入矩阵1000的第1-7行和第1-7列以及单个通道。激活数据输入矩阵1000的宽度和高度可以延伸超出所描绘的行和列,并且激活数据输入矩阵1000包括多个通道(未示出)。在所示的示例中,与激活数据输入矩阵1000的每个数据元素相关联的下标使用初始偏移从1开始的行和列表示法。通道维度未示出,并且激活数据输入矩阵1000的每个数据元素共享相同的通道维度。
在图10的示例中,子矩阵1001是激活数据输入矩阵1000的子矩阵,并且匹配其对应权重矩阵(例如图9的权重矩阵901)的维度。在各种实施例中,子矩阵1001和图9的权重矩阵901是卷积矩阵参数,并且可以由通道卷积处理器单元的单个向量单元使用本文描述的技术来处理。在一些实施例中,子矩阵1001是用于执行通道卷积运算的输入卷积矩阵参数,并且由数据输入单元(例如图1的数据输入单元103和/或图2的数据输入单元200)准备。一旦被准备好,子矩阵1001的数据元素就被加载到通道卷积处理器单元的向量单元中。例如,数据输入单元可以准备子矩阵1001作为数据输入向量,该数据输入向量作为一个向量操作数被加载到通道卷积处理器单元的向量单元。在一些实施例中,通道卷积处理器单元是图1的通道卷积处理器单元107和/或图4的通道卷积处理器单元400,并且使用图5和/或图6的过程来执行通道卷积。在各种实施例中,激活数据输入矩阵1000对应于图7的激活数据输入矩阵701的单个通道,并且子矩阵1001对应于图7的子矩阵703或705的单个通道。
图11是示出用于执行通道卷积运算的向量计算的示例的示意图。图11包括权重输入向量1101和数据输入向量1103。权重输入向量1101和数据输入向量1103各自包括对应于3x3矩阵的9个数据元素。在一些实施例中,权重输入向量1101对应于图9的权重矩阵901的线性化版本,并且数据输入向量1103对应于图10的子矩阵1001的线性化版本。权重输入向量1101和数据输入向量1103是被加载到通道卷积处理器单元的向量单元中的两个输入向量的示例,用于执行向量运算以确定通道卷积结果数据元素。在一些实施例中,向量单元是图1的向量单元111、121、131或141和/或图4的向量单元401、411、421或451。在各种实施例中,通道卷积处理器单元的每个向量单元加载有对应的一对输入向量。这两个输入向量对应于激活数据输入矩阵的针对该处理元件的分配部分的二维子矩阵和对应的权重矩阵。
在一些实施例中,单元格(cell)1111示出了由通道卷积处理器单元的向量单元对权重输入向量1101和数据输入向量1103的输入向量执行的等效向量计算。单元格1111中所示的向量计算结果是通过将权重输入向量1101的每个元素与数据输入向量1103的对应元素相乘而确定的结果。来自权重输入向量1101的9个元素与数据输入向量1103的9个元素相乘,以确定9个相乘结果。在所示的示例中,单元格1111包括9个相乘项,对应于9个相乘结果。图11中的箭头给出了9个相乘结果中的两个以及它们对应的操作数作为示例。箭头示出了权重元素W2,1与对应的数据元素X2,1相乘以确定相乘结果(W2,1*X2,1),以及权重元素W3,2与对应的数据元素X3,2相乘以确定相乘结果(W3,2*X3,2)。
在一些实施例中,使用向量乘法单元(例如图4的向量乘法单元403、413、423或453)来执行单元格1111中所示的相乘。在一些实施例中,相乘结果作为向量被馈送到向量加法器单元,以计算相乘结果的和。可以使用向量加法器单元(例如图4的向量加法器单元405、415、425或455)来执行向量求和。在所示的示例中,执行的向量运算的结果是单个结果和以及通道卷积结果矩阵的通道卷积结果数据元素。在一些实施例中,结果和是使用权重输入向量1101和数据输入向量1103计算的点积。结果和可以作为向量结果的一个元素被输出,并被传输到输出单元,例如图1的输出单元151。在一些实施例中,使用图1的通道卷积处理器单元107和/或图5和/或图6的过程来执行单元格1111中所示的向量计算结果的等效。在一些实施例中,在图5的507和/或图6的605处执行向量计算。
图12是示出用于执行卷积运算的激活数据输入矩阵的示例水平遍历的示意图。在所示的示例中,三维子矩阵1203是激活数据输入矩阵的被分配给处理元件的部分。子矩阵1203对应于由通道卷积处理器单元处理的数据输入的初始集合。在一些实施例中,在图6的步骤601,准备子矩阵1203并将其加载到通道卷积处理器单元。一旦确定了与子矩阵1203相关联的通道卷积结果数据元素,就通过加载增量数据输入来处理激活数据输入矩阵的附加部分。在图12的示例中,通过水平遍历激活数据输入矩阵来处理增量数据输入。垂直列1211、1213、1215、1217和1219是在确定通道卷积结果的过程中针对每次连续迭代(或循环)所处理的增量数据输入,并且对应于激活数据输入矩阵的垂直切片。在各种实施例中,用于确定通道卷积结果的过程是图5和/或图6的过程。例如,在图6的步骤611,垂直列1211、1213、1215、1217和1219中的每一个在不同的迭代期间被加载。加载和处理附加的垂直列,直到激活数据输入矩阵的分配部分没有到处理元件的附加的数据输入为止。在一些实施例中,子矩阵1203的宽度和高度是3x3,并且每个垂直列1211、1213、1215、1217和1219的对应宽度和高度是1x3。子矩阵1203和垂直列1211、1213、1215、1217和1219在通道维度上具有相同的深度,通道维度可以是缓存行或缓存行的倍数。在一些实施例中,子矩阵1203是激活数据输入矩阵的初始子矩阵,例如图7的子矩阵703。
在所示的示例中,激活数据输入矩阵被水平向右遍历,尽管向左也是可能的。当向右遍历时,每个新加载的垂直列,例如垂直列1211、1213、1215、1217和1219,作为输入数据替换前一子矩阵的最左边的列。例如,垂直列1211替换子矩阵1203的数据元素的最左边的列。加载每个新的垂直列来替换最左边的列的结果是水平滑动相关的子矩阵,以迭代地处理激活数据输入矩阵的整个分配部分。在一些实施例中,使用增量数据输入准备的子矩阵的示例是图7的子矩阵705。
图13是示出被水平遍历以执行通道卷积运算的示例激活数据输入矩阵的单个通道的示意图。激活数据输入矩阵1300是图10的激活数据输入矩阵1000,并且子矩阵1301是用于在确定了图10的子矩阵1001的通道卷积结果之后处理通道卷积结果的新子矩阵。在一些实施例中,在处理子矩阵1301之前的前一次迭代或循环期间,处理图10的子矩阵1001。例如,在图6的步骤601准备图10的子矩阵1001,并且在图6的步骤611准备子矩阵1301。部分地通过加载对应于数据元素X1,4、X2,4和X3,4的数据元素的新垂直列来准备子矩阵1301。新的数据元素替换先前子矩阵的对应于数据元素X1,1、X2,1和X3,1的最左边的列。在一些实施例中,新的垂直列是例如图12的1211的垂直列。
在各种实施例中,使用与在前一次迭代期间处理的子矩阵相同的权重矩阵来处理子矩阵1301。为了准备子矩阵1301的用于加载到通道卷积处理器单元的向量单元的对应数据元素,只需要加载数据元素的新垂直列。例如,只需要发起和执行新一列数据元素的存储器读取,因为来自剩余列的数据元素可以从先前执行的存储器读取中重复使用。在所示的示例中,对应于子矩阵1301的左边两列的元素已经在前一次迭代期间(当准备图10的子矩阵1001时)被加载。在一些实施例中,数据输入单元,例如图1的数据输入单元103和/或图2的数据输入单元200,使用来自前一次迭代的数据元素和来自新垂直列的数据元素来准备新的数据输入向量。可以使用多路复用器或其他合适的技术来选择新数据输入向量的数据元素。在一些实施例中,新垂直列的数据元素被加载到对应数据输入向量寄存器的集合中,例如图2的数据输入向量寄存器201、203、205、207或209中的一个。
图14是示出用于在激活数据输入矩阵被水平遍历时执行通道卷积运算的向量计算的示例的示意图。图14包括权重输入向量1401和数据输入向量1403。权重输入向量1401和数据输入向量1403各自包括对应于3x3矩阵的9个数据元素。在一些实施例中,权重输入向量1401对应于图9的权重矩阵901的线性化版本,并且数据输入向量1403对应于图13的子矩阵1301的线性化版本。如上面更详细描述的,图13的子矩阵1301是在水平遍历激活数据输入矩阵的分配部分之后处理的子矩阵。图13的子矩阵1301的新加载的和重复使用的数据元素都反映在数据输入向量1403中。由于激活数据输入矩阵的用于图13的子矩阵1301的数据元素与前一次迭代的子矩阵共享相同的通道,所以权重输入向量1401与前一次迭代相比不变,并且匹配图11的权重输入向量1101。
在一些实施例中,单元格1411示出了由通道卷积处理器单元的向量单元对权重输入向量1401和数据输入向量1403的输入向量执行的等效向量计算。单元格1411中所示的向量计算结果是通过将权重输入向量1401的每个元素与数据输入向量1403的对应元素相乘而确定的结果。来自权重输入向量1101的9个元素与数据输入向量1403的9个元素相乘,以确定9个相乘结果。在所示的示例中,单元格1411包括9个相乘项,对应于9个相乘结果。图14中的箭头给出了9个相乘结果中的两个以及它们对应的操作数作为示例。箭头示出了权重元素W2,1与对应的数据元素X2,2相乘以确定相乘结果(W2,1*X2,2),以及权重元素W3,2与对应的数据元素X3,3相乘以确定相乘结果(W3,2*X3,3)。
在一些实施例中,使用向量乘法单元(例如图4的向量乘法单元403、413、423或453)来执行单元格1411中所示的相乘。在一些实施例中,相乘结果作为向量被馈送到向量加法器单元,以计算相乘结果的和。可以使用向量加法器单元(例如图4的向量加法器单元405、415、425或455)来执行向量求和。在所示的示例中,执行的向量运算的结果是单个结果和以及通道卷积结果矩阵的通道卷积结果数据元素。在一些实施例中,结果和是使用权重输入向量1401和数据输入向量1403计算的点积。结果和可以作为向量结果的一个元素被输出,并被传输到输出单元,例如图1的输出单元151。在一些实施例中,使用图1的通道卷积处理器单元107和/或图5和/或图6的过程来执行单元格1411中所示的向量计算结果的等效。在一些实施例中,在图5的507和/或图6的605处执行向量计算。
图15是示出用于执行卷积运算的激活数据输入矩阵的示例垂直遍历的示意图。在所示的示例中,三维子矩阵1503是激活数据输入矩阵的被分配给处理元件的部分。子矩阵1503对应于由通道卷积处理器单元处理的数据输入的初始集合。在一些实施例中,在图6的步骤601,准备子矩阵1503并将其加载到通道卷积处理器单元。一旦确定了与子矩阵1503相关联的通道卷积结果数据元素,就通过加载增量数据输入来处理激活数据输入矩阵的附加部分。在图15的示例中,通过垂直遍历激活数据输入矩阵来处理增量数据输入。水平行1511、1513、1515、1517和1519是在确定通道卷积结果的过程中针对每次连续迭代(或循环)所处理的增量数据输入,并且对应于激活数据输入矩阵的水平切片。在各种实施例中,用于确定通道卷积结果的过程是图5和/或图6的过程。例如,在图6的步骤611,水平行1511、1513、1515、1517和1519中的每一个在不同的迭代期间被加载。加载和处理附加的水平行,直到激活数据输入矩阵的分配部分没有到处理元件的附加的数据输入为止。在一些实施例中,子矩阵1503的宽度和高度是3x3,并且每个水平行1511、1513、1515、1517和1519的对应宽度和高度是3x1。子矩阵1503和水平行1511、1513、1515、1517和1519在通道维度上具有相同的深度,通道维度可以是缓存行或缓存行的倍数。在一些实施例中,子矩阵1503是激活数据输入矩阵的初始子矩阵,例如图7的子矩阵703。
在所示的示例中,激活数据输入矩阵被垂直向下遍历,尽管向上也是可能的。当向下遍历时,每个新加载的水平行,例如水平行1511、1513、1515、1517和1519,作为输入数据替换前一子矩阵的最上面的行。例如,水平行1511替换子矩阵1503的数据元素的最上面的行。加载每个新的水平行来替换最上面的行的结果是垂直滑动相关的子矩阵,以迭代地处理激活数据输入矩阵的整个分配部分。在一些实施例中,使用增量数据输入准备的子矩阵的示例是图7的子矩阵705。
图16是示出被垂直遍历以执行通道卷积运算的示例激活数据输入矩阵的单个通道的示意图。激活数据输入矩阵1600是图10的激活数据输入矩阵1000,并且子矩阵1601是用于在确定了图10的子矩阵1001的通道卷积结果之后处理通道卷积结果的新子矩阵。在一些实施例中,在处理子矩阵1601之前的前一次迭代或循环期间,处理图10的子矩阵1001。例如,在图6的步骤601准备图10的子矩阵1001,并且在图6的步骤611准备子矩阵1601。部分地通过加载对应于数据元素X4,1、X4,2和X4,3的数据元素的新水平行来准备子矩阵1601。新的数据元素替换先前子矩阵的对应于数据元素X1,1、X1,2和X1,3的最上面的行。在一些实施例中,新的水平行是例如图15的1511的水平行。
在各种实施例中,使用与在前一次迭代期间处理的子矩阵相同的权重矩阵来处理子矩阵1601。为了准备子矩阵1601的用于加载到通道卷积处理器单元的向量单元的对应数据元素,只需要加载数据元素的新水平行。例如,只需要发起和执行新一行数据元素的存储器读取,因为来自剩余行的数据元素可以从先前执行的存储器读取中重复使用。在所示的示例中,对应于子矩阵1601的上面两行的元素已经在前一次迭代期间(当准备图10的子矩阵1001时)被加载。在一些实施例中,数据输入单元,例如图1的数据输入单元103和/或图2的数据输入单元200,使用来自前一次迭代的数据元素和来自新水平行的数据元素来准备新的数据输入向量。可以使用多路复用器或其他合适的技术来选择新数据输入向量的数据元素。在一些实施例中,新水平行的数据元素被加载到对应数据输入向量寄存器的集合中,例如图2的数据输入向量寄存器201、203、205、207或209中的一个。
图17是示出用于在激活数据输入矩阵被垂直遍历时执行通道卷积运算的向量计算的示例的示意图。图17包括权重输入向量1701和数据输入向量1703。权重输入向量1701和数据输入向量1703各自包括对应于3x3矩阵的9个数据元素。在一些实施例中,权重输入向量1701对应于图9的权重矩阵901的线性化版本,并且数据输入向量1703对应于图16的子矩阵1601的线性化版本。如上面更详细描述的,图16的子矩阵1601是在垂直遍历激活数据输入矩阵的分配部分之后处理的子矩阵。图16的子矩阵1601的新加载的和重复使用的数据元素都反映在数据输入向量1703中。由于激活数据输入矩阵的用于图16的子矩阵1601的数据元素与前一次迭代的子矩阵共享相同的通道,所以权重输入向量1701与前一次迭代相比不变,并且匹配图11的权重输入向量1101。
在一些实施例中,单元格1711示出了由通道卷积处理器单元的向量单元对权重输入向量1701和数据输入向量1703的输入向量执行的等效向量计算。单元格1711中所示的向量计算结果是通过将权重输入向量1701的每个元素与数据输入向量1703的对应元素相乘而确定的结果。来自权重输入向量1101的9个元素与数据输入向量1703的9个元素相乘,以确定9个相乘结果。在所示的示例中,单元格1711包括9个相乘项,对应于9个相乘结果。图17中的箭头给出了9个相乘结果中的两个以及它们对应的操作数作为示例。箭头示出了权重元素W2,1与对应的数据元素X3,1相乘以确定相乘结果(W2,1*X3,1),以及权重元素W3,2与对应的数据元素X4,2相乘以确定相乘结果(W3,2*X4,2)。
在一些实施例中,使用向量乘法单元(例如图4的向量乘法单元403、413、423或453)来执行单元格1711中所示的相乘。在一些实施例中,相乘结果作为向量被馈送到向量加法器单元,以计算相乘结果的和。可以使用向量加法器单元(例如图4的向量加法器单元405、415、425或455)来执行向量求和。在所示的示例中,执行的向量运算的结果是单个结果和以及通道卷积结果矩阵的通道卷积结果数据元素。在一些实施例中,结果和是使用权重输入向量1701和数据输入向量1703计算的点积。结果和可以作为向量结果的一个元素被输出,并被传输到输出单元,例如图1的输出单元151。在一些实施例中,使用图1的通道卷积处理器单元107和/或图5和/或图6的过程来执行单元格1711中所示的向量计算结果的等效。在一些实施例中,在图5的507和/或图6的605处执行向量计算。
尽管为了清楚理解的目的已经详细描述了前述实施例,但是本发明不限于所提供的细节。有许多实现本发明的替代方式。所公开的实施例是说明性的,而不是限制性的。

Claims (20)

1.一种处理器系统,包括:
第一组寄存器,其被配置为存储卷积数据矩阵的一部分的多个通道的数据元素,其中,所述第一组寄存器中的每个寄存器存储来自所述多个通道中每个通道的至少一个数据元素;
第二组寄存器,其被配置为存储多个卷积权重矩阵的数据元素,所述多个卷积权重矩阵包括所述多个通道中每个通道的独立卷积权重矩阵,其中,所述第二组寄存器中的每个寄存器存储来自所述多个卷积权重矩阵中每个卷积权重矩阵的至少一个数据元素;以及
硬件通道卷积处理器单元,其被配置为:
对于所述第一组寄存器中的每个数据元素,将所述第一组寄存器中的该数据元素与所述第二组寄存器中的对应数据元素相乘,以确定相乘结果中的对应相乘结果;以及
对于所述多个通道中的每个特定通道,将所述相乘结果中对应于该特定通道的相乘结果相加在一起,以确定对应通道卷积结果矩阵中一个对应的通道卷积结果数据元素。
2.根据权利要求1所述的系统,其中,所述第一组寄存器的存储数据元素的总计数与所述第二组寄存器的存储数据元素的总计数相同。
3.根据权利要求1所述的系统,其中,所述硬件通道卷积处理器单元包括多个计算单元,并且所述多个计算单元中的每个计算单元被配置为接收所述第一组寄存器的对应于所述卷积数据矩阵的同一通道的多个数据元素和所述第二组寄存器的对应于所述卷积数据矩阵的所述同一通道的独立卷积权重矩阵的多个对应数据元素。
4.根据权利要求3所述的系统,其中,所述多个计算单元中的每个计算单元包括不同的向量乘法单元和不同的向量加法器单元。
5.根据权利要求4所述的系统,其中,所述不同的向量加法器单元中的每一个包括不同的加法器树。
6.根据权利要求1所述的系统,其中,所述卷积数据矩阵是三维机器学习数据矩阵。
7.根据权利要求1所述的系统,还包括数据输入单元,所述数据输入单元被配置为:将存储在所述第一组寄存器中的数据元素按通道处理成多个数据输入向量,其中,所述多个数据输入向量中的每一个包括对应于所述卷积数据矩阵的二维子矩阵的数据元素。
8.根据权利要求1所述的系统,还包括权重输入单元,所述权重输入单元被配置为:将存储在所述第二组寄存器中的数据元素处理成多个权重输入向量,其中,所述多个权重输入向量中的每一个包括对应于所述多个卷积权重矩阵之一的数据元素。
9.根据权利要求1所述的系统,其中,所述多个卷积权重矩阵中的每一个是3x3矩阵、5x5矩阵、7x7矩阵、9x9矩阵或11x11矩阵。
10.根据权利要求1所述的系统,其中,存储在所述第一组寄存器中的数据元素是4位元素、8位元素、2字节元素或4字节元素。
11.根据权利要求1所述的系统,其中,所述第一组寄存器中的每个寄存器的存储数据元素的总计数是缓存行大小的倍数。
12.一种方法,包括:
接收指定卷积数据矩阵和卷积权重矩阵集合的卷积运算指令;
将所述卷积数据矩阵的不同部分分配给多个处理元件中的每一个;
将对应于所述卷积数据矩阵的不同分配部分的多个数据元素传输到所述多个处理元件中的每一个;
向所述多个处理元件中的被分配了所述卷积数据矩阵的同一通道的每个处理元件广播所述卷积权重矩阵集合的同一子集;
从所述多个处理元件接收使用所述多个处理元件的硬件通道卷积处理器单元确定的通道卷积结果矩阵的通道卷积结果数据元素;以及
将所述通道卷积结果矩阵存储到存储器位置。
13.根据权利要求12所述的方法,其中,所述卷积数据矩阵和所述通道卷积结果矩阵是使用通道优先布局格式存储的。
14.根据权利要求12所述的方法,其中,所述卷积数据矩阵是三维机器学习数据矩阵,并且所述卷积权重矩阵集合中的每个卷积权重矩阵都是二维矩阵。
15.根据权利要求12所述的方法,其中,所述多个处理元件中的每一个:
在第一组寄存器中存储所述卷积数据矩阵的一部分的多个通道的数据元素,其中,所述第一组寄存器中的每个寄存器存储来自所述多个通道中每个通道的至少一个数据元素;以及
在第二组寄存器中存储所述卷积权重矩阵集合的子集的数据元素,所述卷积权重矩阵集合包括所述多个通道中每个通道的独立卷积权重矩阵,其中,所述第二组寄存器中的每个寄存器存储来自所述卷积权重矩阵集合的每个子集的至少一个数据元素。
16.根据权利要求15所述的方法,其中,所述多个处理元件的每个硬件通道卷积处理器单元:
对于所述第一组寄存器中的每个数据元素,将所述第一组寄存器中的该数据元素与所述第二组寄存器中的对应数据元素相乘,以确定相乘结果中的对应相乘结果;以及
对于所述多个通道中的每个特定通道,将所述相乘结果中对应于该特定通道的相乘结果相加在一起,以确定对应通道卷积结果矩阵中一个对应的通道卷积结果数据元素。
17.根据权利要求16所述的方法,其中,所述多个处理元件的每个硬件通道卷积处理器单元包括多个计算单元,并且每个计算单元接收所述第一组寄存器的对应于所述卷积数据矩阵的同一通道的多个数据元素和所述第二组寄存器的对应于所述卷积数据矩阵的所述同一通道的独立卷积权重矩阵的多个对应数据元素。
18.一种方法,包括:
在硬件处理元件处,将卷积数据矩阵的第一部分的多个通道的数据元素存储在第一组寄存器中,其中,所述第一组寄存器中的每个寄存器存储来自所述多个通道中每个通道的至少一个数据元素;
在所述硬件处理元件处,将卷积权重矩阵集合的子集的数据元素存储在第二组寄存器中,所述卷积权重矩阵集合包括所述多个通道中每个通道的独立卷积权重矩阵,其中,所述第二组寄存器中的每个寄存器存储来自所述卷积权重矩阵集合的每个子集的至少一个数据元素;
对于所述第一组寄存器中的每个数据元素,将所述第一组寄存器中的该数据元素与所述第二组寄存器中的对应数据元素相乘,以确定相乘结果中的对应相乘结果;
对于所述多个通道中的每个特定通道,将所述相乘结果中对应于该特定通道的相乘结果相加在一起,以确定对应通道卷积结果矩阵中一个对应的通道卷积结果数据元素;
在所述第一组寄存器中保存在所述卷积数据矩阵的所述第一部分和所述卷积数据矩阵的第二部分之间重叠的数据元素;以及
在所述第一组寄存器中存储所述卷积数据矩阵的所述第二部分的多个通道的数据元素的三维切片,其中,所述三维切片的数据元素不同于所述卷积数据矩阵的所述第一部分的数据元素。
19.根据权利要求18所述的方法,其中,所述数据元素的三维切片是所述卷积数据矩阵的所述第二部分的垂直列或水平行。
20.根据权利要求18所述的方法,其中,所述第一组寄存器中的每个寄存器的存储数据元素的总计数是缓存行大小的倍数,并且其中,所述第一组寄存器的存储数据元素的总计数与所述第二组寄存器的存储数据元素的总计数相同。
CN202110190104.3A 2020-02-18 2021-02-18 将卷积映射到通道卷积引擎 Pending CN113344172A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/793,961 2020-02-18
US16/793,961 US11537865B2 (en) 2020-02-18 2020-02-18 Mapping convolution to a channel convolution engine

Publications (1)

Publication Number Publication Date
CN113344172A true CN113344172A (zh) 2021-09-03

Family

ID=74215747

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110190104.3A Pending CN113344172A (zh) 2020-02-18 2021-02-18 将卷积映射到通道卷积引擎

Country Status (3)

Country Link
US (1) US11537865B2 (zh)
EP (1) EP3937085A1 (zh)
CN (1) CN113344172A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114399828A (zh) * 2022-03-25 2022-04-26 深圳比特微电子科技有限公司 用于图像处理的卷积神经网络模型的训练方法

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20210056446A1 (en) * 2019-08-23 2021-02-25 Nvidia Corporation Inference accelerator using logarithmic-based arithmetic
US11886980B2 (en) 2019-08-23 2024-01-30 Nvidia Corporation Neural network accelerator using logarithmic-based arithmetic
CN117642738A (zh) * 2021-09-24 2024-03-01 英特尔公司 加速卷积的方法和装置

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6341370B1 (en) * 1998-04-24 2002-01-22 Sun Microsystems, Inc. Integration of data prefetching and modulo scheduling using postpass prefetch insertion
US20160179540A1 (en) * 2014-12-23 2016-06-23 Mikhail Smelyanskiy Instruction and logic for hardware support for execution of calculations
US11775313B2 (en) * 2017-05-26 2023-10-03 Purdue Research Foundation Hardware accelerator for convolutional neural networks and method of operation thereof
US20190392287A1 (en) * 2018-06-22 2019-12-26 Samsung Electronics Co., Ltd. Neural processor
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
US11544559B2 (en) * 2019-01-08 2023-01-03 Neuralmagic Inc. System and method for executing convolution in a neural network
CN110705687B (zh) 2019-09-05 2020-11-03 北京三快在线科技有限公司 卷积神经网络硬件计算装置及方法
US11726950B2 (en) 2019-09-28 2023-08-15 Intel Corporation Compute near memory convolution accelerator

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114399828A (zh) * 2022-03-25 2022-04-26 深圳比特微电子科技有限公司 用于图像处理的卷积神经网络模型的训练方法
CN114399828B (zh) * 2022-03-25 2022-07-08 深圳比特微电子科技有限公司 用于图像处理的卷积神经网络模型的训练方法

Also Published As

Publication number Publication date
US20210256363A1 (en) 2021-08-19
EP3937085A1 (en) 2022-01-12
US11537865B2 (en) 2022-12-27

Similar Documents

Publication Publication Date Title
EP3872713A2 (en) Mapping convolution to a partition channel convolution engine
KR102443546B1 (ko) 행렬 곱셈기
CN113344172A (zh) 将卷积映射到通道卷积引擎
EP3816824A1 (en) High throughput matrix processor with support for concurrently processing multiple matrices
CN107665126A (zh) 用于外积累加操作的处理器和方法
EP3835949A1 (en) Hardware accelerated matrix manipulation operations using processor instructions
CN113496279A (zh) 使用点对点连接的通道卷积引擎的分组卷积
EP3798927A1 (en) Memory organization for matrix processing
CN113626759A (zh) 使用低位宽点积引擎对高位宽数求和
CN114207582A (zh) 具有存储器组织器单元的三维卷积流水线
EP3940605A1 (en) Mapping convolution to connected processing elements using distributed pipelined separable convolution operations
CN113435569A (zh) 使用每通道卷积运算的流水线逐点卷积
EP3816790A1 (en) Support for different matrix multiplications by selecting adder tree intermediate results
KR20220158768A (ko) 기계 학습 가속을 위한 전력 감소
EP3783478B1 (en) Mapping convolution to a matrix processor unit
JP3808925B2 (ja) 多様な行列格納法を使用可能な連立方程式の並列処理装置および方法
CN113626760A (zh) 用于对矩阵值灵活求和的设备和方法
US20240126617A1 (en) Deep fusion of kernel execution
JP2006164307A (ja) 多様な行列格納法を使用可能な連立方程式の並列処理装置および方法
JP2006164306A (ja) 多様な行列格納法を使用可能な連立方程式の並列処理装置および方法

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