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

利用计算机存储器中的值相似性的系统、方法和装置

文献发布时间:2024-01-17 01:19:37


利用计算机存储器中的值相似性的系统、方法和装置

技术领域

本主题总体上涉及电子计算机中的存储器中的数据压缩的领域。

背景技术

数据压缩是一种通用的技术,其通过与不太频繁的数据集合相比更高效地对频繁的数据集合进行编码来更高效地存储和传输数据。出于多种原因,通常更高效地存储和传输数据是有意义的。在计算机存储器中,例如保存处理装置操作的数据和计算机指令的存储器,例如在主存储器或高速缓存存储器中,更高效地、比如说K倍存储所述数据是有意义的,因为其然后可以使所述存储器的大小可能减少K倍,使用可能减少K倍的通信容量在一个存储器到另一个存储器之间传输数据,并且使用可能减少K倍的能源消耗来在计算机系统内部或计算机系统之间和/或存储器之间存储和传输所述数据。或者,与没有数据压缩的情况相比,在可用计算机存储器中存储的数据可能多出K倍。这对于在不必添加更多存储器的情况下可能实现高出K倍的计算机性能可能是有意义的,这可能是昂贵的,或者由于资源限制可能不太理想。作为另一个示例,智能手机、平板电脑、膝上型/台式机或机顶盒的尺寸和重量可能受到限制,因为更大或更重的智能手机、平板电脑、膝上型/台式机或机顶盒可能是对最终用户的价值较低的;因此可能会降低此类产品的市场价值。然而,提供更多的存储器容量或更高的存储器通信带宽可能会增加产品的市场价值,因为更多的存储器容量或存储器通信带宽可以带来更高的性能,从而提高产品的实用性。

总而言之,在包括孤立装置或互连装置在内的计算机化产品的总体格局中,数据压缩可能会提高性能、降低能源消耗、增加可用存储器通信带宽或降低存储器消耗的成本和面积。因此,除了这里提到的那些之外,数据压缩在范围广泛的计算机化产品中具有广泛的用途。

现有技术中的压缩存储器系统通常在创建存储页面时通过从磁盘读取它或通过存储器分配来压缩它。可以通过软件例程或硬件加速器使用各种众所周知的方法来完成压缩。当处理器从存储器中请求数据时,通常必须先将数据解压缩,然后再为发出请求的处理器提供服务。由于这样的请求可能会在关键的存储器访问路径上结束,解压缩通常是硬件加速的,以对存储器访问时间施加较小的影响。

为了对存储器访问时间施加较低的影响,同时又能够有效地压缩存储器对象(例如存储器的页面)中的数据,数据通常是逐个数据块压缩的。在这里,一个数据块可以是64字节,尽管它可以更少或更多。数据块可能包括多个值,例如整数或浮点值(有时称为浮点数)或其他数据类型。例如,一个64字节的数据块可能包括16个32位整数或浮点数。

压缩技术可以是无损的或有损的。无损压缩技术保留信息,以便可以在解压缩后完全恢复以无损方式压缩的值。相反,有损压缩技术不会保留所有信息。另一方面,当一个值以有损方式压缩时,它不会在解压后完全恢复。原始值与恢复值之间的差异被称为压缩误差。挑战在于保持该误差有限且低。

在从现有技术已知的称为增量压缩(delta compression)的一族无损压缩技术中,所采用的方法是利用数值上接近的数据值集合中的值相似性。通过选择在数值上接近所述数据值集合的基值,人们只需要跟踪每个单独值与基值之间的差异,称为增量值。

例如,在基增量即时压缩(base-delta-immediate compression,此后称为BDI)中,数据块的基值是在与所述数据块相关联的值中任意选取的。通过跟踪块中的每个值与所述基值之间的差异来压缩数据块。如果数据块内的所有值在数值上都相似,则所述差异将很小。例如,如果数据块包括四个值100、98、102和105,并且选择第一个值(100)作为基值,则差异为0、-2、2和5。

可以通过仅存储差异(此后称为增量值)和基值来更紧凑地存储示例性数据块。在示例中,原始块将需要4x 32=128位存储,而BDI将理想地只需要32+3x 4=44位,假设增量值的范围是[-8,7],产生4位来存储增量值。这导致压缩度(或有时称为比率)为128/44=3倍。

BDI很有吸引力,因为它可以通过硬件加速压缩和解压缩装置来实现,该装置通过简单地从原始值/增量值中减去/添加基值来压缩/解压缩数据块。但是,只有当数据块中的值在数值上相似时,它才有效。否则,编码增量值所需的元数据会抵消压缩带来的收益。例如,考虑两个块-B1和B2-,每个块有四个值,其中,B1包括值100、102、205、208并且B2包括200、202、105、108。BDI可能会选择100作为Bl的基值,并将增量值编码为0、2、105和108。相比之下,BDI可能会选择200作为B2的基值,并将增量值编码为0、2、-95和-92。显然,在此示例中,用于对增量值进行编码的大量元数据可能会降低BDI的压缩效率。如果可以在B1与B2之间共享基值,则可以减少元数据。

本专利公开设法解决的具有挑战性的问题是:给定存储在多个数据块中的数据组,如何设计可以选择可以由多个数据块共享的一组基值的系统、方法和装置。第一个挑战是设计一种方法和装置,该方法和装置被配置为在所述多个数据块中选择一组基值,该组基值将减少元数据的量以有效地对多个数据块之间的增量值进行编码。第二个挑战是如何设计一种方法和装置,该方法和装置被配置为通过硬件加速器有效地管理压缩和解压缩过程。

选择基值将导致一种编码方案,其中,对增量值进行显式编码。然而,增量值可能会表现出值冗余,这意味着可以被紧凑地编码的重复值。例如,再次考虑两个示例性数据块:B1包括值100、102、205、208,B2包括值200、202、105、108。如果基值为100和200,则B1的增量值为0、2、5和8,B2的增量值为0、2、5和8。此示例表明增量值可以暴露可以被利用的值冗余。具体地,B1中的增量值编号k在示例中与B2中的增量值k相同。

此外,本专利公开设法解决了如何设计系统、方法和装置的问题,这些系统、方法和装置被配置为利用使用现有技术方法组合编码的增量值的值冗余。

在应用于浮点值的一系列有损压缩技术中,目标是通过截断忽略最低有效位来实现高压缩度(或有时称为比率)。例如,可以忽略尾数的n个最低有效位。截断的效果是尾数中剩余位的信息熵将显著降低,从而可以使用增量压缩或任何其他现有压缩技术系列来有效减小浮点值的大小。不幸的是,截断可能会导致高错误率。最后,本发明设法解决了如何设计系统、方法和装置的问题,这些系统、方法和装置被配置为通过选择如何以浮点数表示尾数的被忽略的n个最低有效位来保持浮点值的高压缩比和显著较低的错误率。

发明内容

本发明的第一方面是一种数据压缩方法,该方法包括获得多个数据块,每个数据块包括多个数据值。该方法涉及对获得的多个数据块执行基增量编码,其中,增量值是指数据值与基值的差异,首先在多个数据块的数据值中确定所述多个数据块共有的一组全局基值。该一组全局基值被选择成使多个数据块的数据值相对于该一组全局基值中的全局基值的增量值最小化。然后,该方法涉及通过以下方式对多个数据块的各个数据值进行编码:在一组全局基值中为每个单独数据值选择在数值上最接近该单独数据值从而产生最小的增量值的全局基值,以及为编码的单独数据值生成元数据以表示选择的全局基值和所得的增量值。

本发明的第二方面是一种用于对获得的多个数据块执行基增量编码的数据压缩装置,每个数据块包括多个数据值,其中,增量值是指数据值与基值之间的差异。数据压缩装置包括分析器单元,分析器单元被配置为在多个数据块的数据值中确定多个数据块共有的一组全局基值。该一组全局基值被选择成使多个数据块的数据值相对于该一组全局基值中的全局基值的增量值最小化。数据压缩装置还包括编码器单元,编码器单元被配置为通过以下方式对多个数据块的各个数据值进行编码:在一组全局基值中为每个单独数据值选择在数值上最接近该单独数据值从而得到最小的增量值的全局基值,以及为编码的单独数据值生成元数据以表示选择的全局基值和所得的增量值。

