CN107563952A - 可编程二维图像处理器上的卷积神经网络 - Google Patents
可编程二维图像处理器上的卷积神经网络 Download PDFInfo
- Publication number
- CN107563952A CN107563952A CN201710532146.4A CN201710532146A CN107563952A CN 107563952 A CN107563952 A CN 107563952A CN 201710532146 A CN201710532146 A CN 201710532146A CN 107563952 A CN107563952 A CN 107563952A
- Authority
- CN
- China
- Prior art keywords
- plane
- array
- processor
- described image
- passage
- 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.)
- Granted
Links
- 238000013527 convolutional neural network Methods 0.000 title claims abstract description 66
- 238000000034 method Methods 0.000 claims abstract description 39
- 238000012545 processing Methods 0.000 claims description 44
- 238000003860 storage Methods 0.000 claims description 25
- 230000001537 neural effect Effects 0.000 claims description 8
- 238000003491 array Methods 0.000 claims description 4
- 230000007935 neutral effect Effects 0.000 claims description 3
- 238000009825 accumulation Methods 0.000 claims 1
- 238000006073 displacement reaction Methods 0.000 description 21
- 230000006870 function Effects 0.000 description 17
- 230000008569 process Effects 0.000 description 10
- 238000013461 design Methods 0.000 description 9
- 238000007792 addition Methods 0.000 description 6
- 230000000694 effects Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 235000013399 edible fruits Nutrition 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 239000011159 matrix material Substances 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000004087 circulation Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000005265 energy consumption Methods 0.000 description 2
- 125000001475 halogen functional group Chemical group 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- OFCNXPDARWKPPY-UHFFFAOYSA-N allopurinol Chemical compound OC1=NC=NC2=C1C=NN2 OFCNXPDARWKPPY-UHFFFAOYSA-N 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 208000002173 dizziness Diseases 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 238000010191 image analysis Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000011065 in-situ storage Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000007620 mathematical function Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 239000003973 paint Substances 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 238000005096 rolling process Methods 0.000 description 1
- 229920006395 saturated elastomer Polymers 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0464—Convolutional networks [CNN, ConvNet]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
- G06F17/153—Multidimensional correlation or convolution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T5/00—Image enhancement or restoration
- G06T5/20—Image enhancement or restoration by the use of local operators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/20—Image preprocessing
- G06V10/36—Applying a local operator, i.e. means to operate on image points situated in the vicinity of a given point; Non-linear local filtering operations, e.g. median filtering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/40—Extraction of image or video features
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20084—Artificial neural networks [ANN]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Biophysics (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Neurology (AREA)
- Multimedia (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Nonlinear Science (AREA)
- Image Processing (AREA)
- Complex Calculations (AREA)
Abstract
描述了一种方法,其包括在具有执行通道阵列和二维移位寄存器的图像处理器上执行卷积神经网络层。二维移位寄存器为执行通道提供局部相应的寄存器空间。卷积神经网络的执行包括将三维图像数据块的图像数据的平面加载到二维移位寄存器。执行卷积神经网络还包括通过依次进行以下步骤来执行图像数据的平面与系数值阵列的二维卷积:在执行通道内同时相乘相应的像素和系数值以产生部分乘积的阵列;在执行通道内同时将部分乘积和保存在图像数据内不同模版的二维寄存器中的部分乘积的相应累积值求和;以及通过移位二维移位寄存器阵列内的内容来实现执行通道内的二维卷积的值的对齐。
Description
技术领域
本描述一般涉及图像处理,更具体地,涉及一种二维图像处理器上的卷 积神经网络。
背景技术
图像处理通常包括处理组织成阵列的像素值。此处,在空间上组织的二 维阵列捕获图像的二维性质(附加的维度可以包括时间(例如一系列二维图 像)和数据类型(例如颜色))。在通常情况下,排列的像素值由相机提供, 相机产生一幅静止图像或是一系列帧以捕获动态图像。传统的图像处理器通 常落入两个极端之一。
第一个极端通过在通用处理器或类似通用处理器(general purpose-likeprocessor)(例如,具有向量指令增强的通用处理器)上执行软件程序来进 行图像处理任务。尽管第一个极端通常提供了高度通用的应用软件开发平 台,但其使用更细粒度的数据结构结合相关联的开销(overhead)(例如指令 提取与解码、芯片上与芯片外的数据的处理、推测执行),最终导致在程序 代码的执行期间,每单元数据消耗更大量的能量。
第二个相反的极端将固定函数硬接线(hardwired)电路应用于更大的数 据块。使用直接应用于定制设计电路的更大的(相对于细粒度的)数据块, 大大降低了每单元数据的能耗。然而,使用定制设计的固定函数电路通常导 致了该处理器所能执行的任务的有限集合。因此,第二个极端中缺乏(与第 一个极端相关联的)广泛通用的编程环境。
提供高通用应用软件开发机会结合每单元数据的改善的能效的技术平 台仍然是需要但缺乏的技术方案。
发明内容
描述了一种方法,其包括在具有执行通道阵列和二维移位寄存器的图 像处理器上执行卷积神经网络层。二维移位寄存器为执行通道提供局部 相应的寄存器空间。卷积神经网络的执行包括将三维图像数据块的图像 数据的平面加载到二维移位寄存器。执行卷积神经网络还包括通过依次进 行以下步骤来执行图像数据的平面与系数值阵列的二维卷积:在执行通道内 同时相乘相应的像素和系数值以产生部分乘积的阵列;在执行通道内同时将 部分乘积和保存在图像数据内不同模版的二维寄存器中的部分乘积的相应 累积值求和;以及通过移位二维移位寄存器阵列内的内容来实现执行通道内 的二维卷积的值的对齐。
描述了一种装置,其具有用于在图像处理器上执行卷积神经网络层的装 置,该图像处理器具有执行通道阵列和二维移位寄存器。二维移位寄存器为 执行通道提供局部相应的寄存器空间。用于执行卷积神经网络的装置包括将 三维图像数据块的图像数据的平面加载到二维移位寄存器的装置。用于执行 卷积神经网络的装置还包括用于通过依次进行以下步骤来执行图像数据的 平面与系数值阵列的二维卷积的装置:在执行通道内同时相乘相应的像素和 系数值以产生部分乘积的阵列;在执行通道内同时将部分乘积和保存在图像 数据内不同模版的二维寄存器中的部分乘积的相应累积值求和;以及通过移 位二维移位寄存器阵列内的内容来实现执行通道内的二维卷积的值的对齐。
附图说明
下面的描述和附图用于解释多种实施例。在图中:
图1示出了图像处理器硬件架构的实施例。
图2a、2b、2c、2d和2e描绘了把图像解析成线组,把线组解析表以及 在具有重叠模板的表上执行的操作;
图3a示出了模板处理器的实施例;
图3b示出了指令格式的实施例;
图4示出了在模板处理器中的数据计算单元的实施例;
图5a、5b、5c、5d、5e、5f、5g、5h、5i、5j、5k描绘了使用二维移位 阵列和执行通道(lane)阵列来确定一对具有重叠模板的邻近输出像素值;
图6示出了集成的执行通道阵列和二维移位阵列的单位单元的实施例;
图7描绘了3D卷积;
图8描绘了CNN层;
图9a描绘了使用图像系数平面的3D卷积;
图9b描绘了图像数据的两个3x3模板值和对应的系数集合的二维卷积;
图10a、10b、10c、10d、10e、10f、10g、10h、10i、10j描绘了使用图 像平面及具有系数平面的系数集的CNN层的执行;
图11a、11b、11c、11d、11e、11f、11g、11h、11i、11j描绘了两个3x3 模版的二维卷积,其中图像处理器具有二维移位寄存器;
图12示出了第一个图像处理器CNN层配置;
图13示出了第二个图像处理器CNN层配置;
图14示出了第三个图像处理器CNN层配置;
图15涉及在图像处理器上复用多个CNN层。
图16示出了在图像处理器上执行CNN层的方法。
图17示出了计算系统。
具体实施方式
a.图像处理器的硬件结构及操作
图1描绘了以硬件实现的图像处理器的架构100的实施例。该图像处理 器可以,例如,由编译器作为目标,该编译器在仿真环境里将为虚拟处理器 写入的程序代码转化为实际上由硬件处理器执行的程序代码。如图1所示, 架构100包括多个线缓冲器单元101_1到101_M(以下称为“线缓冲器”、 “线缓冲器单元”等),多个线缓冲器单元101_1到101_M通过网络104(例 如片上网络(NOC),包括片上开关网络,片上环网,或者其他类型的网络) 互连到多个模板处理器单元102_1至102_N(以下称为“模板处理器”、“模 板处理器单元”等)及对应的表生成器单元103_1至103_N(以下称为“表 生成器”,“表生成器单元”等)。在实施例中,任何线缓冲器单元可以通过 网络104连接到任何表生成器及对应的模板处理器。
在实施例中,程序代码被编译并被加载到对应的模板处理器102上,以 执行早先由软件开发者定义的图像处理操作(程序代码还可以被加载到模板 处理器的相关联的表生成器103上,例如,取决于设计与实现方式)。至少 在某些情况下,图像处理器流水线可以通过将第一个流水线级的第一个内核 程序加载到第一个模板处理器102_1中,将第二个流水线级的第二个内核程 序加载到第二个模板处理器102_2中,等等来实现。在这种情形下,第一个 内核执行流水线的第一级的函数,第二个内核执行流水线的第二级的函数, 等等,并且安装附加的控制流程方法以将输出图像数据从流水线的一个级传 送到流水线的下一级。
在其他配置中,图像处理器可以被实现为并行机,其具有操作相同内核 程序代码的两个或更多个模板处理器102_1、102_2。例如,图像数据的高密 度和高数据速率流可以通过在多个模板处理器上扩展帧来处理,这些模板处 理器中的每个模板处理器执行相同的函数。
在其他配置中,基本上内核的任何有向非循环图(directed acyclic graph,DAG)可以通过以下配置步骤被加载到硬件处理器上:配置具有它们自己相 应的程序代码的内核的相应的模板处理器,将合适的控制流程挂钩(hooks) 配置到硬件中以将输出图像从一个内核引导(direct)到DAG设计中的下一 个内核的输入。
作为一般流程,图像数据的帧由宏I/O单元105接收,并逐个帧地传送 到一个或多个线缓冲器单元101。特定的线缓冲器单元将其图像数据帧解析 到更小的图像数据区域,称为“线组(line group)”,然后通过网络104将该 线组传送到特定的表生成器。完整的或者“完全的”单个线组可以例如由帧 中多个连续完整的行或列的数据构成(为了简明起见,本说明书将主要指连 续的行)。表生成器还将图像数据的线组解析为更小的图像数据区域,称为 “表”,并把表呈现到其对应的模板处理器中。
在图像处理流水线或是具有单个输出的DAG流情况下,通常,输入帧 被引导到相同的线缓冲单元101_1,线缓冲单元101_1将图像数据解析为线 组,并将线组引导到表生成器103_1,表生成器103_1的对应的模板处理器 102_1执行流水线/DAG中第一个内核的代码。当模板处理器102_1在其所 处理的线组上的完成操作时,表生成器103_1将输出线组发送到“下游”线 缓冲器单元101_2中(在某些使用情况下,输出线组可以被发送回早先已经发送了输入线组的相同的线缓冲器单元101_1)。
然后一个或多个“消费者(consumer)”内核从下游线缓冲器单元101_2 接收由第一个模板处理器102_1生成的图像数据,该一个或多个“消费者” 内核代表在其自己的相应的其他表生成器和模板处理器(例如表生成器 103_2和模版处理器102_2)上执行的流水线/DAG中的下一级/操作。以这 种方式,在第一个模板处理器上操作的“生产者”内核将它的输出数据转发 到在第二个模板处理器上操作的“消费者”内核,其中消费者内核在生产者 内核与整体流水线或DAG的设计一致之后执行下一个任务集。
模板处理器102被设计为在图像数据的多个重叠模板上同时操作。多个 重叠模板和模板处理器的内部硬件处理容量有效地决定了表的大小。这里, 在模板处理器102中,执行通道的阵列一致地操作以同时处理由多个重叠模 板覆盖的图像数据表面区域。
如将在下面更详细描述的,在很多实施例中,图像数据的表被加载到在 模板处理器单元102内的二维寄存器阵列结构中。表和二维寄存器阵列结构 的使用被认为通过将大量的数据移到大量的寄存器空间里作为例如单个加 载操作,以有效地提供能耗的改善,该单个加载操作通过在数据上直接执行 处理任务,此后立即通过执行通道阵列来进行。此外,执行通道阵列以及对 应的寄存器列的使用提供了易于编程/配置的不同的模板尺寸。
图2a到图2e示出了以下高级实施例:线缓冲器单元101的解析活动、 表生成器单元103的更细粒度解析活动以及耦合到表生成器单元103的模版 处理器102的模版处理活动。
图2a描绘了图像数据201的输入帧的实施例。图2a还描绘了三个重叠 模版202(每个模版具有3像素x3像素的维度)的轮廓,模版处理器被设计 在三个重叠模版202上操作。每个模版相应地为输出像素产生输出图像数据, 该像素用实心黑色突出显示。简单起见,三个重叠模版202被描绘为仅在垂 直方向重叠。有必要认识到,模版处理器实际上可以被设计为在垂直和水平 方向上具有重叠模版。
因为垂直重叠模版202在模版处理器中,如图2a所示,在帧中存在大 范围(wideband)的图像数据,单个模版处理器可以对该大范围(wide band) 的图像数据进行操作。正将在下文中更详细讨论的,在实施例中,模版处理 器以在图像数据上从左到右的方式在其重叠模版内处理数据(然后以从顶部 到底部的顺序针对下一组线重复该步骤)。因此,随着模版处理器继续推进 它们的操作,实心黑色输出像素块的数目将水平向右增长(right-wise)。如 上所述,线缓冲器单元101负责从进入(incoming)帧解析输入图像数据的 线组,该帧足以让模版处理器操作达扩展数量的即将到来(upcoming)的周 期。线组的示例性描绘被示出为阴影区域203。在实施例中,线缓冲器单元 101可包括向/从表生成器发送/接收线组的不同动态。例如,根据一种称为 “全组”的模式,图像数据的完整的全宽度线在线缓冲器单元和表生成器之 间传递。根据被称为“虚拟高度”的第二种模式,线组最初通过全宽度行的 子集被传递。剩余行之后顺序地以更小的(小于全宽度的)的段被传递。
输入图像数据的线组203已经被线缓冲器单元定义,并被传递到表生成 器单元,表生成器单元进一步将线组解析为更精细的表,该表更精确地适用 于模版处理器的硬件限制。更具体地,如下面进一步更详细描述的,在实施 例中,每个模版处理器由二维移位寄存器阵列组成。二维移位寄存器阵列基 本上将图像数据移位到执行通道的阵列“之下”,其中移位的模式使得每个 执行通道对其自己相应模版内的数据进行操作(即,每个执行通道在其自己 的信息的模版上处理以产生该模版的输出)。在实施例中,表是“填充”或 另外加载到二维移位寄存器阵列中的输入图像数据的表面区域。
如将在下面更详细描述的,在各种实施例中,实际上有可以在任何周期 中移位的二维寄存器数据的多个层。为了方便起见,本描述中的大部分将简 单地使用术语“二维移位寄存器”等等来指代具有可以移位的二维寄存器数 据的一个或多个这样的层的结构。
因此,如图2b所示,表生成器从线组203解析初始表204,并将其提供 给模版处理器(这里,数据表对应于主要由附图标记204标识的5x5的阴影 区域)。如图2c和2d所示,模版处理器通过有效地以从左到右的方式在表 上移动重叠模版202来对输入图像数据的表进行操作。如图2d所示,可从 表内的数据计算出的像素的数目的输出值(暗的3x3阵列中为9位),像素的 数目被用尽了(没有其他的像素位置可以具有从表内的信息确定的输出值),像素的数目的输出值可从表内的数据计算(暗的3x3阵列中为9位)。为了 简化,图像的边界区域被忽略。
如图2e所示,表生成器随后提供用于模板处理器的下一张表205以在 模版处理器上继续操作。注意,当模板开始在下一张表上操作时,模版的初 始位置是从第一张表的穷尽点向右边的下一个进度(progression)(如之前在 图2d中描述的)。在新表205中,模版将仅仅继续向右边移动,此时模版处 理器以与第一张表的处理相同的方式在新的表上进行操作。
注意,由于围绕输出像素位置的模版的边界区域,在第一张表204的数 据和第二张表205的数据之间存在一些重叠。重叠可以通过表生成器重新发 送重叠数据两次来简单地处理。在替代的实现方式中,为了将下一张表供给 模版处理器,表处理器可以只继续将新的数据发送到模版处理器,并且模版 处理器重新使用来自之前的表的重叠数据。
b.模版处理器的设计与操作
图3a示出了模板处理器单元架构300的实施例。如图3a所示,模版处 理器包括数据计算单元301,标量处理器302和相关联的存储器303以及I/O 单元304。数据计算单元301包括执行通道阵列305、二维移位阵列结构306 以及与阵列的特定行或列相关联的分离的相应的随机存取存储器307。
I/O单元304负责将从表生成器接收到的“输入”表的数据加载到数据 计算单元301,并将“输出”表的数据从模版处理器储存到表生成器。在实 施例中,将表数据加载到数据计算单元301需要将接收到的表解析成图像数 据的行/列,并将图像数据的行/列加载到二维移位寄存器结构306或执行通 道阵列的行/列的相应的随机存取存储器307中(在下面更详细地描述)。如 果表最初被加载到存储器307中,在适当的时候(例如,当加载指令刚好在 表的数据上的操作之前时),执行通道阵列305中的独立执行通道可能之后 将表数据从随机存取存储器307加载到二维移位寄存器结构306中。在完成 把表数据加载到寄存器结构306时(不论是直接从表生成器中还是从存储器 307中),执行通道阵列305的执行通道对数据进行操作并且最终将完成的数 据“写回”为直接返回到表生成器或进入随机存取存储器307的表。如果执 行通道写回到随机存取存储器307中,I/O单元304从随机存取存储器307 中获取数据以形成输出表,该表之后被转发到表生成器。
标量处理器302包括程序控制器309,其从标量存储器303读取模版处 理器的程序代码的指令,并将指令发布给执行通道阵列305中的执行通道。 在实施例中,单个相同的指令被传播到阵列305内的所有执行通道,以影响 来自数据计算单元301的类似单个指令多数据(single instruction multiple data, SIMD)的行为。在实施例中,从标量存储器303读取并被发布给执行通道阵 列305的执行通道的指令的指令格式包括超长指令字(very-long-instruction-word, VLIW)类型格式,该格式每条指令包括多于一个的操作码。在另一实施例 种,VLIW格式包括引导由每个执行通道的ALU执行的数学函数的ALU操 作码(如下文所述,在实施例中可以指定多于一个传统的ALU操作)以及 存储器操作码(其引导用于具体的执行通道或一组执行通道的存储器操作)。
术语“执行通道”指一组能够执行指令的一个或多个执行单元(例如, 可以执行指令的逻辑电路)。然而,在各种实施例中,执行通道可以包括除 了执行单元之外的更多类似处理器的功能。例如,除了一个或多个执行单元 外,执行通道还可以包括解码接收到的指令的逻辑电路,或者是在更多类似 于多指令多数据(multiple instruction multipledata,MIMD)设计的情况下,执行 通道包括获取和解码指令的逻辑电路。相对于类似于MIMD的方法,尽管 本文大量描述了集中式程序控制方法,但是可以在各种替代的实施例(例如,包括阵列305的每个执行通道内的程序代码和程序控制器)中实现一种更分 布式的方法。
执行通道阵列305、程序控制器309以及二维移位寄存器结构306的组 合为广泛的可编程功能提供广泛可适应的/可配置的硬件平台。例如,考虑到 单独的执行通道能够执行广泛的功能并且能够容易地访问接近任何输出阵 列位置的输入图像数据,应用软件开发者能够编程具有广泛不同功能性性能 以及尺寸(例如模版大小)的内核。
除了作为用于由执行通道阵列305操作的图像数据的数据存储外,随机 存取存储器307还可以保存一个或多个查找表。在各种实施例中,一个或多 个标量查找表还可以在标量存储器303内被实例化。
标量查找表包含来自相同的查找表的相同索引的相同的数据值传递到 执行通道阵列305内的每个执行通道。在各种实施例中,上述的VLIW指令 格式被扩展到还包括标量操作码,该标量操作码将由标量处理器执行的查找 表操作引导到标量查找表。指定用于与操作码一起使用的索引可以是立即操 作数或者从其他数据存储位置获取。无论如何,在实施例中,从标量存储器 内的标量查找表查找基本上包含,在相同时钟周期期间,将相同的数据值传 播到执行通道阵列305内的所有执行通道。下面进一步提供关于查找表的使 用和操作的附加细节。
图3b总结了上面讨论的(多个)VLIW指令字实施例。如图3b所示, VLIW指令字格式包括三个独立的指令的字段:1)由标量处理器执行的标 量指令351;2)由执行通道阵列内的相应ALU以SIMD方式传播和执行的 ALU指令352;以及3)以部分SIMD方式传播和执行的存储器指令353(例 如,如果沿着执行通道阵列中的相同行的执行通道共享相同的随机存取存储 器,则来自每个不同行的一个执行通道实际上执行了该指令)(该存储器指 令353的格式可包括操作码,该操作码识别每一行中的哪条执行通道执行该 指令)。
还包括用于一个或多个立即操作数的字段354。指令351、352、353中 哪一个指令使用哪个即使立即操作数信息可以以指令格式识别。指令351、 352、353中的每个指令还包括其自己相应的输入操作数与结果信息(例如 ALU操作的局部寄存器以及用于存储器存取指令的局部寄存器与存储器地 址)。在实施例中,在执行通道阵列中的执行通道执行其他两个指令352、353 中的任一个之前,标量指令351由标量处理器执行。即VLIW字的执行包括执行标量指令351第周期、其后执行其他指令352、353的第二周期(注意, 在各种实施例中,指令352和353可以并行执行)。
在实施例中,由标量处理器302包括发布给表生成器103的命令,以从 加载表,或将表存储到数据计算单元301的存储器或2D移位寄存器306中。 这里,表生成器的操作可以取决于线缓冲器单元101的操作或其他变量,该 变量防止对表生成器103完成标量处理器302所发出的任何命令的周期数的 预运行理解。因此,在实施例中,任何VLIW字还包括在其他两个指令字段 352、353的无操作(no-operation,NOOP)指令,该VLIW字的标量指令351对应于或另外导致的被发出到表单生成器103的命令。然后,程序代码进入 指令字段352、353的NOOP指令的循环,直到表生成器完成其向/从数据计 算单元的加载/存储。这里,当向表生成器生成器发出命令时,标量处理器可 以设置互锁寄存器的位,在命令完成时,该表生成器复位该位。在NOOP 循环中,标量处理器监视了该联锁位的位。当标量处理器检测到表生成器已 经完成它的命令时,正常执行再次开始。
图4示出了数据计算单元401的实施例;如图4所示,数据计算单元401 包含执行通道阵列405,其逻辑上位于二维移位寄存器阵列结构406“上分”。 如上面所讨论的,在各种实施例中,由表生成器提供的图像数据表被加载到 二维移位寄存器406中。然后,执行通道对来自寄存器结构406的表数据进 行操作。
执行通道阵列405和移位寄存器结构406相对于彼此被固定在位置上。 然而,移位寄存器阵列406中的数据以策略和协调的方式移位,以导致执行 通道阵列中的每个执行通道处理数据中的不同的模板。因此,每个执行通道 确定正在生成的输出表中不同像素的输出图像值。从图4的架构中可以清楚 地看到,重叠模板不仅可以垂直布置,而且也可以水平布置,因为执行通道 阵列405包括垂直相邻的执行通道以及水平相邻的执行通道。
数据计算单元401的一些值得注意的架构特征包括移位寄存器结构406,其比执行通道阵列405的尺寸更宽。也就是说,在执行通道阵列405 外部存在寄存器的“光晕(halo)”409。尽管光晕409被示出为存在于执行 通道阵列的两侧上,但根据实现方式,光晕可以存在于执行通道阵列405的 更少(一个)或更多(三或四个)侧上。光晕409为当数据移位在执行通道405 下方时溢出执行通道阵列405的边界的数据提供“溢出”空间。作为简单的 情况,集中在执行通道阵列405的右边缘上的5x5的模板当模板的最左边的 像素被处理时,需要将四个光晕寄存器的位置进一步移到右边。为便于绘图, 图4示出了光晕右侧的寄存器只有水平移位连接,以及光晕底侧的寄存器只 有垂直移位连接,在标称的实施例中,在任一侧(右侧、底侧)的寄存器应 具有水平和垂直连接。
附加的溢出空间由随机存取存储器407提供,其耦合到阵列中的每一行 和/或每一列,或者其中部分(例如随机存取存储器可以被分配到执行通道阵 列的“区域”,该“区域“”跨越4条执行通道行式(row wise)和2条执行 通道列式(column wise)。为了简单起见,应用程序的其余部分将主要参考 基于行/或列的分配方案)。这里,如果执行通道的内核操作需要它处理二维 移位寄存器阵列406外部的像素值(某些图像处理例程可能需要),那么图 像数据的平面能够进一步溢出,例如从光晕区域409进入随机存取存储器 407。例如,考虑6X6模板,其中硬件包含只有4个存储元件的光晕区域, 位于执行通道阵列右边缘上的执行通道的右侧。在这种情况下,需要将数据 进一步向右移位到偏离光晕409的右边缘,以完全处理模板。移出光晕区域 409之外的数据将会溢出到随机存取存储器407。随机存取存储器407的其 他应用程序和图3的模板处理器将进一步在下面提供。
图5a到5k展示了在如上所述的在二维移位寄存器阵列内的图像数据被 移位到执行通道阵列的“下方”的方式的工作示例。如图5a所示,在第一 个阵列507中描绘了二维移位阵列的数据内容,并且执行通道阵列由帧505 描绘。此外,简单描绘了在执行通道阵列中的两个相邻的执行通道510。在 这个简单的描绘510中,每个执行通道包含寄存器R1,其可以接受来自移 位寄存器的数据,接受来自ALU输出的数据(例如,在周期之间表现为累 加器),或将输出数据写入到输出目的地。
在局部寄存器R2中,每个执行通道还具有可用的内容,该内容在二维 移位寄存器中位于执行通道“下方”。因此,R1是执行通道的物理寄存器, 而R2是二维移位寄存器阵列的物理寄存器。执行通道包括可以操作由R1 和/或R2提供的操作数的ALU。如下面将进一步更详细地描述的,在实施例 中,移位寄存器实际上通过每个阵列位置的多个(“深度”)存储/寄存器元件 来实现,但是移位活动仅限于存储元件的一个平面(例如:只有一个存储元件 的平面可以在每个周期内移位)。图5a到5k描绘了这些较深的寄存器位置 中的一个正用于存储来自相应的执行通道的结果X。为了便于说明,较深的 结果寄存器被绘制在其对应寄存器R2的旁边而不是下方。
图5a到5k集中于两个模板的计算,两个模板的中心位置与在执行通道 阵列505中描绘的一对执行通道位置511对齐。为了便于说明,该对执行通 道510被绘制成水平相邻,实际上,根据下面的例子,它们是垂直相邻。
如最初在图5a中所示的,执行通道511以其中央模板位置为中心。图 5b示出了由两个执行通道511执行的目标代码。如图5b所示,两个执行通 道511的程序代码导致移位寄存器阵列507中的数据下移一个位置,并右移 一个位置。这将两个执行通道511都对齐到它们相应的模板的左上角。然后 程序代码导致位于它们相应位置中(在R2中)的数据被加载到R1中。
如图5c所示,程序代码导致该对执行通道511将移位寄存器阵列507 内的数据向左移位一个单位,导致每个执行通道相应位置右边的值被移入每 个执行通道的位置。然后在R1中的值(之前的值)与已经移入执行通道的位 置(R2中)的新值相加。结果被写入R1。如图5d所示,重复与图5c所述 的相同的过程,导致结果R1现在包含在上执行通道上的值A+B+C和下执 行通道中的F+G+H。在这一点上,两个执行通道511都处理了它们相应的 模板的上一行。请注意,溢出进入执行通道阵列505的左侧的光晕区域(如 果左边存在一个光晕区域),如果在执行通道阵列505的左侧不存在一个光 晕区域,那么溢出进入随机存取存储器。
如图5e所示,程序代码接下来导致移位寄存器阵列中的数据向上移位 一个单位,使两个执行通道511与它们相应的模板的中间行的右边缘对齐。 两个执行通道511的寄存器R1当前都包含模板的顶行和中间行的最右边的 值的总和。图5f和5g展示了在两个执行通道511的模版的中间行上左移的 持续进展。累计加法继续,使得在图5g的处理结束时,两个执行通道511 都包含它们相应的模板的顶行和中间行的值的总和。
图5h示出了另一次移位,以将每一条执行通道与其对应的模板的最低 行对齐。图5i和5j示出了持续移位以完成对两个执行通道的模板的过程进 行处理。图5k示出了附加的移位,以将每个执行通道与其在数据阵列中的 正确位置对齐,并将结果写入其中。
在图5a-5k的示例中,注意,移位操作的目标代码可以包含指令格式, 其可以识别以(X,Y)坐标表示的移位的方向和大小。例如,用于向上移位一 个位置的目标代码可以以目标代码表示为SHIFT 0,+1。作为另一示例,向 右移位一个位置可以以目标代码表示为SHIFT+1,0。在各种实施例中,更 大幅度的移位也可以以目标代码(例如,SHIFT 0,+2)指定。这里,如果2D 移位寄存器硬件只支持每个周期移位一个位置,则指令可被机器解释为需要 多个周期执行,或者,2D移位寄存器硬件可以被设计为支持每个周期多于 一个位置的移位。后者的实施例将在下面更详细地描述。
图6示出了用于阵列执行通道和移位寄存器结构的单位单元的更详细的 描述(光晕区域中的寄存器不包括对应的执行通道)。在实施例中,与执行通 道阵列中的每个位置相关联的执行通道和寄存器空间通过实例化执行通道 阵列的每个节点上的图6所示的电路来实现。如图6所示,该单位单元包含 执行通道601,该执行通道601耦合到寄存器文件602,该寄存器文件602 由四个寄存器R2到R5组成。在任何周期期间,执行通道601可以从或向 寄存器R1到R5中的任何寄存器读取或写入。对于需要两个输入操作数的 指令,执行通道可以从R1到R5中任何一个检索两个操作数。
在实施例中,二维移位寄存器结构通过以下来实现:允许在单个周期期 间,允许寄存器R2到R4中的(仅)一个的任何寄存器的内容通过输出多 路复用器603被移出到其邻近的寄存器文件之一,并且,如果有邻近寄存器, 使寄存器R2到R4中的(仅)一个的任何寄存器的内容通过输入多路复用 器604被替换为从对应的一个邻近寄存器被移入的内容,使得邻近寄存器之 间的移位处于相同的方向(例如所有执行通道左移,所有执行通道右移,等 等)。虽然相同的寄存器的内容被移出并替换为在相同周期中移入的内容很 普通,但是多路复用器布置603、604允许在相同周期期间的相同寄存器文 件中有不同的移位源和移位目标寄存器。
如图6所示,注意,在移位序列期间,执行通道将从其寄存器文件602 移出内容到其左边、右边、顶部和底部邻近寄存器中的每一个。结合相同的 移位序列,执行通道还将内容从其左边、右边、顶部和底部邻近寄存器中的 一个特定的寄存器移入其寄存器文件中。此外,移出目标和移入源应该与所 有执行通道的相同的移位方向一致(例如,如果移出到右边邻近寄存器,则 应该从左边邻近寄存器移入)。
尽管在一个实施例中,每个周期允许每个执行通道仅移位一个寄存器的 内容,但是其它的实施例可允许多于一个寄存器的内容被移入/移出。例如, 如果图6所示的多路复用器电路603、604的第二个实例中被并入图6中的 设计,则两个寄存器的内容可以在相同周期期间被移出/移入。当然,在每个 周期中只允许一个寄存器的内容被移位的实施例中,通过消耗更多的时钟周 期用于数学操作之间的移位,可以在数学操作之间进行多个寄存器的移位 (例如通过在数学操作中使用两个移位操作可以在数学操作之间移位两个 寄存器的内容)。
如果在移位序列期间,少于全部执行通道的寄存器文件的内容被移出, 则注意每个执行通道的非移出寄存器的内容保持原位(不移位)。因此,任 何未被移入内容替换的非移位内容在整个移位周期中仍然存在于执行通道 局部。在每个执行通道中观察到的存储器单元(“M”)被用于从/向随机存取 存储器空间加载/存储数据,该随机存取存储器空间与执行通道阵列内的执行 通道的行和/或列相关联。这里,M单元作为标准M单元,因为其经常被用 于加载/存储不能从/向执行通道自己的寄存器空间加载/存储的数据。在各种 实施例中,M单元的主要操作是将数据从局部寄存器写入存储器,并且从存 储器读取数据并将其写入局部寄存器。
对于由硬件执行通道601的ALU单元支持的ISA操作码,在各种实施 例中,由硬件ALU支持的数学操作码与由虚拟执行通道支持的数学操作码 (例如,ADD,SUB,MOV,MUL,MAD,ABS,DIV,SHL,SHR,MIN /MAX,SEL,AND,OR,XOR,NOT)连成整体(例如,基本上相同)。 如上所述,存储器存取指令可以由执行通道601执行,以从/向其相关联的随 机存取存储器获取/存储数据。此外,硬件执行通道601支持移位操作指令 (右、左、上、下)以移位二维移位寄存器结构内的数据。如上所述,程序 控制指令主要由模板处理器的标量处理器执行。
c.在图像处理器上实现卷积神经网络(CNN)
图7示出了三维(3D)卷积的图形描绘。可以使用如本领域已知的3D 卷积来实现卷积神经网络(CNN),用于例如图像处理应用、机器视觉应用、 对象识别应用和/或机器学习应用。如图7所示,三维卷积“卷积”三维图像 数据块701和三维系数块702。这里,三维系数块702被卷积在图像数据701 内的相同大小的块上以产生所得表面区域703。
在实践中,图像数据701和系数数据702被实现为三维信息矩阵。也就 是说,图像数据701可以被实现为三维像素数据矩阵,并且系数数据702可 以被实现为三维系数值矩阵。为了执行3D卷积,通过具有与系数(例如较 小部分705)相同的尺寸的图像数据701的较小三维部分中的像素分别乘以 三维系数矩阵702中的相同位置的系数来计算三维点积。
然后将来自每个单独乘法的部分乘积相加以产生对应于点积的结果的 单个值(标量)。标量结果位于对应于被卷积的图像数据701内的较小区域 的位置的位置处的结果阵列703中。例如,较小部分705与系数702的卷积 生产位于所得表面703内的位置704处的标量。类似地,较小部分707(为 了易于绘制,仅顶表面可见)与系数702的卷积生成位于所得区域703内的 位置706处的标量值。
这样,对与系数702相乘的图像数据的每个不同的较小部分生成不同的 标量值,并且每个不同的标量在所得的表面区域703内具有相应的位置。关 于3D卷积实现方式的各种实施例将在下面进一步更详细地描述。
CNN层通常包括每个图像数据块的多个3D卷积。更具体地,CNN层 通常包括与单个图像数据块卷积的多个系数块。图8示出了这样的CNN层 的示例。这里,相同的图像数据块801与多个系数块802_1至802_N进行卷 积,以产生N个所得所得的表面区域803_1至803_N。因此,整体结果803 可以视为具有N个所得所得平面的三维块803。在各种处理应用中,三维所 得所得块803用作下一个CNN计算的输入图像块。图8中的处理对应于单 个CNN层的处理。可以从多个这样的CNN层的执行来计算完整的CNN。
图9a和9b描绘了3D卷积的实施例。参考图9a,可以将图像数据901 的块(其对应于图8中的图像数据块801)视为由多个图像数据平面组成。 也就是说,图像数据块901可以视为由沿着z轴在第一深度位置处的第一平 面901_1、沿着z轴的第二深度位置处的第二平面901_2等...以及沿着z轴 的第M个深度位置处的第M平面901_M组成。在实践中,沿着z轴的每个 级或深度可以对应于图像数据的不同“通道”。例如,如果M=3,则第一平 面级901_1可以对应于红色(R)数据,第二平面级901_2对应于绿色(G) 数据,第三平面级901_3可以对应于蓝色(B)数据。
类似地,系数块902_1(其对应于图8中的第一系数块802_1)也可以 被视为由沿着z轴M个“深度”位置的系数数据的M个平面组成。3D卷积 被计算为M个二维(2D)卷积的总和。这里,沿着相同深度级存在的图像 数据和系数被卷积在2D卷积操作中以生成该深度级的中间所得平面。
例如,执行图像数据平面901_1和系数平面902_1_1的第一2D卷积以 生成第一中间所得平面P1_1,执行图像数据平面901_2和系数平面902_1_2 的第二2D卷积以生成第二中间所得平面P1_2等...以及执行图像数据平面 901_M和系数平面902_1_M的第M个2D卷积以生成第M个中间所得平面 P1_M。然后以对齐的方式将中间平面P1_1至P1_M相加为910(加上中间 平面阵列的相同位置中的标量值)以产生所得阵列903_1。所得阵列903_1 对应于图8中的所得阵列803_1。
图9b示出可以在图像和系数数据的每个z轴深度级处执行的2D卷积的 示例性实施例。图9b示出了对应于相同平面内的图像数据的较小部分的数 据的12个相邻像素(A到L)。还描绘了与图像数据位于相同平面级的系数 (a1至a9)的平面。当系数数据与模板位置950对齐时执行操作940,在平 面级的中间平面中生成单个标量结果S_P1。相比之下,当系数数据与模板 位置951对齐时执行操作941,在平面级的中间平面中生成单个标量结果 S_P2。
注意,操作940和941中的每一个可以被表征为大规模乘-加操作(执 行九次乘法和八次加法)。因为模板位置950、951彼此相邻,所以标量结果 S_P1和S_P2将在所得中间平面内彼此相邻。这里,模版位置在图像数据的 整个平面的表面区域上“滑动”,并且由每个唯一的模板位置定义的对应的 “乘法-法”操作在中间平面中生成唯一的结果值。在中间平面内相对于彼 此的结果值的位置由生成它们的模板的相对位置限定。
返回参考图9a,M个中间平面P1_1至P1_M在910上求和以生成所得 平面903_1。图9a的计算每次用不同的系数集重复N次,直到已经计算出 所有系数集。也就是说,如图8和图9a和9b所示的,对于系数集802_1至 802_N中的每一个,执行图9a和9b的操作N次,以生成所得平面803_1至 803_N。
图10a至10j涉及具有在本说明书的前面部分中详细描述的架构特征的 图像处理器上的CNN层的计算。这里,读者不仅参考图10a至10j,还参考 图4。如之前的部分所述,模板处理器可以具有二维执行通道阵列405和对 应的二维移位寄存器阵列406。从下面的讨论可以看出,图10a至10j旨在 利用模板处理器的二维处理性质,同时最小化图像数据被切换进和切换出模 板处理器的次数。
图10a示出初始设置阶段,其中图像数据的第一平面1001_1的一个或 多个表被加载到模板处理器的局部存储器407中。为了便于说明,图10a建 议将图像平面的所有表加载到模板处理器的RAM,但是在操作中,可以采 用更为零碎的方法,其中表生成器接收完整图像平面1001_1,将图像平面解 析为表并将表适当地提供给模板处理器的RAM 407(例如,下一张表在先前 的表上的处理完成时或之前被加载进RAM)。此外,如果不是全部系数集1002_1至1002_N,至少第一系数集1002_1被加载到模板处理器RAM 407 中。这里,作为比较点,图10的图像数据平面1001_1对应于图9的图像数 据平面901_1,以及图10的系数集1002_1对应于图9的系数集902_1。作 为附加的比较点,图10的系数集1002_1至1002_N对应于图8的系数集 802_1至802_N。
当图像数据的第一平面1001_1和第一系数集1002_1被加载到模板处理 器RAM407中,系统准备好执行如图9b所描述的2D卷积。图10b描绘了 图像数据1001_1与系数数据1002_1_1(其对应于图9a的系数数据902_1_1) 进行卷积的卷积。2D卷积包括将一张或多张图像数据表从模板处理器RAM 加载到图像处理器的二维寄存器结构中。然后执行2D卷积本身,从而产生 中间平面P1_1。关于如何可以实际执行2D卷积的更彻底的讨论在下面进一步提供,参见图11a至图11f。
当第一图像平面1001_1已经与系数1002_1的第一平面卷积,机器准备 好开始下一个操作序列。这里,如果图9a描绘的一系列操作要按顺序执行, 可能需要从模板处理器RAM中切换出图像平面901_1,并将图像平面901_2 切换到模板处理器RAM中。接下来,参考图8和图9a,注意,对于用系数 集802_2至802_N中的任何/全部执行的2D卷积,图像平面901_1将需要被 切换回模板处理器RAM。因此,潜在地,图像平面901_1将需要被切换进 出模板处理器RAM N次。为了消除在模板处理器和在模板处理器外的图像 数据的相同平面的来回切换,不是遵循图9a所示的严格的处理顺序,而是 一旦将图像数据的平面加载到模板处理器RAM中,其将保持在那里,直到 被用于处理CNN层的所有系数集。
因此,如图10c所示,该过程中的下一个序列是将相同的图像平面 1001_1与下一个系数集中的第一平面进行卷积。因此,图10c示出了用图像 平面1001_1和系数平面1002_2_1(第二系数集中的第一平面)执行的2D 卷积。结果是用于第二系数集P2_1的第一中间平面。处理序列继续将相同 的初始图像平面1001_1与每个系数的第一平面进行卷积。图10d示出了包 括初始图像平面1001_1的最后的2D卷积序列。这里,用第N个系数集 1002_N的顶平面1002_N_1执行2D卷积,产生第N系数集PN_1的第一中 间所得平面。
在完成图10d的操作之后,初始图像平面1001_1已经被耗尽,并且可 以从模板处理器RAM中切换出(或着例如甚至丢弃)。因此,简要地参考图 9a,现在可以将下一级图像数据901_2切换到模板处理器RAM。图10e示 出了新的系统状态,其中较早的图像数据平面1001_1已从模板处理器RAM 切换出(其轮廓用阴影线绘制以指示其不再存在于模版处理器RAM中),并 且下一个图像平面1001_2已经被切换到模板处理器RAM中(其轮廓用实线 绘制,以指示其现在存在于模板处理器RAM内)。
图10f示出了新的第二图像平面1001_2与第一系数集1002_1中的第二 级系数1002_1_2的2D卷积。卷积的结果是第一系数集1002_1的第二中间 平面P1_2。图10g示出了图像平面1001_2和系数集1002_2中第二级系数 1002_2_2的下一个卷积,产生了用于第二系数集1002_2的第二中间所得层 P2_2。图10g示出了图像平面1001_2和系数集1002_N中第二级系数 1002_N_2的最后一个卷积,产生了用于第N系数集1002_2的第二中间所得 层PN_2。
在第二图像平面1001_2被耗尽之后,加载和处理第三图像平面,如上 所述针对第一和第二图像平面一样。然后连续类似地处理每个图像平面。图 10i示出了最后的图像平面1001_M和最后的系数集1002_N的底部级系数 1002_N_M的最后2D卷积,产生了最后的中间所得层PN_M。此时,已经 计算了所有系数集的所有中间平面。图10j示出了对于特定系数集的所有中 间平面求和,产生了每个系数集的最终所得平面,该平面又对应于CNN层 的结果。也就是说,对于N个系数集中的每一个执行图9a的求和910。因 此,结果平面1003_1至1003_N中的每一个对应于图8的所得平面803_1 至803_N。
在实施例中,机器通过保持“运行中间平面和”而不是单独地存储每个 中间平面,然后对它们求和来执行10j的添加。例如,参考图图10a和图10f, 在中间平面P1_2被创建之后,将中间平面P1_2添加到中间平面P1_1。平 面P1_1和P1_2的所得求和被存储在例如模板处理器单元内部。当中间平面 P1_3(未示出)由第三图像平面与第一系数集(未示出)中第三平面1002_1_3 的2D卷积的结果创建时,P1_1/P1_2求和结果随后被调用并被添加到中间平面P1_3。结果再次被存储,并且在其创建之后将被调用添加到中间平面 P1_4。对其他系数集的中间平面应用类似的处理。注意,如果运行总和和中 间平面的x、y尺寸大于二维移位寄存器阵列的尺寸,则可以通过将运行总 和和下一个中间平面解析成表并将表加载到二维移位寄存器阵列,进行处 理,例如,逐张表地进行。
图11a至11j描述了执行3x3模版大小的2D卷积的实施例。如在下面 更详细地进一步讨论的,其他的模板大小也是可能的。参考图11a,图像数 据A到R被加载到二维移位寄存器。图11a示出装满(worth)图像数据的 两个模版1101、1102。为了简便起见,图11a至图11j的讨论将集中在模板 1101、1102的2D卷积,其生成在如图11a所示的像素位置H和K的输出结 果。然而,重要的是要认识到,存在以每个像素位置为中心的不同的模版, 以及将相对于图11a至图11j描述的2D卷积过程同时为每个这样的像素位 置生成卷积结果。
参考图11a,为了执行2D卷积,需要将系数值1103乘以每个图像数据 模板内的相应位置的像素。也就是说,像素值A和D都乘以系数a1,因为 这样的像素值和a1都位于模板左上角,像素值C和F都乘以系数a3,因为 这样的像素值和系数都位于模板右上角。2D卷积结果是像素值和对应系数 的所有九个部分乘积的求和。如将在下面更详细地描述的,在实施例中,部 分乘积的求和发生在九个周期之内。
从图3b的讨论回想一下,在各种实施例中,模板处理器能够向所有执 行通道发出包括立即操作数的标量指令。在实施例中,2D卷积是通过发出 一系列标量乘加指令来实现的,其中系数被包括在指令字中,作为立即操作 数。
参考图11b,在第一周期期间,发出具有系数a5作为中间操作数的标量 指令。在执行指令时,将系数a5与图像数据阵列中的每个像素值相乘,并 将结果存储在对应执行通道内像素值局部的寄存器空间中。再次,仅参考以 像素位置H和K为中心的一对模板1101、1102,系数a5乘以H和K。部分 乘积H×a5局部存储在模板1101(其当前具有像素值H)的中心(其当前 具有像素值H)处的像素位置1121的执行通道寄存器空间中。部分乘积K× a5局部存储在在模板1102的中心(其当前具有像素值K)处的像素位置1122 的执行通道寄存器空间中。这里,注意,围绕模板1101和1102的边界及其 内的像素位置可以被认为是在每个像素位置处包含专用ALU和局部寄存器 空间的硬件的固定区域。也就是说,模板1101和1102中的每个像素可以被 视为具有专用ALU执行通道和局部专用寄存器空间的硬件执行通道。
参考图11c,在第二周期期间,执行第一移位指令以将二维移位寄存器 阵列内的图像数据向右移位一个单位,并且随后发出具有系数a4作为中间 操作数的标量乘法指令。在执行第二条指令时,将系数a4与图像数据阵列 中的每个像素值相乘,并将结果存储在其对应执行通道内的像素值的局部的 寄存器空间中。再次,仅参考以像素位置G和J为中心的一对模板1101、1102, 系数a4乘以G和J。部分乘积G×a4被加到模板1101的中心处(即包含值 H×a5的像素位置1121)的执行通道寄存器空间中的局部存储值,并将结果 S_H写回到相同的寄存器空间。将部分乘积J×a4加到模板1102中心处(即 当前具有值K×a5的像素位置1122)的执行通道寄存器空间中的局部存储 值,并将结果S_K写回到相同的寄存器空间。
参见图11d,在第三周期期间,执行第一移位指令以将二维移位寄存器 阵列内的图像数据向下移位一个单位,并且随后发出具有系数a1作为中间 操作数的标量乘加指令。在执行第二条指令时,将系数a1与图像数据阵列 中的每个像素值相乘,并将结果存储在其对应执行通道内的像素值的局部的 寄存器空间中。再次,仅参考以像素位置A和D为中心的一对模板1101、 1102,系数a1乘以A和D。部分乘积A×a1被加到模板1101的中心处的执 行通道寄存器空间中的局部存储值(其包含图11c中的值S_H),并将结果 S_H写回到相同的寄存器空间。将部分乘积D×a1加到模板1102中心处的 执行通道寄存器空间中的局部存储值(包含来自图11c中的值S_K),并将 结果S_K写回到相同的寄存器空间。
图11e至图11j示出了六个这样的周期,每个周期具有将新像素值放置 在尚未乘以系数的模板的中心的对应移位。在图11j的最后一个周期被执行 之后,2D卷积的结果驻留在每个模板的中心中的局部寄存器空间(用于模 板1101的值S_H和用于模板1102的值S_K)。
尽管上述讨论针对的是在相同模板处理器上执行整个CNN层的方法, 但是其他方法可以尝试在多个模板处理器上并行化CNN层执行(回看图8 示出了与CNN层相关联的计算的实施例)。例如,参考图图8和图12,如 果N小于模板处理器的数量,则可以为每个模板处理器分配其自己的3D卷 积(即,每个模版处理器用其自己的唯一系数集执行3D卷积)。因此,每个 模板处理器接收相同的图像数据,但是将其与不同的系数集进行卷积。在这 种情况下,可以在每个模板处理器处遵循图9a中建议的顺序(即,每个模 板处理器将图像数据的每个平面图像数据相对于单个系数集卷积)。即使N 大于模板处理器的数量,CNN层的执行仍然可以通过例如使每个模板处理 器处理两个或更多个唯一系数集来分布/并行化。
在另一种并行化方法中,如图13所示,输入图像数据的不同平面被唯 一地分配给不同的模板处理器。每个模板处理器例如通过所有系数集的合适 的平面级被加载。例如,分配用于处理第一(最高)图像数据平面的模板处 理器1302_1接收所有N个系数集的第一(最高)平面。然后,模板处理器 继续执行图10b-10d的操作,同时,被分配以处理第二(下一个较低的)图 像平面的另一模板处理器1302_2执行图10f-10h的卷积。在这种方法中,相同系数集的中间和平面将分布在多个模板处理器上,并随后被移动到相同的 模板处理器用于对齐求和,以生成用于系数集的特定所得平面。这里,不同 的模板处理器可以同时计算不同系数集的不同的所得平面。在该方法的扩展 中,可以将多于一个的图像数据的平面分配给任何特定的模板处理器(例如, 如果图像数据平面的数量超过模板处理器的数量)。
在另一种方法中,如图14所示,可以将每个模板处理器分配以仅在所 得平面的特定区域上操作。例如,第一模板处理器1402_1在图像平面表面 区域的第一象限上操作,第二模板处理器1402_2在图像平面表面区域的第 二象限上操作,第三模板处理器1402_3在图像平面表面区域的第三象限上 操作,第四模板处理器1402_4在图像平面表面区域的第四象限上操作。每 个模板处理器执行整个CNN层,但仅执行整个图像的表面区域的1/4。最终 所得平面通过在它们相关联的模板处理器处理的正确象限中“适配”彼此相 邻的合适的所得平面来实现。图14仅示出了一种类型的实施例,其中图像 被分解成四个象限。其他配置可能具有较少的唯一表面(例如两个半部)或 更多的唯一的表面区域(例如,九、十六等)。不同图像部分之间的任何重 叠输入都应发送到多于一个模板处理器。
在其它配置中,可以在单个模板处理器上执行多于一个具有N个系数集 的CNN层。在实施例中,在单个模板处理器上执行多个CNN层可以通过多 个CNN层之间的时间复用来执行。图15示出了两个不同的CNN层被复用 在相同的模板处理器上的简化示例。这里,输入图像数据1501_1的第一平 面被加载到模板处理器RAM中。然后,模板处理器继续执行图像数据1501_1 与第一CNN层的系数集1502_1至1502_N中的每一个的适当平面的2D卷 积。所得中间平面如上所述在运行累加器中相加。
在第一CNN层的最后一个系数集1502_N已经被卷积,并且其中间平 面被加到累加器中,处理下一个CNN层。也就是说,图像数据平面1501_1 不被切换出模板处理器的活动上下文(context),而是继续与用于第二CNN 层的系数集1512_1至1512_N的适当的相应层一起使用。用于第二CNN层 的中间平面被累加在独立的累加器而不是第一CNN层的累加器中。在第二 系数集1512_1至1512_N的适当的相应平面已经被处理之后,用于图像数据 的下一个图像平面被切换到模板处理器的上下文中,但是使用两个系数集的 不同的相应平面重复该过程。
在另一种方法中,第一CNN的输出直接提供作为第二CNN的输入。例 如,系数集1502的中间平面的求和产生输入图像平面,用于将由具有系数 集1512的模板处理器执行的下一个接着的CNN。
在另外的其他配置中,可以将不同和独立的图像分配给不同的模板处理 器(使得不同图像上的CNN可以由图像处理器同时执行)。
尽管在前面的讨论中强调了3×3模板尺寸,但是在一个实施例中,机 器被设计为支持(例如,通过图像处理器的配置寄存器空间和/或编译的程序 代码)多个3D模板(例如,1×1×M、3×3×M、5×5×M和7×7×M)。
尽管可以以浮点表示来计算上述乘法和求和操作,但是在其他实施例 中,可以以固定点整数表示来计算。此外,固定整数表示可以是低精度(例 如,8位或更少(例如5位))或更高的精度。低精度固定整数被理解为,对 于很多应用,具有更多的时间/能量效率,而不损失图像质量。
在各种实施例中,可执行程序代码被构造为在单个ALU线上执行2个 (例如,8位)乘法加法(MAD),以便每个周期实现2个MAD。在实施例 中,ALU线硬件被设计为执行两个8位×8位乘法(即,四个8位输入操作 数),然后将两个16位乘积和32位累加器相加,以产生一个周期中的32位 和。这里,累加器对应于32位输入操作数,该操作数被加到乘法结果中,求和结果写入输出“累加器”寄存器。这里,假设两个乘法将用于输出平面 中的相同像素,因此可以相加在一起。四个8位输入操作数由来自相同输入 图像平面的两个输入和两个系数值组成。
在替代实施例中,每个ALU线被设计为支持双重8位乘法加法,以便 每个周期实现2个MAD。也就是说,硬件执行第一个8位×8位乘法,结 果与16位输入操作数的求和,放进所得的16位累加器。第二个独立的8位 ×8位乘法,结果与独立的16位输入操作数求和,放进独立的16位累加器。 然而,16位累加器可能会在单个周期中饱和(例如,具有全8位输入被乘数), 需要在每个周期内传输到32位累加器,这可能会使整体速率降低到每个周 期1MAD。
为了避免饱和命中,可以使用较低分辨率的输入被乘数数据。例如,可 以执行一对6位×6位乘法,其中相应的结果被加和到具有相应不同的16 位输入操作数的单独的相应16位累加器中。较低分辨率输入被乘数在16位 累加器饱和之前需要多个周期,并且相应的传输到32位累加器。例如,每 16个周期可能会发生饱和。在每16个周期的饱和情况下,每第17个周期可 以添加双16位累加器,并且每个第18个周期,紧接在前的双累加器和的结果加到运行的32位累加器。在实施例中,硬件可以被设计为在单个周期中 执行累加器和,并将其加到32位累加器中。在各种实施例中,这种较低精 度的方法可能能够实现每个周期1.8次乘法加法。
可以设计更高精度的应用(例如,具有超过8位的输入被乘数数据)以 使用32位输入求和操作数,并且每个周期执行大约1MAD的累加器结果。 这样做将类似于低精度方法,只有在执行了大量周期之后才能避免累加器的 饱和。例如,在12位输入被乘数图像数据的情况下,在32位累加器将饱和 之前执行256个单个MAD的周期。
图16示出了一种方法,包括在图像处理器上执行卷积神经网络层,该 图像处理器具有执行通道阵列和二维移位寄存器1601。二维移位寄存器为执 行通道提供局部相应的寄存器空间。卷积神经网络的执行包括将三维图像数 据块的图像数据的平面加载到二维移位寄存器中1602。执行卷积神经网络还 包括依次进行以下步骤来执行图像数据的平面与系数数集的二维卷积1603: 在执行通道内同时相乘相应的像素和系数值以产生部分乘积的阵列;在执行 通道内同时将部分乘积和保存在图像数据内不同模版的二维寄存器中的部 分乘积的相应累积值求和;以及通过移位二维移位寄存器阵列内的内容来实 现执行通道内的二维卷积的值的对齐。
d.实现方式实施例
有必要指出的是,上述各种图像处理器架构特征不一定限于传统意义上 的图像处理,因此可以应用于可能(或可能不)使该图像处理器被重新表征 的其他应用。例如,如果上述各种图像处理器架构特征中的任何被用于动画 的创建和/或生成和/或呈现,而不是实际的相机图像的处理,则图像处理器 可以被表征为图形处理单元。此外,上述图像处理器架构特征可以应用于诸 如视频处理、视觉处理、图像识别和/或机器学习的其他技术应用。以这种方 式应用,图像处理器可以与更通用的处理器(例如,作为计算系统的CPU 或者是其一部分)集成(例如,作为协处理器),或者可以是独立的计算系 统内的处理器。
上面讨论的硬件设计实施例可以体现在半导体芯片内,和/或作为用于最 终定位为半导体制造过程的电路设计的描述中。在后面的情况下,这种电路 描述可以采取(例如,VHDL或Verilog)寄存器传输级(register transfer level, RTL)电路描述\门级电路描述\晶体管级电路描述或掩码(mask)描述或其 各种组合的形式。电路描述通常体现在计算机可读存储介质(诸如CD-ROM 或其它类型的存储技术)上。
从前面的部分中,有必要认识到,如上所述的图像处理器可以体现在计 算机系统上的硬件中(例如,作为处理来自手持设备的相机的数据的手持式 设备的片上系统(SOC)的一部分)。在图像处理器被实现为硬件电路的情 况下,请注意,图像处理器处理的图像数据可以直接从相机接收。这里,图 像处理器可以是分立相机的一部分,或者是具有集成相机的计算系统的一部 分。在后面的情况下,图像数据可以直接从相机或计算系统的系统存储器接 收(例如,相机将其图像数据发送到系统存储器而不是图像处理器)。还要 注意,上述部分中描述的许多特征可以适用于图形处理器单元(其呈现动 画)。
图17提供了计算系统的示例性描绘。下面描述的计算系统的许多组件 可应用于具有集成相机和相关联的图像处理器(例如,诸如智能电话或平板 计算机的手持设备)的计算系统。本领域的技术人员将能够容易地在两者间 划定。
如图17所示,基本计算系统可以包括中央处理单元1701(其可以包括 例如多个通用处理内核1715_1至1715_N以及设置在多核处理器或应用处理 器上的主存储器控制器1717)、系统存储器1702、显示器1703(例如,触摸 屏,平板)、局部有线点对点链路(例如,USB)接口1704、各种网络I/O 功能1705(诸如以太网接口和/或蜂窝调制解调器子系统)、无线局域网(例 如,WiFi)接口1706、无线点对点链路(例如,蓝牙)接口1707和全球定 位系统接口1708、各种传感器1709_1至1709_N、一个或多个相机1710、 电池1711、电源管理控制单元1712、扬声器和麦克风1713以及音频编码器 /解码器1714。
应用处理器或多核处理器1750可以包括其CPU 1701内的一个或多个通 用处理核1715、一个或多个图形处理单元1716、存储器管理功能1717(例 如,存储器控制器)、I/O控制功能1718和图像处理单元1719。通用处理内 核1715通常执行计算系统的操作系统和应用软件。图形处理单元1716通常 执行图形密集功能,例如生成在显示器1703上呈现的图形信息。存储器控 制功能1717与系统存储器1702接口以向/从系统存储器1702写入/读取数据。电源管理控制单元1712通常控制系统1700的功耗。
图像处理单元1719可以根据前面部分中所述的上述图像处理单元实施 例中的任何来实现。可替代地或组合地,IPU 1719可以作为其协处理器耦合 到GPU 1716和CPU 1701中的一个或两者。另外,在各种实施例中,GPU 1716 可以用上面详细描述的任何图像处理器特征来实现。
触摸屏显示器1703、通信接口1704-1707、GPS接口1708、传感器1709、 相机1710和扬声器/麦克风编码解码器1713、1714都可以被视为相对于整个 计算系统的各种形式的I/O(输入和/或输出),在适当的情况下,计算系统 还包括集成的外围设备(例如,一个或多个相机1710)。根据实现方式,这 些I/O组件中的各种可以集成在应用处理器/多核处理器1750上,或者可以 位于裸芯外或者应用处理器/多核处理器1750的封装体之外。
在实施例中,一个或多个相机1710包括能够在其视场中测量相机和对 象之间的深度的深度相机。在应用处理器或其他处理器的通用CPU内核(或 具有执行程序代码的指令执行流程的其他功能块)上执行的应用软件、操作 系统软件、设备驱动程序软件和/或固件可以执行上述的任何功能。
本发明的实施例可以包括如上所述的各种过程。这些过程可以体现在机 器可执行指令中。该指令可用于使通用或专用处理器执行某些进程。或者, 这些处理可以由包含用于执行处理的硬接线逻辑的具体硬件组件,或通过程 序化计算机组件和定制硬件组件的任何组合来执行。
本发明的元件还可以被提供作为用于存储机器可执行指令的机器可读 介质。机器可读介质可以包括但不限于软盘、光盘、CD-ROM和磁光盘、闪 速存储器、ROM、RAM、EPROM、EEPROM、磁或光卡,传播介质或适用 于存储电子指令的其他类型的介质/机器可读介质。例如,元件可以作为计算 机程序下载,该计算机程序通过经由通信链路(例如,调制解调器或网络连 接)的载波或其他传播介质中体现的数据信号从远程计算机(例如,服务器) 传送到请求计算机(例如,客户端)。
在前面的说明书中,已经描述了具体的示例性实施例。然而,显而易见 的是,在不脱离如所附权利要求所阐述的本发明的更广泛的精神和范围的情 况下,可以进行各种修改和改变。因此,说明书和附图被认为是说明性的而 不是限制性的。
Claims (24)
1.一种方法,包括:
在图像处理器上执行卷积神经网络层,所述图像处理器具有执行通道阵列和二维移位寄存器,所述二维移位寄存器为所述执行通道提供局部相应的寄存器空间,所述卷积神经网络的执行包括:
a)将三维图像数据块的图像数据的平面加载到所述二维移位寄存器;
b)通过依次进行以下步骤来执行所述图像数据的平面与系数值阵列的二维卷积:
在执行通道内同时相乘相应的像素和系数值以产生部分乘积的阵列;
在执行通道内同时将所述部分乘积和保存在所述图像数据内不同模版的二维寄存器中的部分乘积的相应累积值求和;以及
通过移位所述二维移位寄存器阵列内的内容来实现所述执行通道内的二维卷积的值的对齐。
2.根据权利要求1所述的方法,还包括使用所述图像数据的平面和下一个系数阵列来重复上述a)和b),其中所述系数值阵列为来自所述卷积神经网络层的第一系数集的平面,并且所述下一个系数值阵列为来自所述卷积神经网络层的第二系数集的平面。
3.根据权利要求2所述的方法,还包括对所述执行通道局部累积从相同的系数集生成的中间平面。
4.根据权利要求2所述的方法,其中所述图像数据被局部保存到在所述图像数据和平面之间执行的二维卷积之间的所述执行通道,所述平面包含:1)来自所述第一系数集的所述平面;和2)来自所述第二系数集的所述平面。
5.根据权利要求1所述的方法,其中同时相乘还包括同时将相同的系数值与所述二维移位寄存器内的图像数据相乘。
6.根据权利要求1所述的方法,其中实现值的对齐包括在将所述图像数据乘以下一个系数值之前,将所述二维移位寄存器内的图像数据移位。
7.一种机器可读存储介质,其上存储有程序代码,当由具有执行通道阵列和二维移位寄存器的图像处理器处理时,执行一种方法,所述二维移位寄存器向所述执行通道提供局部相应寄存器空间,所述方法包括:
通过进行以下步骤来执行卷积神经网络:
a)将三维图像数据块的图像数据的平面加载到所述二维移位寄存器;
b)通过依次进行以下步骤来执行所述图像数据的平面与系数值阵列的二维卷积;
在执行通道内同时相乘相应的像素和系数值以产生部分乘积的阵列;
在执行通道内同时将所述部分乘积和保存在所述图像数据内不同模版的二维寄存器中的部分乘积的相应累积值求和;以及
通过移位所述二维移位寄存器阵列内的内容来实现所述执行通道内的二维卷积的值的对齐。
8.根据权利要求7所述的机器可读存储介质,其中,所述方法还包括通过所述图像数据的平面和下一个系数阵列来重复上述a)和b),其中所述系数值阵列为来自所述卷积神经网络层的第一系数集的平面,并且所述下一个系数值阵列为来自所述卷积神经网络层的第二系数集的平面。
9.根据权利要求8所述的机器可读存储介质,还包括对所述执行通道局部累积从相同的系数集生成的中间平面。
10.根据权利要求8所述的机器可读存储介质,其中所述图像数据被局部保存到在所述图像数据和平面之间执行的二维卷积之间的所述执行通道,所述平面包含:1)来自所述第一系数集的所述平面;和2)来自所述第二系数集的所述平面。
11.根据权利要求7所述的机器可读存储介质,其中同时相乘还包括同时将相同的系数值与所述二维移位寄存器内的图像数据相乘。
12.根据权利要求7所述的机器可读存储介质,其中实现值的对齐包括在将所述图像数据乘以下一个系数值之前,将所述二维移位寄存器内的图像数据移位。
13.根据权利要求7所述的机器可读存储介质,其中所述图像处理器包括多个模板处理器,每个模板处理器具有相应的执行通道阵列和二维移位寄存器,并且其中,所述图像处理器被配置为在具有所述卷积神经网络层的不同系数集的不同的模版处理器上执行相同的图像数据。
14.根据权利要求7所述的机器可读存储介质,其中所述图像处理器包括多个模板处理器,每个模板处理器具有相应的执行通道阵列和二维移位寄存器,并且其中,所述图像处理器被配置为在具有不同的模版处理器上的不同的图像数据的不同的模版处理器上执行卷积神经网络的相同系数集。
15.根据权利要求14所述的机器可读存储介质,其中所述不同的图像数据包括三维图像数据块的不同块的多个平面。
16.根据权利要求7所述的机器可读存储介质,其中所述图像处理器被配置为使用来自所述卷积神经网络层的输出作为下一个卷积神经网络层的输入,以由所述图像处理器计算。
17.根据权利要求7所述的机器可读存储介质,其中所述图像处理器被配置为,通过在所述卷积神经网络层和所述第二卷积神经网络层的处理之间,将所述图像数据局部保留到所述执行通道,来对所述卷积神经网络层和所述第二卷积神经网络层进行多路复用。
18.一种装置,包括:
i)图像处理器,其包括执行通道阵列和二维移位寄存器,所述二维移位寄存器为所述执行通道提供相应的局部寄存器空间;
ii)包含存储的程序代码的机器可读存储介质,当由所述执行通道阵列执行所述程序代码时,引起执行一种方法,所述方法包括:
通过进行以下步骤来执行卷积神经网络:
a)将三维图像数据块的图像数据的平面加载到所述二维移位寄存器;
b)通过依次进行以下步骤来执行所述图像数据的平面与系数值阵列的二维卷积;
在执行通道内同时相乘相应的像素和系数值以产生部分乘积的阵列;
在执行通道内同时将所述部分乘积和保存在所述图像数据内不同模版的二维寄存器中的部分乘积的相应累积值求和;以及
通过移位所述二维移位寄存器阵列内的内容来实现所述执行通道内的二维卷积的值的对齐。
19.根据权利要求18所述的装置,其中所述图像处理器包括多个模板处理器,每个模板处理器具有相应的执行通道阵列和二维移位寄存器,并且其中,所述图像处理器被配置为在具有所述卷积神经网络层的不同系数集的不同的模版处理器上执行相同的图像数据。
20.根据权利要求18所述的装置,其中所述图像处理器包括多个模板处理器,每个模板处理器具有相应的执行通道阵列和二维移位寄存器,并且其中,所述图像处理器被配置为在具有不同的模版处理器上的不同的图像数据的不同的模版处理器上执行卷积神经网络的相同系数集。
21.根据权利要求20所述的装置,其中所述不同的图像数据包括三维图像数据块的不同块的多个平面。
22.根据权利要求18所述的装置,其中所述图像处理器被配置为使用来自所述卷积神经网络层的输出作为下一个卷积神经网络层的输入,以由所述图像处理器计算。
23.根据权利要求18所述的装置,其中所述图像处理器被配置为,通过在所述卷积神经网络层和所述第二卷积神经网络层的处理之间,将所述图像数据局部保留到所述执行通道,来对所述卷积神经网络层和所述第二卷积神经网络层进行多路复用。
24.根据权利要求18所述的装置,其中所述图像处理器和机器可读存储介质是计算系统的一部分。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/201,204 | 2016-07-01 | ||
US15/201,204 US10546211B2 (en) | 2016-07-01 | 2016-07-01 | Convolutional neural network on programmable two dimensional image processor |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107563952A true CN107563952A (zh) | 2018-01-09 |
CN107563952B CN107563952B (zh) | 2021-04-16 |
Family
ID=59363203
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710532146.4A Active CN107563952B (zh) | 2016-07-01 | 2017-07-03 | 可编程二维图像处理器上的卷积神经网络 |
Country Status (9)
Country | Link |
---|---|
US (3) | US10546211B2 (zh) |
EP (1) | EP3479302B1 (zh) |
JP (1) | JP6764954B2 (zh) |
KR (1) | KR102232722B1 (zh) |
CN (1) | CN107563952B (zh) |
DE (2) | DE102017113733B4 (zh) |
GB (3) | GB2574940B (zh) |
TW (1) | TWI690858B (zh) |
WO (1) | WO2018005030A1 (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108182471A (zh) * | 2018-01-24 | 2018-06-19 | 上海岳芯电子科技有限公司 | 一种卷积神经网络推理加速器及方法 |
CN108681984A (zh) * | 2018-07-26 | 2018-10-19 | 珠海市微半导体有限公司 | 一种3*3卷积算法的加速电路 |
CN109086875A (zh) * | 2018-08-16 | 2018-12-25 | 郑州云海信息技术有限公司 | 一种基于宏指令集的卷积网络加速方法及装置 |
CN110728367A (zh) * | 2019-12-18 | 2020-01-24 | 深圳鲲云信息科技有限公司 | 用于神经网络的数据存储方法及装置 |
CN108829610B (zh) * | 2018-04-02 | 2020-08-04 | 浙江大华技术股份有限公司 | 一种神经网络前向计算过程中的内存管理方法及设备 |
CN111684473A (zh) * | 2018-01-31 | 2020-09-18 | 亚马逊技术股份有限公司 | 提高神经网络阵列的性能 |
CN112236783A (zh) * | 2018-03-13 | 2021-01-15 | 雷哥尼公司 | 高效卷积引擎 |
Families Citing this family (55)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180046898A1 (en) * | 2016-08-11 | 2018-02-15 | Vivante Corporation | Zero Coefficient Skipping Convolution Neural Network Engine |
US10360470B2 (en) | 2016-10-10 | 2019-07-23 | Gyrfalcon Technology Inc. | Implementation of MobileNet in a CNN based digital integrated circuit |
US10339445B2 (en) | 2016-10-10 | 2019-07-02 | Gyrfalcon Technology Inc. | Implementation of ResNet in a CNN based digital integrated circuit |
US10366328B2 (en) | 2017-09-19 | 2019-07-30 | Gyrfalcon Technology Inc. | Approximating fully-connected layers with multiple arrays of 3x3 convolutional filter kernels in a CNN based integrated circuit |
US9940534B1 (en) * | 2016-10-10 | 2018-04-10 | Gyrfalcon Technology, Inc. | Digital integrated circuit for extracting features out of an input image based on cellular neural networks |
US10402628B2 (en) | 2016-10-10 | 2019-09-03 | Gyrfalcon Technology Inc. | Image classification systems based on CNN based IC and light-weight classifier |
US10366302B2 (en) | 2016-10-10 | 2019-07-30 | Gyrfalcon Technology Inc. | Hierarchical category classification scheme using multiple sets of fully-connected networks with a CNN based integrated circuit as feature extractor |
US10043095B2 (en) * | 2016-10-10 | 2018-08-07 | Gyrfalcon Technology, Inc. | Data structure for CNN based digital integrated circuit for extracting features out of an input image |
TWI634490B (zh) * | 2016-11-14 | 2018-09-01 | 美商耐能股份有限公司 | 卷積運算裝置及卷積運算方法 |
US10878310B2 (en) | 2016-11-29 | 2020-12-29 | Mellanox Technologies, Ltd. | Accelerated convolution in convolutional neural networks |
US11562115B2 (en) | 2017-01-04 | 2023-01-24 | Stmicroelectronics S.R.L. | Configurable accelerator framework including a stream switch having a plurality of unidirectional stream links |
US10339443B1 (en) | 2017-02-24 | 2019-07-02 | Gopro, Inc. | Systems and methods for processing convolutional neural network operations using textures |
US11037330B2 (en) * | 2017-04-08 | 2021-06-15 | Intel Corporation | Low rank matrix compression |
US11373266B2 (en) * | 2017-05-05 | 2022-06-28 | Intel Corporation | Data parallelism and halo exchange for distributed machine learning |
US10474464B2 (en) | 2017-07-05 | 2019-11-12 | Deep Vision, Inc. | Deep vision processor |
US10817983B1 (en) * | 2017-09-28 | 2020-10-27 | Apple Inc. | Method and device for combining real and virtual images |
CN109754359B (zh) * | 2017-11-01 | 2021-12-07 | 腾讯科技(深圳)有限公司 | 一种应用于卷积神经网络的池化处理的方法及系统 |
US11270201B2 (en) | 2017-12-29 | 2022-03-08 | Intel Corporation | Communication optimizations for distributed machine learning |
GB201801639D0 (en) * | 2018-02-01 | 2018-03-21 | Ruff Brendan Patrick | Low precision efficient multiplication free convolutional filter bank device |
CN108520297B (zh) * | 2018-04-02 | 2020-09-04 | 周军 | 可编程深度神经网络处理器 |
EP3557485B1 (en) * | 2018-04-19 | 2021-05-26 | Aimotive Kft. | Method for accelerating operations and accelerator apparatus |
KR102126857B1 (ko) * | 2018-05-10 | 2020-06-25 | 서울대학교산학협력단 | 행 단위 연산 뉴럴 프로세서 및 이를 이용한 데이터 처리 방법 |
CN108921926B (zh) * | 2018-07-02 | 2020-10-09 | 云从科技集团股份有限公司 | 一种基于单张图像的端到端三维人脸重建方法 |
US10417342B1 (en) | 2018-07-03 | 2019-09-17 | Gyrfalcon Technology Inc. | Deep learning device for local processing classical chinese poetry and verse |
CN109065089B (zh) * | 2018-07-26 | 2020-11-06 | 杭州闪亿半导体有限公司 | 一种用于卷积运算的存储模块、模组 |
US10311149B1 (en) | 2018-08-08 | 2019-06-04 | Gyrfalcon Technology Inc. | Natural language translation device |
US10983583B2 (en) * | 2018-08-23 | 2021-04-20 | Apple Inc. | Electronic display reduced blanking duration systems and methods |
JP7165018B2 (ja) | 2018-10-03 | 2022-11-02 | キヤノン株式会社 | 情報処理装置、情報処理方法 |
US11501141B2 (en) * | 2018-10-12 | 2022-11-15 | Western Digital Technologies, Inc. | Shifting architecture for data reuse in a neural network |
US10387772B1 (en) | 2018-10-22 | 2019-08-20 | Gyrfalcon Technology Inc. | Ensemble learning based image classification systems |
CN109711538B (zh) * | 2018-12-14 | 2021-01-15 | 安徽寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
US10552939B1 (en) | 2019-02-12 | 2020-02-04 | Google Llc | Image processor complex transfer functions |
JP7408289B2 (ja) * | 2019-03-28 | 2024-01-05 | 株式会社エヌエスアイテクス | 畳込み演算装置 |
CN111767994A (zh) * | 2019-04-01 | 2020-10-13 | 中国科学院半导体研究所 | 一种神经元计算模块 |
KR20210004702A (ko) * | 2019-07-05 | 2021-01-13 | 삼성전자주식회사 | Ai 프로세서 및 이의 신경망 연산 수행 방법 |
US11475283B2 (en) | 2019-10-24 | 2022-10-18 | Apple Inc. | Multi dimensional convolution in neural network processor |
DE102019130930A1 (de) | 2019-11-15 | 2021-05-20 | Carl Zeiss Microscopy Gmbh | Mikroskop und Verfahren mit Ausführen eines faltenden neuronalen Netzes |
CN111079904B (zh) * | 2019-12-23 | 2023-05-23 | 福建星网视易信息系统有限公司 | 深度可分离卷积的加速方法和存储介质 |
US11403727B2 (en) | 2020-01-28 | 2022-08-02 | Nxp Usa, Inc. | System and method for convolving an image |
DE102020201182A1 (de) * | 2020-01-31 | 2021-08-05 | Robert Bosch Gesellschaft mit beschränkter Haftung | Hardwarebeschleunigte Berechnung von Faltungen |
US11593609B2 (en) | 2020-02-18 | 2023-02-28 | Stmicroelectronics S.R.L. | Vector quantization decoding hardware unit for real-time dynamic decompression for parameters of neural networks |
WO2021183567A1 (en) * | 2020-03-10 | 2021-09-16 | Verheyen Henry | Hardware architecture for processing data in neural network |
US11513847B2 (en) | 2020-03-24 | 2022-11-29 | Deep Vision Inc. | System and method for queuing commands in a deep learning processor |
JP7367595B2 (ja) | 2020-04-07 | 2023-10-24 | 富士通株式会社 | 情報処理装置及び情報処理方法 |
US11500680B2 (en) * | 2020-04-24 | 2022-11-15 | Alibaba Group Holding Limited | Systolic array-friendly data placement and control based on masked write |
KR102441171B1 (ko) * | 2020-05-26 | 2022-09-08 | 한국전자통신연구원 | 다시점 얼굴 영상 기반 사용자 모니터링 장치 및 방법 |
CN111767985B (zh) * | 2020-06-19 | 2022-07-22 | 深圳市商汤科技有限公司 | 一种神经网络的训练方法、视频识别方法及装置 |
US11531873B2 (en) | 2020-06-23 | 2022-12-20 | Stmicroelectronics S.R.L. | Convolution acceleration with embedded vector decompression |
US11586442B2 (en) | 2020-08-06 | 2023-02-21 | Nxp Usa, Inc. | System and method for convolving image with sparse kernels |
GB2599098B (en) * | 2020-09-22 | 2024-04-10 | Imagination Tech Ltd | Hardware implementation of windowed operations in three or more dimensions |
US11734017B1 (en) | 2020-12-07 | 2023-08-22 | Waymo Llc | Methods and systems for processing vehicle sensor data across multiple digital signal processing cores virtually arranged in segments based on a type of sensor |
US20220207332A1 (en) * | 2020-12-31 | 2022-06-30 | Nxp Usa, Inc. | Scalable neural network accelerator architecture |
CN112967211A (zh) * | 2021-01-31 | 2021-06-15 | 成都商汤科技有限公司 | 一种图像处理方法、装置、计算机设备及存储介质 |
CN113191935A (zh) * | 2021-04-30 | 2021-07-30 | 华中科技大学 | 一种用于高斯金字塔构建的可重构硬件加速方法与系统 |
US20230032323A1 (en) * | 2021-07-28 | 2023-02-02 | Apical Limited | Image processing method and system |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8442927B2 (en) * | 2009-07-30 | 2013-05-14 | Nec Laboratories America, Inc. | Dynamically configurable, multi-ported co-processor for convolutional neural networks |
US20150178246A1 (en) * | 2013-12-20 | 2015-06-25 | Enric Herrero Abellanas | Processing device for performing convolution operations |
US20150294219A1 (en) * | 2014-04-11 | 2015-10-15 | Google Inc. | Parallelizing the training of convolutional neural networks |
Family Cites Families (75)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4445177A (en) | 1981-05-22 | 1984-04-24 | Data General Corporation | Digital data processing system utilizing a unique arithmetic logic unit for handling uniquely identifiable addresses for operands and instructions |
DE3851005T2 (de) | 1987-06-01 | 1995-04-20 | Applied Intelligent Syst Inc | Paralleles Nachbarverarbeitungssystem und -Verfahren. |
US4770430A (en) | 1987-08-11 | 1988-09-13 | Lange Dennis M | Self-steering axle assembly for vehicles |
US4935894A (en) | 1987-08-31 | 1990-06-19 | Motorola, Inc. | Multi-processor, multi-bus system with bus interface comprising FIFO register stocks for receiving and transmitting data and control information |
US5253308A (en) | 1989-06-21 | 1993-10-12 | Amber Engineering, Inc. | Massively parallel digital image data processor using pixel-mapped input/output and relative indexed addressing |
WO1994009595A1 (en) | 1991-09-20 | 1994-04-28 | Shaw Venson M | Method and apparatus including system architecture for multimedia communications |
JP3482660B2 (ja) | 1993-09-08 | 2003-12-22 | ソニー株式会社 | 画像データ処理装置および画像データ処理方法 |
US5612693A (en) | 1994-12-14 | 1997-03-18 | International Business Machines Corporation | Sliding window data compression using a toroidal bit shift register |
JP3573755B2 (ja) | 1996-01-15 | 2004-10-06 | シーメンス アクチエンゲゼルシヤフト | 画像処理プロセッサ |
US5892962A (en) | 1996-11-12 | 1999-04-06 | Lucent Technologies Inc. | FPGA-based processor |
US6366289B1 (en) | 1998-07-17 | 2002-04-02 | Microsoft Corporation | Method and system for managing a display image in compressed and uncompressed blocks |
US6587158B1 (en) | 1998-07-23 | 2003-07-01 | Dvdo, Inc. | Method and apparatus for reducing on-chip memory in vertical video processing |
US7010177B1 (en) | 1998-08-27 | 2006-03-07 | Intel Corporation | Portability of digital images |
EP1164544B1 (en) | 1999-03-16 | 2011-11-02 | Hamamatsu Photonics K.K. | High-speed vision sensor |
JP3922859B2 (ja) | 1999-12-28 | 2007-05-30 | 株式会社リコー | 画像処理装置、画像処理方法およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体 |
US6745319B1 (en) | 2000-02-18 | 2004-06-01 | Texas Instruments Incorporated | Microprocessor with instructions for shuffling and dealing data |
US6728862B1 (en) | 2000-05-22 | 2004-04-27 | Gazelle Technology Corporation | Processor array and parallel data processing methods |
US6728722B1 (en) | 2000-08-28 | 2004-04-27 | Sun Microsystems, Inc. | General data structure for describing logical data spaces |
US7286717B2 (en) | 2001-10-31 | 2007-10-23 | Ricoh Company, Ltd. | Image data processing device processing a plurality of series of data items simultaneously in parallel |
JP4146654B2 (ja) | 2002-02-28 | 2008-09-10 | 株式会社リコー | 画像処理回路、複合画像処理回路、および、画像形成装置 |
US9170812B2 (en) | 2002-03-21 | 2015-10-27 | Pact Xpp Technologies Ag | Data processing system having integrated pipelined array data processor |
WO2003088033A1 (en) | 2002-04-09 | 2003-10-23 | University Of Rochester | Multiplier-based processor-in-memory architectures for image and graphics processing |
AU2003286131A1 (en) | 2002-08-07 | 2004-03-19 | Pact Xpp Technologies Ag | Method and device for processing data |
US20060044576A1 (en) | 2004-07-30 | 2006-03-02 | Kabushiki Kaisha Toshiba | Apparatus for image processing |
US7667764B2 (en) | 2004-06-04 | 2010-02-23 | Konica Minolta Holdings, Inc. | Image sensing apparatus |
JP4219887B2 (ja) | 2004-12-28 | 2009-02-04 | 富士通マイクロエレクトロニクス株式会社 | 画像処理装置及び画像処理方法 |
ATE504043T1 (de) | 2005-04-28 | 2011-04-15 | Univ Edinburgh | Umkonfigurierbares anweisungs-zellen-array |
US7882339B2 (en) | 2005-06-23 | 2011-02-01 | Intel Corporation | Primitives to enhance thread-level speculation |
JP2007067917A (ja) | 2005-08-31 | 2007-03-15 | Matsushita Electric Ind Co Ltd | 画像データ処理装置 |
US7602974B2 (en) | 2005-10-21 | 2009-10-13 | Mobilic Technology (Cayman) Corp. | Universal fixed-pixel-size ISP scheme |
FR2895103B1 (fr) | 2005-12-19 | 2008-02-22 | Dxo Labs Sa | Procede et systeme de traitement de donnees numeriques |
US7802073B1 (en) | 2006-03-29 | 2010-09-21 | Oracle America, Inc. | Virtual core management |
US20080111823A1 (en) | 2006-11-13 | 2008-05-15 | Faraday Technology Corp. | Graphics processing system |
EP1927949A1 (en) | 2006-12-01 | 2008-06-04 | Thomson Licensing | Array of processing elements with local registers |
US8321849B2 (en) | 2007-01-26 | 2012-11-27 | Nvidia Corporation | Virtual architecture and instruction set for parallel thread computing |
US20080244222A1 (en) | 2007-03-30 | 2008-10-02 | Intel Corporation | Many-core processing using virtual processors |
TW200842699A (en) | 2007-04-06 | 2008-11-01 | Technology Properties Ltd | Signal processing |
JP4389976B2 (ja) | 2007-06-29 | 2009-12-24 | ブラザー工業株式会社 | 画像処理装置および画像処理プログラム |
JP4844853B2 (ja) | 2007-09-05 | 2011-12-28 | 国立大学法人東北大学 | 固体撮像素子及びその駆動方法 |
CN102047241B (zh) | 2008-05-30 | 2014-03-12 | 先进微装置公司 | 本地与全局数据共享 |
JP4999791B2 (ja) | 2008-06-30 | 2012-08-15 | キヤノン株式会社 | 情報処理装置、その制御方法、及びプログラム |
JP5376920B2 (ja) | 2008-12-04 | 2013-12-25 | キヤノン株式会社 | コンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置 |
US8456480B2 (en) | 2009-01-14 | 2013-06-04 | Calos Fund Limited Liability Company | Method for chaining image-processing functions on a SIMD processor |
KR101572879B1 (ko) | 2009-04-29 | 2015-12-01 | 삼성전자주식회사 | 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법 |
US20110055495A1 (en) | 2009-08-28 | 2011-03-03 | Qualcomm Incorporated | Memory Controller Page Management Devices, Systems, and Methods |
US8976195B1 (en) | 2009-10-14 | 2015-03-10 | Nvidia Corporation | Generating clip state for a batch of vertices |
US8436857B2 (en) | 2009-10-20 | 2013-05-07 | Oracle America, Inc. | System and method for applying level of detail schemes |
US8595428B2 (en) | 2009-12-22 | 2013-11-26 | Intel Corporation | Memory controller functionalities to support data swizzling |
US8749667B2 (en) | 2010-08-02 | 2014-06-10 | Texas Instruments Incorporated | System and method for maintaining maximum input rate while up-scaling an image vertically |
US8508612B2 (en) | 2010-09-30 | 2013-08-13 | Apple Inc. | Image signal processor line buffer configuration for processing ram image data |
US8797323B2 (en) | 2011-01-18 | 2014-08-05 | Intel Corporation | Shadowing dynamic volumetric media |
WO2012105174A1 (ja) | 2011-01-31 | 2012-08-09 | パナソニック株式会社 | プログラム生成装置、プログラム生成方法、プロセッサ装置及びマルチプロセッサシステム |
US9092267B2 (en) | 2011-06-20 | 2015-07-28 | Qualcomm Incorporated | Memory sharing in graphics processing unit |
US20130027416A1 (en) | 2011-07-25 | 2013-01-31 | Karthikeyan Vaithianathan | Gather method and apparatus for media processing accelerators |
JP5742651B2 (ja) | 2011-10-15 | 2015-07-01 | コニカミノルタ株式会社 | 画像処理装置、連携方法および連携プログラム |
JP5746100B2 (ja) | 2011-12-27 | 2015-07-08 | 京セラドキュメントソリューションズ株式会社 | 画像形成装置 |
US8823736B2 (en) | 2012-01-20 | 2014-09-02 | Intel Corporation | Graphics tiling architecture with bounding volume hierarchies |
US10244246B2 (en) | 2012-02-02 | 2019-03-26 | Texas Instruments Incorporated | Sub-pictures for pixel rate balancing on multi-core platforms |
US9235769B2 (en) | 2012-03-15 | 2016-01-12 | Herta Security, S.L. | Parallel object detection method for heterogeneous multithreaded microarchitectures |
TWI520598B (zh) | 2012-05-23 | 2016-02-01 | 晨星半導體股份有限公司 | 影像處理裝置與影像處理方法 |
US9232139B2 (en) | 2012-07-24 | 2016-01-05 | Apple Inc. | Image stabilization using striped output transformation unit |
US10318308B2 (en) * | 2012-10-31 | 2019-06-11 | Mobileye Vision Technologies Ltd. | Arithmetic logic unit |
US9378181B2 (en) | 2012-11-09 | 2016-06-28 | Intel Corporation | Scalable computing array |
US8954992B2 (en) | 2013-03-15 | 2015-02-10 | Lenovo Enterprise Solutions (Singapore) Pte. Ltd. | Distributed and scaled-out network switch and packet processing |
US9477999B2 (en) * | 2013-09-20 | 2016-10-25 | The Board Of Trustees Of The Leland Stanford Junior University | Low power programmable image processor |
EP3035204B1 (en) * | 2014-12-19 | 2018-08-15 | Intel Corporation | Storage device and method for performing convolution operations |
US9749548B2 (en) | 2015-01-22 | 2017-08-29 | Google Inc. | Virtual linebuffers for image signal processors |
US10095479B2 (en) | 2015-04-23 | 2018-10-09 | Google Llc | Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure |
US9965824B2 (en) | 2015-04-23 | 2018-05-08 | Google Llc | Architecture for high performance, power efficient, programmable image processing |
US10291813B2 (en) | 2015-04-23 | 2019-05-14 | Google Llc | Sheet generator for image processor |
US9756268B2 (en) | 2015-04-23 | 2017-09-05 | Google Inc. | Line buffer unit for image processor |
US9785423B2 (en) | 2015-04-23 | 2017-10-10 | Google Inc. | Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure |
US9772852B2 (en) | 2015-04-23 | 2017-09-26 | Google Inc. | Energy efficient processor core architecture for image processor |
US9769356B2 (en) | 2015-04-23 | 2017-09-19 | Google Inc. | Two dimensional shift array for image processor |
US10671564B2 (en) * | 2015-10-08 | 2020-06-02 | Via Alliance Semiconductor Co., Ltd. | Neural network unit that performs convolutions using collective shift register among array of neural processing units |
-
2016
- 2016-07-01 US US15/201,204 patent/US10546211B2/en active Active
-
2017
- 2017-06-07 JP JP2018567935A patent/JP6764954B2/ja active Active
- 2017-06-07 KR KR1020197000838A patent/KR102232722B1/ko active IP Right Grant
- 2017-06-07 EP EP17740501.6A patent/EP3479302B1/en active Active
- 2017-06-07 WO PCT/US2017/036441 patent/WO2018005030A1/en active Search and Examination
- 2017-06-20 GB GB1907743.7A patent/GB2574940B/en active Active
- 2017-06-20 GB GB1814094.7A patent/GB2564285B/en active Active
- 2017-06-20 GB GB1709785.8A patent/GB2554491B/en active Active
- 2017-06-21 DE DE102017113733.5A patent/DE102017113733B4/de active Active
- 2017-06-21 DE DE202017103694.4U patent/DE202017103694U1/de active Active
- 2017-06-23 US US15/631,906 patent/US10789505B2/en active Active
- 2017-06-29 TW TW106121712A patent/TWI690858B/zh active
- 2017-07-03 CN CN201710532146.4A patent/CN107563952B/zh active Active
-
2020
- 2020-09-22 US US17/028,097 patent/US20210004633A1/en active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8442927B2 (en) * | 2009-07-30 | 2013-05-14 | Nec Laboratories America, Inc. | Dynamically configurable, multi-ported co-processor for convolutional neural networks |
US20150178246A1 (en) * | 2013-12-20 | 2015-06-25 | Enric Herrero Abellanas | Processing device for performing convolution operations |
US20150294219A1 (en) * | 2014-04-11 | 2015-10-15 | Google Inc. | Parallelizing the training of convolutional neural networks |
Non-Patent Citations (1)
Title |
---|
QADEER等: "convolution engine:balancingefficiency & flexibility in specialized computing", 《CONVOLUTION ENGINE:BALANCINGEFFICIENCY & FLEXIBILITY IN SPECIALIZED COMPUTING》 * |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108182471A (zh) * | 2018-01-24 | 2018-06-19 | 上海岳芯电子科技有限公司 | 一种卷积神经网络推理加速器及方法 |
CN111684473A (zh) * | 2018-01-31 | 2020-09-18 | 亚马逊技术股份有限公司 | 提高神经网络阵列的性能 |
US11720523B2 (en) | 2018-01-31 | 2023-08-08 | Amazon Technologies, Inc. | Performing concurrent operations in a processing element |
CN111684473B (zh) * | 2018-01-31 | 2021-10-22 | 亚马逊技术股份有限公司 | 提高神经网络阵列的性能 |
US11645504B2 (en) | 2018-03-13 | 2023-05-09 | Recogni Inc. | Methods for processing vertical stripes of data in an efficient convolutional engine |
CN112236783A (zh) * | 2018-03-13 | 2021-01-15 | 雷哥尼公司 | 高效卷积引擎 |
US11580372B2 (en) | 2018-03-13 | 2023-02-14 | Recogni Inc. | Efficient convolutional engine |
US11593630B2 (en) | 2018-03-13 | 2023-02-28 | Recogni Inc. | Efficient convolutional engine |
CN112236783B (zh) * | 2018-03-13 | 2023-04-11 | 雷哥尼公司 | 高效卷积引擎 |
US11694068B2 (en) | 2018-03-13 | 2023-07-04 | Recogni Inc. | Methods for processing horizontal stripes of data in an efficient convolutional engine |
US11694069B2 (en) | 2018-03-13 | 2023-07-04 | Recogni Inc. | Methods for processing data in an efficient convolutional engine with partitioned columns of convolver units |
CN108829610B (zh) * | 2018-04-02 | 2020-08-04 | 浙江大华技术股份有限公司 | 一种神经网络前向计算过程中的内存管理方法及设备 |
CN108681984A (zh) * | 2018-07-26 | 2018-10-19 | 珠海市微半导体有限公司 | 一种3*3卷积算法的加速电路 |
CN108681984B (zh) * | 2018-07-26 | 2023-08-15 | 珠海一微半导体股份有限公司 | 一种3*3卷积算法的加速电路 |
CN109086875A (zh) * | 2018-08-16 | 2018-12-25 | 郑州云海信息技术有限公司 | 一种基于宏指令集的卷积网络加速方法及装置 |
CN110728367B (zh) * | 2019-12-18 | 2020-05-05 | 深圳鲲云信息科技有限公司 | 用于神经网络的数据存储方法及装置 |
CN110728367A (zh) * | 2019-12-18 | 2020-01-24 | 深圳鲲云信息科技有限公司 | 用于神经网络的数据存储方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107563952B (zh) | 2021-04-16 |
DE102017113733A1 (de) | 2018-01-04 |
GB2564285B (en) | 2019-07-17 |
JP2019522291A (ja) | 2019-08-08 |
US20210004633A1 (en) | 2021-01-07 |
EP3479302B1 (en) | 2023-11-01 |
GB201814094D0 (en) | 2018-10-17 |
JP6764954B2 (ja) | 2020-10-07 |
WO2018005030A1 (en) | 2018-01-04 |
US20180005074A1 (en) | 2018-01-04 |
DE102017113733B4 (de) | 2022-06-30 |
US20180005075A1 (en) | 2018-01-04 |
GB2574940B (en) | 2020-07-22 |
DE202017103694U1 (de) | 2017-10-04 |
GB2574940A (en) | 2019-12-25 |
TW201802727A (zh) | 2018-01-16 |
GB2564285A (en) | 2019-01-09 |
US10789505B2 (en) | 2020-09-29 |
US10546211B2 (en) | 2020-01-28 |
GB201907743D0 (en) | 2019-07-17 |
GB201709785D0 (en) | 2017-08-02 |
EP3479302A1 (en) | 2019-05-08 |
KR20190022627A (ko) | 2019-03-06 |
KR102232722B1 (ko) | 2021-03-29 |
GB2554491B (en) | 2018-10-10 |
GB2554491A (en) | 2018-04-04 |
TWI690858B (zh) | 2020-04-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107563952A (zh) | 可编程二维图像处理器上的卷积神经网络 | |
CN107438860A (zh) | 用于高性能功率高效的可编程图像处理的架构 | |
CN107408041A (zh) | 用于图像处理器的能量高效的处理器核心架构 | |
CN107438861A (zh) | 用于图像生成器的数据片生成器 | |
CN107430760A (zh) | 用于图像处理器的二维移位阵列 | |
CN107563953A (zh) | 具有二维执行通道阵列和二维移位寄存器的图像处理器的区块操作 | |
CN107533750A (zh) | 虚拟图像处理器指令集架构(isa)和存储器模型与具有二维移位阵列结构的示例性目标硬件 | |
CN108541321A (zh) | 将程序代码映射到高性能、高功效的可编程图像处理硬件平台的编译技术 | |
CN110149802A (zh) | 用于在虚拟图像处理器指令集架构(isa)与具有二维移位阵列结构的目标硬件之间进行转译的编译器 | |
CN107133908A (zh) | 用于图像处理器的编译器管理存储器 | |
CN107563954A (zh) | 具有二维执行通道阵列和二维移位寄存器的图像处理器上区块操作的核处理 | |
CN107563951A (zh) | 在二维图像处理器上的统计操作 | |
JP6567770B2 (ja) | 低減された配線複雑度を有するシフトレジスタ | |
US10430919B2 (en) | Determination of per line buffer unit memory allocation | |
TWI752343B (zh) | 用於執行絕對差計算之加總的執行單元電路、影像處理器以及方法 | |
CN110300944A (zh) | 具有可配置数目的活动核心和支持内部网络的图像处理器 | |
KR102217969B1 (ko) | 멀티 코어 이미지 프로세서에서의 애플리케이션 소프트웨어의 구성 | |
CN110192220A (zh) | 提高图像处理器运行时效率的程序代码转换 | |
US10185560B2 (en) | Multi-functional execution lane for image processor |
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 | ||
CB02 | Change of applicant information |
Address after: American California Applicant after: Google limited liability company Address before: American California Applicant before: Google Inc. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |