数据压缩和存储的制作方法

专利2022-06-29  34




背景技术:

卷积神经网络(nn)可包括输入层、输出层和多个隐藏层。对于nn中的每个层,预先计算权重或系数的阵列(例如权重的多维阵列)(例如作为训练阶段的一部分)并存储在存储器中,使得当它们应用于输入数据(也可以是数据多维阵列)时可以在运行时进行使用。权重阵列可以被定义为具有x*y*z的大小,其中对于不同的层,x和y可以是相同的或不同的(例如取决于是否使用填充),并且对于不同的层,阵列的深度z通常是不同的。对于输入层,权重阵列的深度可以很小(例如深度为二),但对于其他层,特别是朝向nn的末端,深度可以大得多(例如超过100或超过1000,并且已知后一层的深度为4000 )。在运行时,从存储器读取这些权重。

下面描述的实施方案仅以举例的方式提供,而不构成对解决已知数据处理方法的任何或所有缺点的实现方式的限制。



技术实现要素:

提供本发明内容是为了以简化的形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。

描述了数据压缩和解压缩的方法。这些方法可用于对神经网络中使用的权重进行压缩/解压缩。压缩方法包括通过为每个组生成包括h比特的标头数据和各自包括b比特的多个主体部分来编码数据项组,并且每个主体部分对应于该组中的数据项。对于所有组,h的值可以是固定的,并且b的值在组内是固定的,其中组的标头数据包括该组的主体部分的b的指示。在各种实例中,b=0,因此没有主体部分。在b不等于零的实例中,通过交错来自主体部分的对应于组中数据项的比特,为每个组生成主体数据字段。所得的包括标头数据和若存在的主体数据字段的编码数据块可以写入存储器。

第一方面提供了一种数据压缩方法,该方法包括:接收多个数据项;通过为每个组生成包括h比特的标头数据和各自包括b比特的多个主体部分来编码数据项组,并且每个主体部分对应于该组中的数据项,其中b在组内是固定的并且其中组的标头数据包括该组的主体部分的b的指示;对于b>0的每个组,通过交错来自主体部分的对应于组中数据项的比特来生成该组的主体数据字段;以及存储包括标头数据和主体数据字段的一个或多个编码数据块。

在一些实例中,对于所有组,h是固定的,并且b在组之间不是固定的。

b可以是大于或等于零的整数,并且h可以是大于零的整数。

所述存储一个或多个编码数据块可包括:存储包括多个组的主体数据字段的主体数据块;以及存储包括多个组的标头数据的标头数据块。

所述交错来自主体部分的对应于该组中数据项的比特可包括:(a)将每个主体部分的第一比特插入主体数据字段中;(b)将每个主体部分的下一比特插入主体数据字段中;以及(c)重复(b),直到每个主体部分的所有比特都插入主体数据字段中。

所述将每个主体部分的第一比特插入主体数据字段中可包括将每个主体部分的最低有效比特插入主体数据字段中,并且其中将每个主体部分的下一比特插入主体数据字段中可包括将每个主体部分的下一最低有效比特插入主体数据字段中。

对于每个组,所述编码数据项组可包括:接收数据项组;通过在组中的所有数据项中定位最高有效前导一的比特位置来识别主体部分大小b;生成包括编码主体部分大小的比特序列的标头数据;以及通过从每个数据项中移除无、一个或多个前导零,为该组中的每个数据项生成包括b比特的主体部分。

所述识别主体部分大小还可包括:检查所识别的主体部分大小是否是有效的主体部分大小;以及响应于确定所识别的主体部分大小不是有效的主体部分大小,将主体部分大小更新为下一个最大有效主体部分大小。

该方法还可包括,在编码数据项组之前:分析多个数据项组以生成一组有效的主体部分大小。

所述分析多个数据项组以生成一组有效的主体部分大小可包括:分析多个数据项组中的数据项以识别多个组中每个组的主体部分大小;识别多个数据项组的一个或多个最小公共主体部分大小;以及通过从一组所有可能的主体部分大小中移除与所识别的一个或多个最小公共主体部分大小相对应的那些主体部分大小来生成该组有效的主体部分大小。

该组有效主体部分大小可包括2h个不同的有效主体部分大小。

数据项可包括神经网络的权重。

所述分析多个数据项组以生成一组有效的主体部分大小可包括,对于神经网络中的每个层:分析该层的所有权重以生成该层的一组有效主体部分大小。

数据项可具有基本上以零为中心的分布,并且该方法还可包括:在编码数据项组之前,通过将具有负值的所有数据项转换为正值并将转换的数据项与具有正值的数据项交错来预处理该组中的数据项。

数据项可具有以非零值为中心的分布,并且该方法还可包括:在编码数据项组之前,通过移位所有数据项,使得移位的分布基本上以零为中心,然后将具有负值的所有移位数据项转换为正值,并将转换的移位数据项与具有正值的移位数据项交错,从而预处理该组中的数据项。

第二方面提供了一种数据解压缩方法,该方法包括:接收一个或多个数据块,所述一个或多个数据块编码一个或多个数据项组;将标头数据读入第一缓冲区中;将主体数据读入第二缓冲区中;以及对于每个编码的数据项组:从第一缓冲区读取该组的标头数据,其中数据项组的标头数据包括该数据项组的主体部分大小b的h比特指示,其中b在组内是固定的;根据标头数据确定该数据项组的主体部分大小b;基于所确定的主体部分大小从第二缓冲区读取主体数据字段,主体数据字段包括与组中的每个数据项的一个主体部分交错的主体部分;解码主体数据字段以生成解码数据项,所述解码包括对主体部分进行去交错,其中每个解码数据项包括n比特,其中n≥b;以及输出解码数据项。

主体数据字段可包括多个连续部分,每个部分包括来自每个主体部分的一个比特,并且其中解码主体数据字段可包括:从仅包括零的初始数据项集开始,组中的每个数据项为一,读取主体数据字段的各部分并且对于主体数据字段的每个部分,用主体数据字段的该部分的比特值覆盖每个数据项的一个零,以生成解码数据项;或者生成包括与所确定的主体部分大小相对应的比特位置中的一的主体数据掩模,读取主体数据字段的各部分并且对于主体数据字段的每个部分,将每个数据项的主体数据掩模中的一个比特与来自主体数据字段的该部分的比特值组合。

主体数据字段中的第一部分可包括每个主体部分的最低有效比特,后续部分可包括每个主体部分的下一个最低有效比特,并且主体数据字段中的最后部分可包括每个主体部分的最高有效比特。

该方法还可包括:在输出解码数据项之前,对组中的解码数据项进行后处理,以将一个或多个数据项从正值转换为负值。

后处理还可包括将偏移应用于每个数据项。

第三方面提供了一种数据压缩设备,该数据压缩设备包括:用于接收多个数据项的输入装置;编码模块,该编码模块被配置为通过为每个组生成包括h比特的标头数据和各自包括b比特的多个主体部分来编码数据项组,并且每个主体部分对应于该组中的数据项,其中b在组内是固定的并且其中组的标头数据包括该组的主体部分的b的指示;交错模块,该交错模块被配置为通过交错来自主体部分的对应于组中数据项的比特来生成每个组的主体数据字段;以及存储器接口,该存储器接口被配置为输出包括标头数据和主体数据字段的一个或多个编码数据块以进行存储。

第四方面提供了一种数据解压缩设备,该数据解压缩设备包括:用于接收一个或多个数据块的一个或多个输入装置,所述一个或多个数据块编码一个或多个数据项组;标头读取模块,该标头读取模块被配置为将标头数据读入第一缓冲区中;主体读取模块,该主体读取模块被配置为将主体数据读入第二缓冲区中;以及解码模块,该解码模块被配置为,对于每个编码的数据项组:从第一缓冲区读取该组的标头数据,其中数据项组的标头数据包括该数据项组的主体部分大小b的h比特指示,其中b在组内是固定的;根据标头数据确定该数据项组的主体部分大小b;基于所确定的主体部分大小从第二缓冲区读取主体数据字段,主体数据字段包括与组中的每个数据项的一个主体部分交错的主体部分;解码主体数据字段,包括对主体部分进行去交错(704),以生成解码数据项,其中每个解码数据项包括n比特,其中n≥b;以及输出解码数据项。