本发明的第三方面是一种数据解压缩方法,该方法包括获取如通过根据本发明第一方面的数据压缩方法生成的元数据,以及根据由获得的元数据表示的全局基值和增量值重构多个数据块,每个数据块包括多个数据值。

本发明的第四方面是一种数据解压缩装置,该装置包括解码器单元,其中,解码器单元被配置为获得如通过根据本发明第二方面的数据压缩装置生成的元数据,并被配置为根据由所获得的元数据表示的全局基值和增量值重构多个数据块,每个数据块包括多个数据值。

本发明的第五方面是一种系统,该系统包括一个或更多个存储器、根据本发明第二方面的数据压缩装置和根据本发明第四方面的数据解压缩装置。

本发明的第六方面是一种包括代码指令的计算机程序产品,该代码指令在由处理装置加载和执行时使得执行根据本发明第一方面的方法。替代性地或附加地,本发明的第六方面可以被视为包括计算机程序的计算机可读存储介质,该计算机程序包括存储在其上的代码指令,其中,代码指令在由处理装置加载和执行时使得执行根据本发明的第一方面的方法。

本发明的第七方面是一种包括代码指令的计算机程序产品,该代码指令在由处理装置加载和执行时使得执行根据本发明第三方面的方法。替代性地或附加地,本发明的第七方面可以被视为包括计算机程序的计算机可读存储介质,该计算机程序包括存储在其上的代码指令,其中,代码指令在由处理装置加载和执行时使得执行根据本发明的第三方面的方法。

本发明的另一方面是一种计算机存储器压缩方法。该方法包括关于选择一组基值分析计算机存储器内容。该方法还包括通过用增量值表示所有数据块中的值来编码所述计算机存储器内容,该增量值相对于基值集合选择这样的基值,该基值在数据块中最小化每个值的增量值。此外,该方法可以包括如何使用现有技术中已知的任何基于熵或基于重复数据消除的压缩方法,例如霍夫曼编码或算术编码,来利用增量值之间的值冗余。此外,提出了一种使用一组已建立的基值对使用增量编码的被压缩的数据值进行解压缩的方法。

本发明的另一方面是一种计算机存储器压缩装置。该装置包括分析器单元,该分析器单元被配置成选择一组基值,以与在每个数据块中使用任意的基值相比减小了多个数据块中的增量值的大小。该装置还包括编码器单元,该编码器单元被配置为通过使用多个数据块共有的选定基值集合来对所述计算机存储器内容进行编码以建立每个值的增量值。编码器单元还被配置为提供表示编码的计算机存储器内容的数据值的元数据并且被配置为解压缩数据值的装置。编码器单元还被配置为使用现有技术中已知的任何基于熵的压缩方法更紧凑地编码增量值,例如霍夫曼编码或算术编码或基于重复数据消除,并且装置被配置为使用一组已建立的基值对通过增量编码压缩的数据值进行解压缩,并且其中,使用基于熵或基于重复数据消除的压缩方法对增量值进行编码。

所公开实施方式的其他方面以及目标、特征和优点将从以下详细的专利公开、所附从属权利要求以及附图中显现。

通常,权利要求中使用的所有术语应根据其在技术领域中的普通含义来解释,除非本文另有明确定义。所有对“一/一个/该[元件、设备、部件、装置、步骤等]”的引用都应被公开解释为指代元件、设备、部件、装置、步骤等的至少一个实例,除非另有明确说明。除非明确说明,否则不必以所公开的确切顺序执行本文公开的任何方法的步骤。

附图说明

图1描绘了示例性计算机系统,其包括具有一个或多个处理单元的微处理器芯片、三级的示例性高速缓存层次结构、连接到一个或多个片外存储器的一个或多个存储器控制器。

图2描绘了诸如图1中的示例性计算机系统,其被配置用于压缩内存中的数据和指令。

图3描绘了包括一组数据块和其中的值的示例性存储器页面。

图4描绘了被配置为在多个数据块中的值之间建立全局值的分析器。

图5描绘了在多个数据块中的数据值之间建立全局基值的方法。

图6描绘了使用一组全局基值来压缩数据块的方法。

图7描绘了被配置为使用一组全局基值来压缩数据块的编码器。

图8描绘了用全局基值对值进行编码的元数据格式。

图9描绘了使用一组全局基值来解压缩数据块的方法。

图10描绘了被配置为使用一组全局基值来解压缩数据块的装置。

图11描绘了使用基于熵的编码来对增量值进行紧凑地编码的方法。

图12描绘了被配置为使用基于熵的编码来对增量值进行编码的装置。

图13描绘了使用全局基值的基于熵的编码增量值的元数据格式。

图14描绘了使用基于熵的编码来解码增量值的方法。

图15描绘了被配置为使用基于熵的编码解码增量值的装置。

图16描绘了对数据值中的前导零或一进行游程长度编码的元数据格式。

图17描绘了通过应用位平面变换对多个数据值中的前导零或一进行游程长度编码的过程。

图18描绘了用最常见的符号替换多个最低有效尾数位以提高准确性的过程。

图19描绘了被配置为表示增量值的差异的最高有效位的索引的装置。

图20描绘了被配置为启用最小增量值的基值并对值进行编码的装置。

图21描绘了使用全局基值的基于熵的编码增量值的元数据格式作为图13中描绘的元数据格式的细化,基于熵的编码或重复数据消除分别应用于基指针索引值。

图22描绘了根据本发明的数据压缩方法。

图23描绘了根据本发明的数据压缩装置。

图24描绘了根据本发明的系统。

图25描绘了一种使用一组具有增量值上限的全局基值来压缩数据块的方法。

图26描绘了被配置为使用一组具有增量值上限的全局基值来编码数据块的装置。

图27描绘了当所有数据字都相同时使用所述字作为基础来压缩数据块的方法。

图28描绘了表示包括不同编码的编码的元数据格式,包括当所有数据字都相同时。

图29描绘了一种装置,该装置被配置为在所有数据字都相同时使用所述字作为基础来编码数据块。

图30描绘了被配置为在所有数据字都相同时解压缩数据块的装置。

图31描绘了使用基值的基于熵的编码来压缩数据块的方法。

具体实施方式

本文档公开了使用一系列压缩方法来压缩计算机存储器中的数据的系统、方法、装置和计算机程序产品,这些方法通过识别全局基值并使用基于熵的编码以紧凑地存储增量值,来利用值相似性对计算机存储器中的值进行紧凑的编码。

图1中描绘了计算机系统100的示例性实施方式。该系统包括微处理器芯片110和一个或多个存储器模块,表示为M

如图1中的实施方式所示例的,计算机系统可能遭受由M

本专利公开考虑了几个实施方式,这些实施方式在应用上述示例性存储器层次结构压缩的级别上有所不同。第一实施方式考虑在主存储器处应用所发明的压缩方法。然而,本领域的普通技术人员可以理解其他实施方式。意图是这样的实施方式也被设想但未被明确地涵盖在本专利公开中。

对于第一公开实施方式,其中我们考虑主存储器容量有限的问题,图1中的示例性系统可以被配置为允许在主存储器中压缩数据和指令。图2示出了这样的计算机系统200的示例。微处理器芯片210上增加了计算机存储器压缩装置205。计算机存储器压缩装置205包括四个功能块。这些块包括定位器(地址转换)单元211、编码器(压缩器)单元212、解码器(解压缩器)单元213和分析器单元214。

正如下面将更详细地解释的那样,分析器单元214被配置用于针对建立全局基值来分析计算机存储器内容,全局基值用于计算机存储器中数据的存储器对象中的多个数据块中的数据值的紧凑编码,例如,包含多个数据块的页面。在这些方面,数据值通常比存储器对象具有更细的粒度,并且存储器对象通常比整个计算机存储器内容具有更细的粒度。存储器对象通常可以包括多个数据块,并且数据块通常可以包括多个数据值,例如整数或浮点值类型或任何其他类型的存储器字(也称为数据字)。

