CN112884138A - 神经网络的硬件实现方式 - Google Patents
神经网络的硬件实现方式 Download PDFInfo
- Publication number
- CN112884138A CN112884138A CN202011362054.4A CN202011362054A CN112884138A CN 112884138 A CN112884138 A CN 112884138A CN 202011362054 A CN202011362054 A CN 202011362054A CN 112884138 A CN112884138 A CN 112884138A
- Authority
- CN
- China
- Prior art keywords
- layer
- data
- output data
- output
- layers
- 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
- 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
-
- 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
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)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Evolutionary Computation (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Computer Hardware Design (AREA)
- Image Analysis (AREA)
- Complex Calculations (AREA)
Abstract
公开了神经网络的硬件实现方式以及在此类硬件实现方式中处理数据的方法。在块中处理所述网络的多个层的输入数据,以生成输出数据的相应的块。所述处理在深度方向执行经过所述多个层,从而针对给定块评估所述多个层中的所有层,然后再执行至下一个块。
Description
背景技术
深度神经网络(DNN)是一种可用于机器学习应用程序的人工神经网络。特别地,DNN可用于信号处理应用程序,包括图像处理和计算机视觉应用程序。
DNN已在功率资源不作为重要因素的应用程序中得以实现。尽管如此,DNN在许多不同的技术领域中都有应用,在这些技术领域中,用于实现DNN的硬件资源使得功耗、处理能力或硅面积受限。因此,需要实现一种被配置为以高效方式,例如以操作时需要较少的硅面积或较少处理功率的方式实现DNN(或其至少一部分)的硬件。此外,DNN可针对各种不同应用程序以多种不同方式进行配置。因此,还需要一种用于实现DNN的具有能够支持各种DNN配置的灵活性的硬件。
发明内容
提供本发明内容是为了以简化的形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
公开了神经网络的硬件实现方式以及在此类硬件实现方式中处理数据的方法。在块中处理所述网络的多个层的输入数据,以生成输出数据的相应的块。所述处理在深度方向执行经过所述多个层,从而针对给定块评估所述多个层中的所有层,然后再执行至下一个块。
根据一个方面,公开了一种在神经网络的硬件实现方式中处理数据的方法,该硬件实现方式包括一个或多个第一存储器装置和一个或多个第二存储器装置,该神经网络包括多个层,该方法包括:
在一个或多个第一存储器装置中提供表示多个层的权重的权重数据;
在一个或多个第一存储器装置中提供多个层的输入数据;
从一个或多个第一存储器装置读取表示输入数据的第一块的输入数据的第一子集;
从所述一个或多个第一存储器装置读取所述权重数据;
处理权重数据和输入数据的第一子集,以评估多个层中的每一层,从而计算输出数据的第一块;以及
将输出数据的第一块写入一个或多个第一存储器装置。
根据一个示例,公开了一种在神经网络的硬件实现方式中处理数据的方法,该硬件实现方式包括一个或多个第一存储器装置和一个或多个第二存储器装置,该神经网络包括多个层,该方法包括:
在一个或多个第一存储器装置中提供表示多个层的权重的权重数据和多个层的输入数据;
从一个或多个第一存储器装置读取表示输入数据的第一块的输入数据的第一子集;
从一个或多个第一存储器装置读取权重数据;
处理权重数据和输入数据的第一子集,以评估多个层中的每一层,从而计算输出数据的第一块,其中评估多个层中的第一层之后的至少一层包括:
从一个或多个第二存储器装置读取先前层的输出数据;
处理权重数据和先前层的输出数据以评估至少一层,从而计算该至少一层的输出数据;以及
将至少一层的输出数据写入一个或多个第二存储器装置中以在后续层的评估期间读取;以及
将输出数据的第一块写入一个或多个第一存储器装置。
发明人已经认识到,通过连续评估神经网络的若干层来处理输入数据的块并由此产生输出数据的块可能是有利的。输入数据子集的这种深度优先处理可帮助减少与将网络的每一层的输出写入存储器或从存储器中读取网络的每一层的输出相关联的存储器访问开销。就时间和/或能量成本而言,这种存储器访问开销可能非常大,特别是当存储器为片外存储器时。
在使该深度优先方法达到其逻辑极限的情况下,有可能在每一次传播过程中仅计算多个层的结束层处的单个输出数据元素(而不是如本文所公开的输出数据的块)。然而,本发明的发明人已经认识到,在一次传播过程中产生包含多个输出数据元素的输出数据的块也可能是有利的。这可有利于更高效的硬件实现方式。例如,在并行实现方式中,可以并行地应用多个处理元素来生成输出数据元素。这可以实现高效处理,同时利用可能重叠的数据依赖关系来降低存储器带宽要求。
输入数据的第一子集(即,第一块)在移动至下一层之前整体被处理经过多个层的每个单独的层。也就是说,对每一层只评估一次,以便计算输出数据的第一块。这就是处理权重数据和输入数据的第一子集以在“一次传播过程”中计算输出数据的第一块的含义。
输入数据可以是包括两个或更多个维度的多维输入数据。输入数据可包括2D图像或特征图。多个层可以是多个连续的层。输入数据的块可以是输入数据的连续块。输出数据的块可以是输出数据的连续块。
输入数据的第一子集可以是在一个维度、两个维度或更多个维度上选择的子集。例如,如果输入数据包括具有x维度和y维度的2D图像数据或特征图数据。可以在x维度、y维度或x维度和y维度上选择第一子集。
在此,输出数据的块是与输入数据的块相对应的输出数据。因此,输出数据的块是完整输出数据的子集。输出数据的块可具有与输入数据相同的维度数量。
在一些实施方案中,可以在开始(或完成)输入数据的第二子集的处理之前将输出数据的第一块写入一个或多个第一存储器装置。在一些实施方案中,可以在开始(或完成)从一个或多个第一存储器装置读取第二子集之前,将输出数据的第一块写入一个或多个第一存储器装置。在其他实施方案中(例如,在流水线实现方式中),这些条件可以放宽。
对神经网络的一层进行评估意指将权重数据应用于该层的输入数据以计算输出数据。这可包括将输入数据中的输入值乘以权重数据中的相应的权重,并且将这些相乘的结果相加以产生输出数据中的输出值。当前层的输出数据可以是后续层的输入数据。多个层中的至少一层是卷积层。
需注意,多个层中的第一层不必是神经网络的第一层。同样,多个层的结束层也不必是神经网络的最后一层。多个层可以是神经网络的层的子集。然而,在某些情况下(尤其是对于具有少量层的网络),多个层可包括神经网络的所有层。
该方法还可以包括提供一个或多个处理元件,该一个或多个处理元件被配置为处理权重和输入数据的第一子集以评估多个层中的每一层。多个处理元件可以并行操作,以评估神经网络的给定层。这包括并行操作以评估输出层。该神经网络可以是深度神经网络。
输出数据可包括p个输出数据集或由其组成,每个集合包括n个输出数据元素(p≥1,n≥1,可选地n≥2)。p个输出数据集中的每一个输出数据集可表示输出数据平面,诸如特征图。输出数据集的数量可取决于权重数据,因为权重数据包括用于定义每个输出数据集的一组权重。一组权重可形成滤波器内核,例如每个滤波器内核定义输出特征图。
输出数据的第一块可包括在一个或多个维度上延伸的多个输出数据元素,并且输入数据的第一子集可包括在一个或多个维度上延伸的多个输入数据元素,并且其中每个输出数据子元素取决于输入数据元素的相应的子组,每个子组具有与至少一个其他子组共同的至少一个输入数据元素。因此,输出数据元素取决于在一个或多个维度上重叠的输入数据元素的子组。在此,“取决于”输入数据元素的子组的输出数据元素意指该子组中的输入数据元素(且仅这些输入数据元素)用于输出数据元素的计算。
两个子组之间的“重叠”是指两个子组共同的输入数据元素。并非所有子组都必须彼此重叠。例如,可能仅相邻的输出数据元素依赖于重叠的子组。还需注意,重叠优选地是部分重叠,由此子组为不同的子组,这些子组具有一些共同的输入数据元素,但并非它们的所有输入数据元素都是共同的。
该方法还可以包括,对于在第一层之后的每个后续层,将当前层的输出数据写入一个或多个第二存储器装置(除了可选地,对于结束层,输出缓冲器可被配置为将输出数据写入一个或多个第一存储器装置)。
访问一个或多个第二存储器装置的成本可小于访问一个或多个第一存储器装置的成本。一个或多个第一存储器装置可以是片外存储器装置,例如,同步动态随机存取存储器(SDRAM)。一个或多个第二存储器装置可以是片上存储器,例如片上RAM。访问存储器装置的成本可以是能量成本和/或时间成本。
该方法还可以包括,在从一个或多个第一存储器装置读取权重数据之后,将该权重数据写入一个或多个第二存储器装置,该方法可选地包括:在评估每一层之前,从一个或多个第二存储器装置读取该层的权重数据。
对于多个层中的至少一层,该方法还可以包括:当计算至少一层的输出数据时:标识至少一层的输出数据的一次性部分,在计算输出数据的第一块之后可将该一次性部分删除;并且标识至少一层的输出数据的非一次性部分,在计算输出数据的第一块之后应该保留该非一次性部分,以用于计算输出数据的至少一个其他块,该方法可选地包括,当将至少一层的输出数据写入一个或多个第二存储器装置时:将一次性(disposable)部分写入一个或多个第二存储器装置的第一区段;并且将非一次性(non-disposable)部分写入一个或多个第二存储器装置的第二不同区段。
写入一次性部分可包括重写先前被写入一个或多个第二存储器装置的第一区段的先前层的输出数据的一次性部分。在此,“先前”是指在计算第一输出块的过程中的先前。
以此方式,输出数据的一次性部分可以在短时间内存储在存储器的频繁重写的第一区段中。输出数据的非一次性部分可以在以较低频率重写的存储器的第二区段中存储较长时间。这可有利于存储器资源的高效使用。
当评估多个层中的另外的层时,输出数据的一次性部分的至少一部分可以被重写。该一次性部分可以由所述另外的层的输出数据的一次性部分重写。
可对一个或多个第二存储器装置的第二区段进行双缓冲。这允许从一个存储器位置(一个缓冲器)读取来自先前块的非一次性部分,并且允许将来自当前块的非一次性部分写入第二存储位置(第二缓冲器),而不重写在计算中仍需要的数据。为了处理下一块,切换用于读取和写入的存储器位置。
该方法还可包括,当评估至少一层的后续层时:从一个或多个第二存储器装置的第一区段读取一次性部分;以及从一个或多个第二存储器装置的第二区段读取非一次性部分;以及在所述后续层的输出的计算中使用该一次性部分和该非一次性部分。
该方法还可以包括:从一个或多个第一存储器装置读取表示输入数据的第二块的输入数据的第二子集;处理权重数据和输入数据的第二子集以评估多个层中的每一层,从而计算输出数据的第二块;以及将输出数据的第二块写入一个或多个第一存储器装置。第二块可以与第一块相邻。第二块可以在与第一块相同的一个或多个维度上延伸。
该方法还可以包括:从一个或多个第一存储器装置读取表示输入数据的第二块的输入数据的第二子集;从一个或多个第二存储器装置读取来自多个层中的至少一层的输出数据的非一次性部分,该非一次性部分先前已在计算输出数据的第一块期间写入一个或多个第二存储器装置;处理权重数据、非一次性部分和输入数据的第二子集以评估多个层,从而计算输出数据的第二块;以及将输出数据的第二块写入一个或多个第一存储器装置。
该方法可以逐块进行,直到已经计算出输出数据的所有块。如果结束层生成一个以上的输出数据集,则可以在与计算第一输出数据集的输出数据的每个块相同的步骤中计算其他输出数据集的输出数据的对应的块。
处理权重数据和输入数据的第一子集可包括:处理权重数据和输入数据的第一子集以评估多个层中的第一层,从而计算第一层的输出数据;以及将第一层的输出数据写入一个或多个第二存储器装置,以在评估多个层的下一个后续层时读取。
还提供了包括多个层的神经网络的硬件实现方式,该硬件实现方式包括:
一个或多个第一存储器装置,该一个或多个第一存储器装置被配置为存储:
表示所述多个层的权重的权重数据;以及
多个层的输入数据,
一个或多个第二存储器装置,
输入缓冲器,该输入缓冲器被配置为获得表示输入数据的第一块的输入数据的第一子集,
系数缓冲器,该系数缓冲器被配置为获得权重数据,
一个或多个处理元件,该一个或多个处理元件被配置为处理权重数据和输入数据的第一子集以评估多个层中的每一层,从而计算输出数据的第一块,以及
输出缓冲器,该输出缓冲器被配置为输出输出数据的第一块,
其中,为了评估多个层中第一层之后的至少一层:
输入缓冲器被配置为从一个或多个第二存储器装置读取先前层的输出数据;
一个或多个处理元件被配置为处理权重数据和先前层的输出数据以评估至少一层,从而计算至少一层的输出数据;并且
输出缓冲器被配置为将至少一层的输出数据写入一个或多个第二存储器装置中以在后续层的评估期间读取。多个层中的至少一层是卷积层。
在一些示例中,输入缓冲器可被配置为直接从一个或多个第一存储器装置读取输入数据的第一子集。替代地,一个或多个第二存储器装置可被配置为从一个或多个第一存储器装置接收输入数据的第一子集,并且输入缓冲器可被配置为从一个或多个第二存储器装置读取该数据。类似地,在一些示例中,系数缓冲器可被配置为直接从一个或多个第一存储器装置读取权重数据。替代地,一个或多个第二存储器装置可被配置为从一个或多个第一存储器装置接收权重数据,并且系数缓冲器可被配置为从一个或多个第二存储器装置读取权重数据。同样,在一些示例中,输出缓冲器可被配置为将输出数据的第一块直接写入一个或多个第一存储器装置。替代地,输出缓冲器可被配置为将输出数据的第一块写入一个或多个第二存储器装置,并且一个或多个第一存储器装置可被配置为从一个或多个第二存储器装置接收输出数据的第一块。据此公开了这些替代方案的所有组合。
对于第一层之后的每个后续层,输出缓冲器可被配置为将当前层的输出数据写入一个或多个第二存储器装置(除了可选地,对于多个层中的结束层,输出缓冲器可被配置为将输出数据写入一个或多个第一存储器装置)。
一个或多个第二存储器装置可被配置为从一个或多个第一存储器装置获得权重数据,并且系数缓冲器可被配置为在每一层被评估之前,从一个或多个第二存储器装置读取该层的权重数据。
当已经计算出多个层中的至少一层的输出数据时,输出缓冲器可被配置为:标识至少一层的输出数据的一次性部分,在计算输出数据的第一块之后可以将该一次性部分删除;标识至少一层的输出数据的非一次性部分,在计算输出数据的第一块之后应该保留该非一次性部分,以用于计算输出数据的至少一个其他块;并且可选地,将一次性部分写入一个或多个第二存储器装置的第一区段;并且将非一次性部分写入一个或多个第二存储器装置的第二不同区段。
当评估多个层中的另外的层时,输出缓冲器可被配置为重写输出数据的一次性部分的至少一部分。输出缓冲器可被配置为用所述另外的层的输出数据的一次性部分重写一次性部分。
可对一个或多个第二存储器装置的第二区段进行双缓冲。
当评估至少一层的后续层时:输入缓冲器可被配置为从一个或多个第二存储器装置的第一区段读取一次性部分;输入缓冲器可被配置为从一个或多个第二存储器装置的第二区段读取非一次性部分;并且一个或多个处理元件可被配置为在所述后续层的输出的计算中使用该一次性部分和该非一次性部分。
输入缓冲器可被配置为获得表示输入数据的第二块的输入数据的第二子集;一个或多个处理元件可被配置为处理权重数据和输入数据的第二子集以评估多个层中的每一层,从而计算输出数据的第二块;并且输出缓冲器可被配置为输出输出数据的第二块。
输入缓冲器可被配置为获得表示输入数据的第二块的输入数据的第二子集;输入缓冲器可被配置为从一个或多个第二存储器装置读取来自多个层中的至少一层的输出数据的非一次性部分,该非一次性部分先前已在计算输出数据的第一块期间写入一个或多个第二存储器装置;一个或多个处理元件可被配置为处理权重数据、非一次性部分和输入数据的第二子集以评估多个层,从而计算输出数据的第二块;并且输出缓冲器可被配置为输出输出数据的第二块。
权重数据可选地包括用于多个层中的每一层的一个或多个权重集,并且p取决于结束层的权重集的数量。
一个或多个处理元件可被配置为处理权重数据和输入数据的第一子集以评估多个层中的第一层,从而计算第一层的输出数据;并且输出缓冲器可被配置为将第一层的输出数据写入一个或多个第二存储器装置,以在评估多个层的下一个后续层时读取。
还公开了以下各项:处理系统,该处理系统被配置为执行如上概述的方法;以及处理系统,该处理系统包括如上概述的硬件实现方式。该处理系统可以是图形处理系统或人工智能加速器系统。该处理系统可以在集成电路上的硬件中体现。
还提供了一种使用集成电路制造系统来制造如上概述的硬件实现方式或如上概述的处理系统的方法。
还提供了一种使用集成电路制造系统制造如上概述的处理系统的方法,该方法包括:使用布局处理系统对处理系统的计算机可读描述进行处理,以生成体现处理系统的集成电路的电路布局描述;以及使用集成电路生成系统,根据电路布局描述来制造处理系统。
还提供了一种计算机可读代码,该计算机可读代码被配置为在代码运行时使如上概述的方法得以执行;以及在上面对所述计算机可读代码进行编码的计算机可读存储介质。该计算机可读存储介质可以是非暂时性计算机可读存储介质。
还提供了集成电路定义数据集,当在集成电路制造系统中处理时,该集成电路定义数据集配置该集成电路制造系统以制造如上概述的硬件实现方式或如上概述的处理系统。
还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有如上概述的处理系统的计算机可读描述,该计算机可读描述在集成电路制造系统中处理时使集成电路制造系统制造体现该处理系统的集成电路。
还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有如上概述的处理系统的计算机可读描述,该计算机可读描述在集成电路制造系统中处理时使集成电路制造系统执行以下操作:使用布局处理系统对处理系统的计算机可读描述进行处理,以生成体现该处理系统的集成电路的电路布局描述;并且使用集成电路生成系统根据电路布局描述来制造处理系统。
还提供了一种集成电路制造系统,该集成电路制造系统被配置为制造如上概述的处理系统。
还提供了一种集成电路制造系统,包括:非临时性计算机可读存储介质,该非临时性计算机可读存储介质上存储有如上概述的处理系统的计算机可读描述;布局处理系统,该布局处理系统被配置为处理计算机可读描述,以生成体现该处理系统的集成电路的电路布局描述;以及集成电路生成系统,该集成电路生成系统被配置为根据电路布局描述来制造处理系统。
布局处理系统可被配置为确定从集成电路描述导出的电路的逻辑部件的位置信息,以生成体现该处理系统的集成电路的电路布局描述。
硬件实现方式或处理系统可以在集成电路上的硬件中体现。可以提供一种在集成电路制造系统处制造硬件实现方式或处理系统的方法。可提供一种集成电路定义数据集,该集成电路定义数据集在集成电路制造系统中处理时配置该系统以制造硬件实现方式或处理系统。可提供一种非暂时性计算机可读存储介质,该非暂时性计算机可读存储介质上存储有硬件实现方式或处理系统的计算机可读描述,该计算机可读描述在集成电路制造系统中处理时,使集成电路制造系统制造体现硬件实现方式或处理系统的集成电路。
可提供一种集成电路制造系统,该集成电路制造系统包括:非暂时性计算机可读存储介质,该非暂时性计算机可读存储介质上存储有硬件实现方式或处理系统的计算机可读描述;布局处理系统,该布局处理系统被配置为处理计算机可读描述,以生成体现硬件实现方式或处理系统的集成电路的电路布局描述;以及集成电路生成系统,该集成电路生成系统被配置为根据电路布局描述来制造硬件实现方式或处理系统。
可提供用于执行本文中描述的任一方法的计算机程序代码。可提供非暂时性计算机可读存储介质,在其上存储有计算机可读指令,所述计算机可读指令在计算机系统处执行时使所述计算机系统执行本文中描述的任何方法。
如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
附图说明
现在将参考附图详细描述示例,在附图中:
图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示出了用于生成体现人工智能加速器系统的集成电路的集成电路制造系统。
附图示出了各种示例。技术人员将理解,附图中所示的元件边界(例如,框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿各附图使用共同附图标记来指示相似特征。
具体实施方式
通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文中描述的实施方案,并且对所公开的实施方案的各种修改对于所属领域的技术人员而言将是显而易见的。现在仅通过示例的方式来描述实施方案。
深度神经网络(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)SDRAM 312;片上存储器(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,用于将多个层的结束层的输出数据的块提供给DDR 312。累积缓冲器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的第一层)时,将从DDR312读取该输出;然而,对层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矩形。然后可以在该矩形的上方、下方、左侧和右侧定义重叠数据。来自当前块的重叠数据可能对于计算输出数据的多个后续块有用,所述多个后续块为例如当前块右侧的块、当前块下方的块和当前块右下方的块(假设块以光栅扫描顺序处理)。同样的原理也可以扩展到更多维度上的块,这些块在多维空间中具有多个方向上的重叠数据。
处理系统可包括如上所述的硬件实现方式,或者可被配置为执行如上所述的方法。处理系统可以是人工智能加速器系统,诸如神经网络加速器(NNA),或图形处理系统/图形处理单元(GPU)。
图12示出了其中可以实现如上所述的处理系统(例如,NNA)的计算机系统。计算机系统包括CPU 902、NNA 904、存储器906和其他装置914,诸如显示器916、扬声器918,以及相机922。在NNA 904上实现(对应于硬件实现方式300的)处理块910。在其他示例中,处理块910可以在CPU 902上实现。计算机系统的部件可以通过通信总线920彼此进行通信。(对应于DDR 312的)存储库912被实现为存储器906的一部分。
图3的硬件实现方式300被示出为包括许多功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当理解,本文中被描述为由硬件实现方式形成的中间值不需要由硬件实现方式在任何时间点物理地生成,并且可以仅表示方便地描述由硬件实现方式在其输入端与输出端之间执行的处理的逻辑值。
本文中描述的硬件实现方式可以在集成电路上的硬件中体现。本文中描述的硬件实现方式可被配置为执行本文中描述的任一种方法。一般来说,上文所述的功能、方法、技术或部件中的任一个可以在软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中实施。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实现方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序代码在处理器上执行时执行指定任务。本文中所描述的算法和方法可以由执行代码的一个或多个处理器执行,所述代码使处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其他技术来存储指令或其他数据并且可以由机器存取的其他存储器装置。
如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如C、Java或OpenCL等编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,例如CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可以包括一个或多个处理器。
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,例如硬件描述语言(HDL)软件,用于设计集成电路或用于配置可编程芯片以执行所要功能。也就是说,可以提供一种计算机可读存储介质,在该计算机可读存储介质上对集成电路定义数据集形式的计算机可读程序代码进行编码,在集成电路制造系统中处理(即,运行)时将系统配置为制造配置为执行本文中描述的任一种方法的硬件实现方式,或制造包括本文中描述的任何设备的硬件实现方式。集成电路定义数据集可以是例如集成电路描述。
因此,可以提供一种在集成电路制造系统处制造如本文中描述的硬件实现方式的方法。此外,可以提供一种集成电路定义数据集,该集成电路定义数据集在集成电路制造系统中处理时使制造硬件实现方式的方法被执行。
集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包括作为寄存器传输级(RTL)代码,作为高级电路表示法(诸如Verilog或VHDL),以及作为低级电路表示法(诸如OASIS(RTM)和GDSII)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如RTL)可以在计算机系统上处理,该计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,该软件环境包括电路元件的定义和用于组合这些元件以生成由该表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置成生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
现在将参照图13描述在集成电路制造系统处处理集成电路定义数据集以便将该系统配置为制造如上所述的硬件实现方式或处理系统的示例。
图13示出了集成电路(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)生成具有所述定义的配置的可重新配置的处理器。
在一些实施方案中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的装置。例如,由集成电路制造定义数据集以上文关于图13所描述的方式对集成电路制造系统进行的配置可以制造如本文中所描述的装置。
在一些示例中,集成电路定义数据集可包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图13所示的示例中,IC生成系统可以由集成电路定义数据集进一步配置成在制造集成电路时根据在集成电路定义数据集处限定的程序代码将固件加载到所述集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
与已知的实现方式相比,在本申请中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实现的方法中)的实现方式可以引起性能改进。性能改进可以包含计算性能提高、等待时间缩短、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如在集成电路中)期间,可以在性能改进与物理实施方案之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实现方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起装置、设备、模块和系统的物理实现方式的改进(诸如硅面积减小)的概念可以针对性能提高进行权衡。例如,这可以通过在预定义面积预算内制造模块的多个实例来完成。
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
Claims (15)
1.一种在神经网络(100)的硬件实现方式中处理数据的方法,所述硬件实现方式包括一个或多个第一存储器装置(312)和一个或多个第二存储器装置(314),所述神经网络(100)包括多个层(102-1、102-2、102-3;502-1、502-2),所述方法包括:
在所述一个或多个第一存储器装置(312)中提供表示所述多个层的权重的权重数据和所述多个层的输入数据(104;504);
从所述一个或多个第一存储器装置(312)读取表示所述输入数据的第一块的所述输入数据(104;504)的第一子集;
从所述一个或多个第一存储器装置(312)读取所述权重数据;
处理所述权重数据和所述输入数据(104;504)的所述第一子集,以评估所述多个层中的每一层,从而计算输出数据(106;508)的第一块,其中评估所述多个层中的第一层之后的至少一层包括:
从所述一个或多个第二存储器装置(314)读取先前层的输出数据;
处理所述权重数据和所述先前层的所述输出数据以评估所述至少一层,从而计算所述至少一层的输出数据;以及
将所述至少一层的所述输出数据写入所述一个或多个第二存储器装置中以在后续层的所述评估期间读取;以及
将输出数据(106;508)的所述第一块写入所述一个或多个第一存储器装置(312),
其中所述多个层中的至少一层是卷积层。
2.如权利要求1所述的方法,还包括:在从所述一个或多个第一存储器装置(312)读取所述权重数据之后,将所述权重数据写入所述一个或多个第二存储器装置(314),
所述方法包括在评估每一层之前,从所述一个或多个第二存储器装置(314)读取所述层的所述权重数据。
3.如权利要求1或2所述的方法,还包括在计算所述至少一层的输出数据时:
标识所述至少一层的所述输出数据的一次性部分,在计算输出数据的所述第一块之后可以将所述一次性部分删除;以及
标识所述至少一层的所述输出数据的非一次性部分,在计算输出数据的所述第一块之后应该保留所述非一次性部分,以用于计算输出数据的至少一个其他块。
4.如权利要求3所述的方法,包括,当将所述至少一层的所述输出数据写入所述一个或多个第二存储装置(314)时:
将所述一次性部分写入所述一个或多个第二存储器的第一区段(802);以及
将所述非一次性部分写入所述一个或多个第二存储器装置的第二不同区段(804),
可选地,其中,当评估所述多个层中的另外的层时,所述输出数据的所述一次性部分的至少一部分被重写,可选地,其中所述一次性部分由所述另外的层的输出数据的一次性部分重写。
5.一种包括多个层(102-1、102-2、102-3;502-1、502-2)的神经网络(100)的硬件实现方式(300),其中至少一层是卷积层,所述硬件实现方式包括:
一个或多个第一存储器装置(312),所述一个或多个第一存储器装置被配置为存储:
表示所述多个层的权重的权重数据;以及
多个层的输入数据(104;504),
一个或多个第二存储器装置(314),
输入缓冲器(310),所述输入缓冲器被配置为获得表示所述输入数据的第一块的所述输入数据(104;504)的第一子集,
系数缓冲器(308),所述系数缓冲器被配置为获得所述权重数据;
一个或多个处理元件(318),所述一个或多个处理元件被配置为处理所述权重数据和所述输入数据(104;504)的所述第一子集,以评估所述多个层中的每一层,从而计算输出数据(106;508)的第一块,以及
输出缓冲器(316),所述输出缓冲器被配置为输出输出数据的所述第一块,
其中,为了评估所述多个层中第一层之后的至少一层:
所述输入缓冲器被配置为从所述一个或多个第二存储器装置(314)读取先前层的输出数据;
所述一个或多个处理元件(318)被配置为处理所述权重数据和所述先前层的所述输出数据以评估所述至少一层,从而计算所述至少一层的输出数据;并且
所述输出缓冲器被配置为将所述至少一层的所述输出数据写入所述一个或多个第二存储器装置中以在后续层的所述评估期间读取。
6.如权利要求5所述的硬件实现方式,其中,当已经计算所述多个层中的所述至少一层的所述输出数据时,所述输出缓冲器(316)被配置为:
标识所述至少一层的所述输出数据的一次性部分,在计算输出数据的所述第一块之后可以将所述一次性部分删除;以及
标识所述至少一层的所述输出数据的非一次性部分,在计算输出数据的所述第一块之后应该保留所述非一次性部分,以用于计算输出数据的至少一个其他块。
7.如权利要求6所述的硬件实现方式,其中当将所述至少一层的所述输出数据写入所述一个或多个第二存储器装置(314)时,所述输出缓冲器(316)被配置为:
将所述一次性部分写入所述一个或多个第二存储器装置(314)的第一区段(802);以及
将所述非一次性部分写入所述一个或多个第二存储器装置(314)的第二不同区段(804)。
8.如权利要求7所述的硬件实施方案,其中,当评估所述多个层中的另外的层时,所述输出缓冲器(316)被配置为重写所述输出数据的所述一次性部分的至少一部分,可选地,其中所述输出缓冲器(316)被配置为用所述另外的层的输出数据的一次性部分重写所述一次性部分。
9.如权利要求7至8中任一项所述的硬件实现方式,其中对所述一个或多个第二存储器装置(314)的所述第二区段(804)进行双缓冲。
10.如权利要求7至9中任一项所述的硬件实现方式,其中,当评估所述至少一层的所述后续层时:
输入缓冲器(310)被配置为从所述一个或多个第二存储器装置(314)的所述第一区段(802)读取所述一次性部分;
所述输入缓冲器(310)被配置为从所述一个或多个第二存储器装置(314)的所述第二区段(804)读取所述非一次性部分;并且
所述一个或多个处理元件(318)被配置为在所述后续层的所述输出的所述计算中使用所述一次性部分和所述非一次性部分。
11.如权利要求7至10中任一项所述的硬件实现方式,其中:
所述输入缓冲器(310)被配置为获得表示所述输入数据的第二块的所述输入数据的第二子集;
所述输入缓冲器(310)被配置为从所述一个或多个第二存储器装置(314)读取来自所述多个层的至少一层的输出数据的非一次性部分,所述非一次性部分先前已在所述计算输出数据的所述第一块期间写入所述一个或多个第二存储器装置;
所述一个或多个处理元件(318)被配置为处理所述权重数据、所述非一次性部分和所述输入数据的所述第二子集以评估所述多个层,从而计算输出数据的第二块;并且
所述输出缓冲器(316)被配置为输出输出数据的所述第二块。
12.一种处理系统(904),所述处理系统被配置为执行如权利要求1至4中任一项所述的方法,以及/或者包括如权利要求5至11中任一项所述的硬件实现方式(300、910)。
13.一种使用集成电路制造系统(1002)来制造如权利要求5至11中任一项所述的硬件实现方式(300)或如权利要求12所述的处理系统(904)的方法,所述方法包括:
使用布局处理系统对所述硬件实现方式或处理系统的计算机可读描述进行处理,以生成体现所述硬件实现方式或处理系统的集成电路的电路布局描述;以及
使用集成电路生成系统,根据所述电路布局描述来制造所述硬件实现方式或处理系统。
14.一种计算机可读代码,所述计算机可读代码被配置为使得在运行所述代码时执行如权利要求1至4中任一项所述的方法。
15.一种计算机可读存储介质,所述计算机可读存储介质上存储有如权利要求5-11中任一项所述的硬件实现方式或如权利要求12所述的处理系统的计算机可读描述,所述计算机可读描述在集成电路制造系统中处理时使所述集成电路制造系统执行以下操作:
使用布局处理系统对所述硬件实现方式或处理系统的所述计算机可读描述进行处理,以生成体现所述硬件实现方式或处理系统的集成电路的电路布局描述;以及
使用集成电路生成系统,根据所述电路布局描述来制造所述硬件实现方式或处理系统。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1917521.5 | 2019-11-29 | ||
GB1917521.5A GB2589383B (en) | 2019-11-29 | 2019-11-29 | Hardware implementation of a neural network |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112884138A true CN112884138A (zh) | 2021-06-01 |
Family
ID=69147188
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011362054.4A Pending CN112884138A (zh) | 2019-11-29 | 2020-11-27 | 神经网络的硬件实现方式 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20210174181A1 (zh) |
EP (1) | EP3832650A1 (zh) |
CN (1) | CN112884138A (zh) |
GB (2) | GB2589383B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112506436B (zh) * | 2020-12-11 | 2023-01-31 | 西北工业大学 | 用于卷积神经网络加速器的高效率数据动态存储分配方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10726330B2 (en) * | 2016-10-11 | 2020-07-28 | The Research Foundation For The State University Of New York | System, method, and accelerator to process convolutional neural network layers |
US11436483B2 (en) * | 2018-01-17 | 2022-09-06 | Mediatek Inc. | Neural network engine with tile-based execution |
US11429855B2 (en) * | 2018-02-06 | 2022-08-30 | Nec Corporation | Acceleration of neural networks using depth-first processing |
-
2019
- 2019-11-29 GB GB1917521.5A patent/GB2589383B/en active Active
- 2019-11-29 GB GB2300279.3A patent/GB2614621B/en active Active
-
2020
- 2020-10-20 EP EP20202768.6A patent/EP3832650A1/en active Pending
- 2020-11-27 CN CN202011362054.4A patent/CN112884138A/zh active Pending
- 2020-11-30 US US17/106,892 patent/US20210174181A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
GB2589383B (en) | 2023-04-05 |
GB2589383A (en) | 2021-06-02 |
GB2614621A (en) | 2023-07-12 |
US20210174181A1 (en) | 2021-06-10 |
EP3832650A1 (en) | 2021-06-09 |
GB2614621B (en) | 2024-02-21 |
GB201917521D0 (en) | 2020-01-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11886536B2 (en) | Methods and systems for implementing a convolution transpose layer of a neural network | |
US11868426B2 (en) | Hardware implementation of convolutional layer of deep neural network | |
US20230186062A1 (en) | Neural Network Architecture Using Convolution Engines | |
CN108205701B (zh) | 一种执行卷积计算的系统及方法 | |
EP4030302A1 (en) | Buffer addressing for a convolutional neural network | |
US20210174180A1 (en) | Hardware Implementation of a Neural Network | |
US20220253683A1 (en) | Implementing Fully-Connected Neural-Network Layers in Hardware | |
EP3985572A1 (en) | Implementation of a neural network in multicore hardware | |
GB2599909A (en) | Implementation of a neural network in multicore hardware | |
CN114792124A (zh) | 在硬件中实施扩张卷积 | |
US20210174181A1 (en) | Hardware Implementation of a Neural Network | |
GB2599910A (en) | Implementation of a neural network in multicore hardware | |
GB2599911A (en) | Implementation of a neural network in multicore hardware | |
CN115545174A (zh) | 包括矩阵乘法的神经网络 | |
GB2611658A (en) | Hardware implementation of a neural network | |
GB2621217A (en) | Implementation of a neural network in multicore hardware | |
GB2621218A (en) | Implementation of a neural network in multicore hardware | |
EP4300369A1 (en) | Methods and systems for executing a neural network on a neural network accelerator | |
GB2602494A (en) | Implementing fully-connected neural-network layers in hardware | |
GB2602493A (en) | Implementing fully-connected neural-network layers 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 |