第五方面提供了一种压缩设备,该压缩设备包括:输入装置,该输入装置被配置为接收将在神经网络中使用的权重;压缩模块,该压缩模块被配置为压缩权重;以及存储器接口,该存储器接口被配置为输出压缩权重以进行存储。

第六方面提供了神经网络的硬件实现方式,该硬件实现方式包括解压缩设备,该解压缩设备包括:输入装置,该输入装置被配置为接收将在神经网络中使用的压缩权重;以及解压缩模块,该解压缩模块被配置为将压缩权重解压缩;其中硬件实现方式被配置为使用神经网络中的解压缩权重。

第七方面提供了一种压缩将在神经网络中使用的权重的方法。

第八方面提供了一种解压缩将在神经网络中使用的权重的方法。

第九方面提供了计算机可读代码,该计算机可读代码被配置为使得本文所述的任何方法在运行代码时执行。

如本文所述的数据压缩或数据解压缩设备可以在集成电路上的硬件中实现。可以提供一种在集成电路制造系统中制造如本文所述的数据压缩或数据解压缩设备的方法。可以提供集成电路定义数据集,当在集成电路制造系统中被处理时,该集成电路定义数据集将系统配置为制造如本文所述的数据压缩或解压缩设备。可以提供一种非暂态计算机可读存储介质,其上存储有集成电路的计算机可读描述,当被处理时,该计算机可读描述使得布局处理系统生成在集成电路制造系统中使用的电路布局描述以制造如本文所述的数据压缩或解压缩设备。

可以提供一种集成电路制造系统,包括:非暂态计算机可读存储介质,其上存储有计算机可读集成电路描述,其描述了如本文所述的数据压缩或解压缩设备;布局处理系统,其被配置为处理集成电路描述,以便生成体现如本文所述的数据压缩或解压缩设备的集成电路的电路布局描述;以及集成电路生成系统,其被配置为根据电路布局描述来制造如本文所述的数据压缩或解压缩设备。

可以提供用于执行如本文所述的任何方法的计算机程序代码。可以提供其上存储有计算机可读指令的非暂态计算机可读存储介质,所述计算机可读指令在计算机系统处执行时使得计算机系统执行如本文所述方法中的任一种。

上述特征可以根据需要组合,如熟练的技术人员将显而易见,并且可以与本文所述的实例的任何方面组合。

附图说明

现在将参考附图详细描述实例,在附图中:

图1a是改进的数据压缩方法的流程图;

图1b是对应的数据解压缩方法的流程图;

图2是示出图1a的方法中的编码和交错操作的实例的示意图;

图3是示出图1b的方法中的去交错操作的两个实例的示意图;

图4是可以在图1a的方法中使用的示例性编码方法的流程图;

图5是可以使用图4的方法编码的数据项组的示意图;

图6a和图6b示出了主体部分大小的两个示例性查找表;

图7a是可以在图1b的方法中使用的第一示例性解码方法的流程图;

图7b是示出图7a的方法中的去交错操作的两个实例的示意图;

图7c是可以在图1b的方法中使用的第二示例性解码方法的流程图;

图7d是示出图7c的方法中的去交错操作的实例的示意图;

图8a是数据项的第一示例性分布的图表;

图8b是预处理数据项的示例性分布的图表;

图8c是数据项的第二示例性分布的图表;

图9是数据多维阵列的示意图;

图10是被布置为实现图1a的方法的数据压缩设备的示意图;

图11是被布置为实现图1b的方法的数据解压缩设备的示意图;

图12示出了实现图形处理系统的计算机系统;以及

图13示出了用于生成体现图形处理系统的集成电路的集成电路制造系统。

附图示出各种实例。熟练的技术人员应当了解,附图中示出的元件边界(例如,框、框的群组,或其他形状)表示边界的一个实例。在一些实例中,可以将一个元件设计为多个元件,或者可以将多个元件设计为一个元件。在适当时,贯穿各图使用共同附图标记来指示相似特征。

具体实施方式

借助于实例呈现以下描述以使得本领域的技术人员能够制作和使用本发明。本发明不限于本文中描述的实施方案,并且对所公开的实施方案的各种修改对于所属领域的技术人员而言将是显而易见的。

现在仅通过示例的方式来描述实施方案。

如上所述,神经网络(例如卷积nn)的权重阵列可以非常大,并且由于它们存储在存储器中而不是本地高速缓存中,因此在运行时使用大量系统带宽来读入权重数据(例如在一些实例中为系统带宽的50%)。为了减少使用的带宽量,可以压缩形式存储权重,然后在使用之前(以及在从存储器读取之后)解压缩。

本文描述了一种改进的数据压缩方法,该方法涉及以可以有效地执行解压缩的方式交错压缩数据(例如需要较少的硬件区域来执行解压缩,并且解压缩过程的等待时间和功耗减少)。虽然本文描述的压缩和解压缩方法可用于神经网络(例如卷积nn)的权重阵列,但这些方法也可以应用于其他数据。在各种实例中,该方法可以应用于任何数据多维阵列,包括但不限于图像数据、语音数据等;但是这些方法也适用于1d数据。在各种实例中,本文所述的方法可用于压缩由神经网络内的层(例如卷积nn内的层)输出的数据(即结果)。然后,当随后将数据(作为输入数据)读入神经网络的下一层时,这节省了系统带宽。

