高效卷积引擎转让专利

申请号 : CN201980028372.6

文献号 : CN112236783B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 尤金·M·范伯格

申请人 : 雷哥尼公司

摘要 :

一种用于实现卷积神经网络的硬件架构。

权利要求 :

1.一种用于实现卷积神经网络的设备,所述设备包括:二维同步移位寄存器,所述二维同步移位寄存器包括数据存储元件的三乘四阵列:其中:

数据存储元件d1,1电耦合到数据存储元件d2,1,数据存储元件d2,1电耦合到数据存储元件d3,1,数据存储元件d1,2电耦合到数据存储元件d2,2,数据存储元件d2,2电耦合到数据存储元件d3,2,数据存储元件d1,3电耦合到数据存储元件d2,3,数据存储元件d2,3电耦合到数据存储元件d3,3,数据存储元件d1,4电耦合到数据存储元件d2,4,并且数据存储元件d2,4电耦合到数据存储元件d3,4,第一卷积器单元,所述第一卷积器单元包括第一多个乘法器和 其中:

乘法器 永久性电耦合到数据存储元件d1,1,乘法器 永久性电耦合到数据存储元件d1,2,乘法器 永久性电耦合到数据存储元件d1,3,乘法器 永久性电耦合到数据存储元件d2,1,乘法器 永久性电耦合到数据存储元件d2,2,乘法器 永久性电耦合到数据存储元件d2,3,乘法器 永久性电耦合到数据存储元件d3,1,乘法器 永久性电耦合到数据存储元件d3,2,并且乘法器 永久性电耦合到数据存储元件d3,3;以及第二卷积器单元,所述第二卷积器单元包括第二多个乘法器和 其中:

乘法器 永久性电耦合到数据存储元件d1,2,乘法器 永久性电耦合到数据存储元件d1,3,乘法器 永久性电耦合到数据存储元件d1,4,乘法器 永久性电耦合到数据存储元件d2,2,乘法器 永久性电耦合到数据存储元件d2,3,乘法器 永久性电耦合到数据存储元件d2,4,乘法器 永久性电耦合到数据存储元件d3,2,乘法器 永久性电耦合到数据存储元件d3,3,并且乘法器 永久性电耦合到数据存储元件d3,4,其中,在第一时钟周期的开始:

数据存储元件d1,1被配置为存储数据值x1,1,数据存储元件d1,2被配置为存储数据值x1,2,数据存储元件d1,3被配置为存储数据值x1,3,数据存储元件d1,4被配置为存储数据值x1,4,数据存储元件d2,1被配置为存储数据值x2,1,数据存储元件d2,2被配置为存储数据值x2,2,数据存储元件d2,3被配置为存储数据值x2,3,数据存储元件d2,4被配置为存储数据值x2,4,数据存储元件d3,1被配置为存储数据值x3,1,数据存储元件d3,2被配置为存储数据值x3,2,数据存储元件d3,3被配置为存储数据值x3,3,并且数据存储元件d3,4被配置为存储数据值x3,4;

其中,在所述第一时钟周期期间:乘法器 被配置为将数据值x1,1与权重w1相乘,以便生成乘积w1x1,1,乘法器 被配置为将数据值x1,2与权重w2相乘,以便生成乘积w2x1,2,乘法器 被配置为将数据值x1,3与权重w3相乘,以便生成乘积w3x1,3,乘法器 被配置为将数据值x2,1与权重w4相乘,以便生成乘积w4x2,1,乘法器 被配置为将数据值x2,2与权重w5相乘,以便生成乘积w5x2,2,乘法器 被配置为将数据值x2,3与权重w6相乘,以便生成乘积w6x2,3,乘法器 被配置为将数据值x3,1与权重w7相乘,以便生成乘积w7x3,1,乘法器 被配置为将数据值x3,2与权重w8相乘,以便生成乘积w8x3,2,乘法器 被配置为将数据值x3,3与权重w9相乘,以便生成乘积w9x3,3,乘法器 被配置为将数据值x1,2与权重w1相乘,以便生成乘积w1x1,2,乘法器 被配置为将数据值x1,3与权重w2相乘,以便生成乘积w2x1,3,乘法器 被配置为将数据值x1,4与权重w3相乘,以便生成乘积w3x1,4,乘法器 被配置为将数据值x2,2与权重w4相乘,以便生成乘积w4x2,2,乘法器 被配置为将数据值x2,3与权重w5相乘,以便生成乘积w5x2,3,乘法器 被配置为将数据值x2,4与权重w6相乘,以便生成乘积w6x2,4,乘法器 被配置为将数据值x3,2与权重w7相乘,以便生成乘积w7x3,2,乘法器 被配置为将数据值x3,3与权重w8相乘,以便生成乘积w8x3,3,并且乘法器 被配置为将数据值x3,4与权重w9相乘,以便生成乘积w9x3,4,其中,在所述第一时钟周期后的第二时钟周期之前:所述第一卷积器单元被配置为生成第一项的和,所述第一项的和包括所述乘积w1x1,1、所述乘积w2x1,2、所述乘积w3x1,3、所述乘积w4x2,1、所述乘积w5x2,2、所述乘积w6x2,3、所述乘积w7x3,1、所述乘积w8x3,2和所述乘积w9x3,3,并且所述第二卷积器单元被配置为生成第二项的和,所述第二项的和包括所述乘积w1x1,2、所述乘积w2x1,3、所述乘积w3x1,4、所述乘积w4x2,2、所述乘积w5x2,3、所述乘积w6x2,4、所述乘积w7x3,2、所述乘积w8x3,3和所述乘积w9x3,4,并且其中,在所述第一时钟周期后的所述第二时钟周期的开始:第一累加器被配置为存储所述第一项的和,并且第二累加器被配置为存储所述第二项的和。

2.如权利要求1所述的设备,其特征在于,所述第一项的和还包括b1,其中b1是偏差值。

3.如权利要求1所述的设备,其特征在于,所述第二项的和还包括b1,其中b1是偏差值。

4.一种用于实现卷积神经网络的设备,所述设备包括:二维同步移位寄存器,所述二维同步移位寄存器包括数据存储元件的四乘四阵列:其中:

数据存储元件d1,1电耦合到数据存储元件d2,1,数据存储元件d2,1电耦合到数据存储元件d3,1,数据存储元件d3,1电耦合到数据存储元件d4,1,数据存储元件d1,2电耦合到数据存储元件d2,2,数据存储元件d2,2电耦合到数据存储元件d3,2,数据存储元件d3,2电耦合到数据存储元件d4,2,数据存储元件d1,3电耦合到数据存储元件d2,3,数据存储元件d2,3电耦合到数据存储元件d3,3,数据存储元件d3,3电耦合到数据存储元件d4,3,数据存储元件d1,4电耦合到数据存储元件d2,4,数据存储元件d2,4电耦合到数据存储元件d3,4,并且数据存储元件d3,4电耦合到数据存储元件d4,4,第一卷积器单元,所述第一卷积器单元包括第一多个乘法器和 其中:

乘法器 永久性电耦合到数据存储元件d1,1,乘法器 永久性电耦合到数据存储元件d1,2,乘法器 永久性电耦合到数据存储元件d1,3,乘法器 永久性电耦合到数据存储元件d2,1,乘法器 永久性电耦合到数据存储元件d2,2,乘法器 永久性电耦合到数据存储元件d2,3,乘法器 永久性电耦合到数据存储元件d3,1,乘法器 永久性电耦合到数据存储元件d3,2,并且乘法器 永久性电耦合到数据存储元件d3,3;

第二卷积器单元,所述第二卷积器单元包括第二多个乘法器和 其中:

乘法器 永久性电耦合到数据存储元件d1,2,乘法器 永久性电耦合到数据存储元件d1,3,乘法器 永久性电耦合到数据存储元件d1,4,乘法器 永久性电耦合到数据存储元件d2,2,乘法器 永久性电耦合到数据存储元件d2,3,乘法器 永久性电耦合到数据存储元件d2,4,乘法器 永久性电耦合到数据存储元件d3,2,乘法器 永久性电耦合到数据存储元件d3,3,并且乘法器 永久性电耦合到数据存储元件d3,4;

第三卷积器单元,所述第三卷积器单元包括第三多个乘法器和 其中:

乘法器 永久性电耦合到数据存储元件d2,1,乘法器 永久性电耦合到数据存储元件d2,2,乘法器 永久性电耦合到数据存储元件d2,3,乘法器 永久性电耦合到数据存储元件d3,1,乘法器 永久性电耦合到数据存储元件d3,2,乘法器 永久性电耦合到数据存储元件d3,3,乘法器 永久性电耦合到数据存储元件d4,1,乘法器 永久性电耦合到数据存储元件d4,2,并且乘法器 永久性电耦合到数据存储元件d4,3;以及第四卷积器单元,所述第四卷积器单元包括第四多个乘法器和 其中:

乘法器 永久性电耦合到数据存储元件d2,2,乘法器 永久性电耦合到数据存储元件d2,3,乘法器 永久性电耦合到数据存储元件d2,4,乘法器 永久性电耦合到数据存储元件d3,2,乘法器 永久性电耦合到数据存储元件d3,3,乘法器 永久性电耦合到数据存储元件d3,4,乘法器 永久性电耦合到数据存储元件d4,2,乘法器 永久性电耦合到数据存储元件d4,3,并且乘法器 永久性电耦合到数据存储元件d4,4,其中,在第一时钟周期的开始:

数据存储元件d1,1被配置为存储数据值x1,1,数据存储元件d1,2被配置为存储数据值x1,2,数据存储元件d1,3被配置为存储数据值x1,3,数据存储元件d1,4被配置为存储数据值x1,4,数据存储元件d2,1被配置为存储数据值x2,1,数据存储元件d2,2被配置为存储数据值x2,2,数据存储元件d2,3被配置为存储数据值x2,3,数据存储元件d2,4被配置为存储数据值x2,4,数据存储元件d3,1被配置为存储数据值x3,1,数据存储元件d3,2被配置为存储数据值x3,2,数据存储元件d3,3被配置为存储数据值x3,3,数据存储元件d3,4被配置为存储数据值x3,4,数据存储元件d4,1被配置为存储数据值x4,1,数据存储元件d4,2被配置为存储数据值x4,2,数据存储元件d4,3被配置为存储数据值x4,3,并且数据存储元件d4,4被配置为存储数据值x4,4;