编码器单元212被配置为通过创建关于一组全局基的增量值并且可选地还使用基于熵的压缩方法以编码增量值来编码存储器对象的所有数据块。编码器单元212进一步骤被配置用于提供表示编码的计算机存储器内容的存储器对象的数据块的元数据。元数据反映了如何通过对已用于每个数据值的全局基值的引用对增量值进行编码。这样的元数据的示例例如在图8中的方框860和方框870中可见。定位器单元211被配置为使用元数据在编码的计算机存储器内容中定位存储器对象。

计算机存储器压缩装置205一侧连接存储器控制器,另一侧连接最后一级高速缓存C3。地址转换单元211的作用是将常规的物理地址PA转换为压缩地址CA,以定位压缩存储器中的存储器块。本领域的普通技术人员意识到需要这样的地址转换,因为在压缩存储器中常规存储页面(例如4KB)可以被压缩到小于常规存储页面大小的任意大小。编码器(压缩器)单元212的目的是压缩已被修改并从最后一级高速缓存中移出的存储器块。为了对存储器系统的性能产生可以忽略不计的影响,压缩必须是快速的,并且通常由专用压缩器单元加速。类似地,当处理器请求存储器块并且该存储器块在任何缓存级别中都不可用时,例如,在示例性实施方式Cl、C2和C3中,存储器块必须从存储器被请求。地址转换单元211将定位该块,但在它被安装在高速缓存层次结构中例如在Cl中之前,它必须被解压缩。解压缩器单元213的目的是加速该过程以使其对存储器系统的性能的影响可以忽略不计。

分析存储内容以选择全局基值

图3示出了存储器的一部分和其中包含的值的示例性快照。310示出了六个示例性数据块BL1、BL2、…、BL6(311312、…、316)及其包含的值。例如,数据块311(BL1)包含值100、102、205和208,而数据块313(BL3)包含值205、208、100和102。320示出了310的示例性数据块中包含的每个值的频率的直方图,该直方图具有在列321中出现的值以及它们在列322中出现的次数,即频率。可以看出,虽然值200在BL2312、BL4 314和BL5 315中出现三次,但值400在BL6 316中只出现一次。

图4描绘了装置420,其被配置为在存储器的一部分(例如一个页面)中建立每个值或值的子集的频率的直方图。这可以是图2的分析器214的一部分。装置420包括值标签阵列421和值频率阵列425。可以对存储器中对关于该部分中每个值的出现频率进行分析的部分进行扫描。这可以通过例如具有从该部分中的所有位置或位置的子集读取的处理器或者被配置为扫描存储器的该部分中所有值的全部或值的子集的装置来实现。被分析的存储器部分中的每个值可以被放置在寄存器410中,表示为存储器值。该寄存器可以用于索引到装置420中,该装置在本实施方式中被组织为高速缓存。

示例性类高速缓存结构包括N个条目,其中每个条目包括值标签阵列条目,例如423(VT 2)和值频率阵列条目,例如427(VF 2)。本领域的普通技术人员意识到,高速缓存可以被配置为直接映射,即,在存储器值寄存器410中包含的存储器值与装置420中的条目之间存在一一对应关系。

或者,高速缓存可以被配置为组相联的,即,在存储器值寄存器410中包含的存储器值与装置420中的条目之间存在一对多对应关系。无论如何,包含在寄存器410中的存储器值可以对装置420进行索引。如果在组相联配置的情况下在直接映射配置的情况下寄存器410的存储器值中的标记位与420中的一个条目或任何条目匹配,则在420中存在命中。在命中的情况下,对应的值频率阵列条目将递增。举例来说,让我们假设条目423(VT 2)与寄存器410的存储器值相匹配。然后选择427(VF 2)。如果VF 2包含15,它将增加到16。在寄存器410的存储器值不包含在装置420中的情况下,必须创建条目。在直接映射配置的情况下,所选条目中的值将被替换。在组相联配置的情况下,可以有多个条目可供选择以进行替换。虽然本领域的普通技术人员意识到可以在许多替换策略中进行选择,例如最近最少使用(Least-Recently-Used,LRU)或先进先出(First-In-First-Out,FIFO),但是特定于该装置的是称为最不频繁值的公开策略,即值频率阵列425中具有最低计数的条目被选择用于替换。

当存储器部分中的所有预期值都已被扫描时,装置420包含图3中的值-频率直方图320的估计。在一个实施方式中,装置420被配置为导致单个的条目,例如条目422(VT 1)连同条目426(VF 1)可以被访问存储器的计算机指令读取,即加载和存储指令。这开启了将内容从装置420移动到存储器430的可能性。如图2中所示,装置420可以是分析器214的一部分,分析器214经由存储器控制器141(MCTRL1)、142(MCTRL2)或143(MCTRL3)连接到存储器装置151(M1)、152(M2)或153(M3)中的任何一个。

现在,让我们描述由装置420建立的值频率直方图如何可以用于选择多个基值,以对已被分析的被称为存储器对象(例如页面)的存储器部分中包含的所有值的增量值进行最小化。

图5描绘了在多个数据块中的数据值中建立全局基值的方法。假设要选择的基值的数量是B。所采取的方法是首先将存储器对象中出现的值的范围划分为N个固定大小的箱(bin)。例如,假设这些值的范围为1、2、…、100。如果选择了四个箱,则将范围划分为四个箱:1、2、…、25;26,27…50;51,52,…,75;以及76、77、…、100。

方法520中的第一步骤是将值连同它们的频率从最低值到最高值排序。第二步骤530是确定有多少箱N以及多少个全局基值B要考虑。为了将基值的数量保持在一个合理的低数,B小于或等于N。例如,N可以被选择为4,B可以被选择为4,每个箱最多产生一个全局基值。在这个示例中,如果最大N(MaxN)是4,最大B是方框530中规定的N,则应考虑N和B的所有可能组合,表示为(N,B),即(N,B)=(1,1);(2,1);(2,2);(3,1);(3,2);(3,3);(4,1);(4,2);(4,3);(4,4)。第二步骤530保证考虑所有这些组合。

第三步骤540考虑多个组合(N,B)中的一个并且在每个箱中建立全局基值。本领域的普通技术人员会选择现有技术中已知的聚类方法,例如k-均值聚类。虽然,k-均值选择一个全局值,该值最小化到聚类中所有值的距离。但是这不一定最大化压缩比。为了意识到这一点,考虑三个值的聚类:1、1和7。K-均值会选择基值作为平均值(l+l+7)/3=3。基值与前两个值之间的距离为2,需要两位以二进制表示,而基值与最后一个值之间的距离为4,需要三位。因此,总共需要2+2+3=7位。如果前两个值相同,将被选为基值,则到它们的距离为零,到第三个值的距离为6,这只需要3位。通过选择其中一个值作为基值,压缩比高于选择值的平均值作为所述基值。

因此,该方法的第三步骤540首先将值范围划分为N个箱。对于B个全局基值,其中B<=N,一个基值被分配给具有最高累积值频率的B个箱中的每一个箱。在所述B个箱中的每个箱内,基值被指定为该箱最高频率的值。第四步骤550根据图6中的方法通过使用最接近的基值来建立增量值来压缩存储器对象中的所有数据值。建立并记录压缩比,即未压缩存储器对象的大小与压缩存储器对象大小的比率。

第五步骤560是确定是否存在箱的数量N与全局基值的数量B的更多组合要考虑。如果存在仓的数量N与全局基值的数量B的更多组合,则下一步骤将返回到过程530中的第二步骤。如果不存在仓的数量N与全局基值的数量B的更多组合,则第六步骤570将选择产生最高压缩比的N个箱和B个全局基本值的组合,然后在580中完成该过程。

使用全局基值压缩和解压缩存储器内容

