掌桥专利:专业的专利平台
掌桥专利
首页

相关申请的交叉引用

本申请要求2021年7月6日提交的美国申请序列号No.17/368,374的优先权的权益,其全部内容通过引用并入本文中。

技术领域

背景技术

本说明书通常涉及使用电路系统来处理矩阵。

发明内容

根据本说明书中描述的主题的一个创新方面,计算系统可以通过增加来自输入矩阵的值被加载到矩阵乘法单元中的单元格阵列中的速率来提高将输入矩阵加载到矩阵乘法单元中的吞吐量。例如,矩阵处理器可以是训练神经网络、计算神经网络推断或两者都有的专用硬件电路的一部分。

提高吞吐量的一种方式是增加将矩阵、尤其是稀疏矩阵加载到单元格阵列中的速率。稀疏矩阵是具有许多具有“空”值,即零值的元素的矩阵。例如,如果矩阵的一半以上的值为空,则可以认为该矩阵是稀疏的。

通常,本说明书中描述的主题的一个创新方面可以体现在包括由硬件设备执行的动作的方法中,该硬件设备包括用于具有M×N单元格的阵列的电路系统,这些动作包括:在硬件电路系统处接收来自第一输入矩阵的多个非零输入值,该第一输入矩阵将使用阵列来与第二输入矩阵相乘,第一输入矩阵包括多个非零输入值和多个零输入值;在硬件电路系统处接收索引元数据,该索引元数据为多个输入值中的每个非零输入值指示该非零输入值应被加载到阵列中的M×N单元格的哪个单元格中;使用硬件电路系统将非零输入值和索引元数据发送到M×N单元格;以及在阵列中的M×N单元格的特定单元格处:接收特定的非零输入值和用于该特定非零输入值的对应的索引元数据;以及根据该特定非零输入值的对应索引元数据来确定是将特定非零输入值存储在该单元格以用于执行乘法还是将特定非零输入值移位到另一单元格,其中M和N是大于1的正整数。

实现方式可以包括以下特征中的一者或多者。该方法可以还包括:在阵列中的M×N单元格中的特定单元格处并在将非零输入值和索引元数据发送到M×N单元格之前:将零输入值自动加载到单元格中。将非零权重输入值和索引元数据发送到M×N单元格可以包括沿着具有M×N单元格的阵列的第一维度发送这些非零权重输入值。阵列的第一维度可以包括该阵列的垂直维度;并且沿着阵列的第一维度将非零权重输入和索引元数据发送到M×N单元格可以包括从该阵列的顶部边缘开始发送非零权重输入和索引元数据。阵列的第一维度可以包括该阵列的水平维度;并且沿着阵列的第一维度将非零权重输入和索引元数据发送到M×N单元格可以包括从该阵列的左边缘开始发送非零权重输入和索引元数据。索引元数据可以包括用于每个非零输入值的绝对固定长度行索引。索引元数据可以包括用于每个非零输入值的游程长度编码行索引。索引元数据可以包括阵列的M×N单元格中的非零输入值的定位的位图。硬件设备可以还包括用于该阵列的M×N单元格中的每个单元格的比较器,该比较器被配置成将(i)每个非零输入值的索引元数据与(ii)该单元格的索引进行比较,该索引指示该单元格沿着阵列的第一维度在M×N单元格中的定位。多个输入值可以呈压缩稀疏列(CSC)矩阵格式。硬件设备可以还包括用于阵列的M×N单元格中的每个单元格的先进先出(FIFO)寄存器,并且其中将相应的非零输入值加载到单元格中可以包括将相应的非零输入值排队到与该单元格相关联的FIFO寄存器中。该方法可以还包括,对于存储特定非零输入值的阵列中的每个单元格:使用硬件电路系统接收来自第二输入矩阵的第二输入值;以及基于该特定非零输入值和第二输入值,使用硬件电路系统来确定相应的乘法乘积。非零输入值可以每个时钟周期移动一个单元格。该方法可以还包括:确定第一输入矩阵包括仅具有零输入值的列;以及作为响应,为每个零输入值向由对应的索引元数据定义的索引添加符号位。

该方面和其他方面的其他实现方式包括对应的系统、装置和计算机程序,对应的系统、装置和计算机程序被配置成执行方法的动作,并被编码在计算机存储设备上。一个或多个计算机的系统可以通过安装在系统上的软件、固件、硬件或它们的组合来如此配置,在操作中使得该系统执行这些动作。一个或多个计算机程序可以通过具有指令来如此配置,当由数据处理装置执行时,这些指令使该装置执行这些动作。

可以实现本说明书中描述的主题的特定实施例,以便实现以下优点中的一个或多个。本说明书描述了一种矩阵乘法单元,其可以在比常规矩阵乘法单元少得多的时钟周期内加载要与另一矩阵(或向量)相乘的输入矩阵。特别地,阵列的每个单元格具有比较器的矩阵乘法单元可以仅将非零输入值(即,来自输入矩阵的具有非零值的元素),而不是将包括零输入值的所有获得的输入值,加载到阵列的相应单元格中。然后,专用硬件电路可以通过扩展矩阵乘法单元内部(例如,并非在矩阵乘法单元外部和在单独的处理单元中,或者在矩阵乘法单元的边界处)的矩阵来有效地将输入值加载到矩阵乘法单元的阵列中,从而使得硬件电路能够更有效地执行矩阵运算。这可以节省将输入值加载到矩阵乘法单元所需的时间,例如,在通过将外部存储器单元耦合到每个单元格的输入值加载线将输入值加载到阵列的相应单元格所需的时钟周期总数方面。这还可以允许更好地利用存储器容量、带宽或硬件电路,从而进一步提高性能。

在附图和以下描述中陈述本说明书中的主题的一个或多个实施例的细节。主题的其他特征、方面和优点将从具体实施方式、附图和权利要求变得显而易见。

附图说明

