CN111684473A - 提高神经网络阵列的性能 - Google Patents
提高神经网络阵列的性能 Download PDFInfo
- Publication number
- CN111684473A CN111684473A CN201980010993.1A CN201980010993A CN111684473A CN 111684473 A CN111684473 A CN 111684473A CN 201980010993 A CN201980010993 A CN 201980010993A CN 111684473 A CN111684473 A CN 111684473A
- Authority
- CN
- China
- Prior art keywords
- row
- column
- xin
- elements
- array
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8046—Systolic arrays
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
-
- 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
-
- 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
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- 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
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Neurology (AREA)
- Image Analysis (AREA)
- Complex Calculations (AREA)
Abstract
一种脉动阵列的处理元件(PE)可以使用相同权重对输入数据集的两个或更多个顺序数据元素并行执行神经网络计算。因此,可以并行生成与输出数据集相对应的两个或更多个输出数据元素。基于所述输入数据集的大小和输入数据类型,所述脉动阵列可以并行处理单个数据元素或多个数据元素。
Description
背景技术
人工神经网络是具有基于生物神经网络的架构的计算系统。可以使用训练数据对人工神经网络进行训练,以了解如何执行某个计算任务。
神经网络可以包含一组处理元件。每个处理元件可以处理输入数据的一部分以生成输出,并且可以基于所述一组处理元件的输出的组合生成最终决策。作为处理的一部分,每个处理元件可以执行一组算术运算,例如浮点乘法和加法等。神经网络可以通过电路系统和数据路径(如包括能够执行并发算术运算的处理元件阵列的脉动阵列)来实施。脉动阵列的利用率以及处理速度可能取决于脉动阵列如何映射到神经网络层的输入和输出。
附图说明
将参考附图描述根据本公开的各个实施例,在附图中:
图1展示了脉动阵列的示例实施方案;
图2展示了可以使用本文公开的技术来处理数据的示例分类器装置;
图3展示了可以使用本文公开的技术的预测模型的示例;
图4A和图4B展示了卷积层的操作;
图5A展示了使用一组滤波器针对一组图像的卷积层操作的示例;
图5B展示了利用C个输入数据集和M组滤波器的卷积层操作的另一个示例;
图6示出了根据所公开的技术的一些实施例的用于神经网络计算的设备;
图7示出了根据所公开的技术的一些实施例的计算引擎的内部结构;
图8示出了根据所公开的技术的一些实施例的处理元件(PE)的框图;
图9A、图9B、图9C和图9D示出了根据所公开的技术的某些实施例的通过脉动阵列的循环计算;
图10示出了根据所公开的技术的某些实施例的由PE执行的用于有效利用脉动阵列的方法;以及
图11展示了根据本公开的某些方面的计算装置的示例。
具体实施方式
在以下说明中,将描述各个实施例。出于解释的目的,阐述了具体的配置和细节,以便提供对实施例的透彻理解。然而,对于本领域的技术人员还将显而易见的是,可以在没有具体细节的情况下实践这些实施例。此外,可以省略或简化众所周知的特征以免混淆所描述的实施例。
所公开的技术的实施例可以提供用于有效利用脉动阵列进行神经网络计算的系统和方法。脉动阵列可以用于加速深度神经网络中的工作负载。脉动阵列可以包含通常以2维网格布置的多个处理元件(PE)。根据某些实施例,脉动阵列中的每个PE可以同时处理来自输入数据集的多个输入数据元素,以便利用PE的全部计算能力。另外,一些实施例可以并发提供与每个输出数据集相对应的两个或更多个输出数据元素,这可以提高脉动阵列的性能。
神经网络可以包含多个类似于大脑中庞大的神经元网络的互连的神经元或PE。PE可以分为包含例如输入层、多个中间层(也称为隐藏层)和输出层的层。输入层的每个PE可以接收输入数据集的元素,并用权重(也称为滤波器)缩放元素以指示元素对输出的影响程度。中间层中的PE可以组合从输入层的每个PE接收到的经缩放元素以计算一组中间输出。例如,中间层中的每个PE可以计算元素权重积的总和,并且然后通过将激活函数应用于总和来生成中间输出。可以将来自一个中间层的每个PE的中间输出视为与指示表决影响的权重相关联的已激活的表决(或无表决),以确定下一中间层的中间输出。输出层可以生成来自最后中间层的经缩放中间输出的总和,并且基于经缩放中间输出的总和是否超过一定阈值来生成二进制输出(例如,“是”或“否”)。由于层之间的经缩放元素的组合,较高层(例如,输出层、紧接在输出层之前的中间层等)的大小通常小于较低层(例如,输入层、紧接在输入层之后的中间层等)的大小。
卷积神经网络(CNN)通常是前馈人工神经网络。深度前馈神经网络可以包含多个隐藏层并且可以将一层的输出用作下一层的输入。因此,通常信息被前馈。CNN人工神经网络已经成功应用于分析视觉图像。CNN可以被配置成将原始图像从原始像素值逐层变换为最终类别得分。卷积神经网络(CNN)可以包含多个卷积和子采样层,其后任选地跟随有一个或多个完全连接层。
可以跨输入图像的宽度和高度(例如,使用滑动窗口)对每个滤波器进行卷积,并且可以在给定位置处在滤波器的条目与输入像素之间计算相应的点积。当滤波器在输入图像的宽度和高度之上滑动时,可以产生2维特征图(例如,激活图),所述2维特征图可以在每个空间位置处提供所述滤波器的响应。然后通常可以利用在连续区域之上的平均或最大池化对每个特征图进行子采样。基于所述实施方案,在子采样层之前或之后,可以将加性偏差和S形非线性应用于每个特征图。激活图可以沿着深度尺寸堆叠以产生输出特征图。池化层可以与例如宽度和高度等空间尺寸一起用于下采样操作。完全连接层可以用于提供最终类别得分。
可以从主机服务器接收输入数据(例如,图像的像素)和权重。每个PE能够对输入数据和权重执行包含加法和乘法的并发算术运算。然后PE可以将输入数据和权重传递到脉动阵列中的其它元素以进行进一步处理,例如归一化和激活。图1展示了脉动阵列的示例,所述脉动阵列可以包含在网络中连接的PE的阵列。
图1展示了4×4脉动阵列100。例如,脉动阵列100可以在每行中包含四个PE,并且在每列中包含四个PE。应理解,脉动阵列100可以在每行和每列中包含任何数量的PE。此外,每个PE可以包含行输入总线102、列输入总线104、列输出总线106和行输出总线108。PE可以通过行输入总线102从同一行的左侧PE(或从外部电路系统)接收输入。PE还可以通过列输入总线104从同一列上方的PE(或从外部电路系统)接收输入。PE可以基于输入执行算术运算,并且将算术运算的结果通过列输出总线106传输到同一列下方的PE(或到外部电路系统)。PE还可以通过行输出总线108将通过行输入总线102接收到的输入转发到同一行的右侧PE。
脉动阵列100可以被配置成对神经网络的处理元件执行算术运算,包含乘法和加法。例如,每个PE可以包含如乘法器和加法器等算术单元。在图1的示例中,每行PE可以被配置成处理一个输入数据集,并且每列PE可以基于由每个PE在给定列中接收到的所述输入数据集生成一个输出数据集。在一种实施方案中,列112(最左列)的PE可以接收四个输入数据集,每个输入数据集由一行PE处理。列112中的每个PE可以从通过行输入总线102接收到的对应的输入数据集获得输入值和相关联的权重值,并且将输入值与权重值相乘以生成经缩放输入。由PE在任何列(包含列112)内生成的经缩放输入可以由每个PE的加法器进行累积。例如,(列112的)PE 112a可以(由第一输入数据集)生成第一经缩放输入,并且将第一经缩放输入作为部分总和通过列输出总线106传输到PE 112b。PE 112b还可以(由第二输入数据集)生成第二经缩放输入并且将第二经缩放输入加到部分总和中。然后,将用第一经缩放输入和第二经缩放输入累积的经过更新的部分总和通过列输出总线106传输到PE 112c。更新部分总和并且跨列112传播所述部分总和,并且PE 112d可以由四个输入数据集生成经缩放输入的总和。此外,列112中的每个PE还可以将输入数据集传播到其它PE列(例如,列114),所述其它PE列可以用与列112的权重集不同的权重集缩放输入数据集。每列PE可以执行算术运算(乘法和求和)以并行生成其它处理元件的输出元素。在图1的示例中,脉动阵列100可以针对与脉动阵列100的四列相对应的四个PE并行生成输出元素。
尽管脉动阵列100可以通过允许并行算术运算来加速神经网络处理,脉动阵列的利用率可以基于输入数据的大小(例如,位数)和处理元件的算术单元的处理能力而变化。通常,脉动阵列中的处理元件可以设计成以支持最高精度的输入数据类型进行操作。作为示例,处理元件可以支持对16位定点或浮点输入数据类型的计算,以实现一定的准确度。然而,在一些实例中,可以使用较小或低精度数据类型实现类似甚至更好的准确度。在一些实例中,代替使用16位计算,8位计算可能足以实现相同的准确度。例如,在一些实施方案中,当使用16位处理元件执行8位计算时,可以忽略8个最高有效位。然而,在此类情况下,作为示例,可能无法利用PE的一半的算术处理能力,并且脉动阵列的利用率可能为50%或更低。在一些实例中,神经网络的某些应用(例如,图像识别)利用8位数据类型可能会表现地更好,而某些其它应用(例如,产品广告或营销)利用16位数据类型可能会表现地更好。在此类情况下,可以期望设计用于16位数据类型的硬件,使得除了16位数据类型之外还可以支持更小的数据类型(例如,4位、8位)。因此,需要使用比由PE支持的位数少的位数有效地利用脉动阵列进行计算。
所公开的技术的实施例可以提供用于有效利用脉动阵列的系统和方法。在某些实施例中,脉动阵列中的每个PE可以基于输入数据类型和输入数据集的大小同时执行单个计算或多个计算。例如,如果输入数据集的大小相对大于脉动阵列的大小(例如,8位或16位PE),则脉动阵列可以并行执行多个计算,以基于输入数据类型(例如,4位、8位、16位等)有效地利用脉动阵列。在此类情况下,可以将来自输入数据集的多个输入数据元素同时馈送到PE,以利用PE的全部计算能力。例如,可以将两个8位或四个4位输入数据元素馈送到具有16位计算能力的PE。可以由给定PE将相同权重用于到所述PE的所有输入。可以按顺序或者并行将权重加载到脉动阵列的所有PE。每个PE可以将两个或更多个结果传播到同一列中的下一较低的PE。每个PE还可以将接收到的输入数据元素传播到同一行内右侧的另一个PE。因此,可以由脉动阵列的每个PE并行执行多个计算减少处理输入数据集的时间。另外,实施例可以并发提供与每个输出数据集相对应的两个或更多个输出数据元素,这可以提高脉动阵列的性能。一些实施例可以为较大的输入数据集提供显著的性能改进,因为可以针对较大的输入数据集将加载到脉动阵列中的权重进行分摊。
图2展示了可以使用本文公开的技术处理数据的示例分类器装置200。分类器装置200可以是例如操作软件应用程序202和预测模型204以预测包含在输入数据集中的信息并且基于预测执行预定功能的计算装置。例如,分类器装置200可以是提供用于从图像标识某些对象(例如,文本、人等)的图像识别服务的一部分。在一些实施例中,输入数据集可以类似于包括输入特征图元素的输入特征图。应理解,图像识别服务仅作为说明性示例提供,并且本文公开的技术可以用于其它数据处理应用,包含例如基于文本的数据处理(例如,搜索查询的处理)、音频数据处理等。
可以在多租户计算服务系统中提供图像识别服务。多租户计算服务系统通常可以包含多个服务器,所述多个服务器可以托管数据并且由多个客户端或组织用于运行实例,如虚拟机实例或裸机实例(例如,直接在服务器硬件上运行的操作系统)。在大多数情况下,可以将多租户计算服务系统中的如裸机或虚拟机实例等实例在客户端需要时分配给客户端,并且在不再需要时停止使用,使得可以向其它客户端重新分配资源。在本公开中,术语“租户”、“客户端”和“客户”可以互换使用,但是此类术语不一定意味着存在任何特定的业务布置。术语“实例”可以指例如直接在服务器硬件上执行或作为虚拟机执行的实例。不同类型的实例通常对应于不同的硬件功能和/或硬件布置(例如,不同数量的可用存储器和/或处理硬件)。在图2的示例中,多租户计算服务系统可以在客户端需要时提供图像识别服务并且在不再需要时停止使用,使得可以将支持图像识别服务的资源(例如,对软件应用程序202的访问以及用于处理软件应用程序202的底层硬件资源)重新分配给其它客户端。
在一些实例中,软件应用程序202可以从用户接收图像的像素数据。图像可以包含像素阵列。软件应用程序202可以对像素数据执行分析并且预测图像中描绘的一个或多个对象。分析可以包含例如将像素数据与预定特征数据集进行比较。预定特征数据可以包含与视觉图像特征、非视觉图像特征或视觉和非视觉图像特征的组合相关联的数据。如将在下文更详细地讨论的,软件应用程序202可以采用预测模型204基于图像的像素数据计算一组得分以做出预测。然后,软件应用程序202可以基于得分确定关于图像内容的其它信息。例如,基于得分,软件应用程序202可以确定图像是某个对象(例如,人、汽车、树等)。
预测模型204可以呈人工神经网络的形式。人工神经网络可以包含多个处理元件,其中每个处理元件被配置成处理输入像素数据的一部分,或者进一步处理来自其它处理元件的中间输出。参考图3解释示例预测模型。
图3展示了可以使用本文公开的技术的预测模型的示例。在图3的示例中,预测模型204可以是多层神经网络300,如深度神经网络(DNN)、卷积神经网络(CNN)或任何合适的神经网络。预测模型204可以包含输入层302、包含中间层304和306的一组中间层和输出层(图3中未示出)。每层可以包含一组相应的处理元件。
层302可以包含PE 302a、302b、302c、…、302n。层302可以处理输入数据集,例如,表示图像的不同部分的像素数据。在一些实例中,层302的每个PE可以被分配为接收与图像内的预定像素相对应的像素值(例如,x0、x1、x2、…、xn),并且可以将具有接收到的像素值的一个或多个权重传输到层304。在预测模型204是DNN的情况下,可以为层302的每个PE分配基于矩阵W1定义的权重集。层302的每个PE可以将接收到的像素值和所分配的权重发送到层304的每个PE。在预测模型204是CNN的情况下,层302的各组PE可以共享权重集,并且每组可以将权重集和由所述PE组接收到的像素值发送到层304的单个PE。
层304可以处理来自层302的经缩放输出以生成一组中间输出。在一些实例中,可以将层304的PE 304a连接到层302中的一组PE,并且可以将层304的PE 304b连接到层302中的一组PE。作为示例,PE 304b可以基于以下等式生成从层302接收到的经缩放输出的总和:
此处,sum304b表示由PE 304b生成的总和。W1i×xi可以由层302的PE利用相关联的权重(例如,W10)的特定像素值(例如,x0)的缩放。在预测模型204是DNN的情况下,层304的每个PE可以基于由层302的每个PE的像素值的缩放来生成总和,并且然后通过对经缩放像素值求和来生成总和(例如,sum304b)。总和还可以表示包括多个元素(例如,像素值)的输入向量与权重向量(例如,W1)之间的点积。
另一方面,在预测模型204是CNN的情况下,层304的每个PE可以基于由层302的一组PE的像素值的缩放来生成总和。总和可以表示一组像素值与包括权重值的滤波器之间的卷积结果。
图4A和图4B展示了卷积层304的操作。
在图4A中,滤波器402可以包含权重的二维阵列。滤波器402中的权重可以表示要从输入图像404检测到的某些特征的像素的空间分布。输入图像404的高度可以是H个像素并且宽度可以是W个像素。滤波器402的高度可以是R行并且宽度可以是S列,并且通常小于输入图像404。可以将滤波器402中的每个权重映射到像素值的具有相同的R行和S列的矩形块中的像素。在一些实施方案中,输入图像404中的像素数据可以被称为输入特征图的输入特征图元素,并且可以指示像素由与某个或某些特征相对应的相同滤波器(或相同滤波器组)处理。输出特征图可以表示滤波器402与输入特征图之间的卷积输出。
如参考图3所讨论的,层304的PE(例如,PE 304b)可以从输入层302的一组PE接收与来自输入图像404的像素的第一矩形像素块相对应的像素值组408a。所述像素值组408a可以呈现为第一输入数据集。PE 304b可以根据等式1基于滤波器402的每个权重与组408a中的每个对应像素之间的相乘结果的求和生成卷积输出410a。例如,PE 304b可以在由滤波器402表示的矩阵与由组408a表示的矩阵之间生成点积。
如图4B所示,层304的另一个PE(例如,PE 304a)也可以从输入层302的另一组PE接收与来自输入图像404的像素的第二矩形像素块相对应的像素值组408b。像素值组408b可以呈现为第二输入数据集。PE 304a可以根据等式1基于滤波器402的每个权重与组408b中的每个对应像素之间的相乘结果的求和来生成卷积输出410b。PE 304a可以在滤波器402的矩阵与由组408b表示的矩阵之间生成点积。在一些实施例中,图4A和图4B中的每个卷积输出(例如,卷积输出410a、卷积输出410b等)可以对应于层304的PE的输出。卷积输出可以对应于输出特征图,所述输出特征图指示利用滤波器402处理包括输入图像404中的像素数据的输入特征图的结果。卷积输出410a和卷积输出410b中的每个卷积输出可以成包括相应的输出数据元素的输出数据集的形式。
如图4B所示,卷积运算可以被布置在滑动窗口中,使得组408b的第二矩形块在输入图像404中与组408a的第一矩形块重叠或者以其它方式与其相邻。例如,在图4B的示例中,“D”可以表示每个卷积运算的滑动窗口的步幅距离(按像素计),使得与组408b相对应的像素块可以位于距与组408a相对应的像素块的距离D(用像素表示)处,并且下一像素块也可以位于距组408b相同的距离D处。层304的其它PE也可以接收与其它矩形块相对应的像素组并且生成其它中间输出。卷积输出可以是高度为E行并且宽度为F列的卷积输出阵列406的一部分。卷积输出阵列406的高度和宽度可以比输入图像的高度和宽度小。卷积输出的矩形块可以进一步分组,并且可以在卷积输出组与另一滤波器权重集之间的层306处执行卷积运算,以生成另一组卷积输出。在一些实施方案中,可以在多个图像与多个滤波器之间执行卷积运算。参考图5A对此进行进一步解释。
图5A展示了一组图像与一组滤波器之间的卷积层操作的示例。
在一些实施方案中,可以在多个图像与多个滤波器之间执行卷积运算。如图5A所示,可以将一组C滤波器502应用于一组C图像504。可以在所述一组滤波器502中的每个滤波器与图像504的对应图像上的像素块之间执行卷积运算。可以将每个滤波器图像对的卷积结果求和以生成如下卷积输出:
此处,卷积运算涉及一组C图像(或像素阵列)。Xc eD+r,fD+s可以是指所述一组C图像504内的索引c的图像处的像素值,水平像素坐标为eD+r并且竖直像素坐标为fD+s。D是滑动窗口的步幅距离,而e和f对应于卷积输出阵列506中输出的位置,e和f还可以对应于特定的滑动窗口。进一步地,r和s可以对应于滑动窗口内的特定位置。(r,s)位置处的像素和索引c的图像的像素也可以对应于同一(r,s)位置处的相同索引c的对应滤波器中的权重Wc r,s。等式2指示为了计算卷积输出Oe,f,可以将滑动窗口内的每个像素(由(e,f)索引)乘以对应权重Wc r,s。可以计算每个滑动窗口内的所述一组图像504内的图像中的每个图像的乘积的部分总和。接下来,可以计算所述一组图像504中的所有图像的部分总和的总和。
此外,在一些示例中,可以使用多组滤波器来对一组图像执行卷积运算以生成一组卷积输出阵列,每个卷积输出阵列对应于一组滤波器。例如,所述多组过滤波器可以与有待从所述一组图像504检测到的多个特征(例如,对象的第一部分的一组滤波器,对象的第二部分的另一组滤波器等)相对应,并且每个卷积输出阵列可以与来自所述一组图像504的每个特征的检测结果相对应。例如,在将M组滤波器应用于所述一组C图像以生成M个卷积输出阵列的情况下,等式2可以更新如下:
此处,卷积输出Oe,f m和权重Wc,m r,s具有与M组滤波器之一相对应的索引m。
图5B展示了要与M组滤波器(其中M=2)卷积的C个输入数据集(C=3)的示例。每个输入数据集对应于像素阵列的条目。M组滤波器中的每组滤波器包含与C组输入像素阵列相对应的一组C滤波器。卷积运算可以生成M组个输出数据集,其中每个输出数据集对应于卷积输出阵列。每个卷积输出阵列可以对应于将(M组中的)一组滤波器与输入像素阵列进行卷积。例如,可以通过一组像素510与滤波器阵列516之间的点积、一组像素512与滤波器阵列518之间的点积以及一组像素514与滤波器阵列520之间的点积的总和生成O0,0 0。
返回参考图3,层304的一个PE可以被配置成生成一个卷积输出阵列的卷积输出(例如,一次一个),并且层304的PE的组M可以对应于卷积输出阵列的组M。层304的PE还可以利用激活函数处理每个卷积输出以生成激活输出。激活函数可以将卷积输出转换为是否将卷积输出转发到中间层306以影响分类器决策(类似于实际生物神经元的触发)的决定。激活函数的示例可以是根据以下等式定义的整流线性单位(ReLu):
ReLu(y)=max(0,y) (等式4)
层304的PE(例如,PE 304b)可以利用ReLu函数处理总和以基于以下等式生成第一中间输出:
first_intermediate_output210a=ReLu(Sum210a) (等式5)
在预测模型204是CNN的情况下,预测模型204可以包含用于减小第一中间输出的大小的池化层(图3中未示出)。例如,池化层可以执行下采样操作并且将一组中间输出中(基于ReLu函数生成)的最大中间输出转发到层306(同时丢弃所述组中剩余的中间输出)。
层306可以例如通过基于不同组的滤波器执行另外的卷积运算来进一步处理来自层304的经缩放中间输出。可以将来自层306的每个PE的输出转发到其它较高的中间层,或者转发到输出层(图3中未示出)。输出层可以形成输出矢量,其表示例如图像中包含某个图像特征的概率和/或图像包含某个对象(例如人、汽车、树等)的概率。例如,可以将输出向量与与对象的一部分相关联的参考向量或与对象相关联的参考向量进行比较。可以基于比较结果确定关于图像是否是某个对象的图像的决定。
在一些实例中,可能无法有效利用脉动阵列。例如,脉动阵列中的PE能够支持16位输入数据,然而基于脉动阵列的应用,PE只能执行8位计算。在此类情况下,可能无法利用脉动阵列中的一半脉动阵列。所公开的技术的一些实施例可以通过并行处理来自输入数据集的多个数据元素来提高脉动阵列的利用率。例如,16位PE可以使用相同的权重值对来自相同输入数据集的第一8位数据元素和第二8位数据元素并发执行两个8位计算。因此,与一次仅执行8位计算相比,可以通过以一半的时间量生成输出数据集来优化脉动阵列的性能。
图6示出了根据所公开的技术的一些实施例的用于神经网络计算的设备600。设备600可以是计算机系统的一部分,例如,主机服务器。例如,主机服务器可以为如图像识别服务、基于文本的数据处理(例如,搜索查询的处理)、音频数据处理等数据处理应用提供多租户计算服务。如参考图2所讨论的,设备600可以为利用预测模型204的计算提供计算和存储器资源。在一些实施例中,主机装置可以操作软件应用程序202并与设备600通信,以基于利用预测模型204的计算来做出预测。例如,主机装置可以通过使用预测模型204标识包含在图像、文本、音频等的输入数据集中的信息来做出预测。
设备600可以包含通过互连件620耦合到存储器614、主机接口616和直接存储器存取(DMA)控制器618的神经网络处理器602。神经网络处理器602可以包含计算引擎604、计算控制器606、状态缓冲器608、输出缓冲器610和激活引擎612。如将更详细讨论的,神经网络处理器602可以提供计算资源以支持利用预测模型204的计算。神经网络处理器602可以实施为片上系统(SoC)、现场可编程门阵列(FPGA)或任何合适的电路。
存储器614可以被配置成存储从主机装置接收到的指令、输入数据集(例如,图像的像素数据)和权重(例如,对应于特定视觉和/或非视觉特征的权重)。存储器614还可以被配置成存储神经网络处理器602的输出(例如,以输出数据集的形式对输入图像的一个或多个图像识别决策)。存储器614可以包含任何合适的存储器,例如动态随机存取存储器(DRAM)、同步DRAM(SDRAM)、双倍数据速率DRAM(DDR DRAM)、存储级存储器(SCM)、闪存等。
主机接口616可以被配置成实现主机装置与神经网络处理器602之间的通信。例如,主机接口616可以被配置成在主机装置与神经网络处理器602之间传输包含所存储数据(例如,输入数据集、权重、计算结果等)的存储器地址的存储器描述符。主机接口614可以包含例如外围组件互连快速(PCIe)接口或用于与主机装置通信的任何合适的接口。主机装置可以包含主机处理器和主机存储器。
DMA控制器618可以被配置成执行在神经网络处理器602与主机装置之间传输数据的DMA操作。例如,如上所述,主机装置可以将指令、输入数据集和权重存储在存储器614中。主机装置可以向神经网络处理器602(例如,以存储器描述符的形式)提供所存储的指令、数据和权重的存储器地址。神经网络处理器602然后可以基于由主机装置提供的存储器地址获得所存储的指令、数据和权重。神经网络处理器602还可以将计算结果(例如,一个或多个图像识别决策)存储在存储器614中,并且将存储结果的存储器地址提供给主机装置。
计算控制器606可以被配置成向神经网络处理器602的各种组件提供控制以执行神经网络计算。计算控制器606可以执行对将权重加载到计算引擎604中的调度。权重可以存储在状态缓冲器608中。在一个实施例中,计算控制器606可以使用相应的行数据总线按顺序为脉动阵列中的所有PE调度权重的加载。例如,每个周期可以为一个PE加载一个权重。在另一个实施例中,计算控制器606可以为给定行中的每个PE使用相应的列数据总线并行调度每行的脉动阵列中的权重的加载。例如,在每个周期中可以并行装载每行的权重。在一些实施方案中,计算控制器606可以基于从主机装置接收到的指令确定输入数据集的数据类型。例如,可以将指令存储在状态缓冲器608中。指令可以呈操作码的形式。数据类型可以指示输入数据元素的大小和类型,例如,4位、8位、16位、有符号、无符号或浮点。
在一些实施例中,计算控制器606可以基于数据类型和输入数据集的大小确定计算引擎604的操作模式。例如,如果输入数据集的大小(例如,2000个数据元素)比脉动阵列的大小(例如,16×16)大得多,则计算控制器606可以将计算引擎604的操作模式切换为优化模式。优化模式可以使计算引擎604能够针对每个输入数据集并行执行多个计算。例如,对于4位数据类型,每个PE可以并行执行四个4位计算,或者对于8位数据类型,可以并行执行两个8位计算。应理解,基于PE的大小,可以由PE并发处理的输入数据元素的数量可以在不偏离所公开的技术范围的情况下变化。例如,对于32位PE,优化模式可以使计算引擎604能够执行四个8位计算、八个4位计算、两个16位计算等。在一些其它实例中,如果输入数据集的大小(例如,200个数据元素)小于脉动阵列的大小(例如,16×16)或与其相当,则将计算引擎604的操作模式切换到优化模式可能不是非常有效,因为将权重加载到脉动阵列中可能不会与较小的数据集分摊。
状态缓冲器608可以被配置成提供对用于计算引擎604处的计算的数据的缓存。缓存在状态缓冲器608处的数据可以包含,例如,从存储器614获取的输入数据集和权重,以及计算引擎604处的计算的中间输出。缓存可以降低(例如,由存储器614、DMA控制器618、互连件620等的等待时间引起的)存储器存取瓶颈对计算引擎604的性能的影响。状态缓冲器608可以是片上存储器装置并且可以包含静态随机存取存储器(SRAM)或任何合适的存储器。
输出缓冲器610可以包含用于存储由计算引擎604生成的输出数据集的一组寄存器。输出缓冲器610还可以实现另外的处理,如池操作,以减小所存储输出的大小。在一些实施方案中,可以操作计算引擎604以执行对特定神经网络层的计算,并且输出缓冲器610可以处理所述神经网络层的输出并且(在由激活引擎612处理或未处理的情况下)将经过处理的输出数据集存储在状态缓冲器608处。在一些实施例中,输出缓冲器610可以包含用于累积针对不同组的滤波器(例如,M)和输入数据集(例如,C)生成的部分总和以生成卷积输出阵列506的加法器,如参考图5A所讨论。卷积输出阵列506的存储在状态缓冲器608中的最终输出值可以由计算控制器606检索以存储在状态缓冲器608处。
激活引擎612可以被配置成对输出缓冲器610的输出应用一个或多个激活函数(例如,ReLu函数)。例如,激活引擎612可以包含一个或多个查找表(例如,以多路复用器电路的形式),其可以将输入映射到表示将激活函数应用于输入的结果的候选输出之一。在一些示例中,激活引擎612还可以包含用于在不应用激活函数时允许将来自输出缓冲器610的输出直接存储在状态缓冲器608处的旁路路径。
计算引擎604可以被配置成执行用于神经网络的计算。在一些实施例中,计算引擎604可以包含被配置成执行神经网络计算所涉及的一个或多个算术运算的一组PE。每个PE可以使用输入数据集和相关联的权重执行矩阵乘法和矩阵卷积。可以使用一个或多个接口从状态缓冲器608获得权重和输入数据集。参考图7讨论计算引擎604的示例结构。
图7示出了根据所公开的技术的一些实施例的计算引擎604的内部结构。在一些实施方案中,计算引擎604可以包含以多个行和列布置的PE的二维阵列,其中行可以表示第一维度并且列可以表示第二维度。如本文所用,“行”和“列”是可互换的并且用于表示二维阵列的不同尺寸。
阵列的每行可以包含“x”数量的PE并且阵列的每列可以包含“y”数量的PE。例如,“x”和“y”可以是16、32、64、128或任何合适的正整数。在一些实施例中,可以通过一组外部行总线700将阵列的最左列的PE 00、PE 10、PE 20、…、PE x0连接到状态缓冲器608。可以通过内部行总线706使每行内的相邻PE(例如,PE 00、PE 01、PE 02、…、PE 0y)彼此连接。此外,可以通过内部列总线708使每列内的相邻PE彼此连接。可以通过一组外部输入列总线702将最顶行的PE 00、PE 01、PE 02、…、PE 0y连接到状态缓冲器608。在一些实例中,可以由计算控制器606将外部输入列总线702驱动为零,以重置计算引擎604中的计算。另外,可以通过一组外部列总线704将底行的PE x0、PE x1、PE x2、…、PE xy连接到输出缓冲器610。
外部行总线700和外部输入列总线702还可以用于按顺序或并行将权重加载在计算引擎604中。在一个实施例中,可以通过外部输入列总线702针对脉动阵列的每行按顺序加载权重。例如,可以通过外部输入列总线702将权重从状态缓冲器608加载到最左列的PE00、PE 10、PE 20、…、PE x0中。可以通过内部列总线708针对每行将权重进一步移位到右列中的相邻PE。在另一个实施例中,可以通过外部输入列总线702针对脉动阵列的每行并行加载权重。例如,可以通过外部输入列总线702将权重从状态缓冲器608加载到最顶行的PE00、PE 01、PE 02、…、PE 0y中。可以通过内部列总线706针对每列将权重进一步移位到下一行中的相邻PE。
在某些实施例中,可以使用相应接口将同一输入数据集的两个或更多个数据元素馈送到每行。如图7所示,可以将来自第一输入数据集“indataset0”的两个数据元素同时馈送到PE 00,可以将来自第二输入数据集“indataset1”的两个数据元素馈送到PE 10,可以将来自第三输入数据集“indataset2”的两个数据元素馈送到PE 20,并且可以将来自第x输入数据集“indatasetx”的两个数据元素馈送到PE x0。返回参考图5B,在一个实例中,indataset0可以包含对应于像素组510的数据元素,indataset1可以包含对应于像素组512的数据元素,并且indataset2可以包含对应于像素组514的数据元素。
对于给定列,最后一行中的每个PE可以累积来自以上各行中的PE的结果。如图7所示,PE x0可以生成对应于第一输出数据集“outdataset0”的一个或多个输出数据元素,PEx1可以生成对应于第二输出数据集“outdataset1”的一个或多个输出数据元素,PE x2可以生成对应于第三输出数据集“outdataset2”的一个或多个输出数据元素,并且PE xy可以生成对应于第y输出数据集“outdatasety”的一个或多个输出数据元素。
图8示出了根据所公开的技术的一些实施例的PE 800的示例框图。PE 800可以是如图7所示的计算引擎604的PE中的任何PE。PE 800可以包含第一输入寄存器802、第二流水线寄存器804、权重寄存器806、第一乘法器808、第一加法器810、第二乘法器812和第二加法器814。在一些实施方案中,第一加法器810和第二加法器814中的每个加法器可以是8位加法器并且第一乘法器808和第二乘法器812中的每个乘法器可以是8位乘法器。PE 800可以使用任何合适的电路来实施。
PE 800可以包含用于接收第一行输入数据XIN1的第一输入端口和用于接收第二行输入数据XIN2的第二输入端口。根据一些实施例,第一行输入数据XIN1和第二行输入数据XIN2可以是来自输入数据集的顺序元素。对于PE 800的给定列,PE 800可以包含用于接收第一Yin元素的第三输入端口和用于接收第二Yin元素的第四输入端口。
第一输入寄存器802可以被配置成缓冲第一行输入数据XIN1以提供给第一乘法器808。第一输入寄存器802还可以将所缓冲的第一行输入数据XIN1作为第一行输出数据XOUT1提供给PE 800右侧的相邻PE。第二输入寄存器804可以被配置成缓冲第二行输入数据XIN2以提供给第二乘法器812。第二输入寄存器804还可以将所缓冲的第二行输入数据XIN2作为第二行输出数据XOUT2提供给PE 800右侧的相邻PE。在一些实施方案中,第一行输入数据XIN1和第二行输入数据XIN2可以各自包含8位。
在一些实施例中,PE 800可以通过第一接口并发接收第一行输入数据XIN1和第二行输入数据XIN2,并且通过第二接口并发接收第一列输入数据YIN1和第二列输入数据YIN2。在不同的实施例中,术语“并发”可以意味着同时(同时间)、并行或在一定时间段内发生。可以通过第一接口或第二接口将权重Wx,y加载到PE 800中。在一些实施方案中,第一行输入数据XIN1、第二行输入数据XIN2和权重Wx,y可以是行输入数据总线816的一部分。例如,行输入数据总线816可以是更宽的总线,其可以包含8位第一行输入数据XIN1、8位第二行输入数据XIN2、8位权重Wx,y和控制位(例如,数据类型、操作码等)。可以使用分配器(未示出)将行输入数据总线816分成第一行输入数据XIN1、第二行输入数据XIN2、权重Wx,y和控制位。在一些实施方案中,行输入数据总线816可以类似于如参考图1所讨论的行输入总线102。在一些实施例中,第一行输出数据XOUT1和第二行输出数据XOUT2可以是行输出数据总线820的一部分。基于实施方案,行输出数据总线820还可以包含Wx,y和控制位。例如,PE 800的行输出数据总线820可以是PE 800的右侧的相邻PE的行输入数据总线816。
权重寄存器806可以被配置成缓存PE 800的权重值Wx,y。在一些实施例中,权重值Wx,y可以包含8位。权重值Wx,y可以缓存在单个8位权重寄存器806中或者缓存在两个8位权重寄存器806中。例如,可以将第一8位权重寄存器806值馈送到第一乘法器808并且可以将第二8位权重寄存器806值馈送到第二乘法器812。因此,根据一些实施例,使用每个PE的单个权重值执行两个算术计算可以为阵列提供整体减少的存储区域。
第一乘法器808可以被配置成在Wx,y值与第一行输入数据XIN1之间执行乘法运算以生成第一中间结果,可以将所述第一中间结果馈送到第一加法器810。第一加法器810还可以被配置成接收第一列输入数据YIN1,并且在第一列输入数据YIN1与第一中间结果之间执行加法运算以生成由第一列输出数据YOUT1表示的部分总和。在一些实施方案中,第一乘法器808可以将8位Wx,y值与8位第一行输入数据XIN1相乘以生成16位乘法结果。第一加法器810可以将来自第一乘法器808的16位乘法结果与16位第一列输入数据YIN1相加,以生成16位部分总和与一个或多个任选的溢出位,所述16位部分总和与所述一个或多个任选的溢出位一起由第一列输出数据YOUT1表示。
第二乘法器812可以被配置成在Wx,y值与第二行输入数据XIN2之间执行乘法运算以生成第二中间结果,可以将所述第二中间结果馈送到第二加法器814。第二加法器814还可以被配置成接收第二列输入数据YIN2,并且在第二列输入数据YIN2与第二中间结果之间执行加法运算以生成由第二列输出数据YOUT2表示的部分总和。在一些实施方案中,第二乘法器812可以将8位Wx,y值与8位第二行输入数据XIN2相乘以生成16位乘法结果。第二加法器814可以将来自第二乘法器812的16位乘法结果与16位第二列输入数据YIN2相加,以生成16位部分总和与一个或多个任选的溢出位,所述16位部分总和与所述一个或多个任选的溢出位一起由第二列输出数据YOUT2表示。
在某些实施例中,第一乘法器808和第二乘法器812可以并发执行相应的乘法运算,以同时或在某个时间段内生成第一中间结果和第二中间结果。例如,第一乘法器808和第二乘法器812可以在时间段“t1”内并行执行相应的乘法运算。类似地,第一加法器810和第二加法器814可以并发执行相应的加法运算,以同时或在某个时间段内生成第一列输出数据YOUT1和第二列输出数据YOUT2。例如,第一加法器810和第二加法器814可以在时间段“t2”内并行执行相应的加法运算。时间段“t1”和“t2”可以包含相同的值或不同的值。
PE 800可以通过第二接口并发接收第一列输入数据YIN1和第二列输入数据YIN2。例如,在一些实施方案中,第一列输入数据YIN1和第二列输入数据YIN2可以是列输入数据总线818的一部分。列输入数据总线818可以是外部输入数据总线或来自位于同一列中的PE 800正上方的相邻PE的列输出数据总线。来自位于同一列中的正上方的相邻PE的列输出数据总线可以包含第一部分总和与第二部分总和。第一部分总和可以表示由所述列内的PE中的每个PE直到所述先前PE的第一乘法器生成的所有乘法结果的总和。第二部分总和可以表示由所述列内的PE中的每个PE直到所述先前PE的第二乘法器生成的所有乘法结果的总和。应理解,列输入数据总线818可以包含其它相关位,为简单起见,此处不再讨论。例如,列输入数据总线818还可以包含一个或多个溢出位、操作码等。在一些实施例中,列输入数据总线818可以用于将Wx,y值加载在权重寄存器806中。因此,某些实施例可以允许使用相应的列输入数据总线818针对脉动阵列的给定行中的所有PE并行加载Wx,y值。可以使用分配器(未示出)将列输入数据总线818分成第一列输入数据YIN1和第二列输入数据YIN2。在一些实施方案中,可以缓冲第一列输入数据YIN1和第二列输入数据YIN2并且可以向第一加法器810和第二加法器814提供相应的所缓冲的输出。
在一些实施方案中,第一列输出数据YOUT1和第二列输出数据YOUT2可以是列输出数据总线822的一部分。列输出数据总线822可以是外部输出数据总线或者到位于同一列中的PE 800正下方的另一个相邻PE的列输入数据总线。例如,列输出数据总线822可以包含第一列输入数据YIN1、第二列输入数据YIN2和其它相关位(例如,溢出、操作码等),为简单起见,此处不再讨论。
在一些实施例中,对于浮点数据类型,在分别馈送到第一加法器810和第二加法器814之前,第一中间结果和第二中间结果可以四舍五入到某一位数。此外,可以对由第一加法器810和第二加法器814生成的部分总和执行另外的四舍五入。在某些其它实施例中,可以将乘法运算和加法运算融合或整合在一起,以使用融合乘法器加法器或融合乘法器累加器利用单次四舍五入执行单步乘加运算,而不是以不同的步骤执行乘法运算和加法运算。因此,可以使用融合乘法器加法器提高浮点算术运算的速度和精度。例如,如图8所示,可以使用第一融合乘法器加法器(FMA)824代替第一乘法器808和第一加法器810来执行第一乘法和加法运算。类似地,可以使用第二FMA 826代替第二乘法器812和第二加法器814来执行第二乘法和加法运算。第一FMA 824和第二FMA 826可以用单次四舍五入执行其相应的单步乘加运算。
在一些实施例中,代替第一乘法器808和第二乘法器812,可以使用能够执行第一乘法运算和第二乘法运算的单个乘法器。例如,可以使用单个16位乘法器代替两个8位乘法器或四个4位乘法器同时生成两个或四个乘法结果。类似地,在一些实施方案中,代替第一加法器810和第二加法器814,可以使用能够执行第一加法运算和第二加法运算的单个加法器。例如,可以使用单个16位加法器代替两个8位加法器或四个4位加法器同时生成两个或四个总和。因此,由同一PE并发处理输入数据集的多个数据元素可以充分利用脉动阵列的计算能力。
图9A、图9B、图9C和图9D示出了根据所公开的技术的某些实施例的通过脉动阵列的循环计算。
如图9A所示,示例性脉动阵列900可以包括3×3个PE。如参考图7所讨论的,脉动阵列900可以是计算引擎604的一部分。脉动阵列900中的每个PE可以类似于如参考图8所讨论的PE 800。为简单起见,此处可以假设已经将权重加载到脉动阵列900的所有PE中。权重可能已经按顺序、并行或者使用其组合加载。应注意,在所公开的技术范围内,加载权重的其它方法也是可能的。
阵列900中的每一行可以被配置成处理不同的输入数据集。例如,包括PE 00、PE01和PE 02的第一行可以被配置成处理indataset0。包括PE 10、PE 11和PE 12的第二行可以被配置成处理indataset1。包括PE 20、PE 21和PE 22的第三行可以被配置成处理indataset2。在一些实施例中,indataset0、indataset1和indataset2可以对应于三个通道(例如,红色、绿色和蓝色),如参考图5A所讨论(例如,C等于三)。可能已经通过主机接口616从主机装置接收到indataset0、indataset1和indataset2,并将其存储在状态缓冲器608中。返回参考图5B,indataset0可以对应于像素组510,indataset1可以对应于像素组512并且indataset2可以对应于像素组514。例如,indataset0可以包含数据元素[X0 0,0,X0 0,1,X0 0,2,X0 1,0,X0 1,1,X0 1,2,X0 2,0,X0 2,1,X0 2,2],indataset1可以包含数据元素[X1 0,0,X1 0,1,X1 0,2,X1 1,0,X1 1,1,X1 1,2,X1 2,0,X1 2,1,X1 2,2]并且indataset2可以包含数据元素[X2 0,0,X2 0,1,X2 0,2,X2 1,0,X2 1,1,X2 1,2,X2 2,0,X2 2,1,X2 2,2]。
根据实施例,可以使用第一接口(例如,行输入数据总线816)每个周期将两个外部顺序输入元素同时馈送到PE 00。例如,如图9A所示,在第一周期中,可以将来自indataset0的第一输入元素X0 0,0和第二输入元素X0 0,1馈送到PE 00。在一些实例中,如参考图8所讨论的,第一输入元素X0 0,0可以类似于XIN1并且第二输入元素X0 0,1可以类似于XIN2。
如图9B所示,在第一周期中,PE 00可以对所述两个外部顺序输入元素并发执行第一算术运算。并发执行算术运算可能意味着使用两个不同的电路同时或并行执行两个算术运算。例如,在一个实施例中,PE 00可以使用第一乘法器808执行X0 0,0与W0,0 0,0的乘法运算,以生成第一中间结果(X0 0,0×W0,0 0,0),并且使用第二乘法器812执行X0 0,1与W0,0 0,0的乘法运算,以生成第二中间结果(X0 0,1×W0,0 0,0)。第一加法器810可以将第一中间结果(X0 0,0×W0 ,0 0,0)与YIN1相加以生成YOUT1。第二加法器814可以将第二中间结果(X0 0,1×W0,0 0,0)与YIN2相加以生成YOUT2。YIN1和YIN2可以由PE 00使用第二接口(例如,列输入数据总线818)接收。由于PE00对应于阵列900的顶行,因此YIN1和YIN2可以为零。因此,PE 00可以向PE 10提供部分总和(X0 0,0×W0,0 0,0)作为YOUT1并且提供部分总和(X0 0,1×W0,0 0,0)作为YOUT2。PE 00还可以向PE 01提供X0 0,0和X0 0,1作为XOUT1和XOUT2。
在第二周期中,可以将接下来的两个外部顺序输入元素,例如,X0 0,2和X0 1,0同时馈送到PE 00。另外,X0 0,0和X0 0,1可以分别作为XIN1和XIN2馈送到PE 01。此外,可以向PE 10馈送(X0 0,0×W0,0 0,0)作为YIN1并且馈送(X0 0,1×W0,0 0,0)作为YIN2。在第二周期中,X1 0,0和X1 0,1也可以分别作为XIN1和XIN2同时馈送到PE 10。PE 00、PE 10和PE01可以并行执行算术计算,如图9C所示。
如图9C所示,在下一周期中,接下来的两个外部顺序输入元素,例如,X0 1,1和X0 1,2可以同时馈送到PE 00。另外,可以将X1 0,2和X1 1,0馈送到PE 10,并且可以将X2 0,0和X2 0,1同时馈送到PE 20。PE 00可以向PE 10提供部分总和(X0 0,2×W0,0 0,0)作为YOUT1并且提供部分总和(X0 1,0×W0,0)作为YOUT2。PE 00还可以向PE 01提供X0 0,2和X0 1,0作为XOUT1和XOUT2。PE 01可以向PE 11提供部分总和(X0 0,0×W0,0 0,1)作为YOUT1并且提供部分总和(X0 0,1×W0,0 0,1)作为YOUT2。PE01还可以向PE 02提供X0 0,0和X0 0,1作为XOUT1和XOUT2。
在第二周期中,PE 10可以使用第一乘法器808将X1 0,0与W1,0 0,0相乘,以生成第一中间结果(X1 0,0×W1,0 0,0),并且使用第二乘法器812将X1 0,1与W1,0 0,0相乘,以生成第二中间结果(X1 0,1×W1,0 0,0)。PE 10可以进一步使用第一加法器810将第一中间结果(X1 0,0×W1,0 0,0)与由PE 00提供的部分总和(X0 0,0×W0,0 0,0)相加,以生成部分总和((X0 0,0×W0,0 0,0)+(X1 0,0×W1 ,0 0,0))。PE 20还可以使用第二加法器812将第二中间结果(X1 0,1×W1,0 0,0)与由PE 00提供的部分总和(X0 0,1×W0,0 0,0)相加,以生成部分总和((X0 0,1×W0,0 0,0)+(X1 0,1×W1,0 0,0))。可以将由PE 10生成的部分总和作为YOUT1和YOUT2提供给PE 20。
如图9D所示,在下一周期中,可以将接下来的两个外部顺序输入元素,例如,X0 2,0和X0 2,1同时馈送到PE 00。另外,可以将X1 1,1和X1 1,2馈送到PE 10,并且可以将X2 0,2和X2 1,0同时馈送到PE 20。PE 00可以向PE 10提供部分总和(X0,4×W0,0)作为YOUT1并且提供部分总和(X0,5×W0,0)作为YOUT2。PE 00还可以向PE 01提供X0 1,1和X0 1,2分别作为XOUT1和XOUT2。PE 01可以向PE 11提供部分总和(X0 0,2×W0,0 0,1)作为YOUT1并且提供部分总和(X0 1,0×W0,0 0,1)作为YOUT2。PE 01还可以向PE 02提供X0 0,2和X0 1,0作为XOUT1和XOUT2。PE 02可以向PE 12提供部分总和(X0,0×W0,2)作为YOUT1并且提供部分总和(X0,1×W0,2)作为YOUT2。
PE 10可以并行使用第一乘法器808将X1 0,2与W1,0 0,0相乘,以生成第一中间结果(X1 0,2×W1,0 0,0),并且使用第二乘法器812将X1 1,0与W1,0 0,0相乘,以生成第二中间结果(X1 1,0×W1,0 0,0)。PE 10可以进一步使用第一加法器810将第一中间结果(X1,2×W1,0)与由PE 00提供的部分总和(X0 0,2×W0,0 0,0)相加,以生成部分总和((X0 0,2×W0,0 0,0)+(X1 0,2×W1,0 0,0))。PE 10还可以使用第二加法器812将第二中间结果(X1 1,0×W1,0 0,0)与由PE 00提供的部分总和(X0 1,0×W0,0 0,0)相加,以生成部分总和((X0 1,0×W0,0 0,0)+(X1 1,0×W1,0 0,0))。可以将由PE 10生成的部分总和作为YOUT1和YOUT2提供给PE 20。
PE 11可以并行使用第一乘法器808将X1 0,0与W1,0 0,1相乘,以生成第一中间结果(X1 0,0×W1,0 0,1),并且使用第二乘法器812将X1 0,1与W1,0 0,1相乘,以生成第二中间结果(X1 0,1×W1,0 0,1)。PE 11可以进一步使用第一加法器810将第一中间结果(X1 0,0×W1,0 0,1)与由PE 01提供的部分总和(X0 0,0×W0,0 0,1)相加,以生成部分总和((X0 0,0×W0,0 0,1)+(X1 0,0×W1,0 0,1))。PE11还可以使用第二加法器812将第二中间结果(X1 0,1×W1,0 0,1)与由PE 01提供的部分总和(X0 0,1×W0,0 0,1)相加,以生成部分总和((X0 0,1×W0,0 0,1)+(X1 0,1×W1,0 0,1))。可以将由PE 11生成的部分总和作为YOUT1和YOUT2提供给PE 21。
PE 20可以并行使用第一乘法器808将X2 0,0与W2,0 0,0相乘,以生成第一中间结果(X2 0,0×W2,0 0,0),并且使用第二乘法器812将X2 0,1与W2,0 0,0相乘,以生成第二中间结果(X2 0,1×W2,0 0,0)。PE 20可以进一步使用第一加法器810将第一中间结果(X2 0,0×W2,0 0,0)与由PE 10提供的部分总和((X0 0,0×W0,0 0,0)+(X1 0,0×W1,0 0,0))相加,以生成部分总和(((X0 0,0×W0,0 0,0)+(X1 0,0×W1,0 0,0))+(X2 0,0×W2,0 0,0))。PE 20还可以使用第二加法器812将第二中间结果(X2 0,1×W2,0 0,0)与由PE 10提供的部分总和((X0 0,1×W0,0 0,0)+(X1 0,1×W1,0 0,0))相加,以生成部分总和(((X0 0,1×W0,0 0,0)+(X1 0,1×W1,0 0,0))+(X2 0,1×W2,0 0,0))。可以将由PE 20生成的部分总和提供给输出缓冲器610。当水平传播每个输入数据集的剩余数据元素时,输出缓冲器610可以继续累积所有列的部分总和。在一定数量的周期之后,阵列900的列中的每列可以提供同时对应于两个输出数据元素的两个部分总和。
应注意,尽管已经使用第一乘法器808和第一加法器810生成部分总和YOUT1以及使用第二乘法器812和第二加法器812生成部分总和YOUT2来讨论了图9A-9D,但是在不同的实施例中,可以使用第一FMA 824代替第一乘法器808和第一加法器810来生成部分总和YOUT1,并且可以使用第二FMA 826代替第二乘法器812和第二加法器812来生成部分总和YOUT2。
当indataset0的最后一个数据元素(例如,X0 2,2)通过PE 00传播时,可以将另一组输入数据集(例如,以步幅“D”移位)可以馈送到PE 00,以用下一权重集进行缩放。可以由计算控制器606向状态缓冲器608提供存储在输出缓冲器610中的输出数据元素以用作相应列的第一Yin元素和第二Yin元素。因此,某些实施例可以通过提供对应于每列输出数据集的两个或更多个输出数据元素来提高脉动阵列的性能。
图10示出了根据所公开的技术的某些实施例的由PE执行的用于有效利用脉动阵列的方法1000。例如,方法1000可以由如参考图8所讨论的PE 800执行。
在步骤1002中,处理单元(PE)的二维阵列中的PE可以并发接收第一Xin元素和第二Xin元素。阵列的PE可以布置成行和列。可以将阵列的每行映射到相应的输入数据集并且可以将每列映射到相应的输出数据集。第一Xin元素和第二Xin元素可以是给定行的输入数据集中的顺序元素。返回参考图7,阵列可以是计算引擎604并且PE可以是PE 00。PE 00可以接收包括Xin1元素和Xin2元素的输入数据集indataset0。例如,如图9A所示,Xin1可以是X0,0并且Xin2可以是X0,1。在接收Xin1元素和Xin2元素之前,PE 00可以将权重W0,0缓存在权重寄存器806中。如参考图6所讨论的,计算引擎604可能已经被配置成由计算控制器606基于输入数据集的大小、计算引擎604中的PE的数量、PE的大小和数据类型在优化模式下操作。
在步骤1004中,PE可以针对给定列并发接收第一Yin元素和第二Yin元素。在一些实施例中,由于PE 00属于阵列的最顶行,因此可以由计算控制器606提供第一Yin元素和第二Yin元素的值。例如,最顶层阵列的第一Yin元素和第二Yin元素可以包含来自使用不同权重集的先前计算的第一Yout元素和第二Yout元素的存储值。
在步骤1006中,PE可以对第一Xin元素与权重值并发执行乘法运算以生成第一乘法结果,并且对第二Xin元素与权重值并发执行乘法运算以生成第二乘法结果。返回参考图8,在一个实施例中,PE 00可以使用第一乘法器808和第二乘法器812并发执行乘法运算,以生成第一乘法结果(例如,X0 0,0×W0,0 0,0)和第二乘法结果(例如,X0 0,1×W0,0 0,0)。
在步骤1008中,PE可以对第一乘法结果与第一Yin元素并发执行加法运算以生成第一Yout元素,并且对第二乘法结果与第二Yin元素并发执行加法运算以生成第二Yout元素。返回参考图8,PE 00可以使用第一加法器810和第二加法器814并发执行加法运算,以生成第一Yout元素(例如,X0 0,0×W0,0 0,0)和第二Yout元素(例如,X0 0,1×W0,0 0,0)。第一Yout元素和第二Yout元素可以作为第一Yin元素和第二Yin元素提供给PE 10。
在另一个实施例中,可以通过使用融合乘加操作在单个步骤中执行步骤1006和1008。例如,如参考图8所讨论的,可以使用第一FMA 824代替第一乘法器808和第一加法器810生成第一Yout元素,并且可以使用第二FMA 826代替第二乘法器812和第二加法器812生成第二Yout元素。因此,在某些实施例中,与使用单独的乘法器和加法器相比,并发使用第一FMA 824和第二FMA 826对两个顺序Xin元素与相应的Yin元素执行乘加运算可以提供更快和更准确的结果。第一Yout元素和第二Yout元素可以作为第一Yin元素和第二Yin元素提供给PE 10。
如先前所述,来自阵列中最后一行的部分总和可以对应于与给定列的输出数据集相对应的两个输出数据元素。例如,返回参考图7,可以将每列的输出数据集存储在输出缓冲器610中。计算引擎606可以将来自输出缓冲器610的输出数据集提供给状态缓冲器608以用作到PE 00的第一Yin元素和第二Yin元素以进行下一波计算。因此,并行处理多个Xin元素以生成对应于输出数据集的多个输出数据元素可以提高脉动阵列的性能。
图11展示了计算装置1100的示例。计算装置1100的功能和/或若干个组件可以不受限制地与本公开中其它地方公开的其它实施例一起使用,而不受限制。计算装置1100可以执行计算以促进任务的处理。作为说明性示例,计算装置1100可以是多租户计算服务系统中的服务器的一部分。可以根据要求将计算装置1100的各种硬件和软件资源(例如,与图像识别服务提供相关联的硬件和软件资源)分配给客户端。
在一个示例中,计算装置1100可以包含处理逻辑1102、总线接口1104、存储器1106和网络接口1108。这些组件可以是硬件模块、软件模块或硬件和软件的组合。在某些实例中,组件可以在不偏离本公开的范围的情况下与模块或引擎互换使用。计算装置1100可以包含此处未展示的另外的组件。在一些实施方案中,计算装置1100可以包含更少的组件。在一些实施方案中,组件中的一个或多个组件可以组合成一个模块。组件中的一个或多个组件可以通过通信信道1110彼此通信。通信信道1110可以包含一个或多个总线、网格、矩阵、构造、这些通信信道的组合或一些其它合适的通信信道。
处理逻辑1102可以包含一个或多个集成电路,其可以包含专用集成电路(ASIC)、现场可编程门阵列(FPGA)、片上系统(SoC)、网络处理单元(NPU)、被配置成执行指令的处理器或被配置成执行逻辑算术和浮点运算的任何其它电路系统。可以包含在处理逻辑1102中的处理器的示例可以包含由等开发的处理器。在某些实施方案中,处理器可以包含多个处理核心,其中每个处理核心可以被配置成独立于其它处理核心来执行指令。此外,在某些实施方案中,每个处理器或处理核心可以实施在同一处理器或处理核心上执行指令的多个处理线程,同时保持多个处理线程之间的逻辑分离。在处理器或处理核心上执行的此类处理线程可以作为单独的逻辑处理器或处理核心暴露于软件。在一些实施方案中,多个处理器、处理核心或在同一核心上执行的处理线程可以共享某些资源,例如,总线、1级(L1)缓存和/或2级(L2)缓存。可以将由处理逻辑1102执行的指令例如以计算机程序的形式存储在计算机可读存储介质上。计算机可读存储介质可以是非暂时性的。在一些情况下,计算机可读介质可以是存储器1106的一部分。处理逻辑1102还可以包含用于执行人工神经网络计算的硬件电路系统,所述硬件电路系统包含例如神经网络处理器602等。
可以向客户端授予对处理逻辑1102的访问,以提供由客户端请求的个人助理服务。例如,计算装置1100可以托管虚拟机,在所述虚拟机上可以执行图像识别软件应用程序。图像识别软件应用程序在被执行时可以访问处理逻辑1102,以预测例如图像中包含的对象。作为另一个示例,对处理逻辑1102的访问也可以被授权作为裸机实例的一部分,在裸机实例中,在客户端装置(例如,远程计算机、智能手机等)上执行的图像识别软件应用程序可以直接访问处理逻辑1102来执行图像的识别。
存储器1106可以包含易失性或非易失性类型的存储器,或者易失性和非易失性类型的存储器两者。存储器1106可以例如包含随机存取存储器(RAM)、只读存储器(ROM)、电可擦可编程只读存储器(EEPROM)、闪存和/或一些其它合适的存储介质。在一些情况下,存储器1106中的一些或全部存储器可以位于计算装备1100内部,而在其它情况下,存储器中的一些或全部存储器可以位于计算装置1100外部。存储器1106可以存储包括可执行指令的操作系统,所述可执行指令当由处理逻辑1102执行时提供用于执行为计算装置1100提供网络功能的指令的执行环境。存储器1106还可以存储例如用于执行人工神经网络计算的软件应用程序。例如,存储器1106可以存储与上述等式1-19的计算相关的软件例程。在处理逻辑1102呈FPGA形式的情况下,存储器1106可以存储表示处理逻辑1102的各种逻辑电路组件的网表数据。
总线接口1104可以实现通过外部通信介质与外部实体如主机装置和/或计算系统中的其它组件进行通信。总线接口1104可以包含用于连接到电缆、插座、端口或到外部通信介质的其它连接的物理接口。总线接口1104可以进一步包含用于管理传入和传出交易的硬件和/或软件。总线接口1104可以实施本地总线协议,如基于外围组件互连(PCI)的协议、非易失性存储器快速(NVMe)、高级主机控制器接口(AHCI)、小型计算机系统接口(SCSI)、串行连接的SCSI(SAS)、串行AT附件(SATA)、并行ATA(PATA)、一些其它标准总线协议或专有总线协议。总线接口1104可以包含用于这些总线协议中的任何总线协议的物理层,包含连接器、电源管理和错误处理等。在一些实施方案中,计算装置1100可以包含用于与多个外部实体通信的多个总线接口模块。这些多个总线接口模块可以实施相同的本地总线协议、不同的本地总线协议或者相同和不同总线协议的组合。
网络接口1108可以包含用于与网络通信的硬件和/或软件。此网络接口1108可以包含例如用于有线连接到网络的物理连接器或物理端口,和/或用于无线通信到网络的天线。网络接口1108可以进一步包含被配置成实施网络协议栈的硬件和/或软件。网络接口1108可以使用网络协议与网络通信,所述网络协议例如TCP/IP、无限带宽、RoCE、电气和电子工程师协会(IEEE)802.11无线协议、用户数据报协议(UDP)、异步传输模式(ATM)、令牌环、帧中继、高级数据链路控制(HDLC)、光纤分布式数据接口(FDDI)和/或点对点协议(PPP)等。在一些实施方案中,计算装置1100可以包含多个网络接口模块,每个网络接口模块被配置成与不同的网络通信。例如,在这些实施方案中,计算装置1100可以包含用于与有线以太网、无线802.11网络、蜂窝网络、无限带宽网络等通信的网络接口模块。在一些实施例中,计算装置1100可以通过网络接口1108从服务器接收一组参数,如用于生成遗忘门因子、输入因子、输出因子等的前述权重向量。
上述计算装置1100的各种组件和模块可以实施为分立组件、片上系统(SoC)、ASIC、NPU、FPGA或其任何组合。在一些实施例中,SoC或其它组件可以通信地耦合到另一个计算系统以提供各种服务,如流量监测、流量整形、计算等。在所述技术的一些实施例中,SoC或其它组件可以包含如本文公开的多个子系统。
本文描述的模块可以是软件模块、硬件模块或其合适的组合。如果模块是软件模块,则模块可以体现在非暂时性计算机可读介质上并且由本文描述的计算机系统中的任何计算机系统中的处理器处理。应注意,所描述的过程和架构可以在任何用户交互之前实时执行或者以异步模式执行。可以按照图11中建议的方式配置模块,和/或本文描述的功能可以由作为单独的模块存在的一个或多个模块提供,和/或本文描述的模块功能可以遍布于多个模块之上。
因此,应当从说明性而非限制性意义上看待说明书和附图。然而,显而易见的是,在不脱离权利要求中阐述的本公开的更广泛的精神和范围的情况下,可以对其进行各种修改和改变。一些示例实施例由以下条款描述:
1.一种用于神经网络计算的电路,其包括:
二维阵列,所述二维阵列包括布置成行和列的处理元件(PE),其中每行映射到相应的输入数据集,并且每列映射到相应的输出数据集,每个输入数据集包括相应的Xin元素,每个PE包括:
存储器,所述存储器用于为给定PE缓存权重值;
第一输入端口,所述第一输入端口用于接收给定行的输入数据集的第一Xin元素;
第二输入端口,所述第二输入端口用于接收所述给定行的所述输入数据集的第二Xin元素,所述第二Xin元素与所述第一Xin元素是顺序的;
第三输入端口,所述第三输入端口用于接收给定列的第一Yin元素;
第四输入端口,所述第四输入端口用于接收所述给定列的第二Yin元素;
第一乘法器,所述第一乘法器被配置成将所述第一Xin元素与所述权重值相乘以生成第一乘法结果;
第一加法器,所述第一加法器被配置成将所述第一乘法结果与所述第一Yin元素相加以生成第一Yout元素;
第二乘法器,所述第二乘法器被配置成与所述第一乘法器并发将所述第二Xin元素与所述权重值相乘以生成第二乘法结果;以及
第二加法器,所述第二加法器被配置成与所述第一加法器并发将所述第二乘法结果与所述第二Yin元素相加以生成第二Yout元素,
其中所述阵列中的最后一行的所述第一Yout元素和所述第二Yout元素对应于所述给定列的输出数据集。
2.根据条款1所述的电路,其中所述第一Xin元素和所述第二Xin元素分别对应于输入特征图的第一特征图元素和第二特征图元素。
3.根据任一前述条款所述的电路,其中所述第一输入端口和所述第二输入端口耦合到行输入数据总线。
4.根据任一前述条款所述的电路,其中所述第三输入端口和所述第四输入端口耦合到列输入数据总线。
5.一种设备,其包括:
处理元件(PE),所述PE用于神经网络计算,所述PE被配置成:
通过第一接口并发接收两个顺序Xin元素,所述两个顺序Xin元素包括第一Xin元素和第二Xin元素;
通过第二接口并发接收两个Yin元素,所述两个Yin元素包括第一Yin元素和第二Yin元素;
对所述第一Xin元素和权重值并发执行第一算术运算以生成第一中间结果,并且对所述第二Xin元素和所述权重值并发执行所述第一算术运算以生成第二中间结果;并且
对所述第一中间结果和所述第一Yin元素并发执行第二算术运算以生成第一Yout元素,并且对所述第二中间结果和所述第二Yin元素并发执行所述第二算术运算以生成第二Yout元素。
6.根据条款5所述的设备,其中所述第一算术运算包含乘法运算,并且其中所述第一中间结果是使用第一乘法器生成的,并且所述第二中间结果是使用第二乘法器生成的。
7.根据条款6所述的设备,其中所述第二算术运算包含加法运算,并且其中所述第一Yout元素是使用第一加法器生成的,并且所述第二Yout元素是使用第二加法器生成的。
8.根据条款5到7中任一项所述的设备,其中所述第一算术运算包含乘法运算,所述第二算术运算包含加法运算,并且其中所述第一算术运算和所述第二算术运算是使用融合乘法器加法器在单个步骤中执行。
9.根据条款5到8中任一项所述的设备,其中所述PE是布置成行和列的二维阵列的多个PE之一,其中每行映射到相应的输入数据集,并且每列映射到相应的输出数据集。
10.根据条款9所述的设备,其中所述第一接口与所述阵列的行相关联,并且其中所述PE的所述第一Xin元素和第二Xin元素对应于与所述行相关联的输入数据集。
11.根据条款9所述的设备,其中所述第二接口与所述阵列的列相关联,并且其中所述PE的所述第一Yout元素和所述第二Yout元素对应于与所述阵列的最后一行的列相关联的输出数据集。
12.根据条款10所述的设备,其进一步包括计算控制器,所述计算控制器耦合到所述阵列,所述计算控制器被配置成基于输入数据类型和所述输入数据集的大小启用所述阵列的操作模式。
13.根据条款5到12中任一项所述的设备,其中所述权重值是使用所述第一接口或所述第二接口加载在所述PE中。
14.根据条款9到13中任一项所述的设备,其进一步包括状态缓冲器,其中每行的第一PE通信地耦合到所述状态缓冲器,并且其中所述状态缓冲器被配置成存储所述阵列的每行的所述相应的输入数据集。
15.根据条款14所述的设备,其中所述阵列的每行的所述相应的输入数据集是由所述状态缓冲器通过主机接口从主机装置接收的。
16.根据条款9到15中任一项所述的设备,其进一步包括输出缓冲器,其中每列的最后一个PE通信地耦合到所述输出缓冲器,其中所述输出缓冲器被配置成存储与所述最后一行中的每列相对应的所述第一Yout元素和所述第二Yout元素。
17.一种方法,其包括:
由处理元件(PE)的二维阵列中的PE并发接收第一Xin元素和第二Xin元素,所述阵列的所述PE布置成行和列,其中每行映射到相应的输入数据集,并且每列映射到相应的输出数据集,并且其中所述第一Xin元素和所述第二Xin元素是给定行的输入数据集中的顺序元素;
由所述PE针对给定列并发接收第一Yin元素和第二Yin元素;
由所述PE对所述第一Xin元素与权重值并发执行乘法运算以生成第一乘法结果,并且对所述第二Xin元素与所述权重值并发执行所述乘法运算以生成第二乘法结果;以及
由所述PE对所述第一乘法结果与所述第一Yin元素并发执行加法运算以生成第一Yout元素,并且对所述第二乘法结果与所述第二Yin元素并发执行所述加法运算以生成第二Yout元素,其中所述阵列中的最后一行的所述第一Yout元素和所述第二Yout元素对应于所述给定列的输出数据集。
18.根据条款17所述的方法,所述方法进一步包括:
在接收所述第一Xin元素和所述第二Xin元素之前,接收所述给定PE的所述权重值;以及
将所述权重值存储在寄存器中。
19.根据条款17或18所述的方法,其中所述PE是第一PE,所述给定行是第一行,并且所述给定列是第一列,所述方法进一步包括:
向所述阵列的第二列和所述第一行中的第二PE并发提供所述第一Xin元素和所述第二Xin元素。
20.根据条款17到19中任一项所述的方法,其中所述PE是第一PE并且所述给定行是第一行,所述方法进一步包括:
向所述阵列的所述第一列和第二行中的第二PE并发提供所述第一Yout元素和所述第二Yout元素作为所述第一Xin元素和所述第二Xin元素。
其它变型处于本公开的精神内。因此,虽然所公开的技术易于进行各种修改和替代构造,但是其某些展示的实施例在附图中示出并且已经在上文中进行了详细描述。然而,应理解的是,并非旨在将本公开限制于所公开的一种或多种特定形式,而是相反,其目的在于覆盖落在本公开的精神和范围内的所有修改、替代构造和等效物,如所附权利要求所限定。
除非本文中另有指示或明显与上下文相矛盾,否则在描述所公开的实施例的上下文中(特别是在以下权利要求的上下文中)使用的术语“一个/一种(a/an)”和“所述(the)”以及类似的指代词应被解释为涵盖单数和复数两者。术语“包括”、“具有”、“包含”以及“含有”应被解释为开放式术语(即,意指“包含但不限于”),除非另有指明。术语“连接”应被解释为部分或全部地包含在内、附接到或接合在一起,甚至是在存在中间物的情况下也是如此。除非本文中另外指明,否则本文中对值范围的叙述仅旨在充当用于单独地提及落入所述范围内的每个单独值的速记方法,并且每个单独值都结合到本说明书中,如同在本文中单独叙述一样。除非本文中另外指明或明显与上下文相矛盾,否则本文所述的所有方法均可以以任何合适的次序进行。除非另外声明,否则本文提供的任何和所有示例或示范性语言(例如,“如”)的使用仅旨在更好地说明本公开,而不对本公开的范围构成限制。本说明书中的任何语言都不应被解释为将任何未要求保护的元件指示为实践本公开所必须的。
除非另有明确说明,否则如短语“X、Y或Z中的至少一个”等析取语言旨在在通常用于呈现项目、术语等的上下文中进行理解,其可以为X、Y或Z或其任意组合(例如,X、Y和/或Z)。因此,此类析取语言通常不旨在并且不应该暗示某些实施例要求X中的至少一个、Y中的至少一个或Z中的至少一个各自都存在。
本文中描述了本公开的各个实施例,包含诸位发明人已知的用于实施本公开的最佳模式。在阅读前述描述后,对本领域的普通技术人员而言,那些实施例的变化可能变得显而易见。诸位发明人预期技术人员在适当时采用这些变型,并且诸位发明人旨在使本公开以与本文具体描述的方式不同的方式来进行实践。因此,在适用法律允许的情况下,本公开包含所附权利要求书中所述的主题的所有修改和等效物。此外,本公开涵盖上述元件在其所有可能的变化的情况下的任意组合,除非本文另有说明或者以其它方式与上下文明显矛盾。
Claims (15)
1.一种设备,其包括:
处理元件(PE),所述PE用于神经网络计算,所述PE被配置成:
通过第一接口并发接收两个顺序Xin元素,所述两个顺序Xin元素包括第一Xin元素和第二Xin元素;
通过第二接口并发接收两个Yin元素,所述两个Yin元素包括第一Yin元素和第二Yin元素;
对所述第一Xin元素和权重值并发执行第一算术运算以生成第一中间结果,并且对所述第二Xin元素和所述权重值并发执行所述第一算术运算以生成第二中间结果;以及
对所述第一中间结果和所述第一Yin元素并发执行第二算术运算以生成第一Yout元素,并且对所述第二中间结果和所述第二Yin元素并发执行所述第二算术运算以生成第二Yout元素。
2.根据权利要求1所述的设备,其中所述第一算术运算包含乘法运算,并且其中所述第一中间结果是使用第一乘法器生成的,并且所述第二中间结果是使用第二乘法器生成的。
3.根据权利要求2所述的设备,其中所述第二算术运算包含加法运算,并且其中所述第一Yout元素是使用第一加法器生成的,并且所述第二Yout元素是使用第二加法器生成的。
4.根据任一前述权利要求所述的设备,其中所述第一算术运算包含乘法运算,所述第二算术运算包含加法运算,并且其中所述第一算术运算和所述第二算术运算是使用融合乘法器加法器在单个步骤中执行。
5.根据任一前述权利要求所述的设备,其中所述PE是布置成行和列的二维阵列的多个PE之一,其中每行映射到相应的输入数据集,并且每列映射到相应的输出数据集。
6.根据权利要求5所述的设备,其中所述第一接口与所述阵列的行相关联,并且其中所述PE的所述第一Xin元素和第二Xin元素对应于与所述行相关联的输入数据集。
7.根据权利要求5所述的设备,其中所述第二接口与所述阵列的列相关联,并且其中所述PE的所述第一Yout元素和所述第二Yout元素对应于与所述阵列的最后一行的列相关联的输出数据集。
8.根据权利要求7所述的设备,其进一步包括计算控制器,所述计算控制器耦合到所述阵列,所述计算控制器被配置成基于输入数据类型和所述输入数据集的大小启用所述阵列的操作模式。
9.根据任一前述权利要求所述的设备,其中所述权重值是使用所述第一接口或所述第二接口加载在所述PE中。
10.根据任一前述权利要求所述的设备,其进一步包括状态缓冲器,其中每行的第一PE通信地耦合到所述状态缓冲器,并且其中所述状态缓冲器被配置成存储所述阵列的每行的所述相应的输入数据集。
11.根据权利要求10所述的设备,其中所述阵列的每行的所述相应的输入数据集是由所述状态缓冲器通过主机接口从主机装置接收的。
12.根据任一前述权利要求所述的设备,其进一步包括输出缓冲器,其中每列的最后一个PE通信地耦合到所述输出缓冲器,其中所述输出缓冲器被配置成存储与所述最后一行中的每列相对应的所述第一Yout元素和所述第二Yout元素。
13.一种方法,其包括:
由处理元件(PE)的二维阵列中的PE并发接收第一Xin元素和第二Xin元素,所述阵列的所述PE布置成行和列,其中每行映射到相应的输入数据集,并且每列映射到相应的输出数据集,并且其中所述第一Xin元素和所述第二Xin元素是给定行的输入数据集中的顺序元素;
由所述PE针对给定列并发接收第一Yin元素和第二Yin元素;
由所述PE对所述第一Xin元素与权重值并发执行乘法运算以生成第一乘法结果,并且对所述第二Xin元素与所述权重值并发执行所述乘法运算以生成第二乘法结果;以及
由所述PE对所述第一乘法结果与所述第一Yin元素并发执行加法运算以生成第一Yout元素,并且对所述第二乘法结果与所述第二Yin元素并发执行所述加法运算以生成第二Yout元素,其中所述阵列中的最后一行的所述第一Yout元素和所述第二Yout元素对应于所述给定列的输出数据集。
14.根据权利要求13所述的方法,所述方法进一步包括:
在接收所述第一Xin元素和所述第二Xin元素之前,接收所述给定PE的所述权重值;以及
将所述权重值存储在寄存器中。
15.根据权利要求13或14所述的方法,其中所述PE是第一PE,所述给定行是第一行,并且所述给定列是第一列,所述方法进一步包括:
向所述阵列的第二列和所述第一行中的第二PE并发提供所述第一Xin元素和所述第二Xin元素。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/885,592 | 2018-01-31 | ||
US15/885,592 US10459876B2 (en) | 2018-01-31 | 2018-01-31 | Performing concurrent operations in a processing element |
PCT/US2019/015752 WO2019152451A1 (en) | 2018-01-31 | 2019-01-30 | Improving performance of neural network arrays |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111684473A true CN111684473A (zh) | 2020-09-18 |
CN111684473B CN111684473B (zh) | 2021-10-22 |
Family
ID=67392119
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980010993.1A Active CN111684473B (zh) | 2018-01-31 | 2019-01-30 | 提高神经网络阵列的性能 |
Country Status (5)
Country | Link |
---|---|
US (3) | US10459876B2 (zh) |
EP (1) | EP3746945B1 (zh) |
JP (1) | JP6857286B2 (zh) |
CN (1) | CN111684473B (zh) |
WO (1) | WO2019152451A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114113495A (zh) * | 2021-12-27 | 2022-03-01 | 中国科学技术大学 | 一种高精度低功耗全集成的便携式电子鼻 |
WO2022174733A1 (zh) * | 2021-02-19 | 2022-08-25 | 山东英信计算机技术有限公司 | 一种神经元加速处理方法、装置、设备及可读存储介质 |
Families Citing this family (47)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11741346B2 (en) | 2018-02-08 | 2023-08-29 | Western Digital Technologies, Inc. | Systolic neural network engine with crossover connection optimization |
US11461579B2 (en) | 2018-02-08 | 2022-10-04 | Western Digital Technologies, Inc. | Configurable neural network engine for convolutional filter sizes |
JP7038608B2 (ja) * | 2018-06-15 | 2022-03-18 | ルネサスエレクトロニクス株式会社 | 半導体装置 |
US20190392287A1 (en) | 2018-06-22 | 2019-12-26 | Samsung Electronics Co., Ltd. | Neural processor |
US10956584B1 (en) * | 2018-09-25 | 2021-03-23 | Amazon Technologies, Inc. | Secure data processing |
KR20200107295A (ko) * | 2019-03-07 | 2020-09-16 | 에스케이하이닉스 주식회사 | 시스톨릭 어레이 및 프로세싱 시스템 |
US10929058B2 (en) | 2019-03-25 | 2021-02-23 | Western Digital Technologies, Inc. | Enhanced memory device architecture for machine learning |
US11783176B2 (en) | 2019-03-25 | 2023-10-10 | Western Digital Technologies, Inc. | Enhanced storage device memory architecture for machine learning |
US11169957B2 (en) * | 2019-03-31 | 2021-11-09 | Intel Corporation | Systems and methods for reconfigurable systolic arrays |
US11671111B2 (en) | 2019-04-17 | 2023-06-06 | Samsung Electronics Co., Ltd. | Hardware channel-parallel data compression/decompression |
US11211944B2 (en) | 2019-04-17 | 2021-12-28 | Samsung Electronics Co., Ltd. | Mixed-precision compression with random access |
US11797345B2 (en) * | 2019-04-30 | 2023-10-24 | Prakash C R J Naidu | Hardware accelerator for efficient convolution processing |
US11880760B2 (en) | 2019-05-01 | 2024-01-23 | Samsung Electronics Co., Ltd. | Mixed-precision NPU tile with depth-wise convolution |
US11347517B2 (en) * | 2019-06-20 | 2022-05-31 | International Business Machines Corporation | Reduced precision based programmable and SIMD dataflow architecture |
US11379555B2 (en) * | 2019-06-28 | 2022-07-05 | Amazon Technologies, Inc. | Dilated convolution using systolic array |
US10956776B2 (en) * | 2019-08-06 | 2021-03-23 | Alibaba Group Holding Limited | 2D convolutional accelerator that generates 3D results |
US11842169B1 (en) | 2019-09-25 | 2023-12-12 | Amazon Technologies, Inc. | Systolic multiply delayed accumulate processor architecture |
US11681902B2 (en) | 2019-09-27 | 2023-06-20 | Amazon Technologies, Inc. | Transposed convolution using systolic array |
US11194549B2 (en) * | 2019-10-25 | 2021-12-07 | Arm Limited | Matrix multiplication system, apparatus and method |
US11409838B2 (en) * | 2019-10-29 | 2022-08-09 | Meta Platforms, Inc. | High throughput matrix processor with support for concurrently processing multiple matrices |
US11861485B2 (en) * | 2019-11-22 | 2024-01-02 | Baidu Usa Llc | Data format transform method to improve AI engine MAC utilization |
EP4066170A4 (en) * | 2019-11-26 | 2024-01-17 | Groq, Inc. | LOADING OPERANDS AND DELIVERING RESULTS FROM A MULTI-DIMENSIONAL ARRAY USING ONLY ONE SIDE |
US11816446B2 (en) | 2019-11-27 | 2023-11-14 | Amazon Technologies, Inc. | Systolic array component combining multiple integer and floating-point data types |
US11467806B2 (en) | 2019-11-27 | 2022-10-11 | Amazon Technologies, Inc. | Systolic array including fused multiply accumulate with efficient prenormalization and extended dynamic range |
US11625453B1 (en) * | 2019-12-12 | 2023-04-11 | Amazon Technologies, Inc. | Using shared data bus to support systolic array tiling |
US11714875B2 (en) * | 2019-12-28 | 2023-08-01 | Intel Corporation | Apparatuses, methods, and systems for instructions of a matrix operations accelerator |
CN115803754A (zh) * | 2020-03-10 | 2023-03-14 | 艾普半导公司 | 用于在神经网络中处理数据的硬件架构 |
US11507817B2 (en) | 2020-04-17 | 2022-11-22 | Samsung Electronics Co., Ltd. | System and method for performing computations for deep neural networks |
CN113627600B (zh) * | 2020-05-07 | 2023-12-29 | 合肥君正科技有限公司 | 一种基于卷积神经网络的处理方法及其系统 |
KR20230008768A (ko) * | 2020-06-05 | 2023-01-16 | 주식회사 퓨리오사에이아이 | 뉴럴 네트워크 프로세싱 방법 및 이를 위한 장치 |
US11232062B1 (en) * | 2020-06-29 | 2022-01-25 | Amazon Technologies, Inc. | Parallelism within a systolic array using multiple accumulate busses |
US11308027B1 (en) | 2020-06-29 | 2022-04-19 | Amazon Technologies, Inc. | Multiple accumulate busses in a systolic array |
US11422773B1 (en) | 2020-06-29 | 2022-08-23 | Amazon Technologies, Inc. | Multiple busses within a systolic array processing element |
US11651283B1 (en) | 2020-06-30 | 2023-05-16 | Cadence Design Systems, Inc. | Method, product, and apparatus for a machine learning process using dynamic rearrangement of sparse data and corresponding weights |
US11823018B1 (en) | 2020-06-30 | 2023-11-21 | Cadence Design Systems, Inc. | Method, product, and apparatus for a machine learning process using weight sharing within a systolic array having reduced memory bandwidth |
US11676068B1 (en) | 2020-06-30 | 2023-06-13 | Cadence Design Systems, Inc. | Method, product, and apparatus for a machine learning process leveraging input sparsity on a pixel by pixel basis |
US11615320B1 (en) | 2020-06-30 | 2023-03-28 | Cadence Design Systems, Inc. | Method, product, and apparatus for variable precision weight management for neural networks |
US11687831B1 (en) * | 2020-06-30 | 2023-06-27 | Cadence Design Systems, Inc. | Method, product, and apparatus for a multidimensional processing array for hardware acceleration of convolutional neural network inference |
US20220043769A1 (en) * | 2020-07-21 | 2022-02-10 | Fathom Radiant, PBC | Toroidal Systolic Array Processor for General Matrix Multiplication (GEMM) With Local Dot Product Output Accumulation |
KR20220027500A (ko) * | 2020-08-27 | 2022-03-08 | 에스케이하이닉스 주식회사 | 가속 장치, 데이터 저장 장치, 데이터 처리 시스템 및 가속 장치의 동작방법 |
FR3115136A1 (fr) * | 2020-10-12 | 2022-04-15 | Thales | Procede, et dispositif, de traitement, de donnees a fournir en entree d'un premier registre a decalage d'un circuit electronique neuronal systolique |
KR20220059224A (ko) * | 2020-11-02 | 2022-05-10 | 삼성전자주식회사 | 딥러닝 연산 수행 방법 및 장치 |
US20220188073A1 (en) * | 2020-12-11 | 2022-06-16 | Amazon Technologies, Inc. | Data-type-aware clock-gating |
US20220318013A1 (en) * | 2021-03-25 | 2022-10-06 | Intel Corporation | Supporting 8-bit floating point format operands in a computing architecture |
US11693796B2 (en) * | 2021-05-31 | 2023-07-04 | Arm Limited | Multi-dimensional data path architecture |
US11880682B2 (en) | 2021-06-30 | 2024-01-23 | Amazon Technologies, Inc. | Systolic array with efficient input reduction and extended array performance |
US11507452B1 (en) * | 2021-07-16 | 2022-11-22 | Google Llc | Error checking for systolic array computation |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4575812A (en) * | 1984-05-31 | 1986-03-11 | Motorola, Inc. | X×Y Bit array multiplier/accumulator circuit |
US5065339A (en) * | 1990-05-22 | 1991-11-12 | International Business Machines Corporation | Orthogonal row-column neural processor |
US5291431A (en) * | 1991-06-03 | 1994-03-01 | General Electric Company | Array multiplier adapted for tiled layout by silicon compiler |
US5974437A (en) * | 1996-12-02 | 1999-10-26 | Synopsys, Inc. | Fast array multiplier |
US20160342888A1 (en) * | 2015-05-20 | 2016-11-24 | Nec Laboratories America, Inc. | Memory efficiency for convolutional neural networks operating on graphics processing units |
US20170103299A1 (en) * | 2015-10-07 | 2017-04-13 | Altera Corporation | Method and Apparatus for Implementing Layers on a Convolutional Neural Network Accelerator |
US20180005110A1 (en) * | 2016-06-29 | 2018-01-04 | International Business Machines Corporation | Resistive processing units and neural network training methods |
CN107563952A (zh) * | 2016-07-01 | 2018-01-09 | 谷歌公司 | 可编程二维图像处理器上的卷积神经网络 |
CN107578098A (zh) * | 2017-09-01 | 2018-01-12 | 中国科学院计算技术研究所 | 基于脉动阵列的神经网络处理器 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06266868A (ja) * | 1992-12-24 | 1994-09-22 | Olympus Optical Co Ltd | ニューロン素子 |
ATE465600T1 (de) * | 2004-03-08 | 2010-05-15 | Interactic Holdings Llc | Hochparallele schaltsysteme mit fehlerkorrektur ii |
US10120649B2 (en) * | 2016-07-29 | 2018-11-06 | Microunity Systems Engineering, Inc. | Processor and method for outer product accumulate operations |
US10891538B2 (en) * | 2016-08-11 | 2021-01-12 | Nvidia Corporation | Sparse convolutional neural network accelerator |
US10949736B2 (en) * | 2016-11-03 | 2021-03-16 | Intel Corporation | Flexible neural network accelerator and methods therefor |
US10096134B2 (en) * | 2017-02-01 | 2018-10-09 | Nvidia Corporation | Data compaction and memory bandwidth reduction for sparse neural networks |
US11157287B2 (en) * | 2017-07-24 | 2021-10-26 | Tesla, Inc. | Computational array microprocessor system with variable latency memory access |
-
2018
- 2018-01-31 US US15/885,592 patent/US10459876B2/en active Active
-
2019
- 2019-01-30 JP JP2020541563A patent/JP6857286B2/ja active Active
- 2019-01-30 EP EP19705279.8A patent/EP3746945B1/en active Active
- 2019-01-30 WO PCT/US2019/015752 patent/WO2019152451A1/en unknown
- 2019-01-30 CN CN201980010993.1A patent/CN111684473B/zh active Active
- 2019-10-15 US US16/653,578 patent/US11720523B2/en active Active
-
2023
- 2023-06-15 US US18/210,202 patent/US20230325348A1/en active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4575812A (en) * | 1984-05-31 | 1986-03-11 | Motorola, Inc. | X×Y Bit array multiplier/accumulator circuit |
US5065339A (en) * | 1990-05-22 | 1991-11-12 | International Business Machines Corporation | Orthogonal row-column neural processor |
US5291431A (en) * | 1991-06-03 | 1994-03-01 | General Electric Company | Array multiplier adapted for tiled layout by silicon compiler |
US5974437A (en) * | 1996-12-02 | 1999-10-26 | Synopsys, Inc. | Fast array multiplier |
US20160342888A1 (en) * | 2015-05-20 | 2016-11-24 | Nec Laboratories America, Inc. | Memory efficiency for convolutional neural networks operating on graphics processing units |
US20170103299A1 (en) * | 2015-10-07 | 2017-04-13 | Altera Corporation | Method and Apparatus for Implementing Layers on a Convolutional Neural Network Accelerator |
US20180005110A1 (en) * | 2016-06-29 | 2018-01-04 | International Business Machines Corporation | Resistive processing units and neural network training methods |
CN107563952A (zh) * | 2016-07-01 | 2018-01-09 | 谷歌公司 | 可编程二维图像处理器上的卷积神经网络 |
CN107578098A (zh) * | 2017-09-01 | 2018-01-12 | 中国科学院计算技术研究所 | 基于脉动阵列的神经网络处理器 |
Non-Patent Citations (1)
Title |
---|
SUNG BUM PAN等: "Unified Systolic Arrays for Computation of the DCT/DST/DHT", 《IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMS FOR VIDEO TECHNOLOGY》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022174733A1 (zh) * | 2021-02-19 | 2022-08-25 | 山东英信计算机技术有限公司 | 一种神经元加速处理方法、装置、设备及可读存储介质 |
CN114113495A (zh) * | 2021-12-27 | 2022-03-01 | 中国科学技术大学 | 一种高精度低功耗全集成的便携式电子鼻 |
Also Published As
Publication number | Publication date |
---|---|
US10459876B2 (en) | 2019-10-29 |
US20200050582A1 (en) | 2020-02-13 |
US11720523B2 (en) | 2023-08-08 |
JP2021508895A (ja) | 2021-03-11 |
CN111684473B (zh) | 2021-10-22 |
EP3746945A1 (en) | 2020-12-09 |
WO2019152451A1 (en) | 2019-08-08 |
EP3746945B1 (en) | 2023-08-09 |
US20190236049A1 (en) | 2019-08-01 |
JP6857286B2 (ja) | 2021-04-14 |
US20230325348A1 (en) | 2023-10-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111684473B (zh) | 提高神经网络阵列的性能 | |
US10943167B1 (en) | Restructuring a multi-dimensional array | |
US11797853B2 (en) | Processing for multiple input data sets | |
EP3533003B1 (en) | Exploiting input data sparsity in neural network compute units | |
US11775430B1 (en) | Memory access for multiple circuit components | |
US10394929B2 (en) | Adaptive execution engine for convolution computing systems | |
CN106203617B (zh) | 一种基于卷积神经网络的加速处理单元及阵列结构 | |
US20190294959A1 (en) | Scheduling network computations | |
US11687761B2 (en) | Improper neural network input detection and handling | |
US11314842B1 (en) | Hardware implementation of mathematical functions | |
US11182666B1 (en) | Artificial neural network architecture based on lookup table | |
US10733498B1 (en) | Parametric mathematical function approximation in integrated circuits | |
Li et al. | A multistage dataflow implementation of a deep convolutional neural network based on FPGA for high-speed object recognition | |
JP7492555B2 (ja) | 複数の入力データセットのための処理 | |
US11275997B1 (en) | Weight loading in an array | |
CN110766127A (zh) | 神经网络计算专用电路及其相关计算平台与实现方法 | |
CN110716751B (zh) | 高并行度计算平台、系统及计算实现方法 | |
CN112836793B (zh) | 浮点可分离卷积计算加速装置、系统以及图像处理方法 | |
CN117063182A (zh) | 一种数据处理方法和装置 | |
TWI753728B (zh) | 運算單元架構、運算單元叢集及卷積運算的執行方法 | |
GB2556413A (en) | Exploiting input data sparsity in neural network compute units |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |