用于压缩和解压缩数据的方法、设备和系统与流程

文档序号:15742230发布日期:2018-10-23 22:29阅读:219来源:国知局
用于压缩和解压缩数据的方法、设备和系统与流程

本公开内容总体上涉及数据压缩和解压缩领域,例如在计算机系统的缓存/存储器子系统和/或数据传输子系统中的或在数据通信系统中的数据压缩和解压缩。



背景技术:

数据压缩是用于减小数据大小的一种较为成熟的技术。其应用于保存在计算机系统的存储器子系统中的数据以,增加存储能力。当数据在计算机系统内的不同子系统之间传输时,或者通常当在包括通信网络的数据通信系统中的两个点之间进行所述传输时,数据压缩也被使用。

数据压缩需要两个基本的操作:1)压缩(也称为编码),压缩是将未压缩的数据作为输入,并通过用相应的码字(在文献中也称为编码、字码或代码)替换数据值来将未压缩的数据转换为经压缩的数据;以及2)解压缩(也称为解码),解压缩是将经压缩的数据作为输入并通过用相应的数据值替换码字来将该经压缩的数据转换为未压缩的。数据压缩可以是无损式的或者有损式的,这取决于是否解压缩后的实际数据值与压缩前的原始数据值完全相同(无损式),或者取决于是否解压缩后的数据值不同于原始数据值且原始值无法取得(有损式)。可以用软件、或硬件、或软件和硬件的组合来实施压缩和解压缩,以实现相应的方法、设备和系统。

图1描绘了计算机系统100的实例。计算机系统100包括使用通信装置例如互连网络连接到存储器层次结构(memory hierarchy,存储器分级体系)110的一个或数个处理单元P1…Pn。每个处理单元都包括处理器(或核),并且每个处理单元都可以是CPU(中央处理单元)、GPU(图形处理单元)、或者通常是执行计算的块。另一方面,存储器层次结构110构成计算机系统100的存储子系统,并且包括可以以一个或数个级别(level,层级、等级)L1-L3进行组织的缓存存储器120,以及存储器130(又名初级存储器)。存储器130还可以连接到次级存储装置(例如,硬盘驱动器、固态驱动器或闪存)。存储器130可以被组织成数个级别,例如,快速主存储器(例如,DDR)和闪存。当前实例中的缓存存储器120包括三个级别,其中,L1和L2是专用缓存,因为每个处理单元P1-Pn都连接至指定的L1/L2缓存,而L3是在所有处理单元P1-Pn之间共享。在具有不同数量的处理单元以及通常地具有处理单元和存储器子系统之间的不同组合的情况下,可替代的实例可以实现具有更多、更少或甚至不具有缓存级别的并且具有或不具有专用或共享的指定缓存的不同缓存层次结构,实现各种存储器级别,这一切都是由技术人员容易实现的。

可以以不同的方式将数据压缩应用于计算机系统。图2描绘了计算机系统例如图1的系统100的实例200,其中,在这种计算机系统的存储器例如主存储器中数据是经压缩的。这意味着通过如上所述的相应压缩操作,数据在被保存于存储器之前经压缩,并且数据在离开存储器时被解压缩。

在图3所示的计算机系统的替代实例300中,数据压缩可以应用于缓存系统的L3缓存。类似于先前的实例,需要在数据被存储于缓存之前进行压缩,并且需要在数据离开缓存(例如,去往其中数据为未压缩的其他缓存级别(L2)或存储器330)之前进行解压缩。在替代实例中,可以将数据以压缩形式保存在缓存层次结构的任何级别中。

还可以仅当数据在计算机系统中的不同子系统之间进行传输时对其进行压缩。在图4所示的计算机系统的替代实例400中,当使用相应的通信装置在L3缓存与存储器430之间传输数据时,对数据进行压缩。类似于先前的实例,在通信装置的末端需要存在压缩和解压缩,以便在传输数据之前对数据进行压缩,并且在于另一端处接收数据时对数据进行解压缩。

在计算机系统的替代实例500中,数据压缩可以应用于如图5所描绘的子系统的组合中。在这个实例中,当数据保存在存储器530中时并且当数据在存储器530与缓存层次结构520之间传输时,数据是经压缩的。这样,当数据从缓存层次结构520移动到存储器530时,可以仅需要在数据从L3缓存转移之前对其进行压缩。或者,离开存储器530去往缓存层次结构520的经压缩的数据可以仅需要在将其被接收到将存储器530与缓存层次结构520连接的通信装置的另一端时被解压缩。关于将压缩应用于计算机系统中的不同子系统的组合,任何实例都是可行的,并且可以由本领域技术人员实现。

还可以在通信网络内的两个任意点之间进行数据传输。图6描绘了包括两点之间的通信网络605的数据通信系统600的实例,其中,数据由发射器610传输并由接收器620接收。在这样的实例中,这些点可以是网络中的两个中间节点或者通信链路的源节点和目的地节点或者这些情况的组合。数据压缩可以应用于如图7所描绘的示例系统700这样的数据通信系统。在数据通过发射器710被发射到通信网络705上之前需要应用压缩,而在数据被接收器720接收之后需要应用解压缩。

实现数据压缩有各种不同的算法。数据压缩算法中的一族是统计压缩算法,该统计压缩算法是数据依赖的并且可以提供接近于熵的压缩效率,因为该统计压缩算法基于数据值的统计特性来分配可变长度(也称为可变宽度)代码:短码字用于对频繁出现的数据值进行编码,而较长的码字对不那么频繁出现的数据值进行编码。霍夫曼编码是已知的统计压缩算法。

用于加速解压缩的霍夫曼编码的已知变型是范式霍夫曼编码。基于此,码字具有数字序列属性,这意味着相同长度的码字是连续的整数。

在现有技术中提出了基于范式霍夫曼的压缩和解压缩机制的实例。这种压缩和解压缩机制可以用在前述的实例中以实现基于霍夫曼的压缩和解压缩。

图9示出了实施霍夫曼编码例如范式霍夫曼编码的来自现有技术的压缩器900的实例。该压缩器将未压缩的块作为输入,所述未压缩的块是一串数据值并且包括在整个本公开内容中通常表示为v1、v2、…、vn的一个或多个数据值。单元910——其可以是存储单元或用于从未压缩的块提取出数据值的提取器——向可变长度编码单元920提供数据值。可变长度编码单元920包括码表(CT)922和码字(CW)选择器928。CT 922是可以实施为查找表(LUT)或计算机缓存存储器(具有任何任意的相关性)的表,并且包含一个或多个条目;每个条目包括可以使用码字来压缩的值923、CW 925和码字长度(cL)927。由于统计压缩算法所使用的各种码字集是可变长度的,所以当将其保存在每个条目具有固定大小的宽度(码字925)的CT 922中时,必须用零对这些码字集进行补填。码字长度927保持可变长度编码的实际长度(例如,以位为单位)。CW选择器928使用cL以便识别实际的CW并舍弃所补填的零。然后将编码的值连结至经压缩的值的其余部分,一起形成经压缩的块。在图25中描绘了遵照先前描述的压缩步骤的压缩方法的示例性流程图。

图10中示出了现有技术中的解压缩器1000的实例。范式霍夫曼解压缩可以分为两个步骤:码字检测和值检索(retrieve,取得、恢复、取回)。这些步骤中的每一个都通过下述单元中之一来实施:(1)码字检测单元(CDU)1020和(2)值检索单元(VRU)1030。CDU 1020的目的是在经压缩的序列(即,经压缩的数据值的码字的序列)内找到有效的码字。CDU1020包括一组比较器1022和优先级编码器1024。每个比较器1022a、1022b、1022c将每个潜在的位序列(bit-sequence,比特序列)与已知码字进行比较,在本实例中该已知码字是特定长度的首次分配的(在码生成时)范式霍夫曼码字(FCW)。在替代实施中,也可以使用最后分配的范式霍夫曼码字,但是在这种情况下,所做的确切比较将会不同。上述待比较的位序列可以保存在存储单元1010(例如实施为FIFO或触发器)中并且决定了比较器的数量以及位序列中最宽者的最大宽度,待比较的位序列的最大大小取决于在码生成时所决定的有效霍夫曼码字的最大长度(mCL)。然而,取决于这种解压缩器的所选择的实施(例如,以软件或以硬件),可以在设计、编译、配置或运行时间上将该最大长度限制到特定值。将比较器1022的输出插入到如结构1024的优先级编码器中,该优先级编码器输出该匹配的码字的长度(在图10中称为“匹配的长度”)。基于此,从保存于存储单元1010的位序列中提取所检测到的有效码字(匹配的码字);将位序列移位与“匹配的长度”所限定的一样多的位置,并且将空余部分加载成经压缩的序列的后续位,使得CDU 1020可以确定下一有效码字。

另一方面,值检索单元(VRU)1030包括偏移表1034、减法器单元1036和解压缩查找表(DeLUT)1038。使用来自前一步骤的“匹配的长度”来确定必须从也于前一步骤中确定的该匹配的码字的算术值中减去(1036)的偏移值(保存在偏移表1034中),以获得DeLUT 1038的地址,其中,对应于检测到的码字的原始数据值可以从DeLUT中取得并附接至保存在解压缩块1040中的其余解压缩值。重复解压缩器的操作,直到以压缩形式保存在所输入的经压缩的序列(在图10中称为经压缩的块)中的所有值被恢复成未压缩的数据值v1、v2、…、vn。

图26描绘了遵照先前描述的解压缩步骤的解压缩方法的示例性流程图。