我们现在考虑一种方法,该方法用于如何使用例如使用结合图5描述的方法建立的一组全局基本值来压缩数据块。该过程在610开始。为此,图6中所描绘的方法通过在第一步骤620中考虑第一值来考虑存储器对象(例如页面)或数据块中的多个数据元素以及它们所表示的值。

假设全局基值存储在表中,称为全局基值表。所述表中的每个条目都与一个索引相关联。例如,如果所述表有N个条目,则索引可以用log

所述数据值将由元数据所示的基值索引和增量值编码,以使用图8中所公开的方法对数据值进行编码。有两种元数据格式860和870对应于数据值被压缩(860)和数据值未被压缩(870)的情况。考虑如方框860中的压缩块,第一字段810是表示数据值被压缩的单个位C。字段820包括用于在全局基值表中选择全局基值的基指针索引。第三字段825(Sign)是包括下一个字段是否为非负的单个位。最后,表示增量值的830包括增量值。具有明确的符号位可以将增量值解释为与基值的距离(如果它是非负数或负数)。这简化了稍后描述的所提出的装置。

在数据值未被压缩的情况下,使用元数据格式870。虽然所有数据都可以被压缩,但我们也考虑仅在增量值小于预设阈值时压缩数据的实施方式。如果增量值不小于预设阈值,则清除C840,并且第二字段850将包含未压缩的数据值。否则,设置C840。

回到图6和第四步骤650,如果在存储器对象或数据块中有更多的数据值要考虑,则将考虑下一个值,并且将选择第二步骤630。如果没有更多的数据值要考虑,则该方法在步骤660中终止。

在图6所示的方法的实施方式中,通过考虑最接近的基值,数据值将总是由增量值编码。然而,与一些数据值根本没有被压缩的情况相比,允许过大的增量值可能导致更低的压缩比。在替代实施方式中,可以对增量值设置一个界限,表示为上限增量值UB,并且仅在对应的增量值小于或等于所述上限增量值的情况下压缩一个值。未被压缩的值,因为它们的增量值大于上限增量值,被称为异常值。

图25描绘了用于在存在与每个基值相关联的最大增量值(此后表示为MD)的情况下选择增量值的方法。上限增量值UB是小于或等于最大增量值MD的阈值。最好最大增量值MD由具有n位的最大二进制数定义,其中,n=最小压缩值大小-log2(B)。最小压缩值大小参数是由给定目标压缩比产生的编码数据值的最小大小,以位表示。B是一组全局基值中基值的数量。例如,如果目标压缩比为2并且具有32位数据值,则最小压缩值大小将为16位。举例来说,如果B是128,那么将使用16-log

图25中描述的方法2500开始于2510,并且假设例如通过图6所描绘的用于基值集合中的每个基值的方法已经建立了基值集合2520。与该基值相关联的所有数据值都被视为建立上限增量值(UB)2530,即与基值相关联的一组值中的最大增量值。如果最大增量值UB大于MD,则将UB设置为MD2540。对于每个基值重复该过程2550,并在所有基值都已被考虑时终止2560。

为每个基值建立UB后,如果增量值小于或等于UB,则将数据值编码为相对于其最接近基值的增量。否则,数据值不会被压缩。

现在让我们关注图7,其描绘了编码器700,该编码器700被配置为根据结合图6描述的方法使用一组全局基值来压缩数据块。举例来说,我们考虑包含在数据块710中的两个值711(V0)和712(V1)。用于对数据值进行编码的装置700的该示例性实施方式包括全局基值表720,该表具有分别对应于B0、B1、B2和B3的四个条目722、723、724和725。为了在全局基值中选择与手头值具有最小差异的一个全局基值,全局基值表720被配置为存储数据值721。

全局基值表被进一步配置为导致可以建立任何全局基值条目与数据值721之间的差异。在一个实施方式中,这可以通过在全局基值条目与数据值之间进行减法以关联的方式并行地完成。基值与数据值之间的差被存储在寄存器732、733、734和735中,其中数据值721与基值条目722(B0)之间的差存储在732中(Diff),数据值721和基值条目的差存储在734中(Diff)。注意,图8中的增量值字段830被解释为距基本值的距离,非负值或负值。

在图19和图20中描述的装置的其余部分被配置为使用多个差异来建立最小差异,并选择与所述差异相对应的基值表条目。

现在让我们将注意力转向图19。图7中存储差异的多个寄存器730在图19 1910中被重新绘制。在示例性实施方式中,每个差异寄存器1911、1912、1913和1914(Diff)包括表示为I3、I2、I1和I0的四位,其中I0是最低有效位。索引块1921、1922、1923和1924的目的是确定哪一个是差异的最高有效位,即非零的最有效位。索引块的数量与差异寄存器的数量一样多。索引块的真值表显示在1930中。例如,考虑1932中的第三个输入向量“01XX”,其中X代表任何二进制值“0”或“1”。这里,位I2是最高有效(非零)位,并且将产生输出(U1,U0)=(1,0)。作为另一个示例,在第一个位向量“0001”中,I0是最高有效(非零)比特,并将产生输出(U1,U0)=(0,0)。

最高有效非零位的索引编码现在被馈送到另一个块转换1925、1926、1927和1928。转换的目的是创建一个位串,该位串用于提取最小的差异,这将在后面描述。转换块的真值表显示在方框1940中。方框1940具有来自索引块(U1,U0)的最高有效位的索引编码作为输入1941,并且它具有根据真值表1942(输入)和1943(输出)的比特串作为输出。例如,对于输入(1,0),输出(X3,X2,X1,X0)为(0,1,1)。通常,通过索引指向的最高有效位和所有较低有效位都设置为“1”。

图20示出了对数据值进行编码所需的附加功能。图19中的多个转换功能块1925、1926、1927和1928在图20 2011、2012、2013、2014中被重新绘制。2020包括用于每个转换块的一个寄存器,并且将存储包括来自转换块的输出的位串。举例来说,寄存器2022、2023、2024和2025包含位串“0111”、“0001”、“1111”和“0011”。2020的目的是建立具有最小最高有效位的位串,即从最高有效位开始计数为“1”的第一位。这可以通过应用纵列式逻辑AND来建立。例如,应用于所有X3位的逻辑AND将产生“0”,而应用于X0的逻辑AND则产生“1”。因此,寄存器2021将包含与应用纵列式逻辑AND运算之后的最小差异相对应的位串。

最后一步是使用寄存器2021来建立产生最小差异或增量的基值表条目。这将在2030和2040中完成。2030包括应用于在2020中建立的位串的多个优先级编码器2031、2032、2033、2034和2035。优先级编码器的输出是差异或增量值中最高有效位的位位置的索引。作为优先级编码器的替代方案,可以使用1920索引块(例如块1921)的输出(U1,U0)。在2040中,所有索引与寄存器2021的索引并行进行比较。相同的一个索引唯一地确定哪个基值条目产生最小的差异,并且可以转换为使能信号来检索该条目。这由决策方框2041、2042、2043和2044来描绘。可以有多个索引,这些索引表现出到基值的相同距离,从而能够实现相应的基值条目。然后,可以随机选择最低或最高的条目数。

本领域的普通技术人员知道,如果数据值与任何基值相同,则优先级解码器将无法输出有意义的索引值。一种解决方案是通过施加到图19中的索引块1921、1922、1923和1924的输入信号(I3、I2、I1、I0)的零比较器来检测这种情况。然后,所述零比较器的输出信号优先于图20中的决策方框2041、2042、2043和2044中的决策。例如,如果2041和2042建立了具有最小索引的匹配,并且2043报告了零比较匹配,则2043将获胜。最后,如果多个条目报告零比较,则具有最高或最低条目数或随机选择的基值寄存器启用一个基值寄存器。