图1示出包括矩阵计算单元的示例性架构。

图2示出在矩阵计算单元的二维阵列内部的单元格的示例性架构。

图3示出不同索引元数据的示例性说明。

图4是图示用于将矩阵加载到矩阵计算单元中的过程的示例的流程图。

图5示出预处理将被加载到矩阵计算单元中的矩阵的示例性说明。

图6A至图6B示出将矩阵加载到矩阵计算单元中的示例性说明。

各个附图图中的相同附图标记和名称指示相同的元件。

具体实施方式

通常,数据可以以矩阵的形式表示,并且计算系统可以通过执行矩阵运算来操纵数据。矩阵可以是一维向量或多维矩阵。矩阵可以由诸如数据库表或变量的数据结构表示。稀疏矩阵是具有许多具有“空”值,即零值的元素的矩阵。例如,如果矩阵的一半以上的值为空,则可以认为该矩阵是稀疏的。

图1示出包括矩阵计算单元的示例性架构100。矩阵计算单元是二维阵列106。阵列106包括多个单元格,例如,单元格114、116和118。在一些实现方式中,阵列106的第一维度是对应于单元格的行的垂直维度,并且阵列106的第二维度是对应于单元格的列的水平维度。阵列106可以具有比列更多的行、比行更多的列或者相等数量的列和行。

在一些实现方式中,矩阵计算单元可以,例如,在二维单元阵列106的每个单元格内,包括附加的电路系统,每个其被配置成处理数据。

作为一个示例,矩阵计算单元可以是训练神经网络、计算神经网络推断或两者的专用硬件电路的一部分,并且矩阵计算单元可以是在两个矩阵之间执行矩阵乘法运算的矩阵乘法单元。也就是说,通过使用阵列106的单元格内的乘法和求和电路系统,以及通过与硬件电路的附加组件一起工作,矩阵计算单元可以用于在神经网络中执行数学运算,例如乘法和加法,该硬件电路例如可以包括标量处理单元和向量处理单元,以及相关联的标量存储器和向量存储器。

作为另一示例,矩阵计算单元可以是跨通道单元,其被配置成在多个通道的不同通道之间移动数据。如本文所使用,通道通常对应于示例性硬件电路的区域、区段或部分,其可以包括硬件电路的计算/数据处理资源。例如,跨通道单元可以是转置单元、归约单元或置换单元。转置单元可以执行矩阵的转置运算。也就是说,转置单元可以接收一个维度(例如,沿着给定的行)中的数字,并对它们进行转置,使得跨通道的数字与另一维度(例如,沿着给定的列)中的数字进行转置。归约或置换单元可以通过支持诸如置换、通道旋转、旋转置换、通道归约、置换通道归约和分段置换通道归约的各种运算来解决跨通道通信的问题。

作为另一示例,矩阵计算单元可以是算术单元,其通过表驱动的函数逼近来执行诸如平方根、对数和倒数的运算。例如,算术单元可以在每个时钟周期执行多条目、多端口表查找,例如128条目、128端口表查找。此外,在此示例中,算术单元可以通过使用零热编码来桥接更大的表,并且可以通过重放加载到算术单元中的输入值来桥接更多的端口。零热编码是对独热编码的扩展,其初始状态向量为零,例如:[0 0 0;0 0 1;0 1 0;1 0 0]。

作为又一示例,矩阵计算单元可以是张量单元,其可以将填充数据压缩或注入张量,从而提供附加的存储节省,同时仍然支持高效的矩阵计算。张量通常是指数值或其他值的多维阵列,例如字符串,具有对应于阵列维数的特定顺序。例如,标量值是0阶张量,数值向量是1阶张量,并且矩阵是2阶张量。

关于这些示例性硬件组件(诸如标量或向量处理单元和扩展向量单元)的功能性的更多细节可以在标题为“PERFORMING MATRIX MULTIPLICATION IN HARDWARE(在硬件中执行矩阵乘法)”的美国专利No.10,621,269B2中找到,该专利于2018年5月17日提交并于2020年4月14日授权,其通过引用并入本文。

通常,在开始诸如矩阵-矩阵乘法或向量-矩阵乘法的一系列矩阵运算之前,矩阵的至少一部分需要被预加载到矩阵计算单元中。在以上示例中,矩阵计算单元可以通过增加输入值被加载到矩阵计算单元中的速率来提高硬件电路的吞吐量,从而使得硬件电路能够更有效地执行矩阵计算,例如用于处理神经网络的计算。

将矩阵加载到矩阵计算单元中通常涉及例如根据主机接口控制信号沿着一个维度在整个阵列106中移位来自矩阵的输入值,例如从左到右,或者从上到下。例如,在一个时钟周期内,单元格114处的输入值可以移位到单元格114右侧的单元格116处的寄存器。类似地,单元格114处的输入值可以移位到单元格114下方的单元格118处的寄存器。

如图所示,二维单元格阵列106的每个单元格与比较器单元——例如比较器单元115、117或119——相关联。每个单元格可以例如使用导线连接到相关联的比较器单元。比较器单元包括硬件电路系统,其用于比较两个输入数,例如数字或二进制数,以确定一个输入数是等于、小于还是大于另一输入数。例如,比较器单元(例如,比较器单元115)可以是多位二进制比较器,其被配置成确定两个多位二进制数——例如,四位、七位或八位二进制数——之间的相等性。如下文将进一步描述,矩阵计算单元利用比较器单元来改进将数据加载到单元格阵列106中的效率,例如在矩阵运算开始之前。

在一些实现方式中,二维单元格阵列106的每个单元格处的寄存器可以是先进先出(FIFO)寄存器,并且将相应的非零输入值加载到单元格中包括将相应的非零输入值排队到与该单元格相关联的FIFO寄存器中。类似地,从单元格中卸载相应的非零输入值包括将相应的非零输入值从与单元格相关联的FIFO寄存器中出队。