上述压缩器和解压缩器可以利用可变长度规范霍夫曼编码快速且有效地压缩数据块,并解压缩利用可变长度规范霍夫曼编码压缩的数据块。然而,它们不能压缩和解压缩包括经压缩的和未压缩的值的混合的数据块,这是当将统计压缩应用于上述实例的计算机系统或通信网络时的常见情况。本发明人已经认识到在数据压缩和解压缩的技术领域中存在改进的空间。



技术实现要素:

本发明的目的是提供在数据压缩和解压缩技术领域中的改进。

本公开内容大体公开了当将压缩应用于例如计算机系统的缓存子系统和/或存储器子系统和/或数据传输子系统中和/或数据通信系统中时,用于压缩数据值块和解压缩经压缩的数据值块的方法、设备和系统。有各种方法使用基于熵的可变长度编码在所述子系统中有效地压缩数据,并且一种这样的方式是通过使用霍夫曼编码。当前的压缩器可以用于使用霍夫曼编码来压缩数据值块,同时当前的解压缩器可以用于解压缩用霍夫曼编码压缩的所述数据块。然而,当在所述系统中应用基于熵的压缩时,一些数据不可压缩或被选择为不被压缩;例如,它们只出现一次,因此压缩它们比保持它们未压缩需要更多的元数据;或者没有针对某些数据值的编码,因为它们没有出现在统计信息收集期间,但出现在了压缩期间。因此,所述压缩器缺乏使得它们能够在同一块内创建经压缩的数据值和未压缩的数据值的混合的重要特征;并且当在块中混合在一起时,所述解压缩器不能区分经压缩的数据和未压缩的数据。在本公开内容中公开的方法、设备和系统利用下述新特征增强了利用可变长度编码的现有压缩器和解压缩器:在将压缩应用在计算机系统或通信网络时的常见情况下,压缩数据块,包括经压缩的数据和未压缩的数据的混合;以及当在这种所述系统中包括经压缩的数据和未压缩的数据的混合时,解压缩经压缩的数据块。此外,所提出的方法、设备和系统甚至通过下述方式进一步增强所述压缩器和解压缩器,所述方式即将它们与针对所述计算机系统和通信网络中的常见压缩情形的其他积极型压缩器和解压缩器分别组合。

本发明的第一方面是一种数据压缩设备,用于将包括一个或多个数据值的未压缩的数据块压缩为经压缩的数据块,该数据压缩设备包括:

压缩器,被配置为将未压缩的数据块的数据值压缩为对应的可变长度码字;

检测器,被配置为检测未压缩的数据块中的不能被所述压缩器压缩的数据值;以及

经压缩的数据块生成器,被配置为通过将下述相组合生成经压缩的数据块:

·经压缩的数据值,所述经压缩的数据值处于与未压缩的数据块中的被所述压缩器压缩的数据值对应的可变长度码字的形式;

·未压缩的数据值,所述未压缩的数据值处于未压缩的数据块中的所检测到的不能被所述压缩器压缩的数据值的形式;以及

·元数据,所述元数据指示未压缩的数据值,其中元数据是唯一特殊含义码字。

有利地,唯一特殊含义码字是在码生成时与压缩器的可变长度码字一起生成的码字。

更具体地,唯一特殊含义码字可以在码生成时通过下述方式来生成:所述方式即在码生成时计算或估计没有呈现在值-频率表中的所有数据值的出现频率,其中,它们的与出现的数据值的总数目相比的出现频率将影响唯一特殊含义码字的宽度。因此,通过使用数据值的出现频率,通过用唯一特殊含义码字来区分经压缩的数据块内的未压缩的数据值与经压缩的数据值,可以将压缩效率提高超过现有技术方法。在码生成时没有被值-频率跟踪器捕获的数据值越多,则相应地与出现的数据值总数目相比被保持未压缩的数据值越多,用于指示在生成的经压缩的数据块中的未压缩的数据值的唯一特殊含义码字越窄。另一方面,未压缩的数据值的出现数量频率越低,用于指示在生成的经压缩的数据块中的未压缩的数据值的唯一特殊含义码字越宽。

本发明的第二方面是数据解压缩设备,用于将经压缩的数据块解压缩为包括一个或多个数据值的经解压缩的数据块,该数据解压缩设备包括:

解压缩器,被配置为将经压缩的数据块的可变长度码字解压缩为对应的经解压缩的数据值;以及

经解压缩的数据块生成器,被配置为:

检测在经压缩的数据块中的元数据,所述元数据是唯一特殊含义码字,指示包括在经压缩的数据块中的未压缩的数据值;以及

基于检测到的元数据,通过下述方式生成经解压缩的数据块:所述方式即组合来自解压缩器的经解压缩的数据值和来自经压缩的数据块的未压缩的数据值,使得所生成的经解压缩的数据块的数据值的次序与所述数据值在产生经压缩的数据块的数据压缩之前在未压缩的数据块中出现的次序相同。

本发明的第三方面是用于将包括一个或多个数据值的未压缩的数据块压缩为经压缩的数据块的数据压缩方法,该数据压缩方法包括:

将未压缩的数据块的数据值压缩为对应的可变长度码字;

检测未压缩的数据块中的不能被所述压缩器压缩的数据值;以及

通过将下述相组合来生成经压缩的数据块:

·经压缩的数据值,所述经压缩的数据值处于与未压缩的数据块中的被压缩器压缩的数据值相对应的可变长度码字的形式;

·未压缩的数据值,所述未压缩的数据值处于未压缩的数据块中的所检测到的不能被所述压缩器压缩的数据值的形式;以及

·元数据,所述元数据指示未压缩的数据值,其中元数据是唯一特殊含义码字。

本发明的第四方面是数据解压缩方法,用于将经压缩的数据块解压缩为包括一个或多个数据值的经解压缩的数据块,该数据解压缩方法包括:

将经压缩的数据块的可变长度码字解压缩为对应的经解压缩的数据值;

检测在经压缩的数据块中的元数据,所述元数据是唯一特殊含义码字,指示包括在经压缩的数据块中的未压缩的数据值;以及

基于检测到的元数据,通过下述方式生成经解压缩的数据块:所述方式即组合来自解压缩器的经解压缩的数据值和来自经压缩的数据块的未压缩的数据值,使得所生成的经解压缩的数据块的数据值的次序与所述数据值在产生经压缩的数据块的数据压缩之前在未压缩的数据块中出现的次序相同。

本发明的第五方面是系统,包括一个或多个存储器、根据上面第一方面的数据压缩设备和根据上面第二方面的数据解压缩设备。

本发明的第六方面是计算机程序产品,包括代码指令,该代码指令在由处理设备加载和执行时引起根据上面第三方面的方法的执行。

本发明的第七方面是计算机程序产品,包括代码指令,该代码指令在由处理设备加载和执行时引起根据上面第四方面的方法的执行。

根据以下具体公开内容、所附从属权利要求以及附图,本公开实施方式的其他方面、目标、特征以及优点将显现。一般地,除非另有明确说明,否则权利要求中使用的所有术语根据其技术领域中的普通含义来解释。

除非另有明确规定,否则对于“一(a)/一(an)/该[元件、设备、部件、装置、步骤等等]”的所有参照将被开放性地解读为对该元件、设备、部件、装置、步骤等等的至少一个实例的参照。除非明确声明,否则本文所公开的任何方法的步骤不一定严格按照所公开的顺序来执行。

附图说明

参照以下附图对背景技术的实例以及本发明方面的实施方式进行描述:

图1例示了包括n个处理核心的计算机系统的框图,每个处理核心都连接到三个级别的缓存层次结构和主存储器。

图2例示了图1的框图,其中主存储器保存经压缩的形式的数据。

图3例示了图1的框图,其中L3缓存保存经压缩的形式的数据。其他缓存级别也可以储存经压缩的形式的数据。

图4例示了图1的框图,其中数据在通信装置中被压缩,例如当在存储器和缓存层次结构之间传输时。

图5例示了图1的框图,其中压缩可以应用于主存储器和将存储器连接到缓存层次结构的链路。通常,可以将压缩应用于类似缓存层次结构、传输装置(例如,将存储器连接到缓存子系统的链路)和主存储器的部分的任何组合。

图6例示了连接通信网络中的两个点的数据传送链路的框图。这些点可以是网络中的两个中间节点或通信链路的源节点和目的地节点或这些情况的组合。

图7例示了图6的数据传送链路的框图,其中被传输的数据是经压缩的形式,所以它们可能需要在发射器中被压缩并在接收器中被解压缩。

图8在左侧例示了未压缩的数据值块,并且在右侧例示了使用已利用霍夫曼编码生成的可变长度编码的经压缩的形式的相同块。未压缩的块的所有数据值都由相应的霍夫曼码字代替。

图9例示了用于使用霍夫曼编码来压缩(或编码)如图8所例示的块的压缩器。

图10例示了用于解码(或解压缩)使用规范霍夫曼编码压缩的块的解压缩器。

图11在左侧例示了未压缩的块,并且在右侧以可替代方式例示了经压缩的形式的相同块,包括:位掩码,该位掩码指示哪些值被压缩和哪些值未被压缩;以及可变长度编码(即,由可变长度编码来编码的位序列),根据相关的但当前未要求保护的设计,该可变长度编码包括经压缩的值和未压缩的值的混合。