现在让我们回到图25中所描绘的替代方法,其中,当且仅当由最接近的基值形成的增量值小于或等于上限值时,对数据值进行编码。图26描绘了编码器2600,其被配置为根据结合图25描述的方法使用一组全局基值来压缩数据块。它适用于被配置为根据图6中的方法压缩数据值的编码器。举例来说,我们考虑包含在数据块2610中的两个值2611(V0)和2612(V1)。对数据值进行编码的装置2600的该示例性实施方式包括全局基值表2620,全局基值表2620具有分别对应于B0、B1、B2和B3的四个条目2622、2623、2624和2625。与仅分别存储基本值B0-B3 2622-2655相反,全局基值表还存储与通过图25中所示的方法建立的每个基值相关联的上限增量值。为了在全局基值及其相关联的上限值之间选择与手头值具有最小差异的一个,全局基值表2620被配置为存储数据值2621。

全局基值表被进一步配置为导致可以建立任何全局基值条目与数据值2621之间的差异。在一个实施方式中,这可以通过在全局基值条目和数据值之间进行减法以关联的方式并行地完成。基值和数据值之间的差异被存储在寄存器2632、2633、2634和2635中,其中,数据值2621和基值条目2622(B0)之间的差异被存储在2632(Diff)中,并且数据值2622和基值条目的差异(B2)被存储在2634(Diff)中。注意,图8中的增量值字段830被解释为距基值的距离,非负值或负值。

在前面描述的图19和图20中描述的装置的其余部分被配置为使用多个差异来建立最小差异,并选择与所述差异相对应的基值表条目。作为最后一步,如果差异小于或等于与基值相关联的上限值,则图26中的装置将使用所建立的基值表条目和差异进行编码。这可以从对应于所选择的基值的基值寄存器B0-B3 2622-2625中的任何一个基值寄存器中检索。2660将最终将所建立的差异与所述上限值进行比较,并且仅在所述差异小于或等于所述上限值的情况下创建编码。

现在返回参考图8的元数据布局800。在数据值将不被压缩的情况下,C位840将被清除,并且数据值被解压缩850。

在另一个实施方式中,以高吞吐量对值进行编码是可取的。为此,示例流水线寄存器被放置在功能块之间,并用虚线701表示,以说明这种流水线装置的示例。

在替代实施方案中,可以进一步减小增量值的大小。为增量值保留固定量的空间是有利的,例如16位。然而,如果增量值通常很小,则未使用的位将为“0”(或者,在2的补码表示中为“1”)。回到图8中的元数据格式,所公开的发明将基指针索引值与增量值连接起来。可以通过更紧凑地编码零(或一)的命中来进一步减小级联字段的大小。

在一个实施方式中,图8的增量值字段830可以通过对从最高有效位到第一个非零位的零的数量进行计数来编码(或者可替代地,在2的补码表示中,对从最高无效位到第一位为零的一的数量进行计数)。这种零或一的命中可以是游程长度编码的。例如,图16示出了13位的增量值1611,其中最高有效的10位是0,后跟1。元数据格式1620示出了增量值是如何被编码的,使用具有代码1621(代码)的游程长度编码,以表示使用了游程编码,后跟零的数量(二进制表示法中的1010)1622,后跟非零部分的数量1623。

在替代实施方式中,如果多个附近值具有大量前导零(或一),则可以通过首先考虑多个值中的最高有效位,然后考虑第二最高有效位等来对零的数量进行游程编码。例如,图17考虑四个示例值1710、1720、1730和1740。第一值1710的20个最高有效位为零,而第二值1720、第三值1730和第四值1740分别有19、21和21位最高有效位为零。

对于四个示例性值1710、1720、1730和1740,通过在多个值上纵列式检查零的命中,从最高有效位开始,然后是下一个最高有效位,等等,19个最高有效位为零。通过对所述零进行游程编码,可以更有效地压缩多个增量值。这被本领域的普通技术人员称为位平面压缩。也可以考虑这种方法和装置与本专利公开中所公开的方法和装置的组合。

图17还示出了当将位平面压缩与所公开的使用全局基的增量编码方法相结合时元数据1750的格式的实施方式。这里,示出了四个值的示例性块的元数据。尺寸1751描绘了任何增量值中的最大尺寸。它可以通过对块中所有值中为零的最高有效位的数量进行计数来确定,例如,通过使用游程编码。与每个单个值相关联的基值被编码在BP1 1752、BP21754、BP3 1756和BP4 1758中。最后,在D1 1753、D2 1755、D3 1757和D4 1759中对与每个单个值相关联的增量值进行编码。其他元数据格式是可能的,例如,如图8的示例性元数据格式实施方式中所采用的,具有对块是否被压缩进行编码的专用位。

我们考虑了可广泛应用的系统、方法和装置作为在应用任何压缩方法(包括本公开中的增量压缩)之前的准备步骤,以及应用于基于熵的压缩、基于重复数据消除的压缩或本领域的普通技术人员已知的任何压缩方法之前的准备步骤。

作为一个示例,我们考虑数据值为浮点数的情况。在考虑浮点数的有损压缩技术族中,本领域的普通技术人员已知,忽略尾数中的N个最低有效位可能是有利的,因为随后尾数中熵减小,从而给出更高的压缩比。从现有技术已知的被配置为这样做的方法和相关装置简单地截断,即,将所有N个最低有效位视为零(或类似地为一)。在N个零位中的大多数为零(或一)的情况下,截断将导致小的误差。然而,截断可能会导致显著错误,特别是当N个最低有效位中的大多数为非零时。

例如,图18示出了四个浮点值1810、1820、1830和1840的尾数。每个尾数包含24位。如果N被选择为四,则四个最低有效位的截断将为零。这将导致尾数1810和1830的大误差,在1810和1830中四个最低有效位中的大多数是一。

一个实施方式考虑了一种被配置为对最低有效N位中的零的数量进行计数的方法和装置。如果零占多数,则所有N位都表示为零。另一方面,如果非零占多数,则所有N位都表示为零。最后,如果存在平局,则可以将最后N位编码为1或0。例如,尾数1810和1830的最低有效位将分别由被设置为“1”的单个位1850和1870来表示,而最低有效位则将分别由设置为“0”的单个位1860和1880来表示。此外,利用该技术,我们还考虑与前面提到的技术相结合的任何实施方式,这些技术应用游程编码来更紧凑地编码增量值。

现在,我们将注意力转向一种方法,该方法通过将差异编码为一组全局基值来解压缩被压缩的数据块。这样的方法显示在图9中。该方法应用于使用图8中的元数据编码的数据值。在数据值被压缩的情况下,应用元数据格式860,并且字段810将通过C=1指定块被压缩,并且字段820、825和830将分别包括基指针索引、符号位和增量值。另一方面,如果数据值未被压缩,则应用元数据格式870,并且字段840将通过C=0指定数据值不被压缩,并且字段850将包括未被压缩的数据值。

回到图9,过程900中的第一步骤920将检查图8中的字段810和840的C。如果数据值没有被压缩,即C=0,则下一步骤将是930,并且可以从图8中的字段850中检索数据值,之后过程终止960。在数据值被压缩的情况下,该过程中的下一个步骤是940。这里,通过使用图8中的字段820来检索全局基值以索引到全局基值表中。在图9中的下一步骤940中,考虑图8中的符号位825,将全局基值820添加到增量值830以恢复数据值。本领域的普通技术人员意识到,可以针对存储器对象(例如页面或数据块)对900中描绘的过程中包含的尽可能多的数据值进行重复。

图10描绘了根据图9的过程被配置为使用一组全局基值来解压缩数据块的装置。示例性装置1000使用根据图8中的元数据字段的多个编码作为输入。在示例性装置中,根据附图1000,存在两个编码值1011(E0)和1012(E1)。基指针索引字段820选择多个全局基值条目中的一个全局基值条目。在示例性装置1000中,存在四个全局基值条目1021(B0)、1022(B2)、1023(B3)和1024(B4)。选择其中一个条目,并将该条目中的全局基指针值复制到基值寄存器1031。图8中的增量值字段830被复制到增量值寄存器1033。接下来,该装置被配置为将基值1031与增量值1032相加。该和被加载到寄存器1032中,在该寄存器中检索原始值。

在另一个实施方式中,以高吞吐量对值进行解码是可取的。为此,示例流水线寄存器被放置在功能块之间,并用虚线1001表示,以说明这种流水线装置的示例。