在一些实现方式中,二维单元格阵列106的每个单元格可以包括多个寄存器,每个寄存器可操作来存储不同的输入值,例如重量输入或激活输入值。同一单元格中的寄存器可以是相同类型的,例如FIFO寄存器,或者可以是不同类型的。

矩阵可以由连接到矩阵计算单元的总线通过源总线传递到矩阵计算单元,并且然后加载到寄存器中,以便矩阵运算可以开始。例如,矩阵可以从系统的存储器单元或存储缓冲器传递,其可以位于电路之外。

在一些实现方式中,以诸如压缩稀疏行(CSR)格式或压缩稀疏列(CSC)格式的压缩格式接收矩阵,其通常使用线性(即,一维)阵列来存储关于矩阵的信息。当以这样的压缩格式表示时,描述矩阵的数据通常包括相关联的索引元数据,该索引元数据为矩阵内的每个非零元素(或条目)(下文称为“非零输入值”)指示非零输入值在原始矩阵中的对应位置。该索引元数据进一步指示非零输入值应被加载到二维单元格阵列的哪个单元格中。

设A是具有e个非零输入值的m×n矩阵。设Av、Ac和Ar分别是长度为e、e和(m+1)的三个一维阵列。以CSR格式,A被编码为,其中:

值阵列Av以行主序保存A中所有非零输入值的值,

值阵列Ac以行主序保存A中所有非零输入值的列,

行索引阵列Ar保存A中每个行的第一非零输入值在Av中的索引,其中Ar阵列中的最后一个元素是Av阵列中的元素总数。

例如,以下4×4矩阵

可以以CSR格式被编码为

在下面描述的这个和其他示例中,行和列被索引,其中索引从零开始,对于矩阵的从左到右的列和从顶部到底部的行增加。因此,上面的矩阵A具有从0到3的行和列的索引。

矩阵也可以以压缩稀疏列(CSC)格式编码,这通常被视为CSR“转置”。设A是具有e个非零输入值的m×n稀疏矩阵。设A’v、A’c和A’r分别是长度为e、e和(n+1)的三个一维阵列。以CSC格式,A被编码为,其中:

值阵列A’v以列主序保存A中所有非零输入值的值,

行阵列A’r以列主序保存A中所有非零输入值的行,

列索引阵列A'c保存A中每个列的第一非零输入值在A’v中的索引,其中A’c阵列中的最后一个元素是A’v阵列中的元素总数。

先前示出的相同的4×4矩阵

可以以CSC格式被编码为:

因此,包含在矩阵的CSR或CSC表示中的行和列索引信息对应于矩阵的相关联元数据,该元数据为多个输入值中的每个非零输入值指示非零输入值应被加载到二维单元格阵列中的哪个单元格中。

与矩阵相关联的索引元数据可以由系统与矩阵一起预产生和接收,或者由系统的不同组件(例如,元数据产生单元)从接收的矩阵即时产生。类似地,索引元数据可以通过附加的总线(或导线)从存储器单元或存储缓冲器被传递到矩阵计算单元,并且可以与来自矩阵的输入值一起沿着一个维度在整个阵列106中移位,例如,从左到右,或者从顶部到底部。例如,在一个时钟周期内,描述单元格114处的输入值的索引元数据可以移位到与单元格116相关联(在单元格114右侧)的比较器单元117。类似地,描述单元格114处的输入值的索引元数据可以移位到与单元格118相关联(在单元格114下方)的比较器单元119。下面将进一步描述示例性索引元数据和通过使用索引元数据将矩阵加载到矩阵计算单元中。

在图1所示的示例中,矩阵计算单元是矩阵乘法单元,其中输入值提取器接口108将第一输入矩阵的输入值以及第一输入矩阵的关联索引元数据发送到阵列106的列,并且值加载器112将第二输入矩阵的输入值以及第二输入矩阵的关联索引元数据发送到阵列106的行。然而,在一些其他实现方式中,第一输入矩阵的输入值被传送到阵列106的行,并且第二输入矩阵的输入值被传送到阵列106的列。

例如,第一输入矩阵的输入值可以对应于权重输入值,并且第二输入矩阵的输入值可以对应于输入激活值,其中权重输入值和输入激活值与可以用于计算推断的多层神经网络中的层相关联。

例如,给定输入,神经网络可以计算该输入的推断。神经网络通过处理神经网络每个层的输入来计算这种推断。特别地,神经网络的层按顺序布置,每个层具有各自的一组权重。每个层接收输入,并根据该层的权重集合处理该输入,以产生输出。因此,为了从接收的输入计算推断,神经网络接收该输入,并通过序列中的每个神经网络层对其进行处理以产生推断,其中来自一个神经网络层的输出作为输入被提供给下一个神经网络层。对神经网络层的数据输入,例如对神经网络的输入或序列中该层下面的层对神经网络层的输出,可以被称为对该层的激活输入。

图1的输入值提取器接口108可以从例如动态存储器的存储器单元接收输入值和相关联的索引元数据。输入值提取器接口108可以例如通过使用数据线将对应的输入值发送到阵列106的不同的最顶层单元格。输入值提取器接口108可以例如通过使用附加数据线或重用同一数据线将相关联的输入值发送到阵列106的不同的最顶层单元格。最顶层单元格可以是沿着阵列106的最顶层行的单元格。例如,输入值提取器接口208可以向单元格114和116发送输入值。

图1的值加载器112可以从例如统一缓冲器的存储缓冲器接收输入值和相关联的索引元数据。每个值加载器112可以向阵列106的不同的最左侧单元格发送对应的输入值。最左侧单元格可以是沿着阵列106的最左侧列的单元格。例如,对应于单元格114的值加载器112可以向单元格114发送输入值。