图12在左侧例示了未压缩的块,并且在右侧以第二可替代方式例示了经压缩的形式的相同块,包括经压缩的值和未压缩的值的混合,其中在每个未压缩的值之前置有唯一可变长度(例如,霍夫曼)码字,该唯一可变长度码字仅对应于所有未压缩的值。

图13在左侧例示了未压缩的块,并且在右侧以第三可替代方式例示了经压缩的形式的相同块,包括经压缩的值和未压缩的值的混合,其中在块中按原始数据值序列将每个未压缩的值替换为唯一可变长度(例如,霍夫曼)码字,该唯一可变长度码字仅对应于所有未压缩的值,同时实际未压缩的值以相反出现次序保存在块的末端(即,最后保存的未压缩的值是在块中按数据值的原始次序第一个出现的未压缩的值)。

图14例示了根据相关但当前未要求保护的设计的数据压缩设备,该数据压缩设备是基于图9的压缩器,但通过下述方式被被修改并扩展为能够压缩图11的块:所述方式即检测可压缩的和不可压缩的块数据值,并生成置于可变长度编码的位序列之前的掩码,以指示包括在所述经压缩的块中的未压缩的值,该可变长度编码的位序列包括经压缩的值和未压缩的值。

图15例示了根据相关但当前未要求保护的设计的数据解压缩设备,该数据解压缩设备是基于图10的解压缩器,但被修改并扩展为能够解压缩图11的经压缩的块,该经压缩的块包括置于可变长度编码的位序列之前的掩码以指示未压缩的值。

图16例示了数据压缩设备,该数据压缩设备是基于图9的压缩器,但通过下述方式被修改并扩展为能够压缩图12的块:所述方式即检测可压缩的和不可压缩的块数据值,并利用仅对应于未压缩的值的并附接在每个未压缩的值之前的唯一码字对可变长度编码的位序列内的未压缩的块数据值进行编码,该可变长度编码的位序列包括经压缩的值和未压缩的值。

图17a例示了数据解压缩设备,该数据解压缩设备是基于图10的解压缩器,但被修改和扩展为能够解压缩图12的经压缩的块,该经压缩的块包括经压缩的值和未压缩的值,其中每个未压缩的值之前置有仅对应于未压缩的值的唯一码字。

图17b示出了图17a的数据解压缩设备的可替代实现。

图18例示了数据压缩设备,该数据解压缩设备是基于图9的压缩器,但通过下述方式被修改并扩展为能够压缩图13的块:所述方式即检测可压缩的和不可压缩的块数据值,利用仅对应于所有未压缩的值的唯一码字替换可变长度编码的位序列内的未压缩的块数据值,并将实际的未压缩的值按相反出现次序放置在经压缩的块的末端(最后出现的值至第一个出现的值),该可变长度编码的位序列包括经压缩的值和未压缩的值。

图19示出了数据解压缩设备,该数据解压缩设备是基于图10的解压缩器,但被修改和扩展为能够解压缩图13的经压缩的块,该经压缩的块包括经压缩的值和未压缩值的混合,其中每个未压缩的值被替换为仅对应于所有未压缩的值的唯一码字,同时未压缩的值按相反出现次序保存在块的末端。

图20在左侧示出了空的未压缩的块,其是仅包括零数据值的块,并且在右侧示出了使用图9的压缩器利用可变长度编码压缩的相同块,假设每个零值是由最小可能宽度(1位)的码字替换。

图21在左侧示出了空的未压缩的块,其是仅包括零数据值的块,并且在右侧示出了使用1位编码压缩的相同块。

图22在左侧示出了未压缩的块,其与图11、图12和图13中的块相同,并且在右侧以第四可替代方式示出了包括下述的处于经压缩的形式的相同块:一位指示符,该指示符指示经压缩的块是否为空;以及可变长度编码的位序列,该可变长度编码的位序列包括经压缩的值和未压缩值的混合,其中在每个未压缩的值之前置有仅对应于所有未压缩的值的唯一可变长度(例如,霍夫曼)码字。

图23例示了能够压缩图21的未压缩的块(经压缩的空块)和图22的未压缩的块(包括经压缩的值和未压缩的值的混合的经压缩的块)的数据压缩设备,该数据压缩设备包括图16的数据压缩设备和空块检测单元,该空块检测单元检查所有块数据值是否都为零值。在该情况下,其使用如图21中的1位编码对其压缩;否则,其如图22中那样对其压缩。

图24a例示了能够解压缩图21(经压缩的空块)和图22(包括经压缩的和未压缩的值的混合的经压缩的块)的经压缩的块的数据解压缩设备,该数据解压缩设备包括图17a的数据解压缩设备和额外逻辑(在图24的底部),该额外逻辑能够通过检查块的第一位是否为零来检测块是否被压缩为空块。在该情况下,经解压缩块的所有数据值都被分配值0。

图24b例示了图24a的数据解压缩设备的可替代实例,其能够解压缩图21的经压缩的块(经压缩的空块)和图22的经压缩的块(包括经压缩的值和未压缩的值的混合的经压缩的块),该可替代实例包括图17a的数据解压缩设备和额外逻辑(在图24的底部),该额外逻辑能够通过检查块的第一位是否为零来检测块是否被压缩为空块。在该情况下,经解压缩的块的所有数据值都被复位为值0。

图25例示了用于使用可变长度编码(例如,霍夫曼)压缩块的压缩方法的示例性流程图。

图26例示了用于解压缩使用可变长度编码(例如,规范霍夫曼)压缩的经压缩的块的解压缩方法的示例性流程图。

图27例示了构建在图25的压缩方法之上的并且能够通过下述方式压缩图11的块的新方法的示例性流程图,所述方式即检测可压缩的和不可压缩的块数据值并生成置于包括经压缩的值和未压缩的值的可变长度编码的位序列之前的掩码,以指示包括在所述经压缩的块中的未压缩的值。

图28例示了构建在图26的方法之上的并且能够解压缩图11的经压缩的块的新方法的示例性流程图,该经压缩的块包括置于可变长度编码的位序列之前的掩码以指示未压缩的值。

图29例示了构建在图25的压缩方法之上以能够通过下述方式压缩图12的块的新方法的示例性流程图,所述方式即检测可压缩的和不可压缩的块数据值,并使用仅对应于未压缩的值并附接在每个未压缩的值之前的唯一码字对可变长度编码的位序列内的未压缩的块数据值进行编码,该可变长度编码的位序列包括经压缩的值和未压缩的值。

图30例示了构建在图26的方法之上的能够解压缩图12的经压缩的块的新方法的示例性流程图,该经压缩的块包括经压缩的值和未压缩的值,其中在每个未压缩的值之前置有仅对应于未压缩的值的唯一码字。

图31例示了构建在图25的压缩方法之上以能够通过下述方式压缩图13的块的新方法的示例性流程图,所述方式即检测可压缩的和不可压缩的块数据值,并利用仅对应于所有未压缩的值的唯一码字对可变长度编码的位序列内的未压缩的块数据值进行编码,以及将实际的未压缩的值按相反出现次序放置在经压缩的块的末端(最后出现的值至第一个出现的值),该可变长度编码的位序列包括经压缩的值和未压缩的值。

图32例示了构建在图26的方法之上以能够解压缩图13的经压缩的块的新方法的示例性流程图,该经压缩的块包括经压缩的值和未压缩的值的混合,其中每个未压缩的值由仅对应于所有未压缩的值的唯一码字替换,同时未压缩的值按相反出现次序保存在块的末端。

图33例示了新方法的示例性流程图,该新方法构建在图29的压缩方法之上以便还检查所有块数据值是否为零值,并相应地将空块指示符设置为“1”,在该情况下使用如图21中的1位编码对块进行压缩;否则,其如图22中那样对块进行压缩,将零位指示符设置为0。

图34例示了新方法的示例性流程图,该新方法构建在图30的方法之上以能够通过检查块的第一位是否等于1来检测块是否被压缩为空块。在该情况下,经解压缩的块的所有数据值都被分配值0;否则,通过图30中所例示的方法来解压缩块。

具体实施方式

本公开内容公开了当压缩应用于计算机系统中的缓存子系统和/或存储器子系统和/或数据传输子系统和/或通信网络时,用于压缩一个或多个数据值块并解压缩一个或多个经压缩的数据值块的方法、设备和系统。所公开的方法、设备和系统扩展和优化基线压缩方法、设备和系统以及解压缩方法、设备和系统,以便适用于在上述应用的系统中常见的数据压缩情况并还具有更好的压缩性。

数据块包括一个或多个数据值并且可以是任意大小。在如图1所描绘的计算机系统的实施方式中,数据值块可以替代地称为:1)缓存行、缓存组或缓存扇区,当数据块被保存在这样的计算机系统内的缓存层次结构中时;2)缓存行、存储器页或存储器扇区,当数据块被保存在这样的计算机系统内的存储器中或在这样的计算机系统内的通信装置中传输时。另一方面,在如图6中所描绘的通信网络内的传送链路的实施方式中,数据块还可以称为数据包、微片、有效载荷、报头等。

基于熵的可变长度压缩,诸如霍夫曼压缩,可以在如图2、图3、图4、图5所描绘的示例计算机系统的缓存/存储器/数据传输子系统或如图7所描绘的示例通信链路的情境中应用于如图8左侧所示的数据值块。所述块包括8个数据值,然而其可以是如前所述的任意大小(段0069)。使用规范霍夫曼码字的示例集合和现有技术的霍夫曼压缩器诸如图9的示例实施方式,压缩(或编码)所述块中的所有数据值,形成如图8右侧所描绘的经压缩的块。此外,描绘在图8的右侧的示例可变长度经压缩的数据值块可以通过现有技术的规范霍夫曼解压缩器诸如图10的示例实施方式来解压缩。