其中,在所述第一时钟周期期间:乘法器 被配置为将数据值x1,1与权重w1相乘,以便生成乘积w1x1,1,乘法器 被配置为将数据值x1,2与权重w2相乘,以便生成乘积w2x1,2,乘法器 被配置为将数据值x1,3与权重w3相乘,以便生成乘积w3x1,3,乘法器 被配置为将数据值x2,1与权重w4相乘,以便生成乘积w4x2,1,乘法器 被配置为将数据值x2,2与权重w5相乘,以便生成乘积w5x2,2,乘法器 被配置为将数据值x2,3与权重w6相乘,以便生成乘积w6x2,3,乘法器 被配置为将数据值x3,1与权重w7相乘,以便生成乘积w7x3,1,乘法器 被配置为将数据值x3,2与权重w8相乘,以便生成乘积w8x3,2,乘法器 被配置为将数据值x3,3与权重w9相乘,以便生成乘积w9x3,3,乘法器 被配置为将数据值x1,2与权重w1相乘,以便生成乘积w1x1,2,乘法器 被配置为将数据值x1,3与权重w2相乘,以便生成乘积w2x1,3,乘法器 被配置为将数据值x1,4与权重w3相乘,以便生成乘积w3x1,4,乘法器 被配置为将数据值x2,2与权重w4相乘,以便生成乘积w4x2,2,乘法器 被配置为将数据值x2,3与权重w5相乘,以便生成乘积w5x2,3,乘法器 被配置为将数据值x2,4与权重w6相乘,以便生成乘积w6x2,4,乘法器 被配置为将数据值x3,2与权重w7相乘,以便生成乘积w7x3,2,乘法器 被配置为将数据值x3,3与权重w8相乘,以便生成乘积w8x3,3,乘法器 被配置为将数据值x3,4与权重w9相乘,以便生成乘积w9x3,4,乘法器 被配置为将数据值x2,1与权重w10相乘,以便生成乘积w10x2,1,乘法器 被配置为将数据值x2,2与权重w11相乘,以便生成乘积w11x2,2,乘法器 被配置为将数据值x2,3与权重w12相乘,以便生成乘积w12x2,3,乘法器 被配置为将数据值x3,1与权重w13相乘,以便生成乘积w13x3,1,乘法器 被配置为将数据值x3,2与权重w14相乘,以便生成乘积w14x3,2,乘法器 被配置为将数据值x3,3与权重w15相乘,以便生成乘积w15x3,3,乘法器 被配置为将数据值x4,1与权重w16相乘,以便生成乘积w16x4,1,乘法器 被配置为将数据值x4,2与权重w17相乘,以便生成乘积w17x4,2,乘法器 被配置为将数据值x4,3与权重w18相乘,以便生成乘积w18x4,3,乘法器 被配置为将数据值x2,2与权重w10相乘,以便生成乘积w10x2,2,乘法器 被配置为将数据值x2,3与权重w11相乘,以便生成乘积w11x2,3,乘法器 被配置为将数据值x2,4与权重w12相乘,以便生成乘积w12x2,4,乘法器 被配置为将数据值x3,2与权重w13相乘,以便生成乘积w13x3,2,乘法器 被配置为将数据值x3,3与权重w14相乘,以便生成乘积w14x3,3,乘法器 被配置为将数据值x3,4与权重w15相乘,以便生成乘积w15x3,4,乘法器 被配置为将数据值x4,2与权重w16相乘,以便生成乘积w16x4,2,乘法器 被配置为将数据值x4,3与权重w17相乘,以便生成乘积w17x4,3,并且乘法器 被配置为将数据值x4,4与权重w18相乘,以便生成乘积w18x4,4,其中,在所述第一时钟周期后的第二时钟周期之前:所述第一卷积器单元被配置为生成第一项的和,所述第一项的和包括所述乘积w1x1,1、所述乘积w2x1,2、所述乘积w3x1,3、所述乘积w4x2,1、所述乘积w5x2,2、所述乘积w6x2,3、所述乘积w7x3,1、所述乘积w8x3,2和所述乘积w9x3,3,所述第二卷积器单元被配置为生成第二项的和,所述第二项的和包括所述乘积w1x1,2、所述乘积w2x1,3、所述乘积w3x1,4、所述乘积w4x2,2、所述乘积w5x2,3、所述乘积w6x2,4、所述乘积w7x3,2、所述乘积w8x3,3和所述乘积w9x3,4,所述第三卷积器单元被配置为生成第三项的和,所述第三项的和包括所述乘积w10x2,1、所述乘积w11x2,2、所述乘积w12x2,3、所述乘积w13x3,1、所述乘积w14x3,2、所述乘积w15x3,3、所述乘积w16x4,1、所述乘积w17x4,2和所述乘积w18x4,3,并且所述第四卷积器单元被配置为生成第四项的和,所述第四项的和包括所述乘积w10x2,2、所述乘积w11x2,3、所述乘积w12x2,4、所述乘积w13x3,2、所述乘积w14x3,3、所述乘积w15x3,4、所述乘积w16x4,2、所述乘积w17x4,3和所述乘积w18x4,4,其中,在所述第一时钟周期后的所述第二时钟周期的开始:第一累加器被配置为存储所述第一项的和,第二累加器被配置为存储所述第二项的和,第三累加器被配置为存储所述第三项的和,并且第四累加器被配置为存储所述第四项的和。

5.如权利要求4所述的设备,其特征在于,所述第一项的和还包括b1,其中b1是偏差值。

6.如权利要求4所述的设备,其特征在于,所述第二项的和还包括b1,其中b1是偏差值。

7.如权利要求4所述的设备,其特征在于,所述第三项的和还包括b2,其中b2是偏差值。

8.如权利要求4所述的设备,其特征在于,所述第四项的和还包括b2,其中b2是偏差值。

9.如权利要求1所述的设备,还包括:第三卷积器单元,所述第三卷积器单元包括第三多个乘法器和 其中:

乘法器 永久性电耦合到数据存储元件d1,1,乘法器 永久性电耦合到数据存储元件d1,2,乘法器 永久性电耦合到数据存储元件d1,3,乘法器 永久性电耦合到数据存储元件d2,1,乘法器 永久性电耦合到数据存储元件d2,2,乘法器 永久性电耦合到数据存储元件d2,3,乘法器 永久性电耦合到数据存储元件d3,1,乘法器 永久性电耦合到数据存储元件d3,2,并且乘法器 永久性电耦合到数据存储元件d3,3;以及第四卷积器单元,所述第四卷积器单元包括第四多个乘法器和 其中:

乘法器 永久性电耦合到数据存储元件d1,2,乘法器 永久性电耦合到数据存储元件d1,3,乘法器 永久性电耦合到数据存储元件d1,4,乘法器 永久性电耦合到数据存储元件d2,2,乘法器 永久性电耦合到数据存储元件d2,3,乘法器 永久性电耦合到数据存储元件d2,4,乘法器 永久性电耦合到数据存储元件d3,2,乘法器 永久性电耦合到数据存储元件d3,3,并且乘法器 永久性电耦合到数据存储元件d3,4。

说明书 :

高效卷积引擎

[0001] 相关申请
[0002] 本申请要求2018年3月13日提交的美国临时申请号62/642,578和2018年7月5日提交的美国临时申请号62/694,290的优先权。

技术领域

[0003] 本发明涉及用于卷积引擎的硬件架构,并且更特别地涉及一种向卷积引擎的计算单元(称为卷积器单元或功能单元)提供数据值的高效方式。

背景技术

[0004] 如今,神经网络(特别是卷积神经网络)被广泛用于执行图像识别/分类、对象识别/分类和图像分割。在具有众多应用(例如,自动驾驶汽车的对象识别、社交网络的面部识别等)的同时,神经网络需要密集的计算处理和频繁的存储器访问。本文描述了一种用于实现卷积神经网络的硬件架构。
[0005] US 2017/0011006(Saber等人)公开了一种处理器,包括配置为接收数据和存储数据的输入缓冲器、配置为提取与来自输入缓冲器的数据中的内核对应的内核数据的数据提取器、配置为将提取的内核数据与卷积系数相乘的乘法器、和配置为计算来自乘法器的乘法结果之和的加法器。在ACM/SIGDA国际研讨会的现场可编程门阵列FPGA’16的2016年会议记录“Going Deeper with Embedded FPGA Platform for Convolutional Neural Network”(2016年1月1日,第26‑35页,Qui等人)中描述了一种用于图像网大规模图像分类的嵌入式FPGA上的卷积神经网络(CNN)加速器设计。在2009年第20届IEEE国际会议的特定应用系统、架构和处理器的论文“A Massively Parallel  Coprocessor for 
Convolutional Neural Networks”(2009年7月1日,第53‑60页,Sankaradas等人)中描述了一种用于加速卷积神经网络(CNN)的大规模并行协处理器。

附图说明

[0006] 图1描绘了提供神经网络中的模型训练和模型应用的概述的图解。
[0007] 图2描绘了卷积运算的输入、模型参数和输出的图解,所述模型参数包括单个2维滤波器。
[0008] 图3描绘了解释使用2维滤波器进行卷积运算的计算的图解。
[0009] 图4描绘了卷积运算的输入、模型参数和输出的图解,所述模型参数包括多个2维滤波器。
[0010] 图5描绘了卷积运算的输入、模型参数和输出的图解,所述模型参数包括单个3维滤波器。
[0011] 图6描绘了解释使用3维滤波器进行卷积运算的计算的图解。
[0012] 图7描绘了卷积运算的输入、模型参数和输出的图解,所述模型参数包括多个3维滤波器。
[0013] 图8描绘了根据本发明的一个实施例的包括2‑D移位寄存器和卷积器单元阵列的卷积引擎。
[0014] 图9A至图9B描绘了根据本发明的一个实施例的将数据值加载到卷积引擎中。
[0015] 图9C至图9D描绘了根据本发明的一个实施例的将滤波器权重加载到卷积引擎中。
[0016] 图10A至图10B描绘了根据本发明的一个实施例的将零填充行加载到2‑D移位寄存器中。
[0017] 图10B至图10D描绘了根据本发明的一个实施例的将数据值加载到2‑D移位寄存器中。
[0018] 图11A和图11B描述了根据本发明的一个实施例的针对图10D中描绘的数据值的空间取向而处理两个卷积器单元。
[0019] 图11C描绘了根据本发明的一个实施例的针对图10D中描绘的数据值的空间取向而处理所有活动卷积器单元之后的所得部分和。
[0020] 图12与图10D中描绘的数据值的空间取向相比描绘了已向下移位2‑D移位寄存器的一个行之后的数据值。
[0021] 图13A至图13D描述了根据本发明的一个实施例的针对图12中描绘的数据值的空间取向而处理四个卷积器单元。
[0022] 图13E描绘了根据本发明的一个实施例的针对图12中描绘的数据值的空间取向而处理所有活动卷积器单元之后的所得部分和。
[0023] 图14A至图14B描绘了根据本发明的一个实施例的将数据值加载到卷积引擎中。
[0024] 图14C至图14D描绘了根据本发明的一个实施例的将滤波器权重加载到卷积引擎中。
[0025] 图15A至图15B描绘了根据本发明的一个实施例的将零填充行加载到2‑D移位寄存器中。
[0026] 图15B至图15D描绘了根据本发明的一个实施例的将数据值加载到2‑D移位寄存器中。
[0027] 图16A至图16B描述了根据本发明的一个实施例的针对图15D中描绘的数据值的空间取向而处理四个卷积器单元。
[0028] 图16C描绘了根据本发明的一个实施例的针对图15D中描绘的数据值的空间取向而处理所有活动卷积器单元之后的所得部分和。
[0029] 图17与图15D中描绘的数据值的空间取向相比描绘了已向下移位2‑D移位寄存器的一个行之后的数据值。
[0030] 图18A至图18B描述了根据本发明的一个实施例的针对图17中描绘的数据值的空间取向而处理四个卷积器单元。
[0031] 图18C描绘了根据本发明的一个实施例的针对图17中描绘的数据值的空间取向而处理所有活动卷积器单元之后的所得部分和。
[0032] 图19A至图19B描绘了根据本发明的一个实施例的将偏差值加载到卷积引擎中。
[0033] 图20描绘了根据本发明的一个实施例的在部分和已偏差了偏差值后的每个卷积器单元的输出。
[0034] 图21描绘了根据本发明的一个实施例的卷积器单元的内部部件。
[0035] 图22描绘了根据本发明的一个实施例的用于控制卷积运算的步幅的控制电路。
[0036] 图23描绘了根据本发明的一个实施例的包括2‑D移位寄存器和功能单元阵列的一般化卷积引擎。
[0037] 图24描绘了根据本发明的一个实施例的功能单元的内部部件。
[0038] 图25描绘了根据本发明的一个实施例的从输入通道将数据值加载到具有m列卷积器单元的卷积引擎中的三种场景,其中场景(a)示出了具有m列数据值的输入通道,场景(b)示出了具有3m‑4列数据值的输入通道,并且场景(c)示出了具有m/2列数据值的输入通道。
[0039] 图26A至图26B描绘了根据本发明的一个实施例的针对场景(a)将数据值加载到卷积引擎中。
[0040] 图27A至图27C描绘了根据本发明的一个实施例的针对场景(b)将数据值加载到卷积引擎中。
[0041] 图28描绘了根据本发明的一个实施例的针对场景(c)将数据值加载到卷积引擎中。
[0042] 图29A至图29B描绘了根据本发明的一个实施例的用于针对场景(c)将数据值加载到卷积引擎中的替代方案。
[0043] 图30描绘了根据本发明的一个实施例的作为较大系统的一个部件的卷积引擎。
[0044] 图31描绘了根据本发明的一个实施例的用于在将权重提供给卷积器单元之前解压缩滤波器权重的部件的框图。