如下文详细描述,数据压缩方法包括使用为每个组生成标头数据并且除了组中仅包括零的情况之外为每个组生成主体数据的编码方法编码数据项组(例如二进制数)。在本文所述的实例中,每个组的标头数据包括固定数量的比特(例如每个组为h比特,其中h是固定的),而不同组的主体数据大小可以不同(例如每个组的主体数据为b比特,其中b是可变的),并且在极端情况下,组可能没有主体数据(例如b=0)。如果每个输入数据项包括n比特并且每个组包括n个数,则组的输入数据(即未压缩数据)包括n*n比特,而该组的压缩数据包括h b比特,并且如果压缩成功,(h b)≤(n*n)。与任何其他数据压缩方法一样,可能存在一些不能压缩的情况(在这种情况下,(h b)可大于(n*n)。在一些实例中,可以识别这些情况并且以其原始格式存储数据项。或者,由于当在多个组中(例如在卷积nn或其他类型的nn内的层的权重中)查看时仍然能实现压缩(平均而言),因此可以适应罕见隔离组中的压缩不足。组的主体数据包括组中每个数字的主体数据的相同比特数b比特(其中b≤n且b=b*n),但主体比特数可以在组之间有所不同,并且如上详述,在极端情况下,特定组可能没有主体比特(例如b=b=0)。本文所述的数据压缩方法还包括将组的压缩主体数据打包到数据块的主体数据字段中。在该实例中,组的主体数据字段包括组中每个数据项的主体数据的交错比特。例如,主体数据字段包括该组的每个数据项的主体数据的最低有效比特(lsb),随后是该组的每个数据项的主体数据的下一最低有效比特,以此类推,直到所有主体比特都被打包到主体数据字段中。在各种实例中,数据块包括多个组中每个组的主体数据字段,并且标头比特可包括在单独的数据块(其包括多个组中的每个组的标头比特)中。或者,数据块可包括同一组的主体数据字段和标头比特(例如交替的标头和主体数据字段或一组标头,后接一组对应的主体数据字段)。

虽然不同于直觉,但通过在将组的压缩数据打包到数据块中时如本文所述交错主体比特,会使得解压缩更有效且更简单。具体地讲,对于任何b值,解压缩任何权重所需的主体比特(b比特,其中b在组之间变化)处于压缩数据块中的相同位置。例如,如果字0的比特0位于位置x处,则字0的比特1位于位置x n处,字0的比特2位于位置x 2n处等,或者更一般地,字k的比特j存在于比特位置x (j*n) k处,其中k∈[0,n-1],并且x是主体数据字段的起始位置(即字0的比特0的位置)。数据块内的这些固定位置减少了执行解压缩所需的硬件量(例如不再需要本来将需要的多路复用器,因此解压缩硬件更小且功耗更少)。

图1a是改进的数据压缩方法的流程图,并且图1b是对应的数据解压缩方法的流程图。如上所述,这些方法可用于神经网络(例如卷积nn)的权重阵列或任何其他数据,包括其他多维数据阵列。在数据包括神经网络(例如卷积nn)的权重阵列的情况下,被压缩的数据可以是权重的整体(例如在其处于定点格式的情况下),或者在权重处于浮点格式且所有权重具有相同指数的情况下,被压缩的数据可以是权重的n比特尾数。在以下描述中对“重量”的任何引用可以指整个权重或其中权重具有共同指数的权重的尾数。

如图1a所示,数据压缩方法包括接收输入数据(框102),例如,卷积nn的权重、图像数据或其他多维数据(例如,如图9中以图形方式所示)。输入数据可被接收(在框102中)到数据块中或者作为数据项的输入流。如下所述,数据压缩方法对来自输入数据的数据项组进行操作。在一些实例中,可以预处理输入数据(框103),并且这在下面参考图8a至图8c更详细地描述。在实施的情况下,该预处理对多个数据项进行操作,例如对所有输入数据或对输入数据的子集(例如,输入数据块或组,其中输入数据块可以与数据项组相同或不同)。

然后使用为输入数据项组(例如二进制数)生成该组的标头并且在大多数情况下为每个数据项生成主体数据的方法对输入数据(即预处理的输入数据或原始输入数据)进行编码(框104),但在所有数据项都为零的极端情况下,将没有主体数据。编码对数据项组进行操作,但应当理解,在各种实例中,可以并行编码多个数据项组。如上所述,对于所有组,标头具有固定大小(例如每个组为h比特,其中h是固定的),并且对于组内的所有数据项,每个数据项的主体数据是相同的(例如每个数据项的主体数据为b比特,其中b≥0),但可能在组之间不同(例如b在组内是固定的,但在组之间不固定)。标头包括每个数据项的主体部分的大小的指示(例如,b的值),并且在一些实例中,标头可以指示主体部分的大小为零(b=0),在这种情况下,组中的数据项没有主体部分,因此该组没有主体数据字段。在编码数据项组(在框104中)之后,通过交错组中每个数据项的主体比特,将组的主体比特打包到数据块的主体数据字段中(框106,如下文参考图2所述)。然后存储或以其他方式输出所得的主体数据块(框108),其可包括多个组的主体数据字段。标头比特可打包到单独的数据块中(例如,打包到该组的标头字段中),然后存储或以其他方式输出所得的标头数据块(框109),该标头数据块可包括多个组的标头字段。当存储数据块(在框108和109中)时,它们可以是字节对齐的,而不是必须与先前存储的数据块相邻地存储。考虑到数据块的大小在数据项组之间变化,这简化了寻址。

在各种实例中,数据项的比特深度n(其是固定的)介于4和16之间,并且在各种实例中,n=8或n=16。在各种实例中,组中的数据项数量n为4或8。在n=8的实例中,这可能得到比n=4时更简单的硬件。这是因为随着n增加,多路复用逻辑变得不那么复杂,因为主体数据块内的新主体数据字段的可能起始位置减小。例如,如果n=4,则保证每个组在每个第4比特开始,并且不能在其间任何比特位置开始,而如果n=8,则每个组只能从每个第8比特开始,这将从多路复用树中移除层,因为该树不需要选择任何中间值的能力。相反,通过使用较小的n值(即,组中的数据项较少),可以增加可实现的压缩量(即,可以减小主体部分大小);然而,编码的数据项组的数量以及因此标头字段的数量增加,并且这可能超过由于较小的主体数据字段而实现的任何益处。因此,在决定待使用的n值时需要考虑权衡。

图2是示出图1a中针对n=8(即每组n个数据项)的编码和交错操作(框104和106)的实例的示意图。如图2所示,来自输入数据的数据项组202包括8个数据项(n=8)204。编码操作(在框104中)从8个数据项生成该组的一个标头206(包括h比特),并且如果b>0,则为该组中的每个数据项生成一个主体部分208(如上所述,如果b=0,那么组中的数据项没有主体部分)。标头206包括每个数据项的主体部分208的大小的指示(例如,该指示可以表示b的值,或者在一些实例中,该指示可以表示b的值,其中b的值可以容易地由b确定,因为b=b/n)。每个主体部分208包括b比特,并且在图2所示的实例中,b=8。如果存在主体部分(即b>0),则交错每个数据项的主体数据210的比特(在框106中)。如图2所示,交错通过首先从每个主体部分208添加一个比特,然后从每个主体部分添加下一比特,以此类推,从而形成主体数据字段212。在所示的实例中,首先添加每个数据项的主体数据的最低有效比特(lsb)(比特a0、b0、c0、d0、e0、f0、g0、h0),后接该组的每个数据项的主体数据的下一最低有效比特(比特a1、b1、c1、d1、e1、f1、g1、h1),以此类推,直到所有主体比特都被打包到主体数据字段中。如图2所示,主体数据字段中的最后一个比特是该组中最后一个数据项的主体数据的最高有效比特(msb)(比特h7)。在其他实例中,可以首先打包msb(比特a7、b7、c7、d7、e7、f7、g7、h7),接着打包下一最高有效比特,以此类推,直到主体数据210的所有比特被打包到主体数据字段212中。在通过交错生成主体数据字段212(在框106中)之后,将主体数据字段打包到主体数据块214中,并将标头206打包到标头数据块216中。

通过将标头和主体数据字段存储在不同的数据块216、214中,使得解压缩操作不那么复杂。在标头数据块内,每个标头的开始位置是固定的(因为所有组的标头大小是相同的),因此可以容易地读取标头以确定主体数据块214内每个主体数据字段212的起始位置的偏移。

在各种实例中,数据块可包括k个标头(即,k个组的标头206),后接相应的k个主体数据字段,而不是将标头和主体数据字段存储在单独的数据块中。通过选择k使得k*h具有与主体数据字段相同的比特对齐特性,例如k*h=0modn,所得数据块内的比特对齐也降低了解压缩操作的复杂性。

虽然上面的描述涉及从组中的每个数据项的主体数据的lsb开始交错比特,但在其他实例中,交错也可以从组中的每个数据项的主体数据的msb开始。是从lsb还是msb开始的选择取决于所用的编码方案(在框104中)。在使用下文参考图4描述的编码方案的情况下,从lsb开始是最合适的。然而,如果编码方案是移除一个或多个lsb的有损压缩方案,则可以替代地使用从主体数据的msb开始的交错。类似地,如果解码方案使用在线算术(而不是二进制乘法器和加法器,下面描述的实例就是这种情况),则可以使用从msb开始的交错,因为在线算术执行从msb开始的计算。

对主体比特执行的交错(在框106中)降低了解压缩操作的复杂性,并且这可以参考图1b和图3进行描述。

图1b是数据解压缩方法的流程图,该数据解压缩方法对应于图1a所示且如上所述的数据压缩方法。如图1b所示,该方法包括接收编码数据,其中,如上所述,通过表示具有标头且没有或具有一个或多个主体数据字段的数据项组来编码原始项。在各种实例中,接收此数据可包括接收标头数据块216(框110)和主体数据块214(框111)。这些可以例如作为两个并行流接收,并且可以独立地读取和缓冲(框112和114)。或者,可以一起接收标头数据和主体数据(例如,在数据存储在相同数据块中的情况下,如上所述)。

作为解码操作的一部分(框116),处理组的标头,这指示解码数据项组所需的主体数据量(即组的主体数据字段的大小,b=b*n)。然后可以从(主体数据的)缓冲区中提取相应的数据量,并且作为固定比特位置的结果(由于交错操作,如上所述),可以使用固定方案对比特进行混洗(不管b的值如何),为组中的每个数据项重新创建原始主体部分,而不需要任何多路复用器逻辑。重新创建主体部分之后,对主体部分解码。

不管组中每个数据项的主体比特数如何(即,不管b的值如何,b值可以在组之间变化),针对两个大小不同的主体数据字段302(b=5)、304(b=3),主体数据字段中的比特位置与原始数据项中的相应比特位置之间的固定关系以图形方式示于图3中,并且在该实例中,为了降低图的复杂性,组中的数据项数量为四(n=4)。如图3所示,不管主体数据字段的大小(以及因此每个主体部分中的比特数b)如何,主体数据字段302、304中的前n个(即4个)比特包括每个主体部分的单个比特,表示为a'-d'。在所示实例中,前n个比特包括每个主体部分的lsb。主体数据字段302、304中的接下来n个比特包括每个主体部分的下一个比特,再次与主体数据字段的大小无关。因此,通过依次读取各自包括n比特的连续部分310-312并且每个部分一个比特地构建主体部分,直到达到在主体数据字段302、304中没有其他比特的点(如从缓冲区提取),并且在该阶段,主体部分a’-d’的所有比特已被识别和去交错。

一旦生成了解码数据块(在框116中),就有可选的后处理操作(框117),该后处理操作是压缩方法(如图1a所示)中的可选预处理操作(框103)的反转。然后输出处于其原始或后处理形式的解码数据(框118)。在各种实例中,可以立即使用解码数据。在各种实例中,解码数据因为其大尺寸可以不被缓冲或存储在高速缓存中,而是每次使用数据项时可以执行解压缩。然而,在一些其他实例中,可将至少一些解码数据存储在例如高速缓存中。

编码操作(在框104中)可以使用为数据项组生成固定大小的标头206并为该组中的每个数据项生成主体部分的任何合适的编码方案,其中对于组中的所有数据项,主体部分的大小是相同的,但对于其他数据项组可能不同。这种编码方案的示例示于图4中。

图4是对数据项组进行操作的示例性编码方法的流程图,并且该方法可以参考图5所示的实例进行描述。编码方法接收数据项组502(框402),例如8个数据项504(n=8),表示为a-h,如图5所示。在图5所示的实例中,每个数据项504包括8比特(n=8)。然后通过识别数据项组中的最高有效前导一来识别主体部分的最佳大小(即b的最佳值bopt)(框404)。例如,可通过确定每个数据项中的前导一的比特位置(其中比特位置可以由比特索引0-7标识,如图5所示),并比较这些值以识别最高比特索引,从而识别最高有效前导一。在lsb具有零比特索引的实例中(如图5所示),主体部分的最佳大小比最高比特索引多一。或者,可以任何其他方式识别数据项组中最高有效前导一的比特位置(在框404中)。在图5所示的实例中,数据项a在比特位置4中具有前导一,数据项e和h也是如此。该组中的所有其他数据项在较低比特位置(即,较低有效比特位置)中具有它们的前导一。因此,在图5所示的实例中,最佳主体部分大小为5比特(bopt=5)。如果所有数据项仅包括零,则最佳主体部分大小也为零(bopt=0)。

识别出最佳主体部分大小(在框404中)之后并且在其中从零到n的所有主体部分大小(即n 1个大小)可以在标头的h比特内编码的实例中,该方法可通过以下方式继续:生成包括对所识别的最佳主体部分大小进行编码的比特序列的标头(框408),并通过从数据项中移除无、一个或多个前导零来截断每个数据项以创建对应的主体部分,直到主体部分具有最佳主体部分大小(即,n-bopt前导零被移除,使得所得的主体部分包括bopt比特)。如果最佳主体部分大小为零(bopt=0),则移除n个前导零并且没有剩余的主体比特。在各种实例中,查找表可用于识别用于特定主体部位大小的比特序列,或者主体部分大小可以作为二进制数包括在标头中。

然而,在各种实例中,标头的大小(即标头中的比特数h)可能不足以识别所有可能的主体部分大小,即n 1个大小。具体地讲,这可能发生在输入数据的比特深度(即n的值)是2的幂的情况下。参考图5中的实例,由于n=8(即,主体部分大小为0、1、2、3、4、5、6、7、8),因此有九个可能的主体部分大小,并且如果标头仅包括三个比特(h=3),那么只有八个主体部分大小可以在标头比特中表示(使用二进制值0-7),因此只有八个有效的主体部分大小。在其他实例中,可以认为多于一个主体部分大小是无效的,以便减小整个标头大小。例如,如果n=9且h=3,则可以认为两个主体部分大小是无效的。

在一个或多个主体部分大小无效的实例中,确定最佳主体部分大小(在框404中)之后,该方法检查最佳主体部分大小bopt是否有效(框406)。如果最佳主体部分大小有效(在框406中为“是”),则该方法通过以下方式继续:将该有效最佳主体部分大小编码到标头中(在框408中),并通过从数据项中移除无、一个或多个前导零来截断每个数据项以创建对应的主体部分,直到主体部分具有最佳主体部分大小(即,n-bopt前导零被移除,使得所得的主体部分包括bopt比特)。然而,如果最佳主体部分大小无效(在框406中为“否”),则选择下一个最大有效主体部分大小bvalid(框407)。然后该方法通过以下方式继续:将有效的主体部分大小而不是最佳主体部分大小编码到标头中(在框408中),并通过从数据项中移除无、一个或多个前导零来截断每个数据项以创建对应的主体部分,直到主体部分具有有效的主体部分大小(即,n-bvalid前导零被移除,使得所得的主体部分包括bvalid比特)。同样,可以使用查找表来识别用于所选有效主体部分大小的比特序列(其可以等于最佳主体部分大小bopt或下一个更大的有效主体部分大小bvalid),并且两个示例性查找表示于图6a和图6b中。

在图6a所示的示例性查找表中,被省略且因此被认为无效的主体部分大小为三,并且在图6b所示的示例性查找表中,被省略且因此被认为无效的主体部分大小为五。可基于对输入数据的分析(例如,基于许多或所有数据项组)来选择被认为无效的主体部分大小以用于省略,并且这在图4中被示出为可选的初始分析步骤(框401)。分析(在框401中)基于多个数据项组确定哪个最佳主体部分大小为最小公共大小,然后将标头值分配给省略该最小公共大小的主体部分大小。在输入数据包括神经网络(例如卷积nn)的权重的各种实例中,可以基于对最常用于该层的权重的分析(在框401中),特别是基于nn的特定层的所有权重中(或权重的所有n比特尾数中)的前导一的最小公共位置,针对nn的每个层单独地识别省略的主体部分大小。以这种方式,不同的层可具有被认为无效的不同的主体部分大小。例如,nn的一层可具有三作为无效的主体部分大小(如图6a中所示),并且相同nn的另一层可具有五作为无效的主体部分大小(如图6b中所示)。如上所述,在各种实例中,可能存在多于一个无效主体部分大小,并且可以基于输入数据(即数据项组的最小公共最佳主体大小)中、例如nn的特定层的所有权重(或权重的尾数)中的前导一的最小公共位置,通过对nn的每个层独立执行的分析来选择这些多个无效主体部分大小。

再次参考图5所示的示例性数据项组502,如上详述,最佳主体部分大小为5比特(bopt=5)。如果使用图6a的查找表,这是有效的主体部分大小(在框406中为“是”),并且比特序列“100”包括在标头内(在框408中)。另外,通过移除三个前导零来截断每个数据项(在框410中)以形成对应的主体部分。然而,如果使用图6b的查找表,则5比特的主体部分大小无效(在框406中为“否”),因此将使用下一个最大有效主体部分大小,即主体部分大小为六。在该实例中,比特序列“101”包括在标头内(在框408中),并且通过移除两个前导零来截断每个数据项(在框410中)以形成对应的主体部分。这意味着由于未使用最佳主体部分大小,在所有主体部分中存在前导零。

在这些实例的第一个中,在使用图6a的表的情况下,所得的编码数据块包括3 (8*5)=43比特,即3个标头比特和40个主体比特(每个主体部分为5)。相反,在使用图6b的表的情况下,所得的编码数据块包括3 (8*6)=51比特,即3个标头比特和48个主体比特(每个主体部分为6)。假设许多数据块被编码并且最佳主体部分大小很少无效,那么与将每个标头增加一比特的替代解决方案相比,在极少数情况下(当最佳主体部分大小无效时)包括在主体部分中的附加n比特(全部为前导零)仍将产生较小的编码数据总量,使得可以在标头内有效地编码所有最佳主体部分大小。

在使用图4的编码方法的实例中,可以在图1b的数据解压缩方法(在框116中)中使用的对应解码方法,包括固定模式去交错,可以如图7a所示。如图7a所示,该方法包括处理标头以确定主体数据字段的大小b*n(框702)并且从主体数据缓冲区读取相应数据量(框704)。使用固定关系(如上所述),可通过从仅包含零的数据项集(即每个数据项中的n个零)开始并且用来自主体数据字段的适当比特覆盖每个数据项中的零(从lsb开始)来生成数据项(框706),并且一旦使用从缓冲区读取的所有比特(在框704中)来覆盖零(在框706中),就会输出所得的解码数据项(框708)。

图7a的解码方法以图形方式示于图7b中,后者是图3(如上所述)的变型,并且不管组中每个数据项的主体比特数如何(即,不管b的值如何,b值可以在组之间变化),针对两个大小不同的主体数据字段302(b=5)、304(b=3),示出了主体数据字段中的比特位置与原始数据项中的相应比特位置之间的固定关系。在该实例中,为了降低图的复杂性,组中的数据项数量为四(n=4),并且每个解码数据项中的比特数为六(n=6)。如图7b所示,不管主体数据字段的大小(以及因此每个主体部分中的比特数b)如何,主体数据字段302、304中的前n个(即4个)比特包括每个数据项的单个比特。在所示的实例中,前n个比特包括每个数据项的lsb,并且这些用于覆盖最初占用那些lsb的零。主体数据字段302、304中的接下来n个比特包括每个数据项的下一个比特,再次与主体数据字段的大小无关,并且这些比特用于覆盖每个数据项的下一个比特。因此,通过依次读取各自包括n比特的连续部分310-312并覆盖零,从缓冲区读取的数据的每n比特部分一个零(对于每个数据项),直到使用了已读取的所有比特,从而重新创建数据项(即去交错和解码)。如图7b所示,通过用零预先填充每个数据项中的每个比特(鉴于每个数据项中的比特数n是固定的),然后用来自主体数据的值替换这些零,则不需要首先重新创建主体部分,然后在单独的操作中,用必要数量的前导零(如基于组的标头确定)填充每个主体部分。

图7a的方法的替代方案示于图7c中,并且可以参考图7d所示的实例进行描述(对于b=3,n=4,n=6)。如图7c所示,处理标头数据以确定主体数据字段的大小b*n(框702),然后将其用于从主体数据缓冲区读取相应数据量(框704)并生成主体数据掩模710(框705)。主体数据掩模710可包括可以存储有效数据的位置中的一和所有其他比特位置中的零,并且实例示于图7d中。使用固定关系提取主体比特(如上所述),可以使用主体数据掩模710和主体比特生成数据项(框707)。在各种实例中,and门可用于组合主体比特和主体掩模比特。如前所述,输出所得的解码数据项(框708)。

上文参考图4、图5、图6a和图6b描述的编码方案得到高水平的压缩,其中数据项的值很小(例如接近零),并且每个数据项的二进制表示在前导一的位置方面是相似的。例如,如果数据项组为:0100000、00000101、00000100、00000010,那么虽然可以使用7比特的主体部分大小,但所得的压缩量远小于数据项组为0000111、00000101、00000100、00000010且可以使用3比特的主体部分大小的情况。

在各种实例中,例如在数据项是nn的权重(或这些权重的尾数)的情况下,数据项的分布可以零为中心(或接近于零),如图8a所示。该分布可以例如是高斯分布或拉普拉斯分布。在此类实例中,如果使用二进制补码表示数据项,则表示负值的二进制字符串都具有一个msb,因此上述编码方法不能移除任何前导零(例如,bopt=n)并且没有压缩。为了改进压缩或启用压缩(例如,在二进制补码表示的情况下),对数据项进行预处理(在图1a的框103中)。预处理操作包括折叠和交错数据项,使得它们都是正的,并且分布是几乎连续减小概率的曲线,如图8b所示。折叠和交错操作可以用数学方式如下写入:

其中“coeff”为原始输入数据项,“symbol”为预处理的数据项,求和系数以二进制补码格式表示,乘以二可通过左移一个比特位置来实现,因此这可以在硬件(或软件)中实现为:

symbol:=isignbitset?(((notcoeff)<<1)or1):coeff<<1;

symbol:=isignbitset?not(coeff<<1):coeff<<1;

其中not和or是比特运算符,<<1表示左移一个比特位置。这实际上会将数据项转换为符号数值格式,但将该符号比特作为lsb。因此应当理解,如果数据项最初处于符号数值格式,则可以修改预处理操作,使得它包括将符号比特从msb移动到lsb。

在各种实例中,例如对于androidnn格式化的权重,数据项可以不以零为中心(或接近零),并且示例性分布示于图8c中。在此类实例中,在交错和折叠之前,作为预处理操作的一部分从输入数据项中减去偏移(在框103中),使得仍然实现类似于图8b所示的分布。折叠和交错操作的实例可以如下写入:

offset_coeff=mod(coeff-offset,2n)

symbol:=isignbitset?(((notoffset_coef[)<<1)or1):offset_coeff<<1;

其中函数“mod”在除法向负无穷大舍入时计算除法的余数,并且在各种实例中可以等同于丢弃msb。如上所述,乘以2可通过左移一个比特位置来实现。

在将预处理操作应用于原始输入数据项(在图1a的框103中)的情况下,在输出解码数据项之前将逆操作应用于这些解码数据项(在图1b的框117中)。因此,该后处理操作(在框117中)可包括展开和去交错操作以及可选地添加偏移(例如,以便将分布从图8b所示重置为例如如图8a或图8c所示的原始分布)。参考上文给出的两个实例,其中分布以零为中心,因此不涉及偏移:

并且在分布偏移的情况下:

coeff=mod(offsetcoeff offset,2n)

其中在这两种情况下,可通过右移一个比特位置来执行二等分操作。偏移可以与编码数据分开传送(例如,在命令流中)或以任何其他方式传送(例如,经由寄存器接口)。

在上述实例中,对于所有组,标头具有固定大小(例如,每个组的h比特,其中h是固定的)。作为整个压缩数据大小的一部分的标头数据大小很小(例如,每个输入数据值的半个比特),因此不使用标头比特的压缩。然而,在上述实例的变型中,可变长度编码(例如,霍夫曼编码)可用于标头数据。这可以例如在标头数据被偏置时使用。

可通过增加仅包括零的数据项的数量来进一步改进可以使用本文所述的方法实现的数据压缩。在数据项为nn权重的实例中.这可以通过在训练nn时使用修剪来实现。

可通过对相关数据项(即可能具有相似值并因此具有相似位置的前导一的数据项)进行分组来进一步改进可以使用本文所述的方法实现的数据压缩。例如,通过将在比特位置6和7中具有前导一的n个数据项分组,并且将在比特位置3和4中具有前导一的n个数据项分组,可以实现比包括在比特位置3、4、6和7中具有前导一的数据项的混合物的数据项组更多的压缩。这可以例如通过改变图9中以图形方式示出的多维输入数据的分组方式来实现。在数据项为nn权重的实例中,这可以通过对与同一平面相关的权重(例如,不同x、y值但相同z值的权重902)进行分组而不是对与不同平面相关的权重(例如,相同x、y值但不同z值的权重904)进行分组来实现。

本文所述的数据压缩和解压缩方法可以在软件中、在硬件中或在软件和硬件的组合中实现。在各种实例中,本文所述的数据压缩方法可以在将nn映射到特定硬件(或特定硬件类型)时在软件中实现,并且这通常是一次性操作。相反,本文所述的数据解压缩方法可以在运行时实现,并且可以多次执行,例如每当使用数据项时。

图10示出了被布置为实现图1a的方法的数据压缩设备1000的示意图。如图10所示,数据压缩设备1000包括输入装置1001、编码模块1002、交错模块1004、存储器接口1006和输出装置1007。设备1000还可包括预处理模块1008。编码模块1002被布置为使用任何合适的编码方法来执行数据项的编码(如框104中所示),所述编码方法为数据项组生成固定大小的标头,并且为组中的每个数据项生成主体部分(除非主体部分大小b为零)。在各种实例中,编码模块1002被布置为实现图4的方法。交错模块1004被布置为将主体比特交错到主体数据字段中(如框106中所示),例如,如上文参考图2所述。存储器接口1006被布置为经由输出装置1007输出编码数据,以存储在存储器中(如框108中所示)。如果提供,预处理模块1008被布置为从输入数据项折叠和交错,并可选地减去偏移(在框103中),如上文参考图8a至图8c所述。在各种实例中,编码模块1002、交错模块1004以及预处理模块1008(如果提供)可以在软件中实现。

图11示出了被布置为实现图1b的方法的数据解压缩设备1000的示意图。数据解压缩设备1100包括多个输入装置1101-1103和多个读取模块1104-1106,每个读取模块被布置为读取不同类型的数据:标头数据(在标头读取模块1105中经由输入装置1102读取)、主体数据(在主体读取模块1106中经由输入装置1103读取),以及在nn中使用偏置的实例中的偏置(在偏置读取模块1104中经由输入装置1101读取)。这些读取模块1104-1106各自包括缓冲区(例如,一个或多个fifo)和请求器(可实现为线性计数器),只要在对应缓冲区中具有所请求数据的空间,所述请求器以线性顺序从存储器(图11中未示出)请求数据。可以实现优先级排序方案以在请求器之间进行仲裁,使得例如将优先级给予偏置请求,然后给予标头请求,主体数据请求具有最低优先级。该优先级与所需数据量的顺序相反,因此偏置永远不会停止(因为永远不会有足够的数据),并且偏置读取模块1104和标头读取模块1105中的fifo可以更窄。如上所述(参考图1b),解码模块1108从标头和主体读取模块1105、1106中的缓冲区读取数据,执行固定模式比特混洗(如上文参考图3或图7所述),并且生成解码数据项,然后将解码数据项从解压缩设备输出(经由输出装置1112),或者在使用后处理的情况下,首先在后处理模块1110中对解码数据项进行后处理,然后再输出(经由输出装置1111)。

图12示出了计算机系统,其中可以实现本文所述的数据压缩或解压缩的方法。计算机系统包括cpu1202、gpu1204、存储器1206和其他设备1214,例如显示器1216、扬声器1218和摄像头1220。计算机系统的部件可以通过通信总线1220彼此进行通信。该系统还包括神经网络加速器1224,该神经网络加速器被布置为实现如本文所述的数据压缩和/或解压缩的方法。虽然该神经网络加速器1224在图12中被示出为单独的硬件单元,但在其他实例中,它可以是gpu1204的一部分并且/或者可以是与cpu1202相同的soc(片上系统)的一部分。

图10至图12的设备被示出为包括多个功能块。这仅是示意性的,并不希望限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当理解,在本文中被描述为由模块形成的中间值不需要由模块在任何时间点物理地生成,并且可以仅仅表示方便地描述由设备在其输入装置与输出装置之间执行的处理的逻辑值。

本文所述的数据压缩和数据解压缩设备可以在集成电路上的硬件中实现。本文所述的数据压缩和数据解压缩设备可被配置为执行本文所述的任何方法。通常,上文描述的功能、方法、技术或部件中的任一个可实施于软件、固件、硬件(例如,固定逻辑电路)或其任何组合中。本文可以使用术语“模块”、“功能性”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实现方式的情况下,模块、功能性、部件、元件、单元、块或逻辑表示程序代码,该程序代码当在处理器上执行时执行指定任务。本文中描述的算法和方法可以由执行代码的一个或多个处理器执行,所述代码致使处理器执行所述算法/方法。计算机可读存储介质的实例包含随机存取存储器(ram)、只读存储器(rom)、光盘、闪存、硬盘存储器以及可以使用磁性、光学和其他技术来存储指令或其他数据且可由机器存取的其他存储器装置。

如本文使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、限定集成电路的代码(例如硬件描述语言或网表),以及用例如c、java或opencl之类的编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库致使支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。

处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,例如cpu、gpu、片上系统、状态机、媒体处理器、专用集成电路(asic)、可编程逻辑阵列、现场可编程门阵列(fpga)、物理处理单元(ppu)、无线电处理单元(rpu)、数字信号处理器(dsp)、通用处理器(例如通用gpu)、微处理器、旨在加速cpu之外的任务的任何处理单元等。计算机或计算机系统可包括一个或多个处理器。本领域技术人员将认识到,这种处理能力被结合到许多不同的设备中,因此术语“计算机”包括机顶盒、媒体播放器、数字收音机、pc、服务器、移动电话、个人数字助理和许多其他设备。

本发明还意图涵盖限定如本文描述的硬件配置的软件,例如hdl(硬件描述语言)软件,用于设计集成电路或用于配置可编程芯片以执行所需功能。也就是说,可以提供一种计算机可读存储介质,其上编码有集成电路定义数据集形式的计算机可读程序代码,当被在集成电路制造系统中处理(即运行)时,这种集成电路定义数据集将该系统配置为制造被配置为执行本文所述的任何方法的数据压缩或解压缩设备,或者制造包括本文所述的任何设备的计算装置。集成电路定义数据集可以是例如集成电路描述。

因此,可以提供一种在集成电路制造系统中制造如本文所述的数据压缩或解压缩设备的方法。此外,还可以提供集成电路定义数据集,当在集成电路制造系统中被处理时,该集成电路定义数据集使得制造数据压缩或解压缩设备的方法被执行。

集成电路定义数据集可呈计算机代码形式,例如作为网表、用于配置可编程芯片的代码,作为在任何层级限定集成电路的硬件描述语言,包含作为寄存器传送级(rtl)代码、作为例如verilog或vhdl等高级电路表示,和作为例如oasis(rtm)和gdsii等低级电路表示。在逻辑上限定集成电路的更高级表示(例如rtl)可以在配置为在软件环境的上下文中产生集成电路的制造定义的计算机系统处处理,所述软件环境包括电路元件的定义和用于组合那些元件以便产生由所述表示如此限定的集成电路的制造定义的规则。如通常软件在计算机系统上执行以便限定机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为用于产生集成电路的制造定义,以执行限定集成电路以便产生所述集成电路的制造定义的代码。

现在将参考图13描述在集成电路制造系统中处理集成电路定义数据集以便将该系统配置为制造数据压缩或解压缩设备的实例。

图13示出了集成电路(ic)制造系统1002的实例,其被配置为制造如本文任一实例中所述的数据压缩或解压缩设备。具体地,ic制造系统1302包括布局处理系统1304和集成电路生成系统1306。ic制造系统1302被配置为接收ic定义数据集(例如,定义如本文的任何实例中描述的数据压缩或解压缩设备),处理ic定义数据集,并根据ic定义数据集来生成ic(例如,其体现如本文任何实例中所述的数据压缩或解压缩设备)。通过对ic定义数据集的处理,将ic制造系统1302配置为制造体现如本文任何实例中描述的数据压缩或解压缩设备的集成电路。

布局处理系统1304被配置为接收和处理ic定义数据集以确定电路布局。根据ic定义数据集来确定电路布局的方法在此项技术中是已知的,并且例如可以涉及合成rtl代码以确定要产生的电路的门级表示,例如,就逻辑组件(例如,nand、nor、and、or、mux和flip-flop组件)而言。通过确定逻辑组件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以优化电路布局。当布局处理系统1304确定了电路布局时,它可以将电路布局定义输出到ic生成系统1306。电路布局定义可以是例如电路布局描述。

如本领域已知的,ic生成系统1306根据电路布局定义来生成ic。例如,ic生成系统1306可以实现生成ic的半导体器件制造工艺,其可以涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来产生ic。替代性地,提供给ic生成系统1306的电路布局定义可以是计算机可读代码的形式,ic生成系统1306可以使用该计算机可读代码来形成用于生成ic的合适掩模。

由ic制造系统1302执行的不同过程可以全部在一个位置例如由一方来实现。替代性地,ic制造系统1302可以是分布式系统,使得一些过程可以在不同位置执行,并且可以由不同的方来执行。例如,以下阶段中一些可以在不同的位置和/或由不同的方来执行:(i)合成表示ic定义数据集的rtl代码,以形成要产生的电路的门级表示,(ii)基于门级表示来产生电路布局,(iii)根据电路布局来形成掩模,以及(iv)使用掩模来制造集成电路。

在其他实例中,通过在集成电路制造系统处对集成电路定义数据集的处理,可以将系统配置为制造数据压缩或解压缩设备,而不对ic定义数据集进行处理以便确定电路布局。例如,集成电路定义数据集可以限定可重新配置的处理器(例如,fpga)的配置,并且对所述数据集进行的处理可以将ic制造系统配置为产生具有所述所限定配置的可重新配置的处理器(例如,通过将配置数据加载到fpga)。

在一些实施方案中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以致使集成电路制造系统产生如本文描述的装置。例如,通过集成电路制造定义数据集,以上面参考图13描述的方式对集成电路制造系统的配置,可以制造出如本文所述的设备。

在一些实例中,集成电路定义数据集可以包含在数据集处限定的硬件上运行的软件,或者与在数据集处限定的硬件组合运行的软件。在图13所示的实例中,ic生成系统还可以由集成电路定义数据集进一步配置,以在制造集成电路时根据在集成电路定义数据集中定义的程序代码将固件加载到所述集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。

本领域技术人员将认识到用来存储程序指令的存储装置可分布在网络上。例如,远程计算机可以将所描述的过程的实例存储为软件。本地或终端计算机可以访问远程计算机,并下载软件的一部分或全部以运行程序。或者,本地计算机可以根据需要下载软件的片段,或者在本地终端处执行一些软件指令,而在远程计算机(或计算机网络)处执行另一些软件指令。本领域技术人员还将认识到通过利用本领域技术人员已知的常规技术,软件指令的全部或一部分可以由诸如dsp、可编程逻辑阵列等的专用电路执行。

本文描述的方法可以由配置有存储在有形存储介质上的机器可读形式的软件的计算机执行,例如,软件采用包括用于将计算机配置为执行所述方法的组成部分的计算机可读程序代码的计算机程序的形式,或采用包括计算机程序代码装置的计算机程序的形式,当程序在计算机上运行时以及在计算机程序可以在计算机可读存储介质上实现的情况下,所述代码装置适于执行本文所述任何方法的所有步骤。有形(或非暂态)存储介质的实例包括磁盘、拇指驱动器、存储卡等,并且不包括传播信号。软件可适于在并行处理器或串行处理器上执行,使得所述方法步骤可以任何适当顺序执行或同时执行。

本文描述的硬件部件可以由其上编码有计算机可读程序代码的非暂时性计算机可读存储介质生成。

存储用于实现所公开方面的机器可执行数据的存储器可以是非暂态介质。非暂态介质可以是易失性或非易失性的。易失性非暂态介质的实例包括基于半导体的存储器,诸如sram或dram。可用于实现非易失性存储器的技术的实例包括光学和磁存储器技术、闪存、相变存储器、电阻ram。

对“逻辑”的特定引用是指执行一个或多个功能的结构。逻辑的实例包括被布置成执行这些功能的电路。例如,这种电路可以包括在制造过程中可用的晶体管和/或其他硬件元件。这种晶体管和/或其他元件可用于形成实现和/或包含存储器的电路或结构,例如寄存器、触发器或锁存器,逻辑运算器,例如布尔运算,数学运算器,例如加法器、乘法器,或者,移位器和互连,作为示例。这些元件可以作为定制电路或标准单元库、宏来提供或在其他抽象级别提供。这些元件可以特定布置互连。逻辑可以包括具有固定功能的电路,并且电路可以被编程为执行一个或多个功能;可以从固件或软件更新或控制机制提供这样的编程。被识别为执行一个功能的逻辑还可以包括实现组成性功能或子过程的逻辑。在一个实例中,硬件逻辑具有实现一个或多个固定功能操作,状态机或过程的电路。

与已知的实施方案相比,在本申请中阐述的概念在装置、设备、模块和/或系统中(以及在本文实施的方法中)的实施可以引起性能改进。性能改进可包含计算性能提高、等待时间缩短、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如在集成电路中)期间,可以在性能改进与物理实施方案之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方案的性能,但使用更少的硅。例如,这可以通过以串行方式再使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起装置、设备、模块和系统的物理实施方案的改进(例如硅面积减小)的概念可以针对性能提高进行权衡。这例如可以通过在预定义面积预算内制造模块的多个实例来完成。

如对本领域技术人员显而易见的,可以延长或改变本文给出的任何范围或设备值而不丧失所寻求的效果。

应当理解,上述益处和优点可以涉及一个实施方案,或者可以涉及多个实施方案。实施方案不限于解决任何或所有所述问题的那些或具有任何或所有所述益处和优点的那些。

对“一个”项目的任何引用都指的是这些项目中的一个或多个。术语“包括”在本文中用于表示包括所识别的方法块或元件,但是这些块或元件不包括排他列表,并且设备可包括附加的块或元件,并且方法可包括附加的操作或元件。此外,并不暗示块、元件和操作本身是关闭的。

本文所述的方法的步骤可以任何合适的顺序或在适当时被同时执行。图中方框之间的箭头示出了方法步骤的一个示例序列,但并不旨在排除其他序列或并行执行多个步骤。另外,在不脱离本文描述的主题的实质和范围的情况下,可以从任何方法中删除单个块。上述任何实例的一些方面可以与所描述的任何其他实例的一些方面组合以形成进一步的实例而不会丧失所寻求的效果。在图的元件被示出通过箭头连接的情况下,应当理解,这些箭头仅示出了元件之间的通信(包括数据和控制消息)的一个示例性流向。元件之间的流向可以是任一方向或两个方向。

申请人据此独立地公开了本文描述的每个单独的特征以及两个或两个以上此类特征的任意组合,到达的程度使得此类特征或组合能够根据所属领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文公开的任何问题。鉴于前文描述,可在本发明的范围内进行各种修改对于所属领域的技术人员来说是显而易见的。


技术特征:

1.一种数据压缩方法,包括:

接收多个数据项;

通过为每个数据项组生成包括h比特的标头数据和各自包括b比特的多个主体部分来编码所述数据项组,并且每个所述主体部分对应于所述组中的数据项,其中b在组内是固定的并且其中组的所述标头数据包括该组的所述主体部分的b的指示;

通过交错来自所述主体部分的对应于所述组中数据项的比特,为b>0的每个组生成所述组的主体数据字段;以及

存储包括所述标头数据和所述主体数据字段的一个或多个编码数据块。

2.根据权利要求1所述的方法,其中对于所有组,h是固定的,并且b在组之间不是固定的。

3.根据权利要求1所述的方法,其中存储一个或多个编码数据块包括:

存储包括多个组的主体数据字段的主体数据块;以及

存储包括所述多个组的标头数据的标头数据块。

4.根据权利要求1所述的方法,其中交错来自所述主体部分的对应于所述组中数据项的比特包括:

(a)将每个所述主体部分的第一比特插入所述主体数据字段中;

(b)将每个所述主体部分的下一比特插入所述主体数据字段中;以及

(c)重复(b),直到每个所述主体部分的所有比特都插入所述主体数据字段中。

5.根据权利要求4所述的方法,其中将每个所述主体部分的第一比特插入所述主体数据字段中包括将每个所述主体部分的最低有效比特插入所述主体数据字段中,并且其中将每个所述主体部分的下一比特插入所述主体数据字段中包括将每个所述主体部分的下一最低有效比特插入所述主体数据字段中。

6.根据权利要求1所述的方法,其中对于每个所述组,编码数据项组包括:

接收所述数据项组;

通过在所述组中的所有数据项中定位最高有效前导一的比特位置来识别主体部分大小b;

生成包括编码所述主体部分大小的比特序列的所述标头数据;以及

通过从每个数据项中移除无、一个或多个前导零,为所述组中的每个所述数据项生成包括b比特的主体部分。

7.根据权利要求6所述的方法,其中识别主体部分大小还包括:

检查所识别的主体部分大小是否是有效的主体部分大小;以及

响应于确定所识别的主体部分大小不是有效的主体部分大小,将所述主体部分大小更新为下一个最大有效主体部分大小。

8.根据权利要求7所述的方法,还包括,在编码数据项组之前:

分析多个数据项组以生成一组有效的主体部分大小。

9.根据权利要求8所述的方法,其中分析多个数据项组以生成一组有效的主体部分大小包括:

分析所述多个数据项组中的所述数据项,以识别所述多个组中每个组的主体部分大小;

识别所述多个数据项组的一个或多个最小公共主体部分大小;以及

通过从一组所有可能的主体部分大小中移除与所识别的一个或多个最小公共主体部分大小相对应的那些主体部分大小来生成所述一组有效的主体部分大小。

10.根据权利要求1所述的方法,其中所述数据项包括神经网络的权重。

11.根据权利要求10所述的方法,还包括在编码数据项组之前,分析多个数据项组以通过以下方式为所述神经网络中的每个层生成一组有效的主体部分大小:

分析所述层的所有权重,以生成该层的一组有效的主体部分大小。

12.根据权利要求1所述的方法,其中所述数据项具有基本上以零为中心的分布,并且所述方法还包括,在编码数据项组之前,通过将具有负值的所有数据项转换为正值并将所转换的数据项与具有正值的数据项交错来预处理所述组中的所述数据项(103)。

13.根据权利要求1所述的方法,其中所述数据项具有以非零值为中心的分布,并且所述方法还包括,在编码数据项组之前,通过移位所有数据项,使得所移位的分布基本上以零为中心,然后将具有负值的所有移位数据项转换为正值,并将所转换的移位数据项与具有正值的移位数据项交错,从而预处理所述组中的所述数据项。

14.一种数据解压缩方法,包括:

接收一个或多个数据块,所述一个或多个数据块编码一个或多个数据项组;

将标头数据读入第一缓冲区中;

将主体数据读入第二缓冲区中;以及

对于每个所编码的数据项组:

从所述第一缓冲区读取所述组的标头数据,其中数据项组的所述标头数据包括所述数据项组的主体部分大小b的h比特指示,其中b在组内是固定的;

根据所述标头数据确定所述数据项组的所述主体部分大小b;

基于所确定的主体部分大小从所述第二缓冲区读取主体数据字段,所述主体数据字段包括与所述组中的每个所述数据项的一个主体部分交错的主体部分;

对所述主体数据字段进行解码以生成解码数据项,所述解码包括对所述主体部分进行去交错,其中每个所述解码数据项包括n比特,其中n≥b;以及

输出所述解码数据项。

15.根据权利要求14所述的方法,其中对于所有组,h是固定的,并且b在组之间不是固定的。

16.根据权利要求14所述的方法,其中所述主体数据字段包括多个连续部分,每个所述部分包括来自每个主体部分的一个比特,并且其中对所述主体数据字段进行解码包括:

从仅包括零的初始数据项集开始,所述组中的每个数据项为一,读取所述主体数据字段的各部分并且对于所述主体数据字段的每个部分,用所述主体数据字段的所述部分的比特值覆盖每个所述数据项的一个零,以生成所述解码数据项;或者

生成包括与所确定的主体部分大小相对应的比特位置中的一的主体数据掩模,读取所述主体数据字段的各部分并且对于所述主体数据字段的每个部分,将每个所述数据项的所述主体数据掩模中的一个比特与来自所述主体数据字段的所述部分的比特值组合。

17.根据权利要求16所述的方法,其中所述主体数据字段中的所述第一部分包括每个所述主体部分的最低有效比特,后续部分包括每个所述主体部分的下一个最低有效比特,并且所述主体数据字段中的最后部分包括每个所述主体部分的最高有效比特。

18.根据权利要求14所述的方法,还包括,在输所述解码数据项之前,对所述组中的所述解码数据项进行后处理,以将一个或多个所述数据项从正值转换为负值。

19.根据权利要求18所述的方法,其中所述后处理还包括将偏移应用于每个所述数据项。

20.根据权利要求14所述的方法,其中所述数据项包括神经网络的权重。

21.一种数据压缩设备,包括:

用于接收多个数据项的输入装置;

编码模块,所述编码模块被配置为通过为每个数据项组生成包括h比特的标头数据和各自包括b比特的多个主体部分来编码所述数据项组,并且每个所述主体部分对应于所述组中的数据项,其中b在组内是固定的并且其中组的所述标头数据包括该组的所述主体部分的b的指示;

交错模块,所述交错模块被配置为通过交错来自所述主体部分的对应于所述组中数据项的比特,为每个所述组生成主体数据字段;以及

存储器接口,所述存储器接口被配置为,为了存储,输出包括所述标头数据和所述主体数据字段的一个或多个编码数据块。

22.一种数据解压缩设备,包括:

用于接收一个或多个数据块的一个或多个输入装置,所述一个或多个数据块编码一个或多个数据项组;

标头读取模块,所述标头读取模块被配置为将标头数据读入第一缓冲区中;

主体读取模块,所述主体读取模块被配置为将主体数据读入第二缓冲区中;以及

解码模块,所述解码模块被配置为对于每个所述编码数据项组:

从所述第一缓冲区读取所述组的标头数据,其中数据项组的所述标头数据包括所述数据项组的主体部分大小b的h比特指示,其中b在组内是固定的;

根据所述标头数据确定所述数据项组的所述主体部分大小b;

基于所确定的主体部分大小从所述第二缓冲区读取主体数据字段,所述主体数据字段包括与所述组中的每个所述数据项的一个主体部分交错的主体部分;

对所述主体数据字段进行解码,包括对所述主体部分进行去交错,以生成解码数据项,其中每个所述解码数据项包括n比特,其中n≥b;以及

输出所述解码数据项。

23.一种计算机可读存储介质,其上编码有计算机可读代码,所述计算机可读代码被配置为在运行所述代码时使得根据权利要求1至20中任一项所述的方法被执行。

技术总结
描述了数据压缩和解压缩的方法。所述压缩方法包括通过为每个组生成包括h比特的标头数据和各自包括b比特的多个主体部分来编码数据项组,并且每个主体部分对应于所述组中的数据项。对于所有组,h的值可以是固定的,并且b的值在组内是固定的,其中组的所述标头数据包括该组的所述主体部分的b的指示。在各种实例中,b=0,因此没有主体部分。在b不等于零的实例中,通过交错来自所述主体部分的对应于所述组中数据项的比特,为每个组生成主体数据字段。所得的包括标头数据和若存在的主体数据字段的编码数据块可以写入存储器。

技术研发人员:S·菲尼;格雷格·克拉克;艾伦·瓦因斯
受保护的技术使用者:想象技术有限公司
技术研发日:2019.10.16
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-21947.html

最新回复(0)