然而,当矩阵的大小太大时,将整个矩阵(即,矩阵的所有输入值)注入矩阵计算单元所花费的时间量可能很长。因此,为了高效地将矩阵注入到矩阵计算单元中,即减少矩阵计算单元顶部的注入端口操作以注入矩阵的周期数,矩阵计算单元利用比较器单元来确定,例如,在矩阵计算单元的二维单元格阵列106的特定单元格处,与移位到特定单元格的输入值相关联的索引元数据是否匹配二维阵列中特定单元格的定位索引。响应于肯定确定,矩阵计算单元然后将输入值存储在特定单元格的寄存器处,以供稍后在执行矩阵运算时使用。可替代地,响应于否定确定,系统将输入值移位而不是存储到特定单元格的相邻单元格。

这样,注入整个矩阵所需的时钟周期数从大约等于(正方形)矩阵的维数减少到大约等于具有最多非零值的矩阵的列(或行)中非零值的数目。当矩阵是稀疏矩阵时,所需的时钟周期数可以降低一个数量级或更多。这也可以使得注入密集矩阵更容易,即,非零输入值多于零输入值的矩阵。为了使用相同的机制来注入密集矩阵,可以在顶部边缘布置计数器,以向通过顶部边缘的每个输入值添加索引。

图2示出在矩阵计算单元的二维阵列内部的单元格的示例性架构200。在图2的示例中,矩阵计算单元被描绘为具有二维阵列的矩阵乘法单元,该二维阵列被连线以执行矩阵乘法运算,例如,将128元素向量乘以128×128矩阵。

该单元格可以包括存储激活输入的激活寄存器206。根据单元格在阵列内的位置,激活寄存器可以从左侧相邻单元格(即位于给定单元格左侧的相邻单元格)或者从存储缓冲器接收激活输入。该单元格可以包括两个权重路径寄存器212A-B,其中的每个权重路径寄存器可以接收权重输入并将权重输入传送到权重寄存器202。权重寄存器202然后可以基于控制信号存储权重输入。例如,根据单元格在阵列内的位置,权重输入可以从顶部相邻单元格或从权重提取器接口移位到权重路径寄存器。该单元格还可以包括求和寄存器204。求和寄存器204可以存储来自顶部相邻单元格的累加值。权重寄存器202、求和寄存器204、激活寄存器206和权重路径寄存器212A-B可以是被配置成存储诸如特定格式的浮点值的特定大小的值的寄存器。

乘法电路系统208可以用于将来自权重寄存器202的权重输入与来自激活寄存器206的激活输入相乘。乘法电路系统208可以将乘积输出到求和电路系统210。在一些实现方式中,乘法电路系统208的输入和输出值可以具有不同的大小和/或格式。

求和电路系统210可以对乘积和来自求和寄存器204的累加值进行求和,以产生新的累加值。求和电路系统210然后可以将新的累加值发送到位于底部相邻单元格中的另一求和寄存器。新的累加值可以用作底部相邻单元格中求和的操作数。求和电路系统210还可以接受来自求和寄存器204的值,并将来自求和寄存器204的值发送到底部相邻单元格,而不将来自求和寄存器204的值与来自乘法电路208的乘积求和。在一些实现方式中,求和电路系统210的输入值可以具有不同的大小和/或格式。在一些实现方式中,求和电路系统210的一些输入和输出值可以具有不同的大小和/或格式。

单元格还可以将权重输入和激活输入移位到相邻单元格进行处理。例如,权重路径寄存器212B可以将权重输入发送到底部相邻单元格中的另一权重寄存器。激活寄存器206可以将激活输入发送到右边相邻单元格中的另一激活寄存器。因此,在随后的时钟周期中,权重输入和激活输入都可以被阵列中的其他单元格重复使用。

值得注意的是,单元格还包括比较器单元214。比较器单元可以确定两个输入值之间的相等性。例如,比较器单元214可以将由与从权重路径寄存器212A传送的权重输入相关联的索引元数据定义的索引216与二维阵列中单元格的定位索引进行比较。作为另一示例,比较器单元214可以将由与从权重路径寄存器212B传送的权重输入相关联的索引元数据定义的索引218与二维阵列中单元格的定位索引进行比较。比较器单元可以基于比较的结果,例如通过使用导线,向权重寄存器202发送控制信号。特别地,由比较器单元214产生的控制信号可以调节由单元格输入的权重的处置,即,调节单元格是应将权重输入存储在权重寄存器202处以便由乘法电路系统208操作(在相等的情况下)还是在每个时钟周期将权重输入移位到相邻单元格(在不相等的情况下)。

索引元数据通常可以用多种方式中的任一者来创建和维护。接下来描述索引元数据的几个示例。

图3示出不同索引元数据的示例性说明。

图3的示例中的原始矩阵具有多个非零输入值和多个零输入值。多个非零输入值和多个零输入值中的每个驻留在原始矩阵中的不同定位,分别如302和304所示。

在一个示例中,如306所示,索引元数据可以包括位图索引。例如,索引元数据可以包括参考原始矩阵的非零输入值的相应定位的位图。

在另一示例中,如308所示,索引元数据可以包括绝对固定长度行索引。例如,对于矩阵的每个非零输入值,绝对固定长度索引可以是绝对固定长度的列或行索引,即参考原始矩阵。

在另一示例中,如310所示,索引元数据可以包括游程长度编码索引(run-lengthencoded index)。例如,对于矩阵的每个非零输入值,游程长度编码索引可以是游程长度编码列或行索引,即参考原始矩阵。游程长度编码是一种允许使用可变长度数据字段存储索引元数据且从而提供更多的存储节省的技术。

在这些示例中,索引元数据通常指示或以其他方式指定每个非零输入值应被加载到二维单元格阵列的哪个单元格中。另外,索引元数据可以进一步指示包括在矩阵中的输入值是否是非零值。例如,索引元数据可以包括附加的符号位,该附加的符号位被预加到每个零输入值的原始无符号索引,使得零输入值不被加载到阵列中,因为负索引从不匹配阵列内任何单元格的定位索引。