具体实施方式

[0045] 在优选实施例的以下详细描述中,参考了形成其一部分的附图,并且在附图中通过说明的方式示出其中可实践本发明的具体实施例。应理解,在不脱离本发明的范围的情况下,可利用其他实施例并且可进行改变。与任何一个附图相关联的描述可应用于包含相似或类似部件/步骤的不同附图。
[0046] 图1描绘了提供神经网络中的训练阶段和推理阶段的概述的图解。在训练阶段,可提供输入和已知(或期望)输出对,以训练分类模型104的模型参数(也称为“权重”)。为简洁起见,在图1中仅描绘了一个输入和输出对(102、106),但实际上,许多已知的输入和输出对将用于训练分类模型104。在图1的示例中,输入102是数字矩阵(它可表示图像的像素),并且已知输出106是分类概率的向量(例如,输入图像是猫的概率是1,输入图像是狗的概率是0,并且输入图像是人的概率是0)。在一个可能的训练过程中,分类概率可由人提供(例如,人可识别输入图像描绘了猫并且相应地分配分类概率)。在模型训练过程结束时,将估计模型参数(例如,W1=1.2,W2=3.8,W3=2.7)。有时,可能存在直观的方式来解释模型参数,但很多时候可能没有直觉与模型参数相关联,并且模型参数可能仅仅是最小化给定输入集的模型的分类(或模型的分类概率)与已知分类(或已知分类概率)之间的误差的参数,同时避免“模型过度拟合”。
[0047] 在推理(或预测或前馈)阶段,具有训练参数(即,在训练阶段期间训练的参数)的分类模型104用于对一组输入进行分类。在本申请中,响应于输入108,训练分类模型104提供概率的向量的分类输出110(例如,输入图像是猫的概率是0.3,输入图像是狗的概率是0.6,并且输入图像是人的概率是0.1)。
[0048] 分类模型104的一个实施例是卷积神经网络。卷积神经网络的基本构建块是卷积运算,在图2至图7中对其进行描述。如下面进一步描述,卷积运算可指具有2维输入和2维滤波器的2维卷积运算、具有3维输入和3维滤波器的3维卷积运算等。
[0049] 图2描绘了2维卷积运算的输入、模型参数和输出的图解。在图2的示例中,输入包括2维数值矩阵(每个数字值均由“·”抽象地表示)。图2的示例中的矩阵为4×4矩阵,但其他输入可具有不同尺寸(例如,可以是100×100正方形矩阵、20×70矩形矩阵等)。稍后呈现的示例将示出输入甚至可能是3维对象。实际上,输入可以是具有数量的维度的对象。输入可代表图像的像素值,或者可代表前一卷积运算的输出。
[0050] 模型参数可包括滤波器和偏差。在图2的示例中,滤波器是3×3值矩阵(所述值也称为“权重”),而偏差是标量值。通常,会存在与每个滤波器相关联的一个偏差。图2中的示例包括一个滤波器,因此存在一个对应偏差。然而,在某些实施例中,如果存在5个滤波器,则将存在5个相关联偏差,滤波器中的每一个都有一个相关联偏差。
[0051] 卷积运算符208(缩写为“conv”)接收输入202和模型参数204、206,并且生成称为激活图或特征图的输出210。激活图的每个值都生成为输入202和滤波器204(相对于输入202的某一空间位置处)与偏差206之间的点积之和。下面在图3中更详细地描述将达到激活图210的计算。
[0052] 图3的第一行描述了激活图210的位置(x=l,y=l)处的元素的计算。如第一行所示,滤波器204的中心与输入202的位置(1,1)处的元素在空间上对齐。这种计算假设使用“零填充”,其中输入202被零的边界隐式包围。使用零填充的优点在于,当使用3×3滤波器时,输入202和输出激活图210的尺寸保持恒定。在滤波器204与输入202的与滤波器204在空间上对齐的四个值之间计算点积。然后将点积与偏差b相加,以达到激活图210的位置(1,1)处的元素。
[0053] 图3的第二行描述了激活图210的位置(1,2)处的元素的计算。如第二行所示,滤波器204的中心与输入202的位置(1,2)处的元素在空间上对齐。在滤波器204与输入202的与滤波器204在空间上对齐的六个值之间计算点积。然后将点积与偏差b相加,以达到激活图210的位置(1,2)处的元素。
[0054] 图3的第三行描述了激活图210的位置(1,3)处的元素的计算。如第三行所示,滤波器204的中心与输入202的位置(1,3)处的元素在空间上对齐。在滤波器204与输入202的与滤波器204在空间上对齐的六个值之间计算点积。然后将点积与偏差b相加,以达到激活图210的位置(1,3)处的元素。
[0055] 图3的第四行描述了激活图210的位置(4,4)处的元素的计算。如第四行所示,滤波器204的中心与输入202的位置(4,4)处的元素在空间上对齐。在滤波器204与输入202的与滤波器204在空间上对齐的这四个值之间计算点积。然后将点积与偏差b相加,以达到激活图210的位置(4,4)处的元素。通常,卷积运算包括多个移位(或对齐)、点积和偏差(或求和)步骤。在本示例中,滤波器在点积计算之间移动了1个空间位置(称为步长或步幅),但2、3等其他步长也是可能的。
[0056] 图4与图2类似,不同之处在于,存在F个滤波器404、F个偏差406和F个激活图410,而不是单个滤波器204、单个偏差206和单个激活图210。F个滤波器404、F个偏差406与F个激活图410之间的关系如下:滤波器f1、偏差b1和输入402用于计算激活图y1(与图2中的滤波器204、偏差206和输入202用于计算激活图210的方式几乎相同);滤波器f2、偏差b2和输入402用于计算激活图y2;依此类推。
[0057] 图5与图2类似,不同之处在于,使用3维输入502和3维滤波器504,而不是2维输入202和2维滤波器204。下面在图6中更详细地描述将达到激活图510的计算。尽管输入502和滤波器504是3维的,但是激活图510是2维的,如在图6的相关联描述中将变得更显而易见。
滤波器504的每个“片”(类似于输入502的“通道”)可被称为内核。在图5中,滤波器504由五个内核组成,并且输入502由五个通道组成。如果还不明显,则滤波器504的内核数(或滤波器504的“z”维度的大小)必须与输入502的内核数(或输入502的“z”维度的大小)匹配。在卷积运算期间,输入502的通道1与滤波器504的内核1对齐;输入502的通道2与滤波器504的内核2对齐;依此类推。通常,在卷积运算期间,滤波器504不会相对于z维度上的输入502平移。
[0058] 图6的第一行描述了激活图510的位置(x=l,y=l)处的元素的计算。如第一行所示,滤波器504的中心轴线506(其中中心轴平行于z轴绘制)与输入502的Z∈{1,…,5}的位置(1,1,z)处的元素在空间上对齐。在滤波器504与输入502的与滤波器504在空间上对齐的二十个值之间计算点积(每个通道4个对齐值,×5个通道)。然后将点积与偏差b相加,以达到激活图510的位置(1,1)处的元素。
[0059] 图6的第二行描述了激活图510的位置(1,2)处的元素的计算。如第二行所示,滤波器504的中心轴线506与输入502的Z∈{1,…,5}的位置(1,2,z)处的元素在空间上对齐。在滤波器504与输入502的与滤波器504在空间上对齐的三十个值之间计算点积(每个通道6个对齐值,×5个通道)。然后将点积与偏差b相加,以达到激活图510的位置(1,2)处的元素。
[0060] 图6的第三行描述了激活图510的位置(1,3)处的元素的计算。如第三行所示,滤波器504的中心轴线506与输入502的Z∈{1,…,5}的位置(1,3,z)处的元素在空间上对齐。在滤波器504与输入502的与滤波器504在空间上对齐的三十个值之间计算点积(每个通道6个对齐值,×5个通道)。然后将点积与偏差b相加,以达到激活图510的位置(1,3)处的元素。
[0061] 图6的第四行描述了激活图510的位置(4,4)处的元素的计算。如第四行所示,滤波器504的中心轴线506与输入502的Z∈{1,…,5}的位置(4,4,z)处的元素在空间上对齐。在滤波器504与输入502的与滤波器504在空间上对齐的二十个值之间计算点积(每个通道4个对齐值,×5个通道)。然后将点积与偏差b相加,以达到激活图510的位置(4,4)处的元素。
[0062] 图7与图5类似,不同之处在于,存在F个3维滤波器704、F个偏差706和F个激活图710(F>1)。而不是单个3维滤波器504、单个偏差b(505)和单个激活图510。F个3维滤波器
704、F个偏差706与F个激活图710之间的关系如下:滤波器f1、偏差b1和输入702用于计算激活图y1(与图5中的滤波器504、偏差b(505)和输入502用于计算激活图510的方式几乎相同);滤波器f2、偏差b2和输入702用于计算激活图y2;依此类推。
[0063] 下图描述了执行图7的卷积运算的硬件架构。为简单起见,许多示例假设使用两个滤波器,F=2。所述示例进一步假设使用3×3内核(即,每个内核由9个权重组成)来构造滤波器704。然而,应理解,本文描述的概念/架构可被修改为适应具有其他尺寸的内核。
[0064] 图8描绘了根据本发明的一个实施例的卷积引擎708。卷积引擎708(在图8中描绘)是卷积运算符(“conv”)708(在图7中描绘)的硬件架构。卷积引擎708可包括带有数据存储元件的阵列的2‑D移位寄存器:
[0065]
[0066] 在图8的简化示例中,所述阵列为四乘四阵列。每个数据存储元件可由多个D触发器(即,一个D触发器用来存储数据信号的每个位)形成。因此,如果数据存储元件d1,1要存储八个位,则可由八个D触发器形成d1,1。成对的数据存储元件之间的每个箭头表示电连接(即,可实现为导线)。例如,数据存储元件d1,1(参考编号802)可经由电连接804电耦合到存储元件d2,1(参考编号802)。此外,箭头可表示数据的单向流动(即,数据从数据存储元件d1,1传输到数据存储元件d2,1,而不是从d2,1传输到数据存储元件d1,1)。在随后的讨论中,第一行数据存储元件可被称为“标头”,而最后一行数据存储元件可被称为“页脚”。
[0067] 卷积引擎708还可包括卷积器单元的阵列:
[0068]
[0069] 为简洁起见,卷积器单元的阵列可称为“卷积器阵列”。在图8的简化示例中,卷积器阵列为二乘四阵列。卷积器单元CU1,2已经用附图标号806标记(以便于以后的讨论)。应理解,更典型的实施例将包含更多卷积器单元,诸如在图30的示例性实施例中的情况。在下面的附图中将详细描述2‑D移位寄存器的操作和卷积器单元的操作。
[0070] 图9A描绘了根据本发明的一个实施例的将数据值加载到卷积引擎708中。输入的每个通道可以串行方式加载到卷积引擎708中。图9A描绘了将输入702的第一通道702a加载到卷积引擎708中(假设通道在从左到右方向上从1到5编号)。如将在图10B至图10D中描述,特定通道的行可以串行方式加载到卷积引擎708中。注意,为方便起见并且关于在附图中描绘元件的方式,将使用诸如“行”和“列”等术语。然而,这些术语的含义可能会或可能不会转换为电路元件在芯片上的布局方式,其中行可被解释为列并且列可被解释为行,这取决于查看者相对于芯片的取向。
[0071] 为简单起见,描述卷积引擎的硬件架构的第一示例将处理输入通道的列数等于卷积器阵列的列数的情况。在图9B中,假设输入通道702a的列数等于卷积器阵列的列数。例如,输入通道702a可以是数据值的十乘四矩阵。图27A至图27C描述了如何处理输入通道的列数大于卷积器阵列的列数的场景。图28、图29A和图29B描述了用于处理输入通道的列数小于卷积器阵列的列数的情况的两种方案。
[0072] 通常,由于每个卷积器单元的存储器约束,卷积引擎708只能在需要保存输出(将输出复制到与卷积分离的存储位置卷积器单元——参见图30中的存储器3002)之前将其计算为一定数量连续行的数据值的卷积运算。一旦输出被保存,卷积引擎708就可继续到下一组连续行上。特别地,如果每个卷积器单元由n个累加器构成,则卷积引擎708可计算n个连续的输入行(加下面说明的两个填充行)的输出。为了简化说明,将n个连续的输入行称为数据的“水平条纹”。在图9B的简化示例中,存在两个水平条纹902a、902b(尽管应理解,实际上可能存在任何数量的水平条纹)。由于卷积器单元的存储器约束,卷积引擎708可串行地处理水平条纹。在图9B的示例中,首先处理水平条纹902a,然后处理水平条纹902b。
[0073] 由于下面将更显而易见的原因,在加载零填充行(如同水平条纹902a的第n行)之前,可加载作为外部边缘的前导行(即,要加载的水平条纹的第一行);在加载零填充行(如同水平条纹902b的第1行)之后,可加载作为外部边缘的尾随行(即,要加载的水平条纹的最后一行);在加载作为内部边缘的前导行之前,可加载数据填充行(如同水平条纹902b的第n行中);并且在加载作为内部边缘的尾随行之后,可加载数据填充行(如同水平条纹902a的第1行)。如果还不明显,则“外部边缘”是指形成输入通道外部边界的水平条纹的前导行或尾随行,而内部边缘是指不是输入通道的外部边界部分的水平条纹的前导行或尾随行。零或数据填充行的原因与3×3滤波器相关,所述滤波器需要来自感兴趣的行上方和下方的行的数据来计算卷积输出。对于5×5滤波器,将需要两个填充行(用于条纹的顶部行)和两个填充行(用于条纹的底部行),或者总共需要四个填充行。
[0074] 在图9B的特定示例中,加粗和虚线矩形内的n+2个行被加载到卷积引擎708中。n+2个行包括零填充行,水平条纹902a的n个行和数据填充行(相当于水平条纹902b的第n行)。
[0075] 图9C至图9D描绘了根据本发明的一个实施例的将滤波器权重加载到卷积引擎708。更具体地,图9C描绘了将内核704a的九个权重加载到卷积器阵列的第一行中的每个卷积器单元(即,CU1,1、CU1,2、CU1,3和CU1,4)中,并且图9D描绘了将内核704b的九个权重加载到卷积器阵列第二行中的每个卷积器单元(即,CU2,1、CU2,2、CU2,3和CU2,4)中。内核704a是滤波器f1的第一个内核,并且其权重中的每一个都标有上标“1,1”(作为(滤波器f1,内核1)的简写)。内核704b是滤波器f2的第一个内核,并且其权重中的每一个都标有上标“2,1”(作为(滤波器f2,内核1)的简写)。
[0076] 图10A至图10B描绘了将零值行加载到2‑D移位寄存器中。图10B至图10D描绘了从第一输入通道702a将数据值逐行加载到2‑D移位寄存器中以及通过2‑D移位寄存器使数据值逐行移位。数据值xn,1、xn,2、xn,3和xn,4可表示来自输入通道702a的水平条纹902a的第n行的值。数据值xn‑1,1、xn‑1,2、xn‑1,3和xn‑1,4可表示来自输入通道702a的水平条纹902a的第n‑1行的值。数据值xn‑2,1、xn‑2,2、xn‑2,3和xn‑2,4可表示来自输入通道702a的水平条纹902a的第n‑2行的值。
[0077] 在将水平条纹902a的第n行加载到第二行数据存储元件(即d2,1、d2,2、d2,3和d2,4)中之后,可激活与第二行数据存储元件相对应的第一行卷积器单元(即,CU1,1、CU1,2、CU1,3和CU1,4)。“对应”是指在卷积器单元CU1,1与数据存储元件d2,1之间、卷积器单元CU1,2与数据存储元件d2,2之间等存在逻辑对应关系。数据存储元件与卷积器单元之间的对应关系在图中通过在对应卷积器单元内绘制数据存储元件来示出。在具有大量卷积器单元的更典型实施例中,大多数卷积器单元将从其对应数据存储元件以及对应数据存储元件的八个空间邻居(即,数据存储元件邻居)接收数据值。从其中少量卷积器单元的图11A的示例性卷积引擎更难以理解这种关系。
[0078] 在图11A中以粗线绘制了活动卷积器单元,而在图11A中使用非粗线绘制了非活动卷积器单元。在一个实施例中,“活动”是指卷积器单元被通电,而“非活动”是指卷积器单元被断电以节省功率。控制器(在图22中描绘为控制器2202并且在图30中描绘为控制器3006,但是为呈现简洁起见在其他图中未描绘)可负责使卷积器单元通电和断电。一旦来自水平条纹的第n行的数据已经被加载到与一行卷积器单元相对应的数据存储元件中,控制器就可使所述行卷积器单元通电。一旦来自水平条纹的第1行的数据已经从对应于一行卷积器单元的数据存储元件中传送出去,则控制器可使所述行卷积器单元断电。
[0079] 图11A和图11B描述了针对图10D中描绘的数据值的空间取向而处理四个活动卷积器单元中的两个。尽管在两个单独附图中描述了两个卷积器单元的处理,但应理解,通常并行(即,同时)发生此类处理以便增加每个时钟周期的计算数量。
[0080] 如图11A中描绘,卷积器单元CU1,1(通常位于卷积器阵列左右边缘上的卷积器单元)从五个相邻数据存储元件接收数据和/或零值,并且从数据存储元件接收与卷积器单元CU1,1相对应的一个数据值。更具体地,卷积器单元CU1,1:
[0081] 经由电连接1100a从数据存储元件d1,1接收数据值xn‑1,1,
[0082] 经由电连接1100b从数据存储元件d1,2接收数据值xn‑1,2,
[0083] 经由电连接(未示出)从数据存储元件d2,1接收数据值xn,1,
[0084] 经由电连接1100c从数据存储元件d2,2接收数据值xn,2,
[0085] 经由电连接1100d从数据存储元件d3,1接收零值,并且
[0086] 经由电连接1100e从数据存储元件d3,2接收零值。
[0087] 为描述清楚起见,仅在需要讨论时才描述卷积器单元与数据存储元件之间的电互连(即,粗体箭头)。
[0088] 一旦已经接收到数据和/或零值 ,则卷积器单元CU1,1可计算由定义的部分和y1(其中 和
是在图9C中描绘的内核704a的九个权重中的四个),并且将部分和y1存储在卷积器单元CU1,1的累加器1102a中。累加器1102a可以是n个累加器的线性阵列的一部分,其中n是水平条纹902a内的行数。累加器1102a可被配置为存储与水平条纹的第n行相对应的部分和;累加器1102b可被配置为存储与水平条纹的第n‑1行相对应的部分和;依此类推。为解释清楚起见,注意,卷积器单元CU1,1的底部实例和卷积器单元CU1,1的顶部实例是一个且同一个卷积器单元,其中底部实例示出了顶部实例的附加细节。
[0089] 如图11B中描绘,卷积器单元CU1,2从与八个卷积器单元CU1,2相对应的八个相邻数据存储元件接收数据和/或零值,并且从与卷积器单元CU1,2相对应的数据存储元件接收一个数据值。更具体地,卷积器单元CU1,2:
[0090] 经由电连接1100f从数据存储元件d1,1接收数据值xn‑1,1,
[0091] 经由电连接1100g从数据存储元件d1,2接收数据值xn‑1,2,
[0092] 经由电连接1100h从数据存储元件d1,3接收数据值xn‑1,3,
[0093] 经由电连接1100i从数据存储元件d2,1接收数据值xn,1,
[0094] 经由电连接(未示出)从数据存储元件d2,2获得数据值xn,2,
[0095] 经由电连接1100j从数据存储元件d2,3接收数据值xn,3,
[0096] 经由电连接1100k从数据存储元件d3,1接收零值,
[0097] 经由电连接1100l从数据存储元件d3,2接收零值,并且
[0098] 经由电连接1100m从数据存储元件d3,3接收零值。
[0099] 一 旦 已 经 接 收 到 数 据 值 ,则 卷 积 器 单 元 C U 1 , 2 可 计 算 由定义的部分和y2(其中和 是在图9C中描绘的内核704a的九个权重中的六个),
并且将部分和y2存储在卷积器单元CU1,2的累加器1104a中。
[0100] CU1,3和CU1,4执行类似处理,因此为简洁起见,省略了这些计算的细节。在针对图10D所示的四个活动卷积器单元而处理数据值的空间取向结束时,计算四个部分和并且将其存储在累加器1102a、1104a、1106a和1108a中,如图11C所示。
[0101] 图12描绘了已将数据和/或零值向下移位数据存储元件的一个行并且来自水平条纹902a的第n‑2行的数据值xn‑2,1,xn‑2,2,xn‑2,3和xn‑2,4已被加载到2‑D移位寄存器中之后的2‑D移位寄存器。一旦水平条纹902a的第n行已被加载到数据存储元件d3,1、d3,2、d3,3和d3,4中,则除了CU1,1、CU1,2、CU1,3和CU1,4(如图13A所示)之外,还激活对应的卷积器单元CU2,1、CU2,2、CU2,3和CU2,4。
[0102] 图13A至图13D描述了根据本发明的一个实施例的处理八个活动卷积器单元中的四个。尽管在四个单独附图中描述了四个卷积器单元的处理,但应理解,通常并行(即,同时)发生此类处理以便增加每个时钟周期的计算数量。
[0103] 如图13A中描绘,卷积器单元CU1,1可从五个相邻数据存储元件和一个对应数据存储元件接收数据值。卷积器单元CU1,1可计算由定义的部分和y5并且将部分和y5存储在卷积器单元CU1,1的累加器1102b中。
[0104] 如图13B中描绘,卷积器单元CU1,2可从八个相邻的数据存储元件和一个对应数据存储元件接收数据值。卷积器单元CU1,2可计算由定义的部
分和y6并且将部分和y6存储在卷积器单元CU1,2的累加器1104b中。
[0105] 如图13C中描绘,卷积器单元CU1,3可从八个相邻数据存储元件和一个对应数据存储元件接收数据值。卷积器单元CU1,3可计算由定义的部
分和y7并且将部分和y7存储在卷积器单元CU1,3的累加器1106b中。
[0106] 如图13D中描绘,卷积器单元CU2,1可从五个相邻数据存储元件和一个对应数据存储元件接收数据值和/或零值。卷积器单元CU2,1然后可计算由定义的部分和y9(其中 和
是在图9D中描绘的内核704b的九个权重中的四个),并且将部分和y9存储在卷积器单元CU2,1的累加器1110a中。
[0107] CU1,4、CU2,2、CU2,3和CU2,4可执行类似处理,因此为简洁起见,省略了这些计算的细节。在针对图12所示的活动卷积器单元而处理数据值的空间取向结束时,已计算八个(附加)部分和并且将其存储在累加器1102b、1104b、1106b、1108b、1110a、1112a、1114a和1116a中,如图13E所示。
[0108] 对2‑D移位寄存器和多个卷积器单元的处理以类似的方式继续,直到水平条纹902a的第1行已经通过2D移位寄存器移位为止。此时,可将下一个输入通道的数据值和与下一个输入通道相对应的内核的参数(即,权重)加载到卷积引擎中,如图14A至图14D中描绘。
[0109] 图14A描绘了根据本发明的一个实施例的将数据值从第二输入通道702b加载到卷积引擎708中。如在图14B中更详细地描绘,第二输入通道702b可包括水平条纹904a和904b,并且水平条纹904a可以与加载水平条纹902a类似的方式加载到卷积引擎708中。
[0110] 图14C至图14D描绘了根据本发明的一个实施例的将滤波器权重加载到卷积引擎708中。更具体地,图14C描绘了将内核704a的九个权重加载到卷积器阵列的第一行中的每个卷积器单元(即,CU1,1、CU1,2、CU1,3和CU1,4)中,并且图14D描绘了将内核704b的九个权重加载到卷积器阵列的第二行中的每个卷积器单元(即,CU2,1、CU2,2、CU2,3和CU2,4)中。内核704c是滤波器f1的第二个内核,并且其权重中的每一个都标有上标“1,2”(作为(滤波器f1,内核
2)的简写)。内核704d是滤波器f2的第二个内核,并且其权重中的每一个都标有上标“2,2”(作为(滤波器f2,内核2)的简写)。
[0111] 图15A至图15B描绘了将零值行加载到2‑D移位寄存器中。图15B至图15D描绘了从第二输入通道702b到2‑D移位寄存器的数据值的逐行加载以及通过2‑D移位寄存器的数据值的逐行移位。数据值x'n,1、x'n,2、x'n,3和x'n,4可表示来自输入通道702b的水平条纹904a的第n行的值。数据值x'n‑1,1、x'n‑1,2、x'n‑1,3和x'n‑1,4可表示来自输入通道702b的水平条纹904a的第n‑1行的值。数据值x'n‑2,1、x'n‑2,2、x'n‑2,3和x'n‑2,4可表示来自输入通道702b的水平条纹904a的第n‑2行的值。在将水平条纹904a的第n行加载到第二行数据存储元件中时,可激活第一行卷积器单元(如图16A所示)。
[0112] 图16A和图16B描述了针对图15D中描绘的数据值的空间取向而处理四个活动卷积器单元中的两个。如图16A中描绘,卷积器单元CU1,1可从五个相邻数据存储元件接收数据和/或零值,并且从数据存储元件接收与卷积器单元CU1,1相对应的一个数据值。一旦已接收到数据值,卷积器单元CU1,1就可计算由 定义的部分和y13(其中 和 是在图14C中描绘的内核704b的九个权重中的四
个)。可将部分和y13与y1(先前由卷积器单元CU1,1为第n行计算的部分和)相加,并且可将新的部分和y1+y13存储在累加器1102a中。
[0113] 如图16B中描绘,卷积器单元CU1,2可从八个相邻数据存储元件接收数据和/或零值,并且从与卷积器单元CU1,2相对应的数据存储元件接收一个数据值。一旦已接收到数据值和/或零值,则卷积器单元CU12可计算由定义的部分和y14(其
中 和 是在图14C中描绘的内核704b的九个权重中的四
个)。可将部分和y14与y2(先前由卷积器单元CU1,2为第n行计算的部分和)相加,并且可将新的部分和y2+y14存储在累加器1104a中。
[0114] CU1,3和CU1,4执行类似处理,因此为简洁起见,省略了这些计算的细节。在针对图15D所示的四个活动卷积器单元而处理数据值的空间取向结束时,已计算四个部分和并且将其存储在累加器1102a、1104a、1106a和1108a中,如图16C所示。
[0115] 图17描绘了已将数据和/或零值向下移位数据存储元件的一个行并且来自水平条纹904a的第n‑2行的数据值x'n‑2,1、x'n‑2,2、x'n‑2,3和x'n‑2,4已被加载到2‑D移位寄存器中之后的2‑D移位寄存器。一旦水平条纹904a的第n行已被加载到数据存储元件d3,1、d3,2、d3,3和d3,4中,则除了CU1,1、CU1,2、CU1,3和CU1,4(如图18A所示)之外,还激活对应的卷积器单元CU2,1、CU2,2、CU2,3和CU2,4。
[0116] 图18A至图18B描述了根据本发明的一个实施例的处理八个活动卷积器单元中的两个。如图18A中描绘,卷积器单元CU1,1可从五个相邻数据存储元件和一个对应数据存储元件接收数据值。卷积器单元CU1,1然后可计算由定义的部分和y17。可
将部分和y17与y5(先前由卷积器单元CU1,1为第n‑1行计算的部分和)相加,并且可将新的部分和y5+y17存储在累加器1102b中。
[0117] 如图18B中描绘,卷积器单元CU1,2可从八个相邻数据存储元件和一个对应数据存储元件接收数据值。卷积器单元CU1,2然后可计算由
[0118]定义的部分和y18。可将部分和y18与y6(先前由卷积器单元CU1,2为第n‑1行计算的部分和)相加,并且可将新的部分和y6+y18存储在累加器1104b中。
[0119] 卷积器单元CU1,3、CU1,4、CU2,1、CU2,2、CU2,3和CU2,4执行类似处理,因此为简洁起见,省略了这些计算的细节。在针对图17所示的活动卷积器单元而处理数据值的空间取向结束时,已更新八个(附加)部分和并且将其存储在累加器1102b、1104b、1106b、1108b、1110a、1112a、1114a和1116a中,如图18C所示。
[0120] 对2‑D移位寄存器和多个卷积器单元的处理以类似的方式继续,直到水平条纹904a的第1行已经通过2D移位寄存器移位为止。然后,对2‑D移位寄存器和多个卷积器单元的处理以类似方式继续,直到已以与前两个输入通道类似的方式处理所有其余输入通道为止。
[0121] 此时(或在所述过程的早期),可将偏差值加载到卷积器单元中。更具体地,图19A描绘了将偏差值b1加载到卷积器单元(CU1,1、CU1,2、CU1,3和CU1,4)的第一行中,并且图19B描绘了将偏差值b2加载到卷积器单元(CU2,1、CU2,2、CU2,3和CU2,4)的第二行中。由第一行卷积器单元计算出的部分和可被偏差值b1偏差,并且由第二卷积器单元计算出的部分和可被偏差值b2偏差(如图20中描绘),以得到卷积运算的输出。
[0122] 在到目前为止的示例中,假设卷积器阵列的行数等于滤波器的数量。然而,这种关系并不总是成立。如果滤波器的数量小于卷积器阵列的行数,则可停用卷积器阵列的未使用的行。如果滤波器的数量大于卷积器阵列的行数,则基本上将需要重复卷积运算。例如,如果存在六个滤波器并且仅存在三行卷积器单元,则可对滤波器1‑3执行卷积运算并且将重复相同的卷积运算,不同之处在于,将滤波器1‑3替换为滤波器4‑6。
[0123] 现为卷积引擎的上述架构提供了一些动机。所述架构基本上试图在数据存储元件的扇出(与电路部件的大小相关)与每个时钟周期的计算数量(与计算速度相关)之间取得平衡。在仅最大化每个时钟周期的计算的一种极端情况下,可将2‑D移位寄存器减少为数据存储元件的三个航,其中CU1,1、CU2,1、CU3,1、…连接到相同的六个数据存储元件;CU1,2、CU2,2、CU3,2、…连线到相同的九个数据存储元件,依此类推。虽然每个时钟周期的计算将大于上述架构,但数据存储元件的扇出将大得多(需要更大的电路部件来驱动增加的输出电容)。在仅最小化扇出的另一种极端情况下,可将2‑D移位寄存器的三个连续行专门用于滤波器1,可将2‑D移位寄存器的三个连续行专门用于滤波器2,依此类推。尽管扇出将低于上述架构,但是与上述架构相比,每个时钟周期的计算数量将基本上减少三分之二。鉴于这一解释,上述架构的动机现应更加显而易见,即在数据存储元件的扇出与每个时钟周期的计算数量之间取得平衡。
[0124] 图21描绘了根据本发明的一个实施例的卷积器单元806(即,CU1,2)的内部部件。卷积器单元806可包括九个乘法器(2102a、…、2102i)。每个乘法器可电耦合到数据存储元件(即,2‑D移位寄存器的数据存储元件中的一个),并且可被配置为接收存储在对应数据存储元件中的数据值。特别地,乘法器2102a、2102b、2102c、2102d、2102e、2102f、2102g、2102h和2102i电耦合到数据存储元件d1,1、d1,2、d1,3、d2,1、d2,2、d2,3、d3,1、d3,2和d3,3,并且被配置为分别从数据存储元件2102a、2102b、2102c、2102d、2102e、2102f、2102g、2102h和2102i接收数据值x1、x2、x3、x4、x5、x6、x7、x8和x9。存储在数据存储元件中的数据值通常随每个时钟周期变化。例如,在图10C的上下文中,x1将等于xn,1,在图10D中,x1将等于xn,1,1,依此类推。相同的注释应用于其他数据值。
[0125] 乘法器中的每一个进一步被配置为接收权重。特别地,乘法器2102a、2102b、2102c、2102d、2102e、2102f、2102g、2102h和2102i被配置为分别接收权重w1、w2、w3、w4、w5、w6、w7、w8和w9。可为输入数据702的每个通道加载一组不同的权重。例如,在图9C的上下文中,w1将等于 在图14C的上下文中,w1将等于 依此类推。
[0126] 每个乘法器可将两个值相乘,以便生成两个值的乘积。特别地,乘法器2102a、2102b、2102c、2102d、2102e、2102f、2102g、2102h和2102i可将数据值x1、x2、x3、x4、x5、x6、x7、x8和x9与权重w1、w2、w3、w4、w5、w6、w7、w8和w9相乘,以便分别生成乘积w1x1、w2x2、w3x3、w4x4、w5×5、w6x6、w7x7、w8x8和w9x9。在其中在对数域中表示信号值(包括数据值和权重)的实施例中,可使用移位器和加法器来实现专用乘法器(所述专用乘法器就你不执行对数线性变换)。有关这种实现方式的更多细节,参见例如Daisuke Miyashita等人“Convolutional Neural Networks using Logarithmic Data Representation”arXiv预印本arXiv:
1603.01025,2016。因此,为清楚起见,当陈述生成了乘积时,应理解,可使用乘法器或者移位器与加法器的组合来实现这种计算。
[0127] 卷积器单元806还可包括多个加法器,并且由加法器求和的值可取决于控制信号s1。当数据值x1、…、x9来自第一输入通道702a时,可将控制信号s1设置为0,从而使输出选择器2106将零值传递给加法器2104h。在这种操作模式下,部分和w1x1+w2x2+w3x3+w4x4+w5x5+w6x6+w7x7+w8x8+w9x9被计算,并且不基于任何先前的部分和。然后根据数据值来自水平条纹的哪一行来将部分和存储在累加器1104a、1104b等中的一个中。如果数据值来自第n行,则将部分和将存储在累加器1104a中;如果数据值来自第n‑1行,则将部分和将存储在累加器1104b中;依此类推。
[0128] 当数据值x1、…、x9来自后续输入通道(例如,702b等)中的一个时,可将控制信号s1设置为1,从而使输出选择器2106将先前计算出的部分和传递给加法器2104h。特别地,如果数据值来自水平条纹的第n行,则将存储在累加器1104a中的先前计算出的部分和提供给加法器2104h;如果数据值来自第n‑1行,则将存储在累加器1104b中的先前计算出的部分和提供给加法器2104h;依此类推。
[0129] 当将控制信号s1设置为2时,输出选择器2106可被配置为将部分和从累加器传递到加法器2104j,所述加法器2104j将部分和与偏差bk相加。所得和可被存储回到从中读取部分和的累加器中。为了高效地实现,可从累加器阵列(1104a、1104b、…)读取部分和的整个矢量,将所述矢量与偏差bk相加,并且可将所述矢量(现带有偏差)存储回累加器阵列中。这种计算可实现针对图20中的CU1,2描述的偏差操作。
[0130] 还注意,在其中在对数域中表示信号值的实施例中,专用加法器(使用比较器、移位器和加法器构建)可在线性域中接收两个值(因为前面的专用乘法器执行了对数线性变换)并且在对数域中返回所得和。此类专用加法器的细节在Daisuke Miyashita等人“Convolutional Neural Networks using Logarithmic Data Representation”arXiv预印本arXiv:1603,01025,2016中找到。
[0131] 接收九个数据值(和九个权重)的任何卷积器单元可具有与卷积器单元CU1,2类似的硬件架构,并且因此为简洁起见不作描述。对于接收少于九个数据值的卷积器单元,硬件架构可能仍与卷积器单元CU1,2的硬件架构类似,不同之处在于,乘法器的某些输入可硬接线到零值(可将数据输入或权重设置为零值)。例如,由于CU1,1不接收数据值x1、x4和x7,因此可将权重w1、w4和w7设置为零。在另一个实施例中,甚至可省略一些乘法器。例如,由于CU1,1不接收数据值x1、x4和x7,因此可省略乘法器2102a、2102d和2102g。
[0132] 在本发明的一个实施例中,所有九个乘法器(或其在对数域中的等价物)和九个加法器(或其在对数域中的等价物)的计算全部在一个时钟周期内进行。即,如果在第n个时钟周期将数据值存储在九个数据存储元件中,那么在第n+1个时钟周期将部分和存储在累加器中。此外,为了增加吞吐量,可在存储部分和的同时在第n+1个时钟周期将新数据值存储在九个数据存储元件中。因此,可在每个时钟周期期间执行新部分和的计算。
[0133] 现提供关于如何使用硬件架构来设置卷积运算的步幅的细节。回想一下,步幅(或步长)是滤波器在点积运算之间移位的像素数或数据值。图22示出了可通过将卷积器单元的每个奇数行和每个奇数列设置为活动并且将卷积器单元的每个偶数行和每个偶数列设置为非活动(借助于由控制器2202提供的控制信号)可来实现2的步幅。可设置其他步幅值的方式应显而易见。如果步幅为3,则可将第3x+1行(x∈{0,1,2,…})卷积器单元和3x+1列(x∈{0,1,2,…})卷积器单元设置为活动,并且将所有其他行和列设置为非活动。甚至小于1的步幅也是可能的。例如,对于步幅为1/2的情况,可在将输入702加载到卷积引擎708中之前对其进行插值。对于
[0134]
[0135] 的2×2输入矩阵,可提供以下3×3内插矩阵作为卷积引擎708的输入,以实现1/2的步幅:
[0136]
[0137] 尽管在本示例中使用线性插值,但应理解,其他形式的插值(例如,多项式插值、样条插值等)也是可能的。
[0138] 尽管到目前为止,讨论都聚焦于卷积运算,但是卷积神经网络通常涉及其他类型的运算,诸如最大池和整流运算符。为易于理解,首先呈现了卷积器单元,但现将描述用于处理卷积神经网络中常见的其他运算类型以及卷积运算的更一般化形式的卷积器单元,称为“功能单元”。
[0139] 图23描绘了根据本发明的一个实施例的包括2‑D移位寄存器和功能单元阵列的卷积引擎2300。卷积引擎2300类似于上述卷积引擎708,不同之处在于,已用功能单元替换卷积器单元。功能单元FU1,2中的一个被标记为2302,并且其硬件架构在下面的图23中进行描述。
[0140] 图24描绘了根据本发明的一个实施例的功能单元2302的内部部件。功能单元2302与卷积器单元806之间有两个主要区别。首先,功能单元2302有能力计算和(执行最大池运算所需要)的最大值。其次,功能单元2302有能力有计算值的整流。为了计算和的最大值,可用函数选择器(2404a、…、2404i)替换卷积器单元的九个加法器(2104a、…、2104i)中的每一个。功能选择器接收控制信号s2,从而允许在加法器与比较器之间进行选择(参见图24中的插图)。在选择了加法器的情况下,大部分功能单元被变换回卷积器单元806的硬件架构,并且功能单元2302被配置为执行上述卷积运算。在选择了比较器的情况下,功能单元2302被配置为
[0141] 在控制信号s1设置为0时计算max(w1x1,w2x2,w3x3,w4x4,w5x5,w6x6,w7x7,w8x8,w9x9)并且在控制信号s1设置为1时计算max(w1x1,w2x2,w3x3,w4x4,w5x5,w6x6,w7x7,w8x8,w9x9,前一部分和)。因此,当以类似于图8至图18C的方式操作卷积引擎2302时,除选择了比较器的情况外,可计算三维滤波器(例如,f1)与三维输入体积(即,与滤波器对齐的输入量——如图6中描述)的点乘的最大值。现应显而易见的是,最大池运算符可用所选择的功能单元的比较器实现,并且可将步幅设置为等于滤波器的内核的一个维度的大小(例如,对于3×3内核,步幅将设置为3)。
[0142] 当控制信号s1设置为2时,功能单元被配置为执行整流操作。将控制信号s1设置为2使输出选择器2406将存储在一个或多个累加器1104a、1104b、…中的值提供给整流器
2408,所述整流器2408执行以下整流运算:
[0143]
[0144] 在数据值由零位(指示数据值是否为0)、符号位(指示数据值是正数还是负数)和大小(指示数据值的大小)的数据表示中,整流器2408可被配置为每当符号位指示负数时或在设置零位的情况下返回0,否则返回大小。
[0145] 当控制信号s1设置为3时,类似于卷积器单元806的操作,功能单元被配置为向存储在累加器1104a、1104b等中的数据添加偏差值。
[0146] 图25描绘了根据本发明的一个实施例的将数据值从输入通道702a加载到具有m列卷积器单元的卷积引擎中708的三种场景,其中场景(a)示出了具有m列数据值的输入通道702a,场景(b)示出了具有3m‑4列数据值的输入通道702a,并且场景(c)示出了具有m/2列数据值的输入通道702a。场景(a)先前在图9B中进行了描述,但将在图26A至图26B中进行更全面的讨论。场景(b)讨论了一个示例,其中输入通道702a的列数大于卷积器阵列的列数。场景(c)讨论了一个示例,其中输入通道702a的列数小于卷积器阵列的列数。尽管更抽象地描述了卷积引擎,但应理解,卷积引擎的架构可能与先前描述的示例类似,具有2‑D移位寄存器和卷积器阵列。
[0147] 图26A描绘了将零填充行、水平条纹902a和数据填充行(与水平条纹902b的第n行相对应)加载到卷积引擎708中。(如果还不明显,则粗体虚线矩形表示输入通道702a的被加载到卷积引擎708中的部分。)更具体地,零填充行首先被加载到卷积引擎708的2‑D移位寄存器中,接着是水平条纹902a的第n行,接着是横向条纹的902a的第n‑1行,…,接着是水平条纹902a的第1行,接着是数据填充行。如上所述,每当数据存储元件的行存储水平条纹的第n行时,激活与所述行数据存储元件的该行相对应的卷积器单元。每当水平条纹的第1行从数据存储元件的行中移出时,去激活与所述行数据存储元件的该行相对应的卷积器单元。
[0148] 图26B描绘了将一个数据填充行(与水平条纹902a的第1行相对应)、水平条纹902b和零填充行加载到卷积引擎708中。更具体地,数据填充行首先被加载到卷积引擎708的2‑D移位寄存器中,接着是水平条纹902b的第n行,接着是横向条纹的902b的第n‑1行,…,接着是水平条纹902b的第1行,接着是零填充行。
[0149] 尽管输入通道702a包括两个水平条纹以示出通过输入数据(概念上位于水平条纹902a与902b的边界处)的单个“水平切割线”的概念,但应理解,如果存在更多水平切割线,则输入通道将具有更多水平条纹。对于在上方和下方由其他水平条纹界定的水平条纹,将在数据填充行之前和另一个数据填充行之后加载水平条纹。
[0150] 图27A至图27C示出了需要穿过输入通道702a的“竖直切割线”的场景以及处理竖直切割线的方式。通常,只要输入通道的列数大于卷积器阵列的列数,就需要竖直切割线。本示例讨论了输入通道的列数等于3m‑4的场景,其中m是卷积器阵列的列数。只要输入通道的列数等于m‑2的倍数加二(在本示例中为真实情况),则以高效方式利用卷积器阵列(没有未使用的卷积器单元),但是如果这种关系不成立,则下面描述的概念仍然适用,但将以不太高效的方式利用卷积器阵列(将具有未使用的卷积器单元)。此外,为说明和解释清楚,在图27A至图27C的示例中未讨论水平切割线、零填充行和数据填充行。然而,预期本领域的普通技术人员将能够组合来自图26A至图26B和图27A至图27B的概念,以便处理水平切割线和竖直切割线都存在的情况。
[0151] 在图27A中,输入通道702a分为竖直条纹906a、906b和906c。从概念上讲,可想象将竖直条纹906a与竖直条纹906b分离的第一竖直切割线以及将竖直条纹906b与竖直条纹906c分离的第二竖直切割线。在高效使用卷积引擎时,内部竖直条纹(诸如906b)包含m‑2个列,而外部竖直条纹(例如,906a和906c)包含m‑1个列。图27A描绘了将m个列(包括竖直条纹
906a的m‑1个列以及一个数据填充列)加载到卷积引擎708中。最右列的卷积器(与数据填充列对齐)是非活动的,因为这些卷积器的输出将产生将数据填充列视为外部列(在当前场景中不是真实情况)的卷积输出。其余m‑1个列卷积器单元以与先前描述的卷积器单元类似的方式操作。
[0152] 图27B描绘了将m个列(包括以数据填充列在右侧和左侧界定的竖直条纹906b的m‑2个列)加载到卷积引擎708中。最左列和最右列卷积器单元(与数据填充列对齐)是非活动的,其原因与上面提供的原因类似。其余m‑2个列卷积器单元以与先前描述的卷积器单元类似的方式操作。
[0153] 图27C描绘了将m个列(包括一个数据填充列以及竖直条纹906c的m‑1个列)加载到卷积引擎708中。最左列的卷积器单元(与数据填充列对齐)是非活动的,其原因与上面提供的原因类似。卷积器单元的其余m‑1个列以与先前描述的卷积器单元类似的方式操作。
[0154] 图28描述了其中输入通道702a的列数等于m/2的场景,其中m是卷积引擎的列数。对于图28的示例,假设变量m为偶数,但其通常不必是偶数。只要输入通道的列数等于m的除数(在本示例中为真实情况),则以高效方式利用卷积器阵列(即,将不具有未使用的卷积器单元),但是如果这种关系不成立,则下面描述的概念仍然适用,但将以不太高效的方式利用卷积器阵列(即,将具有未使用的卷积器单元)。
[0155] 图28的示例示出了穿过卷积引擎708的“竖直切割线”的概念,其中在区域708a(包括卷积引擎的“列”的前半部分)与区域708b(包括卷积引擎“列”的后半部分)之间没有数据传输。当在卷积引擎的上下文中使用时,术语列包括2‑D移位寄存器的列和卷积单位的对应列。在概念上,可想象将区域708a与区域708b分离的竖直切割线。区域708a基本上独立于区域708b起作用,从而允许区域708a被配置为用第一组滤波器(例如,滤波器1至10)执行卷积,而区域708b被配置为用第二组滤波器执行卷积(例如,滤波器11‑20)。为解释清楚起见,选择了滤波器的数量(在每个区域中为10个),并且应理解,在两个区域中的一个或两个中可能存在不同数量的滤波器。将卷积引擎划分为独立区域(在这种情况下是2个区域,但在其他情况下可能是更多区域)允许提高卷积引擎的吞吐量(在这种情况下,吞吐量增加一倍)。
[0156] 作为具体示例,假设卷积引擎具有14列卷积器单元。滤波器1的权重将被加载在第一行卷积器单元的卷积器单元1‑7中的每一个中,而滤波器11的权重将被加载在第一行卷积器单元的卷积器单元8‑14中的每一个中。
[0157] 为了将卷积引擎708配置为以“竖直切割线”操作,区域708a的最右列中的卷积器单元将权重w3、w6和w9设置为零(无论那些来自滤波器内核的权重可能是多少),并且区域708b的最左列中的卷积器单元将权重w1、w4和w7设置为零(无论那些来自滤波器内核的权重可能是多少)。这种权重设置产生图28的插图中示出的数据流,其中区域708a的最右列中的卷积器单元不从其“右邻居”接收任何数据值,而区域708a的最右列中的卷积器单元不从其“左邻居”接收任何数据值。
[0158] 当将输入通道702a加载到卷积引擎708中时,所述输入通道702a被逐行加载到区域708a中,并且同时被逐行地加载到区域708b中。如果通过卷积引擎708进行的数据传播在概念上可被看作是在竖直方向上遍历的股票行情带,则将有一个股票行情带遍历下层区域708a,并且将有一个股票行情带遍历该下层区域708b的镜像。
[0159] 虽然图28示出了具有穿过卷积引擎的一条竖直切割线的示例,但将卷积引擎修改为具有多条竖直切割线的方式应显而易见。此外,为说明和解释清楚,在图28的示例中未讨论水平切割线、零填充行和数据填充行。然而,预期本领域的普通技术人员将能够将来自图26A至图26B和图28的概念组合在一起,以便处理水平切割线和竖直切割线都存在的情况。
[0160] 图29A至图29B说明了用于处理其中输入通道702a的列数等于m/2的场景的另一种方案,其中m是卷积引擎708的列数。所述方案涉及将穿过输入数据的水平切割线的概念(在图26A至图26B中描述)与穿过卷积器阵列的竖直切割线的概念(在图28中描述)组合。在图26A至图26B中,一个接一个地(即,串行地)处理两个水平条纹。然而,在图29A至图29B的示例中,并行地处理水平条纹908a和908b,其中在区域708a中处理水平条纹908a并且在区域
708b中处理水平条纹908b。与图28的方案相反,在区域708a和708b中填充了同一滤波器。
[0161] 由于在图29A中存在若干重叠的矩形,因此方案在图29B中在概念上被重绘,图29B更清楚地示出了被加载到区域708a和区域708b中的数据。如果还不明显,则注意,水平条纹908a的行1与水平条纹908b之前的数据填充行相同,并且水平条纹908a之后的数据填充行与水平条纹908b的第n行相同。
[0162] 类似于图28的方案,图29A至图29B的方案还具有使吞吐量加倍的效果。此时,由于存在两种可能的方案来处理m/2场景,因此有人可能怀疑哪种方案更优选。在图28的方案与图29A至图29B的方案之间的一个考量是滤波器的数量与输入通道的行数之间的关系。如果滤波器的数量比输入通道的行数多,则图28的方案可能是优选的,而如果输入通道的行比滤波器的数量多,则图29A至图29B的方案可能是优选的。直观地,前一种情况类似于细长的滤波器列,其中将细长的滤波器列切成两半(将一半放在区域708a中,另一半放在区域708b中)将是有利的,而后一种情况类似于细长的输入数据列,其中将细长的输入数据列切成两半并且并行地处理两半的输入数据将是有利的。
[0163] 使一种方案优于另一种方案的其他考量还可包括相对于卷积器单元行数的滤波器的数量。如果滤波器的数量小于卷积器单元的行数,则图29A至图29B的方案可能是优选的,而如果滤波器的数量大于卷积器单元的行数,则图28的方案可能是优选的。
[0164] 图30描绘了根据本发明的一个实施例的作为系统3000的一个部件的卷积引擎708。系统3000可包括存储器3002、移位和格式化模块3004、卷积引擎708和控制器3006。
[0165] 存储器3002可使用静态随机存取存储器(SRAM)来实现,并且可存储输入数据702和卷积引擎708的输出(例如,卷积输出、最大池输出、整流输出等)。
[0166] 移位和格式化模块3004是存储器3002与卷积引擎708之间的接口,并且被配置为对数据进行移位和格式化。例如,在图29A的示例中,向卷积引擎的区域708b提供水平条纹908b将是由移位和格式化模块3004执行的一项任务。实现1/2的步幅(或小于一的步幅)还可涉及移位和格式化模块3004,其中上述插值可由移位和格式化模块3004执行。
[0167] 在图30的实施例中,卷积引擎708包含更典型数量的数据存储元件和卷积器单元。图30描绘了具有卷积器单元806的64×256阵列的和数据存储元件的66×256阵列的卷积引擎,所述数据存储元件被配置为2‑D移位寄存器。与前述实施例类似,第一行卷积器单元在逻辑上与第二行数据存储元件相对应,并且最后一行卷积器单元的在逻辑上与倒数第二行数据存储元件相对应。
[0168] 控制器3006可负责执行许多上述控制操作。例如,控制器3006可提供将卷积器单元设置为活动和非活动的控制信号(且因此,上述控制器2202可以是控制器3006的一部分)。控制器3006可负责提供控制信号s1(在图21和图24中描述)来控制输出选择器2106和2406的输出。控制器3006可负责提供控制信号s2(在图24中描述),来控制功能单元被编程为输出卷积输出还是最大池输出。控制器3006可基于相对于卷积器阵列的尺寸的输入通道的尺寸来在逻辑上将输入通道划分为水平条纹和/或竖直条纹(在存在竖直和水平切割线时更适当地称为块)。控制器3006可控制移位和格式化模块3004执行必要的移位和格式化操作。控制器3006可确定哪些权重将被加载到哪些卷积器单元。控制器3006可确定是否用零值来覆写滤波器权重,以便在逻辑上将卷积引擎划分为多个独立区域(如图28、图29A和图29B中描绘)。控制器3006还可包含逻辑,所述逻辑针对将水平条纹加载到卷积引擎中而确定在水平条纹之前是零填充行还是数据填充行、或者在水平条纹之后是零填充行还是数据填充行。这些仅是可由控制器3006执行的功能的一些示例。
[0169] 图31描绘了根据本发明的一个实施例的在将权重提供给卷积器单元之前解压缩滤波器权重的权重解压缩器3100的框图。权重解压缩器3100可利用字典3102来解压缩权重。在一个实施例中,压缩的权重是查找表(字典的实施例)的密钥,并且与查找表中的密钥相对应的记录是解压缩的权重。可在逻辑上和/或物理上将256个卷积器单元分组为16个组,每个组包括16个卷积器单元。可将解压缩的权重提供给16组卷积器单元中的每一者。
[0170] 因此,已经描述了一种高效卷积引擎。在一个实施例中,所述卷积引擎包括二维移位寄存器,所述二维移位寄存器具有数据存储元件的三乘四阵列:
[0171]
[0172] 其中,在第一时刻,
[0173] 数据存储元件d1,1存储数据值x1,1,
[0174] 数据存储元件d1,2存储数据值x1,2,
[0175] 数据存储元件d1,3存储数据值x1,3,
[0176] 数据存储元件d1,4存储数据值x1,4,
[0177] 数据存储元件d2,1存储数据值x2,1,
[0178] 数据存储元件d2,2存储数据值x2,2,
[0179] 数据存储元件d2,3存储数据值x2,3,
[0180] 数据存储元件d2,4存储数据值x2,4,
[0181] 数据存储元件d3,1存储数据值x3,1,
[0182] 数据存储元件d3,2存储数据值x3,2,
[0183] 数据存储元件d3,3存储数据值x3,3,并且
[0184] 数据存储元件d3,4存储数据值x3,4。
[0185] 所述卷积引擎还包括具有多个第一乘法器和 的第一卷积器单元,其中:
[0186] 乘法器 电耦合到数据存储元件d1,1,并且被配置为将数据值x1,1与权重w1相乘,以便生成乘积w1x1,1,
[0187] 乘法器 电耦合到数据存储元件d1,2,并且被配置为将数据值x1,2与权重w2相乘,以便生成乘积w2x1,2,
[0188] 乘法器 电耦合到数据存储元件d1,3,并且被配置为将数据值x1,3与权重w3相乘,以便生成乘积w3x1,3,
[0189] 乘法器 电耦合到数据存储元件d2,1,并且被配置为将数据值x2,1与权重w4相乘,以便生成乘积w4x2,1,
[0190] 乘法器 电耦合到数据存储元件d2,2,并且被配置为将数据值x2,2与权重w5相乘,以便生成乘积w5x2,2,
[0191] 乘法器 电耦合到数据存储元件d2,3,并且被配置为将数据值x2,3与权重w6相乘,以便生成乘积w6x2,3,
[0192] 乘法器 电耦合到数据存储元件d3,1,并且被配置为将数据值x3,1与权重w7相乘,以便生成乘积w7x3,1,
[0193] 乘法器 电耦合到数据存储元件d3,2,并且被配置为将数据值x3,2与权重w8相乘,以便生成乘积w8x3,2,并且
[0194] 乘法器 电耦合到数据存储元件d3,3,并且被配置为将数据值x3,3与权重w9相乘,以便生成乘积w9x3,3。
[0195] 所述卷积引擎还包括第二卷积器单元,所述第二卷积器单元包括第二多个乘法器和 其中:
[0196] 乘法器 电耦合到数据存储元件d1,2,并且被配置为将数据值x1,2与权重w1相乘,以便生成乘积w1x1,2,
[0197] 乘法器 电耦合到数据存储元件d1,3,并且被配置为将数据值x1,3与权重w2相乘,以便生成乘积w2x1,3,
[0198] 乘法器 电耦合到数据存储元件d1,4,并且被配置为将数据值x1,4与权重w3相乘,以便生成乘积w3x1,4,
[0199] 乘法器 电耦合到数据存储元件d2,2,并且被配置为将数据值x2,2与权重w4相乘,以便生成乘积w4x2,2,
[0200] 乘法器 电耦合到数据存储元件d2,3,并且被配置为将数据值x2,3与权重w5相乘,以便生成乘积w5x2,3,
[0201] 乘法器 电耦合到数据存储元件d2,4,并且被配置为将数据值x2,4与权重w6相乘,以便生成乘积w6x2,4,
[0202] 乘法器 电耦合到数据存储元件d3,2,并且被配置为将数据值x3,2与权重w7相乘,以便生成乘积w7x3,2,
[0203] 乘法器 电耦合到数据存储元件d3,3,并且被配置为将数据值x3,3与权重w8相乘,以便生成乘积w8x3,3,并且
[0204] 乘法器 电耦合到数据存储元件d3,4,并且被配置为将数据值x3,4与权重w9相乘,以便生成乘积w9x3,4。
[0205] 在各种实施例中,所述第一卷积器单元可被配置为生成项的和,所述项包括至少所述乘积w1x1,1、所述乘积w2x1,2、所述乘积w3x1,3、所述乘积w4x2,1、所述乘积w5x2,2、所述乘积w6x2,3、所述乘积w7x3,1、所述乘积w8x3,2、所述乘积w9x3,3和b1,其中b1是偏差值。另外,所述第二卷积器单元可被配置为生成项的和,所述项包括至少所述乘积w2x1,2、所述乘积w2x1,3、所述乘积w3x1,4、所述乘积w4x2,2、所述乘积w5x2,3、所述乘积w6x2,4、所述乘积w7x3,2、所述乘积w8x3,3、所述乘积w9x3,4和B1,其中b1是偏差值。
[0206] 在一些情况下:
[0207] 数据存储元件d1,1电耦合到数据存储元件d2,1,
[0208] 数据存储元件d2,1电耦合到数据存储元件d3,1,
[0209] 数据存储元件d1,2电耦合到数据存储元件d2,2,
[0210] 数据存储元件d2,2电耦合到数据存储元件d3,2,
[0211] 数据存储元件d1,3电耦合到数据存储元件d2,3,
[0212] 数据存储元件d2,3电耦合到数据存储元件d3,3,
[0213] 数据存储元件d1,4电耦合到数据存储元件d2,4,并且
[0214] 数据存储元件d2,4电耦合到数据存储元件d3,4。
[0215] 本发明的另外的实施例提供一种包括二维移位寄存器的设备,所述二维移位寄存器具有数据存储元件的四乘四阵列:
[0216]
[0217] 其中,在第一时刻,
[0218] 数据存储元件d1,1存储数据值x1,1,
[0219] 数据存储元件d1,2存储数据值x1,2,
[0220] 数据存储元件d1,3存储数据值x1,3,
[0221] 数据存储元件d1,4存储数据值x1,4,
[0222] 数据存储元件d2,1存储数据值x2,1,
[0223] 数据存储元件d2,2存储数据值x2,2,
[0224] 数据存储元件d2,3存储数据值x2,3,
[0225] 数据存储元件d2,4存储数据值x2,4,
[0226] 数据存储元件d3,1存储数据值x3,1,
[0227] 数据存储元件d3,2存储数据值x3,2,
[0228] 数据存储元件d3,3存储数据值x3,3,
[0229] 数据存储元件d3,4存储数据值x3,4,
[0230] 数据存储元件d4,1存储数据值x4,1,
[0231] 数据存储元件d4,2存储数据值x4,2,
[0232] 数据存储元件d4,3存储数据值x4,3,并且
[0233] 数据存储元件d4,4存储数据值x4,4。
[0234] 所述设备还包括具有多个第一乘法器和 的第一卷积器单元,其中:
[0235] 乘法器 电耦合到数据存储元件d1,1,并且被配置为将数据值x1,1与权重w1相乘,以便生成乘积w1x1,1,
[0236] 乘法器 电耦合到数据存储元件d1,2,并且被配置为将数据值x1,2与权重w2相乘,以便生成乘积w2x1,2,
[0237] 乘法器 电耦合到数据存储元件d1,3,并且被配置为将数据值x1,3与权重w3相乘,以便生成乘积w3x1,3,
[0238] 乘法器 电耦合到数据存储元件d2,1,并且被配置为将数据值x2,1与权重w4相乘,以便生成乘积w4x2,1,
[0239] 乘法器 电耦合到数据存储元件d2,2,并且被配置为将数据值x2,2与权重w5相乘,以便生成乘积w5x2,2,
[0240] 乘法器 电耦合到数据存储元件d2,3,并且被配置为将数据值x2,3与权重w6相乘,以便生成乘积w6x2,3,
[0241] 乘法器 电耦合到数据存储元件d3,1,并且被配置为将数据值x3,1与权重w7相乘,以便生成乘积w7x3,1,
[0242] 乘法器 电耦合到数据存储元件d3,2,并且被配置为将数据值x3,2与权重w8相乘,以便生成乘积w8x3,2,并且
[0243] 乘法器 电耦合到数据存储元件d3,3,并且被配置为将数据值x3,3与权重w9相乘,以便生成乘积w9x3,3,
[0244] 所述设备还包括第二卷积器单元,所述第二卷积器单元包括第二多个乘法器和 其中:
[0245] 乘法器 电耦合到数据存储元件d1,2,并且被配置为将数据值x1,2与权重w1相乘,以便生成乘积w1x1,2,
[0246] 乘法器 电耦合到数据存储元件d1,3,并且被配置为将数据值x1,3与权重w2相乘,以便生成乘积w2x1,3,
[0247] 乘法器 电耦合到数据存储元件d1,4,并且被配置为将数据值x1,4与权重w3相乘,以便生成乘积w3x1,4,
[0248] 乘法器 电耦合到数据存储元件d2,2,并且被配置为将数据值x2,2与权重w4相乘,以便生成乘积w4x2,2,
[0249] 乘法器 电耦合到数据存储元件d2,3,并且被配置为将数据值x2,3与权重w5相乘,以便生成乘积w5x2,3,
[0250] 乘法器 电耦合到数据存储元件d2,4,并且被配置为将数据值x2,4与权重w6相乘,以便生成乘积w6x2,4,
[0251] 乘法器 电耦合到数据存储元件d3,2,并且被配置为将数据值x3,2与权重w7相乘,以便生成乘积w7x3,2,
[0252] 乘法器 电耦合到数据存储元件d3,3,并且被配置为将数据值x3,3与权重w8相乘,以便生成乘积w8x3,3,并且
[0253] 乘法器 电耦合到数据存储元件d3,4,并且被配置为将数据值x3,4与权重w9相乘,以便生成乘积w9x3,4;
[0254] 第三卷积器单元,所述第三卷积器单元包括第三多个乘法器和 其中:
[0255] 乘法器 电耦合到数据存储元件d2,1,并且被配置为将数据值x2,1与权重w10相乘,以便生成乘积w10x2,1,
[0256] 乘法器 电耦合到数据存储元件d2,2,并且被配置为将数据值x2,2与权重w11相乘,以便生成乘积w11x2,2,
[0257] 乘法器 电耦合到数据存储元件d2,3,并且被配置为将数据值x2,3与权重w12相乘,以便生成乘积w12x2,3,
[0258] 乘法器 电耦合到数据存储元件d3,1,并且被配置为将数据值x3,1与权重w13相乘,以便生成乘积w13x3,1,
[0259] 乘法器 电耦合到数据存储元件d3,2,并且被配置为将数据值x3,2与权重w14相乘,以便生成乘积w14x3,2,
[0260] 乘法器 电耦合到数据存储元件d3,3,并且被配置为将数据值x3,3与权重w15相乘,以便生成乘积w15x3,3,
[0261] 乘法器 电耦合到数据存储元件d4,1,并且被配置为将数据值x4,1与权重w16相乘,以便生成乘积w16x4,1,
[0262] 乘法器 电耦合到数据存储元件d4,2,并且被配置为将数据值x4,2与权重w17相乘,以便生成乘积w17x4,2,并且
[0263] 乘法器 电耦合到数据存储元件d4,3,并且被配置为将数据值x4,3与权重w18相乘,以便生成乘积w18x4,3。
[0264] 而且,所述设备包括第四卷积器单元,所述第四卷积器单元包括第四多个乘法器和 其中:
[0265] 乘法器 电耦合到数据存储元件d2,2,并且被配置为将数据值x2,2与权重w10相乘,以便生成乘积w10x2,2,
[0266] 乘法器 电耦合到数据存储元件d2,3,并且被配置为将数据值x2,3与权重w11相乘,以便生成乘积w11x2,3,
[0267] 乘法器 电耦合到数据存储元件d2,4,并且被配置为将数据值x2,4与权重w12相乘,以便生成乘积w12x2,4,
[0268] 乘法器 电耦合到数据存储元件d3,2,并且被配置为将数据值x3,2与权重w13相乘,以便生成乘积w13x3,2,
[0269] 乘法器 电耦合到数据存储元件d3,3,并且被配置为将数据值x3,3与权重w14相乘,以便生成乘积w14x3,3,
[0270] 乘法器 电耦合到数据存储元件d3,4,并且被配置为将数据值x3,4与权重w15相乘,以便生成乘积w15x3,4,
[0271] 乘法器 电耦合到数据存储元件d4,2,并且被配置为将数据值x4,2与权重w16相乘,以便生成乘积w16x4,2,
[0272] 乘法器 电耦合到数据存储元件d4,3,并且被配置为将数据值x4,3与权重w17相乘,以便生成乘积w17x4,3,并且
[0273] 乘法器 电耦合到数据存储元件d4,4,并且被配置为将数据值x4,4与权重w18相乘,以便生成乘积w18x4,4。
[0274] 在一些实施例中,此设备的所述第一卷积器单元可被配置为生成项的和,所述项包括至少所述乘积w1x1,1、所述乘积w2x1,2、所述乘积w3x1,3、所述乘积w4x2,1、所述乘积w5x2,2、所述乘积w6x2,3、所述乘积w7x3,1、所述乘积w8x3,2、所述乘积w9x3,3和b1,其中b1是偏差值。而且,所述第二卷积器单元可被配置为生成项的和,所述项包括至少所述乘积w2x1,2、所述乘积w2x1,3、所述乘积w3x1,4、所述乘积w4x2,2、所述乘积w5x2,3、所述乘积w6x2,4、所述乘积w7x3,2、所述乘积w8x3,3、所述乘积w9x3,4和B1,其中b1是偏差值。
[0275] 在又另外的实施例中,所述第三卷积器单元可被配置为生成项的和,所述项包括至少所述乘积w10x2,1、所述乘积w11x2,2、所述乘积w12x2,3、所述乘积w13x3,1、所述乘积w14x3,2、所述乘积w15x3,3、所述乘积w16x4,1、所述乘积w17x4,2、所述乘积w18x4,3和b2,其中b2是偏差值。而且,所述第四卷积器单元可被配置为生成项的和,所述项包括至少所述乘积w10x2,1、所述乘积w11x2,3、所述乘积w12x2,4、所述乘积w13x3,2、所述乘积w14x3,3、所述乘积w15x3,4、所述乘积w16x4,2、所述乘积w17x4,3、所述乘积w18x4,4和b2,其中b2是偏差值。
[0276] 在各种实施例中:
[0277] 数据存储元件d1,1电耦合到数据存储元件d2,1,
[0278] 数据存储元件d2,1电耦合到数据存储元件d3,1,
[0279] 数据存储元件d3,1电耦合到数据存储元件d4,1,
[0280] 数据存储元件d1,2电耦合到数据存储元件d2,2,
[0281] 数据存储元件d2,2电耦合到数据存储元件d3,2,
[0282] 数据存储元件d3,2电耦合到数据存储元件d4,2,
[0283] 数据存储元件d1,3电耦合到数据存储元件d2,3,
[0284] 数据存储元件d2,3电耦合到数据存储元件d3,3,
[0285] 数据存储元件d3,3电耦合到数据存储元件d4,3,
[0286] 数据存储元件d1,4电耦合到数据存储元件d2,4,
[0287] 数据存储元件d2,4电耦合到数据存储元件d3,4,并且
[0288] 数据存储元件d3,4电耦合到数据存储元件d4,4。
[0289] 本发明的又一个实施例提供了一种包括二维同步移位寄存器的设备,所述二维同步移位寄存器包括数据存储元件的p乘q阵列:
[0290]
[0291] 其中第一行数据存储元件d1,1,…,d1,q在每个时钟周期接收q个数据值,并且每行数据存储元件dk,1,…,dk,q在每个时钟周期从前一行数据存储元件dk‑1,1,…,dk‑1,q接收q个数据值,其中1
[0292] (i)CUi,j的第一输入电耦合到数据存储元件di,j‑1,
[0293] (ii)CUi,j的第二输入电耦合到数据存储元件di+1,j‑1,
[0294] (iii)CUi,j的第三输入电耦合到数据存储元件di+1,j‑1,
[0295] (iv)CUi,j的第四输入电耦合到数据存储元件ddi,j,
[0296] (v)CUi,j的第五输入电耦合到数据存储元件di+1,j,
[0297] (vi)CUi,j的第六输入电耦合到数据存储元件di+2,j,
[0298] (vii)CUi,j的第七输入电耦合到数据存储元件di,j+1,
[0299] (viii)CUi,j的第八输入电耦合到数据存储元件di+1,j+1,并且
[0300] (ix)CUi,j的第九输入端电耦合到数据存储元件di+2,j+1。
[0301] 在一些实施例中,对于卷积器单元CUi,1,1≤i≤p‑2,
[0302] (i)CUi,1的第一输入或与所述第一输入相关联的权重中的至少一个设置为逻辑零,
[0303] (ii)CUi,1的第二输入或与所述第二输入相关联的权重中的至少一个设置为逻辑零,
[0304] (iii)CUi,1的第三输入或与所述第三输入相关联的权重中的至少一个设置为逻辑零,
[0305] (iv)CUi,1的第四输入电耦合到数据存储元件di,1,
[0306] (v)CUi,1的第五输入电耦合到数据存储元件di+1,1,
[0307] (vi)CUi,1的第六输入电耦合到数据存储元件di+2,1,
[0308] (vii)CUi,1的第七输入电耦合到数据存储元件di,2,
[0309] (viii)CUi,1的第八输入电耦合到数据存储元件di+1,2,并且
[0310] (ix)CUi,1的第九输入端电耦合到数据存储元件di+2,2。
[0311] 另外,在一些实施例中,对于卷积器单元CUi,q,1≤i≤p‑2,
[0312] (i)CUi,q的第一输入电耦合到数据存储元件di,q‑1,
[0313] (ii)CUi,q的第二输入电耦合到数据存储元件di+1,q‑1,
[0314] (iii)CUi,q的第三输入电耦合到数据存储元件di+2,q‑1,
[0315] (iv)CUi,q的第四输入电耦合到数据存储元件di,q,
[0316] (v)CUi,q的第五输入电耦合到数据存储元件di+1,q,
[0317] (vi)CUi,q的第六输入电耦合到数据存储元件di+2,q,
[0318] (vii)CUi,q的第七输入或与所述第七输入相关联的权重中的至少一个设置为逻辑零,
[0319] (viii)CUi,q的第八输入或与所述第八输入相关联的权重中的至少一个设置为逻辑零,并且
[0320] (ix)CUi,q的第九输入或与所述第九输入相关联的权重中的至少一个设置为逻辑零。
[0321] 应理解,以上描述旨在是说明性的而不是限制性的。在查阅以上描述之后,许多其他实施例对于本领域技术人员将是显而易见的。因此,本发明的范围应参考所附权利要求书以及此类权利要求涵盖的等同物的全部范围来确定。