使用基于熵的编码方案压缩和解压缩增量值

我们现在将注意力转向可以提供比使用全局基的增量编码更高的压缩度的实施方式。在一种情况下,多个数据块可能包含完全相同的值。它们可以使用相同的全局基值进行编码,并且可以具有相同的增量值。然而,即使它们使用不同的全局基值,它们仍然可以使用相同的增量值。下一专利公开的目的是与不太频繁出现的增量值相比用更少的位来对更频繁出现的增量值进行编码。

图11描绘了可以使用基于熵的编码来紧凑地对增量值进行编码的方法。该过程在方框1110中开始。考虑存储器对象或数据块,其中已经根据图8所示的元数据使用具有全局基值的增量编码对各个值进行了编码。通常,该方法的目的是首先建立存储器对象或数据块中的多个编码值的增量值的频率的直方图。为此,1120启动该过程,并且在第二步骤1130中,增加第一增量值的出现次数。在步骤1140中,只要没有考虑所有的增量值,就重复该过程。当已经考虑了所有的增量值时,该过程继续到步骤1150,在步骤1150中目的是建立增量值的基于熵的编码。本领域的普通技术人员意识到在诸如霍夫曼编码和算术编码之间有多种方法可进行选择。这种基于熵的编码技术的共同点是,它们需要关于每个符号的相对频率的直方图信息,在这种情况下,该相对频率可以是增量值。

图12描绘了一种装置,该装置被配置为使用基于熵的编码对增量值进行编码以支持图11中描述的方法。根据图8中的元数据,每个增量编码的数据值被加载到寄存器1210中(编码的存储器值)。假设计算机可以使用加载指令和存储指令访问此寄存器。接下来提取图8中的增量值字段830并将其复制到寄存器1220中。装置1260是被配置为对每个增量值的频率(即出现次数)进行计数的许多实施方式之一。寄存器1220可以索引到被组织为高速缓存的装置1260中。示例性类高速缓存结构包括N个条目,其中每个条目包括增量值标签阵列条目,例如1232(DVT2),而且包括增量值频率阵列条目,例如1242(DVF2)。本领域的普通技术人员意识到,高速缓存可以被配置为直接映射,即,在增量值寄存器1220中包含的存储器(数据)值和装置1260中的条目之间存在一一对应关系。

或者,高速缓存可以被配置为组相联的,即,在增量值寄存器1220中包含的存储器(数据)值和装置1260中的条目之间存在一对多对应关系。无论如何,包含在寄存器1220中的增量值将对装置1260进行索引。如果在1260中寄存器1220的存储器值中的标记位匹配一个(在直接映射配置的情况下)或多个条目中的一个(在组相联的情况中),则在1260存在命中。在命中的情况下,相应的增量值频率阵列条目将递增。举例来说,让我们假设条目1232(DVT2)与寄存器1220的增量值相匹配。然后选择1242(DVF 2)。如果DVF 2包含15,则它将递增到16。如果寄存器1220的增量值不包含在装置1260中,则必须创建一个条目。

在直接映射配置的情况下,所选条目中的值将被替换。在组相联配置的情况下,有多个条目可供选择以进行替换。虽然本领域的普通技术人员意识到,可以在许多替换方案中进行选择,例如最近最少使用(LRU)替换方案或先进先出(FIFO)替换方案,但特定于该装置的是被称为最不频繁使用的增量值的策略,即,选择增量值频率阵列1240中具有最低计数的条目

当已经扫描了存储器对象中的所有值时,装置1260包含增量值频率的估计。装置1260可以被配置为导致单个条目,例如与条目1241(DVF1)相结合的条目1231(DVT1)可以由计算机指令通过所谓的加载指令读取。这打开了将内容从装置1260移动到存储器1250的可能性。如图2所示,装置420可以是分析器214的一部分,分析器214经由存储器控制器141(MCTRL1)、142(MCTRL2)或143(MCTRL3)连接到存储器装置151(M1)、152(M2)或153(M3)中的任何一个。

当增量值频率信息已经被复制到存储器时,可以进一步分析它,并使用现有技术中已知的任何基于熵的编码方案(例如霍夫曼编码或算术编码)来生成编码。此外,还可以应用基于重复数据消除的压缩技术。

图13描绘了使用全局基值的基于熵的编码的增量值的元数据。元数据1300有两种格式1360和1370,分别在数据值被压缩和未压缩时使用。是否压缩可以基于增量是否低于预设阈值或者根据一些其他标准。这样的方法和装置也是可以考虑的。

在数据值被压缩的情况下,第一字段1310(C)被设置为1。接下来的三个字段1320、1325和1330对基指针索引进行编码,如图8中的元数据中所示。字段1325对可以用单个位编码的增量值的符号位进行编码。1330包括针对所选择的基于熵的编码方案的增量值的基于熵的编码。另一方面,如果数据值是未压缩的,则第一字段1340(C)被设置为零。然后字段1350包括未压缩的数据。

现在,我们将注意力转向如何对已经使用基于熵的编码进行编码的增量值进行解码。图14描绘了使用基于熵的编码来解码增量值的方法1400。该过程在方框1410中开始。如方框1420所示,目的是解码数据块中或多个数据块中的所有编码的增量值。第一步是在增量值被压缩的情况下提取图13中的字段1330。然后使用在方框1430中选择的基于熵的编码方案将编码的增量值与可用代码进行匹配。当增量值已被解码时,使用图13中的字段1320从全局基值表中检索全局基本值。在该值未被压缩的情况下,在步骤1430中不采取任何动作。如判定方框1440中所示,只要有更多的编码值,就重复该过程。当不存在更多的值时,该过程在方框1450中终止。

图15描绘了根据图14的方法被配置为使用基于熵的编码来解码增量值的装置1500。示例性装置1500使用根据图13中的元数据字段的多个编码值作为输入。在示例性装置中,根据附图1500,存在两个编码值1511(E0)和1512(E1)。装置1520被配置为提取增量值的基于熵的编码1521,并且使用被配置为根据所选择的基于熵编码方案来解码增量值的装置1522来对增量值进行解码。装置1522可以由本领域的普通技术人员通常熟知的任何合适的解压缩器来实现。例如,参考了分别在WO2020/130929的图3和图7中公开的霍夫曼解压缩器300或700,其内容通过引用整体并入本文。最终结果将是根据图8中的元数据格式的增量编码的数据值。基指针索引字段820选择多个全局基值条目中的一个。在示例性装置1500中,存在四个全局基值条目1531(B0)、1532(B2)、1533(B3)和1534(B4)。选择其中一个条目,并将该条目中的全局基指针值复制到基值寄存器1541。图8中的增量值字段830被复制到增量值寄存器1543。接下来,该装置被配置为将基值1541与增量值1543相加。该和被加载到寄存器1542中,在该寄存器中检索原始值。

在另一个实施方式中,以高吞吐量对值进行解码是可取的。为此,示例流水线寄存器被放置在功能块之间,并且被表示为虚线1501,以说明这种流水线式装置的示例。

在又一个实施方式中,可以在图13的1320中将基于熵的编码单个应用于基指针索引值。当一个基值比另一个更频繁地使用时,这可以产生更高的压缩。图21示出了图13的元数据格式以及一个实施方式如何可以选择使用如本专利中公开的被配置成这样做的任何方法和装置来分析基址指针值2115的频率。

在另一个实施方式中,可以应用重复数据消除。当一个值或整个数据块与另一数据值或另一数据块相同时,这将产生更高的压缩。图21另外示出了图13的元数据格式,以及一个实施方式如何可以选择使用如本专利中公开的被配置为这样做的任何方法和装置来分析基指针值中重复的发生2125。同样的方法也可以应用于增量值。这里,可以选择使用如本专利中公开的被配置为这样做的任何方法和装置对增量值中重复的出现进行分析。

