CN114358239A - 多核硬件中神经网络的实现方式 - Google Patents
多核硬件中神经网络的实现方式 Download PDFInfo
- Publication number
- CN114358239A CN114358239A CN202111193846.8A CN202111193846A CN114358239A CN 114358239 A CN114358239 A CN 114358239A CN 202111193846 A CN202111193846 A CN 202111193846A CN 114358239 A CN114358239 A CN 114358239A
- Authority
- CN
- China
- Prior art keywords
- group
- tile
- layers
- core
- output
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- 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/08—Learning methods
-
- 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/10—Interfaces, programming languages or software development kits, e.g. for simulating neural networks
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C11/00—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C11/54—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using elements simulating biological cells, e.g. neuron
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Computer Hardware Design (AREA)
- Image Analysis (AREA)
- Semiconductor Memories (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
Abstract
本发明公开了多核硬件中神经网络的实现方式。公开了深度神经网络的多核硬件实现方式。网络的多个层被布置在多个层组中。网络的输入数据包括多维张量,该多维张量包括一个或多个遍历维度,这些维度是由第一层组的至少一个层中的步幅遍历的维度。硬件实现方式被配置为沿着遍历维度中的至少一个将用于第一层组的输入数据分割成至少第一图块和第二图块,每个图块包括一个或多个遍历维度中的每一个中的多个数据元素。第一核被配置为基于第一图块深度优先地评估多个层组。第二核被配置为基于第二图块深度优先地评估多个层组。
Description
技术领域
本发明涉及多核硬件中神经网络的实现方式。
背景技术
深度神经网络(DNN)是一种可用于机器学习应用程序的人工神经网络。特别地,DNN可用于信号处理应用程序,包括图像处理和计算机视觉应用程序。
DNN已在功率资源不作为重要因素的应用程序中得以实现。尽管如此,DNN在许多不同的技术领域中都有应用,在这些技术领域中,用于实现DNN的硬件资源使得功耗、处理能力或硅面积受限。因此,需要实现一种被配置为以高效方式,例如以操作时需要较少的硅面积或较少处理功率的方式实现DNN(或其至少一部分)的硬件。此外,DNN可针对各种不同应用程序以多种不同方式进行配置。因此,还需要一种用于实现DNN的具有能够支持各种DNN配置的灵活性的硬件。随着DNN在结构上变得更加复杂,并且需要在更短的时间段内处理更大量的数据(例如,用于实时应用程序中的推理),越来越需要具有更大处理能力的硬件,同时保持或提高面积效率和功率效率。
发明内容
提供本发明内容是为了以简化的形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
公开了深度神经网络的多核硬件实现方式。网络的多个层被布置在多个层组中。网络的输入数据包括多维张量,该多维张量包括一个或多个遍历维度,这些维度是由第一层组的至少一个层中的步幅遍历的维度。硬件实现方式被配置为沿着遍历维度中的至少一个将用于第一层组的输入数据分割成至少第一图块和第二图块,每个图块包括一个或多个遍历维度中的每一个中的多个数据元素。第一核被配置为基于第一图块深度优先地评估多个层组。第二核被配置为基于第二图块深度优先地评估多个层组。
根据一个方面,提供了一种用于在多核硬件中实现深度神经网络的方法。
根据该方法,通过将数据分割成其评估分布在多个核上的图块,可以以深度优先的方式评估神经网络的层组。这里,深度优先意味着在继续任何其他评估之前,给定的核基于给定的图块评估多个连续的层组。例如,在第一核评估任何其他图块或层组之前,第一核基于第一图块评估第一层组,然后基于第一层组的第一输出图块评估第二层组。第二核相应地动作。每个层组的每个输出图块都充当下一个层组的输入图块,直到最后一个层组。沿着遍历维度中的一个或多个将数据分割成图块可以使得层组能够通过层融合以深度优先的方式被处理,同时降低对一个或多个第二存储器装置的大小要求。大小减小是可能的,因为一个或多个第二存储器装置不需要存储由每个层组输出的整个张量。它们可以存储对应于该图块的张量的子集。
评估层组意味着评估层组的每一层。层组可以被定义为使得单个层组的所有层可以在单个硬件传播过程中被评估。例如,可以在给定核的硬件流水线中评估单个层组的所有层,而不需要向一个或多个第二存储器装置或一个或多个第一存储器装置写入任何数据。在一些情况下,层组可以由神经网络的单个层组成。在其他情况下,层组可以由多个层组成。例如,层组可以包括以下任意一个或任意两个或更多个:单个卷积层、单个池化层、单个激活层、单个归一化层和单个逐元素操作层。在一些情况下,第一层组和第二层组中的每一个可以包括卷积层。可选地,层组可以包括至多一个卷积层。
访问一个或多个第二存储器装置的成本可小于访问一个或多个第一存储器装置的成本。成本可能是时间或功耗方面的。例如,一个或多个第一存储器装置可以被提供为片外存储器;一个或多个第二存储器装置可以被提供为片上存储器。
遍历的维度可以包括X维度(列)和Y维度(行),以及可选的批处理维度B。输入数据可以包括附加维度,诸如通道维度C。输入数据可以由多个滤波器处理,以产生相应数量的输出通道F。
在开始层组的评估之前,可以预先计划分割输入数据的步骤。换句话讲,可以在神经网络的训练阶段或推理阶段开始之前计划分割。可以基于各个层组中的层的参数以及每个层的输入和输出处的张量大小来预先计划分割。
多个层组可形成图块组。图块组是基于每个图块深度优先地一起处理的一组层组。图块组以初始层组开始,并以最终层组结束。图块组中的最终层组的输出图块可以存储在一个或多个第一存储器装置中。
深度神经网络可以是卷积神经网络。
该方法还可以包括将多个层组中的最终层组的第一输出图块和第二输出图块存储在一个或多个第一存储器装置中。以此方式,在评估层组时生成的中间数据被存储在一个或多个第二存储器装置中,并且通过评估最终层组生成的输出数据被存储在一个或多个第一存储器装置中。
该方法可选地还包括:分析用于第一层组的输入数据的至少一个特性;以及基于该分析确定输入数据可以沿着遍历维度中的所述至少一个分割成图块,其中用于第一层组的输入数据的分割响应于所述确定来执行。至少一个特性可选地包括至少一个遍历维度中的输入数据的大小,并且确定输入数据可以被分割成图块可以包括确定至少一个遍历维度中的大小大于阈值大小。
如果至少一个遍历维度中的大小不大于阈值大小,则可以沿着其他(非遍历)维度之一分割层组的评估。换句话讲,虽然较大张量的处理可以沿着一个或多个遍历维度在核之间划分,但是较小张量可以沿着诸如批处理或通道维度的其他维度在核之间划分。
图块的大小在层组内和层组之间可能不同。特别地,层组的输入数据的头图块和尾图块的大小可以不同于该层组的其他图块。由于数据依赖关系的影响,图块组的较早层组中的头图块可能大于图块组的较晚层组中的头图块。对于给定的层组,其他图块(即,在头图块和尾图块之间的那些图块)可以具有一致的大小。这些综合因素可能意味着尾图块倾向于朝较早的层组缩小。
初始层组的头图块可能大于该层组的所有其他图块。这可能是由于数据依赖关系导致的头图块穿过层组向后“增长”导致的。
可以选择图块大小,使得最终层组中的头图块的大小小于最终层组中的一些或所有其他图块。这可以通过减缓向后穿过层组的头图块的“增长”而有助于在不同核之间平衡负载。如果在任何给定层组中的头图块太大,则该图块可能会延误整体评估(另请参见下面关于核之间同步的注释)。减小最终层组中初始图块的大小会减小所有层组的大小(因为数据依赖关系),从而有助于避免初始图块比其他图块大得多(并且花费长得多的时间来处理)的情况。
用于第一层组的输入数据可以分割成第一数量的图块,并且用于第二层组的输入数据可以分割成第二数量的图块,其中第二数量与第一数量相差最多一个。特别地,在一些情况下(取决于网络的特性),层组可能需要比其先前层组多一个图块。如上面所解释的,这是由于初始图块和尾图块的大小不同而产生的。由于尾图块的大小可能朝较早的层组缩小,因此它有时可能完全消失。
分割用于第一层组的输入数据可以包括将其分割成第一图块、第二图块和第三图块,该方法可选地还包括:将第三图块分配给第一核;以及在使用第一核基于第一图块评估每个层组之后,使用第一核基于第三图块评估每个层组。
当层组被分割成比多核硬件中的核的数量更多的多个图块时,可以这样做。可以选择图块的数量,使得它是核的数量的整数倍(对于层组中的至少一个来说)。基于第一和第二图块的图块组的所有层组的评估被称为第一多核图块传播过程。然后,基于第三图块的所有层组的评估表示第二多核图块传播过程(的至少一部分)。需注意,如果第三图块是多个图块中的尾图块,则第二核在第二多核图块传播过程期间可能是空闲的。
一个或多个第二存储器装置可以包括:第一核的本地存储器,其仅可由第一核访问;第二核的本地存储器,其仅可由第二核访问;和共享存储器,其可由第一核和第二核访问。该方法还可以包括:识别第一层组的第一输出图块的一次性部分,该一次性部分仅仅是基于第一图块评估第二层组所需要的;以及识别第一层组的第一输出图块的重叠部分,该重叠部分是基于第一图块评估第二层组所需要的,并且也是基于第二图块评估第二层组所需要的,该方法可选地包括当将第一层组的第一输出图块存储在一个或多个第二存储器装置中时:将第一输出图块的一次性部分写入第一核的本地存储器;以及将第一输出图块的重叠部分写入共享存储器。
如上文所讨论,第三图块可以被分配给第一核。该方法还可以包括:识别第一层组的第二输出图块的一次性部分,该一次性部分仅仅是基于第二图块评估第二层组所需要的;以及识别第一层组的第二输出图块的重叠部分,该重叠部分是基于第二图块评估第二层组所需要的,并且也是基于第三图块评估第二层组所需要的。该方法可以包括当将第一层组的第二输出图块存储在一个或多个第二存储器装置中时:将第二输出图块的一次性部分写入第一核的本地存储器;以及将第二输出图块的重叠部分写入共享存储器。
第二输出图块的重叠部分可以比第一输出图块的重叠部分在共享存储器中保存更长的时间。特别地,(仅当)只要它们被需要(时),重叠部分就可以保留在共享存储器中。第一输出图块的重叠部分可以被一直保留,直到它在基于第二输出图块评估第二层组时被第二核使用为止。第二输出图块的重叠部分可以被一直保留,直到它在基于第三输出图块评估第二层组时被第一核使用为止。
第一层组可以包括卷积层,该方法还包括在共享存储器中存储卷积层的权重值和/或偏置值。这可以允许核中的每一个访问系数(权重和/或偏差)数据,以评估其相应的一个或多个图块的卷积层。
该方法还可以包括:等待第一核完成对第一图块的第一层组的评估并等待第二核完成对第二图块的第一层组的评估,然后使用第二核评估第二图块的第二层组。
这可以表示满足数据依赖关系要求的最小同步条件,特别是当第一输出图块包括重叠数据时。它反映了这样的事实,即第二核将需要(i)第一层组的第一输出图块的重叠数据,以及(ii)第一层组的第二输出图块,以便基于第二图块评估第二层组。重叠数据的存在将取决于网络的结构。例如,如果内核大小大于步幅(忽略膨胀大小),卷积层将生成重叠数据;如果步幅大于1,卷积转置将生成重叠数据;并且如果内核大小或步幅大于1,池化层将生成重叠数据。
该方法可以包括在任何核开始评估第二层组之前等待所有核完成对第一层组的评估。
原则上,最小同步条件允许每个核继续其对图块的沿深度方向的处理,只要来自先前图块的必要重叠数据可用。允许核以这种方式“自由运行”可以导致一些核在其处理方面显著领先于其他核。尽管原则上这可能是充分利用核的潜力的好方法,但实际上,本发明人已经认识到,这通常不会导致性能上的整体增益。在一定数量的层组(“图块组”)已经沿深度方向处理之后,输出数据可以被写入一个或多个第一存储器装置。图块组可以包括神经网络的层的子集,或者它可以包括神经网络的所有层。直到所有组成图块都已完成,图块组才完成。因此,硬件不可避免地仍然受到图块上并行评估操作的最慢路径的限制。同时,可能有很大的管理开销来支持自由运行。因此,可以通过在每个层组之后同步所有核来简化硬件实现方式,而不会减慢处理。另一方面,在一些应用(例如,语音处理)中,一些输出数据尽早可用可能是有利的。在这种情况下,可以通过自由运行实现的产生第一输出的延迟的减少可能证明增加的管理开销是合理的。
用于第一层组的输入数据可选地包括第一遍历维度和第二遍历维度,其中输入数据可以存储在首先根据第一维度排序的一个或多个第一存储器装置中,并且其中输入数据可以沿着第二维度分割。
例如,输入数据可以行优先地存储,换句话说,根据X维度排序。在这种情况下,输入数据可以在Y维度上分割成图块。替代地,输入数据可以列优先地存储(首先根据Y维度排序),并且它可以沿着X维度分割成图块。
当输入数据元素被紧密地打包到存储器中,并且在数据元素和用于读取和写入存储器的突发大小之间没有一一对应关系时,以这种方式分割可能是有利的。它可以通过从存储器中为每个图块读取一组连续的突发来允许数据被分割。同样,当重组最终层组的输出图块时,有可能通过单组连续的突发来写入每个输出图块。
在一些实施例中,输入数据可以仅沿着第二维度被分割,由此图块在第一维度中具有实际大小的原始张量。
如果第二维度中的输入数据的大小不大于阈值大小,则输入数据可以沿着第一维度或另一维度被分割。
根据另一个方面,提供了深度神经网络的硬件实现方式。
第一和第二核可以被配置为并行操作,其中第一核基于第一图块评估第一层组,而第二核基于第二图块评估第一层组。
一个或多个第二存储器装置可以包括:第一核的本地存储器,其仅可由第一核访问;第二核的本地存储器,其仅可由第二核访问;和共享存储器,其可由第一核和第二核访问。分割器可以被配置为:识别第一层组的第一输出图块的一次性部分,该一次性部分仅仅是基于第一图块评估第二层组所需要的;以及识别第一层组的第一输出图块的重叠部分,该重叠部分是基于第一图块评估第二层组所需要的,并且也是基于第二图块评估第二层组所需要的,并且第一核可以被配置为当将第一层组的第一输出图块存储在一个或多个第二存储器装置中时:将一次性部分写入其本地存储器;以及将重叠部分写入共享存储器。
当基于第二图块评估第二层组时,第二核可以被配置为从共享存储器检索重叠部分。
存储重叠数据使得其可由第二核访问可以避免在基于第二图块评估第二层组时重新计算重叠数据的需要。
替代地,通过计算第一核和第二核两者中的重叠数据,可以避免存储重叠数据的需要。换句话讲,对于后续层组来说核所需的所有数据可以由该核计算。在这种情况下,第一层组的第一输出图块和第一层组的第二输出图块将包含公共部分(对应于重叠部分)。这种方法导致并行操作的核之间的一些计算重复;然而,它的优势在于,在层组的末端处没有一个核需要等待任何其他核——也就是说,每个核都有完全的自由来自由运行,独立于任何其他核正在执行的计算。第一层组的第一输出图块可以完全存储在第一核的本地存储器中;并且第一层组的第二输出图块可以完全存储在第二核的本地存储器中。
每个核可以包括配置为处理输入数据以评估一层神经网络的多个处理元件。
还提供了一种人工智能加速器系统,其包括如上文所概述的硬件实现方式。还提供了一种人工智能加速器系统,其被配置为执行如上文所概述的方法。这样的人工智能加速器系统可以在集成电路上的硬件中体现。
还提供了一种使用集成电路制造系统来制造人工智能加速器系统的方法。
还提供了一种使用集成电路制造系统来制造人工智能加速器系统的方法,该方法包括:使用布局处理系统处理人工智能加速器系统的计算机可读描述,以便生成体现人工智能加速器系统的集成电路的电路布局描述;以及使用集成电路生成系统根据该电路布局描述来制造人工智能加速器系统。
还提供了一种计算机可读代码,该计算机可读代码被配置为在运行该代码时使得方法被执行。还提供了一种计算机可读存储介质,在其上编码有所述计算机可读代码。
还提供了一种集成电路定义数据集,该集成电路定义数据集当在集成电路制造系统中被处理时配置集成电路制造系统以制造人工智能加速器系统。
还提供了一种非暂时性计算机可读存储介质,其上存储有人工智能加速器系统的计算机可读描述,该计算机可读描述当在集成电路制造系统中被处理时使得集成电路制造系统制造体现人工智能加速器系统的集成电路。
还提供了一种非暂时性计算机可读存储介质,其上存储有人工智能加速器系统的计算机可读描述,该计算机可读描述当在集成电路制造系统中被处理时使得集成电路制造系统:使用布局处理系统处理人工智能加速器系统的计算机可读描述,以便生成体现人工智能加速器系统的集成电路的电路布局描述;并且使用集成电路生成系统根据该电路布局描述来制造人工智能加速器系统。
还提供了一种集成电路制造系统,其被配置为制造人工智能加速器系统。
还提供了一种集成电路制造系统,其包括:非暂时性计算机可读存储介质,其上存储有人工智能加速器系统的计算机可读描述;布局处理系统,其被配置为处理计算机可读描述以便生成体现人工智能加速器系统的集成电路的电路布局描述;和集成电路生成系统,其被配置为根据该电路布局描述来制造人工智能加速器系统。
布局处理系统可以被配置为确定从集成电路描述导出的电路的逻辑部件的位置信息,以便生成体现人工智能加速器系统的集成电路的电路布局描述。
可以提供用于执行本文所述的任一种方法的计算机程序代码。可以提供非暂态计算机可读存储介质,所述非暂态计算机可读存储介质上存储有计算机可读指令,所述计算机可读指令在计算机系统处执行时使计算机系统执行本文所述的任一种方法。
如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
附图说明
现在将参考附图详细描述示例,在附图中:
图1是示例性深度神经网络(DNN)的示意图;
图2是DNN中的示例性数据的示意图;
图3是DNN的卷积层的示例性硬件实现方式的框图;
图4是图3的示例性卷积引擎的框图;
图5是示出根据示例性硬件实现方式的数据流的示意图;
图6示出了针对数据的第一块,在DNN的多个层内的数据依赖关系;
图7示出了针对数据的第二块,在图6的多个层内的数据依赖关系;
图8是重叠数据概念的概念图;
图9示意性地示出了与DNN的硬件实现方式相关联的存储器的示例性分配;
图10示出了具有四个层并且没有分支的DNN;
图11A示出了带有四个具有分支的层的DNN的层的示例性分组;
图11B示出了针对图11A的DNN的替代的示例性分组;
图12是根据示例的多核硬件实现方式的框图;
图13示出了根据第一方面当将输入数据分割成图块并深度优先地处理这些图块时图12的多核硬件中的执行顺序的示例;
图14A至图14B示出了在另一个示例中核之间的同步,在该示例中,输入数据被分割成图块并被深度优先地处理;
图15是示出当将输入数据分割成图块时在多核硬件中实现卷积神经网络的方法的流程图;
图16示出了根据第二方面当将层的评估分割成传播过程时执行顺序的示例;
图17是流程图,示出了当将层的评估分割成传播过程时在多核硬件中实现卷积神经网络的方法;
图18示出了其中实现图形处理系统的计算机系统;并且
图19示出了用于生成体现图形处理系统的集成电路制造系统。
附图示出了各种示例。技术人员将理解,附图中所示的元素边界(例如,框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元素可以被设计为多个元素,或者多个元素可以被设计为一个元素。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文中描述的实施例,并且对所公开的实施例的各种修改对于本领域的技术人员而言将是显而易见的。现在仅通过示例的方式来描述实施方案。
深度神经网络(DNN)是一种人工神经网络,包括多个相互连接的层,所述多个相互连接的层可以使DNN执行信号处理任务,包括但不限于计算机视觉任务。图1示出了包括多个层102-1、102-2、102-3的示例性DNN 100。每一层102-1、102-2、102-3接收输入数据,并且根据层来处理该输入数据以产生输出数据。输出数据要么作为另一层的输入数据提供给该层,要么作为DNN的最终输出数据输出。例如,在图1的DNN 100中,第一层102-1接收DNN 100的原始输入数据104,并且根据第一层102-1来处理输入数据以产生输出数据。第一层102-1的输出数据成为第二层102-2的输入数据,该第二层根据第二层102-2处理该输入数据以产生输出数据。第二层102-2的输出数据成为第三层102-3的输入数据,该第三层根据第三层102-3处理该输入数据以产生输出数据。第三层102-3的输出数据作为DNN的输出数据106输出。
对层的输入数据执行的处理取决于层的类型。例如,DNN的每一层可以是多种不同类型中的一种。示例性DNN层类型包括但不限于卷积层、激活层、归一化层、池化层,以及全连接层。对于本领域的技术人员将显而易见的是,这些是示例性DNN层类型,并且这不是详尽的列表,并且可存在其他DNN层类型。
卷积层被配置为使用与该层相关联的权重来对输入数据进行卷积。具体地,每个卷积层与多个权重w1…wi相关联,所述多个权重还可以被称为滤波器权重或系数。权重可被分组以形成或定义一个或多个滤波器或内核。
参考图2,该图示出了在DNN中使用的数据200的格式的示例。如在图2中可以看到的,在DNN中使用的数据200可被布置为p个数据平面,其中每个平面具有x×y的尺寸。DNN可包括一个或多个卷积层,其中每一个卷积层与多个滤波器相关联,每个滤波器包括多个权重。每个滤波器具有m×n×p的尺寸(即,每个滤波器包括一组m×n×p个权重w),并且根据跨若干步骤(称为步幅)s和t的卷积运算将其应用于输入数据,如图2所示。在每个步幅应用滤波器的数据元素的组被称为窗口。每个滤波器产生一个输出平面。滤波器的数量和每个滤波器的权重的数量可在卷积层与卷积层之间变化。卷积神经网络(CNN)是一种有效的图像识别和分类方法,它是DNN的一种特殊类型,一般包括多个卷积层。
在描述本发明的主题的多核硬件实现方式之前,将描述单核示例。卷积层的(单核)硬件实现方式可包括硬件模块或块(在本文中可被称为“处理元件”),该模块或块被配置为计算形成滤波器的全部或一部分的权重与形成窗口的全部或一部分的输入数据值之间的乘积之和(可被称为滤波器窗口计算)。由于通常执行大量的此类滤波器窗口计算,因此一些硬件实现方式可包括多个此类处理元件,使得可以并行执行一个以上的滤波器窗口计算。使每个处理元件准备执行滤波器窗口计算涉及从一个或多个第一存储器装置读取每个滤波器窗口计算的适当输入数据和权重,并且将其提供给处理元件中的一个。通常,需要将大量数据从存储器传输至处理元件。如果不能高效地完成该操作,则可导致用于向处理元件提供输入数据和权重的高存储器带宽要求和高功耗。当存储器为“片外”存储器时,即在与处理元件不同的集成电路或半导体管芯中实现时,尤其如此。
因此,本文中描述了神经网络的硬件实现方式以及用于在此类硬件实现方式中处理数据的方法,其中输入数据和权重以高效方式提供给处理元件,以减少将输入数据和权重提供给处理元件所需的存储器带宽和消耗的功率。特别地,可以以沿深度方向的方式处理数据的块(也称为“图块”),经过神经网络的多个层。多个层内的层的中间输出可被存储在一个或多个第二存储器装置中。一个或多个第二存储器装置的大小可小于用于批量存储数据的一个或多个第一存储器装置的大小,但是可以更快和/或更加能源高效的方式进行访问。在一个示例中,一个或多个第二存储器装置中的至少一个被设置在芯片上(即,与处理元件在相同的集成电路或半导体管芯中)。
现在参考图3,该图示出了DNN的卷积层的示例性单核硬件实现方式300。硬件实现方式300包括多个卷积引擎302、多个累加器304、累积缓冲器306、系数缓冲器308,以及输入缓冲器310。每个卷积引擎302与其相应的累加器304及其在累积缓冲器306的资源中的份额一起表示处理元素318。硬件实现方式还包括作为片外存储器的双倍数据速率(DDR)SDRAM312;片上存储器(OCM)314,以及输出缓冲器316。
每个卷积引擎302包括被配置为接收表示滤波器的全部或一部分的一组权重(例如,{w1…w8})以及表示窗口的全部或一部分的一组输入数据值(例如,{d1…d8})并且对所接收的权重和输入数据值执行相乘-累加计算的硬件逻辑,如图4所示。在一些示例中,如图4所示,每个卷积引擎302可包括多个乘法器402,每个乘法器被配置为将权重(wi)和对应的输入数据值(di)相乘以产生乘法输出值。乘法器402之后是形成加法器树的多个加法器404,以计算乘法输出的总和。在图4的示例中,卷积引擎302包括八个乘法器402,但在其他示例中,可存在更多或更少的乘法器。例如,在某些情况下,可能有128个乘法器。通常,如果存在Z个乘法器402,则加法器树包括Z-1个加法器404。
在某些情况下,相乘-累加计算是流水线型的。例如,乘法器402和加法器404可被划分为多个流水线级,其中在第一流水线级之前并且在每对流水线级之间具有寄存器级(未示出)。例如,乘法器可以形成第一流水线级,并且加法器可以被划分为层,其中随后的流水线级包括一个或多个加法器层。
图3的示例性硬件实现方式300包括四个卷积引擎302;然而,对于本领域的技术人员将显而易见的是,本文中描述的方法和原理适用于具有任何数量的卷积引擎的硬件实现方式。
由于卷积引擎可能要经过一个以上的硬件传播过程来生成完整的滤波器结果(例如,因为卷积引擎可能仅接收和处理滤波器权重的一部分和/或循环中窗口的输入数据值的一部分),硬件实现方式可包括多个累加器304。每个累加器304接收一个卷积引擎302的输出,并且将该输出添加到与相同的滤波器相关的先前的卷积引擎输出。由于卷积引擎可能不在连续的循环中生成或产生与相同滤波器相关的输出,因此一个或多个滤波器的部分结果可被存储在累积缓冲器306中,然后在每个循环中可由累积缓冲器306将适当的部分结果提供给累加器。在一些示例中,累积缓冲器306可能能够存储与128个不同滤波器相关的部分结果。
系数缓冲器308包括:存储器(未示出),用于存储与DNN的卷积层(或全连接层)相关的多个权重;以及硬件逻辑(未示出),用于将权重提供给卷积引擎302,以在多个循环中以预先确定的顺序进行处理。多个权重可包括与卷积层相关的所有权重,或者仅包括与卷积层相关的权重的一部分。尽管系数缓冲器308被示出为单个模块,但是系数缓冲器308可以例如由各自形成存储体的多个系数缓冲器来实现。
输入缓冲器310包括:存储器(未示出),用于存储与DNN的卷积层(或全连接层)相关的多个输入数据值;以及硬件逻辑(未示出),用于将输入数据值提供给卷积引擎302,以在多个循环中以预先确定的顺序进行处理。多个输入数据值可包括与卷积层相关的所有输入数据值,或者仅包括与卷积层相关的一部分输入数据值。尽管在图3中将输入缓冲器310示出为单个模块,但是例如,输入缓冲器310可以由各自形成存储体的多个输入缓冲器来实现。
DDR 312被耦接到片上存储器314,用于将权重数据提供给片上存储器314。DDR312还被耦接到输入缓冲器310,用于将输入数据的块提供给输入缓冲器310。片上存储器314被耦接到系数缓冲器308,用于将权重数据提供给系数缓冲器308。片上存储器314还被耦接到输入缓冲器310,用于将(包括后续层的输入数据的)中间输出数据提供给输入缓冲器310。片上存储器314还被耦接到DDR 312,用于将多个层的结束层的输出数据的块提供给DDR312。累积缓冲器306被耦接到输出缓冲器316,以允许输出缓冲器接收多个层内的层的中间输出数据,以及结束层的输出数据。输出缓冲器316被耦接到片上存储器314,用于将中间输出数据和结束层的输出数据提供给片上存储器314。
在图3的示例中分别示出了各种连接;但是,在一些实施方案中,它们中的一些或全部可由一个或多个共享总线连接提供。还应当理解,可提供其他连接,作为图3所示连接的替代或补充。例如,输出缓冲器316可被耦接到DDR 312,用于将输出数据直接提供给DDR312。作为进一步的示例,DDR 312可被耦接到系数缓冲器308,用于将权重数据直接提供给系数缓冲器308。同样,在某些情况下,并非图3所示的所有连接都是必需的。例如,DDR 312不必总是被耦接到输入缓冲器310,该输入缓冲器可替代地经由片上存储器314从DDR 312获得输入数据。
图5是简化示意图,以更好地示出根据类似于图3的硬件实现方式的一个示例的数据流。图5示出了神经网络的(由两个层502-1、502-2组成的)多个层。这些可以是网络的任何两个连续的层。还需注意,多个层不限于两个层。该图示出了到多个层的第一层502-1的输入数据504。第一层502-1的中间输出数据506形成到第二层502-2(该两个层的示例中的结束层)的输入数据。该图还示出了第二层502-2(结束层)的输出数据508。DDR 312是具有相对较高的读取/写入成本的第一存储器装置。片上存储器314是第二存储器装置,具有相对较低的读取/写入成本。例如,与从片上存储器314读取/写入该片上存储器相比,从DDR读取/写入DDR给定数量的数据可消耗更多的时间和能量。应当理解,DDR存储器仅仅是大容量存储器存储装置的一个示例,并且还可以使用其他存储器/存储技术,诸如闪存存储器。
根据图3和图5的示例,DDR 312存储用于多个层502-1、502-2的第一层502-1的输入数据。DDR 312还存储表示多个层502-1、502-2的权重的权重数据。在本发明的示例中,权重数据从DDR 312传输至片上存储器314。系数缓冲器308从片上存储器314读取权重数据,并且将该权重数据提供给处理元件318。输入缓冲器310从DDR 312读取表示输入数据504的第一块的输入数据的第一子集。输入数据504的该第一子集(也称为“头图块”)在图5中以灰色阴影示出,并且可包括一个或多个数据平面。输入缓冲器310将输入数据504的第一子集提供给处理元件318。处理元件318处理权重数据和输入数据504的第一子集,以评估多个层中的每一层,从而计算结束层的输出数据的第一块508。输出数据的第一块508在图5中以灰色阴影示出,并且可包括一个或多个数据平面。输出缓冲器316可将输出数据508的第一块写入片上存储器314。输出数据的第一块508可以从该片上存储器被传输至DDR 312。替代地,输出缓冲器可将输出数据直接写入DDR存储器312中(如图3和图5中的虚线箭头所示)。
如图5所示,输入到每一层和从每一层输出的数据被布置在一个或多个平面(本文中也被称为输入数据集和输出数据集)中。在图5所示的示例中,输入数据504包括pin=3个数据平面。第一层502-1的中间输出数据506包括p1=3个数据平面。第二层502-2的输出数据508包括p=2个数据平面。平面的数量取决于权重数据。特别地,构成每个滤波器的权重取预先确定的数量的输入平面作为输入数据,并且每个滤波器输出输出数据的平面。因此,由给定层产生的数据平面的数量等于该层所应用的滤波器数量。每个数据平面可表示特征图。在图5的示例中,输入数据504的三个平面可表示由神经网络的较先的层(如果附图中的第一层502-1不是神经网络的第一层)生成的三个特征图。替代地(如果第一层502-1是神经网络的第一层),则输入数据504的三个平面可表示三个输入数据平面。例如,在图像处理任务中经常出现具有多个平面的输入数据。此类输入平面可包括但不限于:红色、绿色和蓝色(RGB)平面;或者色相、饱和度和明度(HSV)平面。输入平面还可以包括深度数据作为输入平面中的一个输入平面。
为了计算输出数据的第一块,处理元件318必须评估多个层中的每一层(如上所述)。特别地,系数缓冲器308从片上存储器314读取第一层502-1的权重数据。处理元件318处理第一层502-1的权重数据和输入数据504的第一子集以评估多个层中的第一层502-1,从而计算第一层的输出数据506。这是与输入数据504的第一块相对应的第一层502-1的输出数据的块。换句话讲,它是第一层502-1的神经网络的输出数据的完整集合的子集。此块/子集在图5中以灰色阴影示出。输出缓冲器316将第一层502-1的输出数据的块写入片上存储器314。它表示将需要作为到下一层(第二层502-2)的输入数据的中间输出数据。为了评估下一层(第二层502-2),输入缓冲器310从片上存储器314读取由输出缓冲器316存储在其中的第一层502-1的输出数据506的块。系数缓冲器308从片上存储器314读取第二层502-2的权重数据。处理元件318处理第二层502-2的权重数据和先前(第一)层的输出数据506的块以评估第二层502-2,从而计算第二层502-2的输出数据。对于多个层的任何后续内部层,该过程继续进行—每次将中间输出数据保存在片上存储器314中,并且读取该中间输出数据以将输入数据提供给下一层。这一直持续到到达最后一层为止。在图5的示例中,第二层502-2是结束层。因此,第二层502-2的输出是输出数据508的第一块。如上面已经解释过的,输出缓冲器316可将输出数据508的第一块写入片上存储器314。输出数据的第一块508可以从该片上存储器被传输至DDR 312。替代地,输出缓冲器316可将输出数据直接写入DDR 312(虚线箭头)。
以此方式,处理输入数据的子集(图块)经过神经网络的多个层可以高效地利用处理元件318的处理资源。将中间输出数据写入片上存储器314并且从片上存储器314读取该中间输出数据以处理下一层减少了从片外DDR 312读取和写入数据的需要,从而有助于降低功耗。需注意,片上存储器314可能比片外DDR 312小得多,因为在每次传播过程期间,片上存储器314仅需要存储与输入数据的当前块、输出数据的当前块以及内部层的中间输出数据的相关联的块相关联的数据。这与评估神经网络的层的常规方法形成鲜明对比,常规方法是对每一层整体进行独立处理,并且存储器需要能够在任何给定时间存储层的全部输入数据和全部输出数据。这需要更大的存储器,通常将其实现为片上存储器是不切实际的。因此,实践中的常规方法要求使用片外存储器来存储中间输出数据。由于片外读取和写入操作通常比片上读取和写入操作消耗更多的能量,因此减少写入片外存储器的数据量可以显著节省功耗。
可基于片上存储器314的可用存储容量、多个层中的层的数量以及神经网络的结构来选择在每一次传播过程中要处理的块的大小。下面将描述片上存储器314中的存储器管理的示例性方法。首先,考虑神经网络中的多个层的输出数据的块如何取决于先前层的中间输出数据和第一层的输入数据是有用的。参考图6可以理解这一点。该图示出了神经网络的三个层(未明确示出)的输入数据;第一层(在此标记为层0)的输出数据;第二层(标记为层1)的输出数据;以及结束层的输出数据。为简单起见,可以方便地将结束层的输出数据视为由单个滤波器创建的单个特征图。同样,可以将其他层视为具有单个滤波器的卷积层,从而创建单个输出特征图,如图中以简化形式所示。当然,本公开的范围不限于这种方式,这些仅仅是为了易于理解而进行的简化。在每一层处,可以将单个滤波器应用于多个输入通道(特征图),或者可以将多个滤波器应用于一个输入通道或多个输入通道,从而处理和/或生成多个数据平面。根据本公开的方法和硬件实现方式可以在此类场景中同等地使用。
从结束层中的输出数据的第一块(图块1)开始,可能向后追溯经过网络,以找到该输出块所依赖的中间数据和输入数据。在层1输出中存在与结束层中的图块1相对应的数据的块(图块1),在此意义上,需要层1中的图块1来计算结束层中的图块1。假设滤波器的内核大小大于1。由于这样的内核大小,层1输出中的图块1大于结束层输出中的图块1。换句话讲,结束层输出中的图块1取决于层1输出中的一些附加数据。例如,对于3x3的内核和步幅1,在层1输出中需要额外的一行输出数据。图6中的斜虚线指示所需数据量的这种扩展。在此图中,每个图块由实线分隔。
接下来,考虑层0输出中的哪些数据对于计算层1输出中的图块1是必需的。出于多样性考虑,将假设层1的步幅大于1。这意指层1输出小于层0输出。层0中存在块,即图块1,对应于层1中的图块1。由于内核大小同样大于1;因此在边界处所需的数据量进一步增大。因此,层0输出中的图块1大于层1输出中的图块1。
从层0回溯至输入数据时也会出现同样的情况。输入数据中存在块,即图块1,对应于层0中的图块1。假设层0中的步幅为1;因此,输入数据的大小与层0输出的大小约相同(视填充(padding)而定)。同样,由于内核大小大于1,因此在边界处需要附加数据。因此,输入数据中的图块1同样大于层0输出中的图块1。输入数据中的图块1组成输入数据的第一子集(块1)。结束层的输出数据中的图块1组成输出块。
从上文可以推断出,第一图块所需的数据总量从结束块到输入块依次增大。具体取决于所有中间层的参数(内核大小、步幅、膨胀)。图6中还示出了“重叠”。这是可以在后续传播过程中重用的数据,即,在计算后续图块时重用的数据。重叠数据由每层数据中的水平虚线指示。层1输出中的重叠1是图块1的部分,可以(重复)用于计算结束层输出的后续块(图块2)。层0输出中的重叠1是图块1的部分,可以(重复)用于计算层1输出的图块2。重叠的大小仅取决于下一层的参数(内核大小,膨胀)。例如,如果步幅=1并且膨胀=1,则重叠的大小(重叠的行数)为内核大小减去1。
紧接着图6,图7示出了第二块的数据依赖关系。结束层的输出数据的第二块(图块2)与第一块(图块1)相邻。如图块1那样,图块2取决于向后遍历层时增加的中间数据(最终为输入数据)的数量。然而,其中一些数据的依赖关系与结束层的输出数据中的图块1的依赖关系相同。特别地,在评估块1(图块1)的层1时,已计算层1的输出中的重叠1。唯一需要计算的附加数据是层1中的块,即图块2。同样,向后移动至层0输出,唯一需要计算的附加数据是层0中的块,即图块2。最后,向后移动至输入数据,唯一需要从存储器读取的附加输入数据是块2(图块2)。如图6所示,图7中的每个图块由实线分隔。重叠数据由虚线分隔。虚线指示数据依赖关系的最高极限(即,计算下一层中的图块所需的第一行数据)。倾斜虚线指示数据依赖关系的最低极限(即,计算下一层中的图块所需的最后一行数据)。因此,例如,层1输出中的图块2取决于层0输出中的重叠1和图块2。图块2包含重叠2,将在下一次传播中重用该重叠以计算后续层的图块3,依此类推。需注意,如果保留第一传播过程的重叠数据,则当向后遍历这些层时,图块2所需的“新鲜”数据的量不会增加(步幅大于1所指示的情况除外)。对于图块2之后的所有后续传播过程(图块)也是如此。换句话讲,对于第一传播过程(在头图块上操作)之后的所有传播过程,需要从存储器中检索较少量的输入数据,并且在每一层处需要计算较少量的中间数据。
这引出了一个重要的观察结果:重叠数据构成数据的非一次性部分。每个图块的其余部分构成数据的一次性部分。这意指重叠数据不仅需要用于计算当前块的结束层的输出数据,而且以后也需要重叠数据来计算后续块(后续图块)的结束层的输出数据。相反,每个图块中的其余数据对于计算当前块的结束层的输出数据是必需的,但在此之后可以被删除/重写。
为了以简化的一维示例对此进行详细的考虑,参考图8。图8中的图示出了神经网络的三个层(层0、层1和结束层)的每一层的输入数据和输出数据中的各个数据元素。每个圆圈表示一个数据元素(可以是例如图像或特征图中的像素)。每个元素取决于先前层中的某个子组的元素。图8中的连接线指示给定元素所依赖的先前层的元素。因此,例如,结束层的输出中的第3元素取决于层1的输出中的第2元素、第3元素以及第4元素。结束层的输出中的第四元素取决于层1输出中的第3元素、第4元素和第5元素。换句话讲,在该示例中,结束层的内核大小为3,并且步幅为1。层1的内核大小为3,并且步幅为2。层0的内核大小为3,并且步幅为1。由于层0和结束层的步幅均为1,因此层0的输出与输入数据的大小约相同,并且结束层的输出与层1的输出的大小约相同(视填充需要而定)。同时,由于层1的步幅为2,因此层1的输出是层0的输出的约一半。虚线表示块(图块)之间的边界。也就是说,在结束层中示出的第3数据元素是第一块(图块1)的最终数据元素。以结束层输出中的第4元素为例,可以看出结束层输出中的每个元素取决于:层1的输出中的3个元素;层0的输出中的7个元素;以及输入数据中的9个元素。图块1中的元素(重叠1元素除外)以斜线阴影示出。通过示例的方式在结束层输出中示出了三个此类元素(1-3)。
由于数据依赖关系,在已经计算当前块(图块1)的结束层输出之后,可以丢弃一些元素。这些元素被称为“一次性”元素。一些其他元素还将用于计算下一块(图块2)的结束层输出。这些元素被称为“非一次性”元素。特别地,重叠1元素(图8中着色为实心黑色)为非一次性元素。输入数据中的元素7和元素8用于在第一次经过多个层时计算层0的输出中的元素6和元素7,以计算当前块(图块1)的结束层输出数据。然而,还需要这些元素来计算层0输出中的元素8和元素9。在第一次传播过程中计算第一块时不需要这些元素8和元素9,但是在第二次传播过程中计算第二块时将需要这些元素。因此,为了最小化存储器访问开销,期望将输入数据的元素7和元素8保留在片上存储器314中,以避免在第二次传播过程中需要再次从DDR 312读取这些元素。层0输出中的元素7和层1输出中的元素3和元素4也是重叠1元素,因为在第二次传播过程中进行计算时还将需要这些元素(将需要层0输出中的元素7来计算层1输出中的元素5;并且将需要层1输出中的元素3和元素4来计算结束层输出中的元素4和元素5)。
现在考虑图8中用斜线阴影示出的图块1的其余元素。输入数据的元素6用于计算层0输出的元素5、6和7。然而,必须在第一次传播过程中计算这三个元素中的每一个元素,用于计算第一输出块(图块1)。在第二次传播过程中的任何附加计算中都不需要输入数据的元素6;因此,该元素是“一次性”数据。类似地,层0输出中的元素6用于计算层1输出中的元素4,但是在第二次传播过程中不再需要该元素(前提是保留了层1输出中的元素4)。图块2的元素(重叠2元素除外)被示出为空心圆。重叠2元素以灰色阴影示出。这些元素将在图块3的计算中被重用,因此是非一次性数据。在图的底部用水平阴影线示出了一些图块3元素。
本发明的发明人已经认识到,一次性数据仅用于计算经过多个层的当前传播过程中的下一层。一旦计算当前传播过程中的下一层,就可以删除/重写来自先前层的一次性数据。对于当前传播过程的所有层,必须保留非一次性数据(重叠),以便可在第二传播过程中用于第二块的计算。该识别能够减少从/向DDR 314的不必要的读取/写入操作,并且还可以减少对中间输出数据的不必要的重新计算。
现在将参考图9说明根据硬件实现方式的一个示例的存储器管理策略。发明人已经认识到一次性数据相对较大,但只在短时间内有效。相反,非一次性数据(重叠)相对较小,但对整个传播过程有效。图9示出了利用这些特性的对片上存储器314的一种示例性存储器分配。在该示例中,假设将一同处理神经网络的六个层(编号为0、1、2、3、4、5)。在一个分支中,每一层连接至其先前层。在第二分支中,层5连接至层1。这意指层1的输出数据为层5的输入数据的一部分。
存储器管理策略将片上存储器314分为三个区段。第一区段802(可被称为“交换”存储器)用于存储一次性数据。第二区段804(可被称为“堆(heap)”存储器)用于存储非一次性数据。第三区段806(系数存储器)用于存储各个层的权重数据。在第一区段802内,定义多个狭槽A、B、C。在(用于计算输出数据的给定块的)给定传播过程中,方法如下进行。层0的一次性输出被写入狭槽A。层0的非一次性输出被写入第二区段804的开始部分。在评估层1之前,将从这两个位置读取数据。在评估层1期间,层1的一次性输出被写入狭槽B,并且层1的非一次性输出被写入第二区段804,例如被附加到层0的非一次性输出。此时,不再需要来自层0的一次性数据。因此,在评估层2期间,可以用层2的一次性输出来重写狭槽A的内容。层2的非一次性输出被再次附加到第二区段804中的数据。然而,当评估层3时,狭槽B和狭槽A均不应该被重写。由于分支的原因,再次需要狭槽B的内容(层1的一次性输出)来评估层5。当然,立即需要狭槽A的内容来评估当前层(层3)。因此,层3的一次性输出被写入狭槽C。层4的一次性输出被写入狭槽A,从而再次重写该狭槽的不再需要用于进一步的计算的内容。为了评估层5,从狭槽B读取层1的一次性输出数据,并且从狭槽A读取来自层4的一次性输出数据。(从第二区段804读取来自层1和层4的非一次性输出数据。)
以此方式,在给定的传播过程中频繁地重用用于存储一次性数据的狭槽,从而有助于减少在任何给定时刻占用的片上存储器314的总量。可基于在传播过程期间要存储在狭槽中的一次性数据的最大大小来选择每个狭槽的大小。需注意,在该示例中,对第二区段804进行双缓冲。当前块的所有层的非一次性输出数据(重叠)被存储在一组存储器位置中。在(用于计算下一块的)下一次传播过程中,根据需要从该组存储器位置中检索重叠。用于下一块的重叠被存储在第二组存储器位置中。对于后续传播过程(后续块),硬件实现方式在使用第一组存储器位置和第二组存储器位置之间进行交替,即,从一组读取,同时写入另一组。
可通过分析多个层中每一层的结构来标识数据的一次性部分和非一次性部分。类似地,可通过分析多个层的整体层结构来完成将每一层的一次性数据分配给片上存储器314的第一区段802中的特定狭槽的操作。该分析可以由软件在运行时动态地进行,或者在将给定的神经网络映射到给定的硬件实现方式时进行。替代地,这可以由硬件实现方式的设计者手动定义。然而,软件的使用有助于将各种不同的神经网络映射到给定的硬件实现方式。
如上所述,在每次传播过程中一同评估的神经网络的多个层(在本文中也被称为“图块组”)可以包括神经网络的所有层,但这不是必需的。多个层可由整个神经网络的层的子集组成。取决于神经网络的结构,可发现有利的不同的层分组。图10示出了简单的神经网络,该神经网络由四个层组成,没有分支,每一层仅取决于先前层的输出。这使得在选择将层如何分组在一起时具有高自由度。例如,可根据以下任何分组策略将层分组为一组或多组层:
1-4
1-2,然后是3-4
1-2,然后是3,接着是4
1-3,然后是4
1,然后是2-4
1,然后是2-3,接着是4
1,然后是2,接着是3-4
一般来讲,受片上存储器314的大小的约束,可能优选的是将尽可能多的层分组到一起。
图11A示出了稍微复杂的网络结构。同样,存在四个层,每一层取决于先前层。然而,从层2到层4存在附加的分支。在图11A中,网络被分成两组,每一组中有两个层(层1至层2和层3至层4),由图中的虚线框指示。然而,需注意,就存储器访问要求而言,这可能不是最佳的。层1至层2的输出将被写入DDR 312。当评估层3(层3至层4的第一层)时,将从DDR 312读取该输出;然而,对层4的评估也需要层2的输出。因此,必须从DDR 312再次读取相同数据以便评估层4。相反,图11B示出了层的替代分组,就存储器访问要求而言,这样可能更高效。在此,层1由其自身处理,并且层2至层4被分组到多个层中。这样,两个分支都被捕获在多个层内。将从DDR 312对层1的输出数据进行一次读取,作为多个层的第一层(层2)的输入数据。使用上面参考图9所述的存储器管理策略,可以在多个层中处理层2的输出数据。
首先,参考上面的图2,给出了神经网络的卷积层的示例,在多个p平面或特征图中的二维(2D)图像数据上操作。然而,应当理解,本公开不限于这种方式。上述原理可应用于1D、2D或更高维度的数据。当应用于2D(或更高维度的)数据时,可以采用多种方式来构造输入数据和输出数据的块(图块)。每一块可以在一个维度、两个维度或更多个维度上定义。例如,对于2D图像数据,在一个维度上定义的块可以(沿水平或垂直方向)形成2D条带(stripe)。可以在条带的上方和下方(对于水平条带)或在条带的左侧和右侧(对于垂直条带)定义重叠数据。考虑到这一点,绘制了图5、图6和图7的图。(这些图也适用于在1D数据中定义的1D块。)应当理解,尽管图5至图8指示将数据在Y(高度)维度上分成块,但这并非是限制性的。如上所述,可以在X(宽度)维度上应用相同的方法。然而,在某些情况下,与在一个维度上进行拆分相比,可能更优选的是在另一个维度上进行拆分。例如,如果数据按行存储在存储器中,并且各个数据元素未与用于读取/写入存储器的突发大小整齐地对准,则可能优选的是在Y(高度)维度上拆分图块。
替代地,对于2D图像数据,可以在两个维度上定义块,从而形成数据的2D矩形。然后可以在该矩形的上方、下方、左侧和右侧定义重叠数据。来自当前块的重叠数据可能对于计算输出数据的多个后续块有用,所述多个后续块为例如当前块右侧的块、当前块下方的块和当前块右下方的块(假设块以光栅扫描顺序处理)。同样的原理也可以扩展到更多维度上的块,这些块在多维空间中具有多个方向上的重叠数据。
在上面的示例中,以图块为单位的神经网络的深度优先处理是按照网络的各个层来讨论的。这适用于图3的实现方式300,其主要被设计成处理单个卷积层。然而,也有可能提供更精细的硬件实现方式,其将额外的处理模块添加到实现方式300,从而使得能够在通过硬件实现方式的单次传播过程中处理多个层。例如,可以提供池化模块、逐元素操作模块、归一化模块和激活模块(例如,参见GB 2566702 A)。例如,这可以允许在通过硬件实现方式的单次传播过程中执行卷积层,随后是激活函数,随后是池化操作。在一些情况下,数据可以以流水线方式从一个层/操作传播到下一个,而无需将其写入片上存储器。当硬件实现方式能够在单次硬件传播过程中像这样进行多个顺序操作时,将由硬件一起处理的层组合在一起是有意义的。为了适应这一点,引入了“层组”的概念。层组是可以在通过硬件的单次传播过程中由硬件实现方式一起处理的一组层。层组可以由单个层组成(如在上面参考图3描述的示例中);然而,在硬件具有必要的功能的情况下,层组可以由多于一个层组成。
如上所述,将数据分割成图块可以提供一种方式来促进卷积神经网络的并行多核实现。现在将参考图12至图15描述根据第一方面的多核实现方式的示例。图12示出了硬件实现方式600的框图。它包括三个核350-0、350-1和350-2。每个核具有相应的本地片上存储器(OCM)314a,其仅可由该核访问。硬件实现方式600还包括共享的片上存储器314b。所有核都能够经由高带宽互连610访问(即,读取和写入)共享OCM 314b。提供了分割器单元620,其被配置为管理核之间的工作的分配。
图13示意性地示出了使用硬件实现方式600的不同核350以深度优先方式处理图块的一个示例。各个图块类似于前面描述的那样。在该示例中,图块被沿着输入数据张量的Y维度划分。当数据被行优先地(即X维度优先地)存储在存储器中时,这是方便的。如图所示,神经网络包括五个层组(标记为LG0至LG4)。每个层组指示为包括由图中的圆圈表示的三个层。(应该理解,这不是限制性的——不同的层组可以具有不同的层数。)层组将由硬件实现方式在两个“图块组”(标记为图块组0和图块组1)中进行评估。图块组由一组层组组成,这些层组将在将数据分割成图块后一起进行深度优先评估。从DDR 312读取图块组中用于第一层组的输入数据,并且将图块组中来自最终层组的输出数据写入DDR 312。在图块组内,中间数据(以图块为单位)由每个层组写入OCM 314,并由下一个层组从OCM 314读取。中间数据可以部分存储在本地OCM 314a中,并且部分存储在共享OCM 314b中。这将在下文更详细地解释。
如图所示,在该示例中,存储在DDR 312中的输入数据被分割成六个图块(标记为图块0至图块5),用于评估图块组0。仅存在三个核350;因此,在该图块组中,并非所有图块都可以并行处理。相反,前三个图块分别分配给三个核,用于第一多核图块传播过程(多核图块传播过程0)。这里,多核图块传播过程是指对N个连续图块的图块组的所有层组的评估,其中N是核的数量。图块组0由前三个层组LG0-LG2组成。在多核图块传播过程0中,核0基于图块0评估层组LG0-LG2;核1基于图块1评估这些层组;并且核2基于图块2评估这些层组。这在图13中由实线箭头指示。接下来,如由虚线箭头所指示,硬件实现方式600进行到多核图块传播过程1,其中核0基于图块3评估层组LG0-LG2;核1基于图块4评估层组;并且核2基于图块5评估层组。这完成了对第一图块组的评估。需注意,图13主要旨在示出核对图块的执行顺序。该图没有提供数据的哪些部分存储在哪个存储器中的详细说明。下面将参考图14A和图14B提供进一步的细节,以解释数据如何被布置在存储器312和314中。
在每个多核图块传播过程中,LG0的输出图块被写入OCM 314,并且作为LG1的输入图块从OCM 314读取。类似地,LG1的输出图块被写入OCM 314,并且作为LG2的输入图块从OCM读取。在硬件实现方式600继续评估图块组1之前,第一图块组的输出数据(即,LG2的输出图块)被写入DDR 312。
图块组1由两个层组LG3-LG4组成。如图所示,对于该图块组,数据被分割成仅三个图块。图块的数量可以基于图块组的输入数据的大小来选择,这取决于OCM314上的大小。图块的数量也可能受到图块组内的层的数量和配置的影响,因为这些将影响在针对每个图块对图块组的评估期间需要存储在OCM 314中的数据的量。图块组1可以在单个多核图块传播过程中被评估,因为图块的数量不大于核的数量。核0基于图块0评估层组LG3-LG4;核1基于图块1评估层组LG3-LG4;并且核2基于图块2评估层组LG3-LG4。LG3的输出图块被写入OCM314,并且作为LG4的输入图块从OCM 314读取。LG4的输出图块被写入到DDR 312。
图14A至图14B示出了(对于不同的示例)如何可以将图块分配给多个核并由它们处理。图14A示出了分割成图块的三个层组LG0-LG2的输出数据。这里,符号“LGxTn”表示“层组x,图块n”。如上面参考图5所解释的,每一层中图块的大小由神经网络层中的数据依赖关系来定义。从最终层组开始,头图块的大小从最终层组中的头输出图块LG2T0扩大到中间层组中的头输出图块LG1T0,并再次扩大到初始层组LG0中的头输出图块LG0T0。在每个层组中,在头图块LGxT0之后的后续图块在该层组中具有一致的大小,尾图块除外。当从最终层组向后移动通过层组到初始层组时,尾图块可能缩小。这可以通过比较最终层组的尾图块LG2T7和中间层组的尾图块LG1T7来看出。此外,尾图块LG1T7在初始层组中完全“消失”,也就是说,在这个层组中仅存在七个图块,而不是八个。
图块在具有四个核(C0-C3)的多核架构中被处理。在图14A和图14B两者中,图块根据哪个核处理它们而被着色/阴影化。图14B显示了层组如何随着时间的推移被核处理,箭头指示图块之间的数据依赖关系。在第一多核图块传播过程中,前四个图块分别由四个核C0-C3处理。在第一层组中,头图块LG0T0大于其他图块,因此核C0基于此图块评估层组花费的时间比其他核C1-C3基于其他图块评估层组所花费的时间长。在本发明的示例中,每个核等待,直到所有核完成对层组的评估。因此,核C1-C3等待C0完成头图块LG0T0。这提供了一种简单而有效的方法来实现核之间的同步。在第一层组的评估之后,所有四个核继续第二层组的评估,然后是第三层组的评估。从在图14B中可以看到的,在此多核图块传播过程中的最终层组的评估中,头图块LG2T0的评估比其他图块更快。这是因为头图块LG2T0已经被选择为小于后续图块LG2T1-LG2T7。这样做是为了避免头图块在初始层中变得太大。目的是试图平衡核之间的分工,并试图避免一个核比任何其他核明显更早或更晚地完成其工作。
如上面参考图7和图8所解释的,给定图块(除了头图块之外)的层组的评估取决于先前层组中的先前输出图块的重叠数据。例如,LG1T1的评估取决于LG0T1和LG0T0两者。同样,LG1T2的评估取决于LG0T2和LG0T1,以此类推。多核图块传播过程中图块之间的这种依赖关系由图14B中的实线箭头示出。依赖关系意味着每个核都需要访问由另一个核产生的重叠数据。为此,每个图块的重叠(非一次性)数据存储在共享OCM 314b中。其余数据(即,一次性数据)可以存储在每个核的本地OCM 314a中,因为没有其他核需要访问它。这可以避免每个核重新计算重叠数据的需要,同时也避免了将重叠数据写入DDR 312可能涉及的昂贵开销。同时,本地OCM314a的访问成本可能低于共享OCM 314b,与在共享OCM中存储所有数据的实现方式相比,提供了提高的效率。
需注意,原则上没有必要让每个核都等待所有核完成一个层组。例如,原则上,LG1T2的评估可以在LG0T1和LG0T2完成后立即开始。类似地,LG1T0的评估可以在LG0T0的评估完成后的任何时间开始(即,不确定的时间量)。这种“自由运行”的方法确实可以在其他一些实现方式中采用。然而,本实现方式具有简单的优点,因为它避免了跟踪自由运行所必需的额外复杂性。
第一多核图块传播过程的结束由图14B中的黑色粗竖直线指示。接下来,核进行第二多核图块传播过程,以基于剩余图块评估层组。关于第二多核图块传播过程,有几点需要注意。对于第二和第三层组LG1-LG2,应当理解,第五图块依赖于在先前多核图块传播过程中评估第四图块时产生的重叠数据。换句话讲,尽管来自LG0T0、LG0T1和LG0T2的重叠数据在分别对LG1T1、LG1T2和LG1T3的评估中被核“立即”使用,但是来自LG0T3的重叠数据需要保留在共享OCM 314b中,直到第二多核图块传播过程,此时它被核C0在LG1T4的评估中使用。类似地,来自LG1T3的重叠数据被保留在共享OCM 314b中,直到它在LG2T4的评估中被核C0使用。在不同多核图块传播过程中处理的图块之间的这些依赖关系由图14B中的虚线箭头示出。需要注意的另一点是,基于尾图块LG1T7的第二层组的评估比该层组中的其他图块更快完成。这是因为图块的大小较小,与最终层组LG2T7的尾图块相比缩小(参见图14A)。此外,核C3在第二多核图块传播过程中在LG0的评估期间是空闲的,因为该层组只有七个图块。应当理解,由于在图块之间的边界处的重叠,图块之间的依赖关系以及核之间同步的相应需求出现了。在没有重叠的情况下(例如,具有1x1x1内核的一系列卷积),不需要同步,并且可以允许核自由运行(没有任何复杂性惩罚)。一般来讲,对于卷积,用于确定Y维度中任何重叠的大小的公式是:重叠=max(0,(内核高度-1)*膨胀高度-(步幅高度-1))。
将参考图15更详细地描述该方法。在步骤710中,分割器单元620定义多个层组,并将它们布置在图块组中。图块组中的布置可以如上面参考图10至图11B所述来完成。在步骤712中,在DDR 312中提供用于第一层组的输入数据。在步骤714中,分割器单元620分析用于第一层组的输入数据。特别地,它检查输入数据在Y维度中的大小是否高于阈值。如果是,则确定(步骤716)输入数据可以沿着Y维度分割成图块。换句话讲,如果输入数据在Y维度上具有足够大的大小,它将被分割成图块。响应于在步骤716中的确定,分割器单元将数据分割成图块(步骤718),并将每个图块分配给可用核中的一个(步骤719)。如果图块比核多,则分割器单元620将控制核来执行若干多核图块传播过程。一般来讲,分割器单元尝试将输入数据分割成图块,以便所有核都被占用。因此,它可能尝试(在可能的情况下)将输入数据分割成一定数量的图块,该数量是核的数量的整数倍。图块的数量(以及多核图块传播过程的数量)将受到OCM 314的容量的影响。
在步骤720中,至少两个核基于至少两个相应的图块来评估第一层组。也就是说,每个核基于一个图块评估第一层组。分割器单元被配置为识别每个输出图块的一次性部分和非一次性(重叠)部分。它指示核将这些不同的部分存储在不同的地方。因此,第一核350-0将第一输出图块的一次性部分写入其本地OCM 314a(步骤722),并将第一输出图块的重叠部分写入共享OCM 314b(步骤724)。同时,第二核350-1将第二输出图块的一次性部分写入其本地OCM 314a(步骤722),并将第二输出图块的重叠部分写入共享OCM 314b(步骤724)。流程图中仅示出了步骤720-724的两个实例,这意味着存在两个核;然而,应当理解,这些步骤的并行实例与评估占用的核一样多。需注意,步骤722和724也可以以相反的顺序或并行执行。
在步骤728中,先于其他核完成其评估的任何核在继续之前等待所有核完成其对第一层组的评估。该方法进行到步骤730。如果当前图块组中还存在另外的层组,则每个核继续基于其图块评估下一个层组。当评估第二层组和后续层组时,每个核从其自己的本地OCM 314a读取来自先前层组的必要的一次性数据,并且从共享OCM314b读取来自先前层组的必要重叠数据。
该循环继续,直到当前图块组的所有层组都已由每个核基于相应的图块进行了评估。当(在步骤730)当前图块组中不存在另外的层组时,该方法进行到步骤732,检查是否存在另外的图块要处理。这代表一个多核图块传播过程的结束。如果存在另外的图块要处理,则核将继续第二多核图块传播过程,以便为下一组图块评估当前图块组的所有层组。该方法继续在多核图块传播过程内循环,直到所有图块都已被处理。然后,在步骤732中,当不再有要处理的图块时,图块组的评估完成,并且该方法结束。必要时,可以对后续的图块组重复该方法。
应当注意,在步骤714和716中,分割器单元620确定输入数据可以基于输入数据的大小(特别地在Y维度上)分割成图块。分割成图块取决于张量大小是否足够大。然而,即使对于相对较小的张量,能够在多个核之间分割处理也是有利的。根据第二方面,提供了一种用于这样做的方法。现在将参考图12、图16和图17描述该方法的示例。根据该示例,评估可以沿着其他维度之一在核之间分割。这可以包括沿着作为遍历维度之一的X维度分割层组的评估。同样地,它可以包括跨非遍历维度之一分割层组的评估,特别地跨输入通道C分割,或者跨输出通道F分割。通常,当将评估分割为传播过程时,用于层组的输入数据不在核之间分割,而是存储在共享OCM 314b中,并由核350中的每一个从那里访问。这与第一方面(如图13至图15所例示)中图块的使用不同,在第一方面中,数据和评估都在核之间进行分割。当沿着C维度分割时,每个核评估输入数据的相应通道(或通道组)的层组。当沿着F维度分割时,每个核评估相应滤波器(或滤波器组)的层组,产生相应的输出通道或输出通道组。当沿着X维度分割时,每个核评估输入数据的相应列(或一组列)的层组。
图16示意性地示出了将多个层组的评估分割成多个传播过程、跨多个核分割、一次评估一个层组的示例。存在五个层组LG0-LG4。层组LG2包括两个层;其他层组各自包括三个层。用于第一层组的输入数据存储在DDR 312中。在该示例中,第一层组LG0分割成将由不同的核评估的三次传播过程。划分是沿着X维度的。三个核C0-C2中的每一个分别评估三次传播过程中相应的一次。在每一次传播过程中,相应的核处理输入数据的一部分以产生输出数据的一部分。在该示例中,假设在每个层组中存在最多一个卷积层。因此,不会出现重叠数据的问题。根据内核大小和步幅,不同的核可以访问输入数据的重叠部分,但是它们生成输出数据的不同部分。与图13的情况不同,在该示例中,数据没有被分割成单独的图块。(在当前示例中,在X维度中很难做到这一点,因为数据是行优先布置的,并且X维度中的数据元素不与存储器中的数据的突发对齐。)相反,每个核从共享OCM 314b访问它需要的那部分数据。如已经指出的,每个核生成输出数据的相应部分。当所有核都已经评估了第一层组时,输出数据的部分在OCM 314中被组合。
下两个层组LG1-LG2不分割;因此,每个层组都由一个核在一次传播过程中进行评估。随后的层组LG3跨输出通道(F维度)分割成六次传播过程。由于这里的传播过程比核多,核C0-C2首先针对F维度中前三次传播过程(图中标记为0、1和2)评估层组。然后,核C0-C2针对第二组的三次传播过程(图中标记为3、4和5)评估层组,以完成该层组。最终层组LG4再次由核C0在单次传播过程中处理。前四个层组LG0-LG3的输出在OCM 314中被组合;最终层组LG4的输出被写入DDR 312。
如由该示例所示,分割是灵活的,因为不同的层组可以沿着不同的维度分割(例如,比较LG0和LG3)。这通过在OCM 314中组合每个层组的完整输出来实现,这使得一个层组的分割独立于其他层组的分割。这是与图13的基于图块的分割的另一个区别,在图13中,每个核在特定的图块上操作,并且当图块组的层组被深度优先地评估时,图块之间的对应关系被保留。
将参考图17更详细地描述该方法。与图15中的步骤相似的步骤将被给予相同的附图标记。在步骤710’中,分割器单元620定义多个层组。在步骤712’中,在DDR 312中提供用于第一层组的输入数据。在步骤714’中,分割器单元620分析输入数据,以检查它是否可以被分割成图块。特别地,分割器单元检查输入数据在Y维度中的大小是否高于阈值。在步骤746中,分割器单元620确定大小不高于阈值——因此,数据不适合图块化。响应于该确定,分割器单元620将层组的评估分割成传播过程(步骤748),并将每次传播过程分配给核(步骤749)。在步骤750中,核评估它们相应的传播过程的层组,以生成输出数据的相应部分。如果在步骤752中确定在当前层组中存在另外的传播过程要完成,则核针对必要的另外的传播过程评估该层组(如在图16中的层组LG3的示例中)。当在步骤752中确定对于当前层组没有另外的传播过程要评估时,该方法进行到步骤754,并且来自传播过程中的每一次的输出数据的部分被组合,以产生层组的输出数据。在步骤756中,该输出数据被写入OCM 314。在步骤758中,检查是否存在另一个层组要评估。如果是,则该方法再次进行到步骤748,以将下一层组的评估分割成传播过程。需注意,尽管流程图中仅示出了步骤750的两个实例,这意味着存在两个核;但是应当理解,该步骤的并行实例与评估占用的核一样多。
每个层组的输出数据写入共享OCM 314b,以便所有核都可以访问它来评估下一个层组。在步骤748中分割评估的方式和在步骤754中组合输出数据部分的方式将取决于层组中的层的特性以及沿着其分割评估的维度。在一些情况下,评估可能被输入通道C分割,从而每个核评估输入数据的相应通道(或通道组)的层组。例如,如果层组包括具有一个滤波器的卷积层,并且每个核处理不同的输入通道,这将意味着每个核将滤波器内核的一个通道应用于输入数据的相应通道。然后,由不同核产生的相应输出部分将需要通过逐元素求和来组合,以产生卷积的输出。这可以由核350中的一个(如果可用)的逐元素操作模块或者由与核350分离的另一处理模块来完成。内核的不同通道的权重(和偏置)可以存储在每个相应核的本地OCM 314a中,因为每个核仅需要访问它负责评估的通道(或多个通道)的权重。
如果层组由逐元素操作组成,并且每个核处理不同的输入通道,那么由不同核产生的相应输出部分可以通过在输入通道维度(P维度)中串接它们来组合。需注意,因为组合相应输出部分的步骤由串接它们组成,所以这可以通过各个核简单地将输出部分写入共享OCM 314b中的适当位置来实现。换句话讲,步骤754的“组合”和步骤756的“写入”可以一起执行,并且可以紧接在“评估”步骤750之后由每个核来执行。
控制每个输入通道的逐元素操作的参数可以被分割并存储在相应不同的本地OCM314a中。类似地,对于可以由输入通道分割的其他操作,控制每个通道的处理的参数可以被分割到相应不同的本地OCM 314a中。
如果层组包括具有多个输出通道(滤波器)的卷积层,并且评估按照输出通道(F维度)跨核分割,则每个核将负责评估给定的滤波器或滤波器组。相关滤波器的权重(和偏置)可以存储在相应核的本地OCM 314a中。
另一方面,如果层组包括卷积层,并且评估沿着遍历维度中的一个(例如,X维度)跨核分割,则权重和偏置被存储在共享OCM 314b中,在那里它们可被所有核访问。
一些层跨多个核分割可能是困难的、低效的或不可能的。例如,应当注意,图16中的层LG1、LG2和LG4根本没有跨核分割——它们全部由单个核执行(如果没有其他工作占用它们,可能会让其他核空闲)。例如,这种方法可以用于处理包括一个滤波器的全连接层。
现在将理解,图15和图17的方法可以有利地组合。图15的方法可以用于处理大的输入数据张量(即,如果在分析输入数据张量的大小的步骤714中大小高于阈值)。并且图17的方法可以用于处理小的输入数据张量(如果在步骤714’中大小低于阈值)。换句话讲,在步骤714中使用的阈值和在步骤714’中使用的阈值可以相同,使得硬件实现方式600遵循图15的方法或者遵循图17的方法。
处理系统可包括如上所述的硬件实现方式,或者可被配置为执行如上所述的方法。处理系统可以是人工智能加速器系统,诸如神经网络加速器(NNA),或图形处理系统/图形处理单元(GPU)。
图18示出了其中可以实现根据本公开的处理系统的计算机系统。计算机系统包括CPU 902、NNA 904、存储器906和其它装置914,诸如显示器916、扬声器918和相机919。处理块910(对应于硬件实现方式600)在NNA 904上实现。在其他示例中,处理块910可以在CPU902上实施。计算机系统的部件可以通过通信总线920彼此进行通信。(对应于DDR 312的)存储库912被实现为存储器906的一部分。
虽然图18示出了人工智能加速器系统的一种实现方式,但是应当理解,可以针对图形处理系统绘制类似的框图,例如,通过用GPU替换CPU 902或NNA 904,或者通过添加GPU作为附加单元。在这种情况下,处理块910可以在GPU中实现。
图12的硬件实现方式600被示出为包括许多功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当理解,本文中被描述为由硬件实现方式形成的中间值不需要由硬件实现方式在任何时间点物理地生成,并且可以仅表示方便地描述由硬件实现方式在其输入端与输出端之间执行的处理的逻辑值。
本文中描述的硬件实现方式可以在集成电路上的硬件中体现。本文中描述的硬件实现方式可被配置为执行本文中描述的任一种方法。一般来说,上文所述的功能、方法、技术或部件中的任一个可以在软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中实施。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实现方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序码在处理器上执行时执行指定任务。本文所述的算法和方法可以由执行码的一个或多个处理器执行,所述码使处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其它技术来存储指令或其它数据并且可以由机器存取的其它存储器装置。
如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如C、或OpenCL等编程语言码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由该代码指定的任务。
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或它们的集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,诸如CPU、GPU、NNA、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可以包括一个或多个处理器。
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,例如硬件描述语言(HDL)软件,用于设计集成电路或用于配置可编程芯片以执行所要功能。也就是说,可以提供一种计算机可读存储介质,在该计算机可读存储介质上对集成电路定义数据集形式的计算机可读程序代码进行编码,在集成电路制造系统中处理(即,运行)时将系统配置为制造配置为执行本文中描述的任一种方法的硬件实现方式,或制造包括本文中描述的任何设备的硬件实现方式。集成电路定义数据集可以是例如集成电路描述。
因此,可以提供一种在集成电路制造系统处制造如本文中描述的硬件实现方式的方法。此外,可以提供一种集成电路定义数据集,该集成电路定义数据集在集成电路制造系统中处理时使制造硬件实现方式的方法被执行。
集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包括作为寄存器传输级(RTL)代码,作为高级电路表示法(诸如Verilog或VHDL),以及作为低级电路表示法(诸如OASIS(RTM)和GDSII)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如RTL)可以在计算机系统上处理,该计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,该软件环境包括电路元件的定义和用于组合这些元件以便生成由该表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
现在将参考图19描述在集成电路制造系统处处理集成电路定义数据集以便将该系统配置为制造硬件实现方式的示例。
图19示出了集成电路(IC)制造系统1002的示例,该集成电路制造系统被配置为制造如本文的任何示例中描述的硬件实现方式。特别地,IC制造系统1002包括布局处理系统1004和集成电路生成系统1006。IC制造系统1002被配置为接收IC定义数据集(例如,定义如本文的任何示例中描述的硬件实现方式)、处理IC定义数据集以及根据(例如,体现如本文的任何示例中描述的硬件实现方式的)IC定义数据集来生成IC。对IC定义数据集的处理将IC制造系统1002配置为制造体现如本文的任何示例中描述的硬件实现方式的集成电路。
布局处理系统1004被配置为接收和处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定待生成的电路的门级表示,例如就逻辑部件(例如,NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1004已经确定电路布局时,其可将电路布局定义输出到IC生成系统1006。电路布局定义可以是例如电路布局描述。
如本领域中已知的,IC生成系统1006根据电路布局定义来生成IC。例如,IC生成系统1006可实施生成IC的半导体装置制造工艺,该半导体装置制造工艺可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,掩模可在光刻工艺中用于根据电路定义来生成IC。替代地,提供给IC生成系统1006的电路布局定义可呈计算机可读代码的形式,IC生成系统1006可使用该计算机可读代码来形成用于生成IC的合适的掩模。
由IC制造系统1002执行的不同过程可全部在一个位置例如由一方来实施。替代地,IC制造系统1002可以是分布式系统,使得一些过程可以在不同位置执行,并且可以由不同方来执行。例如,以下阶段中的一些可以在不同位置以及/或者由不同方来执行:(i)合成表示IC定义数据集的RTL代码,以形成待生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
在其他示例中,在集成电路制造系统处对集成电路定义数据集的处理可将该系统配置为在不处理IC定义数据集来确定电路布局的情况下制造硬件实现方式。例如,集成电路定义数据集可以定义例如FPGA的可重新配置的处理器的配置,并且对所述数据集进行的处理可以将IC制造系统配置成(例如,通过将配置数据加载到FPGA)生成具有所述定义的配置的可重新配置的处理器。
在一些实施例中,集成电路制造定义数据集当在集成电路制造系统中处理时,可以使集成电路制造系统生成如本文所述的装置。例如,由集成电路制造定义数据集以上文参考图19描述的方式对集成电路制造系统的配置可以导致如本文所述的装置被制造。
在一些示例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图19所示的示例中,IC生成系统可以进一步由集成电路定义数据集配置成在制造集成电路时根据在集成电路定义数据集中定义的程序代码将固件加载到所述集成电路上,或者以其它方式为集成电路提供与集成电路一起使用的程序代码。
与已知的实现方式相比,在本申请中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实现的方法中)的实现方式可以引起性能改进。性能改进可以包括计算性能提高、延迟减少、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如,在集成电路中)期间,可以在性能改进与物理实施方式之间进行折中,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起装置、设备、模块和系统的物理实施方式的改进(诸如硅面积减小)的概念可以针对性能提高进行折中。例如,这可以通过在预定义面积预算内制造模块的多个实例来完成。
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
Claims (20)
1.一种用于在多核硬件(600)中实现深度神经网络的方法,所述深度神经网络包括多个层,所述多核硬件至少包括第一核(350-0)和第二核(350-1),所述方法包括:
定义(710)至少包括第一层组和第二层组的多个层组(LG),每个层组包括所述神经网络的一个或多个连续层,其中,所述第一层组的输出数据包括用于所述第二层组的输入数据;
在一个或多个第一存储器装置(312)中提供(712)用于所述第一层组的输入数据,所述输入数据包括多维张量,所述多维张量包括一个或多个遍历维度,所述一个或多个遍历维度是被所述第一层组的至少一个层中的步幅遍历的维度;
沿着所述遍历维度中的至少一个将用于所述第一层组的所述输入数据分割(718)成至少第一图块和第二图块,每个图块包括所述一个或多个遍历维度中的每一个中的多个数据元素;
将所述第一图块分配(719)给所述第一核并将所述第二图块分配(719)给所述第二核;
使用所述第一核,基于所述第一图块评估(720)所述第一层组,以生成所述第一层组的第一输出图块;
使用所述第二核,基于所述第二图块评估(720)所述第一层组,以生成所述第一层组的第二输出图块,所述第一层组的所述第一输出图块和所述第二输出图块中的每一个包括在所述一个或多个遍历维度中的每一个中的多个数据元素;
将所述第一层组的所述第一输出图块和所述第二输出图块作为用于所述第二层组的输入数据存储(722,724)在一个或多个第二存储器装置(314)中;
使用所述第一核,基于所述第一层组的所述第一输出图块评估(720)所述第二层组,以生成所述第二层组的第一输出图块;
使用所述第二核,基于所述第一层组的所述第二输出图块评估(720)所述第二层组,以生成所述第二层组的第二输出图块,所述第二层组的所述第一输出图块和所述第二输出图块中的每一个包括在所述一个或多个遍历维度中的每一个中的多个数据元素。
2.根据权利要求1所述的方法,其中:
(A)所述多个层组包括第三层组,所述第三层组包括所述神经网络的一个或多个连续层,所述方法还包括将所述第二层组的所述第一输出图块和所述第二输出图块作为用于所述第三层组的输入数据存储(722,724)在所述一个或多个第二存储器装置中;和/或
(B)所述方法还包括将所述多个层组中的最终层组的所述第一输出图块和所述第二输出图块存储在所述一个或多个第一存储器装置(312)中。
3.根据前述权利要求中任一项所述的方法,还包括:
分析(714)用于所述第一层组的所述输入数据的至少一个特性;和
基于所述分析,确定(716)所述输入数据能够沿着所述遍历维度中的所述至少一个被分割成图块,
其中,用于所述第一层组的所述输入数据的所述分割(718)响应于所述确定来执行,并且可选地其中,所述至少一个特性包括所述输入数据在所述至少一个遍历维度上的大小,并且其中,确定(716)所述输入数据能够分割成图块包括确定在所述至少一个遍历维度上的大小大于阈值大小。
4.根据前述权利要求中任一项所述的方法,其中,用于所述第一层组的所述输入数据分割成第一数量的图块,并且用于所述第二层组的所述输入数据分割成第二数量的图块,其中,所述第二数量与所述第一数量相差最多一个。
5.根据前述权利要求中任一项所述的方法,其中,分割(718)用于所述第一层组的所述输入数据包括将用于所述第一层组的所述输入数据分割成所述第一图块、所述第二图块和第三图块,
所述方法还包括:
将所述第三图块分配(719)给所述第一核;和
在使用所述第一核基于所述第一图块评估(720)每个层组之后,使用所述第一核基于所述第三图块评估(720)每个层组。
6.根据前述权利要求中任一项所述的方法,其中,所述一个或多个第二存储器装置包括:
用于所述第一核的本地存储器(314a),其仅可由所述第一核访问;
用于所述第二核的本地存储器(314a),其仅可由所述第二核访问;和
共享存储器(314b),其可由所述第一核和所述第二核访问,
所述方法还包括:
识别所述第一层组的所述第一输出图块的一次性部分,所述一次性部分仅仅是基于所述第一图块评估所述第二层组所需要的;和
识别所述第一层组的所述第一输出图块的重叠部分,所述重叠部分是基于所述第一图块评估所述第二层组所需要的,并且也是基于所述第二图块评估所述第二层组所需要的,
所述方法包括当将所述第一层组的所述第一输出图块存储在所述一个或多个第二存储器装置中时:
将所述第一输出图块的所述一次性部分写入(722)所述第一核的所述本地存储器;和
将所述第一输出图块的所述重叠部分写入(724)所述共享存储器,并且可选地其中,所述第一层组包括卷积层,所述方法还包括将所述卷积层的权重值和/或偏置值存储在所述共享存储器(314b)中。
7.根据前述权利要求中任一项所述的方法,包括:
等待(728)所述第一核完成对所述第一图块的所述第一层组的评估,和
等待(728)所述第二核完成对所述第二图块的所述第一层组的评估,
然后使用所述第二核评估(720)所述第二图块的所述第二层组,并且可选地
在任何核开始评估(720)所述第二层组之前等待(728)所有核完成对所述第一层组的评估。
8.根据前述权利要求中任一项所述的方法,其中,用于所述第一层组的所述输入数据包括第一遍历维度和第二遍历维度,
其中,所述输入数据存储在首先根据所述第一维度排序的所述一个或多个第一存储器装置中,并且
其中,所述输入数据沿着所述第二维度分割。
9.一种深度神经网络的硬件实现方式(600),包括布置在多个层组(LG)中的多个层,所述多个层组至少包括第一层组和第二层组,每个层组包括所述神经网络的一个或多个连续层,其中,所述第一层组的输出数据包括用于所述第二层组的输入数据,所述硬件实现方式包括:
一个或多个第一存储器装置(312),其被配置为存储用于所述第一层组的输入数据,所述输入数据包括多维张量,所述多维张量包括一个或多个遍历维度,所述一个或多个遍历维度是被所述第一层组的至少一个层中的步幅遍历的维度;
一个或多个第二存储器装置(314),其被配置为存储至少所述第一层组的所述输出数据;
多个核(350),其至少包括第一核(350-0)和第二核(350-1);和
分割器单元(620),
其中,所述分割器单元(620)被配置为沿着所述遍历维度中的至少一个将用于所述第一层组的所述输入数据分割(718)成至少第一图块和第二图块,每个图块包括所述一个或多个遍历维度中的每一个中的多个数据元素,
其中,所述分割器单元(620)被配置为将所述第一图块分配(719)给所述第一核(350-0)并将所述第二图块分配给所述第二核(350-1),
其中,所述第一核被配置为基于所述第一图块评估(720)所述第一层组,以生成所述第一层组的第一输出图块,
其中,所述第二核被配置为基于所述第二图块评估(720)所述第一层组,以生成所述第一层组的第二输出图块,所述第一层组的所述第一输出图块和所述第二输出图块中的每一个包括在所述一个或多个遍历维度中的每一个中的多个数据元素,
其中,所述第一核和所述第二核被配置为将所述第一层组的所述第一输出图块和所述第二输出图块作为用于所述第二层组的输入数据存储(722,724)在所述一个或多个第二存储器装置(314)中,
其中,所述第一核被配置为基于所述第一层组的所述第一输出图块评估(720)所述第二层组,以生成所述第二层组的第一输出图块,并且
其中,所述第二核被配置为基于所述第一层组的所述第二输出图块评估(720)所述第二层组,以生成所述第二层组的第二输出图块,所述第二层组的所述第一输出图块和所述第二输出图块中的每一个包括在所述一个或多个遍历维度中的每一个中的多个数据元素。
10.根据权利要求9所述的硬件实现方式,其中,所述第一核和所述第二核被配置为将所述定义的层组中的最终层组的所述第一输出图块和所述第二输出图块存储在所述一个或多个第一存储器装置(312)中。
11.根据权利要求9或权利要求10所述的硬件实现方式,其中,所述分割器单元还被配置为:
分析(714)用于所述第一层组的所述输入数据;和
确定(716)所述输入数据能够沿着所述遍历维度中的所述至少一个被分割成图块,
其中,所述分割器单元被配置为响应于所述确定将用于所述第一层组的所述输入数据分割(718)成所述第一图块和所述第二图块。
12.根据权利要求9至11中任一项所述的硬件实现方式,其中,所述分割器单元被配置为将用于所述第一层组的所述输入数据分割(718)成所述第一图块、所述第二图块和第三图块,并且所述分割器单元被配置为将所述第三图块分配(719)给所述第一核;并且
所述第一核被配置为在已经完成基于所述第一图块评估每个层组之后基于所述第三图块评估(720)每个层组。
13.根据权利要求9至12中任一项所述的硬件实现方式,其中,所述一个或多个第二存储器装置包括:
用于所述第一核的本地存储器(314a),其仅可由所述第一核访问;
用于所述第二核的本地存储器(314a),其仅可由所述第二核访问;和
共享存储器(314b),其可由所述第一核和所述第二核访问,
其中,所述分割器被配置为:
识别所述第一层组的所述第一输出图块的一次性部分,所述一次性部分仅仅是基于所述第一图块评估所述第二层组所需要的;和
识别所述第一层组的所述第一输出图块的重叠部分,所述重叠部分是基于所述第一图块评估所述第二层组所需要的,并且也是基于所述第二图块评估所述第二层组所需要的,
并且所述第一核被配置为当将所述第一层组的所述第一输出图块存储在所述一个或多个第二存储器装置中时:
将所述一次性部分写入(722)其本地存储器;并且
将所述重叠部分写入(724)所述共享存储器。
14.根据权利要求9至13中任一项所述的硬件实现方式,其中,所述第二核被配置为
等待(728)所述第一核完成基于所述第一图块对所述第一层组的评估,并且
等待(728)所述第二核完成基于所述第二图块对所述第一层组的评估,
然后基于所述第二图块评估(720)所述第二层组,
并且可选地其中,每个核被配置为在评估所述第二层组之前等待(728)所有核完成对所述第一层组的评估。
15.一种人工智能加速器系统,所述人工智能加速器系统包括根据权利要求9至14中任一项所述的硬件实现方式或者被配置为执行根据权利要求1至8中任一项所述的方法。
16.一种使用集成电路制造系统来制造根据权利要求15所述的人工智能加速器系统的方法,所述方法包括:
使用布局处理系统处理所述人工智能加速器系统的计算机可读描述,以便生成体现所述人工智能加速器系统的集成电路的电路布局描述;以及
使用集成电路生成系统根据所述电路布局描述来制造所述人工智能加速器系统。
17.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机可读代码,所述计算机可读代码被配置成在运行所述代码时使得根据权利要求1至8中任一项所述的方法被执行。
18.一种计算机可读存储介质,其上存储有集成电路定义数据集,所述集成电路定义数据集当在集成电路制造系统中被处理时配置所述集成电路制造系统以制造根据权利要求15所述的人工智能加速器系统。
19.一种计算机可读存储介质,其上存储有根据权利要求15所述的人工智能加速器系统的计算机可读描述,所述计算机可读描述当在集成电路制造系统中处理时使得所述集成电路制造系统:
使用布局处理系统处理所述人工智能加速器系统的所述计算机可读描述以便生成体现所述人工智能加速器系统的集成电路的电路布局描述;和
使用集成电路生成系统根据所述电路布局描述来制造所述人工智能加速器系统。
20.一种集成电路制造系统,包括:
计算机可读存储介质,其上存储有根据权利要求15所述的人工智能加速器系统的计算机可读描述;
布局处理系统,其被配置为处理所述计算机可读描述以便生成体现人工智能加速器系统的集成电路的电路布局描述;和
集成电路生成系统,其被配置为根据所述电路布局描述来制造所述人工智能加速器系统。
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2016227.7A GB2599911B (en) | 2020-10-13 | 2020-10-13 | Implementation of a neural network in multicore hardware |
GB2016226.9A GB2599910B (en) | 2020-10-13 | 2020-10-13 | Implementation of a neural network in multicore hardware |
GB2016225.1A GB2599909B (en) | 2020-10-13 | 2020-10-13 | Implementation of a neural network in multicore hardware |
GB2016226.9 | 2020-10-13 | ||
GB2016225.1 | 2020-10-13 | ||
GB2016227.7 | 2020-10-13 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114358239A true CN114358239A (zh) | 2022-04-15 |
Family
ID=78000644
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111193846.8A Pending CN114358239A (zh) | 2020-10-13 | 2021-10-13 | 多核硬件中神经网络的实现方式 |
CN202111193824.1A Pending CN114358237A (zh) | 2020-10-13 | 2021-10-13 | 多核硬件中神经网络的实现方式 |
CN202111193836.4A Pending CN114358238A (zh) | 2020-10-13 | 2021-10-13 | 多核硬件中神经网络的实现方式 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111193824.1A Pending CN114358237A (zh) | 2020-10-13 | 2021-10-13 | 多核硬件中神经网络的实现方式 |
CN202111193836.4A Pending CN114358238A (zh) | 2020-10-13 | 2021-10-13 | 多核硬件中神经网络的实现方式 |
Country Status (3)
Country | Link |
---|---|
US (3) | US11853866B2 (zh) |
EP (3) | EP3985572A1 (zh) |
CN (3) | CN114358239A (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US12093696B1 (en) | 2018-04-20 | 2024-09-17 | Perceive Corporation | Bus for transporting output values of a neural network layer to cores specified by configuration data |
US11210586B1 (en) | 2018-04-20 | 2021-12-28 | Perceive Corporation | Weight value decoder of neural network inference circuit |
US11995533B1 (en) | 2018-12-05 | 2024-05-28 | Perceive Corporation | Executing replicated neural network layers on inference circuit |
US11868901B1 (en) * | 2019-05-21 | 2024-01-09 | Percieve Corporation | Compiler for optimizing memory allocations within cores |
CN112200300B (zh) * | 2020-09-15 | 2024-03-01 | 星宸科技股份有限公司 | 卷积神经网络运算方法及装置 |
KR20220073306A (ko) * | 2020-11-26 | 2022-06-03 | 에스케이하이닉스 주식회사 | 스토리지 장치 및 그 동작 방법 |
GB2625739A (en) * | 2022-12-22 | 2024-07-03 | Imagination Tech Ltd | Mapping neural networks to hardware |
WO2024167491A1 (en) * | 2023-02-08 | 2024-08-15 | Google Llc | Efficiently performing computations of a multi-output fully convolutional network |
CN118312327B (zh) * | 2024-06-06 | 2024-10-22 | 北京壁仞科技开发有限公司 | 硬件资源分配方法、电子设备与存储介质 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9679192B2 (en) * | 2015-04-24 | 2017-06-13 | Adobe Systems Incorporated | 3-dimensional portrait reconstruction from a single photo |
US10380413B2 (en) * | 2017-07-13 | 2019-08-13 | Robert Bosch Gmbh | System and method for pose-invariant face alignment |
GB2566702B (en) | 2017-09-20 | 2021-11-03 | Imagination Tech Ltd | Hardware implementation of a deep neural network with variable output data format |
US10380788B2 (en) * | 2017-10-12 | 2019-08-13 | Ohio State Innovation Foundation | Fast and precise object alignment and 3D shape reconstruction from a single 2D image |
US10832133B2 (en) * | 2018-05-31 | 2020-11-10 | Neuralmagic Inc. | System and method of executing neural networks |
CN111222561B (zh) * | 2019-12-31 | 2023-06-09 | 深圳云天励飞技术股份有限公司 | 图像识别神经网络处理方法、装置与系统 |
US11544191B2 (en) * | 2020-03-26 | 2023-01-03 | Intel Corporation | Efficient hardware architecture for accelerating grouped convolutions |
-
2021
- 2021-10-12 EP EP21202217.2A patent/EP3985572A1/en active Pending
- 2021-10-12 EP EP21202216.4A patent/EP3985570A1/en active Pending
- 2021-10-12 EP EP21202218.0A patent/EP3985573A1/en active Pending
- 2021-10-13 CN CN202111193846.8A patent/CN114358239A/zh active Pending
- 2021-10-13 CN CN202111193824.1A patent/CN114358237A/zh active Pending
- 2021-10-13 US US17/500,206 patent/US11853866B2/en active Active
- 2021-10-13 US US17/500,415 patent/US20220129741A1/en active Pending
- 2021-10-13 CN CN202111193836.4A patent/CN114358238A/zh active Pending
- 2021-10-13 US US17/500,840 patent/US11875248B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
EP3985572A1 (en) | 2022-04-20 |
CN114358237A (zh) | 2022-04-15 |
US20220129741A1 (en) | 2022-04-28 |
US20220147832A1 (en) | 2022-05-12 |
EP3985573A1 (en) | 2022-04-20 |
US20220121914A1 (en) | 2022-04-21 |
CN114358238A (zh) | 2022-04-15 |
US11875248B2 (en) | 2024-01-16 |
US11853866B2 (en) | 2023-12-26 |
EP3985570A1 (en) | 2022-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114358239A (zh) | 多核硬件中神经网络的实现方式 | |
US12050986B2 (en) | Neural network architecture using convolution engines | |
US20210174180A1 (en) | Hardware Implementation of a Neural Network | |
GB2554711A (en) | Buffer addressing for a convolutional neural network | |
GB2599909A (en) | Implementation of a neural network in multicore hardware | |
US20240354560A1 (en) | Hardware implementation of a neural network | |
CN114722994A (zh) | 在硬件中实现全连接神经网络层 | |
EP4300369A1 (en) | Methods and systems for executing a neural network on a neural network accelerator | |
GB2599910A (en) | Implementation of a neural network in multicore hardware | |
GB2599911A (en) | Implementation of a neural network in multicore hardware | |
GB2621218A (en) | Implementation of a neural network in multicore hardware | |
GB2621217A (en) | Implementation of a neural network in multicore hardware | |
GB2625215A (en) | Implementation of a neural network | |
GB2611658A (en) | Hardware implementation of a neural network | |
US20240232597A1 (en) | Mapping neural networks to hardware | |
US20240232596A1 (en) | Implementing neural networks in hardware |
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 |