CN114026569A - 使用脉动阵列的扩张卷积 - Google Patents
使用脉动阵列的扩张卷积 Download PDFInfo
- Publication number
- CN114026569A CN114026569A CN202080045813.6A CN202080045813A CN114026569A CN 114026569 A CN114026569 A CN 114026569A CN 202080045813 A CN202080045813 A CN 202080045813A CN 114026569 A CN114026569 A CN 114026569A
- Authority
- CN
- China
- Prior art keywords
- input data
- array
- data elements
- subset
- memory
- 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
- 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
- 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
- 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
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V30/00—Character recognition; Recognising digital ink; Document-oriented image-based pattern recognition
- G06V30/40—Document-oriented image-based pattern recognition
- G06V30/41—Analysis of document content
- G06V30/413—Classification of content, e.g. text, photographs or tables
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9047—Buffering arrangements including multiple buffers, e.g. buffer pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/3804—Details
- G06F2207/386—Special constructional features
- G06F2207/3884—Pipelining
- G06F2207/3892—Systolic array
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Molecular Biology (AREA)
- Computational Linguistics (AREA)
- Computer Hardware Design (AREA)
- Databases & Information Systems (AREA)
- Algebra (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Neurology (AREA)
- Multimedia (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Complex Calculations (AREA)
- Medical Informatics (AREA)
- Image Processing (AREA)
- Image Analysis (AREA)
Abstract
在一个实例中,一种非暂时性计算机可读介质存储若干指令,所述指令在由一个或多个硬件处理器执行时使所述一个或多个硬件处理器:将权重数据元素阵列的第一权重数据元素从存储器加载到脉动阵列中;将输入数据元素的子集从所述存储器选入到所述脉动阵列中以执行扩张卷积操作的第一计算,所述子集基于所述扩张卷积操作的速率和所述权重数据元素阵列内的权重数据元素的坐标而选择;并且控制所述脉动阵列以基于所述第一权重数据元素和所述子集执行所述第一计算,以产生输出数据阵列的第一输出数据元素。还提供了产生所述指令的编译器的实例。
Description
背景技术
人工神经网络是具有基于生物神经网络的架构的计算系统。可使用训练数据对人工神经网络进行训练以了解如何针对应用执行某一计算任务。
例如神经网络处理器之类的硬件加速器可被编程以实施人工神经网络以执行计算任务。一个常见计算任务是权重数据矩阵与输入数据矩阵之间的卷积操作。在卷积操作中,权重数据矩阵可在多个步幅中遍历输入数据矩阵并且与输入数据矩阵叠加,直到已遍历整个输入数据矩阵为止。对于每个步幅,可产生权重数据矩阵与输入数据矩阵的叠加部分之间的乘法的总和作为卷积操作的输出,并且可在多个步幅处产生卷积操作的多个输出。卷积操作有许多应用,例如从图像中提取特征,执行图像识别等。
为了减少用于权重数据矩阵与大输入数据矩阵(例如,具有大量像素的图像)之间的卷积操作的计算成本,可执行扩张卷积操作。在扩张卷积操作中,可通过在权重数据矩阵的元素之间插入多个零来放大权重数据矩阵的覆盖面积。在放大的权重数据矩阵的情况下,可减少完成输入数据矩阵的遍历所需的步幅数目。如果硬件加速器还包括硬件以绕过涉及零的乘法和加法运算,则还可减小算术运算的总数目。然而,算术运算的减小可能通过由与扩张卷积操作相关联的其它操作(例如,存储器操作)引入的额外时延抵消,这可能会降低由扩张卷积操作引起的效率提高。
附图说明
将参考图式描述根据本公开的各种实施例,在图式中:
图1示出使用本文所公开的技术处理数据的分类器装置的实例;
图2A-2E是示出根据本公开的某些方面的使用本文所公开的技术的预测模型和计算的简化框图;
图3示出扩张卷积的示例实施方案;
图4A-4C示出根据本公开的某些方面的示例神经网络处理器及其操作;
图5A-5D示出根据本公开的某些方面的在用于正常卷积操作的图4A-4C的示例神经网络处理器处的操作;
图6A-6C示出根据本公开的某些方面的在用于扩张卷积操作的图4A-4C的示例神经网络处理器处的操作;
图7包括示出根据本公开的某些方面的主机系统的实例的框图;
图8示出根据本公开的某些方面的在神经网络处理器处执行扩张卷积操作的示例方法;
图9示出根据本公开的某些方面的为神经网络处理器准备指令以执行扩张卷积操作的示例方法;并且
图10包括示例网络的图式。
具体实施方式
本公开的实例涉及神经网络处理,并且更具体地说,涉及在神经网络处理器处执行扩张卷积操作,以及涉及在神经网络处理器处支持扩张卷积操作的硬件和/或软件系统。
例如神经网络处理器之类的硬件加速器可被编程以实施人工神经网络以执行计算任务。一个常见计算任务是被配置为滤波器的权重数据矩阵与输入数据矩阵之间的卷积操作。输入数据矩阵可对应于图像的像素,而滤波器可包括被配置成从图像提取目标特征的滤波器系数阵列。作为卷积操作的部分,滤波器可在多个步幅中遍历图像的不同位置。在每个步幅位置处,可产生每个滤波器系数与图像的重叠像素之间的乘积的总和作为所述步幅位置的卷积输出。卷积输出可指示例如图像是否含有目标特征、目标特征的图像位置等。由于卷积操作需要在每个步幅位置处执行大量的算术运算(例如,乘法运算和加法运算),因此卷积操作可以是相当计算机密集型的,尤其当涉及具有大量像素的大图像时。
为了减少卷积操作的计算成本,可执行扩张卷积操作。在扩张卷积操作中,可通过在权重数据矩阵的元素之间插入多个零来放大权重数据矩阵的覆盖面积。零的数目可基于扩张卷积的速率。例如,在速率为二的情况下,在权重数据矩阵的元素之间插入一个零,而在速率为四的情况下,在权重数据矩阵的元素之间插入三个零。在放大的权重数据矩阵的情况下,可减少完成输入数据矩阵的遍历所需的步幅数目。如果硬件加速器还包括硬件以绕过涉及零的乘法和加法,则每个步幅处的算术运算的数目可与正常(非扩张)卷积相同或类似。随着步幅的数目减少,可减少涉及扩张卷积操作的算术运算的总数目,并且可改进扩张卷积操作的效率。
尽管扩张卷积操作可减少算术运算的总数目,但计算成本的减小可能通过由与扩张卷积操作相关联的例如存储器操作之类的其它操作抵消。作为实例,为了执行扩张卷积,可从存储器读取与扩张卷积操作中的不同步幅位置的扩展权重数据矩阵的非零元素叠加的图像的元素群组,并且将其存储在存储器中的不同位置处。可从存储器读取元素的每个群组,并且将其与扩展的权重数据矩阵的非零元素相乘以产生乘积,并且可对所述乘积进行求和以产生输出。所述输出可在存储器中重新布置以构建输出数据阵列。额外存储器读取/写入操作可对扩张卷积操作添加时延并且抵消由扩张卷积操作引起的效率提高。
在本公开的一些实例中,神经网络处理器包括存储器、脉动阵列和控制器。存储器可存储输入数据阵列的输入数据元素和权重数据阵列的权重数据元素。输入数据阵列和权重数据阵列两者可以是多维的。例如,输入数据阵列可包括一个或多个二维输入数据矩阵,其中每个输入数据矩阵对应于输入通道。此外,权重数据阵列可包括一个或多个二维权重数据矩阵,其中每个权重数据矩阵对应于输入通道和输出通道。输入数据元素可基于其在输入数据阵列中的坐标而存储在存储器中的地址中,而所述权重数据元素可基于其在权重数据阵列中的坐标而存储在存储器中的地址中。
为了执行扩张卷积操作,控制器可从存储器获得第一权重数据元素并将其加载到脉动阵列中,并且接着将输入数据元素的第一子集加载到脉动阵列中以与第一权重数据元素相乘。加载到脉动阵列中的输入数据元素的第一子集可表示当权重数据阵列在输入数据阵列上处于不同步幅位置时与第一权重数据元素重叠的输入数据元素。脉动阵列可针对其它权重数据元素重复这些操作以产生其它部分和,并且控制求和缓冲器以累加部分和以产生扩张卷积的输出数据元素。求和缓冲器可接着将输出数据元素存储回到存储器以构建扩张卷积的输出数据阵列。
如上文所描述,可基于确定与扩张卷积操作中的权重数据元素重叠的输入数据元素(“重叠输入数据元素”)而选择输入数据元素的每个子集。对权重数据元素的重叠输入数据元素的确定可由编译器执行,所述编译器可在指令中对重叠输入数据元素信息进行编码。控制器可接着执行所述指令以执行选择。编译器可基于投射操作而确定重叠输入数据元素。求和缓冲器的尺寸(例如,列和行的数目)可限定包括输出数据阵列中的第一区的输出数据元素的输出平铺块(tile)。第一区可由输出数据阵列中的实际坐标的范围限定。基于进入输出数据阵列坐标的第一区和扩张卷积的步幅的投射操作,编译器可确定包括待与第一权重数据元素卷积的输入数据元素的第二区。第二区可由输入数据元素的目标坐标的范围限定。第二区(和目标坐标的范围)可基于权重数据阵列中的第一权重数据元素的坐标而移位一偏移量,并且基于扩张卷积操作的速率而移位一比例因子。编译器接着可将步幅图案与移位的第二区对准以标识与步幅图案重叠的第二区的位置。步幅图案限定与权重数据元素重叠的输入数据元素的位置,并且反映扩张卷积操作的步幅。基于重叠,编译器可确定重叠输入数据元素的一组目标坐标。还可针对不同的输入通道执行投射操作以标识其它输入通道中的重叠输入数据元素。
在确定第一权重数据元素的重叠输入数据元素的一组目标坐标之后,编译器可执行坐标到地址映射操作以确定存储器中的输入数据元素的第一子集的地址,并且在指令中提供所述地址以允许控制器从存储器获得输入数据元素的第一子集。编译器可针对每个权重数据元素执行前述投射操作以产生用于相应权重数据元素的指令,其中每个指令包括待与相应权重数据元素卷积的输入数据元素的子集的地址。
本公开的实例可通过减少存储器操作来提高神经网络处理器在执行扩张卷积操作时的效率。例如,与其中从存储器读取重叠输入数据元素并且接着将其存储在存储器中的不同位置处,并且接着再次从存储器中的不同位置读取以执行扩张卷积的情况进行比较,根据本公开的实例的神经网络处理器具备重叠输入数据元素的地址并且使用所述地址以从存储器选择性地读取重叠输入数据元素,并且将输入数据元素提取到脉动阵列。神经网络处理器不需要执行额外存储器写入操作以将重叠输入数据元素写回到存储器。此外,由于求和缓冲器可将输出数据元素存储在存储器中的预定位置处以重新构建输出数据阵列,因此不需要将输出数据元素重新布置在存储器中以构建输出数据阵列。所有这些都可减少存储器操作的次数,从而可减少存储器存取时延并且提高扩张卷积操作的速度。
在下面的描述中,将描述各种实例。出于解释的目的,阐述特定配置和细节以便提供对实例的透彻理解。然而,对于本领域的技术人员而言显而易见的是,可以在没有具体细节的情况下实践实例。此外,可省略或简化众所周知的特征以免混淆所描述的实施例。
图1示出使用本文所公开的技术处理数据的示例分类器装置100。分类器装置100可以是例如操作软件应用程序102和预测模型103以预测包括在数据序列中的信息并且基于预测执行预定功能的计算装置。例如,分类器装置100可以是被设置成从图像标识某些对象(例如,文本、人等)的图像识别服务的一部分。应理解,图像识别服务仅作为示意性实例提供,并且本文所公开的技术可用于其它数据处理应用,包括例如基于文本的数据处理(例如,搜索查询的处理)、音频数据处理等。此外,分类器装置100可操作多个不同预测模型以同时或在不同时间处理不同输入数据。
在一些实例中,图像识别服务可设置在多租户计算服务系统中。多租户计算服务系统通常可包括多个服务器,所述多个服务器可托管数据并且可由多个客户端或组织用于运行实例,例如虚拟机实例或裸机实例(例如,直接在服务器硬件上运行的操作系统)。在大多数情况下,例如裸机或虚拟机实例之类的多租户计算服务系统可在客户端需要它们时分配给客户端,并且在不再被需要时退出,使得可将资源重新分配给其它客户端。在本公开中,术语“租户”、“客户端”和“客户”可互换使用,但此类术语不一定意味着存在任何特定的业务布置。术语“实例”可指例如直接在服务器硬件上运行或作为虚拟机运行的实例。不同类型的实例通常对应于不同硬件功能和/或硬件布置(例如,不同量的可用存储器和/或处理硬件)。在图1的实例中,多租户计算服务系统可在客户端需要时提供图像识别服务,并且服务不再被需要时被停用,使得支持图像识别服务的资源(例如,对软件应用程序102的存取和用于处理软件应用程序102的底层硬件资源)可重新分配到其它客户端。不同客户端(或一个客户端)可请求应用程序102使用包括预测模型103的相同或不同预测模型来执行不同输入数据的处理。
在图1的实例中,软件应用程序102可从用户接收图像104的像素数据。图像104可包括像素阵列。软件应用程序102可对像素数据执行分析,并且预测图像104中所描绘的一个或多个对象106。所述分析可包括例如将所述像素数据与一组预定特征数据进行比较。预定特征数据可包括与例如鼻子对象、嘴巴对象等一组预定视觉图像特征相关联的数据。预定特征数据还可包括与非视觉图像特征或视觉和非视觉图像特征的组合相关联的数据。如下文将更详细地论述,软件应用程序102可采用预测模型103以基于图像104的像素数据计算一组得分。所述一组得分可表示例如图像104包括由特征数据表示的图像特征的概率。软件应用程序102可接着基于得分确定关于图像104的内容的其它信息。例如,基于得分,软件应用程序102可确定图像104是例如熊猫、猫或其它对象的图像。本公开提供了允许在操作预测模型103的速度与精度之间进行权衡的技术的实例,如下文将论述。
预测模型103可呈人工神经网络的形式。人工神经网络可包括多个处理节点,其中每个处理节点被配置成处理输入像素数据的部分,或进一步处理来自其它处理节点的中间输出。图1示出使用本文所公开的技术的预测模型103的实例。在图1中,预测模型103可以是多层神经网络,例如深度神经网络(DNN)、卷积神经网络(CNN)等。预测模型103可包括输入层207、包括中间层209和211的一组中间层以及输出层(图2A中未示出)。应理解,预测模型103还可包括其它不同类型的神经网络,包括例如长期存储器(LSTM)、多层感知(MTP)、多尺度密集网络(MSDNET)等。
层207可处理表示图像104的不同部分的像素数据。例如,在图2A的实例中,层207可处理图像204的像素数据。层207的每个处理节点被指定以接收对应于图像104内的预定像素的像素值(例如,x0、x1、x2……xn),并且将具有所接收的像素值的一个或多个权重传输到层209。在预测模型203是DNN的情况下,可对层207的每个处理节点指定基于矩阵W1限定的一组权重。层207的每个处理节点可将所接收的像素值和所指定的权重发送到层209的每个处理节点。在预测模型103是CNN的情况下,层207的处理节点群组可共享一组权重,并且每个群组可将由处理节点群组接收到的一组权重和像素值发送到层209的单个处理节点。不同神经网络模型可包括不同拓扑(例如,包括不同数目的层、层之间的不同连接等),和/或包括用于每个层的不同组权重。
层209可处理来自层207的按比例缩放的输出以产生一组中间输出。例如,假设层209的处理节点210a连接到层207中的n个处理节点,则处理节点210a可基于以下等式而产生从层207接收的按比例缩放的输出的总和:
此处,总和210a表示由处理节点210a产生的中间输出。W1i×xi表示通过层207的处理节点对具有相关联权重(例如,W10)的特定像素值(例如,x0)的按比例缩放。在预测模型103是DNN的情况下,层209的每个处理节点可基于来自层207的每个处理节点的像素值的按比例缩放而产生总和,并且接着通过对按比例缩放的像素值进行求和而产生总和(例如,总和210a)。所述总和还可表示包括多个元素(例如,像素值)的输入向量与权重向量(例如,W1)之间的点积。在一些实例中,还可将偏置添加到按比例缩放的输出以产生中间输出。
在预测模型103是CNN的情况下,层209的每个处理节点可基于来自层207的处理节点群组的像素值的按比例缩放而产生中间输出。中间输出可表示像素值群组与包括权重值的滤波器之间的卷积结果。图2B示出层209可执行的卷积操作的实例。在图2B中,滤波器230可包括权重的二维阵列。滤波器230中的权重可表示待根据图像检测的某些特征的像素的空间分布。二维阵列可具有R行的高度和S列的宽度,并且通常小于具有H像素的高度和W像素的宽度的输入图像。每个权重可映射到呈具有相同R行和S列的像素值的矩形块的像素。层209的处理节点(例如,处理节点210a)可从输入层207的处理节点群组接收对应于来自输入图像的像素的第一矩形块的像素值的群组240,所述像素值的群组240对应于滤波器230的第一步幅位置,并且根据等式1基于滤波器230的每个权重与群组240中的每个对应像素之间的相乘结果的总和而产生卷积输出242,以产生由滤波器230表示的矩阵与由群组240表示的矩阵之间的点积。层209的另一处理节点还可从输入层207的处理节点的另一群组接收像素值的群组244,所述像素值的群组244对应于来自输入图像的对应于滤波器230的第二步幅位置的像素的第二矩形块,并且根据等式1基于滤波器230的每个权重与群组244中的每个对应像素之间的相乘结果的总和而产生卷积输出246,以产生滤波器230的矩阵与由群组240表示的矩阵之间的点积。在一些实例中,图2B中的每个卷积输出(例如,卷积输出242、卷积输出346等)可对应于层209的处理节点的输出。在一些实例中,输入图像中的像素数据可被称为输入特征映射以指示像素由对应于某特征的相同滤波器(或相同一组滤波器)处理。卷积输出可被称为输出特征映射以指示输出是通过滤波器处理输入特征映射的结果。
如图2B所示,卷积操作可布置在滑动窗中以使得第二矩形块与输入图像中的第一矩形块重叠,或以其它方式邻近于输入图像中的第一矩形块。例如,在图2B的实例中,D可以是用于每个卷积操作的滑动窗的步幅(在像素中)的距离,使得对应于群组244的像素块可位于距对应于群组240的像素块的距离D(就像素来说)处,并且像素的下一块也可位于距群组244的相同距离D处。层209的其它处理节点还可接收对应于其它矩形块的像素群组并且产生其它中间输出。卷积输出可以是卷积输出阵列的部分。卷积输出阵列可具有比输入图像更小的高度和更小的宽度。可进一步对卷积输出的矩形块进行分组,并且可在卷积输出群组与另一组滤波器权重之间的层211处执行卷积操作以产生另一组卷积输出。
在一些实例中,可在多个图像与多个滤波器之间执行卷积操作。例如,参考图2C,一组C滤波器260可对应于图像270的数目(C),并且可在所述一组滤波器260的每个滤波器与图像270的对应图像上的像素块之间执行卷积操作。图像270中的每一个可对应于输入通道。可对每个滤波器图像对的卷积结果进行求和以产生如下的卷积输出:
此处,卷积操作涉及图像(或像素阵列)。Xc eD+r,fD+s可指索引c的图像处的像素值,在图像270的数目(C)内,其行坐标为eD+r,并且列坐标为fD+s。对于本公开的其余部分,可按(eD+r,fD+s)的形式表示元素Xc eD+r,fD+s的坐标。索引c可表示特定输入通道。D是滑动窗步幅距离,而e和f对应于卷积输出阵列中的数据元素的位置,所述e和f还可对应于特定滑动窗。另外,r和s对应于滑动窗内的特定位置。在(r,s)位置处的像素和索引c的图像还可对应于在相同(r,s)位置处的相同索引c的对应滤波器中的权重Wc r,s。等式2指示为了计算卷积输出Oe,f,滑动窗内的每个像素(索引为(e,f))可乘以对应权重Wc r,s。可计算图像集合内的每个图像中的每个滑动窗内的相乘乘积的部分和。并且接着可计算图像集合的所有图像的部分和的总和。
此外,在一些实例中,多组滤波器可用于以一组图像执行卷积操作以产生一组卷积输出阵列,其中每个卷积输出阵列对应于一组滤波器。每组滤波器可对应于输出通道。例如,多组滤波器可对应于待从所述一组图像检测的多个特征,并且每个卷积输出阵列可对应于用于来自所述一组图像的每个特征的检测结果。例如,在将M组滤波器应用于C个图像以产生M个卷积输出阵列的情况下,可如下更新等式2:
此处,卷积输出Oe,f m和权重Wc,m r,s具有对应于M组滤波器中的一个的索引m。索引m可表示特定输出通道。
图2D示出待与M组滤波器(其中M=2)卷积的C组输入数据集(其中C=3)的实例。每组输入数据对应于像素阵列的条目。所述M组滤波器中的每一个包括对应于所述C组输入像素阵列的一组C滤波器。卷积操作产生M组输出数据元素,其中每组输出数据元素对应于卷积输出阵列。每个卷积输出阵列对应于将(M组中的)一组滤波器与输入像素阵列卷积。例如,O0,0 0可由像素282的群组与滤波器阵列284之间的点积、像素286的群组与滤波器阵列288之间的点积以及像素289的群组与滤波器阵列292之间的点积的总和产生。
返回参考图2A,层209的一个处理节点可被配置成产生一个卷积输出阵列的卷积输出元素,并且层209的处理节点的集合M可对应于卷积输出阵列的集合M。层209的处理节点还可处理具有激活函数的每个卷积输出以产生激活输出。激活函数可将卷积输出转换为是否将卷积输出转发到中间层211以影响分类器决策的决策(类似于生物神经元的放电)。激活函数的实例可以是根据以下等式限定的整流线性单元(ReLU):
除了ReLU之外,还可使用其它形式的激活函数,包括例如软加函数(其可以是ReLU函数的光滑逼近)、双曲线切线函数(tanh)、弧切线函数(arctan)、S型函数、高斯函数等。
层209的处理节点(例如,处理节点210a)可处理与ReLU函数的和以基于以下等式产生层209的第一输出:
first_output210a=ReLU(总和210a) (等式5)
层211可进一步通过例如基于不同组滤波器而执行额外卷积操作来处理来自层209的按比例缩放的中间输出。可将来自层211的每个处理节点的输出转发到其它较高中间层,或转发到输出层(图2A中未示出)。输出层可形成表示例如特定特征包括在图像104中的概率和/或图像204包括熊猫的图像的概率的输出向量。例如,可将输出向量与同熊猫的鼻对象相关联的参考向量或与熊猫相关联的参考向量进行比较。可基于比较结果来确定关于图像104是否为熊猫的图像的决策。
图2B-图2D的卷积操作需要在每个步幅位置处执行多个算术运算(例如,乘法运算和加法运算)以找到点积。卷积操作可以是相当计算机密集型的,尤其当涉及具有大量像素的大图像时,因为可能需要大量步幅以使滤波器在图像上进行完全遍历。
为了减少卷积操作的计算成本,可执行扩张卷积操作。图2E示出扩张卷积操作的实例。如图2E所示,通过在图2C的滤波器260的元素之间插入零可从滤波器290产生滤波290。例如,将零插入在权重元素W0,0与W0,1之间以将第一行的宽度扩展到SE。此外,将零插入在权重元素W0,0与W1,0之间以将第一列的高度扩展到RE。插入在元素之间的零的数目可基于扩张卷积的速率。在图2E的实例中,扩张卷积的速率为二。在扩张卷积的速率为四的情况下,可在每个元素之间插入三个零。还将一行零插入在扩展行之间以适应将零插入在权重元素W0,0与W1,0之间,而将一列零插入在扩展列之间以适应将零插入在像素X0,0与X0,1之间。
作为扩张卷积操作的部分,滤波器290可在不同步幅位置处遍历图像270,如图2B所示。在每个步幅位置处,滤波器290的每个元素可与图像270的重叠像素相乘以产生乘积,并且可对乘积进行求和以产生卷积阵列280处的输出。步幅位置可确定卷积阵列280中的输出的坐标。作为滤波器290的放大覆盖面积的结果,与滤波器290重叠的像素的数目增加,但每隔一个像素与零重叠并且并不按总和表示。例如,在图2E所示的步幅位置中,权重元素W0,0可与图像270的像素X0,0相乘,而权重权元素W0,1可与图像270的像素X0,2相乘,其中跳过X0,1。由于滤波器290的覆盖面积较大,因此可减少滤波器290在图像270上完成遍历所需的步幅的数目。如果硬件加速器还包括硬件以绕过涉及零的乘法和加法,则每个步幅处的算术运算的数目可与涉及滤波器260的图2C的正常卷积相同或类似。随着步幅的数目减少,可减少涉及扩张卷积操作的算术运算的总数目。
图3示出在计算环境中实施扩张卷积操作的示例顺序300。在图3的实例中,可在图像270与滤波器290之间执行速率为二且步幅为二的扩张卷积操作,其中可通过在如上文所描述的邻近权重元素之间插入零来从滤波器260产生滤波290。为了执行扩张卷积操作,图像270的像素数据可拆分成像素数据的子集,所述子集与每个步幅位置处的滤波器290的非零权重元素重叠。如图3所示,图像270的像素数据可拆分成输入数据子集302、输入数据子集304等。输入数据子集302和304中的每一个包括与多个步幅位置处的滤波器290重叠的像素。可在原始滤波器290(其扩展到用于扩张卷积操作的滤波器290)与像素的每个子集之间执行卷积操作310以产生卷积阵列280的输出元素的子集,包括输出数据子集306和308。输出数据子集306和308的输出元素可根据由输入数据子集表示的步幅位置交错和/或重新布置以集合卷积阵列280。
顺序300可涉及大量存储器读取和写入操作。例如,可通过从存储器位置读取图像270的像素并且将像素的子集存储在其它存储器位置处来执行将图像270的像素拆分成像素的子集。此外,在从卷积操作310产生输出数据子集306和308之后,所述输出数据子集306和308可存储在存储器中,并且作为交错/重排操作的部分,输出数据子集可从存储器读取并且存储回到存储器中以集合卷积阵列280。所有这些额外存储器读取和写入操作可添加时延并且增加完成计算环境中的扩张卷积操作所需的时间。
图4A是示出可被配置成执行包括正常卷积操作和扩张卷积操作的各种类型的卷积操作的集成电路装置的实例的框图。图4的实例示出加速器402。在各种实例中,对于一组输入数据(例如,输入数据450),加速器402可使用处理引擎阵列410、激活引擎416和/或池化引擎418执行计算。在一些实例中,实例加速器402可以是例如神经网络处理器之类的处理器的集成电路组件。处理器可具有其它集成电路组件,包括额外加速器引擎。加速器402可包括控制器422以控制处理引擎阵列410、激活引擎416和/或池化引擎418的操作。
在各种实施方案中,存储器子系统404可包括多个存储器组414。在这些实施方案中,每个存储器组414可独立地存取,这意指一个存储器组的读取不依赖于另一存储器组的读取。类似地,写入到一个存储器组不影响或限制写入到不同存储器组。在一些情况下,可以同时读取和写入每个存储器组。各种技术可用于具有可独立存取的存储器组414。例如,每个存储器组可以是物理上独立的存储器组件,其具有单独的且独立于每个其它存储器组的地址空间的地址空间。在此实例中,每个存储器组可具有至少一个读取通道并且可具有可同时使用的至少一个单独写入通道。在这些实例中,存储器子系统404可准许同时接入多个存储器组的读取或写入通道。作为另一实例,存储器子系统404可包括仲裁逻辑,使得例如多个存储器组414的输出之间的仲裁可使得多于一个存储器组的输出被使用。在这些和其它实例中,尽管总体由存储器子系统404管理,但每个存储器组可独立于任何其它存储器组来操作。
使存储器组414可独立存取可增大加速器402的效率。例如,值可被同时读取并且提供到处理引擎阵列410的每个行,使得整个处理引擎阵列410可在一个时钟周期中使用。作为另一实例,可在由处理引擎阵列410计算的结果被写入到存储器子系统404的同时读取存储器组414。相比之下,单个存储器可能一次仅能够服务一个读取或写入。在单个存储器的情况下,在可开始处理引擎阵列410之前,例如可能需要多个时钟周期来读取处理引擎阵列410的每个行的输入数据。
在各种实施方案中,存储器子系统404可被配置成同时服务多个客户端,所述客户端包括处理引擎阵列410、激活引擎416、池化引擎418以及通过通信结构420接入存储器子系统404的任何外部客户端。在一些实施方案中,能够服务多个客户端可意指存储器子系统404至少具有与客户端一样多的存储器组。在一些情况下,处理引擎阵列410的每个行可算作单独的客户端。在一些情况下,处理引擎阵列410的每个列可输出结果,使得每个列可算作单独的写入客户端。在一些情况下,来自处理引擎阵列410的输出可被写入到存储器组414中,所述存储器组随后可向处理引擎阵列410提供输入数据。作为另一实例,激活引擎416和池化引擎418可包括多个执行通道,每个执行通道可以是单独的存储器客户端。例如,存储器组414可使用静态随机存取存储器(SRAM)实施。
在各种实施方案中,存储器子系统404可包括控制逻辑。例如,控制逻辑可记录存储器组414中的每一个的地址空间,标识要读取或写入的存储器组414,和/或在存储器组414之间移动数据。在一些实施方案中,存储器组414可硬连线到具体客户端。例如,一组存储器组414可被硬连线以将值提供到处理引擎阵列410的各行,其中一个存储器组服务一个行。作为另一实例,一组存储器组可硬连线以从处理引擎阵列410的列接收值,其中一个存储器组接收每一列的数据。
处理引擎阵列410是示例加速器402的计算矩阵。例如,处理引擎阵列410可执行并行集成、卷积、相关性和/或矩阵乘法等。处理引擎阵列410包括以行和列布置的多个处理引擎411,使得由一个处理引擎411输出的结果可直接输入到另一处理引擎411中。不在处理引擎阵列410的外部边沿上的处理引擎411因此可从其它处理引擎411而非从存储器子系统404接收数据以进行操作。
在各种实例中,处理引擎阵列410使用脉动执行,其中数据从不同方向以规律间隔到达每个处理引擎411。在一些实例中,输入数据可从左边流入处理引擎阵列410中,并且权重值可在顶部加载。在一些实例中,权重和输入数据可从左边流动,并且部分和可从顶部流动到底部。在这些和其它实例中,乘积累加操作作为对角波阵面(diagonal wave front)移动通过处理引擎阵列410,其中数据在阵列上向右和向下移动。控制信号可与权重同时在左边输入,并且可连同计算一起流过并且向下流动。
在各种实施方案中,处理引擎阵列410中的列的数目确定处理引擎阵列410的计算容量,并且行的数目确定用于实现处理引擎阵列410的最大利用率的所需存储器带宽。处理引擎阵列410可具有例如64列和428行,或某一其它数目的列和行。
图4中以插图示出处理引擎411的实例。如由此实例所示,处理引擎411可包括乘法器-累加器电路。来自左边的输入可包括例如输入数据i和权重值w,其中输入数据是取自一组输入数据或一组中间结果的值,并且权重值来自将神经网络的一个层连接到下一层的一组权重值。一组输入数据可以例如是提交以用于标识或对象识别的图像、提供以用于语音识别的音频片段、用于自然语言处理或机器翻译的文本的字符串,或需要分析以确定下一移动的游戏的当前状态等。在一些实例中,输入数据和权重值输出到右边,以用于输入到下一处理引擎411。
在示出的实例中,来自上方的输入可包括从另一处理引擎411或从处理引擎阵列410进行的前一轮计算提供的部分和p_in。当针对新的一组输入数据开始计算时,处理引擎阵列410的顶部行可接收p_in的固定值,例如零。如由此实例所示,i和w一起相乘,并且结果与p_in进行求和以产生可输入到另一处理引擎411中的新的部分和p_out。处理引擎411的各种其它实施方案是可能的。
来自处理引擎阵列410中的最后一行的输出可暂时存储在结果缓冲器412中。结果可以是中间结果,其可被写入到存储器组414以提供到处理引擎阵列410以进行额外计算。或者,所述结果可以是最终结果,其一旦被写入到存储器组414就可通过通信结构420从存储器子系统404读取,以由系统输出。
在一些实施方案中,加速器402包括激活引擎416。在这些实施方案中,激活引擎416可将来自处理引擎阵列410的结果组合成一个或多个输出激活。例如,对于卷积神经网络,可对来自多个通道的卷积进行求和以产生用于单个通道的输出激活。在其它实例中,可能需要累加来自处理引擎阵列410中的一个或多个列的结果以产生用于神经网络中的单个节点的输出激活。在一些实例中,可绕过激活引擎416。
在各种实例中,激活引擎416可包括多个单独执行通道。在这些实例中,所述执行通道可对应于处理引擎阵列410的列,并且可对列的输出执行操作,其结果可存储在存储器子系统404中。在这些实例中,激活引擎416能够执行1个与n个之间的并行计算,其中n等于处理引擎阵列410中的列的数目。在一些情况下,可同时执行计算中的一个或多个。每个执行通道可执行的计算的实例包括指数、平方、平方根、恒等式、二元步、双极步、S形(sigmoidal)和斜坡(ramp),以及其它实例。
在一些实施方案中,加速器402可包括池化引擎418。池化是对处理引擎阵列410的列的输出的组合。组合可包括例如计算最大值、最小值、平均值、中值、总和、乘法或另一逻辑或数学组合。在各种实例中,池化引擎418可包括多个执行通道,所述执行通道可对来自处理引擎阵列410的对应列的值进行操作。在这些实例中,池化引擎418能够执行1个与n个之间的并行计算,其中n等于处理引擎阵列410中的列的数目。在各种实例中,池化引擎418的执行通道可并行和/或同时操作。在一些实例中,可绕过池化引擎418。
此处,激活引擎416和池化引擎418可统称为执行引擎。处理引擎阵列410是执行引擎的另一实例。执行引擎的另一实例是可位于加速器402外部的直接存储器存取(DMA)引擎。
输入数据450可到达通信结构420。通信结构420可将加速器402连接到处理器的其它组件,例如可从输入/输出(I/O)装置获得输入数据450的DMA引擎、存储驱动器或网络接口。输入数据450可例如是一维数据,例如字符串或数值序列,或可以是二维数据,例如用于图像或频率的像素值的阵列和用于音频信号的随时间推移的幅值。在一些实例中,输入数据450可以是三维的,例如对于自动驾驶汽车所使用的情境信息或虚拟现实数据来说可以是这种情况。在一些实施方案中,存储器子系统404可包括用于输入数据450的单独的缓冲器。在一些实施方案中,当加速器402接收输入数据450时,所述输入数据450可存储在存储器组414中。
在一些实例中,加速器402可实施神经网络处理引擎。在这些实例中,对于一组输入数据450,加速器402可运行神经网络以执行任务,而所述神经网络已针对所述任务进行了训练。对一组输入数据执行神经网络可称为推理或执行推理。
神经网络的权重可连同神经网络将进行操作的输入数据450一起存储在存储器子系统404中。存储器子系统404中的权重和输入数据450的地址可基于或映射到分别在权重数据阵列和输入数据阵列中的权重和输入数据450的坐标,这允许基于从其坐标导出的地址而检索权重和输入数据。神经网络还可包括可由控制器422执行以控制处理引擎阵列410对权重和输入数据执行各种计算的指令。指令可由编译器产生,并且还可存储在存储器子系统404中、存储器组414中或单独的指令缓冲器中。处理引擎阵列410可输出中间结果,所述中间结果表示神经网络的各个层的输出。在一些情况下,激活引擎416和/或池化引擎418可针对由神经网络的某些层调用的计算而启用。加速器402可将中间结果存储在存储器子系统404中,以输入到处理引擎阵列410中以计算神经网络的下一层的结果。处理引擎阵列410还可从神经网络的最后一层输出最终结果。最终结果可存储在存储器子系统404中,并且接着复制到主机处理器存储器或复制到另一位置。
图4B和图4C示出加速器402的操作的实例。如图4B所示,存储器子系统404可组织成多个行,例如存储器行425、426等。每个存储器行可存储特定输入通道的输入数据元素。可控制存储器存取电路(例如,存储器存取电路427)以基于包括起始地址、步长和元素数目的一组存储器提取参数430而依次将输入数据元素提取到处理引擎阵列410。起始地址参数可限定待从存储器行读取的第一输入数据元素的位置,所述步长参数可限定所提取的输入数据元素之间跳过的输入数据元素的数目,而提取元素参数的数目可限定待提取的输入数据元素的总数目。当输入数据元素存储在连续空间中时,存取电路427可确定待获取的输入数据元素的地址,并且基于所述步长更新计数器。例如,存取电路427可开始从起始地址获取第一输入数据元素,将基于步长的地址偏移添加到起始地址以在跳过多个输入数据元素时获取下一输入数据元素,并且重复直至达到获取元素的数目为止。如下文将更详细地描述,存储器获取参数430可包括在用于计算一组部分和的指令中。指令可由编译器产生并且由控制器422解析以提取存储器提取参数430。控制器422接着可基于所提取的存储器提取参数430而控制从存储器子系统400提取输入数据元素。如下文将详细描述,起始地址、步长和元件参数的数目可被配置成支持不同类型的卷积操作,例如正常卷积操作、扩张卷积操作等。
处理引擎阵列410的处理引擎411可组织成例如行431之类的行和例如列432之类的列。处理引擎411的每个行映射到输入通道并且可从映射到输入通道的存储器系统404的存储器行依次接收输入数据元素,而处理引擎411的每个列可映射到输出通道。输入数据元素存储在连续地址空间中并且遵循基于其在输入数据阵列中的坐标的次序。每个处理引擎411可存储用于输入通道和处理引擎映射到的输出通道的权重数据元素。处理引擎411的每个列。参考图4A和图4B,引擎内的处理引擎411可接收输入通道的输入数据元素(例如,图4A的输入数据i),将其与所存储的权重相乘(例如,图4A的权重数据w)以产生乘积,将所述乘积添加到输入部分和p_in以产生新的部分和p_out,并且将新的部分和p_out传递到同一列下方的处理引擎411。列的底部处理引擎411可产生表示存储在处理引擎411的列中的权重数据元素与从存储器子站404接收的不同输入通道的输入数据元素之间的乘积的总和的部分和。
在存储器提取参数430指示起始地址在每行的最右输入数据元素处的情况下,将提取一个步长(在此实例中,其可指示跳过),并且将提取某一数目的输入数据元素,在处理引擎411的第一迭代列432中,可基于存储的权重数据元素和由存储器子系统404提供的输入数据元素产生第一部分和,如下所示:
第一部分和=X0 0,0×W0,0 0,0+X0 0,0×W1,0 0,0+...+XC 0,0×WC,0 0,0 (等式6)
在第二迭代中,处理引擎411的列432可基于存储的重量数据元素和由存储器子系统404提供的输入数据元素产生第二部分和,如下所示:
第二部分和=X0 0,1×W0,0 0,0+X0 0,1×W1,0 0,0+...+XC 0,1×WC,0 0,0 (等式7)
处理引擎411的每个列可将迭代中产生的部分总和提供到列求和缓冲器,例如列求和缓冲器442、443等,这两者都是求和缓冲器412的部分。基于在与不同输入通道和输出通道相关联的不同滤波器阵列的相同坐标处的权重数据元素而产生部分和,并且所述部分和对应于不同输出数据元素。参考图4C,列求和缓冲器442和443中的每一个包括多个条目,例如,E0,0、E0,1、E0,2等。每个条目可具有坐标,所述坐标映射到可表示输出阵列的区的输出平铺块的坐标。每个条目具有加法器(图4C中未示出),其允许所述条目将接收到的部分和与存储的部分和相加以产生累加的部分和。所述条目可接着存储累加的部分和。
列求和缓冲器442和443处的操作可由包括目的地偏移量、步长和写入元素的数目的一组缓冲器写入参数452控制。目的地偏移量参数可指示(第一迭代的)第一部分和要添加到的条目。步长参数可指示接收部分和的相邻条目之间待跳过的条目的数目。步长参数可对应于在权重数据阵列处于不同步幅位置时与权重数据元素重叠的非零输入数据元素之间的间隙。此外,写入元素的数目指示待添加到从起始地址开始的求和缓冲器的条目的部分和的数目,其中基于如上文所描述的步长参数分离相邻条目。
作为示意性实例,在目的地偏移量为2并且步长为1的情况下,来自列432的第一部分和可存储在条目E0,2处,第二部分和可存储在E0,3处,第三部分总和可存储在E0,4处等,直到存储由写入元素的数目指定的部分和的数目为止。如下文将更详细地描述,缓冲器写入参数452可包括在用于计算一组部分和的指令中。所述指令可由控制器422解析以提取缓冲器写入参数452。控制器422可接着基于所提取的缓冲器写入参数452而控制求和缓冲器的操作。如下文将描述,缓冲器写入参数452可被配置成支持卷积操作。
在根据第一组权重数据元素(其在相应滤波器阵列中的坐标相同但输入通道和输出通道不同)计算部分和之后,处理引擎阵列410可从不同坐标加载新的一组权重数据元素并且重复部分和计算。可将新的部分和添加到存储在求和缓冲器412中的从第一组权重数据元素计算出的部分和。对其余权重数据元素的部分和的计算和累加可继续下去以产生输出平铺块的数据元素。在产生输出平铺块的数据元素之后,求和缓冲器412可将输出平铺块的数据元素提供到激活引擎416和/或池化引擎418以供后处理,并且后处理的输出数据元素可存储在存储器子系统404中。可将后处理的输出数据从存储器子系统404发送到芯片互连件420和/或提取到处理引擎阵列410作为用于后续神经网络层处理的输入数据。
图5A-图5D示出用来执行正常卷积操作的加速器402的示例配置。图5A示出3x3滤波器阵列504的不同权重数据元素与输入数据阵列502的输入数据元素之间的重叠。在图5A中,输入数据阵列502可在顶部上填补有一行506的零并且在左边填补有一列508的零。补零的行的数目可由pad_north参数指定,其中pad_north等于一,指示在输入数据阵列502的顶部上填补一行零。此外,补零的列的数目可由pad_west参数指定,其中pad_west等于一,指示在输入数据阵列502的左边填补一列的零。正常卷积操作可在补零输入数据阵列502与滤波器阵列504之间进行,其中步幅为2。与不同步幅位置处的特定权重数据元素重叠的一些输入数据元素/补零被加底纹。如图5A所示,一些补零以及坐标(1,1)处的输入数据元素可与不同步幅位置处的权重数据元素(0,0)重叠。此外,输入数据元素(0,0)、(0,2)和(2,2)可在不同步幅位置处与权重数据元素(1,1)重叠。此外,输入数据元素(1,1)、(1,3)和(3,3)可与不同步幅位置处的权重数据元素(2,2)重叠。在每种情况下,每个输入数据元素之间存在与权重数据元素重叠的间隙。可基于卷积操作的步幅距离来限定所述间隙。在步幅距离为二的情况下,间隙包括一个输入数据元素。
返回参考图4B和图4C,为了执行图5A的正常卷积操作,控制器422可具备存储器提取参数430,其限定用于加载到处理引擎411中的权重数据元素的一组重叠非零输入数据元素。可基于起始地址、步长以及提取元素参数的数目而限定所述一组重叠非零输入数据元素。起始地址可以是存储器子系统404中的第一重叠非零输入数据元素的地址。可基于存储器子系统404地址与存储在存储器子系统404中的输入数据元素的坐标之间的映射来确定所述地址。此外,所述步长可对应于上文所描述的间隙并且可基于步幅距离。此外,提取元素的数目可基于用于卷积操作的输出平铺块的尺寸,其又可基于求和缓冲器的尺寸,如下文将描述。基于用于每个权重数据元素的存储器提取参数430,控制器422可将输入数据元素的正确子集提取到处理引擎阵列410以与所述权重数据元素相乘以产生部分和。
此外,控制器422可具备缓冲器写入参数452以存储用于对应于步幅位置的列求和缓冲器(例如,列求和缓冲器442)的条目处的不同步幅位置的非零部分和。例如,返回参考图4C,步幅位置(0,0)的部分和可累加在条目E0,0处,步幅位置(0,1)的部分和可累加在条目E0,1处等。缓冲器写入参数452的目的地偏移量还可基于用于权重数据元素的一组重叠非零输入数据元素。具体地说,起始偏移量可提供到列求和缓冲器以跳过对应于零部分和的多个条目,所述多个条目对应于与权重数据元素重叠的多个补零,直到条目对应于权重数据元素与输入数据元素重叠的步幅位置为止。参考图5A的实例,在前几个步幅位置处,权重数据元素(0,0)与补零重叠,直到在(1,1)处与输入数据元素重叠为止。缓冲器写入参数452的目的地偏移量可被配置成确保在(1,1)处从输入数据元素产生的部分和存储在条目处,所述条目在权重数据元素(0,0)与输入数据元素(1,1)重叠时反映滤波器阵列504的步幅位置。
图5B示出确定可由编译器执行的用于特定权重数据元素的重叠输入数据元素的示例操作。参考图5B,基于列求和缓冲器的尺寸(例如,条目的行和列的数目),编译器可确定输出平铺块的尺寸以及列求和缓冲器的条目的总数目。如上文所描述,输出平铺块包括输出数据阵列中的区520的输出数据元素,并且输出平铺块可由输出数据阵列中的第一区的坐标范围限定。
在操作522中,编译器可从由输出平铺块表示的区520执行投射操作以确定输入数据阵列502中的区530,所述区530可提供待与权重数据元素卷积的输入数据元素以产生输出平铺块。投射操作可考虑第一区的尺寸以及卷积操作的步幅距离。如上文所描述,步幅距离可限定每个重叠输入数据元素之间的间隙,其中步幅距离为二产生输入数据元素的间隙。可基于区520的尺寸和间隙来确定区530的尺寸。例如,参考图5B,基于具有每行10个输出数据元素并且有三行(总共30个条目)的输出平铺块,区530的尺寸可通过将区520的尺寸按比例缩放二来确定,使得区520具有每行20个输入数据元素并且有六行。通过此类布置,当在两个输入数据元素之间跳过一个输入数据元素时,输入数据元素的总数目(和所得的部分和)可等于输出平铺块中的输出数据元素的总数目,以及列求和缓冲器的条目的数目。
在确定区520的尺寸之后,编译器可将区530与填补输入数据阵列502对准。所述对准可基于权重数据元素的坐标以及pad_north参数和pad_west参数。区530的左上方拐点相对于原始输入数据阵列502的坐标可基于以下等式:
Start_coordinates=(weight_r-pad_west,weight_s-pad_north) (等式8)
在等式8中,start_coordinates指代区530的左上方拐点的坐标,weight_r指代权重数据元素的行坐标,weight_s指代权重数据元素的列坐标,pad_west指代添加到输入数据阵列502的左边的零列的数目,而pad_north指代添加到输入数据阵列502的顶部的零行的数目。
如图5A所示,对于权重数据元素(0,0),区530的左上方拐角可与补零输入数据阵列502的左上方拐角对准。通过此对准,在步幅位置(0,0)处具有滤波器阵列504的权重数据元素(0,0)与区530的最上元素重叠,所述区530的最上元素表示待与权重数据元素相乘的第一输入数据元素并且相对于原始输入数据阵列502处于坐标(-1,-1)处。根据对准操作,编译器可确定区520相对于原始输入数据阵列502的目标坐标的范围。在图5B中,区530的目标坐标的范围可相对于具有坐标(0,0)的原始输入数据阵列502的左上方拐点从(-1,-1)到(4,18)。区530的最左上方元素的位置可以是参考位置,并且可基于输出数据阵列中的输出平铺块的位置。例如,对于紧接在区520下方的第二输出平铺块,参考位置可从(-1,-1)偏移区530的高度并且可在(5,-1)处。
在操作540中,在确定区530的目标坐标之后,编译器可在区530上叠加步幅图案550。步幅图案550可基于步幅距离限定重叠输入数据元素之间的间隙。步幅图案550中的每个深色方框可表示重叠输入数据元素。如上文所描述,在步幅距离为二的情况下,所述间隙包括输入数据元素。当在区530上叠加步幅图案550时,所述步幅图案550的左上方拐角与区530的左上方拐角对准。基于步幅图案550中的对准和间隙,编译器可基于区530(-1,-1)的最左上方元素的坐标以及间隙信息而计算步幅图案550相对于原始输入数据阵列502的坐标。例如,步幅图案的第一元素与区530的最左上方元素重叠并且具有坐标(-1,-1),与第一元素在同一行上的步幅图案的第二元素与第一元素的间隙为1并且可具有坐标(-1,1)等。基于步幅图案的坐标以及可限定包括在原始输入数据阵列502中的输入数据元素的坐标范围的原始输入数据阵列502的尺寸,编译器可标识在补零区内的坐标的第一子集和在原始输入数据阵列502内的坐标的第二子集。坐标的第一子集在补零区中并且可表示产生零部分和(由于零的相乘)的零输入数据元素,而坐标的第二子集可表示产生非零部分和的非零输入数据元素。由坐标的第二子集表示的非零输入数据元素可以是具有原始输入数据阵列502中的权重数据元素(0,0)的重叠输入数据元素。
编译器可基于填补区中的坐标的第一子集和原始输入数据阵列502中的坐标的第二子集而确定存储器提取参数430的起始地址、步长、提取元素参数的数目。具体地说,存储器提取参数430的起始地址参数可对应于坐标的第二子集中的第一坐标。在图5B的实例中,起始地址可对应于输入数据阵列502的坐标(1,1),所述坐标可被转译成存储器子系统404中的地址。此外,所述步长基于如上文所描述的步幅距离。提取元素参数的数目可基于坐标的第二子集的大小。在图5B的实例中,坐标的第二子集的大小可以是18,因为原始输入数据阵列502中有可与权重数据元素(0,0)重叠的18个非零输入数据元素。因此,还可将提取元素参数的数目设置为18。
编译器还可基于补零区中的坐标的第一子集和原始输入数据阵列502中的坐标的第二子集而确定缓冲器写入参数452的目的地偏移量、步长和写入元素参数的数目。具体地说,基于坐标的第一子集,编译器可确定第一11个输入数据元素为零,这意味着需要跳过列求和缓冲器的第一11个条目,并且目的地偏移量参数可设置成11。此外,当获取18个输入数据元素时,将产生18个部分和,并且可将写入元素参数的数目设置为18。此外,与权重数据元素重叠的非零输入数据元素由步幅分离,这意味着当权重数据阵列处于输入数据阵列中的各种步幅位置时,重叠非零输入数据元素之间不存在间隙。因此,可将缓冲器写入参数452的步长参数设置为一。为了维持矩形形状,18个部分和可存储在列求和缓冲器中的9x2区中(其可基于一行中的输入数据元素的数目),并且将列求和缓冲器移位到右边,其中跳过第一列条目。
返回参考操作522和等式8,编译器可通过沿着行和列维度添加偏移量来基于权重数据元素的坐标而调整区530相对于填补输入数据阵列502的对准。例如,参看图5C,对于权重数据元素(1,1),编译器可使用等式8计算区530的左上方拐点的坐标并且获得(0,0)。也就是说,与权重数据元素(0,0)相比,区530从填补输入数据阵列502的左上方拐点并且相对于参考位置(-1,-1)向右和底部移位一个单位。区530的左上方拐点的坐标可变为(0,0),并且区530的坐标范围可变为(0,0)到(5,19)。通过此对准,表示待与权重数据元素(1,1)相乘的第一输入数据元素的区530的最左上方元素与在滤波器阵列504处于步幅位置(0,0)时的权重数据元素重叠。对于权重数据元素(1,1),区530以及步幅图案550与原始输入数据阵列502而非补零重叠。第一输入数据元素开始于坐标(0,0),并且可提取总共30个输入数据元素。此外,由于不存在零输入数据元素,因此不存在跳过列求和缓冲器的条目。
此外,对于权重数据元素(2,2),编译器可使用等式8计算区530的左上方拐点的坐标并且获得(1,1)。也就是说,编译器可将区530从填补输入数据阵列502(参考位置(-1,-1))的左上方拐点向右和底部移位两个单元。区530的坐标范围变成(1,1)到(6,20)。通过此对准,表示待与权重数据元素(2,2)相乘的第一输入数据元素的区530的最左上方元素与在滤波器阵列504处于步幅位置(0,0)时的权重数据元素重叠。对于权重数据元素(2,2),区530以及步幅图案550与原始输入数据阵列502而非补零重叠。第一输入数据元素开始于坐标(1,1),并且可提取总共27个输入数据元素。此外,由于不存在零输入数据元素,因此也不存在跳过列求和缓冲器的条目。为了维持矩形形状,27个部分和可存储在列求和缓冲器中的9x3区中(其可基于一行中的输入数据元素的数目),并且将列求和缓冲器移位到左边,其中跳过最后一列条目。
图5D示出用于图5A-图5C示出的卷积操作的针对权重数据元素(0,0)、(1,1)和(2,2)的存储器提取参数430和缓冲器写入参数452的实例,如上文所描述。
图6A-图6C示出用来执行正常卷积操作的加速器402的示例配置。在图6A-图6C的实例中,示出了按为2的速率和为2的步幅在滤波器阵列504与输入数据阵列502之间进行的扩张卷积操作。如图6A所示,扩张卷积操作的影响可以是在滤波器阵列504的相邻权重数据元素之间补零以从3x3扩展到5x5,并且执行补零滤波器阵列504与补零输入数据阵列502之间的正常卷积。
图5B和图5C中所描述的卷积操作可被修改以支持扩张卷积操作。具体地说,为了执行扩张卷积操作,处理引擎阵列410可加载滤波器阵列504的同一组权重数据元素,但通过基于区530的目标坐标范围而对用于滤波器阵列504的每个权重数据元素的输入数据元素的子集的选择将被修改以考虑扩张卷积操作的速率。具体地说,参考图6B,区530的左上方拐角元素相对于原始输入数据阵列502的坐标可基于以下等式:
Start_coordinatesdilated=(weight_r×rate-pad_west,weight_s×rate-pad_north) (等式9)
在等式9中,start_coordinatesdilated可指区530的左上方拐角的坐标,weight_r指代没有进行补零的原始滤波器阵列中的权重数据元素的行坐标,weight_s指代没有进行补零的原始滤波器阵列中的权重数据元素的列坐标,pad_west指代添加到输入数据阵列502的左边的零列的数目,而pad_north指代添加到输入数据阵列502的顶部的零行的数目。等式9的效果是对于不同权重数据元素,限定与扩展滤波器阵列504的权重数据元素重叠的输入数据元素的坐标的区530的左上方拐角元素的坐标的移位量值按所述速率按比例调整。
例如,参考图6B,扩展滤波器阵列504的权重数据元素(0,0)在原始滤波器阵列504中的同一坐标(0,0)处,因此区530的左上方拐角与补零输入数据阵列502的左上方拐角对准,并且相对于具有坐标(0,0)的原始输入数据阵列502的最左上方元素具有从(-1,-1)到(4,18)的一系列目标坐标。与图5B中相同,提取元素参数的数目和写入元素的数目可设置为18,而目的地偏移量参数可设定置为11。基于步幅将所述步长设置为2。
此外,对于对应于原始滤波器阵列504的权重数据元素(1,1)的扩展滤波器阵列504的权重数据元素(2,2),编译器可使用等式9计算区530的左上方拐点的坐标并且获得(1,1)。也就是说,与(扩展滤波器阵列和原始滤波器阵列504两者的)权重数据元素(0,0)相比,区530从填补的输入数据阵列502的左上方拐角向右和底部移位两个单元。区530的坐标范围变成(1,1)到(6,20)。通过此对准,表示待与扩展滤波器阵列504的权重数据元素(2,2)相乘的第一输入数据元素的区530的最左上方元素与在滤波器阵列504处于步幅位置(0,0)时的权重数据元素重叠。对于权重数据元素(2,2),区530以及步幅图案550与原始输入数据阵列502而非补零重叠。第一输入数据元素开始于坐标(1,1),并且可提取总共27个输入数据元素。此外,由于不存在零输入数据元素,因此也不存在跳过列求和缓冲器的条目。
此外,对于对应于原始滤波器阵列504的权重数据元素(2,2)的扩展滤波器阵列504的权重数据元素(4,4),编译器可使用等式9计算区530的左上方拐点的坐标并且获得(3,3)。也就是说,与(扩展滤波器阵列和原始滤波器阵列504两者的)权重数据元素(0,0)相比,区530从填补的输入数据阵列502的左上方拐角向右和底部移位四个单元。区530的坐标范围变成(3,3)到(8,22)。通过此对准,表示待与扩展滤波器阵列504的权重数据元素(4,4)相乘的第一输入数据元素的区530的最左上方元素与在滤波器阵列504处于步幅位置(0,0)时的权重数据元素重叠。对于权重数据元素(4,4),区530以及步幅图案550与原始输入数据阵列502而非补零重叠。第一输入数据元素开始于坐标(3,3),并且可提取总共24个输入数据元素。此外,由于不存在零输入数据元素,因此也不存在跳过列求和缓冲器的条目。图6C示出用于图6A-图6B示出的扩张卷积操作的针对补零滤波器阵列504的权重数据元素(0,0)、(2,2)和(4,4)的存储器提取参数430和缓冲器写入参数452的实例,如上文所描述。
图7包括示出上面可运行例如本文所描述的编译器730的主机系统700的实例的框图。所示出的主机系统700是计算装置的实例,并且包括处理器702、处理器存储器704、至少一个存储装置706、各种输入/输出(I/O)装置708和至少一个网络接口710。在图7的实例中,主机系统700还包括加速引擎712,所述加速引擎712可包括图4A-图4C的加速器402。在各种实例中,主机系统700可实施为数据中心中的服务器、台式计算机、膝上型计算机、平板电脑或智能电话,以及其它实例。在一些实例中,如下文所论述或包括在主机系统700中的操作或组件可执行或包括在其它计算机装置中。例如,编译器730可在主机系统700上执行,而加速引擎712位于不同主机系统处。
处理器702是可执行呈指令形式的程序代码的集成电路装置。程序代码可用于各种软件应用程序或工具,例如操作系统720或所示出的编译器730。当处理器702执行程序时,用于所述程序的指令可存储在处理器存储器704中。所述指令还可存储在其它地方,例如存储装置706上,并且可在处理器702需要时加载到处理器存储器704中。处理器702还可将处理器存储器704用于临时存储处理器702操作的其它数据。在各种实例中,处理器存储器704是易失性存储器类型,例如随机存取存储器的类型,但可替代地或另外,非易失性存储器类型可用于处理器存储器704。
存储装置706是可包括非易失性存储器的装置的实例。例如,存储装置706可以是磁盘驱动器、固态驱动器或光学驱动器,以及其它实例。存储装置706可进一步是非暂时性的,使得当存储装置706未通电时,存储在存储装置706上的程序代码和其它数据依然存在。
存储装置706是外围装置的一个实例,外围装置是可耦合到主机系统700以将功能添加到主机系统700的组件。外围装置的其它实例包括输入/输出装置108和网络接口710。输入/输出装置708可包括用户输入和输出装置,例如键盘、鼠标、触摸屏、麦克风、显示屏幕、扬声器、打印机和扫描器,以及其它实例。可使用网络接口卡实施的网络接口710可提供对一个或多个网络的接入。网络接口710可包括例如物理端口以用于连接网络缆线和/或无线天线以与WiFi和/或蜂窝网络通信。网络接口710还可被描述为I/O装置。
加速引擎712也是另一类型的外围装置或I/O装置。加速引擎712是被专门构建以执行可由处理器702执行但可由加速引擎712更快地执行的某些操作的装置。例如,加速引擎712可以是神经网络加速器,并且因此比起由处理器702执行计算的情况,能够更高效地执行神经网络的大规模并行计算。作为另一实例,加速引擎712可以是图形处理单元(GPU),并且可被优化以执行图形渲染所需的计算。可由加速引擎712实施的装置的其它实例包括密码加速器、压缩和解压缩加速器、3D加速器、正则表达式加速器、安全加速器等。
在各种实例中,加速引擎712可执行程序代码以执行某些操作。例如,当加速引擎712是神经网络加速器时,加速引擎712可被编程以执行特定神经网络,例如执行图像识别的神经网络或执行机器转译的神经网络。作为另一实例,为了支持神经网络的执行,加速引擎712可被编程以执行操作,例如将用于神经网络的数据从(例如)处理器存储器704复制到加速引擎712中、将用于神经网络的输入数据从处理器存储器704复制到加速引擎712中,和/或将结果从加速引擎712复制到处理器存储器704中,以及其它实例。
为了产生用于加速引擎712的程序代码,在各种实例中,主机系统700可执行编译器730。通常,编译器是将以人可读语言编写的程序代码转译为可由集成电路装置读取和处理的格式(例如,机器指令)的软件程序。在图7的实例中,加速引擎712是神经网络加速器,并且编译器730用于将神经网络描述编译为待由加速引擎712执行的指令。当加速引擎712实施不同类型的加速器时,可使用另一编译器。
可例如当操作系统720从输入/输出装置708接收键盘、鼠标、触摸屏、语音命令或其它输入时激活编译器730。输入还可包括用于编译器730的参数,例如用以编译和配置编译进程的选项的输入代码742。在激活编译器730后,处理器702可将用于编译器730的指令加载到处理器存储器704中,并且可执行所述指令。
在图7的实例中,编译器730包括各自执行不同操作以产生编译代码144的第一级732、第二级736和第三级740。在其它实例中,编译器730可将第一级732、第二级736和/或第三级740的操作组合到较少级中,或可将各级中的一个的操作划分到多个级中。
第一级732可接收并处理输入代码742。输入代码742可以例如Java、C++或Tensorflow以及许多其它实例等高级编程语言描述程序。输入代码742可描述例如执行图像识别、语音识别、机器转译或其它操作的步骤。可例如从存储装置706获得输入代码742。替代地,尽管此处未说明,但输入代码742可位于处理器存储器704中或可使用网络接口710从网络位置获得。输入代码742的处理可包括将输入代码742中所描述的操作分类为层,其中一个层的输出将输入提供到下一层。处理还可包括标识待由处理器702执行而非由加速引擎712执行的步骤。例如,通过驱动器722的执行,处理器702可能需要执行例如配置直接存储器存取(DMA)描述符以用于将数据移动到加速引擎712中或从加速引擎中移出数据以及其它实例等步骤。
第一级732的输出734可例如在层、节点和神经网络节点之间的连接中组织。第二级736可对此输出734执行中间处理。例如,在任何一个层中或在一层中的任何一个节点中执行的操作可能太多了以致加速引擎712无法同时执行。加速引擎712可能例如具有有限量的本地存储空间以用于计算所需的数据,或所述计算可能超过加速引擎712可一次执行的量。在此实例中,第一级732可将层或节点的操作分解成较小操作,所述较小操作可适配到加速引擎的本地存储器中和/或可适配到加速引擎712的计算容量中。第一级732的输出734的处理可包括其它步骤,例如安排或确定加速引擎712和/或处理器702将执行操作的次序,以及其它实例。
在各种实例中,第二级736的输出738包括待由加速引擎712的组件按执行步骤的次序执行的各种步骤。输出738可例如表示为数据流图,其中图中的节点表示存储器操作、计算和其它操作,并且节点之间的边缘或连接表示节点之间的相依性,例如数据相依性、存储器相依性或可操作相依性,以及其它实例。
第三级740可对第二级736的输出738操作,并且在产生待由加速引擎712执行的指令之前执行各种步骤。这些步骤可包括例如移除冗余依赖关系、通过将同步指令插入到代码中而解析或处置节点之间的依赖关系、标识存储器使用情况或存储器带宽使用上的可能优化以及其它操作。
在一些实例中,第三级740可包括数据调度器750以调度加速引擎712中的例如输入数据和权重数据之类的数据的移动以支持例如上文所描述的卷积操作和扩张卷积之类的各种操作。例如,数据调度器750可(例如,从数据流图形)获得指令以执行输入数据阵列与滤波器阵列之间的卷积操作(例如,正常卷积、扩张卷积等)以产生卷积输出阵列。基于在加速引擎712处的求和缓冲器的大小,数据调度器750可确定适配到求和缓冲器中的输出平铺块,并且可确定用于筹备卷积操作以一次产生一个输出平铺块的指令序列。对于每个指令,数据调度器750可确定将滤波器阵列的权重数据元素加载到处理引擎阵列410中的序列,并且基于上文在图5A-图6C中描述的技术而为每个权重数据元素确定待加载到处理引擎410中的输入数据的子集,所述子集也是要提供给处理引擎阵列410以与权重数据元素相乘的输入数据的子集,所述技术例如执行来自求和缓冲器的投射操作以基于步幅而确定输入数据阵列的区域(例如,区530),基于权重数据元素的坐标和扩张卷积的速率而使区相对于不同权重数据元素的输入数据阵列移位,将步幅图案重叠到移位区上,并且确定与步幅图案重叠的输入数据元素的坐标。数据调度器750可将坐标转译为地址并且将所述地址包括作为存储器提取参数430指令的部分。此外,基于投射操作,数据调度器750还可确定包括目的地偏移量和写入元素的数目的一组缓冲器写入参数452。数据调度器750可随后产生用以控制加速引擎712的指令以加载权重数据元素和输入数据元素的对应子集以执行卷积操作。
第三级740的输出是编译代码744,其可包括呈二进制格式的机器指令。在一些实例中,编译代码744可存储在处理器存储器704中。替代地或另外,可将编译代码744复制到存储装置706或到网络位置。如上所指出,加速引擎712可位于不同主机系统处,在此情况下,编译代码744可通过网络接口710发送到另一主机系统。
在图7的实例中,主机系统700可执行驱动器722,所述驱动器722还可被称作装置驱动器或运行时驱动器,其管理加速引擎712。驱动器722可提供在主机系统700上(或另一主机系统上)执行的应用程序与加速引擎712之间的接口。例如,驱动器722可提供应用程序接口(API),所述API限定用于将输入数据馈送到加速引擎712并且限定要对输入数据执行的操作的功能。在此实例和其它实例中,驱动器722可配置加速引擎712以执行所述操作。例如,驱动器722可标识加速引擎712将执行的神经网络,以及用于神经网络的编译代码744在处理器存储器704中或存储装置706上所处的位置。驱动器722还可将编译代码144加载到加速引擎712中或使加速引擎712加载所述编译代码,可加载或使加速引擎712加载神经网络将操作的输入数据,和/或可使加速引擎712开始执行输入数据。在加速引擎712结束后,加速引擎712可通知驱动器722,并且驱动器722可将结果传递回到请求所述结果的应用程序。
图8示出用于执行扩张卷积操作的示例方法800的流程图。方法800可由例如加速器402的各种组件执行,所述加速器402包括存储器子系统404、处理引擎阵列410、求和缓冲器412和控制器422。
方法800以步骤802开始,其中控制器(例如,控制器422)可将权重数据元素阵列的第一权重数据元素从存储器(例如,存储器子系统404)加载到脉动阵列(例如,处理引擎阵列410)中,第一权重数据元素处于权重数据元素阵列内的第一坐标处。可基于第一坐标从存储器子系统404获得第一权重数据元素。权重数据元素可以存储在存储器子系统404中的地址中,这些地址反映权重数据元素阵列中的权重数据元素的坐标。控制器422可在第一计算指令中具备第一权重数据元素的地址,并且可在执行第一计算指令后基于来自存储器子系统404的地址而获得第一权重数据元素。此外,如上文所描述,每个处理引擎411可存储权重数据元素,并且控制器可将第一权重数据元素发送到处理引擎411以供存储。
在步骤804中,控制器可基于权重数据元素阵列中的第一权重数据元素的第一坐标、扩张卷积操作的步幅和扩张卷积操作的速率而选择输入数据元素阵列的输入数据元素的第一子集。输入数据元素的第一子集将与处理引擎411处的第一权重数据元素相乘以产生第一部分和,所述第一部分和可被转发到求和缓冲器412的列求和缓冲器(例如,列求和缓冲器442)。可基于包括第一组存储器获取参数430的第一计算指令而选择第一子集,所述第一子集可包括起始地址、步长和元素的数目。当权重数据元素阵列处于扩张卷积操作中的输入数据元素阵列内的各种步幅位置时,起始地址和元素的数目可反映与第一权重数据元素重叠的输入数据元素。对输入数据元素的第一子集的确定可基于投射操作。具体地说,求和缓冲器的尺寸(例如,列和行的数目)可限定包括输出数据阵列中的第一区的输出数据元素的输出平铺块。第一区可由输出数据阵列中的实际坐标的范围限定。基于进入输出数据阵列坐标的第一区和扩张卷积的步幅的投射操作,编译器可确定包括待与第一权重数据元素卷积的输入数据元素的第二区。第二区可由输入数据元素的目标坐标的范围限定。第二区(和目标坐标的范围)可基于权重数据阵列中的第一权重数据元素的坐标而移位一偏移量,并且基于扩张卷积操作的速率而移位一比例因子。编译器接着可将步幅图案与移位的第二区对准以标识与步幅图案重叠的第二区的位置。步幅图案限定与权重数据元素重叠的输入数据元素的位置,并且反映扩张卷积操作的步幅。基于重叠,编译器可确定重叠输入数据元素的一组目标坐标。可基于第一重叠输入数据元素的坐标确定第一子集的起始地址,而重叠输入数据元素的计数可设置提取元素参数的数目。所述步长参数基于步幅图案而设置为二,所述步幅图案可反映扩张卷积操作的步幅。
在步骤806中,控制器可从来自存储器的第一地址开始将第一子集的每个输入数据元素流式传输到脉动阵列中以与第一权重数据元素相乘以计算第一部分和。在步骤802中,可将输入数据元素依次发送到存储第一权重数据元素的处理引擎411。处理引擎411可将每个输入数据元素与第一权重数据元素相乘以产生第一部分和。第一地址可以是上文所描述的第一子集的起始地址。可基于包括第一组缓冲器写入参数452的第一计算指令而将第一部分和发送到列求和缓冲器中的第一目的地地址,所述第一组缓冲器写入参数452可包括目的地偏移量、步长和写入元素的数目。可将第一部分和添加到存储在第一目的地地址处的数据。第一组缓冲器写入参数452还可基于移位步幅图案,如图6B所描述。
在步骤808中,控制器可将权重数据元素阵列的第二权重数据元素从存储器子系统404加载到处理引擎阵列410中,所述第二权重数据元素处于权重数据元素阵列内的第二坐标处。可基于第二坐标从存储器子系统404获得第二权重数据元素。控制器422可在第二计算指令中具备第二权重数据元素的地址,并且可在执行第二计算指令后基于来自存储器子系统404的地址而获得第二权重数据元素。此外,第二权重数据元素可替换存储在处理引擎411中的第一权重数据元素中。
在步骤810中,控制器可基于权重数据元素阵列中的第二权重数据元素的第二坐标、扩张卷积操作的步幅和扩张卷积操作的速率而选择输入数据元素阵列中的输入数据元素的第二子集。输入数据元素的第二子集将在处理引擎411处与第二权重数据元素相乘以产生第二部分和,所述第二部分和可被转发到列求和缓冲器。可基于包括第二组存储器提取参数430的第二计算指令而选择第二子集。当权重数据元素阵列处于扩张卷积操作中的输入数据元素阵列内的各种步幅位置时,第二子集可以是与第二权重数据元素重叠的那些输入数据元素。对输入数据元素的第二子集的确定可类似于如在步骤804中所描述的那样。
在步骤812中,控制器可从来自存储器的第二地址开始将第二子集的每个输入数据元素流式传输到脉动阵列中以与第二权重数据元素相乘以计算第二部分和。在步骤812中,可将输入数据元素依次发送到存储第二权重数据元素的处理引擎411。处理引擎411可将每个输入数据元素与第二权重数据元素相乘以产生第二部分和。第二地址可以是上文所描述的第二子集的起始地址。可基于包括第二组缓冲器写入参数452的第二计算指令而将第二部分和发送到列求和缓冲器中的第二目的地地址。可将第二部分和添加到存储在第二目的地地址处的数据,所述第二目的地地址中的一些或全部可与第一目的地地址重叠。第二组缓冲器写入参数452可基于移位步幅图案,如图6B所描述。
在步骤814中,控制器可基于第一部分和与第二部分和产生转置卷积操作的输出数据阵列。如上文所描述,第一目的地地址和第二目的地地址中的一些可重叠,并且输出数据阵列的输出数据元素中的一些可包括第一部分和与第二部分和的总和。输出数据阵列的其它输出数据元素可通过第一部分和与第二部分和的叠加而形成。
图9示出产生用于神经网络处理器的指令以执行扩张卷积操作的示例方法900的流程图。方法900可由例如图8的编译器830之类的编译器执行。
方法900开始于步骤902,其中编译器可基于权重数据阵列和输入数据阵列而接收指示待由脉动阵列(例如,处理引擎阵列410)执行的扩张卷积操作的步幅和速率的第一信息,以产生输出数据阵列。可从例如可表示使用扩张卷积操作的结果的应用程序(图像处理操作等)的输入代码842接收第一信息。
在步骤904中,编译器可接收指示例如列求和缓冲器442之类的求和缓冲器的尺寸的第二信息。求和缓冲器累加并且存储来自脉动阵列的部分和以用于扩张卷积操作。还可从例如输入代码842接收第二信息。如上文所描述,尺寸信息可用于确定输出平铺块,并且经由投射操作可用于确定用于权重数据阵列的每个权重数据元素的输入数据阵列的输入数据元素的子集。
在步骤906中,编译器可针对权重数据阵列的每个权重数据元素确定待与每个权重数据元素相乘以计算部分和的输入数据阵列的输入数据元素的子集。对输入数据元素的子集的确定可基于投射操作。返回参考图5B和图5C,求和缓冲器的尺寸(例如,列和行的数目)可限定包括输出数据阵列中的第一区的输出数据元素的输出平铺块。第一区可由输出数据阵列中的实际坐标的范围限定。基于进入输出数据阵列坐标的第一区和扩张卷积的步幅的投射操作,编译器可确定包括待与第一权重数据元素卷积的输入数据元素的第二区。第二区可由输入数据元素的目标坐标的范围限定。第二区(和目标坐标的范围)可基于权重数据阵列中的第一权重数据元素的坐标而移位一偏移量,并且基于扩张卷积操作的速率而移位一比例因子。编译器接着可将步幅图案与移位的第二区对准以标识与步幅图案重叠的第二区的位置。步幅图案限定与权重数据元素重叠的输入数据元素的位置,并且反映扩张卷积操作的步幅。基于重叠,编译器可确定重叠输入数据元素的一组目标坐标。在确定第一权重数据元素的重叠输入数据元素的一组目标坐标之后,编译器可执行坐标到地址映射操作以确定存储器中的输入数据元素的第一子集的包括起始地址的地址以及地址的计数,所述计数可指示输入数据元素的第一子集的计数。
在步骤908中,编译器可针对权重数据阵列的每个权重数据元素确定求和缓冲器的目的地地址以接收部分和,基于在步骤906中确定的每个权重数据元素的输入数据元素的子集而确定目的地地址。例如,参考图6A-图6C,基于输入数据元素的子集的坐标,编译器可确定零部分和的数目、待发送到求和缓冲器的部分和的数目等。基于这些信息,编译器可确定起始目的地地址以及用于接收部分和的目的地地址的计数。
在步骤910中,编译器可产生用于权重数据阵列的每个权重数据元素的计算指令以包括指示目的地地址和输入数据元素的子集的第三信息。第三信息可包括例如起始源地址和基于步骤906中的投射操作的输入数据元素的计数。所述信息还可包括例如起始目的地地址、指示邻近目的地地址之间没有间隙的为一的步长以及基于步骤908中的操作的目的地地址的计数。计算指令还可基于权重数据阵列中的每个权重数据元素的坐标而包括存储器中的每个权重数据元素的地址。
还可以根据以下条款来描述本公开的实施例:
1.一种方法,包括:
将权重数据元素阵列的第一权重数据元素从存储器加载到脉动阵列中,所述第一权重数据元素在所述权重数据元素阵列内的第一坐标处;
接收输入数据元素阵列的输入数据元素的第一子集的选择,所述第一子集基于所述第一权重数据元素的所述第一坐标、扩张卷积操作的步幅和所述扩张卷积操作的速率而选择;
从来自所述存储器的第一地址开始将选定的第一子集的每个输入数据元素流式传输到所述脉动阵列中以与所述第一权重数据元素相乘以计算第一部分和;
将来自所述存储器的第二权重数据元素加载到所述脉动阵列中,所述第二权重数据在所述权重数据元素阵列内的第二坐标处;
接收所述输入数据元素阵列的输入数据元素的第二子集的选择,所述第二子集基于所述第二权重数据元素的所述第二坐标、所述扩张卷积操作的所述步幅和所述扩张卷积操作的所述速率而选择;
从来自所述存储器的第二地址开始将选定的第二子集的每个输入数据元素流式传输到所述脉动阵列中以与所述第一权重数据元素相乘以计算第二部分和;以及
基于所述第一部分和与所述第二部分和而产生所述扩张卷积操作的输出数据阵列。
2.根据条款1所述的方法,其进一步包括:
用存储在所述求和缓冲器的第一连续地址处的第一数据累加第一部分和;
用存储在所述求和缓冲器的第二连续地址处的第二数据累加第二部分和;以及
在累加所述第一部分和与所述第二部分和之后,基于存储在所述第一连续地址和所述第二连续地址处的数据而产生所述输出数据阵列,
其中输入数据元素的所述第一子集的计数和输入数据元素的所述第二子集的计数基于所述求和缓冲器的大小和所述扩张卷积操作的所述速率。
3.根据条款2所述的方法,其中所述扩张卷积在包括所述输入数据元素阵列和所述权重数据元素阵列的补零二维图像数据之间进行;
其中所述方法进一步包括:在所述求和缓冲器处基于所述补零图像数据的与所述扩张卷积操作中的所述第一权重数据元素重叠的补零元素的数目而在第三地址处开始存储所述第一部分和。
4.根据条款3所述的方法,其中所述补零二维图像数据与所述权重数据元素阵列之间的所述扩张卷积不涉及所述补零图像数据的补零元素与所述权重数据元素阵列之间的相乘;并且
其中将所述第二部分和添加到在第四地址处开始的所述求和缓冲器中存储的数据元素,所述第四地址与所述第三地址之间的差对应于在所述扩张卷积操作中与所述第一权重数据元素重叠的补零元素的所述数目。
5.根据条款4所述的方法,其进一步包括:
执行一组指令以执行所述扩张卷积操作,
其中所述一组指令包括:
第一信息,其指示所述存储器的所述第一地址、输入数据元素的所述第一子集的所述计数以及输入数据元素的所述第一子集的输入数据元素之间的间隙;以及
第二信息,其指示所述存储器的所述第二地址、输入数据元素的所述第二子集的所述计数以及输入数据元素的所述第二子集的输入数据元素之间的间隙;
其中接收输入数据元素的所述第一子集的所述选择包括从所述一组指令提取所述第一信息;并且
其中接收输入数据元素的所述第二子集的所述选择包括从所述一组指令提取所述第二信息。
6.一种存储指令的非暂时性计算机可读介质,所述指令在由一个或多个硬件处理器执行时使所述一个或多个硬件处理器:
将权重数据元素阵列的第一权重数据元素从存储器加载到脉动阵列中;
选择输入数据元素的子集,所述子集基于指示扩张卷积操作的速率和所述权重数据元素阵列内的所述第一权重数据元素的坐标的信息而选择;
将输入数据元素的所述子集从所述存储器加载到所述脉动阵列中以执行扩张卷积操作的第一计算;并且
控制所述脉动阵列以基于所述第一权重数据元素和所述子集执行所述第一计算,以产生输出数据阵列的第一输出数据元素。
7.根据条款6所述的非暂时性计算机可读介质,其中基于所述扩张卷积操作的步幅选择所述子集。
8.根据条款7所述的非暂时性计算机可读介质,其中所述输入数据元素存储在所述存储器内的连续地址空间中。
9.根据条款8所述的非暂时性计算机可读介质,其中基于在每个选定输入数据元素之间跳过一定数目的输入数据元素而选择所述输入数据元素的所述子集,跳过的输入数据元素的所述数目基于所述步幅。
10.根据条款8或9所述的非暂时性计算机可读介质,其中所述指令包括多个参数,所述参数包括:
所述存储器中的输入数据元素的所述子集的起始源地址;
跳过参数,其指示跳过的输入数据元素的所述数目;以及
所述输入数据元素的所述子集的数目。
11.根据条款10所述的非暂时性计算机可读介质,其中所述起始源地址基于所述扩张卷积操作的所述速率。
12.根据条款6至11中任一项所述的非暂时性计算机可读介质,其中所述子集是第一子集;
其中所述指令在由一个或多个硬件处理器执行时使所述一个或多个硬件处理器:
控制所述脉动阵列以基于所述第一权重数据元素和所述子集执行所述第一计算,以产生第一部分和;
控制求和缓冲器以累加所述第一部分和;
将所述权重数据元素阵列的第二权重数据元素从存储器加载到所述脉动阵列中;
将所述输入数据元素的第二子集从所述存储器选入到所述脉动阵列中;
控制所述脉动阵列以基于所述第二权重数据元素和所述第二子集执行第二计算,以产生第二部分和;并且
控制所述求和缓冲器以累加所述第二部分和,以产生所述第一输出数据元素。
13.根据条款12所述的非暂时性计算机可读介质,其中基于所述求和缓冲器的大小选择所述第一输入数据元素的所述第一子集的第一大小和所述第一输入数据元素的所述第二子集的第二大小。
14.根据条款13所述的非暂时性计算机可读介质,其中所述指令在由一个或多个硬件处理器执行时使所述一个或多个硬件处理器基于包括在所述第一输出数据元素中的零输出数据元素的数目而将所述第一部分和存储在缓冲器的地址处。
15.根据条款14所述的非暂时性计算机可读介质,其中所述指令包括一组参数,所述一组参数包括:
所述存储器中的所述输入数据元素的所述第一子集的第一起始源地址;以及
所述存储器中的所述输入数据元素的所述第二子集的第二起始源地址;并且
其中所述第一起始源地址和所述第二起始源地址基于所述扩张卷积的所述速率而彼此偏移。
16.根据条款15所述的非暂时性计算机可读介质,其中所述一组参数包括用于接收所述第一部分和的所述求和缓冲器的第一起始目的地地址和用于接收所述第二部分和的所述求和缓冲器的第二起始目的地地址。
17.一种设备,包括:
存储器,其存储一组指令;以及
一个或多个硬件处理器,其被配置成执行所述一组指令以:
基于权重数据阵列和输入数据阵列接收指示待由脉动阵列执行的扩张卷积操作的速率和步幅的第一信息,以产生输出数据阵列;
接收指示求和缓冲器的尺寸的第二信息;
针对所述权重数据阵列的每个权重数据元素,确定所述输入数据阵列的待与所述每个权重数据元素相乘以计算部分和的输入数据元素的子集,输入数据元素的所述子集基于来自所述求和缓冲器的投射操作并且基于所述扩张卷积的所述速率、所述扩张卷积的所述步幅、所述求和缓冲器的所述尺寸和所述权重数据阵列中的所述每个权重数据元素的坐标而确定;
针对所述权重数据阵列的所述每个权重数据元素,基于输入数据元素的所述子集而确定所述求和缓冲器的目的地地址,以接收所述部分和;并且
产生用于所述权重数据阵列的每个权重数据元素的计算指令,以包括指示所述目的地地址和输入数据元素的所述子集的第三信息。
18.根据条款17所述的设备,其中所述一个或多个硬件处理器被配置成对所述每个权重数据元素执行所述一组指令以:
基于所述求和缓冲器的所述尺寸信息和所述扩张卷积操作的所述步幅确定与所述输入数据阵列的第一输入数据元素对准的投射区;
基于所述权重数据阵列中的所述每个权重数据元素的坐标和所述扩张卷积的所述速率而使所述投射区相对于所述输入数据阵列的所述第一输入数据元素移位一偏移量;
将步幅图案与移位后的投射区对准,所述步幅图案基于所述扩张卷积操作的步幅;
基于所述尺寸信息确定与所述步幅图案重叠的所述输入数据阵列的输入数据元素的坐标;并且
基于所述坐标确定用于所述每个权重数据元素的输入数据元素的所述子集。
19.根据条款18所述的设备,其中所述一个或多个硬件处理器被配置成执行所述一组指令,以基于按所述扩张卷积的所述速率按比例缩放所述权重数据元素中的所述第一权重数据元素的所述坐标而确定所述偏移量。
20.根据条款19所述的设备,其中所述一个或多个硬件处理器被配置成对所述每个权重数据元素执行所述一组指令以:
确定所述存储器中的所述输入数据元素的所述子集中的第一个的源地址;并且
在所述计算指令中包括指示所述地址、包括在所述输入数据阵列的所述子集中的输入数据元素的数目以及步长的信息,以使得所述脉动阵列能够从所述存储器加载输入数据元素的所述子集。
图10包括示例网络1000的图式,所述网络可包括一个或多个主机系统,例如图7所示的主机系统。例如,图10的示例网络1000包括多个节点1002a-1002h,其中的一个或多个节点可以是例如在图7中示出的主机系统。节点1002a-1002h中的其它节点可以是其它计算装置,其中的每个节点至少包括用于存储程序指令的存储器、用于执行指令的处理器,以及用于连接到网络1000的网络接口。
在各种实例中,网络1000可用于处理数据。例如,可在节点1002a-1002h中的一个处或从网络1000可与之通信的其它网络1008接收输入数据。在此实例中,输入数据可被引导到网络1000中包括加速引擎的节点,以供加速引擎操作并产生结果。所述结果可随后传送到所述节点或从中接收输入数据的其它网络。在各种实例中,输入数据可从各种源累加,所述源包括节点1002a-1002h中的一个或多个和/或位于其它网络1008中的计算装置,并且累加的输入数据可被引导到网络1000中的一个或多个主机系统。来自主机系统的结果随后可分布回到从中收集所述输入数据的源。
在各种实例中,节点1002a-1002h中的一个或多个可负责操作,例如累加输入数据以供主机系统操作、记录哪些主机系统忙碌以及哪些主机系统可接受更多工作、确定主机系统是否正确地和/或最高效地操作、监测网络安全和/或其它管理操作。
在图10的实例中,节点1002a-1002h使用具有点对点链路的交换架构彼此连接。所述交换架构包括多个交换机1004a-1004d,所述交换机可布置在例如Clos网络之类的多层网络中。在局域网(LAN)区段之间筛选和转发包的网络装置可被称作交换机。交换机通常在数据链路层(层2)处操作,并且有时在开放系统互连(OSI)参考模型的网络层(层3)处操作,并且可支持若干包协议。图10的交换机1004a-1004d可连接到节点1002a-1002h,并且在任何两个节点之间提供多个路径。
网络1000还可包括用于与其它网络1008连接的一个或多个网络装置,例如路由器1006。路由器使用报头和转发表来确定转发包的最佳路径,并且使用例如因特网控制消息协议(ICMP)之类的协议彼此通信并且配置任何两个装置之间的最佳路由。图10的路由器1006可用于连接到其它网络1008,例如子网、LAN、广域网(WAN)和/或互联网。
在一些实例中,网络1000可包括许多不同类型的网络中的任一种或组合,例如电缆网络、互联网、无线网络、蜂窝网络和其它私用和/或公用网络。互连交换机1004a-1004d和路由器1006(如果存在)可称作交换机结构1010、结构、网络结构或简称为网络。在计算机网络的上下文中,术语“组构”和“网络”在本文中可互换使用。
节点1002a-1002h可以是表示用户装置、服务提供商计算机或第三方计算机的主机系统、处理器节点、存储子系统和I/O机箱的任何组合。
用户装置可包括访问应用程序1032(例如网络浏览器或移动装置应用程序)的计算装置。在一些方面,应用程序1032可由计算资源服务或服务提供商托管、管理和/或提供。应用程序1032可允许用户与服务提供商计算机交互以例如访问网络内容(例如网页、音乐、视频等)。用户装置可以是计算装置,例如移动电话、智能电话、个人数字助理(PDA)、膝上型计算机、上网本计算机、台式计算机、精简客户端装置、平板计算机、电子书(e-book)阅读器、游戏控制台等。在一些实例中,用户装置可以经由其它网络1008与服务提供商计算机通信。另外,用户装置可以是分布式系统的部分,所述分布式系统由服务提供商计算机管理、控制或另外是服务提供商计算机的一部分(例如,与服务提供商计算机集成的控制台装置)。
图10的节点还可表示一个或多个服务提供商计算机。一个或多个服务提供商计算机可以提供被配置成在用户装置上运行的原生应用程序,用户可以与所述原生应用程序交互。在一些实例中,服务提供商计算机可以提供计算资源,例如但不限于客户端实体、低时延数据存储、耐久的数据存储、数据存取、管理、虚拟化、基于云的软件解决方案、电子内容性能管理等等。服务提供商计算机还可用于向用户提供网页寄存、数据库化、计算机应用程序开发和/或实施平台、前述内容的组合等。在一些实例中,服务提供商计算机可被提供为在托管计算环境中实施的一个或多个虚拟机。托管计算环境可包括一个或多个快速提供和释放的计算资源。这些计算资源可包括计算、网络连接和/或存储装置。托管计算环境还可以被称为云计算环境。服务提供商计算机可包括一个或多个服务器,其可能布置在集群中,布置为服务器集群,或者作为彼此不相关联的个别服务器,并且可托管应用程序1032和/或基于云的软件服务。这些服务器可以被配置为集成的分布式计算环境的一部分。在一些方面,服务提供商计算机可另外或替代地包括计算装置,例如手机、智能手机、个人数字助理(PDA)、膝上型计算机、桌上型计算机、上网本计算机、服务器计算机、精简客户端装置、平板计算机、游戏控制台等。在一些情况下,服务提供商计算机可与一个或多个第三方计算机通信。
在一个示例配置中,节点1002a-1002h可包括至少一个存储器1018和一个或多个处理单元(或处理器1020)。处理器1020可以硬件、计算机可执行指令、固件或其组合实施。处理器1020的计算机可执行指令或固件实施方案可包括以任何合适的编程语言编写的用于执行所描述的各种功能的计算机可执行或机器可执行指令。
在一些情况下,硬件处理器1020可以是单核处理器或多核处理器。多核处理器可包括同一处理器内的多个处理单元。在一些实例中,多核处理器可共享某些资源,例如总线和第二级或第三级高速缓存。在一些情况下,单核或多核处理器中的每个核心还可包括多个执行逻辑处理器(或执行线程)。在此类核心(例如,具有多个逻辑处理器的核心)中,也可共享执行管线的若干阶段以及较低级别的高速缓存。
存储器1018可存储可在处理器1020上加载和执行的程序指令,以及在执行这些程序期间产生的数据。取决于节点1002a-1002h的配置和类型,存储器1018可以是易失性的(例如RAM)和/或非易失性的(例如ROM、快闪存储器等)。存储器1018可包括操作系统1028、一个或多个数据存储区1030、一个或多个应用程序1032、一个或多个驱动程序1034和/或用于实施本文所公开的特征的服务。
操作系统1028可支持节点1002a-1002h基本功能,例如调度任务、执行应用程序,和/或控制器外围装置。在一些实施方案中,服务提供商计算机可托管一个或多个虚拟机。在这些实施方案中,每个虚拟机可被配置成执行其自身的操作系统。操作系统的实例包括Unix、Linux、Windows、Mac OS、iOS、Android等。操作系统1028也可以是专属操作系统。
数据存储区1030可包括由操作系统1028、应用程序1032或驱动程序1034使用和/或在其上操作的永久性或暂时性数据。此类数据的实例包括网页、视频数据、音频数据、图像、用户数据等。在一些实施方案中,数据存储区1030中的信息可通过网络1008提供给用户装置。在一些情况下,数据存储区1030可另外或替代地包括存储的应用程序和/或驱动程序。替代地或另外,数据存储区1030可存储标准和/或专属软件库,和/或标准和/或专属应用程序用户接口(API)库。存储在数据存储区1030中的信息可以是机器可读目标代码、源代码、解译代码或中间代码。
驱动程序1034包括可提供节点中的组件之间的通信的程序。例如,一些驱动程序1034可提供操作系统1028与额外存储区1022、网络装置1024和/或I/O装置1026之间的通信。替代地或另外,一些驱动程序1034可提供应用程序1032与操作系统1028、和/或应用程序1032与可由服务提供商计算机访问的外围装置之间的通信。在许多情况下,驱动程序1034可包括提供易于理解的功能的驱动程序(例如,打印机驱动程序、显示器驱动程序、硬盘驱动程序、固态装置驱动程序)。在其它情况下,驱动程序1034可提供专属或专用功能。
服务提供商计算机或服务器还可包括额外存储区1022,其可包括可移除存储区和/或不可移除存储区。额外存储区1022可包括磁性存储区、光盘、固态盘、快闪存储器和/或磁带存储区。额外存储区1022可与节点1002a-1002h容纳在相同的机箱中,或可在外部壳体中。存储器1018和/或额外存储区1022以及其相关联的计算机可读介质可为计算装置提供计算机可读指令、数据结构、程序模块和其它数据的非易失性存储。在一些实施方案中,存储器1018可包括多种不同类型的存储器,例如SRAM、DRAM或ROM。
可移除和不可移除的存储器1018和额外存储区1022是计算机可读存储介质的实例。例如,计算机可读存储介质可包括以用于存储信息的方法或技术实施的易失性或非易失性、可移除或不可移除介质,所述信息包括例如计算机可读指令、数据结构、程序模块或其它数据。存储器1018和额外存储区1022是计算机存储介质的实例。可存在于节点1002a-1002h中的额外类型的计算机存储介质可包括但不限于PRAM、SRAM、DRAM、RAM、ROM、EEPROM、闪存存储器或其它存储器技术、CD-ROM、DVD或其它光学存储装置、盒式磁带、磁带、磁盘存储装置或其它磁性存储装置、固态驱动器或一些其它介质,其可用于存储所要信息并且可由节点1002a-1002h接入。计算机可读介质还包括任何上述介质类型的组合,包括一种介质类型的多个单元。
替代地或另外,计算机可读通信介质可包括计算机可读指令、程序模块或在例如载波或其它传输之类的数据信号内传输的其它数据。然而,如本文所使用,计算机可读存储介质不包括计算机可读通信介质。
节点1002a-1002h还可包括I/O装置1026,例如键盘、鼠标、笔、语音输入装置、触摸输入装置、显示器、扬声器、打印机等。节点1002a-1002h还可包括一个或多个通信通道1036。通信通道1036可提供介质,节点1002a-1002h的各种组件可通过所述介质进行通信。一个或多个通信通道1036可呈总线、环、交换结构或网络的形式。
节点1002a-1002h还可含有网络装置1024,其允许节点1002a-1002h与存储的数据库、另一计算装置或服务器、用户终端和/或网络900上的其它装置通信。
在一些实施方案中,网络装置1024是外围装置,例如基于PCI的装置。在这些实施方案中,网络装置1024包括用于与主机装置通信的PCI接口。术语“PCI”或“基于PCI”可用于描述PCI系列总线协议中的任何协议,包括原始PCI标准、PCI-X、加速图形端口(AGP)和快速PCI(PCIe)或基于本文所论述的PCI协议的任何其它改进或衍生协议。基于PCI的协议是用于将例如局部外围装置之类的装置连接到主机装置的标准总线协议。标准总线协议是一种数据传输协议,其规范已由各个制造商限定并采用。制造商确保兼容装置与实施总线协议的计算系统兼容,反之亦然。如本文所使用,基于PCI的装置还包括使用非易失性存储器高速(NVMe)通信的装置。NVMe是用于使用PCIe存取附接到计算系统的非易失性存储介质的装置接口规范。例如,总线接口模块可实施NVMe,并且网络装置1024可使用PCIe接口连接到计算系统。
本文所描述的模块可以是软件模块、硬件模块或其合适的组合。如果模块是软件模块,则模块可体现在非暂时性计算机可读介质上,并且由本文所描述的任何计算机系统中的处理器处理。应注意,所描述的过程和架构可在任何用户交互之前实时或以异步模式执行。可按前文图中推荐的方式来配置模块,和/或本文所描述的功能可由作为单独模块存在的一个或多个模块提供,和/或本文所描述的模块功能可分散在多个模块上。
因此,应在说明性意义上而非限制性意义上看待说明书和图式。然而,将显而易见的是,可以在不脱离权利要求书中阐述的本公开的更广精神和范围的情况下对其进行各种修改和改变。
其它变化在本公开的精神内。因此,虽然所公开的技术可接受各种修改和替代构造,但其某些说明的实例已在图中示出并且已在上文详细描述。然而,应理解,无意将本公开限制在所公开的特定形式,但相反地,意在涵盖落入所附权利要求中所限定的本公开的精神和范围内的所有修改、替代构造和等同物。
除非本文另有说明或与上下文明显矛盾,否则在描述所公开实例的上下文中(尤其在所附权利要求书的上下文中)使用词语“一(a/an)”和“所述”以及类似指示物应理解为涵盖单数和复数。除非另有说明,否则术语“包括(comprising)”、“具有”、“包括(including)”和“含有”应被解释为开放式术语(即,意为“包括但不限于”)。术语“连接”应理解为部分或全部地包含在内、附接到或接合在一起,即使是在存在中间物的情况下也是如此。除非本文中另外指示,否则本文中对值范围的叙述仅仅旨在充当单独地提及落入所述范围内的每个单独值的简写方法,并且将每个单独值并入本说明书中,就如同单独在本文中对其进行叙述一样。除非本文另有说明或以其它方式与上下文明显矛盾,否则本文所述的所有方法都可按任何合适的顺序执行。除非另有主张,否则本文中提供的任何和所有实例或示例性语言(例如,“例如”)的使用仅旨在更好地阐明本公开的实例,而不构成对本公开的范围的限制。本说明书中的任何语言都不应被解释为指示实践本公开所必需的任何未要求的要素。
除非另外具体陈述,否则例如词组“X、Y或Z中的至少一个”之类的分离性语言在如所使用的上下文内意欲理解为一般呈现项目、术语等可以是X、Y或Z,或其任何组合(例如X、Y和/或Z)。因此,此类分离性语言一般无意且不应暗示某些实例要求X中的至少一个、Y中的至少一个或Z中的至少一个各自都存在。
本文中描述本公开的各种实例,包括本发明人已知的用于执行本公开的最佳模式。在阅读上述描述之后,本领域的技术人员将清楚那些实例的变化。本发明人期望本领域的技术人员按需要采用此类变化,并且本发明人意图以不同于本文中特定描述的其它方式来实践本公开。因此,本公开包括适用法律所允许的在此随附的权利要求书中所述的主题的所有修改和等效物。此外,除非本文另外指示或以其它方式明显与上下文相矛盾,否则本公开涵盖上文所描述的元件以其所有可能的变化形式的任何组合。
Claims (15)
1.一种存储指令的非暂时性计算机可读介质,所述指令在由一个或多个硬件处理器执行时使所述一个或多个硬件处理器:
将权重数据元素阵列的第一权重数据元素从存储器加载到脉动阵列中;
选择输入数据元素的子集,所述子集基于指示扩张卷积操作的速率和所述权重数据元素阵列内的所述第一权重数据元素的坐标的信息而选择;
将输入数据元素的所述子集从所述存储器加载到所述脉动阵列中以执行扩张卷积操作的第一计算;并且
控制所述脉动阵列以基于所述第一权重数据元素和所述子集执行所述第一计算,以产生输出数据阵列的第一输出数据元素。
2.根据权利要求1所述的非暂时性计算机可读介质,其中基于所述扩张卷积操作的步幅选择所述子集。
3.根据权利要求2所述的非暂时性计算机可读介质,其中所述输入数据元素存储在所述存储器内的连续地址空间中。
4.根据权利要求3所述的非暂时性计算机可读介质,其中基于在每个选定输入数据元素之间跳过一定数目的输入数据元素而选择所述输入数据元素的所述子集,跳过的输入数据元素的所述数目基于所述步幅。
5.根据权利要求3或4所述的非暂时性计算机可读介质,其中所述指令包括多个参数,所述多个参数包括:
所述存储器中的输入数据元素的所述子集的起始源地址;
跳过参数,其指示跳过的输入数据元素的所述数目;以及
所述输入数据元素的所述子集的数目。
6.根据权利要求5所述的非暂时性计算机可读介质,其中所述起始源地址基于所述扩张卷积操作的所述速率。
7.根据权利要求1至6中任一项所述的非暂时性计算机可读介质,其中所述子集是第一子集;
其中所述指令在由一个或多个硬件处理器执行时使所述一个或多个硬件处理器:
控制所述脉动阵列以基于所述第一权重数据元素和所述子集执行所述第一计算,以产生第一部分和;
控制求和缓冲器以累加所述第一部分和;
将所述权重数据元素阵列的第二权重数据元素从存储器加载到所述脉动阵列中;
将所述输入数据元素的第二子集从所述存储器选入到所述脉动阵列中;
控制所述脉动阵列以基于所述第二权重数据元素和所述第二子集执行第二计算,以产生第二部分和;并且
控制所述求和缓冲器以累加所述第二部分和,以产生所述第一输出数据元素。
8.根据权利要求7所述的非暂时性计算机可读介质,其中基于所述求和缓冲器的大小选择所述第一输入数据元素的所述第一子集的第一大小和所述第一输入数据元素的所述第二子集的第二大小。
9.根据权利要求8所述的非暂时性计算机可读介质,其中所述指令在由一个或多个硬件处理器执行时使所述一个或多个硬件处理器基于包括在所述第一输出数据元素中的零输出数据元素的数目而将所述第一部分和存储在缓冲器的地址处。
10.根据权利要求9所述的非暂时性计算机可读介质,其中所述指令包括一组参数,所述一组参数包括:
所述存储器中的所述输入数据元素的所述第一子集的第一起始源地址;以及
所述存储器中的所述输入数据元素的所述第二子集的第二起始源地址;并且
其中所述第一起始源地址和所述第二起始源地址基于所述扩张卷积的所述速率而彼此偏移。
11.根据权利要求10所述的非暂时性计算机可读介质,其中所述一组参数包括用于接收所述第一部分和的所述求和缓冲器的第一起始目的地地址和用于接收所述第二部分和的所述求和缓冲器的第二起始目的地地址。
12.一种设备,包括:
存储器,其存储一组指令;
一个或多个硬件处理器,其被配置成执行所述一组指令以:
基于权重数据阵列和输入数据阵列接收指示待由脉动阵列执行的扩张卷积操作的速率和步幅的第一信息,以产生输出数据阵列;
接收指示求和缓冲器的尺寸的第二信息;
针对所述权重数据阵列的每个权重数据元素,确定所述输入数据阵列的待与所述每个权重数据元素相乘以计算部分和的输入数据元素的子集,输入数据元素的所述子集基于来自所述求和缓冲器的投射操作并且基于所述扩张卷积的所述速率、所述扩张卷积的所述步幅、所述求和缓冲器的所述尺寸和所述权重数据阵列中的所述每个权重数据元素的坐标而确定;
针对所述权重数据阵列的所述每个权重数据元素,基于输入数据元素的所述子集而确定所述求和缓冲器的目的地地址,以接收所述部分和;并且
产生用于所述权重数据阵列的每个权重数据元素的计算指令,以包括指示所述目的地地址和输入数据元素的所述子集的第三信息。
13.根据权利要求12所述的设备,其中所述一个或多个硬件处理器被配置成对所述每个权重数据元素执行所述一组指令以:
基于所述求和缓冲器的所述尺寸信息和所述扩张卷积操作的所述步幅确定与所述输入数据阵列的第一输入数据元素对准的投射区;
基于所述权重数据阵列中的所述每个权重数据元素的坐标和所述扩张卷积的所述速率而使所述投射区相对于所述输入数据阵列的所述第一输入数据元素移位一偏移量;
将步幅图案与移位后的投射区对准,所述步幅图案基于所述扩张卷积操作的步幅;
基于所述尺寸信息确定与所述步幅图案重叠的所述输入数据阵列的输入数据元素的坐标;并且
基于所述坐标确定用于所述每个权重数据元素的输入数据元素的所述子集。
14.根据权利要求13所述的设备,其中所述一个或多个硬件处理器被配置成执行所述一组指令,以基于按所述扩张卷积的所述速率按比例缩放所述权重数据元素中的所述第一权重数据元素的所述坐标而确定所述偏移量。
15.根据权利要求14所述的设备,其中所述一个或多个硬件处理器被配置成对所述每个权重数据元素执行所述一组指令以:
确定所述存储器中的所述输入数据元素的所述子集中的第一个的源地址;并且
在所述计算指令中包括指示所述地址、包括在所述输入数据阵列的所述子集中的输入数据元素的数目以及步长的信息,以使得所述脉动阵列能够从所述存储器加载输入数据元素的所述子集。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/457,503 US11379555B2 (en) | 2019-06-28 | 2019-06-28 | Dilated convolution using systolic array |
US16/457,503 | 2019-06-28 | ||
PCT/US2020/039778 WO2020264264A1 (en) | 2019-06-28 | 2020-06-26 | Dilated convolution using systolic array |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114026569A true CN114026569A (zh) | 2022-02-08 |
Family
ID=71662350
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080045813.6A Pending CN114026569A (zh) | 2019-06-28 | 2020-06-26 | 使用脉动阵列的扩张卷积 |
Country Status (4)
Country | Link |
---|---|
US (2) | US11379555B2 (zh) |
CN (1) | CN114026569A (zh) |
DE (1) | DE112020003128T5 (zh) |
WO (1) | WO2020264264A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114626517A (zh) * | 2022-05-17 | 2022-06-14 | 中科南京智能技术研究院 | 一种存储双层权重数据的脉动阵列 |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11222092B2 (en) * | 2019-07-16 | 2022-01-11 | Facebook Technologies, Llc | Optimization for deconvolution |
US11372752B2 (en) | 2019-12-17 | 2022-06-28 | Google Llc | Topological scheduling |
US11663446B2 (en) * | 2020-01-06 | 2023-05-30 | Alibaba Group Holding Limited | Data reuse and efficient processing scheme in executing convolutional neural network |
CN113496275B (zh) * | 2020-04-08 | 2023-07-25 | 北京地平线机器人技术研发有限公司 | 指令执行方法、装置和电子设备 |
CN113743427B (zh) * | 2020-05-27 | 2023-10-31 | 富泰华工业(深圳)有限公司 | 图像识别方法、装置、计算机装置及存储介质 |
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 |
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 |
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 |
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 |
US11615320B1 (en) | 2020-06-30 | 2023-03-28 | Cadence Design Systems, Inc. | Method, product, and apparatus for variable precision weight management for neural networks |
CN112966729B (zh) * | 2021-02-26 | 2023-01-31 | 成都商汤科技有限公司 | 一种数据处理方法、装置、计算机设备及存储介质 |
CN114995782B (zh) * | 2022-08-03 | 2022-10-25 | 上海登临科技有限公司 | 数据处理方法、装置、设备和可读存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI807539B (zh) * | 2017-05-17 | 2023-07-01 | 美商谷歌有限責任公司 | 用於執行矩陣乘法之方法、硬體電路、運算系統及電腦儲存媒體 |
US11386644B2 (en) * | 2017-10-17 | 2022-07-12 | Xilinx, Inc. | Image preprocessing for generalized image processing |
US10459876B2 (en) * | 2018-01-31 | 2019-10-29 | Amazon Technologies, Inc. | Performing concurrent operations in a processing element |
US11494620B2 (en) * | 2018-02-08 | 2022-11-08 | Western Digital Technologies, Inc. | Systolic neural network engine capable of backpropagation |
US10678508B2 (en) * | 2018-03-23 | 2020-06-09 | Amazon Technologies, Inc. | Accelerated quantized multiply-and-add operations |
US11188814B2 (en) * | 2018-04-05 | 2021-11-30 | Arm Limited | Systolic convolutional neural network |
-
2019
- 2019-06-28 US US16/457,503 patent/US11379555B2/en active Active
-
2020
- 2020-06-26 DE DE112020003128.4T patent/DE112020003128T5/de active Pending
- 2020-06-26 CN CN202080045813.6A patent/CN114026569A/zh active Pending
- 2020-06-26 WO PCT/US2020/039778 patent/WO2020264264A1/en active Application Filing
-
2022
- 2022-06-03 US US17/832,039 patent/US11816559B2/en active Active
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114626517A (zh) * | 2022-05-17 | 2022-06-14 | 中科南京智能技术研究院 | 一种存储双层权重数据的脉动阵列 |
CN114626517B (zh) * | 2022-05-17 | 2022-07-29 | 中科南京智能技术研究院 | 一种存储双层权重数据的脉动阵列 |
Also Published As
Publication number | Publication date |
---|---|
US11816559B2 (en) | 2023-11-14 |
US20200410036A1 (en) | 2020-12-31 |
WO2020264264A1 (en) | 2020-12-30 |
DE112020003128T5 (de) | 2022-05-05 |
US20220292163A1 (en) | 2022-09-15 |
US11379555B2 (en) | 2022-07-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11816559B2 (en) | Dilated convolution using systolic array | |
US11954583B2 (en) | Transposed convolution using systolic array | |
US11347480B2 (en) | Transpose operations using processing element array | |
KR20230078652A (ko) | 계층적 가중치 희소 컨볼루션 프로세싱을 위한 방법 및 시스템 | |
US11003429B1 (en) | Compile-time scheduling | |
US11501145B1 (en) | Memory operation for systolic array | |
US20210158131A1 (en) | Hierarchical partitioning of operators | |
CN113449861A (zh) | 使用部分梯度更新的推测性训练 | |
JP7492555B2 (ja) | 複数の入力データセットのための処理 | |
WO2021067057A1 (en) | Neural network training in a distributed system | |
US11494321B1 (en) | State buffer memloc reshaping | |
CN113469354B (zh) | 受存储器限制的神经网络训练 | |
CN114761920A (zh) | 具有可重构指令集的硬件加速器 | |
US11636569B1 (en) | Matrix transpose hardware acceleration | |
CN118043821A (zh) | 混合稀疏压缩 | |
US11868872B1 (en) | Direct memory access operation for neural network accelerator | |
US11610102B1 (en) | Time-based memory allocation for neural network inference | |
US10997277B1 (en) | Multinomial distribution on an integrated circuit | |
US11841792B1 (en) | Instructions with multiple memory access modes | |
US11442794B1 (en) | Event assignment for synchronization of concurrent execution engines | |
US11775299B1 (en) | Vector clocks for highly concurrent execution engines | |
US12008469B1 (en) | Acceleration of neural networks with stacks of convolutional layers | |
US11797280B1 (en) | Balanced partitioning of neural network based on execution latencies | |
US11468304B1 (en) | Synchronizing operations in hardware accelerator | |
US11182314B1 (en) | Low latency neural network model loading |
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 |