CN114430837A - 使用脉动阵列的转置卷积 - Google Patents

使用脉动阵列的转置卷积 Download PDF

Info

Publication number
CN114430837A
CN114430837A CN202080066641.0A CN202080066641A CN114430837A CN 114430837 A CN114430837 A CN 114430837A CN 202080066641 A CN202080066641 A CN 202080066641A CN 114430837 A CN114430837 A CN 114430837A
Authority
CN
China
Prior art keywords
array
data elements
input data
weight data
weight
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
Application number
CN202080066641.0A
Other languages
English (en)
Inventor
J·T·胡耶恩
V·维韦克拉亚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Amazon Technologies Inc
Original Assignee
Amazon Technologies Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Amazon Technologies Inc filed Critical Amazon Technologies Inc
Publication of CN114430837A publication Critical patent/CN114430837A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/78Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/48Indexing scheme relating to groups G06F7/48 - G06F7/575
    • G06F2207/4802Special implementations
    • G06F2207/4818Threshold devices
    • G06F2207/4824Neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Molecular Biology (AREA)
  • Neurology (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Image Processing (AREA)
  • Complex Calculations (AREA)

Abstract

在一个实例中,神经网络加速器可以执行一组指令以:将第一权重数据元素从存储器加载到脉动阵列中,所述第一权重数据元素具有第一坐标;从所述指令中提取指示待从所述存储器获得的输入数据元素的第一子集的信息,所述第一子集基于转置卷积操作的步幅和权重数据元素的经旋转阵列中的第一权重数据元素的第二坐标;基于所述信息从所述存储器获得输入数据元素的所述第一子集;将输入数据元素的所述第一子集加载到所述脉动阵列中;并且基于所述第一权重数据元素和输入数据元素的所述第一子集控制所述脉动阵列以执行第一计算以产生输出数据元素的阵列的输出数据元素。

Description

使用脉动阵列的转置卷积
背景技术
人工神经网络是具有基于生物神经网络的架构的计算系统。可以使用训练数据对人工神经网络进行训练,以了解如何针对应用执行某个计算任务。
如神经网络处理器等硬件加速器可以被编程以实施人工神经网络以执行计算任务。一个常见计算任务是权重矩阵与输入数据矩阵之间的卷积操作。在卷积操作中,权重矩阵可以横贯多个步幅中的输入数据矩阵并与所述输入数据矩阵叠加,直到整个输入数据矩阵已经被横贯。对于每个步幅,可以产生权重矩阵与输入数据矩阵的叠加部分之间的乘法的总和作为卷积操作的输出,并且可以在多个步幅处产生卷积操作的多个输出。卷积操作有许多应用,如从图像中提取特征,执行图像识别等。
存在各种类型的用于其它应用的卷积操作。一个实例是转置卷积,所述转置卷积可以基于经旋转权重矩阵与经扩张输入数据矩阵之间的正常卷积操作。转置卷积操作有各种应用。例如,转置卷积操作可以是上采样操作的部分,其中原始输入数据矩阵的元素可以基于经旋转权重矩阵被插值来形成输出数据矩阵。作为另一个实例,转置卷积可以是在用于训练权重矩阵的权重的训练过程期间反向传播操作的部分。
附图说明
将参考附图根据本公开描述各个实施例,其中:
图1展示了使用本文所公开的技术处理数据的分类器装置的实例;
图2A-2F是展示了根据本公开的某些方面的使用本文所公开的技术的预测模型和计算的简化框图;
图3展示了转置卷积操作的示例实施方案;
图4A-4C展示了根据本公开的某些方面的示例神经网络处理器和其操作;
图5A-5D展示了根据本公开的某些方面的用于正常卷积操作的图4A-4C的示例神经网络处理器处的操作;
图6A-6G展示了根据本公开的某些方面的用于转置卷积操作的图4A-4C的示例神经网络处理器处的操作;
图7A和图7B包含根据本公开的某些方面的用于支持转置卷积操作的图4A-4C的示例神经网络处理器的另外特征的框图;
图8展示了根据本公开的某些方面的主机系统的实例的框图;
图9展示了根据本公开的某些方面的在神经网络处理器处执行经扩张卷积操作的示例方法;
图10展示了根据本公开的某些方面的为神经网络处理器产生用于执行转置卷积操作的指令的示例方法;并且
图11包含示例网络的图示。
具体实施方式
本公开的实例涉及神经网络处理,并且更具体地,涉及在神经网络处理器以及硬件和/或软件系统处执行转置卷积操作以在神经网络处理器处支持转置卷积操作。
如神经网络处理器等硬件加速器可以被编程以实施人工神经网络以执行计算任务。一个常见计算任务是被配置为滤波器的权重矩阵与输入数据矩阵之间的卷积操作。输入数据矩阵可以对应于图像的像素,而滤波器可以包含被配置成例如从图像中提取目标特征的滤波器元素的阵列。作为卷积操作的部分,滤波器可以在多个步幅中横贯图像的不同位置。在每个步幅位置处,可以产生每个滤波器系数与图像的重叠像素之间的乘积的总和作为所述步幅位置的卷积输出。卷积输出可以指示例如图像是否含有目标特征、目标特征的图像位置等。
存在各种类型的用于其它应用的卷积操作。一个实例是转置卷积,所述转置卷积可以基于经旋转权重矩阵与经扩张输入数据矩阵之间的正常卷积操作。转置卷积操作有各种应用。例如,转置卷积操作可以是上采样操作的部分。作为上采样操作的部分,经扩张输入数据矩阵可以与经旋转权重矩阵卷积以基于经旋转权重矩阵插值原始输入数据矩阵的元素以形成新元素。新元素可以被包含在输出数据矩阵中以相对于原始输入数据矩阵扩大其大小以及元素数量。转置卷积操作可以在神经网络中执行,其中权重系数可以被训练以改善插值操作。作为另一个实例,转置卷积可以是在用于训练权重矩阵的训练期间神经网络中的反向传播操作的部分。
尽管其具有实用性,但是转置卷积操作可能需要大量存储器操作,这可能降低神经网络处理器中的操作的效率。例如,为了产生经扩张输入数据矩阵,可以将原始输入数据矩阵的元素从存储器中的一组位置拷贝到存储器中的另一组位置,其中在新位置处将零插入在输入数据矩阵的元素之间以形成经扩张输入数据矩阵。作为另一个实例,可以将权重矩阵的元素从存储器中的一组位置拷贝到存储器中的另一组位置以执行旋转。在这些情况下,输入数据阵列的元素的拷贝、零的插入以及权重矩阵元素的拷贝可能需要大量存储器操作,这会降低神经网络处理器的性能。
本公开的实例涉及神经网络处理,并且更具体地,涉及在神经网络处理器以及硬件和/或软件系统处执行转置卷积操作以在神经网络处理器处支持转置卷积操作。转置卷积操作可以基于经旋转权重数据阵列与经扩张输入数据阵列之间的正常卷积操作。经旋转权重数据阵列可以是原始权重数据阵列的经180度旋转型式,而经扩张输入数据阵列可以通过在原始输入数据阵列的相邻输入数据元素之间填充多个零来获得。零的数目可以基于转置卷积操作的步幅。例如,在转置卷积操作的步幅为二的情况下,每个输入数据元素可以被一个零环绕(步幅减一)以扩张原始输入数据阵列,并且卷积输出可以通过用正常卷积操作中步幅为一的经旋转权重数据阵列横贯经扩张输出数据阵列来产生。本公开涉及配置神经网络处理器以在原始权重数据阵列与原始输入数据阵列之间执行正常卷积操作以产生转置卷积的输出数据阵列。
在一些实例中,神经网络处理器包括存储器、脉动阵列、求和缓冲器和控制器。存储器可以存储原始输入数据阵列的输入数据元素和原始权重数据阵列的权重数据元素。输入数据阵列和权重数据阵列两者可以是多维的。例如,输入数据阵列可以包含一个或多个二维输入数据矩阵,其中每个输入数据矩阵对应于输入通道。此外,权重数据阵列可以包含一个或多个二维权重数据矩阵,其中每个权重数据矩阵对应于输入通道和输出通道。输入数据元素可以基于其原始输入数据阵列中的坐标存储在存储器的地址中,而权重数据元素可以基于其在原始权重数据阵列中的坐标存储在存储器的地址中。
为了执行转置卷积操作,控制器可以基于原始权重数据阵列中的第一权重数据元素的第一坐标从存储器中获得第一权重数据元素,并且将第一权重数据元素加载到脉动阵列中。第一坐标可以通过表示权重数据元素的阵列的权重矩阵的180度旋转操作的映射转换成第二坐标。控制器还可以基于指令选择原始输入数据阵列的输入数据元素的第一子集,并且将输入数据元素的第一子集加载到脉动阵列中以计算第一权重数据元素与输入数据元素的第一子集之间的第一部分和。选择可以基于转置卷积操作的步幅、从映射获得的第二坐标以及求和缓冲器的尺寸信息。具体地,加载到脉动阵列中的输入数据元素的第一子集可以表示经扩张输入阵列的输入数据元素,所述经扩张输入阵列当经旋转权重数据阵列相对于经扩张输入数据阵列处于不同步幅位置处时与第一权重数据元素重叠,并且从输入数据元素的第一子集中产生的多个第一部分和可以适应求和缓冲器。输入数据元素的第一子集在扩张之前在原始输入数据阵列中彼此相邻。此外,第一部分和可以基于第二坐标和步幅存储在求和缓冲器内的位置处。控制器可以控制脉动阵列加载其它权重数据元素和输入数据元素的其它子集用于其它权重数据元素产生其它部分和。部分和可以在求和缓冲器中累加和/或叠加以产生输出数据阵列的输出数据元素,这还可以是多维的并且可以包含对应于多个输出通道的多个二维输出数据矩阵。
如上所述,输入数据元素的每个子集可以基于以下来选择:基于步幅和权重数据元素的经旋转阵列中的权重数据元素的第二坐标确定在转置卷积操作中与权重数据元素重叠的输入数据元素(“重叠输入数据元素”)。此外,用于接收部分和的求和缓冲器的位置也基于步幅和第二坐标。重叠输入数据元素的确定以及用于权重数据元素的求和缓冲器中的部分和的目标可以通过编译器执行,所述编译器可以将重叠输入数据元素和目标信息编码在用于权重数据元素的计算指令中。随后控制器可以执行用于权重数据元素的计算指令。
在一些实例中,神经网络处理器进一步包括被配置成在转置卷积操作的步幅大于权重数据阵列的尺寸的情况下产生零输出数据元素,使得经扩张输出数据阵列通过在大于权重数据阵列尺寸的输入数据元素之间插入多个零来产生的机制。例如,在转置卷积操作的步幅为二并且在相邻输入数据元素之间填充一个零以形成经扩张输入数据阵列并且包括单个权重数据元素的权重阵列横贯步幅为一的经扩张输入数据阵列的情况下,单个权重数据元素与填充的零重叠的步幅位置处的零输出数据元素。为了改善计算效率,控制器可以控制求和缓冲器输出用于零输出数据元素的零,而无需脉动阵列基于各种技术计算所述零输出数据元素的零部分和。例如,控制器可以在输出瓦片的计算开始之前将求和缓冲器初始化为零,使得在计算期间未从脉动阵列接收到部分和的求和缓冲器的目标可以输出零。作为另一个实例,求和缓冲器可以包含每个目标的寄存器,以及由寄存器的输出控制的多路器。寄存器可以存储对目标在输出瓦片的计算期间是否接收到部分和(例如,写入操作)的指示。寄存器可以在输出瓦片的计算的开始之前被重置。在计算结束时,当求和缓冲器接收到目标的读取操作时,求和缓冲器可以参考所述目标的寄存器,并且多路器可以被控制成基于寄存器是否指示目标在计算期间已经接收到部分和(或写入操作)来输出目标的内容或零。
重叠输入数据元素的确定和部分和的目标可以基于步幅图案,所述步幅图案可以定义一组图案坐标,其中相邻图案坐标由对应于步幅的距离分离。例如,对于步幅为二,相邻图案坐标可以由距离为一所分离。对于第一权重数据元素,编译器可以基于根据第二坐标(第一权重数据元素的经旋转坐标)的偏移量使步幅图案移位来确定与求和缓冲器中的部分和的目标相对应的输出数据阵列中的第一区域。求和缓冲器的尺寸(例如,列和行的数目)可以定义包括输出数据阵列中的第一区域的输出数据元素的输出瓦片。编译器可以相对于基于以第二坐标为基础的偏移量来相对于参考位置使步幅图案移位。参考位置可以位于映射到求和缓冲器的目标的输出瓦片的第一输出数据元素处,或映射到求和缓冲器的目标的具有北填充和西填充的输出数据阵列的假想位置处。求和缓冲器的尺寸(例如,列和行的数目)还可以定义输出瓦片的输出数据元素的一系列坐标。编译器可以将经移位的图案坐标与所述一系列坐标进行比较以确定一组重叠坐标。重叠坐标可以提供求和缓冲器的目标(例如,地址)以接收第一部分和。目标可以定义第一区域,而目标的计数可以定义包含在输入数据元素的第一子集中的相邻输入数据元素的计数。编译器可以编码指示计算指令中的目标的第一信息。第一信息可以包含例如与输出数据元素的重叠坐标中的第一重叠坐标相对应的目标地址、基于指示相邻目标之间的距离的步幅的步长参数和重叠坐标的计数。
然后编译器可以基于输入数据阵列中从第一区域回到第二区域的投射操作确定重叠输入数据元素。编译器可以基于经旋转权重数据阵列中的第一权重数据元素的第二坐标计算经扩张输入数据阵列中的输入数据元素中的第一输入数据元素的第三坐标,所述第一输入数据元素当经旋转权重数据阵列相对于经扩张输入数据阵列位于第一步幅位置处时与第一权重数据元素重叠。作为投射操作的部分,编译器可以通过步幅的倒数来缩放第三坐标以确定原始输入数据阵列的第一输入数据元素的第四坐标,而目标的计数可以提供被选择用于从第四坐标开始的第一子集的相邻输入数据元素的计数。第四坐标和输入数据元素的计数可以定义第二区域。编译器可以将指示第四坐标和输入数据元素的计数的第二信息编码在计算指令中。第二信息可以包含例如对应于第四坐标的源地址和选自原始输入数据阵列的相邻输入数据元素的计数。
本公开的实例可以通过减少存储器操作来改善神经网络处理器执行转置卷积操作的效率。例如,所公开的技术可以避免涉及拷贝存储器中原始输入数据矩阵的元素以产生经扩张输入数据矩阵/阵列的另外的存储器操作。此外,所公开的技术还可以避免涉及拷贝存储器中原始权重数据矩阵的元素以产生经旋转权重数据矩阵/阵列的另外的存储器操作。这些都可以减少存储器操作的数量,这可以减少存储器存取时延并且提高转置卷积操作的速度。
在以下说明中,将描述各个实例。出于解释的目的,阐述了具体配置和细节以便提供对实例的透彻理解。然而,对于本领域的技术人员来说还将显而易见的是可以在没有具体细节的情况下实践实例。此外,可以省略或简化众所周知的特征以免混淆正在描述的实施例。
图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可以呈人工神经网络的形式。人工神经网络可以包含多个处理节点,其中每个处理节点被配置成处理输入像素数据的一部分,或者被配置成进一步处理来自其它处理节点的中间输出。图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接收到的经缩放输出的总和:
Figure BDA0003559211610000071
此处,sum210a表示由处理节点210a产生的中间输出。W1i×xi表示由层207的处理节点用相关联的权重(例如,W10)对特定像素值(例如,x0)进行的缩放。在预测模型103是DNN的情况下,层209的每个处理节点可以基于来自层207的每个处理节点的像素值的缩放来产生总和,并且随后通过对经缩放像素值进行求和来产生总和(例如,Sum210a)。总和还可以表示包括许多元素(例如,像素值)的输入向量与权重向量(例如,W1)之间的点积。在一些实例中,还可以将偏置添加到按比例缩放的输出以产生中间输出。
在预测模型103是CNN的情况下,层209的每个处理节点可以基于对来自层207的一组处理节点的像素值的缩放来产生中间输出。中间输出可以表示一组像素值与包括权重值的滤波器之间的卷积结果。图2B展示了层209可以执行的卷积操作的实例。在图2B中,滤波器230可以包含权重的二维阵列。滤波器230中的权重可以表示要从图像中检测到的某些特征的像素的空间分布。所述二维阵列的高度可以是R行并且宽度可以是S列,并且通常小于高度为H像素和宽度为W像素的输入图像。可以将每个权重映射到像素值的具有相同R行和S列的矩形块中的像素。层209的处理节点(例如,处理节点210a)可以从输入层207的一组处理节点接收与来自对应于滤波器230的第一步幅位置的输入图像的像素的第一矩形块相对应的像素值的组240,并且根据等式1基于对滤波器230的每个权重与组240中的每个对应像素之间的乘法结果的求和来产生卷积输出242,从而产生由滤波器230表示的矩阵与由组240表示的矩阵之间的点积。层209的另一个处理节点还可以从输入层207的另一组处理节点中接收与来自对应于滤波器230的第二步幅位置的输入图像的像素的第二矩形块相对应的像素值的组244,并且根据等式1基于对滤波器230的每个权重与组244中的每个对应像素之间的乘法结果的求和产生卷积输出246,从而产生滤波器230的矩阵与由组240表示的矩阵之间的点积。在一些实例中,图2B中的每个卷积输出(例如,卷积输出242、卷积输出346等)可以对应于层209的处理节点的输出。在一些实例中,输入图像中的像素数据可以被称为用于指示像素由对应于某个或某些特征的相同滤波器(或相同滤波器组)处理的输入特征图。卷积输出可以被称为用于指示输出是用滤波器处理输入特征图的结果的输出特征图。
如图2B中所示出的,卷积操作可以被布置在滑动窗口中,使得第二矩形块与输入图像中的第一矩形块重叠或者以其它方式与其相邻。例如,在图2B的实例中,D可以是每个卷积操作的滑动窗口的步幅距离(按像素计),使得与组244相对应的像素块可以位于距与组240相对应的像素块的距离D(用像素表示)处,并且下一像素块也可以位于距组244相同的距离D处。层209的其它处理节点也可以接收与其它矩形块相对应的像素组并且产生其它中间输出。卷积输出可以是卷积输出阵列的一部分。卷积输出阵列可具有比输入图像更小的高度和更小的宽度。卷积输出的矩形块可以被进一步分组,并且可以在卷积输出组与另一组滤波器权重之间的层211处执行卷积操作,以产生另一组卷积输出。
在一些实例中,可以在多个图像与多个滤波器之间执行卷积操作。例如,参考图2C,一组C滤波器260可以对应于多个(C)图像270,并且可以在所述一组滤波器260中的每个滤波器与像素块之间对图像270的对应图像执行卷积操作。图像270中的每个图像可以对应于输入通道。可以对每个滤波器图像对的卷积结果进行求和以产生如下的卷积输出:
Figure BDA0003559211610000081
此处,卷积操作涉及图像(或像素阵列)。Xc eD+r,fD+s可以是指多个(C)图像270内行坐标为eD+r并且列坐标为fD+s的索引c的图像处的像素的值。对于本公开的剩余部分,元素Xc eD+r,fD+s的坐标可以以(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:
Figure BDA0003559211610000091
此处,卷积输出Oe,f m和权重Wc,m r,s具有与M组滤波器之一相对应的索引m。索引m可表示特定输出通道。
图2D展示了要与M组滤波器(其中M=2)卷积的C组输入数据集(其中C=3)的实例。每组输入数据对应于像素阵列的条目。M组滤波器中的每组滤波器包含与C组输入像素阵列相对应的一组C滤波器。卷积操作产生M组输出数据元素,其中每组输出数据元素对应于卷积输出阵列。每个卷积输出阵列对应于将(M组中的)一组滤波器与输入像素阵列卷积。例如,可以通过一组像素282与滤波器阵列284之间的点积、一组像素286与滤波器阵列288之间的点积以及一组像素289与滤波器阵列292之间的点积的总和产生O0,0 0
返回参考图2A,层209的一个处理节点可以被配置成产生一个卷积输出阵列的卷积输出元素,并且层209的处理节点的组M可以对应于卷积输出阵列的组M。层209的处理节点还可以用激活函数处理每个卷积输出以产生激活输出。激活函数可以将卷积输出转换为是否将卷积输出转发到中间层211的决策以影响分类器决策(类似于触发生物神经元)。激活函数的实例可以是根据以下等式定义的整流线性单位(ReLU):
Figure BDA0003559211610000092
除了ReLU外,还可以使用其它形式的激活函数,包含例如softplus函数(其可以是ReLU函数的光滑逼近)、双曲正切函数(tanh)、反正切函数(arctan)、sigmoid函数、高斯函数(Gaussian function)等。
层209的处理节点(例如,处理节点210a)可以用ReLU函数处理总和以基于以下等式产生层209的第一输出:
first_output210a=ReLU(Sum210a) (等式5)
层211可以通过例如基于不同组的滤波器执行另外的卷积操作来进一步处理来自层209的经缩放中间输出。可以将来自层211的每个处理节点的输出转发到其它较高的中间层,或者转发到输出层(图2A中未示出)。输出层可以形成表示例如图像104中包含某些特征的概率和/或图像204包含熊猫的图像的概率的输出向量。例如,可以将输出向量与同熊猫的鼻子对象相关联的参考向量或与熊猫相关联的参考向量进行比较。可以基于比较结果来确定关于图像104是否是熊猫的图像的决策。
图2B-图2D的卷积操作可以用于支持用于各种应用的各种类型的卷积操作,如转置卷积操作。图2E和图2F展示了转置卷积操作的实例。如图2E和图2F所示,转置卷积操作可以基于如经旋转滤波器260等经旋转权重矩阵与如经扩张图像270等经扩张输入数据矩阵之间的正常卷积操作。经旋转权重矩阵可以通过执行原始权重矩阵(例如,原始滤波器260)的180度旋转来形成,这涉及沿竖直维度(例如,图2E中的R维度)使元素翻转随后沿水平维度(例如,图2E中的S维度)翻转。具有(0,0)与(R-1,S-1)之间的(r,s)坐标的原始滤波器260的(r,s)坐标和经旋转滤波器260的映射可以基于以下等式:
rrotate=R-1-roriginal (等式6)
srotate=S-1-soriginal (等式7)
在等式6中,roriginal表示原始滤波器260中的滤波器元素的r坐标,而rrotate表示经旋转滤波器260中的所述滤波器元素的r坐标。此外,soriginal表示原始滤波器260中的滤波器元素的s坐标,而srotate表示经旋转滤波器260中的所述滤波器元素的s坐标。例如,如图2E中所示,原始滤波器260中的权重数据元素W0,0具有坐标(0,0),但是在经旋转滤波器260中,同一权重数据元素W0,0具有坐标(2,2)。
另外,经扩张图像270可以通过在原始图像270的每个输入数据元素之间插入多个零来形成。零的数目可以基于转置卷积操作的步幅。例如,如图2E所示,对于步幅为2的转置卷积操作,在原始图像270的每个输入数据元素之间插入一个零(步幅减一)以形成经扩张图像270,使得在原始图像270的输入数据元素的第一行(例如,X0,0、X0,1等)之上(北)在输入数据元素的相邻行之间并且在原始图像270的输入数据元素的最后一行之下沿H维度插入一行零。此外,还在原始图像270的输入数据元素的第一列(例如,X0,0、X1,0等)的左边(西)在输入数据元素的相邻列之间并且在原始图像270的输入数据元素的最后一列的右边插入一列零。此外,如图2F中所示,对于步幅为4的转置卷积操作,在原始图像270的每个输入数据元素之间插入三个零以形成经扩张图像270。
随后可以在经旋转滤波器260与经扩张图像270之间执行正常卷积操作以产生卷积输出阵列280。正常卷积操作可以通过以步幅1(图2B的D)将经旋转文件编档员260横贯经扩张图像270来执行。一个输出数据元素可以通过经旋转滤波器260与经扩张图像270的重叠输入数据元素(包含填充的零)之间的乘积的和来形成。在转置卷积操作的步幅大于经旋转滤波器260的尺寸的情况下,如图2F中所示,卷积输出阵列280将包含零输出数据元素。
图3展示了在计算环境中实施转置卷积操作的示例序列300。如图3中所示,原始滤波器260的滤波器元素可以被存储在存储器302中。存储器302中的每个滤波器元素的地址可以基于滤波器元素的(r,s)坐标。在一些实例中,处理器304(例如,主机装置)可以在存储器302处执行读取操作306以获得原始滤波器260的滤波器元素,执行旋转操作308以基于等式6和7计算每个滤波器元素的经旋转(r,s)坐标。在一些实例中,原始滤波器260的滤波器元素可以以经旋转形式(基于等式6和7)存储在存储器302处,并且可以跳过旋转操作308。硬件处理器304可以执行写入操作310以将在基于经旋转(r,s)坐标的地址处的滤波器元素存储回存储器302。另外,原始图像270的输入数据元素还可以被存储在存储器302中。每个输入数据元素的地址可以基于原始经扩张图像270中的输入数据元素的坐标。处理器304可以在存储器302处执行读取操作316以获得原始图像270的输入数据元素,并且在存储器302处执行写入操作318以在对应于经扩张图像270的地址/坐标处存储输入数据元素。随后可以在经旋转滤波器260与用于转置卷积操作的来自存储器302的经扩张图像270之间执行卷积操作320。
序列300可以涉及大量存储器读取和写入操作。例如,可以执行大量读取操作306和写入操作310,用于大量和/或多维滤波器360(例如,具有多个输入和输出通道,如图2D所示)的旋转。此外,可以执行大量读取操作316和写入操作318,用于大量和/或多维图像270的扩张。所有这些另外的存储器读取和写入操作都会增加时延并且增加在计算环境中完成转置卷积操作所需的时间。
图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并且可以在顶部加载权重值。在一些实例中,权重和输入数据可以从左侧流动,并且部分和可以从上到下流动。在这些和其它实例中,乘法和累加操作以对角波前移动通过处理引擎阵列410,其中数据跨阵列向右和向下移动。控制信号可以和权重同时输入到左侧处,并且可以与计算一起流过并向下流动。
在各个实施方案中,处理引擎阵列410中的列数确定处理引擎阵列410的计算能力,并且行数确定实现处理引擎阵列410的最大利用所需的存储器带宽。处理引擎阵列410可以例如具有64列和428行,或一些其它数量的列和行。
在图4中以插图展示了处理引擎411的实例。如此实例所展示的,处理引擎411可以包含乘法器-累加器电路。来自左侧的输入可以包含例如输入数据i和权重值w,其中输入数据是从一组输入数据或一组中间结果中获取的值,并且权重值来自将神经网络的一层连接到下一层的一组权重值。一组输入数据可以是例如提交用于标识或对象识别的图像、提供用于语音识别的音频剪辑、用于自然语言处理或机器翻译的文本字符串,或者需要分析以确定下一步移动的游戏的当前状态等。在一些实例中,输入数据和权重值输出到右边,以用于输入到下一处理引擎411。
在所展示的实例中,来自上面的输入可以包含部分和p_in,其由另一个处理引擎411或由处理引擎阵列410的前一轮计算提供。当开始对一组新输入数据进行计算时,处理引擎阵列410的顶行可以接收p_in的固定值,如零。如此实例所展示的,i和w相乘,并且结果与p_in求和以产生新的部分和p_out,其可以输入到另一个处理引擎411中。处理引擎411的各个其它实施方案是可能的。
来自处理引擎阵列410中的最后一行的输出可以临时存储在求和缓冲器412中。结果可以是中间结果,所述结果可以被写入存储体414以提供给处理引擎阵列410用于另外的计算。替代地,结果可以是最终结果,一旦将其写入存储体414,就可以通过通信结构420从存储器子系统404读取,所述最终结果要由系统输出。
在一些实施方案中,加速器402包含激活引擎416。在这些实施方案中,激活引擎416可以将来自处理引擎阵列410的结果组合成一个或多个输出激活。例如,对于卷积神经网络,可以将来自多个通道的卷积求和以产生单个通道的输出激活。在其它实例中,可能需要将来自处理引擎阵列410中的一列或多列的结果累加以为神经网络中的单个节点产生输出激活。在一些实例中,可以绕过激活引擎416。
在各个实例中,激活引擎416可以包含多个单独的执行通道。在这些实例中,执行通道可以对应于处理引擎阵列410的列,并且可以对列的输出执行操作,其结果可以存储在存储器子系统404中。在这些实例中,激活引擎416可以能够执行介于1次与n次之间的并行计算,其中n等于处理引擎阵列410中的列数。在一些情况下,可以同时执行计算中的一种或多种计算。每个执行通道可以执行的计算的实例包含指数、平方、平方根、恒等式、二进制阶跃、双极阶跃、西格摩德和斜坡,以及其它实例。
在一些实施方案中,加速器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对权重和输入数据执行各种计算的指令。f可以由编译器产生并且还可以存储在存储器子系统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 (等式8)
在第二迭代中,处理引擎411的列432可以如下基于存储器子系统404提供的存储的权重数据元素和输入数据元素产生第二部分和:
第二部分和=X0 0,1×W0,0 0,0+X0 0,1×W1,0 0,0+...+XC 0,1×WC,0 0,0 (等式9)
处理引擎411的每列可以将在迭代中产生的部分和提供给列求和缓冲器,如列求和缓冲器442、443等,所述列求和缓冲器两者都是求和缓冲器412的一部分。部分和是基于与不同输入通道和输出通道相关的不同滤波器阵列的相同坐标处的权重数据元素产生的,并且部分和对应于不同输出数据元素。参考图4C,列求和缓冲器442和443中的每个列求和缓冲器包含多个条目,如E0,0、E0,1、E0,2等。每个条目可以具有映射到输出瓦片的坐标的坐标,所述坐标可以表示输出阵列的区域。每个条目具有允许条目将接收到的部分和与存储的部分和相加以产生累加的部分和的加法器(在图4C中未示出)。随后所述条目可以存储累加的部分和。列求和缓冲器442和443处的操作可由包含目标偏移、步长和写入元素的数目的一组缓冲器写入参数452控制。目的地偏移量参数可以指示(第一迭代的)第一部分和要添加到的条目。步长参数可以指示接收部分和的相邻条目之间待跳过的条目的数目。步长参数可以对应于在权重数据阵列处于不同步幅位置时与权重数据元素重叠的非零输入数据元素之间的间隙。此外,写入元素的数目指示待添加到从起始地址开始的求和缓冲器的条目的部分和的数目,其中基于如上文所描述的步长参数分离相邻条目。
作为说明性实例,在目标偏移量为2并且步长也为2的情况下,来自列432的第一部分和可以被存储在条目E0,2处,第二部分和可以被存储在E0,4处(其中跳过了条目E0,3),第三部分和可以被存储在E0,6处(其中跳过了条目E0,5)等,直到由写入元素的数量指定的多个部分和被存储。如下文将更详细地描述,缓冲器写入参数452可以被包含在用于计算一组部分和的指令中。指令可以由控制器422解析以提取缓冲器写入参数452。随后控制器422可以基于所提取的缓冲器写入参数452控制求和缓冲器的操作。如下文将描述的,缓冲器写入参数452可以被配置成支持卷积操作。
在根据第一组权重数据元素(其在相应滤波器阵列中的坐标相同但输入通道和输出通道不同)计算部分和之后,处理引擎阵列410可以从不同坐标加载新的一组权重数据元素并且重复部分和计算。可以将新的部分和添加到存储在求和缓冲器412中的从第一组权重数据元素计算出的部分和。对其余权重数据元素的部分和的计算和累加可继续下去以产生输出瓦片的数据元素。在产生输出瓦片的数据元素之后,求和缓冲器412可以将输出瓦片的数据元素提供给激活引擎416和/或池化引擎418用于后处理,并且后处理的输出数据元素可以被存储在存储器子系统404中。后处理的输出数据可以从存储器子系统404发送到通信结构420和/或被获取到处理引擎阵列410作为后续神经网络层处理的输入数据。
图5A-图5D展示了用于执行正常卷积操作的加速器402的示例配置。图5A展示了3×3滤波器阵列504的不同权重数据元素与输入数据阵列502的输入数据元素之间的重叠,所述滤波器阵列可以是图3的原始滤波器260,所述输入数据元素可以是原始图像270。在图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提供针对对加载到处理器引擎411的权重数据元素定义一组重叠的非零输入数据元素的存储器获取参数430。所述一组重叠的非零输入数据元素可以基于获取元素参数的起始地址、步长以及数目来定义。起始地址可以是存储器子系统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,所述区域可以提供要与权重数据元素卷积以产生输出瓦片的输入数据元素。投射操作可以考虑第一区域的尺寸以及卷积操作的步幅距离。如上文所描述,步幅距离可以定义每个重叠输入数据元素之间的间隙,其中步幅距离为二产生输入数据元素的间隙。可基于区域520的尺寸和间隙来确定区域530的尺寸。例如,参考图5B,基于每行具有10个输出数据元素并且具有三行(总共30个条目)的输出瓦片,区域530的尺寸可以通过将区域520的尺寸缩放两倍,使得区域520每行具有20个输入数据元素并且具有六行来确定。通过此类布置,由于在两个输入数据元素之间跳过一个输入数据元素,因此输入数据元素的总数(以及所得的部分和)可以等于输出瓦片中输出数据元素的总数,以及列求和缓冲器的条目数。
在确定区域520的尺寸之后,编译器可以将区域530与填充的输入数据阵列502对准。所述对准可以基于权重数据元素的坐标以及pad_north参数和pad_west参数。区域530的左上角相对于原始输入数据阵列502的坐标可以基于以下等式:
Start_coordinatesregion530=(weight_r–pad_west,weight_s–pad_north) (等式10)
在等式10中,start_coordinatesregion530是指区域530的左上角的坐标,weight_r是指权重数据元素的行坐标,weight_s是指权重数据元素的列坐标,pad_west是指添加到输入数据阵列502左侧的零的列数,而pad_north是指添加到输入数据阵列502顶部的零的行数。
如图5A所示,对于权重数据元素(0,0),区域530的左上角可以与零填充的输入数据阵列502的左上角对准。通过此类对准,在滤波器阵列504位于步幅位置(0,0)处的情况下权重数据元素(0,0)与区域530的最左上角元素重叠,所述最左上角元素表示要与权重数据元素相乘的第一输入数据元素并且相对于原始输入数据阵列502位于坐标(-1,-1)处。根据对准操作,编译器可以确定区域520相对于原始输入数据阵列502的目标坐标范围。在图5B中,区域530的目标坐标范围可以相对于原始输入数据阵列502的左上角为(-1,-1)和(4,18),所述左上角具有坐标(0,0)。
在操作540中,在确定区域530的目标坐标之后,编译器可以将步幅图案550叠加在区域530之上。步幅图案550可以基于步幅距离来定义重叠输入数据元素之间的间隙。步幅图案550中的每个深色方框可以表示重叠输入数据元素。如上所述,在步幅距离为二的情况下,间隙包含输入数据元素。当将步幅图案550叠加在区域530之上时,步幅图案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中有18个可以与权重数据元素(0,0)重叠的非零输入数据元素。因此,还可以将获取元素参数的数目设置为18。
编译器还可以基于零填充区域中的坐标的第一子集和原始输入数据阵列502中的坐标的第二子集确定缓冲器写入参数452的写入元素参数的目标偏移量、步长和数目。具体地,基于坐标的第一个子集,编译器可以确定前11个输入数据元素为零,这意味着需要跳过列求和缓冲器的前11个条目,并且目标偏移量参数可以设置为11。此外,由于要获取18个输入数据元素,因此将产生18个部分和,并且写入元素参数的数目可以设置为18。此外,与权重数据元素重叠的非零输入数据元素由步幅分离,这意味着当权重数据阵列位于输入数据阵列中的不同步幅位置处时,重叠非零输入数据元素之间没有间隙。因此,可以将缓冲器写入参数452的步长参数设置为一。
返回参考操作522和等式10,编译器可以通过沿行和列维度两者添加偏移量,基于权重数据元素的坐标来调整区域530相对于填充的输入数据阵列502的对准。例如,参考图5C,对于权重数据元素(1,1),编译器可以使用等式8计算区域530的左上角的坐标并获得(0,0)。也就是说,与权重数据元素(0,0)相比,区域530从填充的输入数据阵列502的左上角朝右和底部移位一个单位。区域530的左上角的坐标可以变为(0,0),并且区域530的坐标范围可以变为(0,0)到(5,19)。通过此类对准,表示待与权重数据元素(1,1)相乘的第一输入数据元素的区域530的最左上方元素与当滤波器阵列504位于步幅位置(0,0)时的权重数据元素重叠。对于权重数据元素(1,1),区域530以及步幅图案550与原始输入数据阵列502重叠,但不与零填充重叠。第一输入数据元素从坐标(0,0)开始,并且总共可以获取30个输入数据元素。此外,由于不存在零输入数据元素,因此不存在跳过列求和缓冲器的条目。
此外,对于权重数据元素(2,2),编译器可以使用等式10计算区域530的左上角的坐标并获得(1,1)。也就是说,编译器可以使区域530从填充的输入数据阵列502的左上角朝右和底部移位两个单位。区域530的坐标范围变为(1,1)到(6,20)。通过此类对准,表示待与权重数据元素(2,2)相乘的第一输入数据元素的区域530的最左上方元素与当滤波器阵列504位于步幅位置(0,0)处时的权重数据元素重叠。对于权重数据元素(2,2),区域530以及步幅图案550与原始输入数据阵列502重叠,但不与零填充重叠。第一输入数据元素从坐标(1,1)开始,并且总共可以获取27个输入数据元素。此外,由于不存在零输入数据元素,因此也不存在跳过列求和缓冲器的条目。
图5D展示了用于如上所述的图5A–图5C所示的卷积操作的权重数据元素(0,0)、(1,1)和(2,2)的存储器获取参数430和缓冲器写入参数452的实例。
图6A-图6F展示了用于执行示例转置卷积操作的加速器402的示例配置。如图6A所示,加速器402可以基于存储器获取参数430和缓冲器写入参数452进行配置以执行原始输入数据阵列502与原始滤波器阵列504之间的转置卷积操作,以产生相同的转置卷积输出阵列280,所述转置卷积输出阵列通过如图3所描述的经扩张输入数据阵列502与经旋转滤波器阵列504之间的卷积操作320产生。在图6A–图6F的实例中,示例转置卷积操作的步幅为二。
为了执行转置卷积操作,加速器402的控制器422可以基于原始滤波器阵列504中的第一权重数据元素的第一坐标从存储器系统404中获得第一权重数据元素,并且将第一权重数据元素加载到脉动阵列中。但是存储器获取参数430以及缓冲器写入参数452可以基于经经旋转过滤器阵列504中的第一权重数据元素的第二坐标,所述存储器获取参数包含获取元素的起始地址和数量以针对第一权重数据元素指示要加载到处理引擎阵列410中的输入数据元素的子集,所述缓冲器写入参数包括缓冲器写入参数的写入元素的目标偏移量和数量以指示求和缓冲器412的条目以从处理引擎阵列410接收部分和。编译器可以将第一坐标转换为第二坐标,并且基于第二坐标和转置卷积的速率产生存储器获取参数430和缓冲器写入参数452。
图6B展示了可以由编译器执行的坐标产生操作600。坐标产生操作600可以将原始滤波器阵列504中的权重数据元素的原始坐标604转换为经旋转滤波器阵列504中的权重数据元素的经旋转坐标606。所述转换可以通过坐标映射模块602(其可以包括用于基于例如上述等式6和7执行操作的电路系统)以及尺寸信息608执行,所述尺寸信息可以定义原始文件编档员阵列504的最大r和s坐标(例如,等式6和7中的R和S)。然后编译器可以基于经旋转坐标606确定存储器获取参数430和缓冲器写入参数452。编译器可以产生计算指令,所述计算指令控制控制器422基于从原始坐标604得到的地址从存储器子系统404和/或从外部存储器加载权重数据元素,同时在同一计算指令中基于经旋转坐标606包含存储器获取参数430和缓冲器写入参数452,以使控制器422能够基于经旋转坐标606选择输入数据元素以计算与所述权重数据元素的部分和,并基于经旋转坐标606将部分和存储在求和缓冲器412的条目处。
图6C到图6E展示了用于确定求和缓冲器412的条目以针对权重数据元素从处理引擎阵列410接收部分和的操作,所述操作也可以由编译器执行。用于确定列求和缓冲器的条目的操作可以类似于图5B的操作522和540并且可以基于使步幅图案(例如,步幅图案550)移位基于权重数据元素的坐标的偏移量,但是步幅图案的对准是相对于列求和缓冲器来考虑由经扩张输入数据阵列502的填充的零引起的条目之间的间隙,如下所述。在图6C到图6E所示的实例中,列求和缓冲器442可以具有18列和4行条目并且可以存储输出瓦片。
参考图6C,作为步幅为2的转置卷积操作的部分,经旋转滤波器阵列504可以以步幅1横贯经扩张输入数据阵列502。经旋转滤波器阵列504的(0,0)处的权重数据元素与原始输入数据阵列502的输入数据元素(由灰色方块表示)在步幅位置(1,1)、(1,3)等处重叠,其中重叠输入数据元素在图6C中用十字标记。步幅位置可以对应于列求和缓冲器442的条目E1,1、E1,3等(由阴影正方形表示)以从处理引擎阵列410的列432处的权重数据元素和重叠输入数据元素的乘法接收部分和。此外,对于权重数据元素与经扩张输入数据阵列502的填充零重叠的其它步幅位置,列求和缓冲器442的对应条目(例如,E0,0)不会从处理引擎阵列410接收部分和。如图6C所示,接收部分和的相邻条目由一个条目的间隙分离,所述间隙对应于经扩张输入数据阵列502的非零输入数据元素与转置卷积的步幅之间的间隙(一个零)。图6C还展示了接收经旋转滤波器阵列504的(1,1)和(2,2)处的权重数据元素的部分和的列求和缓冲器442的条目在相邻条目之间的间隙为一,这也对应于转置卷积的步幅。
编译器可以确定列求和缓冲器的条目以基于将步幅图案550(或与转置卷积的步幅相匹配的其它步幅图案)与表示转置卷积输出阵列280的部分的区域对准来接收部分和,并且所述区域可以基于第一权重数据元素相对于列求和缓冲器的参考位置的第二坐标来进行移位。除了被移位的区域是输出数据阵列的区域之外,所述操作可以类似于图5B和图5C中描述的那些操作。具体地,参考图6D,作为操作622的部分,基于列求和缓冲器442的尺寸(例如,条目的行数和列数),以及输出数据阵列的填充,编译器可以确定包含由转置卷积操作产生的转置卷积输出阵列280的部分的区域630。区域630包含可以存储在列求和缓冲器442中的最大大小的输出瓦片,包含输出瓦片上方的北填充区域636和输出瓦片左侧的西填充区域638的零填充区域。北填充区域636可以包含基于参数pad_north的一行或多行零,而西填充区域638可以包含基于参数pad_west的一列或多列零。
然后编译器可以将区域630相对于参考位置对准。参考位置可以是列求和缓冲器442之外的假想位置,同时考虑到北填充区域和西填充区域。所述对准可以基于权重数据元素的坐标以及pad_north参数和pad_west参数。区域630的左上角的坐标可以基于以下等式:
Start_coordinatesregion_630=(rotate_weight_r–pad_west,rotate_weight_s–pad_north)
(等式11)
在等式11中,start_coordinatesregion_630是指区域630的左上角相对于列求和缓冲器442的顶部和左边的填充区域的坐标,rotate_weight_r是指经旋转滤波器阵列504中的权重数据元素的行坐标,rotate_weight_s是指经旋转滤波器阵列504中的权重数据元素的列坐标,pad_west是指添加到输出瓦片左侧的零的列数,而pad_north是指添加到输出瓦片顶部的零的行数。
如图6D所示,对于在经旋转滤波器阵列504的(0,0)处的权重数据元素,可以将区域630的左上角与包括区域636和区域638的零填充区域的左上角对准,所述左上角可以相对于列求和缓冲器442位于坐标(-1,-1)处。通过此类对准,在经旋转滤波器阵列504在步幅位置(0,0)处的情况下经旋转滤波器阵列504的(0,0)处的权重数据元素W2,2与区域630的最左上方元素重叠,这可以表示权重数据元素的乘积与经扩张输入数据阵列502的第一输入数据元素之间产生的输出瓦片的第一输出数据元素。第一输出数据元素可以相对于列求和缓冲器442位于坐标(-1,-1)处。根据对准操作,编译器可以确定列求和缓冲器442内区域630的输出坐标范围,所述输出坐标范围对应于可以适合于列求和缓冲器442的所述权重数据元素的输出瓦片。在图6D中,利用具有4行和18列的列求和缓冲器442,列求和缓冲器442内的区域630的输出坐标范围可以是从(0,0)和(3,17)。
在操作640中,在确定区域630的输出坐标范围之后,编译器可以将步幅图案550叠加在区域630之上。步幅图案550可以定义接收部分和的相邻条目之间的间隙。在转置卷积的步幅为二的情况下,相邻条目的间隙为一。返回参照图6C,这反映了经扩张输入数据阵列502的非零输入数据元素之间的填充零的数量。当将步幅图案550叠加在区域630之上时,步幅图案550的左上角与区域630的左上角对准。基于对准和步幅图案550中的间隙,编译器可以基于区域630的最左上方元素的坐标(-1,-1)以及间隙信息来计算步幅图案550相对于原始输入数据阵列502的坐标。例如,步幅图案的第一元素与区域630的最左上方元素重叠并具有坐标(-1,-1),步幅图案与第一元素在同一行的第二元素与第一元素的间隙为1并且可以具有坐标(-1,1)等。基于步幅图案的坐标以及列求和缓冲器442内的区域630的输出坐标范围,编译器可以确定接收非零部分和的列求和缓冲器442的条目(和相关联的坐标)。例如,用于接收部分和的列求和缓冲器442的第一条目是坐标(1,1)处的E1,1,并且前19个条目(第一行中的18个条目,加上条目E0,1)不接收部分和并且将被跳过,这使得缓冲器写入参数452中的目标偏移量为19。此外,18个条目将接收部分和,这使得在缓冲器写入参数452中的写入元素的数量为18。进一步地,用于接收部分和的相邻条目由间隙1所分离,这在缓冲器写入参数452中产生步长2。
图6E展示了区域630相对于其它权重数据元素的零填充输出瓦片的对准。如在图5C的情况下,编译器可以基于经旋转滤波器阵列504中的权重数据元素的坐标来调整区域630相对于包括区域636和638的零填充区域的对准。调整可以基于沿行和列尺寸两者添加偏移量。例如,参考图6E,对于经旋转滤波器阵列504的(1,1)处的权重数据元素W1,1,编译器可以使用上述等式11计算区域630的左上角的坐标并获得(0,0)。也就是说,区域630从零填充的输出瓦片的左上角朝右和底部移位一个单位。区域630的左上角的坐标可以变为(0,0)并且列求和缓冲器442内的区域630的输出坐标范围是从(0,0)到(3,17)。第一输出数据元素从坐标(0,0)开始,并且总共18个部分和将存储在列求和缓冲器442中,其中相邻条目的间隙为1。编译器可以在缓冲器写入参数452中确定目标偏移量为0,写入元素数为18并且步长为2。
此外,对于经旋转滤波器阵列504的(2,2)处的权重数据元素W0,0,编译器可以使用上述等式11计算区域630的左上角的坐标并获得(1,1)。也就是说,区域630从包括区域636和638的零填充区域的左上角朝右和底部移位两个单位。区域630的左上角的坐标可以变为(1,1)并且列求和缓冲器442内的区域630的输出坐标范围是从(0,0)到(3,17)。第一输出数据元素从坐标(1,1)开始,并且总共18个部分和将存储在列求和缓冲器442中,其中相邻条目的间隙为1。编译器可以在缓冲器写入参数452中确定目标偏移量为19,写入元素数为18并且步长为2。
然后编译器可以基于投射操作来确定重叠输入数据元素,所述投射操作将列求和缓冲器442内的区域630的部分投射到原始输入数据阵列502的区域以标识要加载到处理引擎阵列410中的输入数据元素。图6F展示了投射操作。如图6F所示,可以将与列求和缓冲器442内的区域630的输出坐标范围相对应的区域632投射到原始输入数据阵列502内的区域645。投射操作类似于图5B的操作522,但区域645的大小以等于转置卷积的步幅的系数被缩小,以考虑到原始输入数据阵列502以相同的步幅系数扩张,从而获得经扩张输入数据阵列502。在区域630具有4行和18列的尺寸的情况下,原始输入数据阵列502中的投射区域645可以具有2行和9列并且包含18个连续的输入数据元素,其中中间没有跳过。编译器可以针对存储器获取参数430确定获取元素数为18并且步长为1。
编译器还可以计算偏移量650,所述偏移量指示区域630中的第一输入数据元素。偏移量650可以相对于原始输入数据阵列502的左上角。编译器可以基于经扩张输入数据阵列502中的第一输入数据元素的坐标来确定偏移量650,当经旋转滤波器阵列504与经扩张输入数据阵列502处于第一步幅位置时,所述第一输入数据元素与权重数据元素重叠,并基于转置卷积的速率缩小(通过执行整数除法)坐标。编译器可以基于偏移量650确定存储器获取参数430的起始地址。
经扩张输入数据阵列502中的第一重叠输入数据元素的坐标可以基于经扩张输入数据阵列502中的权重数据元素的经旋转坐标来确定。例如,返回参考图6C,对于经旋转滤波器阵列504的(0,0)处的权重数据元素W2,2,经扩张输入数据阵列中的第一输入数据元素的坐标为(1,1)。偏移量650可以通过以系数2(转置卷积的步幅)缩小(1,1)来确定以为原始输入数据阵列502中的第一输入数据元素的坐标获得(0,0)。基于相同的技术,编译器可以针对权重数据元素W1,1和W0,0确定原始输入数据阵列502中的第一输入数据元素的坐标分别为(0,0)和(1,1)。
图6G展示了用于如上所述的图6A–图6F所示的转置卷积操作的权重数据元素W0,0、W1,1和W2,2的存储器获取参数430和缓冲器写入参数452的实例。控制器422可以基于其在原始过滤器阵列504中的坐标来获取权重数据元素W0,0、W1,1和W2,2,但是存储器获取参数430和缓冲器写入参数452中的参数是如上所述基于其在经旋转过滤器阵列504中的经旋转坐标来确定的。
如上所述,转置卷积操作可以产生零输出数据元素。如图2F所示,当通过在大于权重数据阵列尺寸的输入数据元素之间插入多个零来产生经扩张输出数据阵列时,就会发生这种情况。例如,在图2F中,转置卷积操作的步幅是四并且在相邻输入数据元素之间填充三个零以形成经扩张图像270,而经旋转滤波器260的尺寸为3×3,并且当经旋转滤波器260与填充的零完全重叠时可以产生零输出数据元素。
为了提高计算效率,控制器422可以控制列求和缓冲器(例如,列求和缓冲器442)从条目输出零以表示零输出数据元素,而无需将零输入数据元素传递到处理引擎阵列410中以计算零部分和。图7A和图7B展示了可以在加速器402中用于输出零输出数据元素的示例技术。如图7A所示,控制器422可以在执行用于转置卷积的第一计算之前重置列求和缓冲器(和整个求和缓冲器412)。控制器422可以基于由编译器产生的计算指令执行重置。在此类实例中,控制器可以执行重置计算指令以将列求和缓冲器(以及整个求和缓冲器412)的内容初始化为零,然后执行计算指令以计算每个权重数据元素的部分和。在计算期间未接收到任何部分和的条目可以输出零作为输出数据元素。
图7B展示了用于输出零输出数据元素的另一种技术。如图7B所示,求和缓冲器412包含用于对列求和缓冲器(例如,列求和缓冲器442)执行读取/写入操作的存取电路702。存取电路702可以接收包含地址的读取/写入请求,并基于所述地址对列求和缓冲器的条目执行读取/写入操作。例如,写入请求可以包含基于缓冲器写入参数452的目标偏移量参数的地址。作为另一实例,读取请求可以包含每个条目的地址,以读出输出瓦片的输出数据元素,并将输出数据元素提供给例如激活引擎416、池化引擎418等以用于另外的处理。
在一些实例中,如图7B所示,求和缓冲器412可以包含一组写入状态寄存器704和多路器706。写入状态寄存器704可以存储每个条目的标志以指示所述条目是否已基于写入请求中包含的地址从存取电路702接收到写入操作。当存取电路702接收到包含条目地址的写入请求时,存取电路702可以基于所述地址断言与写入状态寄存器704中的所述条目相关联的标志。当存取电路702接收到包含所述条目的地址的读取请求时,写入状态寄存器704可以将基于所述地址的断言标志提供给多路器706,所述多路器可以输出存储在所述条目中的内容。另一方面,如果所述条目在读取请求之前未接收到写入操作,则所述条目的标志将保持解除断言,并且写入状态寄存器704可以向多路器706提供解除断言标志,所述多路器可以基于解除断言标志输出零。在一些实例中,写入状态寄存器704可以在执行用于转置卷积操作的第一计算指令之前由控制器422重置,并且写入状态寄存器704的重置不需要控制器执行额外的重置指令。
图8包含了展示如本文所描述的编译器830可以在其上运行的主机系统800的实例的框图。所展示的主机系统800是计算装置的实例,并且包含处理器802、处理器存储器804、至少一个存储装置806、各种输入/输出(I/O)装置808和至少一个网络接口810。在图8的实例中,主机系统800还包含加速引擎812,所述加速引擎可以包含图4A-图4C的加速器402。在各种实例中,主机系统800可实施为数据中心、台式计算机、膝上型计算机、平板电脑或智能电话,以及其它实例中的服务器。在一些实例中,下文所讨论如在主机系统800中执行或包含在其内的操作或组件可以在其它计算机装置中执行或包含在其内。例如,当加速引擎812定位于不同的主机系统处时,编译器830可以在主机系统800上执行。
处理器802是可以以指令的形式执行程序代码的集成电路装置。程序代码可以用于各种软件应用或工具,如操作系统820或所展示的编译器830。当处理器802正在执行程序时,程序的指令可以存储在处理器存储器804中。指令还可以存储在其它地方,如存储在存储装置806上,并且可以在处理器802需要时加载到处理器存储器804中。处理器802还可以使用处理器存储器804用于临时存储处理器802操作的其它数据。在各个实例中,替代地或另外,虽然非易失性存储器类型可以用于处理器存储器804,但处理器存储器804是易失性存储器类型,如随机存取存储器类型。
存储装置806是可以包含非易失性存储器的装置的实例。例如,存储装置806可以是磁盘驱动器、固态驱动器或光驱,以及其它实例。存储装置806可以进一步是非暂态的,使得当存储装置806未通电时,存储装置806上存储的程序代码和其它数据仍然存在。
存储装置806是外围装置的一个实例,所述外围装置是可以耦接到主机系统800以向主机系统800添加功能的组件。外围装置的其它实例包含输入/输出装置808和网络接口810。输入/输出装置808可以包含用户输入和输出装置,如键盘、鼠标、触摸屏、麦克风、显示屏、扬声器、打印机和扫描仪,以及其它实例。可以使用网络接口卡来实施的网络接口810可以提供对一个或多个网络的存取。网络接口810可以包含例如用于连接网络电缆和/或无线天线以与Wi-Fi和/或蜂窝网络通信的物理端口。网络接口810也可以被描述为I/O装置。
加速引擎812也是另一种类型的外围装置或I/O装置。加速引擎812是一种专门用于执行某些操作的装置,这些操作可以由处理器802执行,但是可以由加速引擎812执行得更快。例如,加速引擎812可以是神经网络加速器,并且如此能够比由处理器802执行计算时更高效地执行神经网络的大规模并行计算。作为另一个实例,加速引擎812可以是图形处理单元(GPU),并且可以被优化以执行图形渲染所需的计算。可以由加速引擎812实施的装置的其它实例包含密码加速器、压缩和解压缩加速器、3-D加速器、正则表达式加速器、安全加速器等。
在各个实例中,加速引擎812可以实施程序代码以执行某些操作。例如,当加速引擎812是神经网络加速器时,加速引擎812可以被编程以执行特定的神经网络,如执行图像识别的神经网络或执行机器翻译的神经网络。作为另外的实例,为了支持神经网络的执行,加速引擎812可以被编程以执行操作,如将神经网络的数据从处理器存储器804(例如)复制到加速引擎812中,将神经网络的输入数据从处理器存储器804复制到加速引擎812中,和/或将来自加速引擎812的结果复制到处理器存储器804中,以及其它实例。
为了产生加速引擎812的程序代码,在各个实例中,主机系统800可以执行编译器830。通常,编译器是将以人类可读语言编写的程序代码翻译成可以由集成电路装置读取和处理的格式(例如,机器指令)的软件程序。在图8的实例中,加速引擎812是神经网络加速器,并且编译器830用于将神经网络描述编译为要由加速引擎812执行的指令。当加速引擎812实施不同类型的加速器时,可以使用另一个编译器。
例如,当操作系统820从输入/输出装置708接收键盘、鼠标、触摸屏、语音命令或其它输入时,编译器830可以被激活。输入可以进一步包含用于编译器830的参数,如用于编译的输入代码842和用于编译过程的配置选项。一旦编译器830被激活,处理器802就可以将编译器830的指令加载到处理器存储器804中,并且可以执行指令。
在图8的实例中,编译器830包含第一阶段832、第二阶段836和第三阶段840,每个阶段各自执行不同的操作以产生经编译的代码844。在其它实例中,编译器830可以将第一阶段832、第二阶段836和/或第三阶段840的操作组合成更少的阶段,或者可以将所述阶段中的一个阶段的操作划分成多个阶段。
第一阶段832可以接收和处理输入代码842。输入代码842可以用高级编程语言描述程序,如Java、C++或Tensorflow,以及许多其它实例。输入代码842可以描述例如执行图像识别、语音识别、机器翻译或其它操作的步骤。可以例如从存储装置806获得输入代码842。替代地,虽然此处未展示,输入代码842可以定位于处理器存储器804中,或者可以使用网络接口810从网络位置获得。输入代码842的处理可以包含将输入代码842中所描述的操作分类成层,其中一层的输出提供到下一层的输入。处理还可以包含识别要由处理器802,而不是由加速引擎812执行的步骤。例如,通过执行驱动程序822,处理器802可能需要执行如配置直接存储器存取(DMA)描述符以将数据移入加速引擎812或从所述加速引擎移出的步骤,以及其它实例。
第一阶段832的输出834可以被组织例如在神经网络的层、节点和节点之间的连接中。第二阶段836可以对此输出834执行中间处理。例如,在任何一层中或在层中的任何一个节点处执行的操作对于加速引擎812来说可能太多而无法同时执行。加速引擎812可以例如具有用于计算所需的数据的有限数量的区域存储空间,或者计算可以比加速引擎812一次能够执行的计算更多。在此实例中,第一阶段832可以将层或节点的操作分解成更小的操作,所述操作可以适合加速引擎的本地存储器和/或可以适合加速引擎812的计算能力。对第一阶段832的输出834进行的处理可以包含其它步骤,如调度或确定加速引擎812和/或处理器802将执行操作的顺序,以及其它实例。
在各个实例中,第二阶段836的输出838包含要由加速引擎812的组件按照要执行的步骤的顺序执行的各个步骤。输出838可以表示为例如数据流程图,其中图中的节点表示存储器操作、计算和其它操作,并且节点之间的边缘或连接表示节点之间的依赖性,如数据依赖性、内存依赖性或操作依赖性,以及其它实例。
第三阶段840可以对第二阶段836的输出838进行操作,并且在产生要由加速引擎812执行的指令之前执行各个步骤。这些步骤可以包含例如去除冗余依赖性、通过将同步指令插入到代码中来解决或处理节点之间的依赖性、标识存储器使用或存储器带宽使用中的可能优化以及其它操作。
在一些实例中,第三阶段840可以包含数据调度器850以调度如输入数据和权重数据等数据在加速引擎812中的移动,从而支持各种操作,如如上所述的卷积操作和经扩张卷积。例如,数据调度器850可以获得指令(例如,从数据流图中)以在输入数据阵列与滤波器阵列之间执行卷积操作(例如,正常卷积、经扩张卷积等)以产生卷积输出阵列。基于加速引擎812处的求和缓冲器的大小,数据调度器850可以确定适合于求和缓冲器的输出瓦片,并且可以确定指令序列以发起卷积操作以一次产生一个输出瓦片。对于每个指令,数据调度器850可以确定将滤波器阵列的权重数据元素加载到处理引擎阵列410中的序列,并基于以上在图5A-图6G中针对如普通卷积操作、转置卷积操作等各种类型的卷积操作描述的技术,针对每个权重数据元素确定要加载到处理引擎410中的输入数据的子集。例如,数据调度器850可以执行将权重数据元素的坐标转换为经旋转坐标,如图6B所示。然后数据调度器850可以基于根据经旋转坐标使步幅图案偏移来确定输出数据阵列中的与求和缓冲器中的部分和的目标相对应的第一区域(例如,图6F的区域632),如图6C-6E所描述,并且然后将第一区域投射回输入数据阵列以获得第二区域(例如,图6F的区域645),所述第二区域包含要被选择用于与所述权重数据元素相乘的输入数据元素,如图6F所描述。投射可以基于转置卷积操作的步幅,其中第二区域的尺寸基于以转置卷积操作的步幅缩放的第一区域。基于投射操作,数据调度器850还可以确定一组缓冲器写入参数452,所述缓冲器写入参数包含目标偏移量和多个写入元素。数据调度器850然后可以产生指令来控制加速引擎812加载权重数据元素和输入数据元素的对应子集以执行转置卷积操作。
第三阶段840的输出是经编译的代码844,所述经编译的代码可以包含二进制格式的机器指令。在一些实例中,经编译的代码844可以存储在处理器存储器804中。替代地或另外,经编译的代码844可以复制到存储装置806或复制到网络位置。如上所述,加速引擎812可以定位于不同的主机系统处,在这种情况下,经编译的代码844可以通过网络接口810发送到另一个主机系统。
在图8的实例中,主机系统800可以执行管理加速引擎812的驱动程序822,所述驱动程序也可以被称为装置驱动程序或运行时间驱动程序。驱动程序822可以提供在主机系统800上(或在另一主机系统上)执行的应用与加速引擎812之间的接口。例如,驱动程序822可以提供应用程序接口(API),所述API定义用于将输入数据馈送到加速引擎812并且定义对输入数据执行的操作的功能。在此实例和其它实例中,驱动程序822可以配置加速引擎812来执行操作。例如,驱动程序822可以标识加速引擎812要执行的神经网络,以及针对神经网络的经编译的代码844在处理器存储器804中或存储装置806上的位置。驱动程序822可以进一步加载到加速引擎812中或使加速引擎812加载经编译的代码844,可以加载或使加速引擎812加载神经网络将要操作的输入数据,和/或可以使加速引擎812执行输入数据。一旦加速引擎812已经完成,加速引擎812就可以通知驱动程序822,并且驱动程序822就可以将结果递送回请求结果的应用。
图9展示了用于执行转置卷积操作的示例方法900的流程图。方法900可以通过例如加速器402的各个组件来执行,所述组件包含存储器子系统404、处理引擎阵列410、求和缓冲器412和控制器422。
方法900从步骤902开始,其中控制器(例如,控制器422)可以基于权重数据元素的阵列中的第一权重数据元素的第一坐标从存储器(例如,存储器子系统404)获得权重数据元素的阵列的第一权重数据元素。权重数据元素可以存储在存储器子系统404中的地址中,这些地址反映权重数据元素阵列中的权重数据元素的坐标。控制器422可在第一计算指令中具备第一权重数据元素的地址,并且可在执行第一计算指令后就基于来自存储器子系统404的地址而获得第一权重数据元素。
在步骤904中,控制器可以将第一权重数据元素加载到脉动阵列(例如,处理引擎阵列410)中。如上所述,每个处理引擎411可以存储权重数据元素,并且控制器可以将第一权重数据元素发送到处理引擎411进行存储。
在步骤906中,控制器可以基于权重数据元素的阵列的经180度旋转型式中的第一权重数据元素的第二坐标以及转置卷积操作的步幅选择输入数据元素的阵列的输入数据元素的第一子集。输入数据元素的第一子集将在处理引擎411处与第一权重数据元素相乘以产生第一部分和,所述第一部分和可以被转发到求和缓冲器412的列求和缓冲器(例如,列求和缓冲器442)。第一子集可以基于包含第一组存储器获取参数430的第一计算指令来选择,所述存储器获取参数可以包含元素的起始地址、步长和数量。当权重数据元素的经180度旋转阵列位于转置卷积操作中的输入数据元素的经扩张阵列中的不同步幅位置处时,元素的起始地址和数量可以反映与第一权重数据元素重叠的输入数据元素。输入数据元素的第一子集的确定可以包含基于第二坐标使步幅图案相对于列求和缓冲器442的参考位置移位,以确定表示可以适合于列求和缓冲器442的输出瓦片的第一区域,并将第一区域投射回输入数据元素的阵列中的第二区域以确定包含在第一子集中的输入数据元素的计数。步幅图案可以包含一组图案地址,其中图案地址之间的间隙反映了转置卷积操作的步幅。决定第一子集中包含的输入数据元素的计数的第二区域大小可以基于第一区域(其反映列求和缓冲器442的尺寸)和以转置卷积操作的步幅的倒数缩小来确定。第一子集的起始地址可以基于输入数据元素的经扩张阵列中的非零输入数据元素的坐标并以转置卷积操作的步幅的倒数缩小坐标来确定,当权重数据元素的经180度旋转阵列位于输入数据元素的经扩张阵列内的第一步幅位置处时,所述非零输入数据元素与第一权重数据元素重叠。
在步骤908中,控制器可以将从来自存储器的第一地址开始的第一子集的每个输入数据元素流式传输到脉动阵列中以与第一权重数据元素相乘以计算第一部分和。输入数据元素可以按顺序发送到处理引擎411,所述处理引擎存储步骤904中的第一权重数据元素。处理引擎411可以将每个输入数据元素与第一权重数据元素相乘以产生第一部分和。第一地址可以是上文所描述的第一子集的起始地址。可以基于包含第一组缓冲器写入参数452的第一计算指令而将第一部分和发送到列求和缓冲器中的第一目标地址,所述第一组缓冲器写入参数可以包含写入元素的目标偏移量、步长和数目。可以将第一部分和添加到存储在第一目的地地址处的数据。第一组缓冲器写入参数452可以基于如以上在步骤906中所述的经移位的步幅图案。
在步骤910中,控制器可以基于权重数据元素的阵列的第二权重数据元素的第三坐标从存储器获得权重数据元素的阵列的第二权重数据元素。如上所述,权重数据元素可以存储在存储器子系统404中的地址中,这些地址反映权重数据元素阵列中的权重数据元素的坐标。控制器422可在第二计算指令中具备第二权重数据元素的地址,并且可在执行第二计算指令后就基于来自存储器子系统404的地址而获得第二权重数据元素。
在步骤912中,控制器可以将第二权重数据元素加载到脉动阵列中。第二权重数据元素可以取代存储在步骤904的处理引擎411中的第一权重数据元素。
在步骤914中,控制器可以基于权重数据元素的阵列的经180度旋转型式中的第二权重数据元素的第四坐标以及转置卷积操作的步幅选择输入数据元素的阵列的输入数据元素的第二子集。输入数据元素的第二子集将在处理引擎411处与第二权重数据元素相乘以产生第二部分和,所述第二部分和可以被转发到列求和缓冲器。第二子集可以基于包含第二组存储器获取参数430的第二计算指令来选择。当权重数据元素的经180度旋转阵列位于转置卷积操作中的输入数据元素的经扩张阵列内的不同步幅位置处时,第二子集可以是与第二权重数据元素重叠的输入数据元素。输入数据元素的第二子集的确定可以包含基于第四坐标使步幅图案相对于列求和缓冲器442的参考位置移位以确定输出瓦片,并将输出瓦片投射回输入数据元素的阵列以确定包含在第二子集中的输入数据元素的计数。第二子集的起始地址可以基于输入数据元素的经扩张阵列中的非零输入数据元素的坐标来确定,当权重数据元素的经180度旋转阵列相对于输入数据元素的经扩张阵列位于第一步幅位置处时,所述非零输入数据元素与第二权重数据元素重叠。
在步骤916中,控制器可以将从来自存储器的第二地址开始的第二子集的每个输入数据元素流式传输到脉动阵列中以与第二权重数据元素相乘以计算第二部分和。输入数据元素可以按顺序发送到处理引擎411,所述处理引擎存储步骤912中的第二权重数据元素。处理引擎411可以将每个输入数据元素与第二权重数据元素相乘以产生第二部分和。第二地址可以是上文所描述的第二子集的起始地址。可以基于包含第二组缓冲器写入参数452的第二计算指令而将第二部分和发送到列求和缓冲器中的第二目标地址。第二部分和可以添加到存储在第二目标地址处的数据,所述第二目标地址中一些或全部可以与第一目标地址重叠。第二组缓冲器写入参数452可以基于如以上在步骤914中所述的经移位的步幅图案。
在步骤918中,控制器可以基于第一部分和与第二部分和产生转置卷积操作的输出数据阵列。如上所述,一些第一目标地址和第二目标地址可以重叠,并且输出数据阵列的一些输出数据元素可以包括第一部分和与第二部分和的总和。输出数据阵列的其它输出数据元素可通过第一部分和与第二部分和的叠加而形成。
图10展示了为神经网络处理器产生用于执行转置卷积操作的指令的示例方法1000的流程图。方法1000可以由如图8中的编译器830等编译器执行。
方法1000起始于步骤1002,其中编译器可以接收指示由脉动阵列(例如,处理引擎阵列410)基于权重数据阵列和输入数据阵列执行以产生输出数据阵列的转置卷积操作的步幅的第一信息。例如,可以从输入代码842接收第一信息,所述输入代码可以表示使用转置卷积操作结果的应用(上采样操作、向后传播操作等)。
在步骤1004中,编译器可以接收指示如列求和缓冲器442等求和缓冲器的尺寸的第二信息。求和缓冲器累加并存储来自脉动阵列的部分和以用于转置卷积操作。第二信息也可以从例如输入代码842接收。如上所述,尺寸信息可以用于确定输出瓦片,并且通过投射操作,可以用于针对权重数据阵列的每个权重数据元素确定输入数据阵列的输入数据元素的子集。
在步骤1006中,编译器可以获得权重数据阵列与权重数据阵列的经180度旋转型式之间坐标的映射。所述映射可以通过例如坐标映射模块602来执行,所述坐标映射模块可以将权重数据阵列中的每个权重数据元素的原始坐标604转换为权重数据阵列的经180度旋转型式的权重数据元素的旋转坐标606。
在步骤1008中,编译器可以针对权重数据阵列的每个权重数据元素确定求和缓冲器的目标地址以接收部分和。部分和来自涉及每个权重数据元素的转置卷积操作。所述确定可以基于转置卷积的步幅、求和缓冲器的尺寸信息、权重数据的阵列中的每个权重数据元素的坐标以及坐标的映射。具体地,返回参照图6B,编译器可以将权重数据的阵列中的每个权重数据元素的坐标转换为经旋转权重数据阵列中的权重数据元素的经旋转坐标。编译器可以基于根据经旋转坐标使步幅图案偏移来确定输出数据阵列中的与求和缓冲器中的部分和的目标相对应的第一区域。步幅图案可以定义一组图案坐标,其中相邻图案坐标由与转置卷积操作的步幅相对应的距离分离。求和缓冲器的尺寸(例如,列和行的数目)可以定义包括输出数据阵列中的第一区域的输出数据元素的输出瓦片。编译器可以以基于第二坐标的偏移量相对于参考位置使步幅图案偏移。参考位置可以位于映射到求和缓冲器的目标的输出瓦片的第一输出数据元素处,或映射到求和缓冲器的目标的具有北填充和西填充的输出数据阵列的假想位置处。求和缓冲器的尺寸(例如,列和行的数目)还可以定义输出瓦片的输出数据元素的一系列坐标。编译器可以将经移位的图案坐标与所述一系列坐标进行比较以确定一组重叠坐标。重叠坐标可以提供求和缓冲器的目标地址以接收第一部分和。
在步骤1010中,编译器可以针对权重数据阵列的每个权重数据元素确定输入数据阵列的输入数据元素的子集以与每个权重数据元素相乘以计算部分和。输入数据元素的子集是基于来自目标地址的投射操作、权重数据的阵列中的每个权重数据元素的坐标以及坐标的映射来确定的。返回参照图6F,编译器可以确定包括要存储在求和缓冲器的目标地址处的输出瓦片的第一区域,并将第一区域投射回输入数据阵列的第二区域以确定要包含在子集中的输入数据元素的数量。投射操作可以基于以转置卷积的步幅倒数缩小第一区域。编译器还可以基于经旋转权重数据阵列中的第一权重数据元素的第二坐标计算经扩张输入数据阵列中的输入数据元素中的第一输入数据元素的第三坐标,当经旋转权重数据阵列相对于经扩张输入数据阵列位于第一步幅位置处时,所述第一输入数据元素与第一权重数据元素重叠。作为投射操作的部分,编译器可以以步幅的倒数缩放第三坐标以确定原始输入数据阵列中的第一输入数据元素的第四坐标。
步骤1012中,编译器可以产生用于权重数据阵列的每个权重数据元素的计算指令以包含指示目标地址和输入数据元素的子集的信息。所述信息可以包含例如起始源地址和基于步骤1010中投射操作的输入数据元素的计数。所述信息还可以包含例如起始目标地址、指示相邻目标地址之间间隙的步长,以及基于步骤1012中的操作的目标地址的计数。计算指令还可以包含基于权重数据阵列中的每个权重数据元素的坐标的存储器中的每个权重数据元素的地址。
本公开的实施例还可以根据以下条款进行描述:
1.一种存储指令的非暂时性计算机可读介质,所述指令在由一个或多个硬件处理器执行时使所述一个或多个硬件处理器:
将权重数据元素的阵列的第一权重数据元素从存储器加载到脉动阵列中,所述第一权重数据元素在权重数据元素的所述阵列中具有第一坐标;
从所述指令中提取指示待从所述存储器获得的输入数据元素的第一子集的信息,所述第一子集基于转置卷积操作的步幅和权重数据元素的经旋转阵列中的第一权重数据元素的第二坐标;
基于所述信息从所述存储器获得输入数据元素的所述第一子集;
将输入数据元素的所述第一子集加载到所述脉动阵列中;并且
基于所述第一权重数据元素和输入数据元素的所述第一子集控制所述脉动阵列以执行第一计算以产生输出数据元素的阵列的输出数据元素。
2.根据条款1所述的非暂时性计算机可读介质,其中所述指令包含:
基于所述第一坐标的所述存储器中的所述第一权重数据元素的权重地址;以及
基于所述第二坐标的所述存储器中的输入数据元素的所述第一子集的源地址,
其中所述指令的所述执行使所述一个或多个硬件处理器基于所述第一地址从所述存储器获得所述第一权重数据元素并且基于所述第二地址从所述存储器获得输入数据元素的所述第一子集。
3.根据条款2所述的非暂时性计算机可读介质,其中所述输入数据元素存储在所述存储器内的连续地址空间中。
4.根据条款3所述的非暂时性计算机可读介质,其中所述源地址是与存储输入数据元素的所述第一子集的所述连续地址空间的第一部分相关联的第一源地址;
其中所述指令包含:
所述第一源地址;
输入数据元素的所述第一子集中的输入数据元素的第一计数;
与存储输入数据元素的第二子集的所述连续地址空间的第二部分相关联的第二源地址;以及
输入数据元素的所述第二子集中的输入数据元素的第二计数;
其中所述指令在由所述一个或多个硬件处理器执行时进一步使所述一个或多个硬件处理器:
基于所述第一源地址和所述第一计数从所述存储器获得所述输入数据元素的所述第一子集;
控制所述脉动阵列以在输入数据元素的所述第一子集与所述第一权重数据元素之间执行所述第一计算以产生第一部分和;
基于所述第二源地址和所述第二计数从所述存储器获得所述输入数据元素的所述第二子集;
从所述存储器获得第二权重数据元素;并且
控制所述脉动阵列以在所述输入数据元素的所述第二子集与所述第二权重数据元素之间执行第二计算以产生第二部分和;并且
其中所述输出数据元素是从所述第一部分和与所述第二部分和产生的。
5.根据条款4所述的非暂时性计算机可读介质,其中所述指令包含用于接收所述第一部分和的求和缓冲器的第一目标地址以及用于接收所述第二部分和的所述求和缓冲器的第二目标地址;
其中所述第一目标地址基于从参考位置移位第一偏移量的步幅图案,所述第一偏移量基于所述第一坐标;
其中所述第二目标地址基于从所述参考位置移位第二偏移量的所述步幅图案,所述第二偏移量基于所述第二坐标;并且
其中所述步幅图案基于所述转置卷积操作的所述步幅。
6.根据条款5所述的非暂时性计算机可读介质,其中所述参考位置基于输出数据元素的所述阵列的北填充的大小和西填充的大小。
7.根据条款5或6所述的非暂时性计算机可读介质,其中:
所述求和缓冲器的目标地址被映射到输出数据元素的所述阵列中的输出数据元素的一系列坐标;
所述步幅图案定义图案坐标;
所述步幅图案的相邻图案坐标之间的间隙基于所述步幅;
所述步幅图案的所述移位包含所述图案坐标的移位;并且
所述第一目标地址和所述第二目标地址分别包含映射到所述求和缓冲器的所述目标地址的所述输出数据元素的所述一系列坐标内的经移位的步幅图案的第一图案坐标和第二图案坐标。
8.根据条款7所述的非暂时性计算机可读介质,其中所述指令在由所述一个或多个硬件处理器执行时使所述一个或多个硬件处理器引起所述求和缓冲器:
将所述第一部分和添加到存储在所述第一目标地址处的数据;并且
将所述第二部分和添加到存储在所述第二目标地址处的数据。
9.根据条款7或8所述的非暂时性计算机可读介质,其中:
权重数据元素的所述经旋转阵列基于权重数据元素的所述阵列的180度旋转;
所述转置卷积操作包括权重数据元素的所述经旋转阵列与输入数据元素的经扩张阵列之间的卷积操作,所述输入数据元素的所述经扩张阵列是基于根据所述步幅在输入数据元素的所述阵列的输入数据元素之间填充多个零来扩张的;
所述第一源地址基于输入数据的所述经扩张阵列中的第一输入元素的第一位置,当权重数据元素的所述经旋转阵列相对于输入数据元素的所述经扩张阵列位于起始步幅位置处时,所述第一输入元素与权重数据元素的所述经旋转阵列的所述第一权重数据元素重叠;
所述输入数据元素的所述第一子集中的输入数据元素的所述第一计数基于所述第一目标地址的计数;
所述第二源地址基于输入数据元素的所述经扩张阵列中的第二输入元素的第二位置,当权重数据元素的所述经旋转阵列相对于输入数据的所述经扩张阵列位于所述起始步幅位置处时,所述第二输入元素与权重数据元素的所述经旋转阵列的所述第二权重数据元素重叠;并且
所述输入数据元素的所述第二子集中的输入数据元素的所述第二计数基于所述第二目标地址的计数。
10.根据条款5到9中任一项所述的非暂时性计算机可读介质,其中所述指令在由所述一个或多个硬件处理器执行时使所述一个或多个硬件处理器:将所述求和缓冲器初始化为零。
11.根据条款5到10中任一项所述的非暂时性计算机可读介质,其中所述指令在由所述一个或多个硬件处理器执行时使所述一个或多个硬件处理器:
基于自所述转置卷积操作开始以来第三目标地址未接收到写入操作的指示来控制所述求和缓冲器以针对所述第三目标地址处的输出数据元素输出零。
12.一种设备,其包括:
存储器,所述存储器存储一组指令;以及
一个或多个硬件处理器,所述一个或多个硬件处理器被配置成执行所述一组指令以:
接收指示待由脉动阵列基于权重数据阵列和输入数据阵列执行以产生输出数据阵列的转置卷积操作的步幅的第一信息;
接收指示求和缓冲器的尺寸的第二信息;
获得所述权重数据阵列与所述权重数据阵列的经180度旋转型式之间坐标的映射;
针对所述权重数据阵列的每个权重数据元素确定所述求和缓冲器的目标地址以从涉及所述每个权重数据元素的所述转置卷积操作接收部分和,所述目标地址是基于所述转置卷积的所述步幅、所述求和缓冲器的所述尺寸信息、所述权重数据阵列中的所述每个权重数据元素的坐标和坐标的所述映射来确定的;
针对所述权重数据阵列的每个权重数据确定所述输入数据阵列的输入数据元素的子集以与所述每个权重数据元素相乘以产生所述部分和,输入数据元素的所述子集是基于来自所述目标地址的投射操作、所述权重数据阵列中的所述每个权重数据元素的所述坐标和坐标的所述映射来确定的;并且
产生用于所述权重数据阵列的每个权重数据元素的计算指令以包含指示所述目标地址和输入数据元素的所述子集的第三信息。
13.根据条款12所述的设备,其中所述一个或多个硬件处理器被配置成执行所述一组指令以针对所述每个权重数据元素:
基于所述权重数据阵列中的所述每个权重数据元素的坐标的所述映射和坐标确定所述权重数据阵列的所述经180度旋转型式中的所述权重数据的经旋转坐标;
基于所述经旋转坐标确定偏移量;
基于所述偏移量使步幅图案相对于参考位置移位;并且
基于所述求和缓冲器的所述尺寸和经移位的步幅图案确定所述求和缓冲器的所述目标地址以从所述脉动阵列接收部分和。
14.根据条款13所述的设备,其中所述转置卷积操作包括所述权重数据阵列的所述经180度旋转型式与经扩张输入数据阵列之间的卷积操作,所述经扩张输入数据阵列是基于根据所述步幅在所述输入数据阵列的输入数据元素之间填充多个零来扩张的;
其中所述一个或多个硬件处理器被配置成执行所述一组指令以执行所述投射操作,所述投射操作包括针对所述每个权重数据元素:
确定所述经扩张输入数据阵列中的第一输入元素的第一位置,当所述经180度旋转权重数据阵列相对于所述经扩张输入数据阵列位于起始步幅位置处时,所述第一输入元素与所述每个权重数据元素重叠;
基于以所述步幅的倒数缩放所述第一位置来确定所述输入数据阵列中的所述第一输入元素的第二位置;并且
基于所述目标地址的计数确定从所述第一输入元素开始包含在输入数据元素的所述子集内的输入数据元素的计数。
15.根据条款13或14中任一项所述的设备,其中所述参考位置基于所述输出数据阵列的北填充的大小和西填充的大小。
16.一种用于在神经网络加速器中执行转置卷积操作的方法,所述方法包括:
从存储器中获得权重数据元素的阵列的第一权重数据元素,其中所述获得基于权重数据元素的所述阵列中的所述第一权重数据元素的第一坐标;
将所述第一权重数据元素加载到所述神经网络加速器的脉动阵列中;
接收输入数据元素的阵列的输入数据元素的第一子集的选择以与所述第一权重数据元素相乘,所述第一子集是基于权重数据元素的所述阵列的经180度旋转型式中的所述第一权重数据元素的第二坐标和所述转置卷积操作的步幅来选择的;
将从来自所述存储器的第一源地址开始的所述第一子集的每个输入数据元素流式传输到所述脉动阵列中以计算第一部分和;
从所述存储器获得权重数据元素的所述阵列的第二权重数据元素,其中所述获得基于权重数据元素的所述阵列的所述第二权重数据元素的第三坐标;
将所述第二权重数据元素加载到所述脉动阵列中;
接收输入数据元素的所述阵列的输入数据元素的第二子集的选择以与所述第二权重数据元素相乘,所述第二子集是基于权重数据元素的所述阵列的所述经180度旋转型式中的所述第二权重数据元素的第四坐标和所述转置卷积操作的所述步幅来选择的;
将从来自所述存储器的第二地址开始的所述第二子集的每个输入数据元素流式传输到所述脉动阵列中以计算第二部分和;以及
基于所述第一部分和与所述第二部分和产生所述转置卷积操作的输出数据阵列。
17.根据条款16所述的方法,其进一步包括:
将所述第一部分和与存储在求和缓冲器中的第一目标地址处的部分和相加,所述第一目标地址基于所述步幅和权重数据元素的所述阵列的所述经180度旋转型式中的所述第一权重数据元素的第二坐标;以及
将所述第二部分和与存储在所述求和缓冲器中的第二目标地址处的部分和相加,所述第二目标地址基于所述步幅和权重数据元素的所述阵列的所述经180度旋转型式中的所述第二权重数据元素的第四坐标;
其中输入数据元素的所述第一子集的大小基于所述求和缓冲器的大小和所述转置卷积的所述步幅来选择。
18.根据条款17所述的方法,其中所述求和缓冲器中的所述第一目标地址基于从参考位置移位基于所述第二坐标的第一偏移量的步幅图案;
其中所述求和缓冲器中的所述第二目标地址基于从所述参考位置移位基于所述第四坐标的第二偏移量的所述步幅图案;并且
其中所述步幅图案的每个元素由基于所述步幅的间隙分离。
19.根据条款18所述的方法,其中所述转置卷积操作包括在包括权重数据元素的所述阵列的所述经180度旋转型式的第一阵列与包括输入数据元素的所述阵列的经扩张型式的第二阵列之间的卷积操作,所述阵列的所述经扩张型式通过在输入数据元素的所述阵列的相邻输入数据元素之间填充多个零来创建,所填充的零的数目基于所述步幅;
其中所述第一源地址基于以所述步幅的倒数缩放所述第二阵列的第一输入数据元素的第五坐标,当所述第一阵列相对于所述第二阵列位于起始步幅位置处时,所述第一输入数据元素与所述第一阵列的所述第一权重数据元素重叠;并且
其中所述第二源地址基于以所述步幅的倒数缩放所述第二阵列的第二输入数据元素的第六坐标,当所述第一阵列相对于所述第二阵列位于所述起始步幅位置处时,所述第二输入数据元素与所述第一阵列的所述第二权重数据元素重叠。
20.根据条款16到19中任一项所述的方法,其进一步包括:
在计算所述第一部分和与所述第二部分和之前重置所述求和缓冲器。
21.根据条款16到20中任一项所述的方法,其进一步包括:
在与每个目标地址相关联的每个寄存器处存储用于指示所述每个目标地址是否已经接收到来自所述脉动阵列的部分和的标记;以及
基于与第三目标地址相关联的寄存器中存储的所述标记控制所述求和缓冲器以针对所述第三目标地址输出零,所述标记指示所述第三目标地址尚未接收到来自所述脉动阵列的部分和。
图11包含示例网络1100的图,所述网络可以包含一个或多个主机系统,如图8中展示的主机系统。例如,图11的示例网络1100包含多个节点1102a-1102h,其中所述多个节点中的一个或多个节点可以是如图8所展示的主机系统。节点1102a-1102h中的其它节点可以是其它计算装置,每个计算装置至少包含用于存储程序指令的存储器、用于执行指令的处理器和用于连接到网络1100的网络接口。
在各个实例中,网络1100可以用于处理数据。例如,输入数据可以在节点1102a-1102h之一处接收或从网络1100可以与其通信的其它网络1108接收。在此实例中,输入数据可以被引导到包含加速引擎的网络1100中的节点,以用于加速引擎运行并且产生结果。随后可以将结果传输到接收输入数据的节点或其它网络。在各个实例中,输入数据可以从各种来源累积,包含节点1102a-1102h中的一个或多个节点和/或定位于其它网络1108中的计算装置,并且累积的输入数据可以被引导到网络1100中的一个或多个主机系统。随后可以将来自主机系统的结果分发回收集输入数据的来源。
在各个实例中,节点1102a-1102h中的一个或多个节点可以负责如累积输入数据供主机系统操作、跟踪哪些主机系统忙碌与哪些主机系统可以接受更多工作、确定主机系统是否正确和/或最高效地进行运作、监测网络安全和/或其它管理操作的操作。
在图11的实例中,节点1102a-1102h使用具有点对点链路的交换架构彼此连接。交换架构包含多个交换机1104a-1104d,所述多个交换机可以布置在如Clos网络的多层网络中。在局域网(LAN)区段之间过滤和转发数据包的网络装置可以被称为交换机。交换机通常在开放系统互连(OSI)参考模型的数据链路层(第2层)处进行操作并且有时在网络层(第3层)处进行操作并且可以支持若干种数据包协议。图11的交换机1104a-1104d可以连接到节点1102a-1102h并且提供任何两个节点之间的多条路径。
网络1100还可以包含用于与如路由器1106的其它网络1108连接的一个或多个网络装置。路由器使用报头和转发表来确定转发数据包的最佳路径,并且使用如互联网控制消息协议(ICMP)等协议彼此通信并且配置任何两个装置之间的最佳路由。图11的路由器1106可以用于连接到其它网络1108,如子网、LAN、广域网(WAN)和/或因特网。
在一些实例中,网络1100可以包含许多不同类型的网络中的任何一种或组合,如有线网络、互联网、无线网络、蜂窝网络和其它私有网络和/或公共网络。如果存在,互连的交换机1104a-1104d和路由器1106可以被称为交换结构1110、结构、网络结构或简称为网络。在计算机网络的上下文中,术语“结构”和“网络”在本文中可以互换使用。
节点1102a-1102h可以是表示用户装置、服务提供商计算机或第三方计算机的主机系统、处理器节点、存储子系统和I/O机架的任何组合。
用户装置可以包含用于对应用1132(例如,网络浏览器或移动装置应用)进行存取的计算装置。在一些方面,应用1132可以由计算资源服务或服务提供商托管、管理和/或提供。应用1132可以允许用户能够与服务提供商计算机交互以例如对网络内容(例如,网页、音乐、视频等)进行存取。用户装置可以是计算装置如,例如,移动电话、智能电话、个人数码助理(PDA)、膝上型计算机、上网本、台式计算机、薄型终端装置、平板计算机、电子书(e-book)阅读器、游戏机等。在一些实例中,用户装置可以通过其它网络1108与服务提供商计算机通信。另外,用户装置可以是由服务提供商计算机(例如,与服务提供商计算机集成的控制台装置)管理、控制或以其它方式作为其一部分的分布式系统的一部分。
图11的节点还可以表示一个或多个服务提供商计算机。一个或多个服务提供商计算机可以提供被配置成在用户装置上运行的本地应用,用户可以与所述本地应用交互。在一些实例中,服务提供商计算机可以提供计算资源如,但不限于客户端实体、低延迟数据存储、持久数据存储、数据存取、管理、虚拟化、基于云的软件解决方案、电子内容性能管理等。服务提供商计算机也可以可操作以向用户提供网络托管、数据库、计算机应用开发和/或实施平台、前述的组合等。在一些实例中,服务提供商计算机可以提供作为在托管计算环境中实施的一个或多个虚拟机。托管计算环境可以包含一个或多个快速提供和释放的计算资源。这些计算资源可以包含计算、网络和/或存储装置。托管计算环境也可以被称为云计算环境。服务提供商计算机可以包含一个或多个服务器,可能以集群的形式布置,作为服务器群,或者作为彼此不相关的单独服务器并且可以托管应用1132和/或基于云的软件服务。这些服务器可以被配置成集成的分布式计算环境的一部分。在一些方面中,另外或替代地,服务提供商计算机可以包含计算装置如,例如,移动电话、智能电话、个人数码助理(PDA)、膝上型计算机、台式计算机、上网本、服务器计算机、薄型终端装置、平板计算机、游戏机等。在一些情况下,服务提供商计算机可以与一个或多个第三方计算机通信。
在一种示例配置中,节点1102a-1102h可以包含至少一个存储器1118和一个或多个处理单元(或处理器1120)。处理器1120可以以硬件、计算机可执行指令、固件或其组合来实施。处理器1120的计算机可执行指令或固件实施方案可以包含以任何合适的编程语言编写的用于执行所描述的各种功能的计算机可执行指令或机器可执行指令。
在一些情况下,硬件处理器1120可以是单核处理器或多核处理器。多核处理器可以在同一处理器内包含多个处理单元。在一些实例中,多核处理器可以共享某些资源,如总线和二级缓存或三级缓存。在一些情况下,单核处理器或多核处理器中的每个核还可以包含多个执行逻辑处理器(或执行线程)。在此类核中(例如,具有多个逻辑处理器的核),也可以共享执行管道的若干个阶段以及较低级别的缓存。
存储器1118可以存储可在处理器1120上加载和执行的程序指令以及在这些程序执行期间产生的数据。根据节点1102a-1102h的配置和类型,存储器1118可以是易失性的(如RAM)和/或非易失性的(如ROM、闪速存储器等)。存储器1118可以包含操作系统1128、一个或多个数据存储区1130、一个或多个应用程序1132、一个或多个驱动程序1134和/或用于实施本文所公开的特征的服务。
操作系统1128可以支持节点1102a-1102h的基本功能,如调度任务、执行应用和/或控制器外围装置。在一些实施方案中,服务提供商计算机可以托管一个或多个虚拟机。在这些实施方案中,每个虚拟机可以被配置成执行其自身的操作系统。操作系统的实例包含Unix、Linux、Windows、Mac OS、iOS、Android等。操作系统1128也可以是专有操作系统。
数据存储区1130可以包含由操作系统1128、应用程序1132或驱动程序1134使用和/或操作的永久数据或临时数据。此类数据的实例包含网页、视频数据、音频数据、图像、用户数据等。在一些实施方案中,数据存储区1130中的信息可以通过网络1108提供给用户装置。在一些情况下,另外或替代地,数据存储区1130可以包含所存储的应用程序和/或驱动程序。另外或替代地,数据存储区1130可以存储标准和/或专有软件库,和/或标准和/或专有应用用户接口(API)库。存储在数据存储区1130中的信息可以是机器可读的目标代码、源代码、解释代码或中间代码。
驱动程序1134包含可以在节点中的组件之间提供通信的程序。例如,一些驱动程序1134可以提供操作系统1128与另外的存储设备1122、网络装置1124和/或I/O装置1126之间的通信。替代地或另外,一些驱动程序1134可以提供应用程序1132与操作系统1128之间的通信,和/或服务提供商计算机可存取的应用程序1132与外围装置之间的通信。在许多情况下,驱动程序1134可以包含提供易于理解的功能的驱动程序(例如,打印机驱动程序、显示器驱动程序、硬盘驱动程序和固态装置驱动程序)。在其它情况下,驱动程序1134可以提供专有或专门的功能。
服务提供商计算机或服务器还可以包含另外的存储设备1122,所述服务提供商计算机或服务器可以包含可移除存储设备和/或不可移除存储设备。另外的存储设备1122可以包含磁存储器、光盘、固态盘、闪速存储器和/或磁带存储设备。另外的存储设备1122可以与节点1102a-1102h容纳在同一机架中或者可以位于外置硬盘盒中。存储器1118和/或另外的存储设备1122及其相关联的计算机可读介质可以为计算装置提供计算机可读指令、数据结构、程序模块和其它数据的非易失性存储。在一些实施方案中,存储器1118可以包含多种不同类型的存储器,如SRAM、DRAM或ROM。
可移除和不可移除的存储器1118和另外的存储设备1122为计算机可读存储介质的实例。例如,计算机可读存储介质可以包含在用于存储信息的方法或技术中实施的易失性或非易失性、可移除或不可移除的介质,信息包含例如计算机可读指令、数据结构、程序模块或其它数据。存储器1118和另外的存储设备1122是计算机存储介质的实例。可以存在于节点1102a-1102h中的另外类型的计算机存储介质可以包含但不限于PRAM、SRAM、DRAM、RAM、ROM、EEPROM、闪速存储器或其它存储技术、CD-ROM、DVD或其它光存储设备、磁带盒、磁带、磁盘存储设备或其它磁存储设备、固态驱动器或一些可以用于存储期望信息并且可以由节点1102a-1102h存取的其它介质。计算机可读介质还包含上述任何介质类型的组合,包含一种介质类型的多个单元。
替代地或另外,计算机可读通信介质可以包含计算机可读指令、程序模块或在数据信号内传输的其它数据,如载波或其它传输。然而,如本文所使用的,计算机可读存储介质不包含计算机可读通信介质。
节点1102a-1102h还可以包含I/O装置1126,如键盘、鼠标、笔、语音输入装置、触摸输入装置、显示器、扬声器、打印机等。节点1102a-1102h还可以包含一个或多个通信信道1136。通信信道1136可以提供一种介质,节点1102a-1102h的各个组件可以通过所述介质进行通信。一个或多个通信信道1136可以采用总线、环、交换结构或网络的形式。
节点1102a-1102h还可以含有允许节点1102a-1102h与所存储的数据库、另一个计算装置或服务器、用户终端和/或网络1100上的其它设备通信的网络装置1124。
在一些实施方案中,网络装置1124是外围装置,如基于PCI的装置。在这些实施方案中,网络装置1124包含用于与主机装置通信的PCI接口。术语“PCI”或“基于PCI”可以用于描述PCI总线协议家族中的任何协议,包含原始PCI标准、PCI-X、加速图形端口(AGP)和PCI-表达(PCIe)或任何其它基于本文所讨论的PCI协议的改进或派生协议。基于PCI的协议是用于将如本地外围装置等装置连接到主机装置的标准总线协议。标准总线协议是其规范已被各种制造商定义和采用的数据传输协议。制造商确保兼容装置与实施总线协议的计算系统兼容,并且反之亦然。如本文所使用的,基于PCI的装置还包含使用快速非易失性存储器(NVMe)进行通信的装置。NVMe是用于对连接到使用PCIe的计算系统的非易失性存储介质进行存取的装置接口规范。例如,总线接口模块可以实施NVMe,并且网络装置1124可以使用PCIe接口连接到计算系统。
本文所描述的模块可以是软件模块、硬件模块或其合适的组合。如果模块是软件模块,则模块可以在非暂时性计算机可读介质上具体化并且由本文所描述的计算机系统中的任何计算机系统的处理器处理。应注意,所描述的过程和架构可以在任何用户交互之前实时或以异步模式执行。可以以前述附图中建议的方式配置模块,和/或本文所描述的功能可以由作为单独模块存在的一个或多个模块提供,和/或本文所描述的模块功能可以分布在多个模块之上。
因此,说明书和附图将被视为是说明性的,而不是限制性的。然而,显而易见的是,在不脱离权利要求所阐述的本公开的更广泛的精神和范围的情况下,可以对其进行各种修改和改变。
其它变型处于本公开的精神内。因此,虽然所公开的技术易于进行各种修改和替代构造,但是其某些展示的实例在附图中示出并且已经在上文中进行了详细描述。然而,应该理解的是,并非旨在将本公开限制于所公开的一种或多种具体形式,而是相反,其目的在于涵盖落在如所附权利要求限定的本公开的精神和范围内的所有修改、替代构造和等同物。
除非本文中另外指明或明显与上下文相矛盾,否则在描述所公开的实例的上下文中(特别是在以下权利要求的上下文中)使用的术语“一个/一种(a/an)”和“所述(the)”以及类似的指代词应被解释为涵盖单数和复数两者。术语“包括(comprising)”、“具有(having)”、“包含(including)”以及“含有(containing)”应被解释为开放式术语(即,意指“包含但不限于”),除非另外指明。术语“连接”应被解释为部分或全部地包含在内、附接到或接合在一起,即使在存在中间物的情况下也是如此。除非本文中另有指示,否则对本文中的值的范围的叙述仅旨在用作单独地提及落入所述范围内的每个单独值的速记方法,并且每个单独值并入本说明书中,如同所述单独值在本文中单独地叙述一样。除非本文中另有指示或明显与上下文相矛盾,否则本文所述的所有方法均可以以任何合适的顺序执行。除非另外声明,否则本文所提供的任何和所有实例或示例性语言(例如,“如”)的使用仅旨在更好地说明本公开的实例,而不对本公开的范围构成限制。本说明书中的任何语言都不应解释为将任何未要求保护的元素指示为是实践本公开必不可少的。
除非另有明确说明,否则如短语“X、Y或Z中的至少一个”等析取语言旨在在如通常用于表达项、术语等可以是X、Y或Z或其任何组合(例如,X、Y和/或Z)的上下文中进行理解。因此,此类析取语言通常不旨在并且不应暗示某些实例要求X中的至少一个、Y中的至少一个或Z中的至少一个各自都存在。
本文中描述了本公开的各个实例,包含诸位发明人已知的用于实施本公开的最佳模式。在阅读上述说明后,本领域普通技术人员就可以清楚这些实例的变型。诸位发明人预期技术人员可以在适当时采用此类变型,并且诸位发明人旨在使本公开以与本文具体描述的方式不同的其它方式来进行实践。因此,在适用法律允许的情况下,本公开包含所附权利要求书中叙述的主题的所有修改和等同物。此外,除非本文另有指示或明显与上下文相矛盾,否则本公开涵盖上述要素在其所有可能变型中的任何组合。

Claims (15)

1.一种存储指令的非暂时性计算机可读介质,所述指令在由一个或多个硬件处理器执行时使所述一个或多个硬件处理器:
将权重数据元素的阵列的第一权重数据元素从存储器加载到脉动阵列中,所述第一权重数据元素在权重数据元素的所述阵列中具有第一坐标;
从所述指令中提取指示待从所述存储器获得的输入数据元素的第一子集的信息,所述第一子集基于转置卷积操作的步幅和权重数据元素的经旋转阵列中的第一权重数据元素的第二坐标;
基于所述信息从所述存储器获得输入数据元素的所述第一子集;
将输入数据元素的所述第一子集加载到所述脉动阵列中;并且
基于所述第一权重数据元素和输入数据元素的所述第一子集控制所述脉动阵列以执行第一计算以产生输出数据元素的阵列的输出数据元素。
2.根据权利要求1所述的非暂时性计算机可读介质,其中所述指令包含:
基于所述第一坐标的所述存储器中的所述第一权重数据元素的权重地址;以及
基于所述第二坐标的所述存储器中的输入数据元素的所述第一子集的源地址,
其中所述指令的所述执行使所述一个或多个硬件处理器基于所述第一地址从所述存储器获得所述第一权重数据元素并且基于所述第二地址从所述存储器获得输入数据元素的所述第一子集。
3.根据权利要求2所述的非暂时性计算机可读介质,其中所述输入数据元素存储在所述存储器内的连续地址空间中。
4.根据权利要求3所述的非暂时性计算机可读介质,其中所述源地址是与存储输入数据元素的所述第一子集的所述连续地址空间的第一部分相关联的第一源地址;
其中所述指令包含:
所述第一源地址;
输入数据元素的所述第一子集中的输入数据元素的第一计数;
与存储输入数据元素的第二子集的所述连续地址空间的第二部分相关联的第二源地址;以及
输入数据元素的所述第二子集中的输入数据元素的第二计数;
其中所述指令在由所述一个或多个硬件处理器执行时进一步使所述一个或多个硬件处理器:
基于所述第一源地址和所述第一计数从所述存储器获得所述输入数据元素的所述第一子集;
控制所述脉动阵列以在输入数据元素的所述第一子集与所述第一权重数据元素之间执行所述第一计算以产生第一部分和;
基于所述第二源地址和所述第二计数从所述存储器获得所述输入数据元素的所述第二子集;
从所述存储器获得第二权重数据元素;并且
控制所述脉动阵列以在所述输入数据元素的所述第二子集与所述第二权重数据元素之间执行第二计算以产生第二部分和;并且
其中所述输出数据元素是从所述第一部分和与所述第二部分和产生的。
5.根据权利要求4所述的非暂时性计算机可读介质,其中所述指令包含用于接收所述第一部分和的求和缓冲器的第一目标地址以及用于接收所述第二部分和的所述求和缓冲器的第二目标地址;
其中所述第一目标地址基于从参考位置移位第一偏移量的步幅图案,所述第一偏移量基于所述第一坐标;
其中所述第二目标地址基于从所述参考位置移位第二偏移量的所述步幅图案,所述第二偏移量基于所述第二坐标;并且
其中所述步幅图案基于所述转置卷积操作的所述步幅。
6.根据权利要求5所述的非暂时性计算机可读介质,其中所述参考位置基于输出数据元素的所述阵列的北填充的大小和西填充的大小。
7.根据权利要求5或6所述的非暂时性计算机可读介质,其中:
所述求和缓冲器的目标地址被映射到输出数据元素的所述阵列中的输出数据元素的一系列坐标;
所述步幅图案定义图案坐标;
所述步幅图案的相邻图案坐标之间的间隙基于所述步幅;
所述步幅图案的所述移位包含所述图案坐标的移位;并且
所述第一目标地址和所述第二目标地址分别包含映射到所述求和缓冲器的所述目标地址的所述输出数据元素的所述一系列坐标内的经移位的步幅图案的第一图案坐标和第二图案坐标。
8.根据权利要求7所述的非暂时性计算机可读介质,其中所述指令在由所述一个或多个硬件处理器执行时使所述一个或多个硬件处理器引起所述求和缓冲器:
将所述第一部分和添加到存储在所述第一目标地址处的数据;并且
将所述第二部分和添加到存储在所述第二目标地址处的数据。
9.根据权利要求7或8所述的非暂时性计算机可读介质,其中:
权重数据元素的所述经旋转阵列基于权重数据元素的所述阵列的180度旋转;
所述转置卷积操作包括权重数据元素的所述经旋转阵列与输入数据元素的经扩张阵列之间的卷积操作,所述输入数据元素的所述经扩张阵列是基于根据所述步幅在输入数据元素的所述阵列的输入数据元素之间填充多个零来扩张的;
所述第一源地址基于输入数据的所述经扩张阵列中的第一输入元素的第一位置,当权重数据元素的所述经旋转阵列相对于输入数据元素的所述经扩张阵列位于起始步幅位置处时,所述第一输入元素与权重数据元素的所述经旋转阵列的所述第一权重数据元素重叠;
所述输入数据元素的所述第一子集中的输入数据元素的所述第一计数基于所述第一目标地址的计数;
所述第二源地址基于输入数据元素的所述经扩张阵列中的第二输入元素的第二位置,当权重数据元素的所述经旋转阵列相对于输入数据的所述经扩张阵列位于所述起始步幅位置处时,所述第二输入元素与权重数据元素的所述经旋转阵列的所述第二权重数据元素重叠;并且
所述输入数据元素的所述第二子集中的输入数据元素的所述第二计数基于所述第二目标地址的计数。
10.根据权利要求5到9中任一项所述的非暂时性计算机可读介质,其中所述指令在由所述一个或多个硬件处理器执行时使所述一个或多个硬件处理器:将所述求和缓冲器初始化为零。
11.根据权利要求5到10中任一项所述的非暂时性计算机可读介质,其中所述指令在由所述一个或多个硬件处理器执行时使所述一个或多个硬件处理器:
基于自所述转置卷积操作开始以来第三目标地址未接收到写入操作的指示来控制所述求和缓冲器以针对所述第三目标地址处的输出数据元素输出零。
12.一种设备,其包括:
存储器,所述存储器存储一组指令;以及
一个或多个硬件处理器,所述一个或多个硬件处理器被配置成执行所述一组指令以:
接收指示待由脉动阵列基于权重数据阵列和输入数据阵列执行以产生输出数据阵列的转置卷积操作的步幅的第一信息;
接收指示求和缓冲器的尺寸的第二信息;
获得所述权重数据阵列与所述权重数据阵列的经180度旋转型式之间坐标的映射;
针对所述权重数据阵列的每个权重数据元素确定所述求和缓冲器的目标地址以从涉及所述每个权重数据元素的所述转置卷积操作接收部分和,所述目标地址是基于所述转置卷积的所述步幅、所述求和缓冲器的所述尺寸信息、所述权重数据阵列中的所述每个权重数据元素的坐标和坐标的所述映射来确定的;
针对所述权重数据阵列的每个权重数据确定所述输入数据阵列的输入数据元素的子集以与所述每个权重数据元素相乘以产生所述部分和,输入数据元素的所述子集是基于来自所述目标地址的投射操作、所述权重数据阵列中的所述每个权重数据元素的所述坐标和坐标的所述映射来确定的;并且
产生用于所述权重数据阵列的每个权重数据元素的计算指令以包含指示所述目标地址和输入数据元素的所述子集的第三信息。
13.根据权利要求12所述的设备,其中所述一个或多个硬件处理器被配置成执行所述一组指令以针对所述每个权重数据元素:
基于所述权重数据阵列中的所述每个权重数据元素的坐标的所述映射和坐标确定所述权重数据阵列的所述经180度旋转型式中的所述权重数据的经旋转坐标;
基于所述经旋转坐标确定偏移量;
基于所述偏移量使步幅图案相对于参考位置移位;并且
基于所述求和缓冲器的所述尺寸和经移位的步幅图案确定所述求和缓冲器的所述目标地址以从所述脉动阵列接收部分和。
14.根据权利要求13所述的设备,其中所述转置卷积操作包括所述权重数据阵列的所述经180度旋转型式与经扩张输入数据阵列之间的卷积操作,所述经扩张输入数据阵列是基于根据所述步幅在所述输入数据阵列的输入数据元素之间填充多个零来扩张的;
其中所述一个或多个硬件处理器被配置成执行所述一组指令以执行所述投射操作,所述投射操作包括针对所述每个权重数据元素:
确定所述经扩张输入数据阵列中的第一输入元素的第一位置,当所述经180度旋转权重数据阵列相对于所述经扩张输入数据阵列位于起始步幅位置处时,
所述第一输入元素与所述每个权重数据元素重叠;
基于以所述步幅的倒数缩放所述第一位置来确定所述输入数据阵列中的所述第一输入元素的第二位置;并且
基于所述目标地址的计数确定从所述第一输入元素开始包含在输入数据元素的所述子集内的输入数据元素的计数。
15.根据权利要求13或14中任一项所述的设备,其中所述参考位置基于所述输出数据阵列的北填充的大小和西填充的大小。
CN202080066641.0A 2019-09-27 2020-09-21 使用脉动阵列的转置卷积 Pending CN114430837A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/586,764 2019-09-27
US16/586,764 US11681902B2 (en) 2019-09-27 2019-09-27 Transposed convolution using systolic array
PCT/US2020/051787 WO2021061566A1 (en) 2019-09-27 2020-09-21 Transposed convolution using systolic array

Publications (1)

Publication Number Publication Date
CN114430837A true CN114430837A (zh) 2022-05-03

Family

ID=75161559

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202080066641.0A Pending CN114430837A (zh) 2019-09-27 2020-09-21 使用脉动阵列的转置卷积

Country Status (4)

Country Link
US (2) US11681902B2 (zh)
CN (1) CN114430837A (zh)
DE (1) DE112020004625T5 (zh)
WO (1) WO2021061566A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114995782A (zh) * 2022-08-03 2022-09-02 上海登临科技有限公司 数据处理方法、装置、设备和可读存储介质

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020003345A1 (ja) * 2018-06-25 2020-01-02 オリンパス株式会社 演算処理装置
TWI727641B (zh) * 2020-02-03 2021-05-11 華邦電子股份有限公司 記憶體裝置及其操作方法
KR20210101903A (ko) * 2020-02-11 2021-08-19 삼성전자주식회사 전자 장치 및 그 제어 방법
KR20210105053A (ko) * 2020-02-18 2021-08-26 에스케이하이닉스 주식회사 연산 회로 및 그것을 포함하는 딥 러닝 시스템
US11520853B2 (en) * 2020-02-28 2022-12-06 Meta Platforms, Inc. Mapping convolution to a partition channel convolution engine
CN113570028A (zh) * 2020-04-28 2021-10-29 超威半导体公司 用于在神经网络中处理数据的静态生成的经编译表示
GB2599098B (en) * 2020-09-22 2024-04-10 Imagination Tech Ltd Hardware implementation of windowed operations in three or more dimensions
TWI799169B (zh) * 2021-05-19 2023-04-11 神盾股份有限公司 基於卷積運算的資料處理方法及電路
WO2023044707A1 (en) * 2021-09-24 2023-03-30 Intel Corporation Methods and apparatus to accelerate convolution
CN114090956B (zh) * 2021-11-18 2024-05-10 深圳市比昂芯科技有限公司 一种矩阵数据处理方法、装置、设备及存储介质
US11953966B1 (en) * 2021-11-22 2024-04-09 Meta Platforms Technologies, Llc Data-driven column-wise clock gating of systolic arrays
CN114792132B (zh) * 2022-06-22 2022-11-29 苏州浪潮智能科技有限公司 一种脉冲神经网络加速计算系统、方法、设备及介质
CN115374935B (zh) * 2022-09-15 2023-08-11 重庆大学 一种神经网络的剪枝方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9805303B2 (en) 2015-05-21 2017-10-31 Google Inc. Rotating data for neural network computations
US11386644B2 (en) 2017-10-17 2022-07-12 Xilinx, Inc. Image preprocessing for generalized image processing
KR20190051697A (ko) * 2017-11-07 2019-05-15 삼성전자주식회사 뉴럴 네트워크의 디컨벌루션 연산을 수행하는 장치 및 방법
US10459876B2 (en) 2018-01-31 2019-10-29 Amazon Technologies, Inc. Performing concurrent operations in a processing element
US10678508B2 (en) 2018-03-23 2020-06-09 Amazon Technologies, Inc. Accelerated quantized multiply-and-add operations
CN112308107A (zh) * 2019-07-25 2021-02-02 智力芯片有限责任公司 可重构和时间编码卷积尖峰神经网络中基于事件的特征分类
US11449739B2 (en) * 2019-08-22 2022-09-20 Google Llc General padding support for convolution on systolic arrays

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114995782A (zh) * 2022-08-03 2022-09-02 上海登临科技有限公司 数据处理方法、装置、设备和可读存储介质
CN114995782B (zh) * 2022-08-03 2022-10-25 上海登临科技有限公司 数据处理方法、装置、设备和可读存储介质

Also Published As

Publication number Publication date
WO2021061566A1 (en) 2021-04-01
US20210097375A1 (en) 2021-04-01
DE112020004625T5 (de) 2022-08-04
US20230306249A1 (en) 2023-09-28
US11681902B2 (en) 2023-06-20
US11954583B2 (en) 2024-04-09

Similar Documents

Publication Publication Date Title
US11954583B2 (en) Transposed convolution using systolic array
US11816559B2 (en) Dilated convolution using systolic array
US11868895B2 (en) Dynamic processing element array expansion
US11960566B1 (en) Reducing computations for data including padding
US11347480B2 (en) Transpose operations using processing element array
US11948352B2 (en) Speculative training using partial gradients update
US11501145B1 (en) Memory operation for systolic array
US20210158131A1 (en) Hierarchical partitioning of operators
WO2021067057A1 (en) Neural network training in a distributed system
US11275661B1 (en) Test generation of a distributed system
CN113469354B (zh) 受存储器限制的神经网络训练
US11334358B2 (en) Hardware accelerator having reconfigurable instruction set and reconfigurable decoder
US11636569B1 (en) Matrix transpose hardware acceleration
CN118043821A (zh) 混合稀疏压缩
US11868872B1 (en) Direct memory access operation for neural network accelerator
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
US11468304B1 (en) Synchronizing operations in hardware accelerator
US11797280B1 (en) Balanced partitioning of neural network based on execution latencies
US10990408B1 (en) Place and route aware data pipelining

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