作为图11所描述方法的替代或补充,如果数据块中的所有数据值都相同,则可以使用它们中的任何一个作为具有单个位的基值据值来描绘所有值都相同。图27描绘了基于该原理的压缩方法2700。该过程从2710开始。第一步骤是将基值设置为与数据块中的第一数据值相同的值2720。接下来,通过将数据块中的每个剩余数据值与基值进行比较2740考虑数据块中的每个剩余数据值2730。如果当前数据值与基值相同,则只要有更多的值需要考虑该过程就继续考虑下一个数据值2750。另一方面,回到2740,如果当前数据值与基值不相同,则过程终止,并且数据块将不会被压缩2760。当所有数据值都被考虑并发现与基值相同时,过程终止2770,并且数据块将被压缩。

图28描绘了如何使用图27中所描绘的方法来压缩数据块的示例性布局2860,或者如果所述方法不能压缩块而是根据图6中所示的方法压缩块,其中使用格式2870压缩块中的每个值,或者如果两种方法都不能压缩块,使用格式2880存储每个未压缩的数据值。

在使用图27中所描绘的方法压缩的块中,所有数据值都是相同的。因此,通过存储相同值的一个实例,即基值2820来压缩块。为了确定所述方法被使用,两位编码C2810被设置为10。另一方面,如果使用根据图6的方法,每个数据值都使用所选基值的增量进行编码。所选择的基值可以在字段2876中编码,增量可以在字段2878中编码,符号位可以在符号字段2877中编码。为了确定所述方法被使用,C字段2875被设置为11。最后,如果所述方法都不能压缩数据块,则所有数据值将以未压缩的格式存储,并且使用2880的布局。这里,每个值都被未压缩地存储,并且C字段2885被设置为00。如果仅使用图27的方法,则要考虑的优化是对整个数据块使用单个C字段。

因此,数据压缩方法可以涉及确定多个数据块中的单个数据块的所有数据值是否具有相同的值,并且如果多个数据块中的单个数据块的所有数据值具有相同的值,则使用与全局基值2820相同的值和具有第一值的元数据2810来编码整个单个数据块以指示这一点。如果多个数据块中的单个数据块的所有数据值不具有相同的值,则可以使用如本文档中所公开的方法(即,涉及所选择的全局基值和产生的增量值,例如图6中的方法),使用具有第二值的元数据2875来对单个数据块的数据值进行编码以指示这一点,期望由具有第三值的元数据2885指示的未压缩数据值。

图29描绘了被配置为利用图27所示的方法和图28所示的元数据布局来压缩数据块的装置。装置2900的输入是数据块,在图29的示例性实施方式中该数据块包括四个数据字:W1 2910、W2 2920、W3 2930和W42940。装置2950被配置为确定所有数据字是否包含相同的值。如果它们相同,则所述装置将留下逻辑一作为输出,如果它们不相同,则所述装置留下逻辑零作为输出。让我们把字n的第i位表示为Wn[i]。所有数据字的含义相同意味着对于字中的所有位,W1[i]=W2[i]=W3[i]=W4[i]。本领域的普通技术人员意识到装置2950可以如何用XOR和AND门来构造。输出信号连接到表示为2960和2970的两个锁存器的使能输入。当数据块中的所有字都相同时,W1 2910的内容将在下一个时钟信号2980处被锁存到基值锁存器2960中。同样,当所有数据字都相同时,图28中的元数据格式2860的两个元数据位必须是“1”和“0”。为了将“1”和“0”锁存到两位锁存器2970中,所述锁存器还具有由装置2950控制的使能信号,所述装置2950将在下一时钟信号2980处锁存“1”或“0”。本领域的普通技术人员意识到,在C不是“1”和“0”而是具有另一个逻辑两位值的情况下,可以在图28中的元数据布局2800中生成其他编码,例如2870或2880。

图30描绘了被配置为利用图27中所示的方法和图28中所示的元数据布局来解压缩数据块的装置。对装置3000的输入是元数据C 3010和基值3090。如果根据图28中的布局2860,C=10,则基值被复制到块中的所有数据字。装置3000中的示例性数据块包括四个数据字W1 3040、W23050、W3 3060和W4 3070。它们被配置为每个都具有使能信号E的锁存器,如果E信号具有逻辑值1,则在下一时钟信号CLK 3080处将把基值寄存器3090的内容传送到所有锁存器。当且仅当C 3010为10时,E信号将具有逻辑值1,该逻辑值由连接到AND门3030的输入信号的一个输入信号的反相器门3020确定。本领域的普通技术人员将意识到,在C不是10但具有另一个逻辑值的情况下,可以将不同的值集合分别加载到字锁存器W1-W43040、3050、3060和3070中;例如根据图28中的元数据布局2880的未压缩字的集合。

基值通常使用基值指针(也称为基值索引)来编码,该指针指向使用给定N个基值的每个引用log2N位来存储所有基本值的表。可能会发生这样的情况,即某些基值的使用频率远远高于其他基值。然后,使用诸如霍夫曼或算术编码之类的基于熵的编码方案来对基值指针进行编码是有益的。图31示出了使用基于熵的编码方案对基值指针进行编码的方法。

转到图31,该过程在3110开始。整个过程考虑已经通过例如结合图5描述的方法建立的所有基值。在3130中为每个基值建立每个基值(或其基值指针)被使用的次数。当已经考虑了所有的基值时,过程在判定方框3140之后进行到3150。基于熵的编码是基于使用所有基值的次数,从而为使用频率更高的基值产生比使用频率较低的基值更短的代码。当建立编码时,该过程在3160处终止。

通过如图7中那样明确地压缩存储基值指针的块的装置的教导,可以构造被配置为利用图31中所描绘的方法来压缩数据块的装置。回到图7,在图20中进一步阐述的装置750的任务是创建编码,其中显式地存储所选择的基值的基值指针。图31中所描述的方法在基值指针和基于熵的编码之间建立一对一映射。该表可以存储在装置中的一个小表中,该表在启用压缩时加载。因此,当在750中建立了基值指针时,该指针可以索引到表中以获取该基值指针的对应编码。

还可以通过如图8中那样对块进行解压缩并显式地存储基值指针的装置的教导,构造被配置为利用图31中所描绘的方法对数据块进行解压缩的装置。图10示出了对这样的编码进行解压缩的装置的实施方式。这里,示例性块具有两个值E0 1011和E1 1012,这两个值可以使用四个基本值B0 1021、B1 1022、B3 1023和B4 1024。使用任何基于熵的编码方案将这些基值编码在码字中,基于熵的编码方案具有码字与基值之间的一对一映射。与上述要编码的装置一样,可以有一个小表,该表包含一组基值编码并且使用编码索引到其中的基值以检索基值。这样的装置可以被合并到图10中的方框1020的左侧,以检索要在1020中使用的基值。合适的装置的一个示例是US10846218中公开的解压缩装置,其通过引用整体并入本文。

通常,本专利公开教导了被配置为通过确定一组全局基值并使用基增量编码来压缩多个数据块的方法和装置,每个数据块包括多个数据值。此外,它教导了被配置为与来自现有技术的基于熵和基于重复数据消除的编码技术相结合进行压缩的方法和装置,这些编码技术被应用于孤立的增量值或者被应用于孤立或在一起的基值。所有这样的实施方式都是可以考虑的。

正如本领域的普通技术人员将从前面的描述中理解的那样,本发明提供了一种数据压缩方法,该方法可以在图22中的2200处看到。方法2200包括获得多个数据块2210,其中每个数据块包括多个数据值。方法2200还包括对所获得的多个数据块执行基增量编码2220,其中,通过在多个数据区块的数据值中确定多个数据方块共有的一组全局基值2230,选择一组全局基值以使多个数据块的数据值的增量值相对于一组全局基值中的全局基值最小化。

方法2200然后包括通过在一组全局基值中为每个单个的数据值选择数值上最接近该单个数据值的全局基值2250,从而产生最小的增量值,来对多个数据块的单个数据值进行编码2240,以及生成用于编码的单独数据值的元数据2260,以表示所选择的全局基值和所得到的增量值。