通过将矩阵加载到矩阵计算单元的二维阵列中,同时利用比较器单元来确定在与矩阵的每个非零输入值相关联的索引元数据和二维阵列中特定单元格的定位索引之间是否存在匹配,矩阵计算单元可以减少加载所花费的时间量,因为不再需要将包括任何零输入值的整个矩阵加载到矩阵计算单元中。相反,只需要加载矩阵中相对较小的非零输入值集合。这个矩阵加载过程将在下文更详细地描述。

图4是图示用于将矩阵加载到矩阵计算单元中的过程的示例的流程图400。为了方便起见,将参考具有一个或多个电路的系统来描述方法400。例如,参考图1,该系统可以包括被配置为二维阵列的矩阵计算单元,该二维阵列包含多个单元格,这些单元格在物理上或逻辑上被布置成M行和N列,其中M和N是大于1的正整数。

该系统在硬件电路系统处接收来自第一输入矩阵的多个非零输入值,该第一输入矩阵将使用阵列与第二输入矩阵相乘(402)。第一输入矩阵可以是包括多个非零输入值和多个零输入值的矩阵。第二输入矩阵可以类似地包括多个非零输入值和多个零输入值,可以具有与第一矩阵相同或不同的维度。

系统在硬件电路系统处接收索引元数据,该索引元数据为多个输入值中的每个非零输入值指示非零输入值应被加载到阵列中M×N单元格的哪个单元格中(404)。索引元数据可以以绝对固定长度行索引、游程长度编码行索引或位图索引的形式来表示,这里仅举几个示例。换句话说,系统可以接收绝对固定长度行索引、游程长度编码行索引或位图索引,它们各自指定非零输入值参考原始矩阵的定位信息。在一些实现方式中,系统可以例如从系统的存储器单元或存储缓冲器接收索引元数据以及第一输入矩阵。例如,第一输入矩阵可以以压缩稀疏行(CSR)格式或压缩稀疏列(CSC)格式接收,其中第一输入矩阵中非零输入值的行和列索引信息对应于相关联的索引元数据。

在其他实现方式中,系统可以从接收到的第一输入矩阵即时产生索引元数据。也就是说,在将第一输入矩阵加载到矩阵计算单元并使用它来执行诸如乘法和加法的数学运算之前,系统例如通过使用系统的元数据产生单元来预处理第一输入矩阵。

图5示出预处理将被加载到矩阵计算单元中的矩阵的示例性说明。

如图所示,第一矩阵是大小为6×6的矩阵510。矩阵510具有多个非零输入值,例如输入值522,以及多个零输入值,例如输入值526。

预处理矩阵涉及首先从输入矩阵510中删除所有的零输入值,例如,输入值522,并且然后沿着一个维度——例如,垂直维度——压缩输入矩阵510的剩余输入值,例如输入值522。为了沿着垂直维度压缩,系统可以向每个非零输入值指派对应的行索引标签,并且然后沿着垂直维度,即在每个列压缩非零输入值。例如,在第一(最左侧)列中,系统可以将“0”标签532指派给输入值522,并将“3”标签542指派给输入值532,指示输入值522和532分别位于矩阵的第一(最顶层)和第四行,并且然后将标签数据压缩到第一列的列表中。以此方式,系统获得压缩稀疏列(CSC)格式的原始矩阵510的表示,如示例性图示550中所示。

系统使用硬件电路系统将非零输入值和索引元数据发送到M×N单元格的阵列(406)。

通常,系统沿着阵列的一个维度发送非零输入值和索引元数据,例如,从左到右,或者从上到下。例如,当加载以CSC表示编码的矩阵时,系统可以将对应的输入值发送到阵列的不同的最顶层单元格,即,沿着阵列的最顶层行的单元格。作为另一示例,当加载以CSR表示编码的矩阵时,系统可以将对应的输入值发送到阵列的不同的最左侧单元格,即,沿着阵列的最左侧列的单元格。

图6A-B示出将矩阵加载到具有6×6单元格阵列的矩阵计算单元中的示例性说明。如上文参考图5所述,矩阵的非零输入值以及相关联的行索引元数据可以在矩阵运算开始之前被发送到阵列的不同列处的单元格。此外,每个列内非零输入值的注入可以独立于其他列。也就是说,在将输入值沿着列向下发送到单元格的情况下,不需要跨列通信。因此,跨越不同列的输入值的注入不需要同时开始——它们可以按照输入值到达矩阵计算单元的顶部边缘的顺序交错,从而有助于灵活的定时,例如脉动阵列定时。

举例来说,在610,系统将包括两个非零输入值及其相关联的行索引“0”和“3”的第一集合的数据发送到阵列的第一列。系统将包括两个非零输入值及其相关联的行索引“1”和“4”的第二集合的数据发送到阵列的第二列。系统将包含包括单个非零输入值及其相关联的行索引“4”的第三集合的数据发送到阵列的第三列。系统不发送数据到阵列的第四列。系统将包括各自包括单个非零输入值及其相关联的行索引“2”的第五集合和第六集合的数据分别发送到阵列的第五和第六列。在每个时钟周期之后,非零输入值及其相关联的行索引元数据可以在一个维度上移位一个单元格,例如从上到下。尽管已经描述了输入值被发送到阵列的列的系统,但是在一些实现方式中,输入值被发送到阵列的行。

然后,在阵列中的一些或所有M×N单元格(以下称为“特定单元格”)中的每个处,系统利用与特定单元格相关联的比较器单元来确定特定非零输入值是应被存储在特定单元格还是移位到特定单元格的相邻单元格。在一些实现方式中,系统可以在阵列中的所有M×N单元格中的每个处这样做。然而,在其他实现方式中,假设尚未到达其目的地的任何输入值都将被加载到沿着最底端行的单元格中,则系统只能在阵列中的一些M×N单元格中这样做,例如,在阵列中除了最底端单元格之外的所有单元格中的每个。