使用霍夫曼编码压缩一个或多个块的所有可能数据值要求存在针对可能出现在计算机系统中或在网络中传输的所有数据值的霍夫曼码字。通过减小值粒度来缩小可能的数据值的数量是处理此问题的一种方式。例如,使用1字节数据值来用霍夫曼编码压缩需要多达256个霍夫曼码字。然而,当使用更精细的颗粒值时,压缩效率降低,因为生成的码字不比替换的数据值显著的更密集。提高压缩效率需要霍夫曼压缩粗粒数据值。这样做的缺点是必须事先为可能访问的所有可能值生成码字,这种方式使存储霍夫曼编码所需的资源和元数据增加到禁止的大小。当压缩应用于缓存/存储器子系统、传输子系统和通信网络时,仅基于所使用的数据值的当前集合生成码字并当新值出现时(例如,当它们被引入、创建、访问或传输时)基于该新值再生成编码的可替代解决方案因为由于采样和码再生成而施加的开销对于本领域技术人员来说也不是可行的解决方案。特别地当压缩应用于缓存和存储器子系统时,其还意味着必须对存储的所有之前压缩的数据值进行解压缩并使用新编码对其进行重压缩,潜在地给系统引入显著的开销。

对于该问题的允许使用可变长度霍夫曼编码来压缩粗颗粒值而不保持大量元数据并且不需要再生成所述霍夫曼编码的可行解决方案通常是允许保持一些数据值未压缩。保持一些数据值未压缩的另一个动机是,当数据值出现几次(出现频率小)时,相比于保持它们不压缩,需要更多的元数据来压缩它们,最终产生更多的区域开销和更多的时间开销(由于压缩和解压缩)。值-频率表可用于跟踪最频繁的值以及它们的出现频率。

当数据值块包括未压缩的值时,其可能保持未压缩。本发明人已经构思了两种可能的解决方案,以允许在数据块内经压缩的和未压缩的数据值的混合,假设数据值的序列保持不变,如在原始未压缩的块中的序列那样。此外,可替代地使用本发明人构思的第三种解决方案,以允许对数据值的原始序列的重排列,而在形成经压缩的块时不需要超出由前两种解决方案所使用的任何元数据之外的任何额外元数据。

在图11的右侧描绘了根据第一种解决方案的经压缩的数据块的实例,而在其左侧示出了未压缩形式的相同数据块。经压缩的数据块包括可变长度霍夫曼编码的位序列和在所述可变长度霍夫曼编码之前出现的位掩码(C-状态掩码)形式的元数据。所述可变长度编码的位序列包括经压缩的和未压缩的值。所述掩码包括与块中包含的数据值的数量一样多的位。所述掩码中的每个位限定相应的数据值是被压缩(掩码位是例如1)还是没有被压缩(掩码位是例如0)。掩码中掩码位的位置用于定位(或计数)经压缩的和未压缩的值的可变长度序列中的相应值。

图14中描绘了能够形成图11的所述经压缩的块的示例数据压缩设备1400的框图。该示例数据压缩设备包括:可变长度编码单元1420形式的压缩器;压缩指示单元1430形式的检测器;用于存储C-状态掩码的压缩状态寄存器1440;以及形成经压缩的数据块生成器的其他逻辑1440、1450和1460。如在图9的压缩器实施方式中那样,数据压缩设备将未压缩的数据块1410作为输入,该未压缩的数据块是数据值流并且包括一个或多个数据值v1、v2、…、vn,并且该未压缩的数据块可以从储存单元1405取得或从具有出自未压缩的块的数据值的提取器取得。然而,未压缩的数据块1410的数据值不仅被提供给可变长度编码单元1420,还被提供给压缩指示单元1430和选择器1450。可变长度编码单元1420类似于图9的压缩器900的可变长度编码单元920,不同之处在于码表(CT)1422在每个表条目中还包括有效位(v)1424。每个CT条目的值1423、码字(CW)1425和码长(cL)1427类似于图9的压缩器900的值923、CW 925和cL 927。v位1424指示该条目是否包括用于所存储的值的有效CW。

压缩指示单元1430通过将每个传入的数据值(用于压缩的候选)与匹配的条目的值1423进行比较(比较器1434a)来检查CT 1422中是否存在该传入的数据值,并通过检查(比较器1434b)该条目的有效位1424来检查其是否有效。如果两个比较都为真(由单元1438指示),则存在针对用于压缩的候选值的有效码字;否则,该值将保存为未压缩。由压缩指示单元或检测器1430生成作为检测结果1439(例如,对于使用CT中的码字进行压缩的值为1,对于未压缩的值为0)的该信息被标记在压缩状态寄存器1440中的C-状态掩码中的适当位置,同时选择器1450也根据该信息做出适当的选择。

因此,经压缩的数据块生成器1440-1460被配置为:通过按数据值在未压缩的数据块1410中出现的次序增添可变长度码字(CW)1425形式的经压缩的数据值或未压缩的数据值v1-vn,来迭代地构建可变长度编码的位序列1455(即,由可变长度编码生成的位序列),上述对可变长度码字形式的经压缩的数据值或未压缩的数据值的增添取决于检测器1430的检测结果1439,同时相应地更新在压缩状态寄存器1440)中的对应位置处的压缩状态掩码C-状态掩码。

当块压缩完成时(意味着已试图对所有的块值进行压缩),从压缩状态寄存器1440取得C-状态掩码并使用连结单元1460将其附接在包括经压缩的值和未压缩的值的可变长度编码的位序列1455的前面。该连结的结果是经压缩的块1490。因此,经压缩的数据块生成器1440-1460被配置为:当未压缩的数据块1410的所有数据值都已经处理时,通过连结器1460连结压缩状态掩码C状态掩码)以及可变长度编码的位序列1455来生成经压缩的数据块1490。

图15中描绘了能够解压缩图11的所述经压缩的块的示例数据解压缩设备1500的框图。数据解压缩设备1500基于图10的解压缩器1000构建,并且包括:储存单元1505,其保存部分经压缩的数据块1510(储存单元1510的大小至少是未压缩的值长度和最大码字长度中的最大者);码字检测单元1520(类似于图10的解压缩器1000的码字检测单元1020);值检索单元1530(类似于图10的解压缩器1000的值检索单元1030);以及形成经解压缩的数据块生成器的额外的逻辑1540-1570。因此,码字检测单元1520和值检索单元1530形成解压缩器。

经解压缩的数据块生成器包括:寄存器1550,用于储存压缩状态掩码,C-状态掩码,如从经压缩的数据块1510的附加部分取得的压缩状态掩码;选择器1540和1570;以及储存单元1560。经解压缩的数据块生成器在每个值解压缩步骤中读取C-状态掩码,以决定经压缩的数据块1510的当前值是经压缩的还是未压缩的,以便决定正确的数据路径。如果C-状态掩码位为1(即,当前值是经压缩的),则通过选择器1540将要移位的量选择为码字的匹配的长度,该匹配的长度是码字检测单元1520的输出,并且(通过选择器1570)将附接到其余的经解压缩值的值选择为由值检索单元1530输出的经解码的值。另一方面,如果C-状态掩码位为0(即,该值是未压缩的),则选择器1540将选择未压缩的值的长度,该长度具有固定长度并且通常基于使用的值粒度来确定(例如,如果符号粒度是4字节,则为32位)。从存储单元1505读取未压缩的值,并由选择器1570使用C-状态掩码位作为控制信号来进行选择。解压缩继续,直到经压缩的数据块1510的所有值都已被处理(即,取决于C-状态掩码位进行解压缩或读取),并形成数据值v1…vn的经解压缩的数据块1590。

因此,经解压缩的数据块生成器1540-1570被配置为:检测经压缩的数据块1510中的元数据(即,C-状态掩码),其中所述元数据指示在经压缩的数据块中包括的未压缩的数据值,并且基于检测到的元数据,通过将来自解压缩器1520、1530的经解压缩的数据值与来自经压缩的数据块1510的未压缩的数据值相组合来生成经解压缩的数据块1590,使得生成的经解压缩的数据块1590的数据值v1…Vn的次序与数据值在产生经压缩的数据块(诸如图14的块1490)的数据压缩之前在未压缩的数据块(诸如图14的块1410)中出现的次序相同。

更具体地,经解压缩的数据块生成器1540-1570因此被配置为从经压缩的数据块1510取得指示经压缩的数据值和未压缩的数据值在经压缩的数据块1510中的位置的压缩状态掩码C-状态掩码。经解压缩的数据块生成器1540-1570还被配置为通过下述方式生成经解压缩的数据块1590:所述方式即对于经压缩的数据块1510中的每个数据值,基于压缩状态掩码C-状态掩码中的相应位置处的位值,控制选择器1570选择来自解压缩器1520、1530的经解压缩的数据值或来自经压缩的数据块的未压缩的数据值。

在图27中例示了基于图25的压缩方法构建的压缩方法的示例性流程图,其能够压缩图11的块。如在图14的数据压缩设备中那样,该压缩方法通过在CT中查找块数据值以及它们是否与有效码字相关联,来检测可压缩和不可压缩的块数据值,并将该信息编码在保存于经编码的值(即,可变长度编码的位序列)之前的C-状态掩码中。