本领域的普通技术人员将从本文件的教导中清楚地看到,一组全局基值将包括以下数据值:

a)出现在要进行增量编码的多个数据块中(“共有”、“全局”),以及

b)当多个数据块的数据值通过采用在随后的编码步骤2240中定义的方式的一组全局基值对基增量进行编码时,将导致最小的增量值(最高压缩比)。

因此,确定使多个数据块的全局值的集合的增量值最小化的全局值集合属于公知常识,并且被称为聚类方法。例如,一种众所周知的聚类方法是Kmeans(参见StuartP.Lloyd,PCM中的最小二乘量化,IEEE信息理论汇刊,第IT-28卷,第2期,第192页,1982年3月)。

如特别参考图4和图5所描述的,确定一组全局基值2230可以涉及分析所获得的多个数据块,以建立关于多个数据区块中的数据值的值频率信息,以及将数据值与其在多个数据方块中的值频率一起排序。然后,对于N=1…Nmax和B=1…N的每个特定组合,其中N是值仓的数量,B是候选基值的数量,将排序的数据值划分为N个箱。对于具有最高累积值频率的B个箱,为每个箱分配候选基值作为该箱中具有最高值频率的数据值。然后,使用B箱的候选基本值来执行所获得的多个数据块的数据值的基增量编码,以确定特定组合的基增量压缩比。在所有特定组合中,识别产生最大压缩比的值箱和候选基值的组合。所识别的组合的候选基值被选择为一组全局基值。

从公开的实施例中可以清楚地看出(例如参见图6的描述),每个全局基值优选地在一组全局基值中具有唯一的基值索引。对多个数据块的各个数据值进行编码2240然后涉及通过其基值索引来表示所生成的元数据中的所选全局基值。

此外,对多个数据块的各个数据值进行编码2240会涉及针对每个数据块中的每个数据值确定由所选择的基值产生的增量值是否超过阈值,并且如果超过阈值,则生成元数据以包含数据值本身以及数据值未被压缩的指示,而不是用所选择的全局基值和所得到的增量值来表示它。

如上所述,本发明的实施方式可以涉及对增量值的游程长度进行编码。因此,数据压缩方法2200可以进一步包括基增量编码的数据值的游程长度编码增量值,游程长度编码增量值通过表示由a)最高有效位二进制0:s或1:s的命中的长度表示的数据与b)增量值的剩余部分(未命中部分)的组合生成的元数据中的增量值,游程长度编码增量值包含了最高有效位二进制0:s或1:s的命中。

类似地,本发明的实施方式可以涉及增量值的位平面压缩。为此,数据压缩方法2200还可以包括通过识别增量值序列中的每个增量值包含某个最小长度的最高有效二进制0:s或1:s的命中,将位平面压缩应用于基增量编码数据值的增量值的序列,以及包括表示通过a)所识别的最小长度表示的数据与b)增量值序列(未命中部分)中的增量值的剩余部分的组合生成的元数据中的增量值。

如上所述,本发明的有利实施方式涉及压缩增量值和/或基值索引。因此,数据压缩方法2200可以进一步包括获得一个或更多个基增量编码数据块的基增量编码数据值的增量值/基值索引,然后通过利用所获得的增量值/基值索引之间的值冗余来执行所述一个或更多个基增量编码数据块的第二阶段数据压缩。

第二阶段数据压缩可以优选地涉及执行基于熵的编码,例如霍夫曼编码或算术编码,通过建立所获得的增量值/基值索引的相对频率信息,基于所建立的相对频率信息来为每个所获得的增量值/基值索引选择编码,在为每个基增量编码的数据值生成的元数据中通过所选择的代码来表示增量值/基值索引。作为对基值索引(或基值指针)执行基于熵的编码的替代,可以对基值本身执行基于熵编码。这将导致基值码字可以用作与基值一一映射的基值索引。

或者,第二阶段数据压缩可以涉及通过识别所获得的增量值/基值索引中的一个或更多个增量值/基值索引的重复来执行基于重复数据消除的压缩,以及涉及在所生成的元数据中通过具有与所述重复增量值/基值索引相同的增量值的编码的单独数据值的指针或标识符来表示每个识别的重复增量值/基值索引。

获得多个数据块2210通常可以涉及从计算机存储器C1-C3、M1-Mk、2410读取存储器对象(见图24),其中,上述多个数据块被包括在存储器对象中,并且其中,方法2200还涉及将生成的元数据存储在计算机存储器中。例如,存储器对象可以是计算机存储器C1-C3、M1-Mk中的页面;或者,存储器对象可以是例如高速缓存线或大小不同于存储器页的另一存储器对象。

相关联的计算机程序产品包括代码指令,当由处理设备(例如,图2中的P1、P2或P3之类的CPU)加载和执行时,这些代码指令导致执行如上所述的数据压缩方法2200。

图23示出了相关联的数据压缩装置2300(其可以对应于图2中的计算机存储器压缩装置205),用于对如本文所述的所获得的多个数据块执行基增量编码。回顾每个数据块包括多个数据值,其中,增量值意味着数据值和基值之间的差异。数据压缩装置2300包括分析器单元2310(其可对应于图2中的单元214)和编码器单元2320(其可以对应于图2的单元212)。

分析器单元2310被配置用于在多个数据块的数据值中确定多个数据块共有的一组全局基值。回顾一组全局基值被选择,这导致多个数据块的数据值的增量值相对于一组全局基值中的全局基值最小化。

编码器单元2320被配置用于通过在一组全局基值中选择全局基值来对多个数据块的单个数据值进行编码,对于每个单个的数据值,所选择得全局基值在数值上最接近于单个数据值并且因此导致最小的增量值的全局基值,并且生成用于编码的单个数据值的元数据以表示所选择的全局基值和所产生的增量值。

具有其分析器单元2310和编码器单元2320的数据压缩装置2300可以被配置为执行如上所述的用于数据压缩方法2200及其实施方式的任何或全部附加或精细功能。

相关联的数据解压缩方法包括获得由数据压缩方法2200生成的元数据,以及从由所获得的元数据表示的全局基值和增量值重建多个数据块,每个数据块包括多个数据值。此外,相关联的计算机程序产品包括代码指令,当由处理设备(例如,图2中的P1、P2或P3之类的CPU)加载和执行时,这些代码指令引起该数据解压缩方法的执行。

相应地,相关联的数据解压缩装置2430(见图24)包括解码器单元(其可以对应于图2中的213单元)。解码器单元(例如,205)被配置用于获得由数据压缩装置2300(例如205)生成的元数据,并且用于从由所获得的元数据表示的全局基值和增量值重建多个数据块,每个数据块包括多个数据值。

图24公开了包括一个或更多个存储器2410、数据压缩装置2420(其可以对应于图23中的装置2300和/或图2中的装置205)以及如上所述的数据解压缩装置2430的系统2400。

系统2400通常可以是计算机系统(例如图2中的计算机系统200),并且一个或更多个存储器2410可以是高速缓存存储器(例如C1-C3)、随机存取存储器(例如M1-Mk)、辅助存储器或数据缓冲器。

以上主要参照本发明的不同实施方式对本发明进行了描述。然而,如本领域的普通技术人员容易理解的,如所附专利权利要求所定义的,除了本文中公开的实施方式之外的其他实施方式同样可以在本发明的范围之内。

相关技术
  • 存储器系统和操作半导体存储器装置的方法
  • 非易失性存储器装置和包括其的存储器系统及其编程方法
  • 基于子块位置操作存储器装置的方法和相关存储器系统
  • 利用微波间接照射方法,针对受油类污染土壤和砾石采用的具备微波防泄露装置以及利用废热的预先加热装置的热解吸系统以及利用该系统对受油类污染土壤和砾石采用的热解吸方法
  • 存储器的数据读取方法、显示装置及计算机可读存储介质
  • 用于消除计算机存储器中的副本和值冗余的系统、方法和设备
  • 用于支持基于处理器的系统中的异构存储器存取请求的异构存储器系统以及相关方法和计算机可读媒体
技术分类

06120116133451