更详细地,系统在阵列中M×N单元格的特定单元格处接收特定非零输入值和该特定非零输入值的对应索引元数据(408)。

如上文所述,特定单元格可以包括存储输入值的寄存器,例如FIFO寄存器。根据单元格在阵列内的位置,寄存器可以从顶部相邻单元格或从输入值提取器接口接收输入值。可替代地,再次根据单元格在阵列内的位置,寄存器可以从左侧相邻单元格,即位于给定单元格左侧的相邻单元格,或者从值加载器接收输入值。

在阵列中M×N单元格的特定单元格处并根据特定非零输入值的对应索引元数据,系统确定是在该单元格处存储特定非零输入值以用于执行乘法,还是将该特定非零输入值移位到另一单元格(410)。

例如,在第一时钟周期(“时钟周期0”)620,阵列在左上角单元格内部具有“3”。“3”表示存储在单元格中用行索引“3”标记的非零输入值。该阵列还具有用“4”、“4”、“2”和“2”标记的非零输入值,它们分别存储在阵列的第一行(最顶层)的第二、第三、第五和第六单元格中。根据与非零输入值相关联的对应索引元数据,系统确定非零输入值都没有到达其目的地单元格。例如,在左上角的单元格,系统利用该单元格的比较器将与非零输入值相关联的行索引“3”与左上角单元格的行索引“0”进行比较,并确定这些索引彼此不相等。

在下一个时钟周期(“时钟周期1”)630,用行索引“3”、“4”、“4”、“2”和“2”标记的非零输入值被向下移位到第一行中的单元格下方的相应单元格,并且来自矩阵的用索引“0”标记的另一非零输入值被加载到左上角单元格中,以及来自矩阵的用索引“1”标记的非零输入值被加载到第二列的最顶层单元格中。

在左上角单元格632处,系统确定用行索引“0”标记的非零输入值已经到达目的地单元格,即,在单元格632处使用比较器单元将行索引——即,指示第一行的“0”——与左上角单元格632的定位索引——指示单元格632在阵列的第一行中——进行比较并确定存在匹配之后。

在第三时钟周期(“时钟周期2”)640,尚未就位的剩余非零输入值被再次移位。对于尚未就位的剩余非零输入值中的每个,指示非零输入值应被加载到阵列中的哪个单元格的相关联元数据也随着非零输入值一起被移位。在第一列中,用行索引“3”标记的非零输入值从其在前一个周期中存储的定位向下移位到第三单元格,而用行索引“0”标记的非零输入值保持在其在前一个周期中存储的定位。在第二列中,用行索引“1”和“4”标记的非零输入值分别从它们在前一个周期中存储的定位向下移位一个单元格。类似地,在第三、第五和第六列中,用行索引“4”、“2”和“2”标记的非零输入值分别向下移位到沿着第三行的单元格。

在单元格642处,系统确定用行索引“1”标记的非零输入值已经到达目的地单元格,即,在单元格处使用比较器单元将对应的行索引——即,指示第二行的“1”——与单元格642的定位索引——指示单元格642在阵列的第二行中——进行比较并确定存在匹配之后。类似地,在单元格644和646,系统确定用行索引“2”标记的输入值已经分别到达目的地单元格。

在第四时钟周期(“时钟周期3”)650,尚未就位的非零输入值被再次移位。在第一列中,用行索引“3”标记的非零输入值再次从其在前一个周期中存储的定位向下移位到第四单元格。在第二列中,用行索引“4”标记的非零输入值从其在前一个周期中存储的定位向下移位到第四单元格,而用行索引“1”标记的非零输入值保持在其在前一个周期中存储的定位。在第三列中,用行索引“4”标记的非零输入值向下移位一个单元格到第四单元格。在第五和第六列中,用行索引“2”标记的非零输入值保持在它们在前一个周期中存储的定位。

在单元格652处,系统确定用行索引“3”标记的输入值已经到达目的地单元格,即,在单元格处使用比较器单元将对应的行索引——即,指示第四行的“3”——与单元格652的定位索引——指示单元格652在阵列的第四行中——进行比较并确定存在匹配之后。

在第五时钟周期(“时钟周期4”)660,尚未就位的非零输入值被再次移位。在第二和第三列中,用行索引“4”标记的输入值再次从它们在前一个周期中存储的定位向下移位一个单元格。

在单元格662和664处,系统确定用行索引“4”标记的输入值已经到达其目的地单元格,即,在单元格662处使用比较器单元将对应的行索引——即,指示第五行的“4”——与单元格662的定位索引——指示单元格662在阵列的第五行中——进行比较并确定存在匹配之后。

特别地,在五个时钟周期之后,并如图6B的示例性图示660中所示,来自矩阵的所有非零输入值现在都已经到达它们在示例性6×6单元格阵列内的目的地单元格。

在一些实现方式中,在第一输入矩阵被加载到阵列中之前,阵列内的每个单元格可以被初始化为具有默认值零(或空)。一旦非零输入值就位,即,当阵列开始在第一输入矩阵上操作时,不具有非零输入值的每个单元格可以例如,基于存储在单元格中的控制信号,像零输入值已经被加载到它一样操作,该控制信号指定与任何非零输入值相关联的索引都没有明确地匹配它的定位索引。

在一些实现方式中,在将第一输入矩阵加载到矩阵计算单元中期间或之后,系统可以以类似或不同的方式将第二输入矩阵加载到矩阵计算单元中。在矩阵计算单元的特定单元格处,一旦例如经由控制信号确定来自第一输入矩阵和第二输入矩阵的第一输入值和第二输入值都就位,系统可以使用存储在单元格内的第一输入值和第二输入值来执行计算,例如通过使用单元格内的乘法或加法电路。当执行计算时,系统可以仅使用来自第一输入矩阵的非零输入值。