另一方面,图28例示了基于图26的解压缩方法构建的解压缩方法的示例性流程图,其能够解压缩图11的经压缩的块,该经压缩的块包括未压缩的值和经压缩的值以及掩码的混合,所述掩码位于经压缩的块的开头、指示哪些值是未压缩的而哪些值不是未压缩的。该解压缩方法在每个解压缩步骤中检查相应的C-状态条目。如果其是0,那么在被解压缩的当前值实际上是未压缩的,并且可以从保存经压缩和未压缩的值的位序列(或其一部分)的储存单元中直接读取该当前值。储存单元的最小大小由最大可变长度码字(mCL)的长度与未压缩的值的长度(unc_val_length)之间的最大者限定;然而,依然是最大可变长度码字的长度仍确定比较的最大大小。如图28的左侧路径所示,移位当前位序列以丢弃所读取的值的移位量(“长度”)是未压缩的值的长度,并且其被分配给变量“长度”。否则,该经压缩的值的解压缩遵循图28中的另一路径,并且匹配的码字的长度被取代地分配给“长度”。

虽然在可变长度经压缩的数据值块之前使用固定大小掩码的第一实例解决方案当然可以具有其益处,但是其可能具有的缺点在于该解决方案可能降低压缩效率。这是如此,因为其总是增添固定数量的位。如果压缩块中没有出现未压缩的值,则实际上不需要掩码。所以,如果未压缩的值的数量较小,则固定大小的掩码将不可避免地增加区域开销。

图12中描绘了图11的经压缩的块的可替代实例。在该实例中,如果取代地唯一特殊含义码字置于每个未压缩的值之前(即,在数据块内实现经压缩的和未压缩的数据值的混合的第二种解决方案,假设数据值的序列保持不变,如原始未压缩的块中的一样),则可以完全避免掩码。因此,可以提高压缩效率。通过计算或估计未出现在值-频率表中的所有这些值的出现频率,该唯一码字可以在码生成时与其余可变长度编码(例如,霍夫曼编码(例如图16中的可变长度编码单元1620的码表(CT)1622中的码字(CW)1625形式的码字))一起生成。例如,当一个或多个值未由这种值-频率表捕获或者从这种表逐出以为其他更频繁的值创建空间时,这可以通过增量额外计数器来计算。本领域技术人员可以实现对此的其他可能的解决方案。与之前的使用固定大小掩码的实施方式相比,以也使用值的出现频率的这种可替代方式在经压缩的块内区分未压缩的值和经压缩的值可以引起在压缩效率方面更有效的解决方案:值-频率跟踪器未捕获的值越多,则未压缩的值与出现的值的总数相比越多,附接到未压缩的值的唯一码字越窄。另一方面,未压缩的值出现的频率越小,附接到每个未压缩的值的唯一码字越宽。因此,在码生成时,未出现在值-频率表中的所有数据值与出现的数据值的总数相比的出现频率将影响唯一码字的宽度。附接到所有未压缩的值的该唯一码字从现在开始被称为“唯一未压缩的标识符码字”(UUIC)。

图16中描绘了能够形成图12的所述经压缩的数据块的示例数据压缩设备1600的框图。其包括:单元1605,该单元可以是如由上述数据压缩设备实施方式使用的储存器或关于出自未压缩的数据块1610的数据值的提取器;可变长度编码单元1620形式的压缩器;压缩指示单元1630形式的检测器;以及由UUIC附接单元1640和其他逻辑1650组成的经压缩的数据块生成器。单元1620和1630类似于图14的数据压缩设备1400的可变长度编码单元1420和压缩指示单元1430。该数据压缩设备1600按如下工作。从未压缩的数据块1610提取数据值,并且由压缩指示单元1630检查是否可以使用可变长度编码单元1620对其进行压缩。如果不是(即,该数据值将以未压缩形式被保存),则由单元1640将UUIC附接在该数据值的前面,否则使用单元1620对数据值进行编码。单元1640还包含储存单元(为清楚起见未在图16中示出),其中该存储单元保持UUIC。当生成新的UUIC时(例如,当生成新的霍夫曼编码时),更新该储存单元。由通过压缩指示单元1630的检测结果1639控制的选择器1650做出正确选择,并且进一步将所做出的正确选择附接到将形成在经压缩的数据块1690的末端的其余经压缩的数据值。如上已解释的,与图14中的数据压缩设备1400相比,数据压缩设备1600可以提高压缩效率。数据压缩设备1600超过数据压缩设备1400的第二个优点是可以省去连结器1460。因此,将不需要用于将元数据(参见图14中的C-状态掩码)连结到经压缩的数据块的单独的硬件,并且数据压缩设备1600因此可以在降低的硬件成本和增加的压缩速度方面提供进一步的改进。

因此,经压缩的数据块生成器1640-1650被配置为生成上述元数据作为唯一特殊含义码字UUIC,指示所检测到的下述数据值,所述数据值即未压缩的数据块1610中的不能被所述压缩器1620压缩的数据值。另外,经压缩的数据块生成器1640-1650被配置为在生成经压缩的数据块1690时将唯一特殊含义码字UUIC附接到每个未压缩的数据值。

另外,如从以上清楚地看出,经压缩的数据块生成器1640-1650被配置为通过下述方式生成经压缩的数据块1690:所述方式即通过按数据值在未压缩的数据块1610中出现的次序增添可变长度码字形式的经压缩的数据值或附接有唯一特殊含义码字的未压缩的数据值,来迭代地构建可变长度编码的位序列,上述对可变长度码字形式的经压缩的数据值或附接有唯一特殊含义码字的未压缩的数据值的增添取决于检测器1630的检测结果1639。

图17a中描绘了能够解压缩图12的所述经压缩的数据块的示例数据解压缩设备1700的框图。数据解压缩设备1700包括:储存单元1705,其保存部分经压缩的数据块1710(该部分大小至少是附接到未压缩的值的UUIC的总长度和最大码字长度中的最大者);码字检测单元1720(类似于图10的解压缩器1000的码字检测单元1020);值检索单元1730(类似于图10的解压缩器1000的值检索单元1030);UUIC检测单元1740;移位量计算单元1770;移位单元1750;比较器单元1760和选择器1780。码字检测单元1720和值检索单元1730因此形成解压缩器,同时单元1740-1780形成经解压缩的数据块生成器。

在每个数据值解压缩中,UUIC检测单元1740将以从保存在单元1705中的位序列的第一位开始的所有可能宽度的一个或多个位子序列作为输入。每个所述宽度可以是1位、2位、3位等,最高达等于最大UUIC宽度的最大宽度,类似于mCL那样,可以在设计、编译、配置或运行时取决于所选择的这种数据解压缩设备的实现(例如,以软件或以硬件)将所述宽度限制为特定值,如段落[0015]中所述的。码字检测单元1720使用相同的位子序列或它们的超集。UUIC检测单元1740尝试通过使用比较器1744a、1744b、1744c等将这些位序列之一与候选UUIC匹配并使用优先级编码器1748生成“匹配的UUIC的长度”来检测未压缩的数据值。虽然每个生成和使用的霍夫曼编码版本只存在一个特定长度的UUIC,但其长度不是预先知道的;因此,需要在相等比较器1744a、1744b、1744c中比较每个位子序列。然而,仅一个比较将是有效。通过使用在生成新编码时也被更新的相应无效信号使其余的无效(为清楚起见未在图17a中示出)。

利用比较器1760,由单元1740输出的“匹配的UUIC的长度”指示是否检测到UUIC。该比较器的输出是“UUIC检测标志”。“匹配的UUIC的长度”用于:a)移位量计算单元1770,其中,(使用加法器1774)将其加到储存在储存单元(例如,触发器)1776中的未压缩的值的长度(即,固定长度并且通常基于码生成期间使用的值粒度来确定,例如,如果符号粒度是4字节,则为32位);以及b)移位单元1750,其中从位序列“与未压缩的值一起的匹配的UUIC”(提取自单元1710)中移除UUIC,使得仅保留未压缩的数据值。“UUIC检测标志”用作去往选择器1772和1780的控制信号1762。移位量计算单元1770的选择器1772确定储存在1710中的位序列的移位量,使得匹配的部分(跟随有UUIC的未压缩的数据值或由单元1720检测到的码字)被移除,并且空部分由经压缩的序列的接下来的位填补。另一方面,选择器1780在未压缩的数据值和由值检索单元1730输出的经解码的值之间进行选择。所选择的值与其余的经解压缩的数据值连结在一起。继续解压缩,直到经压缩的数据块1710的所有数据值都被解压缩并形成数据值v1…vn的经解压缩的数据块1790。

因此,经解压缩的数据块生成器1740-1780被配置为检测包括在经压缩的数据块1710中的唯一特殊含义码字UUIC,并生成结果控制信号1762。经解压缩的数据块生成器1740-1780还被配置为从附接有唯一特殊含义码字的相关联的未压缩的数据值中移除所检测到的唯一特殊含义码字。

另外,经解压缩的数据块生成器1740-1780被配置为通过下述方式生成经解压缩的数据块1790:所述方式即针对经压缩的数据块1710中的每个数据值,基于控制信号1762控制选择器1780选择来自解压缩器1720、1730的经解压缩的数据值或已为其移除了所检测到的唯一特殊含义码字的未压缩的数据值。

