CN112989267A - 用于执行卷积运算的方法和系统 - Google Patents
用于执行卷积运算的方法和系统 Download PDFInfo
- Publication number
- CN112989267A CN112989267A CN202011169398.3A CN202011169398A CN112989267A CN 112989267 A CN112989267 A CN 112989267A CN 202011169398 A CN202011169398 A CN 202011169398A CN 112989267 A CN112989267 A CN 112989267A
- Authority
- CN
- China
- Prior art keywords
- processor
- matrix
- value
- values
- feature map
- 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
- 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/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
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/52—Multiplying; Dividing
- G06F7/523—Multiplying only
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/544—Methods 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/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Mathematical Analysis (AREA)
- Software Systems (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
Abstract
本公开涉及用于执行卷积运算的方法和系统。用于执行卷积运算的方法包括:将卷积核存储在第一存储设备中,该卷积核具有维度x乘y;将具有维度n乘m的输入特征图的元素值的第一子集存储在第二存储设备中;执行输入特征图的元素值的第一子集中的每个值与来自卷积核的x*y个元素当中的第一元素值的第一并列乘法;对于卷积核的x*y个元素中的每个剩余值,执行剩余值与输入特征图的元素值的对应子集的并列乘法;对于每个并列乘法,将并列乘法的结果存储在累加器中;以及输出累加器的值作为输出特征图的第一行。
Description
技术领域
根据本公开的实施例的一个或多个方面涉及用于执行卷积运算的方法和系统。
背景技术
在操作中,神经网络可以执行涉及大量乘法和加法的张量(tensor)运算(例如,张量乘法和卷积)。如果由通用中央处理单元或者甚至图形处理单元(其可能更适合于这样的任务)执行,则这些运算的执行可能相对较慢,并且每次运算带来相对较高的能量消耗。例如,在可能具有严格约束的功率预算的小型设备(例如,移动、手持设备)中,与通用中央处理单元或图形处理单元的使用相关联的功耗可能不理想。
背景技术章节中的以上信息仅用于增强对技术的背景的理解,并因此不应该被理解为承认现有技术的存在或相关性
发明内容
提供了该发明内容以介绍本公开的实施例的特征和构思的选择,其中该特征和构思在下面的详细描述中被进一步描述。该发明内容不旨在标识所要求保护的主题的关键或必要特征,也不旨在用于限制所要求保护的主题的范围。所描述的特征中的一个或多个可以与一个或多个其他所描述的特征进行组合,以提供可行的设备。
本公开的示例实施例的各方面涉及用于执行卷积运算的方法和系统。
在一些实施例中,一种用于执行卷积运算的方法包括:由处理器将卷积核(convolution kernel)存储在处理器的第一存储设备中,该卷积核具有维度x乘y,其中,x是卷积核中的行数,并且y是卷积核中的列数;由处理器将具有维度n乘m的输入特征图的元素值的第一子集存储在处理器的第二存储设备中,其中,n是输入特征图中的行数,并且m是输入特征图中的列数;由处理器执行输入特征图的元素值的第一子集中的每个值与来自卷积核的x*y个元素当中的第一元素值的第一并列(simultaneous)乘法;对于卷积核的x*y个元素中的每个剩余值,由处理器执行剩余值与输入特征图的元素值的对应子集的并列乘法;对于每个并列乘法,由处理器将并列乘法的结果存储在连接到处理器的累加器中;以及由处理器输出累加器的值作为输出特征图(OFM)的第一行。
在一些实施例中,输出累加器的值作为OFM的第一行包括由处理器将存储在累加器中的多个并列乘法的结果相加,以生成OFM的第一行。在一些实施例中,第一存储设备包括连接到处理器的高速缓存存储器,并且其中,第二存储设备包括位于处理器的乘积累加(MAC)拼片(tile)的处理元件(PE)中的多个寄存器,其中,多个寄存器是9位寄存器。
在一些实施例中,该方法还包括由处理器将元素值的第一子集在多个寄存器中向左移位一个寄存器。在一些实施例中,该方法还包括由处理器向第二存储设备广播来自卷积核的x*y个元素当中的第一元素值;以及由处理器向第二存储设备广播来自卷积核的x*y个元素当中的第二元素值,其中,输入特征图的元素值的第一子集包括输入特征图的第一行的第一列至第p列中的值,并且输入特征图的元素值的第二子集包括输入特征图的第一行的第二列至第(p+1)列中的值。
在一些实施例中,具有维度x乘y的卷积核是权重矩阵,权重矩阵包括多个权重值,权重矩阵的多个权重值被存储在连接到处理器的高速缓存存储器中,并且其中,具有维度n乘m的输入特征图包括多个激活值。在一些实施例中,处理器包括多个乘积累加(MAC)拼片,每个MAC拼片包括处理元件(PE)阵列,其中该PE阵列包括多个PE行和多个PE列,多个PE列中的每个PE列包括多个PE以及加法器树。
在一些实施例中,每个MAC拼片还包括高速缓存存储器,其中该高速缓存存储器包括多个并行激活通道(parallel activation lane),每个激活通道对应于MAC拼片中的PE阵列的一行。在一些实施例中,多个PE中的每个PE包括:多个寄存器,被配置为存储输入特征图的多个激活值;乘法器,连接到多个寄存器,并且被配置为将来自输入特征图的激活值乘以来自高速缓存存储器的权重值;以及PE累加器,连接到乘法器,并且被配置为将来自乘法器的输出与来自多个寄存器的值相加,并将结果存储在多个寄存器中。在一些实施例中,MAC拼片中的PE阵列包括八个PE列,其中,MAC拼片的八个PE列中的每个PE列包括十六个PE。
在一些实施例中,一种用于执行卷积运算的系统包括存储器和与存储器通信的处理器,其中,处理器被配置为:将具有维度x乘y的卷积核存储在处理器的第一存储设备中,其中,x是卷积核中的行数,并且y是卷积核中的列数;将具有维度n乘m的输入特征图的元素值的第一子集存储在连接到处理器的第二存储设备中,其中,n是输入特征图中的行数,并且m是输入特征图中的列数;执行输入特征图的元素值的第一子集中的每个值与来自卷积核的x*y个元素当中的第一元素值的第一并列乘法;对于卷积核的x*y个元素中的每个剩余值,执行剩余值与输入特征图的元素值的对应子集的并列乘法;对于每个并列乘法,将并列乘法的结果存储在连接到处理器的累加器中;以及输出累加器的值作为输出特征图(OFM)的第一行。
在一些实施例中,处理器还被配置为通过将存储在累加器中的多个并列乘法的结果相加以生成OFM的第一行,输出累加器的值作为OFM的第一行。在一些实施例中,第一存储设备包括连接到处理器的高速缓存存储器,并且其中,第二存储设备包括位于处理器的乘积累加(MAC)拼片的处理元件(PE)中的多个寄存器,其中,多个寄存器是9位寄存器。在一些实施例中,处理器还被配置为:将元素值的第一子集在多个寄存器中向左移位一个寄存器。
在一些实施例中,处理器还被配置为:向第二存储设备广播来自卷积核的x*y个元素当中的第一元素值;以及向第二存储设备广播来自卷积核的x*y个元素当中的第二元素值。在一些实施例中,具有维度x乘y的卷积核是权重矩阵,权重矩阵包括多个权重值,权重矩阵的多个权重值被存储在连接到处理器的高速缓存存储器中,并且其中,具有维度n乘m的输入特征图包括多个激活值,其中,处理器包括多个乘积累加(MAC)拼片,每个MAC拼片包括处理元件(PE)阵列,其中该PE阵列包括多个PE行和多个PE列,多个PE列中的每个PE列包括多个PE以及加法器树。
在一些实施例中,每个MAC拼片还包括高速缓存存储器,其中该高速缓存存储器包括多个并行激活通道,每个激活通道对应于MAC拼片中的PE阵列的一行,其中,MAC拼片中的PE阵列包括八个PE列,其中,MAC拼片的八个PE列中的每个PE列包括十六个PE。在一些实施例中,多个PE中的每个PE包括:多个寄存器,被配置为存储输入特征图的多个激活值;乘法器,连接到多个寄存器,并且被配置为将来自输入特征图的激活值乘以来自高速缓存存储器的权重值;以及PE累加器,连接到乘法器,并且被配置为将来自乘法器的输出与来自多个寄存器的值相加,并将结果存储在多个寄存器中。
在一些实施例中,一种方法包括:由处理器执行第一矩阵的元素值的第一子集中的每个值与来自第二矩阵的x*y个元素当中的第一元素值的第一并列乘法;对于第二矩阵的x*y个元素中的每个剩余值,由处理器执行剩余值与第一矩阵的元素值的对应子集的并列乘法;对于每个并列乘法,由处理器将并列乘法的结果存储在连接到处理器的累加器中;以及由处理器输出累加器的值作为输出特征图(OFM)的第一行。
在一些实施例中,该方法还包括:由处理器将第二矩阵存储在处理器的第一存储设备中,第二矩阵具有维度x乘y,其中,x是第二矩阵中的行数,并且y是第二矩阵中的列数;由处理器将具有维度n乘m的第一矩阵的元素值的第一子集存储在连接到处理器的第二存储设备中,其中,n是第一矩阵中的行数,并且m是第一矩阵中的列数;以及由处理器将第一矩阵的元素值的第二子集存储在第二存储设备中,其中,第一矩阵的元素值的第一子集包括第一矩阵的第一行的第一列至第p列中的值,第一矩阵的元素值的第二子集包括第一矩阵的第一行的第二列至第(p+1)列中的值。
附图说明
参考说明书、权利要求和附图,将领会和理解本公开的一些示例实施例的这些和其他特征,其中:
图1-图2示出了根据本公开的一些实施例的处理元件(PE)的示例架构;
图3示出了根据本公开的一些实施例的将平面卷积映射到乘积累加(MAC)拼片;
图4示出了根据本公开的一些实施例的示例二维(2D)输入特征图(IFM);
图5A-图5M详细示出了根据本公开的一些实施例的关于输出特征图(OFM)的第一行的确定;
图5N-图5W详细示出了根据本公开的一些实施例的关于OFM的第二行的确定。
具体实施方式
下面结合附图阐述的详细描述旨在作为根据本公开提供的用于在点积架构上加速二维(2D)卷积层映射的系统和方法的一些示例实施例的描述,并且不旨在表示其中可以构建或利用本公开的唯一形式。该描述结合所示出的实施例阐述了本公开的特征。然而,将理解,相同或等效的功能和结构可以通过不同的实施例来实现,其中该不同的实施例也旨在被包含在本公开的范围内。如本文别处所表示的,相同的元件编号旨在指示相同的元件或特征。
卷积神经网络(CNN)是可以用于图像处理(例如,图像分类、图像聚类、对象识别等)的神经网络的类型。在诸如图像分类、跟踪、检测等的应用上,相比于相关技术的机器学习方法,CNN可能是理想的。CNN可以用于从输入图像提取特征,例如通过使用具有在神经网络的训练期间学习的权重的滤波器的卷积,可以提取来自输入图像的大范围的特征。所提取的特征可以被组合以确定输出。然而,与相关技术的机器学习方法相比,CNN可能涉及更多的计算操作。
CNN可以包括卷积层和全连接层。卷积层和全连接层在执行计算和存储器访问方面可以不同。例如,在CNN中,与卷积层相比,全连接层可以执行更少的计算,然而,该全连接层可以集中访问存储器,并因此可能是CNN的性能下降的主要原因。CNN中的卷积层可以容纳大多数计算,并且与全连接层相比,可以具有越来越多的参数。卷积层可以是神经网络中神经元共享权重的层。卷积层的输入可以是输入图像或前一层的输出,并且该层的输出可以是特征图。
在CNN中,2D数据阵列可以用作卷积层的输入,并且在这种情况下,卷积层的输出也可以是2D数据阵列。利用2D输入阵列,卷积层可以执行作为在输入阵列上滑动的2D卷积的计算。在CNN计算中,内核(kernel)或滤波器可以是权重的2D阵列,其可以重复用于在输入2D阵列上执行卷积。例如,内核可以在2D输入数据上滑动,以执行与它当前所在的输入阵列的区段的按元素乘法,然后将结果加到输出像素中(例如,每个输出像素是内核和2D输入数据的对应部分的点积)。可以对内核在其上滑过的每个位置重复该过程,以将特征的2D阵列(例如,输入特征图上的2D输入数据阵列)转换为另一特征的2D阵列(例如,输出特征图上的2D输出数据阵列)。
在CNN中,3D数据阵列可以用作卷积层的输入。例如,维度为H×W×D的3D输入阵列可以与维度为H×W×D的F个内核和长度为S的步幅进行卷积。步幅可以被定义为当沿着输入阵列滑动时内核的步长。例如,步幅1可以指示内核逐个元素滑动通过输入阵列。来自F个内核当中的维度为H×W×D的每个3D内核可以跨3D输入阵列以步长S滑动,并且在每次移位期间,3D内核的每个元素或权重与来自3D输入阵列的重叠区域的每个成对输入元素相乘和相加。这样,与全连接网络相比,CNN可以执行大量的迭代运算(例如,滤波器大小=h*w*D;输入大小=H*W*D)。
可以执行乘积累加(MAC)运算的CNN的卷积层可以使用CNN的大多数执行时间。MAC运算可以计算两个数的乘积,并且可以将该乘积加到累加器。神经网络加速器(例如,Resnet-152)可以减少卷积层中的计算的数量或CNN中的存储器访问的数量。为了减少卷积层的执行时间,高速加速器可以使用通过由PE并行执行大量的MAC运算来加速在卷积层中执行的计算的特定结构。
具有2D卷积的神经网络(诸如MobileNet)可以用于减少卷积层中的计算操作的数量。例如,为了执行高速MAC运算,卷积层的输入阵列中的信息或输入特征图信息以及当前层的滤波器或内核权重信息可以被上传到存储器。上传的信息可以由基于MAC运算的处理元件(PE)处理,以生成下一层的输出特征图信息,该输出特征图信息然后被存储在存储器中。包括MAC拼片或MAC阵列的神经处理器可以利用输入特征图(IFM)中的稀疏性,以通过不按顺序地推进某些乘法和加法运算来加速计算的完成,以便使用在IFM的元素等于零时将以其他方式执行乘以零的乘法器。
在一些情况下,CNN的2D卷积层可能在点积架构上映射不佳,因为2D卷积层可能仅利用16×16MAC阵列的一小部分(例如,仅16×16MAC阵列的对角线元素)。例如,在一些情况下,点积架构的利用不足可能是通过一次仅使用MAC阵列的16行中的一行造成的。
在一些实施例中,神经处理器可以被配置为计算输入特征图(IFM)(或“激活”的张量)与权重(例如,内核)的多维阵列(或张量)的卷积或张量积,以形成输出特征图(OFM)。
在一些实施例中,神经处理器包括多个静态随机存取存储器(SRAM)组(bank)集。在一些实施例中,多个SRAM组集中的每一个包括四个SRAM组。在一些实施例中,多个SRAM组集通过互连构造(fabric)(例如,输入特征图(IFM)传递构造)连接到MAC拼片。在一些实施例中,互连构造或IFM传递构造可以将存储在SRAM组集中的输入激活图带到MAC拼片,以用于后续计算。
在一些实施例中,MAC拼片还经由另一互连构造(例如,将计算的结果从MAC拼片发送到SRAM组集以用于存储的输出特征图(OFM)传递构造)连接到SRAM组集。在一些实施例中,MAC拼片还连接到约减树或约减构造。在一些实施例中,IFM传递构造可以是分段总线,并且作为结果,SRAM组集中的每一个可以与MAC拼片中的对应一个相关联。
在一些实施例中,每个MAC拼片可以包含PE列的PE阵列。在一些实施例中,每个PE列包含多个PE和加法器树。在一些实施例中,每个PE阵列包含八个PE列,并且每个PE列包含十六个PE和加法器树。
在一些实施例中,每个PE可以包括多个寄存器(例如,包含可以被称为“权重缓冲器”的18个寄存器(例如,18个9位寄存器)的寄存器文件)、以及乘法器。在一些实施例中,乘法器将输入激活乘以权重。随后,每个MAC列中的加法器树对来自该列中的多个PE(例如,十六个PE)的产生的乘积求和(例如,折叠(fold)或累加),以形成点积。
在一些实施例中,每个MAC拼片还包括高速缓存。在一些实施例中,高速缓存可以通过缓存从SRAM接收的IFM值来减少对输入特征图的SRAM读取。在一些实施例中,高速缓存包含多个并行的“激活通道”,每个激活通道对应于MAC列中的PE阵列的“行”。
在一些实施例中,可以提取来自高速缓存的输入激活(例如,提取到IFM激活缓冲器中),同时还在可能时省略零值激活,以实现稀疏激活计算。接下来,数值型的激活可以被转换为符号和8位大小格式。产生的经转换的多个激活值可以被并行广播到PE阵列,使得每个激活通道将输入激活值带到PE的对应行中的对应乘法器单元。在一些实施例中,PE的每列,在返回单元(return unit)中的累加器中累加结果。在一些实施例中,在可能的多个周期中的乘积值的累加之后,结果将被返回到SRAM。一旦像素的所有计算被加在一起,返回单元就将大的累加值量化回小的精度。
图1-图2示出了PE的示例架构。在一些实施例中,如图2所示,每个PE 103还可以包含累加器寄存器122。在一些实施例中,“累加器”(例如,累加器寄存器122)可以是加法器和寄存器的组合,其被配置为将输入值加到寄存器的内容,并用总和覆写寄存器的内容。在一些实施例中,除了累加器寄存器122之外,PE 103还可以合并另一累加器寄存器124。在这种情况下,累加器寄存器122可以是权重缓冲器116的一部分。累加器寄存器124可以被配置为将来自乘法器118的输出和来自权重缓冲器116的输入值加到寄存器的内容,并且累加器寄存器122可以被配置为将总和存储到权重缓冲器116,或者用来自累加器寄存器124的总和覆写权重缓冲器116的内容。
在一些实施例中,权重缓冲器116可以具有十八个1字节(B)元素。在一些实施例中,在2D卷积模式中,权重缓冲器116的十八个1B元素中的十二个可以用于存储激活,权重缓冲器116的其余六个1B元素可以被分解为两个3B累加器(例如,累加器寄存器122和124)。
在一些实施例中,两个累加器寄存器122和124可以累加和存储前一轮(priorround)累加的结果。同时,在一些实施例中,累加器寄存器122和124中的一个可以用于累加,并且来自累加器寄存器122和124中的另一个的存储的结果可以被逐步传送到返回单元。这样,延迟(stall)时间可以被最小化。
图3示出了根据本公开的一些实施例的将平面卷积映射到MAC拼片。
如图3所示,具有某个长度(例如,长度十六)的IFM 202可以被称为“IFM切片(slice)”。IFM切片可以具有平面坐标(x,y)和与它相关联的深度信道(channel)索引d(例如,IFM[x,y,d:d+15])。在一些实施例中,拼片208(例如,MAC拼片)可以从包含3D IFM张量的片上SRAM(例如,SRAM组集)一次接收一个IFM切片,其中每个输入IFM切片包含输入层中的平面位置(x,y)处的根据例如d至d+15(包括d和d+15)的索引的十六个深度信道的值(在图3中,仅示出了七个信道或深度信道)。
类似地,具有某个长度(例如,长度八)的OFM向量206可以被称为“OFM切片”。OFM切片可以具有平面坐标(x,y)和作为相关联的OFM张量的索引的与它相关联的深度信道索引d(例如,OFM[x,y,d:d+7])。在一些实施例中,拼片208可以产生OFM切片作为输出。在一些实施例中,在OFM传递构造上发送最终OFM向量结果以用于存储在SRAM组中之前,来自拼片208的输出OFM向量206(OFM切片)可能需要由约减树或约减构造进一步约减以完成OFM向量计算。
在图3的示例实施例中,内核204可以具有不同于IFM 202的长度和宽度,然而,内核204可以具有与IFM 202相同的深度。在一些实施例中,内核204可以沿着IFM 202的高度和宽度滑动,并且在每个滑动位置处,可以执行按元素乘法和加法,这产生OFM切片的单个元素。为了确定具有深度信道索引d的OFM向量206(例如,OFM[x,y,d:d+7]),八个内核204(例如,数量与OFM向量206的深度相同的内核)可以被应用于IFM 202,其中来自八个内核当中的每个内核204可以产生OFM信道。
在一些实施例中,拼片208可以包括十六行或十六个通道以及八列。在一些实施例中,在每个操作周期期间(例如,在每个时钟周期期间),列210中的十六个乘法器中的每一个可以基于其输入的两个因子形成相应的乘积,加法器中的每一个可以形成其输入处的这十六个乘积中的一些的总和。
参考2019年6月19日提交的美国专利申请第16/446,610号的图1C-图1H讨论了使用合并拼片(例如,拼片208)的神经处理器的OFM 206的计算的进一步细节,其全部内容通过引用而合并于此。
图4示出了示例2D IFM 400。在一些实施例中,图4示出了如何将IFM分割为片,其中每个片由MAC拼片处理(在不同轮中使用相同的拼片,或者同时使用多个拼片)。在一些示例实施例中,在2D(例如,按深度)卷积运算期间,2D IFM 400可以被划分为八列宽(例如,该示例中的标记的位0至位7)的区段(例如,402、404)。八列宽区段402、404中的每一个可以被顺序处理。在一些实施例中,神经处理器的每个拼片(例如,MAC拼片)可以处理十六个输出信道。在一些实施例中,神经处理器的拼片阵列可以被配置为处理最大数量的输出信道(例如,输出特征图(OFM)的所有输出信道)。例如,为了处理64个输出信道,神经处理器的拼片阵列可以被配置为4×4拼片阵列,使得64(例如,4×16行)个信道可以被一次处理。
在一些实施例中,因为存在从SRAM馈送拼片(例如,MAC拼片)的四个信道,所以第一输出像素可能花费((2+Kx-1)*Ky)个周期来计算,这可以是读取第一像素的数据所需的周期数。在这种情况下,Kx和Ky是2D内核的维度。在一些实施例中,每个附加的输出像素可能花费(Kx*Ky)个周期来计算,因为SRAM读取可能与使用已经放置在权重寄存器中的IFM的计算重叠。在一些实施例中,为了处理IFM(例如,IFM 400)的每列,可能期望与内核减去1列相等的附加数据来处理IFM区段(例如,区段402)中的IFM 400列(例如,对于大小为3×3(例如,3行并且3列)的2D内核,可能需要3-1=2个附加的数据列来处理IFM 400,如图4所示)。此外,在一些实施例中,神经处理器的每个拼片(例如,MAC拼片)内部的硬件可以被重新布置和重新利用。
在一些实施例中,用于计算卷积的方法可以考虑跨输入特征图(IFM)重复使用相同的卷积核(例如,相同的权重),并且还可以考虑对于OFM的多个输出值重复使用IFM的相同值。用于计算卷积的这样的方法可以为OFM的当前行的每个输出像素维护累加器。在这种情况下,对于卷积核的每个权重,IFM的元素(例如,激活)被加载在权重寄存器中。加载的IFM的元素乘以卷积核的当前权重,并且被加到累加器。接下来,加载的元素被移位以乘以内核的下一个权重,并且来自IFM的附加元素被加载到权重寄存器以乘以卷积核的下一个权重。作为结果,乘以卷积核的相同权重的IFM的多个值被并行乘以该相同权重,从而增加每个时钟周期完成的操作的数量,并且先前加载的值被重新用于乘以下一个权重,从而减少传输的数据量。
图5A-图5W示出了从2D IFM和权重的2D内核确定2D OFM的示例方法。
在图5A-图5W的示例实施例中,内核504中的权重可以被放置在高速缓存529中,同时IFM被读取到权重寄存器528(例如,图1-图2的权重缓冲器116)中。
图5A-图5M详细示出了关于OFM 508的第一行506的确定(例如,具有步幅一并且没有填充的3*3卷积的示例)。
图5B示出了图5A的步骤510的细节。如图5B所示,在510,四个读取信道527(例如,分段的IFM传递构造)将来自SRAM(例如,包括四个SRAM块的SRAM组集)的IFM 502矩阵的第一行的位置[0,0]、[0,2]、[0,4]和[0,6]的数据加载到来自多个(例如,八个)权重寄存器528(例如,图1-图2的权重缓冲器116)的四个权重寄存器中。
接下来,如图5C所示,四个读取信道527将来自SRAM的IFM 502矩阵的第一行的位置[0,1]、[0,3]、[0,5]和[0,7]的数据加载到来自八个权重寄存器528当中的其他四个权重寄存器中。高速缓存529(例如,锯齿形(Zigzag)高速缓存)广播内核504的位置[0,0]处的权重值W0。每列(例如,MAC拼片的PE列)中的乘法器可以将加载在权重寄存器528中的IFM 502矩阵位置[0,0]–[0,7]中的IFM值与W0相乘,并将结果加载到第一累加器集合(例如,图2的累加器寄存器122)中。
图5D示出了步骤512的细节。如图5D所示,一个读取信道将来自SRAM的IFM 502矩阵的第一行的位置[0,8]的数据加载到IFM 502矩阵的第八列的权重寄存器528中,同时在上一个周期中加载的IFM值(例如,IFM 502矩阵位置[0,0]–[0,7]中的IFM值)可以被向左移位到权重寄存器528的相邻列,如图5D所示。高速缓存529广播权重矩阵504的位置[0,1]处的权重值W1。每列(例如,MAC拼片的PE列)中的乘法器可以将加载在权重寄存器528中的IFM502矩阵位置[0,1]–[0,8]中的IFM值与W1相乘,并且乘法的结果可以被累加到第一累加器集合(例如,图2的累加器寄存器122)中。
图5E示出了步骤514的细节。如图5E所示,一个读取信道将来自SRAM的IFM 502矩阵的第一行的位置[0,9]的数据加载到IFM 502矩阵的第九列的权重寄存器528中,同时在上一个周期中加载的IFM值(例如,IFM 502矩阵位置[0,1]–[0,8]中的IFM值)可以被向左移位到权重寄存器528的相邻列,如图5E所示。高速缓存529可以广播位置[0,2]处的值W2。每列(例如,MAC拼片的PE列)中的乘法器可以将加载在权重寄存器528中的IFM 502矩阵位置[0,2]–[0,9]中的IFM值与W2相乘,并且乘法的结果可以被累加到第一累加器集合(例如,图2的累加器寄存器122)中。在该阶段,处理器已经完成卷积的第一计算集合,以确定OFM508。来自IFM 502矩阵的第一行的位置[0,0]–[0,9]的数据可以不用于接下来的计算中(例如,可以不需要用于接下来的计算),并因此可以不被保存在权重寄存器528中(例如,来自IFM 502的第一行的数据可以从权重寄存器528中被丢弃或者被覆写在权重寄存器528中)。
图5F-图5G示出了步骤516的细节。如图5F所示,四个读取信道527(例如,分段的IFM传递构造)将来自SRAM(例如,包括四个SRAM块的SRAM组集)的IFM 502矩阵的第二行的位置[1,0]、[1,2]、[1,4]和[1,6]的数据加载到来自多个(例如,八个)权重寄存器528(例如,图1-图2的权重缓冲器116)的四个权重寄存器中。接下来,如图5G所示,四个读取信道527将来自SRAM的IFM 502矩阵的第二行的位置[1,1]、[1,3]、[1,5]和[1,7]的数据加载到来自八个权重寄存器528当中的其他四个权重寄存器中。高速缓存529(例如,锯齿形高速缓存)广播权重矩阵(或内核)504的位置[1,0]处的权重值W3。每列(例如,MAC拼片的PE列)中的乘法器可以将加载在权重寄存器528中的IFM 502矩阵位置[1,0]–[1,7]中的IFM值与W3相乘,并将结果加载到第一累加器集合(例如,图2的累加器寄存器122)中。
图5H示出了步骤518的细节。如图5H所示,一个读取信道将来自SRAM的IFM 502矩阵的第二行的位置[1,8]的数据加载到IFM 502矩阵的第八列的权重寄存器528中,同时在上一个周期中加载的IFM值(例如,IFM 502矩阵位置[1,0]–[1,7]中的IFM值)可以被向左移位到权重寄存器528的相邻列,如图5H所示。高速缓存529广播权重矩阵504的位置[1,1]处的权重值W4。每列(例如,MAC拼片的PE列)中的乘法器可以将加载在权重寄存器528中的IFM502矩阵502位置[1,1]–[1,8]中的IFM值与W4相乘,并且乘法的结果可以被累加到第一累加器集合(例如,图2的累加器寄存器122)中。
图5I示出了步骤520的细节。如图5I所示,一个读取信道将来自SRAM的IFM 502矩阵的第二行的位置[1,9]的数据加载到IFM 502矩阵的第九列的权重寄存器528中,同时在上一个周期中加载的IFM值(例如,IFM 502矩阵位置[1,1]–[1,8]中的IFM值)可以被向左移位到权重寄存器528的相邻列,如图5I所示。高速缓存529可以广播权重矩阵504的位置[1,2]处的值W5。每列(例如,MAC拼片的PE列)中的乘法器可以将加载在权重寄存器528中的IFM502矩阵位置[1,2]–[1,9]中的IFM值与W5相乘,并且乘法的结果可以被累加到第一累加器集合(例如,图2的累加器寄存器122)中。在该阶段,处理器已经完成卷积的第二计算集合,以确定OFM 508。来自IFM 502矩阵的第二行的位置[1,0]–[1,9]的数据可以用于接下来的计算中,并因此可以被保存在权重寄存器528中。
图5J-图5K示出了步骤522的细节。如图5J所示,四个读取信道527(例如,分段的IFM传递构造)将来自SRAM(例如,包括四个SRAM块的SRAM组集)的IFM 502矩阵的第三行的位置[2,0]、[2,2]、[2,4]和[2,6]的数据加载到来自多个(例如,八个)权重寄存器528(例如,图1-图2的权重缓冲器116)的四个权重寄存器中。接下来,如图5K所示,四个读取信道527将来自SRAM的IFM 502矩阵的第三行的位置[2,1]、[2,3]、[2,5]和[2,7]的数据加载到来自八个权重寄存器528当中的其他四个权重寄存器中。高速缓存529(例如,锯齿形高速缓存)广播权重矩阵504的位置[2,0]处的权重值W6。每列(例如,MAC拼片的PE列)中的乘法器可以将加载在权重寄存器528中的IFM 502矩阵位置[2,0]–[2,7]中的IFM值与W6相乘,并将结果加载到第一累加器集合(例如,图2的累加器寄存器122)中。
图5L示出了步骤524的细节。如图5L所示,一个读取信道将来自SRAM的IFM 502矩阵的第三行的位置[2,8]的数据加载到IFM 502矩阵的第八列的权重寄存器528中,同时在上一个周期中加载的IFM值(例如,IFM 502矩阵位置[2,0]–[2,7]中的IFM值)可以被向左移位到权重寄存器528的相邻列,如图5L所示。高速缓存529广播权重矩阵504的位置[2,1]处的权重值W7。每列(例如,MAC拼片的PE列)中的乘法器可以将加载在权重寄存器528中的IFM502矩阵位置[2,1]–[2,8]中的IFM值与W7相乘,并且乘法的结果可以被累加到第一累加器集合(例如,图2的累加器寄存器122)中。
图5M示出了步骤526的细节。如图5M所示,一个读取信道将来自SRAM的IFM 502矩阵的第三行的位置[2,9]的数据加载到IFM 502矩阵的第九列的权重寄存器528中,同时在上一个周期中加载的IFM值(例如,IFM 502矩阵位置[2,1]–[2,8]中的IFM值)可以被向左移位到权重寄存器528的相邻列,如图5M所示。高速缓存529可以广播权重矩阵504的位置[2,2]处的值W8。每列(例如,MAC拼片的PE列)中的乘法器可以将加载在权重寄存器528中的IFM502矩阵位置[2,2]–[2,9]中的IFM值与W8相乘,并且乘法的结果可以被累加到第一累加器集合(例如,图2的累加器寄存器122)中。在该阶段,处理器已经完成卷积的下一个计算集合,以确定OFM 508。来自IFM 502矩阵的位置[2,0]–[2,9]的数据可以用于接下来的计算中,并因此可以被保存在权重寄存器528中。
来自510至526的结果可以被相加,以确定OFM 508的第一行506。
图5N-图5W详细示出了关于OFM 508的第二行530的确定。
图5O示出了图5N的步骤532的细节。如图5O所示,在532,四个读取信道527(例如,分段的IFM传递构造)将来自SRAM(例如,包括四个SRAM块的SRAM组集)的IFM 502矩阵的第四行的位置[3,0]、[3,2]、[3,4]和[3,6]的数据加载到来自多个(例如,八个)权重寄存器528(例如,图1-图2的权重缓冲器116)的四个权重寄存器中。高速缓存529可以广播位置[0,0]处的值W0。每列(例如,MAC拼片的PE列)中的乘法器可以将加载在权重寄存器528中的IFM502矩阵位置[1,0]–[1,7]中的IFM值与W0相乘,并且乘法的结果可以被累加到第二累加器集合(例如,图2的累加器寄存器122)中,同时第一累加器集合可以被写入回到SRAM组(例如,SRAM组集)中。
图5P示出了步骤534的细节。如图5P所示,读取信道527将来自SRAM的IFM 502矩阵的第四行的位置[3,1]、[3,3]、[3,5]和[3,7]的数据加载到来自八个权重寄存器528当中的其他四个权重寄存器中。高速缓存529(例如,锯齿形高速缓存)广播权重矩阵504的位置[1,1]处的权重值W1。每列(例如,MAC拼片的PE列)中的乘法器可以将加载在权重寄存器528中的IFM矩阵502位置[1,1]–[1,8]中的IFM值与W1相乘,并将结果加载到第二累加器集合(例如,图2的累加器寄存器122)中。第一累加器集合继续被写入回到SRAM组(例如,SRAM组集)中。来自IFM 502矩阵位置[1,0]-[1,7]的数据可能不需要,并因此将被IFM 502矩阵位置[3,0]-[3,7]中的数据替换。
图5Q示出了步骤536的细节。如图5Q所示,一个读取信道将来自SRAM的IFM 502矩阵的位置[3,8]的数据加载到IFM 502矩阵的第八列的权重寄存器528中,同时在上一个周期中加载的IFM值(例如,IFM 502矩阵位置[3,0]–[3,7]中的IFM值)可以被向左移位到权重寄存器528的相邻列,如图5Q所示。高速缓存529广播权重矩阵504的位置[0,2]处的权重值W2。每列(例如,MAC拼片的PE列)中的乘法器可以将加载在权重寄存器528中的IFM 502矩阵位置[1,2]–[1,9]中的IFM值与W2相乘,并且乘法的结果可以被累加到第二累加器集合(例如,图2的累加器寄存器122)中。来自IFM 502矩阵的位置[1,1]–[1,8]的数据可能不用于接下来的计算中,并因此可以被IFM 502矩阵位置[3,1]-[3,8]中的数据替换。
图5R示出了步骤538的细节。如图5R所示,一个读取信道将来自SRAM的IFM 502矩阵的第四行的位置[3,9]的数据加载到IFM 502矩阵的第九列的权重寄存器528中,同时在上一个周期中加载的IFM值(例如,IFM 502矩阵位置[3,1]–[3,8]中的IFM值)可以被向左移位到权重寄存器528的相邻列,如图5R所示。高速缓存529可以广播位置[2,0]处的值W3。每列(例如,MAC拼片的PE列)中的乘法器可以将加载在权重寄存器528中的IFM 502矩阵位置[2,0]–[2,7]中的IFM值与W3相乘,并且乘法的结果可以被累加到第一累加器集合(例如,图2的累加器寄存器122)中。在该阶段,处理器已经完成卷积的第二计算集合,以确定OFM508。来自IFM 502矩阵的位置[2,0]–[2,9]的数据可以用于接下来的计算中,并因此可以被保存在权重寄存器528中。来自IFM 502矩阵的第二行的位置[1,2]-[1,9]的数据可以不用于接下来的计算中,并因此将被IFM 502矩阵位置[3,2]-[3,9]中的数据替换。
图5S示出了步骤540的细节。如图5S所示,四个读取信道527(例如,分段的IFM传递构造)将来自SRAM(例如,包括四个SRAM块的SRAM组集)的IFM 502矩阵的第五行的位置[4,0]、[4,2]、[4,4]和[4,6]的数据加载到来自多个(例如,八个)权重寄存器528(例如,图1-图2的权重缓冲器116)的四个权重寄存器中。高速缓存529(例如,锯齿形高速缓存)广播权重矩阵504的位置[1,1]处的权重值W4。每列(例如,MAC拼片的PE列)中的乘法器可以将加载在权重寄存器528中的IFM 502矩阵位置[2,1]–[2,8]中的IFM值与W4相乘,并将结果加载到第二累加器集合(例如,图2的累加器寄存器122)中。
图5T示出了步骤542的细节。如图5T所示,读取信道527将来自SRAM的IFM 502矩阵的第五行的位置[4,1]、[4,3]、[4,5]和[4,7]的数据加载到来自八个权重寄存器528当中的其他四个权重寄存器中。高速缓存529(例如,锯齿形高速缓存)广播权重矩阵504的位置[1,2]处的权重值W5。每列(例如,MAC拼片的PE列)中的乘法器可以将加载在权重寄存器528中的IFM 502矩阵位置[2,2]–[2,9]中的IFM值与W5相乘,并将结果加载到第二累加器集合(例如,图2的累加器寄存器122)中。来自IFM 502矩阵位置[2,0]-[2,7]的数据可能不需要,并因此将被IFM 502矩阵位置[4,0]-[4,7]中的数据替换。
图5U示出了步骤544的细节。如图5U所示,一个读取信道将来自SRAM的IFM 502矩阵的位置[4,8]的数据加载到IFM 502矩阵的第八列的权重寄存器528中,同时在上一个周期中加载的IFM值(例如,IFM 502矩阵位置[4,0]–[4,7]中的IFM值)可以被向左移位到权重寄存器528的相邻列,如图5U所示。高速缓存529广播权重矩阵504的位置[2,0]处的权重值W6。每列(例如,MAC拼片的PE列)中的乘法器可以将加载在权重寄存器528中的IFM 502矩阵位置[3,0]–[3,7]中的IFM值与W6相乘,并且乘法的结果可以被累加到第二累加器集合(例如,图2的累加器寄存器122)中。来自IFM 502矩阵的位置[2,1]–[2,8]的数据可以不用于接下来的计算中,并因此将被IFM 502矩阵位置[3,1]-[3,8]中的数据替换。
图5V示出了步骤546的细节。如图5V所示,一个读取信道将来自SRAM的IFM 502矩阵的第五行的位置[4,9]的数据加载到IFM 502矩阵的第九列的权重寄存器528中,同时在上一个周期中加载的IFM值(例如,IFM 502矩阵位置[4,1]–[4,8]中的IFM值)可以被向左移位到权重寄存器528的相邻列,如图5V所示。高速缓存529可以广播位置[2,1]处的值W7。每列(例如,MAC拼片的PE列)中的乘法器可以将加载在权重寄存器528中的IFM 502矩阵位置[3,1]–[3,8]中的IFM值与W7相乘,并且乘法的结果可以被累加到第一累加器集合(例如,图2的累加器寄存器122)中。在该阶段,处理器已经完成卷积的下一个计算集合,以确定OFM508。来自IFM 502矩阵的位置[3,0]–[3,9]的数据将用于接下来的计算中,并且可以如图5V所示被保存。来自位置[2,2]–[2,9]的数据可以不用于接下来的计算中,并因此将被IFM502矩阵位置[4,2]-[4,9]中的数据替换。
图5W示出了图5N的步骤548的细节。如图5W所示,在548,四个读取信道527(例如,分段的IFM传递构造)将来自SRAM(例如,包括四个SRAM块的SRAM组集)的IFM 502矩阵的位置[5,0]、[5,2]、[5,4]和[5,6]的数据加载到来自多个(例如,八个)权重寄存器528(例如,图1-图2的权重缓冲器116)的四个权重寄存器中。高速缓存529可以广播位置[2,2]处的值W8。每列(例如,MAC拼片的PE列)中的乘法器可以将加载在权重寄存器528中的IFM 502矩阵位置[3,2]–[3,9]中的IFM值与W8相乘,并且乘法的结果可以被累加到第二累加器集合(例如,图2的累加器寄存器122)中,并且第二累加器集合可以在下一个周期期间被写入回到SRAM组(例如,SRAM组集)中。在一些实施例中,第一累加器集合可以用于从下一个周期开始累加乘法结果。
来自532至548的结果可以被相加,以确定OFM 508的第二行530。虽然以上参考图5N-图5W描述了第二行530的计算,但是本领域技术人员将理解,可以使用基本类似的操作基于IFM 502的剩余行中的数据来计算OFM 508的剩余行。类似地,可以使用类似的操作(开始于如上参考图5A-图5M所述的计算OFM 508的第一行,并且如上参考图5N-图5W所述的计算OFM 508的剩余行)来计算OFM 508与IFM 502的剩余八列宽区段(例如,第二八列宽区段404)相对应的部分。
将理解,尽管术语“第一”、“第二”、“第三”等可以在本文中用于描述各种元素、组件、区域、层和/或区段,但是这些元素、组件、区域、层和/或区段不应该被这些术语限制。这些术语仅用于区分一个元素、组件、区域、层或区段与另一个元素、组件、区域、层或区段。因此,在不脱离本公开的范围的情况下,在本文中讨论的第一元素、组件、区域、层或区段可以被称为第二元素、组件、区域、层或区段。
空间相对术语,诸如“在…下”、“下方”、“下侧”、“在…之下”、“上方”、“上侧”等,可以在本文中用于方便用以描述如附图所示的一个元素或特征与另一(多个)元素或者(多个)特征的关系的描述。将理解,这样的空间相对术语旨在除了在附图中描绘的方位之外还包含使用或操作中的设备的不同方位。例如,如果附图中的设备被翻转,则描述为“在其他元素或特征下方”或“在其他元素或特征下”或“在其他元素或特征之下”的元素然后将被定向为“在其他元素或特征上方”。因此,示例术语“下方”和“在…之下”可以包含上方和下方的方位。设备可以以其他方式被定向(例如,旋转90度或在其他方位),并且在本文中使用的空间相对描述符应该被相应地解释。此外,还将理解,当层被称为“在两层之间”时,它可以是两层之间的唯一层,或者也可以存在一个或多个中间层。
在本文中使用的专业术语仅用于描述特定实施例的目的,并且不旨在限制本公开。如本文所使用的,术语“基本上”、“大约”和类似的术语用作近似的术语,而不用作程度的术语,并且旨在说明本领域普通技术人员将认识到的测量的或计算的值中的固有偏差。
如本文所使用的,单数形式“一”、“一个”旨在也包括复数形式,除非上下文另外清楚地指示。将进一步理解,当术语“包括”和/或“正包括”在本说明书中使用时,指定所陈述的特征、整数、步骤、操作、元素和/或组件的存在,但是不排除一个或多个其他特征、整数、步骤、操作、元素、组件和/或其组的存在或添加。如本文所使用的,术语“和/或”包括相关联的列出项中的一个或多个的任何和所有组合。当诸如“…中的至少一个”的表达在元素列表之前时,修饰整个元素列表,而不修饰列表的个别元素。此外,当描述本公开的实施例时的“可以”的使用是指“本公开的一个或多个实施例”。此外,术语“示例性”旨在指代示例或例示。如本文所使用的,术语“使用”、“正使用”和“被使用”可以被认为分别与术语“利用”、“正利用”和“被利用”同义。
将理解,当元素或层被称为“在另一元素或层上”、“连接到另一元素或层”、“耦合到另一元素或层”或“邻近于另一元素或层”时,它可以直接在另一元素或层上、连接到另一元素或层、耦合到另一元素或层或邻近于另一元素或层,或者可以存在一个或多个中间元素或层。相反,当元素或层被称为“直接在另一元素或层上”、“直接连接到另一元素或层”、“直接耦合到另一元素或层”或“紧邻于另一元素或层”时,不存在中间元素或层。
在本文中叙述的任何数值范围旨在包括归入在所叙述的范围内的相同数值精度的所有子范围。例如,“1.0至10.0”的范围旨在包括所叙述的最小值1.0和所叙述的最大值10.0之间(并且包括二者)的所有子范围,即具有等于或大于1.0的最小值和等于或小于10.0的最大值,诸如例如2.4至7.6。在本文中叙述的任何最大数值限制旨在包括归入其中的所有更低数值限制,并且在本说明书中叙述的任何最小数值限制旨在包括归入其中的所有更高数值限制。
在一些实施例中,本公开的方法和系统的不同实施例的一个或多个输出可以被发送给耦合到或具有显示设备的电子设备,其中该显示设备用于显示该一个或多个输出或者关于本公开的方法和系统的不同实施例的一个或多个输出的信息。
根据在本文中描述的本公开的实施例的电子或电气设备和/或任何其他相关设备或组件可以利用任何合适的硬件,固件(例如,专用集成电路),软件,或软件、固件和硬件的组合来实施。例如,这些设备的各种组件可以被形成在一个集成电路(IC)芯片上或单独的IC芯片上。此外,这些设备的各种组件可以被实施在柔性印刷电路薄膜、带载封装(TCP)、印刷电路板(PCB)上,或者被形成在一个基板上。此外,这些设备的各种组件可以是进程或线程,其中该进程或线程在一个或多个处理器上、在一个或多个计算设备中运行,执行计算机程序指令,以及与其他系统组件交互,以用于执行在本文中描述的各种功能。计算机程序指令被存储在存储器中,其中该存储器可以使用标准存储器设备(诸如例如,随机存取存储器(RAM))被实施在计算设备中。计算机程序指令也可以被存储在其他非暂时性计算机可读介质(诸如例如,CD-ROM、闪存驱动器等)中。此外,本领域技术人员应该认识到,在不脱离本公开的示例性实施例的精神和范围的情况下,各种计算设备的功能可以被组合或集成到单个计算设备中,或者特定计算设备的功能可以跨一个或多个其他计算设备而分布。
尽管已经在本文中具体描述和示出了用于在点积架构上加速二维(2D)卷积层映射的系统和方法的示例性实施例,但是许多修改和变化对于本领域技术人员来说将是显而易见的。因此,将理解,根据本公开的原理的用于在点积架构上加速二维(2D)卷积层映射的系统和方法可以不同于在本文中具体描述的来体现。本公开也被限定在所附权利要求及其等同中。
Claims (20)
1.一种用于执行卷积运算的方法,所述方法包括:
由处理器将卷积核存储在所述处理器的第一存储设备中,所述卷积核具有维度x乘y,其中,x是所述卷积核中的行数,并且y是所述卷积核中的列数;
由所述处理器将具有维度n乘m的输入特征图的元素值的第一子集存储在所述处理器的第二存储设备中,其中,n是所述输入特征图中的行数,并且m是所述输入特征图中的列数;
由所述处理器执行所述输入特征图的元素值的第一子集中的每个值与来自所述卷积核的x*y个元素当中的第一元素值的第一并列乘法;
对于所述卷积核的x*y个元素中的每个剩余值,由所述处理器执行所述剩余值与所述输入特征图的元素值的对应子集的第二并列乘法;
对于每个并列乘法,由所述处理器将每个并列乘法的结果存储在连接到所述处理器的累加器中;以及
由所述处理器输出所述累加器的值作为输出特征图OFM的第一行。
2.根据权利要求1所述的方法,其中,输出所述累加器的值作为所述OFM的第一行包括由所述处理器将存储在所述累加器中的多个并列乘法的结果相加,以生成所述OFM的第一行。
3.根据权利要求1所述的方法,其中,所述第一存储设备包括连接到所述处理器的高速缓存存储器,并且其中,所述第二存储设备包括位于所述处理器的乘积累加MAC拼片的处理元件PE中的多个寄存器,其中,所述多个寄存器是9位寄存器。
4.根据权利要求3所述的方法,还包括:
由所述处理器将所述元素值的第一子集在所述多个寄存器中向左移位一个寄存器。
5.根据权利要求1所述的方法,还包括:
由所述处理器向所述第二存储设备广播来自所述卷积核的x*y个元素当中的所述第一元素值;以及
由所述处理器向所述第二存储设备广播来自所述卷积核的x*y个元素当中的第二元素值,
其中,所述输入特征图的元素值的第一子集包括所述输入特征图的第一行的第一列至第p列中的值,并且所述输入特征图的元素值的第二子集包括所述输入特征图的第一行的第二列至第(p+1)列中的值。
6.根据权利要求1所述的方法,其中,具有维度x乘y的所述卷积核是权重矩阵,所述权重矩阵包括多个权重值,所述权重矩阵的多个权重值被存储在连接到所述处理器的高速缓存存储器中,并且其中,具有维度n乘m的所述输入特征图包括多个激活值。
7.根据权利要求6所述的方法,其中,所述处理器包括多个乘积累加MAC拼片,每个MAC拼片包括处理元件PE阵列,所述PE阵列包括多个PE行和多个PE列,所述多个PE列中的每个PE列包括多个PE以及加法器树。
8.根据权利要求7所述的方法,其中,每个MAC拼片还包括高速缓存存储器,所述高速缓存存储器包括多个并行激活通道,每个激活通道对应于所述MAC拼片中的所述PE阵列的一行。
9.根据权利要求7所述的方法,其中,所述多个PE中的每个PE包括:多个寄存器,被配置为存储所述输入特征图的多个激活值;乘法器,连接到所述多个寄存器,并且被配置为将来自所述输入特征图的激活值乘以来自所述高速缓存存储器的权重值;以及PE累加器,连接到所述乘法器,并且被配置为将来自所述乘法器的输出与来自所述多个寄存器的值相加,并将结果存储在所述多个寄存器中。
10.根据权利要求7所述的方法,其中,所述MAC拼片中的所述PE阵列包括八个PE列,其中,所述MAC拼片的八个PE列中的每个PE列包括十六个PE。
11.一种用于执行卷积运算的系统,所述系统包括:
存储器;和
与所述存储器通信的处理器,
其中,所述处理器被配置为:
将具有维度x乘y的卷积核存储在所述处理器的第一存储设备中,其中,x是所述卷积核中的行数,并且y是所述卷积核中的列数;
将具有维度n乘m的输入特征图的元素值的第一子集存储在连接到所述处理器的第二存储设备中,其中,n是所述输入特征图中的行数,并且m是所述输入特征图中的列数;
执行所述输入特征图的元素值的第一子集中的每个值与来自所述卷积核的x*y个元素当中的第一元素值的第一并列乘法;
对于所述卷积核的x*y个元素中的每个剩余值,执行所述剩余值与所述输入特征图的元素值的对应子集的第二并列乘法;
对于每个并列乘法,将每个并列乘法的结果存储在连接到所述处理器的累加器中;以及
输出所述累加器的值作为输出特征图OFM的第一行。
12.根据权利要求11所述的系统,其中,所述处理器还被配置为通过将存储在所述累加器中的多个并列乘法的结果相加以生成所述OFM的第一行,输出所述累加器的值作为所述OFM的第一行。
13.根据权利要求11所述的系统,其中,所述第一存储设备包括连接到所述处理器的高速缓存存储器,并且其中,所述第二存储设备包括位于所述处理器的乘积累加MAC拼片的处理元件PE中的多个寄存器,其中,所述多个寄存器是9位寄存器。
14.根据权利要求13所述的系统,其中,所述处理器还被配置为:
将所述元素值的第一子集在所述多个寄存器中向左移位一个寄存器。
15.根据权利要求11所述的系统,其中,所述处理器还被配置为:
向所述第二存储设备广播来自所述卷积核的x*y个元素当中的所述第一元素值;以及
向所述第二存储设备广播来自所述卷积核的x*y个元素当中的第二元素值。
16.根据权利要求11所述的系统,其中,具有维度x乘y的所述卷积核是权重矩阵,所述权重矩阵包括多个权重值,所述权重矩阵的多个权重值被存储在连接到所述处理器的高速缓存存储器中,并且其中,具有维度n乘m的所述输入特征图包括多个激活值,其中,所述处理器包括多个乘积累加MAC拼片,每个MAC拼片包括处理元件PE阵列,所述PE阵列包括多个PE行和多个PE列,所述多个PE列中的每个PE列包括多个PE以及加法器树。
17.根据权利要求16所述的系统,其中,每个MAC拼片还包括高速缓存存储器,所述高速缓存存储器包括多个并行激活通道,每个激活通道对应于所述MAC拼片中的所述PE阵列的一行,其中,所述MAC拼片中的所述PE阵列包括八个PE列,其中,所述MAC拼片的八个PE列中的每个PE列包括十六个PE。
18.根据权利要求16所述的系统,其中,所述多个PE中的每个PE包括:多个寄存器,被配置为存储所述输入特征图的多个激活值;乘法器,连接到所述多个寄存器,并且被配置为将来自所述输入特征图的激活值乘以来自所述高速缓存存储器的权重值;以及PE累加器,连接到所述乘法器,并且被配置为将来自所述乘法器的输出与来自所述多个寄存器的值相加,并将结果存储在所述多个寄存器中。
19.一种方法,包括:
由处理器执行第一矩阵的元素值的第一子集中的每个值与来自第二矩阵的x*y个元素当中的第一元素值的第一并列乘法;
对于所述第二矩阵的x*y个元素中的每个剩余值,由所述处理器执行所述剩余值与所述第一矩阵的元素值的对应子集的第二并列乘法;
对于每个并列乘法,由所述处理器将所述并列乘法的结果存储在连接到所述处理器的累加器中;以及
由所述处理器输出所述累加器的值作为输出特征图OFM的第一行。
20.根据权利要求19所述的方法,还包括:
由所述处理器将所述第二矩阵存储在所述处理器的第一存储设备中,所述第二矩阵具有维度x乘y,其中,x是所述第二矩阵中的行数,并且y是所述第二矩阵中的列数;
由所述处理器将具有维度n乘m的所述第一矩阵的元素值的第一子集存储在连接到所述处理器的第二存储设备中,其中,n是所述第一矩阵中的行数,并且m是所述第一矩阵中的列数;以及
由所述处理器将所述第一矩阵的元素值的第二子集存储在所述第二存储设备中,
其中,所述第一矩阵的元素值的第一子集包括所述第一矩阵的第一行的第一列至第p列中的值,所述第一矩阵的元素值的第二子集包括所述第一矩阵的第一行的第二列至第(p+1)列中的值。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962947423P | 2019-12-12 | 2019-12-12 | |
US62/947,423 | 2019-12-12 | ||
US16/900,819 US20210182025A1 (en) | 2019-12-12 | 2020-06-12 | Accelerating 2d convolutional layer mapping on a dot product architecture |
US16/900,819 | 2020-06-12 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112989267A true CN112989267A (zh) | 2021-06-18 |
Family
ID=72422119
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011169398.3A Pending CN112989267A (zh) | 2019-12-12 | 2020-10-28 | 用于执行卷积运算的方法和系统 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20210182025A1 (zh) |
EP (1) | EP3836028A1 (zh) |
KR (1) | KR20210074992A (zh) |
CN (1) | CN112989267A (zh) |
TW (1) | TWI832006B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110494867A (zh) * | 2017-03-23 | 2019-11-22 | 三星电子株式会社 | 用于操作机器学习的电子装置和用于操作机器学习的方法 |
CN110494867B (zh) * | 2017-03-23 | 2024-06-07 | 三星电子株式会社 | 用于操作机器学习的电子装置和用于操作机器学习的方法 |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11726950B2 (en) * | 2019-09-28 | 2023-08-15 | Intel Corporation | Compute near memory convolution accelerator |
US11755683B2 (en) | 2019-12-23 | 2023-09-12 | Western Digital Technologies, Inc. | Flexible accelerator for sparse tensors (FAST) in machine learning |
US11797830B2 (en) | 2020-03-25 | 2023-10-24 | Western Digital Technologies, Inc. | Flexible accelerator for sparse tensors in convolutional neural networks |
US11462003B2 (en) * | 2020-03-25 | 2022-10-04 | Western Digital Technologies, Inc. | Flexible accelerator for sparse tensors in convolutional neural networks |
US11144615B1 (en) * | 2020-04-14 | 2021-10-12 | Apple Inc. | Circuit for performing pooling operation in neural processor |
US20210406654A1 (en) * | 2020-06-29 | 2021-12-30 | Alibaba Group Holding Limited | Artificial neural network with sparse weights |
TWI798972B (zh) * | 2021-12-01 | 2023-04-11 | 大陸商星宸科技股份有限公司 | 智慧處理器裝置與降低記憶體頻寬的方法 |
US20230244448A1 (en) * | 2022-02-01 | 2023-08-03 | Microsoft Technology Licensing, Llc | Multiply-accumulator array circuit with activation cache |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5285403A (en) * | 1989-12-29 | 1994-02-08 | U.S. Philips Corporation | Arithmetic processing module to be associated with a microprocessor central processing unit |
US9805303B2 (en) * | 2015-05-21 | 2017-10-31 | Google Inc. | Rotating data for neural network computations |
CN106650922B (zh) * | 2016-09-29 | 2019-05-03 | 清华大学 | 硬件神经网络转换方法、计算装置、软硬件协作系统 |
KR20180073118A (ko) * | 2016-12-22 | 2018-07-02 | 삼성전자주식회사 | 컨볼루션 신경망 처리 방법 및 장치 |
CN106844294B (zh) * | 2016-12-29 | 2019-05-03 | 华为机器有限公司 | 卷积运算芯片和通信设备 |
US11803377B2 (en) * | 2017-09-08 | 2023-10-31 | Oracle International Corporation | Efficient direct convolution using SIMD instructions |
KR102452953B1 (ko) * | 2017-10-30 | 2022-10-11 | 삼성전자주식회사 | 뉴럴 네트워크의 컨볼루션 연산을 수행하는 방법 및 장치 |
KR20190051697A (ko) * | 2017-11-07 | 2019-05-15 | 삼성전자주식회사 | 뉴럴 네트워크의 디컨벌루션 연산을 수행하는 장치 및 방법 |
CN112106078A (zh) * | 2018-05-08 | 2020-12-18 | 多伦多大学管理委员会 | 神经网络处理元件 |
CN108615036B (zh) * | 2018-05-09 | 2021-10-01 | 中国科学技术大学 | 一种基于卷积注意力网络的自然场景文本识别方法 |
US20200210517A1 (en) * | 2018-12-27 | 2020-07-02 | Intel Corporation | Systems and methods to accelerate multiplication of sparse matrices |
CN110110707A (zh) * | 2019-05-24 | 2019-08-09 | 苏州闪驰数控系统集成有限公司 | 人工智能cnn、lstm神经网络动态识别系统 |
US20210011732A1 (en) * | 2019-07-09 | 2021-01-14 | MemryX Inc. | Matrix Data Reuse Techniques in Processing Systems |
-
2020
- 2020-06-12 US US16/900,819 patent/US20210182025A1/en active Pending
- 2020-09-01 KR KR1020200111173A patent/KR20210074992A/ko active Search and Examination
- 2020-09-07 EP EP20194787.6A patent/EP3836028A1/en active Pending
- 2020-09-21 TW TW109132495A patent/TWI832006B/zh active
- 2020-10-28 CN CN202011169398.3A patent/CN112989267A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110494867A (zh) * | 2017-03-23 | 2019-11-22 | 三星电子株式会社 | 用于操作机器学习的电子装置和用于操作机器学习的方法 |
US11907826B2 (en) | 2017-03-23 | 2024-02-20 | Samsung Electronics Co., Ltd | Electronic apparatus for operating machine learning and method for operating machine learning |
CN110494867B (zh) * | 2017-03-23 | 2024-06-07 | 三星电子株式会社 | 用于操作机器学习的电子装置和用于操作机器学习的方法 |
Also Published As
Publication number | Publication date |
---|---|
TW202123093A (zh) | 2021-06-16 |
KR20210074992A (ko) | 2021-06-22 |
EP3836028A1 (en) | 2021-06-16 |
US20210182025A1 (en) | 2021-06-17 |
TWI832006B (zh) | 2024-02-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3836028A1 (en) | Accelerating 2d convolutional layer mapping on a dot product architecture | |
CN109992743B (zh) | 矩阵乘法器 | |
US10394929B2 (en) | Adaptive execution engine for convolution computing systems | |
CN110050267B (zh) | 用于数据管理的系统和方法 | |
EP3539059B1 (en) | Performing kernel striding in hardware | |
Yepez et al. | Stride 2 1-D, 2-D, and 3-D Winograd for convolutional neural networks | |
US20190095776A1 (en) | Efficient data distribution for parallel processing | |
CN107862650B (zh) | 加速计算二维图像cnn卷积的方法 | |
US20210241071A1 (en) | Architecture of a computer for calculating a convolution layer in a convolutional neural network | |
CN111898733B (zh) | 一种深度可分离卷积神经网络加速器架构 | |
CN111476360A (zh) | 用于神经网络的Winograd变换卷积操作的装置和方法 | |
CN110245752A (zh) | 一种全连接运算方法及装置 | |
WO2019010183A1 (en) | PROCESSOR OF DEEP VISION | |
WO2018132718A1 (en) | Methods and apparatus for matrix processing in a convolutional neural network | |
CN116541647A (zh) | 运算加速器、处理方法及相关设备 | |
CN108170640B (zh) | 神经网络运算装置及应用其进行运算的方法 | |
EP3674982A1 (en) | Hardware accelerator architecture for convolutional neural network | |
CN115552523A (zh) | 使用存储器内处理的基于计数器的乘法 | |
Kala et al. | UniWiG: Unified winograd-GEMM architecture for accelerating CNN on FPGAs | |
CN111160542B (zh) | 集成电路芯片装置及相关产品 | |
CN109615061A (zh) | 一种卷积运算方法及装置 | |
CN110716751B (zh) | 高并行度计算平台、系统及计算实现方法 | |
CN116090518A (zh) | 基于脉动运算阵列的特征图处理方法、装置以及存储介质 | |
CN112836793B (zh) | 浮点可分离卷积计算加速装置、系统以及图像处理方法 | |
CN110765413B (zh) | 矩阵求和结构及神经网络计算平台 |
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 |