尽管图6A至图6B的示例描绘了在多个连续的时钟周期内将相同的矩阵加载到矩阵计算单元中,但这不是必须的。在将多个独热矩阵(即,以CSR或CSC格式编码的独热矩阵)的序列加载到矩阵计算单元的情况下,可以在每个时钟周期使用不同的矩阵。独热矩阵指的是其中每个列(或行)具有一个且仅一个非零输入值,例如1,而其他输入值为零的矩阵。这不仅扩展了矩阵计算单元的灵活性,例如当被配置为矩阵乘法单元时,而且还实现了置换和表查找功能性,例如当被配置为置换单元或算术单元时。

本说明书中描述的主题和功能操作的实施例可以实现在数字电子电路系统中、有形体现的计算机软件或固件中、包括本说明书中公开的结构及其结构等效物的计算机硬件中、或其中的一者或多者的组合中。本说明书中描述的主题的实施例可以实现为一个或多个计算机程序,即,计算机程序指令的一个或多个模块,其编码于有形非暂时性存储介质上用于由数据处理装置执行或控制数据处理装置的操作。计算机存储介质可以是机器可读存储设备、机器可读存储基底、随机或串行存取存储器设备、或其中的一者或多者的组合。可替代地或另外地,程序指令可以被编码在人工产生的传播信号上,例如机器产生的电气、光学或电磁信号上,产生该信号以对信息进行编码用于传输到合适的接收器装置用于由数据处理装置来执行。

术语“数据处理装置”是指数据处理硬件,且包含所有种类的用于处理数据的装置、设备和机器,通过示例包括可编程处理器、计算机或多个处理器或计算机。装置还可以是或还包括专用逻辑电路系统,例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)。除了硬件之外,该装置可以任选地包括创建用于计算机程序的执行环境的代码,例如构成处理器固件、协议堆栈、数据库管理系统、操作系统或其中的一者或多者的组合的代码。

还可以称作或描述为程序、软件、软件应用、应用程序、模块、软件模块、脚本或代码的计算机程序可以通过包括编译或解释语言、或声明性或过程式语言的任何形式的编程语言来编写;并且其可以任何形式来部署,包括作为独立程序或作为模块、组件、子例程或适于在计算环境中使用的其他单元。程序可以但不必须对应于文件系统中的文件。程序可以存储在保持其他程序或数据——例如,存储在标记语言文档中的一个或多个脚本——的文件的一部分中,存储在专用于讨论中的程序的单个文件中,或存储在多个协调文件——例如,存储一个或多个模块、子程序或代码的部分的文件——中。计算机程序可以经部署以执行在一个计算机上或多个计算机上,这些计算机位于一个站点处或跨越多个站点而分布且通过数据通信网络而互连。

本说明书中描述的过程和逻辑流可以由执行一个或多个计算机程序的一个或多个可编程计算机来执行,从而通过对输入数据进行操作并产生输出来执行功能。过程和逻辑流还可以通过专用逻辑电路系统,例如,FPGA或ASIC,或者通过专用逻辑电路系统与一个或多个编程计算机的组合来执行。

适于执行计算机程序的计算机可以基于通用或专用微处理器或两者、或任何其他种类的中央处理单元。通常,中央处理单元将接收来自只读存储器或随机存取存储器或两者的指令和数据。计算机的基本元件是用于执行或实行指令的中央处理单元以及用于存储指令和数据的一个或多个存储器设备。中央处理单元和存储器可以通过专用逻辑电路系统来补充或并入专用逻辑电路系统中。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备,例如,磁盘、磁光盘或光盘,或者以操作方式耦合以接收来自一个或多个大容量存储设备的数据或传送数据到一个或多个大容量存储设备或两者。然而,计算机无需具有这样的设备。此外,计算机可以嵌入于另一设备中,另一设备例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏控制台、全球定位系统(GPS)接收器或便携式存储设备,例如通用串行总线(USB)快闪驱动器等。

适于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器设备,通过示例包括:半导体存储器设备,例如EPROM、EEPROM和快闪存储器设备;磁盘,例如内部硬盘或可移动磁盘;磁光盘;以及CD-ROM和DVD-ROM盘。

为了提供与用户的交互,本说明书中描述的主题的实施例可以在计算机上实现,该计算机具有用于向用户显示信息的显示设备,例如,CRT(阴极射线管)或LCD(液晶显示器)监视器,以及用户可以向计算机提供输入的键盘和点击设备,例如,鼠标或轨迹球。也可以使用其他种类的设备来提供与用户的交互;例如,提供到用户的反馈可以是任何形式的感官反馈,例如,视觉反馈、听觉反馈或触觉反馈;并且来自用户的输入可以以包括声学、语音或触觉输入的任何形式来接收。此外,计算机可以通过向用户使用的设备发送文档并从其接收文档来与用户进行交互;例如,通过响应于从网络浏览器接收的请求,将网页发送到用户设备上的网络浏览器。此外,计算机可以通过向个人设备——例如,运行消息传递应用的智能电话——发送文本消息或其他形式的消息,并接收来自用户返回的响应消息来与用户进行交互。

本说明书中描述的主题的实施例可以实现在计算系统中,该计算系统包括后端组件,例如,作为数据服务器、或包括中间件组件,例如,应用服务器、或包括前端组件,例如,具有图形用户界面、网络浏览器或应用程序的客户端计算机,用户可以通过该客户端计算机来与本说明书中描述的主题的实现方式进行交互、或者一个或多个此类后端组件、中间件组件或前端组件的任何组合。系统的组件可以通过任何形式或介质的数字数据通信——例如,通信网络——来互连。通信网络的示例包括局域网(LAN)和广域网(WAN),例如因特网。