在图17b中描绘了图17a的示例数据解压缩设备的可替代实施方式的框图。在该数据解压缩设备中,省略了比较器1760,因为UUIC检测单元1740使用比较器1744a-c以及或门1748而不是图17a的优先级编码器1748来实现。结果,UUIC检测单元1740直接生成UUIC检测标志,而不是“匹配的UUIC的长度”。取代地,“匹配的UUIC的长度”由储存单元1776a例如触发器输出,该触发器在每次生成新的霍夫曼编码时被更新,使得其对应于附接到未压缩的值的UUIC的正确长度。其余单元和逻辑类似于图17a的数据解压缩设备中的单元和逻辑。该数据解压缩设备实施方式的其他可替代实现可由本领域技术人员实现。

在图29中例示了基于图25的压缩方法构建的并且能够压缩图12的块的压缩方法的示例性流程图。所述压缩方法使用与图27的压缩方法相同的检测方法来检测块的可压缩和不可压缩的数据值。然而,其也如在图16的数据压缩设备中所述的那样,通过在未压缩的值之前附接UUIC来编码可变长度编码的位序列内的块的未压缩的数据值,该可变长度编码的位序列包括经压缩的值和未压缩的值。

在图30中例示了基于图26的方法构建的并且能够解压缩图12的经压缩的块的解压缩方法的示例性流程图,该经压缩的块包括经压缩的值和未压缩的值,其中在每个未压缩的值之前置有UUIC。与保存在储存单元中的位序列的第一位位置对准的位子序列,与第一码字(FCW)在数值上进行比较,还与附接到未压缩的值的唯一码字(UUIC)进行比较。如果所述后者比较产生匹配,则可以从储存单元直接读取未压缩的值,同时用于丢弃所读取的值的当前位序列的移位量(“长度”)是UUIC长度加上未压缩的值的长度。否则,该经压缩的值的解压缩遵循图30中的另一路径,并且匹配的码字的长度被分配给“长度”。储存单元的最小大小由下述两者中的最大者来限定,所述两者中的一者为最大可变长度码字(mCL)的长度,所述两者中的另一者为未压缩的值的长度(unc_val_length)和UUIC长度(UUIC_length)的聚合长度。

在匹配出码字(通过码字检测单元1020(或1720)所得的常规码字或通过UUIC检测单元1740所得的UUIC)之后,保持在储存单元1010(图10)或1710(图17)中的经压缩的位序列的移位量具有任意大小。任意移位量通常增加了移位器实现的复杂性。另外,由于UUIC长度和未压缩的值的固定大小长度之和(在UUIC检测之后),最大移位量可能较大。降低移位成本并可能地加速解压缩的一种方法是,在压缩期间,将未压缩的值迁移到经压缩的块的末端,并按与在原始未压缩的块中出现的次序相反的次序保存它们。图13例示了以所述新方法压缩的经压缩的块的另一实施方式(即,当形成经压缩的块时通过重新排列数据值的原始序列来在数据块内实现经压缩的和未压缩的数据值的混合的第三解决方案)。在图13的右侧,未压缩的值500已经被移动到经压缩的块的末端;为了能够在解压缩块时重建值的原始次序,对于之前附接在未压缩的值前面的UUIC,其现在对它们编码。因此,UUIC替换原始值次序中的值500,使得当其被UUIC检测单元检测时,可以在块的末端取得未压缩的值。

图18中描绘了能够形成图13的所述经压缩的数据块的示例数据压缩设备1800的框图。其包括:单元1805,该单元可以是如由上述数据压缩设备实施方式使用的储存器或关于出自未压缩的数据块1810的数据值的提取器;可变长度编码单元1820形式的压缩器;压缩指示单元1830形式的检测器;以及由UUIC储存单元1840、选择器1850、用于未压缩的数据值的储存单元1860以及连结单元1870组成的经压缩的数据块生成器。单元1820和1830分别类似于上述数据压缩设备1400和1600的可变长度编码单元和压缩指示单元。然而,当数据值被压缩指示单元1830识别为不可压缩时,从UUIC储存1840读取的UUIC被选择器1850选择并附接到可变长度编码的位序列。保持未压缩的数据值被代替地保存在针对未压缩的值的储存单元1860中。在压缩期间,该储存单元按与数据值在未压缩的数据块1810中出现的次序相反的次序保持未压缩的数据值。例如,第一个出现的未压缩的数据值(32位,假设值粒度为4字节)被保存在储存单元1860的最后位置(图18中的最右侧位置)。储存单元1860的写使能(WE)连接到压缩指示单元1830的输出。当已经处理了所有数据值时,未压缩的数据值的序列(如果它包含有效的未压缩的数据值)被附接到可变长度编码的位序列的末端并且一起形成经压缩的数据块1890。

因此,就像上面参照图16描述的经压缩的数据块生成器1640-1650一样,在图18中的经压缩的数据块生成器1840-1870被配置为生成所述元数据作为唯一特殊含义码字UUIC,指示检测到的未压缩的数据块1810中的不能被压缩器1820压缩的数据值。另外,经压缩的数据块生成器1840-1870被配置为:对于未压缩的数据块1810中的所有所检测到的不能被压缩器1820压缩的数据值,在生成的经压缩的数据块1890中按数据值在未压缩的数据块1810中出现的次序包括唯一特殊含义码字而不是相应的检测到的数据值。经压缩的数据块生成器1840-1870还被配置为:将未压缩的数据块1810中的所检测到的不能被压缩器1820压缩的数据值按与所检测到的数据值在未压缩的数据块1810中出现的次序相比相反的次序附接在所生成的经压缩的数据块1890的末端(即尾端或前端)。

另外,从上面清楚地看出,经压缩的数据块生成器1840-1870被配置为通过下述方式生成经压缩的数据块1890):所述方式即通过按数据值在未压缩的数据块1810中出现的次序增添来自压缩器1820的可变长度码字形式的每个经压缩的数据值,来迭代地构建可变长度编码的位序列。每当检测器1830检测到未压缩的数据块1810中的不能被压缩器1820压缩的数据值时,将唯一特殊含义码字UUIC增添到可变长度编码的位序列,而将所检测到的数据值保存在储存单元1860中。所检测到的数据值按与数据值在未压缩的数据块1810中出现的次序相比相反的次序保存在储存单元1860中。当已经处理了未压缩的数据块1810的所有数据值时,通过使连结器1870将可变长度编码的位序列和在储存单元1860中保存的数据值连结,来生成经压缩的数据块1890。

在图19中描绘了能够解压缩图13的经压缩的块的数据解压缩设备1900的示例实施方式的框图。数据解压缩设备1900包括:储存单元1905,其保存部分经压缩的数据块(储存单元1905的大小至少是UUIC的总长度和最大码字长度中的最大者);码字检测单元1920(类似于图10的解压缩器1000的码字检测单元1020);值检索单元1930(类似于图10的解压缩器1000的值检索单元1030);UUIC检测单元1940(类似于图17a的数据解压缩设备1700的UUIC检测单元1740);未压缩的值提取单元1960和额外逻辑。额外逻辑包括比较器单元1970、算术单元1980和选择器1950和1985。码字检测单元1920和值检索单元1930因此形成解压缩器,同时单元1940-1985形成经解压缩的数据块生成器。

未压缩的值提取单元1960包括选择器单元1968和储存单元1964,该储存单元按与未压缩的数据值放置的次序相反的次序(块末端到块开头)保持由图18的数据压缩设备所得的压缩块,在数据块的末端的次序与出现的次序相反。基于当前所检测到的未压缩的值序列号,未压缩的值提取单元1960从储存单元1964选择相应的未压缩的数据值,并通过选择器1985将其发送到其余的经解压缩的数据值,上述未压缩的值序列号由算术单元1980(例如,增量器)针对从UUIC检测单元1940输出的每个非零(由比较器单元1970验证)“匹配UUIC长度”测量所得。这样,不再从储存单元1910读取未压缩的数据值,如图17的数据解压缩设备1700或图15的1500一样,同时经压缩的位序列的最大移位量减少到UUIC长度和最大码字长度中的最大者。如果在经压缩的数据块的末端没有未压缩的数据值,则将不选择未压缩的值提取单元1960的输出,因为将不会检测到UUIC。

因此,经解压缩的数据块生成器1940-1985被配置为检测包括在经压缩的数据块1910中的唯一特殊含义码字UUIC,并生成结果控制信号1962。经解压缩的数据块生成器1940-1985还被配置为通过下述方式生成经解压缩的数据块1990:所述方式即针对经压缩的数据块1910的每个数据值并且基于控制信号1962,控制选择器1985按经压缩的数据值在经压缩的数据块1910中出现的次序选择来自解压缩器1920、1930的经解压缩的数据值,或者按与未压缩的数据值在经压缩的数据块1910中出现的次序相比相反的次序选择来自经压缩的数据块1910的未压缩的数据值。另外,经解压缩的数据块生成器1940-1985被配置为在储存单元1964中以相反次序储存经压缩的数据块1910的至少一部分的副本,其中经压缩的数据块的尾端储存在储存单元1964的开头。经解压缩的数据块生成器1940-1985还被配置为:每当检测到唯一特殊含义码字UUIC包括在经压缩的数据块1910中时,使未压缩的数据值计数器1980增量,并使用未压缩的数据值计数器1980作为指向在储存单元1964中的存储位置的指针,以向选择器1985提供未压缩的数据值。

在图31中例示了基于图25的压缩方法构建的并且能够压缩图13的块的压缩方法的示例性流程图。所述压缩方法使用与图27的压缩方法相同的检测方法来检测块的可压缩的数据值和不可压缩的数据值。然而,其使用UUIC按原始数据值次序对包含经压缩的值和未压缩的值的可变长度编码的位序列内的块的未压缩的数据值进行编码,并将实际未压缩的值以相反的出现次序(最后一个出现的值到第一个出现的值)放置在经压缩的块的末端。

图32例示了基于图26的解压缩方法构建的解压缩方法的示例性流程图,其能够解压缩图13的包括经压缩的值和未压缩的值的混合的经压缩的块,在该经压缩的块中,每个未压缩的值按原始数据值次序由UUIC替换,并且实际的未压缩的值按相反的出现次序保存在块的末端。该方法类似于图30的解压缩方法,通过尝试匹配UUIC来检测未压缩的值。不同之处在于,当检测到UUIC时,从保存在第二储存单元(“压缩”数组)中的经压缩的块的末端直接读取未压缩的值。然后从这个所述第二储存单元丢弃读取的未压缩的值(或者使数组索引增量)。此外,UUIC长度被分配给“长度”,该“长度”是储存在储存单元中的位序列的移位量。否则,经压缩的值的解压缩遵循图32中的另一路径,并且匹配的码字的长度被分配给“长度”。与之前两个实施方式不同的是,储存单元的最小大小由最大可变长度码字(mCL)的长度与UUIC长度之间的最大者限定。

当数据压缩应用在计算机系统的缓存/存储器子系统或传输网络子系统中或者应用在通信网络中时,通常发生的另一情况是用相同的公共数据值填充的数据值块。最通常的情形是相同的公共数据值是值0,因此这种块被称为空块。像霍夫曼编码那样的可变长度编码受限于最大压缩比,因为一个码字只能在最佳情况下替换数据值。在如图20左侧所描绘的另一个8个数据值的未压缩的块的实施方式中,每个值都是值0,在使用霍夫曼编码并且假定值0是如此频繁以至于可以用1位编码的情况下,经压缩的块包括8位(每个值1位),如图20右侧所描绘的。压缩这种块的另一可替代方法是将整个值块替换为一位,例如,如图21中所描绘的位1。然而,在所述压缩情形中,如果块包括除0之外的值,则其将由上述数据压缩设备之一压缩。然而,需要对额外信息进行编码,使得可以通过数据解压缩设备将压缩形式的所述块与空压缩块区分开。示例方法是在其他的可变长度编码的位序列之前放置位,例如位0,以指示其是非空块。本领域技术人员也可以找到其他方法。

图23中描绘了能够形成图21和图22的所述经压缩的块的示例数据压缩设备的框图。其基于图16的数据压缩设备1600,然而在该专利中公开的所有上述数据压缩设备,例如设备1400、1600和1800可以由本领域技术人员用作基础。与图16的数据压缩设备1600相比,图23的数据压缩设备2300中的新单元是空块检测单元2360(在图23的左侧),其在多个比较器2364a、2364b等中比较所有的块数据值是否等于相同的公共数据值0。如果为真,则将空块指示位(即,由与门2368输出)设置为“1”,并且相应地控制选择器2370以让空块指示位构成经压缩的数据块2390。否则,空块指示位被设置为“0”,并且相应地控制选择器2370以让空块指示位置于可变长度编码的位序列的其余部分之前,一起形成经压缩的数据块2390,如上述针对不同的实施方式描述的那样。本领域技术人员可以修改空块检测单元2360,以压缩包括不是值0的相同的公共数据值的其他种类的未压缩的数据块。

更普遍地,数据压缩设备(诸如2300)可以包括如上所述的任何数据压缩设备1400、1600或1800,并且另外包括公共值检测单元(诸如单元2360),配置成当未压缩的数据块(例如2310)的所有数据值具有相同的公共块数据值(例如值0)时进行检测。这样的数据压缩设备被配置为:当检测到未压缩的数据块的所有数据值都具有相同的公共块数据值时,生成仅包括指示所检测到的公共块数据值的特殊含义数据值而不包括上述经压缩的数据值、未压缩的数据值和元数据的组合的经压缩的数据块(例如2390),反之数据压缩设备被配置为:当没有检测到未压缩的数据块的所有数据值具有相同的公共块数据值时,生成包括与特殊含义数据值不同的值的经压缩的数据块,在该与特殊含义数据值不同的值之后跟随有上述经压缩的数据值、未压缩的数据值和元数据的组合。

在图24a中例示了能够解压缩如图21和图22所描绘的所述经压缩的数据块的数据解压缩设备2400的示例实施方式的框图,并且该数据解压缩设备基于图17a的数据解压缩设备1700构建。然而,在本公开内容中公开的所有上述数据解压缩设备,例如设备1500、1700和1900,可以由本领域技术人员用作基础。与图17a的其中储存单元1710保存部分经压缩的数据块1710的数据解压缩设备1700相比,在图24a的新数据解压缩设备2400中,储存单元包括:储存子单元2418,该储存子单元仅保持经压缩的数据块2410的第一位;以及储存子单元2414,该存储子单元保存如之前的部分经压缩的数据块2410。在该数据解压缩设备中并且仅在解压缩经压缩的块的开始时,检查前导位(储存在储存子单元2418中)是否为非零(或“1”)。如果为真,则经解压缩的块2490中的所有值通过多个复用器2495(在图24的右侧)分配值0;否则(如果经压缩的数据块2410的前导位为“0”),则遵循如针对图17a的数据解压缩设备1700所描述的其余步骤来解压缩该数据块。

更普遍地,数据解压缩设备(诸如2400)可以包括如上所述的任何数据解压缩设备1500、1700或1900,以及另外包括特殊含义数据值检测器(诸如2450),配置为在经压缩的数据块(诸如2410)的开头处检测特殊含义数据值,该特殊含义数据值指示公共块数据值(诸如值0),这种数据解压缩设备被配置为当检测到特殊含义数据值时通过用公共块数据值填充经解压缩的数据块来生成所述经解压缩的数据块(诸如2490),反之数据解压缩设备被配置为当未检测到特殊含义数据值时如针对任何上述实施方式所描述的那样生成经解压缩的数据块。

在图24b中描绘了所述数据解压缩设备的实施方式的可替代框图,其中,如果发现经压缩的块的前导位为非零,则经解压缩的数据值块被复位为0,假设经解压缩的块在作为触发器阵列的储存单元中被重建。该数据解压缩设备的其他可替代实现可由本领域技术人员实现。当任何其他值非常普遍地出现在相同的数据值块内时,可以实现所述数据解压缩设备的可替代实施方式。

图33例示了基于图29的压缩方法构建的压缩方法的示例性流程图,并且该压缩方法还检查所有块数据值是否均为零值,使得其以更有效率的方式压缩如图21中所描绘的所述块(称为空块);否则,其如图22中所描绘的那样进行压缩。这是通过下述方式完成的:所述方式即在压缩开始时检查所有值是否等于值0并相应地将空块指示符设置为“1”(空块指示符构成经压缩的块本身);否则,其将空块指示符设置为“0”,并且使用包括图29的压缩方法的可替代路径来压缩块,但是将空块指示符放置在经压缩的块的开头。在所述压缩方法的可替代实施方式中,可以在使用包括图29的压缩方法的可替代路径压缩每个值的同时将每个值与值0进行比较。如果它们都等于值0,则将块压缩为Null块。该压缩方法的其他实施方式可以尝试静态地或动态地压缩比值0更普遍地出现的其他值。

图34例示了基于图30的解压缩方法构建的解压缩方法的示例性流程图,并且其通过检查块的第一位是否等于“1”,能够检测块是否被压缩为空块。在这种情况下,经解压缩的块的所有数据值都被分配值为0;否则,使用包括图30中所例示的方法的可替代路径来解压缩块。该解压缩方法的其他实施方式可以静态地或动态地包括比值0更普遍地出现的其他值。

在数据压缩设备和/或数据解压缩设备的所有上述实施方式中,本领域技术人员可以插入延迟单元诸如触发器,使得一个块的数据值的压缩或/和一个经压缩的块的值的解压缩可以流水线化为多个阶段,以减少时钟周期时间并增加处理(压缩或/和解压缩)吞吐量。

此外,可以由本领域技术人员并根据本身公知的技术,通过同时压缩多个块的数据值和/或解压缩多个经压缩的块的数据值,来使本公开内容中公开的数据压缩设备和/或数据解压缩设备的可替代实施方式并行化。在这种情况下,需要由本领域技术人员相应地修改解压缩器设计。