计算系统可以包括客户端和服务器。客户端和服务器通常彼此远离,且通常通过通信网络进行交互。客户端与服务器之间的关系是通过在相应计算机上运行且具有彼此的客户端服务器关系的计算机程序产生的。在一些实施例中,服务器传输数据——例如,HTML页面——到用户设备,例如,为了将数据显示给用户并从用户接收用户输入,该用户与充当客户端的设备进行交互。在用户设备处产生的数据(例如,用户交互的结果)可以在服务器处从该设备接收。

实施例1是一种由硬件设备执行的方法,该硬件设备包括用于具有M×N单元格的阵列的电路系统,该方法包括:

在硬件电路系统处接收来自第一输入矩阵的多个非零输入值,该第一输入矩阵将使用阵列与第二输入矩阵相乘,第一输入矩阵包括多个非零输入值和多个零输入值;

在硬件电路系统处接收索引元数据,该索引元数据为多个输入值中的每个非零输入值指示该非零输入值应被加载到阵列中M×N单元格的哪个单元格中;

使用硬件电路系统将非零输入值和索引元数据发送到M×N单元格;以及

在阵列中M×N单元格中的特定单元格处:

接收特定非零输入值和该特定非零输入值的对应索引元数据;

以及

根据该特定非零输入值的对应索引元数据,确定是在单元格处存储特定非零输入值以用于执行乘法,还是将特定非零输入值移位到另一单元格,

其中M和N是大于1的正整数。

实施例2是实施例1的方法,还包括,在阵列中的M×N单元格中的特定单元格处并在将非零输入值和索引元数据发送到M×N单元格之前:将零输入值自动加载到该单元格中。

实施例3是实施例1-2中的任一者的方法,其中,将非零权重输入值和索引元数据发送到M×N单元格包括沿着具有M×N单元格的阵列的第一维度发送这些非零权重输入值。

实施例4是实施例1至3中的任一者的方法,其中,阵列的第一维度包括阵列的垂直维度;并且

沿着阵列的第一维度将非零权重输入和索引元数据发送到M×N单元格包括从阵列的顶部边缘开始发送非零权重输入和索引元数据。

实施例5是实施例1至3中的任一者的方法,其中,阵列的第一维度包括阵列的水平维度;并且

沿着阵列的第一维度将非零权重输入和索引元数据发送到M×N单元格包括从阵列的左边缘开始发送非零权重输入和索引元数据。

实施例6是实施例1至5中的任一者的方法,其中,索引元数据包括用于每个非零输入值的绝对固定长度行索引。

实施例7是实施例1至5中的任一者的方法,其中,索引元数据包括用于每个非零输入值的游程长度编码行索引。

实施例8是实施例1至5中的任一者的方法,其中,索引元数据包括阵列的M×N单元格中的非零输入值的定位的位图。

实施例9是实施例1至8中的任一者的方法,其中,硬件设备还包括用于该阵列的M×N单元格中的每个单元格的比较器,该比较器被配置成将(i)每个非零输入值的索引元数据与(ii)该单元格的索引进行比较,该索引指示该单元格沿着阵列的第一维度在M×N单元格中的定位。

实施例10是实施例1至9中的任一者的方法,其中,多个输入值呈压缩稀疏列(CSC)矩阵格式。

实施例11是实施例1至10中的任一者的方法,其中,硬件设备还包括用于阵列的M×N单元格中的每个单元格的先进先出(FIFO)寄存器,并且其中将相应的非零输入值加载到单元格中包括将相应的非零输入值排队到与该单元格相关联的FIFO寄存器中。

实施例12是实施例1至10中的任一者的方法,还包括,对于存储特定非零输入值的阵列中的每个单元格:

使用硬件电路系统接收来自第二输入矩阵的第二输入值;以及

基于特定非零输入值和第二输入值,使用硬件电路系统来确定相应的乘法乘积。

实施例13是实施例1至12中的任一者的方法,其中,非零输入值每个时钟周期移动一个单元格。

实施例14是实施例1至13中的任一者的方法,还包括:

确定第一输入矩阵包括仅具有零输入值的列;以及

作为响应,为每个零输入值向由对应的索引元数据定义的索引添加符号位。

实施例15是一种系统,包括:一个或多个计算机和存储可操作的指令的一个或多个存储设备,这些指令在由一个或多个计算机执行时,使得一个或多个计算机执行实施例1至14中的任一者的方法。

实施例16是一种用计算机程序编码的计算机存储介质,该程序包括可操作的指令,这些指令在由数据处理装置执行时,使得数据处理装置执行实施例1至14中的任一者的方法。

虽然本说明书包含许多特定实现方式细节,但不应将这些细节理解为对任何发明的范围或对要求保护的内容范围的限制,而是作为可以对特定发明的特定实施例特定的特征的描述。本说明书中在单独实施例的场境中描述的某些特征也可以在单个实施例中组合实现。相反,在单个实施例的场境中描述的各种特征还可以分开实现于多个实施例中或任何合适的子组合中。此外,尽管上文可以将特征描述为在某些组合中起作用且甚至最初如此要求,但在一些情况下,来自所要求保护组合的一个或多个特征可以从该组合删除,且所要求保护组合可以涉及子组合或子组合的变体。

类似地,虽然在图中按特定顺序来描绘操作,但这不应被理解为要求按所示出的特定顺序或按依次顺序来执行这样的操作,或执行所有所说明操作,从而实现所需要的结果。在某些情况下,多任务处理和并行处理可能是有利的。此外,上述实施例中各种系统模块和组件的分离不应理解为要求所有实施例中的这样的分离,且应理解,通常可以将所描述程序组件和系统一起集成在单个软件产品中或封装在多个软件产品中。

已描述该主题的特定实施例。其他实施例是在所附权利要求书的范围内。例如,权利要求中所叙述的动作可以按不同顺序执行且仍实现所期望的结果。作为一个示例,附图中所描绘的过程未必要求所示出的特定顺序或依次顺序,以实现期望的结果。在一些情况下,多任务处理和并行处理可以是有利的。

技术分类

06120116514552