在图14、16、18和23中的相应数据压缩设备1400、1600、1800、2300可以例如以硬件实现,例如,实现为在集成电路中的数字电路、专用设备(例如存储器控制器)、可编程处理设备(例如中央处理单元(CPU)或数字信号处理器(DSP)、现场可编程门阵列(FPGA)等。在本公开内容中描述的相应数据压缩方法的功能可以例如由适当配置的相应数据压缩设备1400、1600、1800、2300执行,或者作为包括代码指令的相应计算机程序产品,该代码指令当由通用处理设备诸如CPU或DSP加载和执行时,引起相应方法的执行。

在图15、17、19、24a和24b中的相应数据解压缩设备1500、1700、1900、2400可以例如以硬件实现,例如,实现为在集成电路中的数字电路、专用设备(例如存储器控制器)、可编程处理设备(例如中央处理单元(CPU)或数字信号处理器(DSP)、现场可编程门阵列(FPGA)等。在本公开内容中描述的相应数据解压缩方法的功能可以例如由适当配置的相应数据解压缩设备1500、1700、1900、2400执行,或者作为包括代码指令的相应计算机程序产品,该代码指令当由通用处理设备诸如CPU或DSP(例如图1-5的任何处理单元P1…Pn)加载和执行时,引起相应方法的执行。

本文公开的示例实施方式提出了用于下述数据块压缩和解压缩的方法、设备和系统,以便更紧凑地存储或传输信息,所述数据块压缩和解压缩即:在计算机系统的缓存/存储器子系统中的或用于该缓存/存储器子系统的数据块压缩和解压缩、在计算机系统的数据传输子系统中的或用于该数据传输子系统的数据块压缩和解压缩、或者在通信网络中的或用于该通信网络的数据块压缩和解压缩。

图35例示了根据本发明的通用系统3500。该系统包括一个或多个存储器3510、数据压缩设备3520(诸如,例如任何数据压缩设备1400、1600、1800、2300)和数据解压缩设备3530(诸如,例如任何数据解压缩设备1500、1700、1900、2400)。有利地,系统3500是计算机系统(诸如图1-5的任何计算机系统100-500),并且所述一个或多个存储器3510是一个或多个缓存存储器(诸如,图1-5的任何缓存存储器L1-L3)、一个或多个随机存取存储器(诸如图1-5的任何存储器130-530)、或一个或多个辅助储存器。可替代地,系统3500是数据通信系统(诸如,图6-7的通信网络600、700),其中所述一个或多个存储器3510可以是与数据通信系统中的发射节点和接收节点相关联的数据缓冲器(诸如,图6-7的发射器610、710和接收器620、720)。

虽然使用示例实施方式描述了本发明的方面,但是它们不限于所公开的实施方式,而且它们覆盖可由本领域技术人员实现的可替代实施方式。

应该注意的是,在以下编号的条款中限定了可替代的发明方面,特别指向在图11、14和15中示出并针对其描述的相关但目前未要求保护的设计。

I.一种数据压缩设备,用于将包括一个或多个数据值的未压缩的数据块压缩为经压缩的数据块,该数据压缩设备包括:

压缩器,所述压缩器被配置为将未压缩的数据块的数据值压缩为对应的可变长度码字;

检测器,所述检测器被配置为检测未压缩的数据块中的不能被所述压缩器压缩的数据值;以及

经压缩的数据块生成器,所述经压缩的数据块生成器被配置为通过将下述相组合生成经压缩的数据块:

·经压缩的数据值,所述经压缩的数据值处于与未压缩的数据块中的被压缩器压缩的数据值相对应的可变长度码字的形式;

·未压缩的数据值,所述未压缩的数据值处于未压缩的数据块中的所检测到的不能被压缩器压缩的数据值的形式;以及

·元数据,所述元数据指示未压缩的数据值。

II.根据条款I所述的数据压缩设备,其中,经压缩的数据块生成器包括至少一个选择器,该至少一个选择器对检测器的检测结果为响应性的,并且被配置为通过组合在一个或多个步骤中的可变长度码字、所检测到的数据值以及元数据来生成经压缩的数据块。

III.根据前述条款中任一项所述的数据压缩设备,其中,所述检测器被配置为将未压缩的数据块中不能被所述压缩器压缩的数据值检测为下述中的一种或多种:

不存在于压缩器的码表中的数据值,

存在于码表中但在压缩器的码表中缺少码字的数据值,

存在于码表中、在码表中具有码字但在压缩器的码表中被指示为无效的数据值。

IV.根据任一项前述条款所述的数据压缩设备,

其中,经压缩的数据块生成器包括压缩状态寄存器,用于储存压缩状态掩码形式的所述元数据,以指示经压缩的数据块中的经压缩的数据值和未压缩的数据值的位置;以及

其中,经压缩的数据块生成器被配置为将来自压缩状态寄存器的压缩状态掩码包括在生成的数据块中。

V.根据条款IV所述的数据压缩设备,经压缩的数据块生成器包括连结器,其中,经压缩的数据块生成器被配置为:

通过按数据值在未压缩的数据块中出现的次序增添可变长度码字形式的经压缩的数据值或未压缩的数据值,来迭代地构建可变长度编码的位序列,同时相应地更新在压缩状态寄存器中在相应位置的压缩状态掩码,上述对可变长度码字形式的经压缩的数据值或未压缩的数据值的增添取决于检测器的检测结果;以及

当未压缩的数据块的所有数据值都已经被处理时,通过连结器连结压缩状态掩码和可变长度编码的位序列来生成经压缩的数据块。

VI.根据任一项前述条款所述的数据压缩设备,还包括公共值检测单元,该公共值检测单元被配置为检测未压缩的数据块的所有数据值何时具有相同的公共块数据值,

其中,数据压缩设备被配置为:当检测到未压缩的数据块的所有数据值具有相同的公共块数据值时,生成仅包括指示所检测到的公共块数据值的特殊含义数据值而不包括上述的经压缩的数据值、未压缩的数据值和元数据的组合的经压缩的数据块;以及

其中,数据压缩设备被配置为:当没有检测到未压缩的数据块的所有数据值具有相同的公共块数据值时,生成包括与所述特殊含义数据值不同的值且在该与所述特殊含义数据值不同的值之后跟随有上述的经压缩的数据值、未压缩的数据值和元数据的组合的经压缩的数据块。

VII.一种数据解压缩设备,用于将经压缩的数据块解压缩为包括一个或多个数据值的经解压缩的数据块,该数据解压缩设备包括:

解压缩器,所述解压缩器被配置为将经压缩的数据块的可变长度码字解压缩为对应的经解压缩的数据值;以及

经解压缩的数据块生成器,所述经解压缩的数据块生成器被配置为:

检测在经压缩的数据块中的元数据,所述元数据指示包括在经压缩的数据块中的未压缩的数据值;以及

基于所检测到的元数据,通过下述方式生成所述经解压缩的数据块:所述方式即组合来自解压缩器的经解压缩的数据值和来自经压缩的数据块的未压缩的数据值,使得所生成的经解压缩的数据块的数据值的次序与所述数据值在产生经压缩的数据块的数据压缩之前在未压缩的数据块中出现的次序相同。

VIII.根据条款VII所述的数据解压缩设备,其中,经解压缩的数据块生成器被配置为:

从所述经压缩的数据块取得压缩状态掩码形式的所述元数据,该压缩状态掩码指示经压缩的数据块中的经压缩的数据值和未压缩的数据值的位置;以及

通过下述方式生成经解压缩的数据块:所述方式即针对经压缩的数据块中的每个数据值,基于在压缩状态掩码中的相应位置处的位值,控制选择器选择来自解压缩器的经解压缩的数据值或来自经压缩的数据块的未压缩的数据值。

IX.根据条款VII-VIII中任一项所述的数据解压缩设备,还包括特殊含义数据值检测器,所述特殊含义数据值检测器被配置为在经压缩的数据块的开头处检测指示公共块数据值的特殊含义数据值,

其中,数据解压缩设备被配置为:当检测到特殊含义数据值时,通过用公共块数据值填充经解压缩的数据块来生成所述经解压缩的数据块;以及

其中,数据解压缩设备被配置为:当没有检测到特殊含义数据值时,如条款VII-VIII中任一项所述的生成经解压缩的数据块。

X.一种数据压缩方法,用于将包括一个或多个数据值的未压缩的数据块压缩为经压缩的数据块,该数据压缩方法包括:

将未压缩的数据块的数据值压缩为对应的可变长度码字;

检测未压缩的数据块中的不能被所述压缩器压缩的数据值;以及

通过将下述相组合生成经压缩的数据块:

·经压缩的数据值,所述经压缩的数据值处于与未压缩的数据块中的被压缩器压缩的数据值对应的可变长度码字的形式;

·未压缩的数据值,所述未压缩的数据值处于未压缩的数据块中的所检测到的不能被所述压缩器压缩的数据值的形式;以及

·元数据,所述元数据指示未压缩的数据值。

该数据压缩方法可以包括根据条款I-VI的数据压缩设备的任何功能特征。

XI.一种数据解压缩方法,用于将经压缩的数据块解压缩为包括一个或多个数据值的经解压缩的数据块,该数据解压缩方法包括:

将经压缩的数据块的可变长度码字解压缩为对应的经解压缩的数据值;

检测在经压缩的数据块中的元数据,所述元数据指示包括在经压缩的数据块中的未压缩的数据值;以及

基于检测到的元数据,通过下述方式生成经解压缩的数据块:所述方式即组合来自解压缩器的经解压缩的数据值和来自经压缩的数据块的未压缩的数据值,使得生成的经解压缩的数据块的数据值的次序与所述数据值在产生经压缩的数据块的数据压缩之前在未压缩的数据块中出现的次序相同。

该数据解压缩方法可以包括根据条款VII-IX的数据压缩设备的任何功能特征。

XII.一种系统,所述系统包括一个或多个存储器、根据条款I-VI中任一项所述的数据压缩设备和根据条款VII-IX中任一项所述的数据解压缩设备。

XIII.根据条款XII所述的系统,其中,该系统是计算机系统,并且其中,所述一个或多个存储器来自由以下构成的组:

缓存存储器,

随机存取存储器,以及

辅助存储装置。

XIV.根据条款XII所述的系统,其中,系统是数据通信系统,并且其中,所述一个或多个存储器是数据缓冲器。

XV.一种计算机程序产品,所述计算机程序产品包括代码指令,所述代码指令当由处理设备加载和执行时引起根据条款X所述的方法的执行。

XVI.一种计算机程序产品,所述计算机程序产品包括代码指令,所述代码指令当由处理设备加载和执行时引起根据条款XI所述的方法的执行。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1