CN113366765A - 减少锁存器计数以节省用于动态霍夫曼表生成的硬件面积 - Google Patents
减少锁存器计数以节省用于动态霍夫曼表生成的硬件面积 Download PDFInfo
- Publication number
- CN113366765A CN113366765A CN202080012147.6A CN202080012147A CN113366765A CN 113366765 A CN113366765 A CN 113366765A CN 202080012147 A CN202080012147 A CN 202080012147A CN 113366765 A CN113366765 A CN 113366765A
- Authority
- CN
- China
- Prior art keywords
- bit
- symbol
- counts
- count
- accelerator
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
- H03M7/4043—Adaptive prefix coding
- H03M7/405—Tree adaptation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/01—Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/01—Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
- G06F5/012—Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising in floating-point computations
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3086—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
- H03M7/4043—Adaptive prefix coding
- H03M7/4062—Coding table adaptation
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6011—Encoder aspects
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6058—Saving memory space in the encoder or decoder
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明的实施例涉及DEFLATE压缩加速器以及用于在生成动态霍夫曼表时减少符号排序所需的锁存器计数的方法。加速器包括输入缓冲器和通信地耦接到输入缓冲器的输出的Lempel‑Ziv 77(LZ77)压缩器。加速器还包括可通信地耦接到LZ77压缩器的霍夫曼编码器。霍夫曼编码器包含一位转换器。所述加速器还包括通信地耦接到所述霍夫曼编码器的输出缓冲器。
Description
背景技术
本发明涉及数字计算机系统,更具体地说,涉及数字计算机系统中采用的数字数据压缩和解压缩方案。
数字计算机系统执行数据压缩以实现有限存储空间的更有效使用。计算机系统通常包括称为压缩加速器的硬件组件,其接受来自主机系统的工作请求或数据请求,以压缩或解压缩所请求数据的一个或多个块。当设计加速器以执行压缩时,在与可能的压缩比相比待压缩的输入数据的大小与由压缩数据导致的等待时间之间存在折衷。
压缩加速器通常利用“DEFLATE”算法,该算法是将Lempel-Ziv(例如,LZ77)压缩算法与霍夫曼编码算法组合以执行压缩的无损压缩方案。来自霍夫曼算法的计算输出可以被看作用于编码源符号(例如文件中的字符)的可变长度码表。霍夫曼算法从源符号的每个可能值的所估计的出现概率或频率(权重)得到该表。
为了最大化使用DEFLATE算法获得的压缩比,根据符号的出现频率将符号编码到可变长度码表中。换句话说,最频繁的符号用最少的位编码,而相对较不常见的符号用相对较多的位编码。这导致压缩数据流所需的存储空间的直接减少。因为符号是基于其相对频率而编码的,所以必须对每个符号的出现计数进行排序。在该过程期间对符号计数(频率)进行排序在面积(所需的锁存器和宽度比较器的数量)、功率和计时/布线考虑方面是昂贵的。
发明内容
本发明的实施例针对一种加速器,例如DEFLATE压缩加速器,其被配置为在动态霍夫曼表生成期间减少所需的锁存器计数。加速器的非限制性示例包括输入缓冲器和通信地耦接到输入缓冲器的输出的Lempel-Ziv 77(LZ77)压缩器。加速器还包括可通信地耦接到LZ77压缩器的霍夫曼编码器。霍夫曼编码器包括位转换器。加速器还包括通信地耦接到霍夫曼编码器的输出缓冲器。
在本发明的一些实施例中,位转换器是24位到10位转换器。
在本发明的一些实施例中,位转换器被配置为基于第一符号计数生成5位移位字段和5位尾数(mantissa)。
在本发明的一些实施例中,位转换器还被配置为级联5位移位字段和5位尾数以生成第二符号计数。
本发明的实施例涉及一种用于在生成动态霍夫曼表时减少符号排序所需的锁存器计数的方法。该方法的非限制性示例包括确定多个第一符号计数。第一符号计数中的每一个包括第一位宽。该方法还包括生成多个第二符号计数。第二符号计数是基于第一符号计数的减少位映射。多个第二符号计数按频率排序,并用于生成动态霍夫曼树。
在本发明的一些实施例中,基于具有多个第一符号计数的第一符号生成5位移位字段和5位尾数。
在本发明的一些实施例中,5位移位字段对第一符号的最高有效非零位的位置进行编码。
在本发明的一些实施例中,5位尾数对第一符号的最高有效非零位和接下来的四位进行编码。
在本发明的一些实施例中,5位尾数对第一符号的最高有效非零位之后的接下来五位进行编码。
本发明的实施例针对一种用于在生成动态霍夫曼表时减少符号排序所需的锁存器计数的计算机程序产品。计算机程序产品的非限制性示例包括可由电子计算机处理器执行以控制计算机系统执行操作的程序指令。该操作可以包括确定多个第一符号计数。第一符号计数中的每一个包括第一位宽。该操作还可以包括生成多个第二符号计数。第二符号计数是基于第一符号计数的减少位映射。多个第二符号计数按频率排序,并用于生成动态霍夫曼树。
本发明的实施例针对一种用于在生成动态霍夫曼表时减少符号排序所需的锁存器计数的系统。该系统的非限制性示例包括加速器、具有计算机可读指令的存储器、以及被配置为执行计算机可读指令的处理器。计算机可读指令在由处理器执行时使加速器执行一种方法。该方法可以包括确定多个第一符号计数,第一符号计数中的每一个包括第一位宽。可以生成多个第二符号计数。第二符号计数中的每一个可以是基于多个第一符号计数中的符号计数的映射。第二符号计数可以包括小于第一位宽的第二位宽。该方法还可以包括按频率对多个第二符号计数进行排序,并且基于排序后的多个第二符号计数来生成动态霍夫曼树。
本发明的实施例涉及一种方法。该方法的非限制性示例包括从输入缓冲器接收包括第一符号的数据流。可以基于第一符号来确定具有第一位宽的第一符号计数。该方法可以包括基于第一符号计数生成5位移位字段和5位尾数。通过级联5位移位字段和5位尾数,可以生成具有第二位宽的第二符号计数。该方法可以包括对第二符号计数的频率进行排序。
通过本发明的技术实现了附加的技术特征和益处。本发明的实施例和方面在本文中详细描述,并且被认为是所要求保护的主题的一部分。为了更好地理解,参考详细描述和附图。
附图说明
在说明书的结尾处的权利要求中特别指出并清楚地要求了本文描述的专有权的细节。从下面结合附图的详细描述中,本发明的实施例的前述和其它特征和优点是显而易见的,在附图中:
图1A和1B描述了根据本发明的各种实施例生成的霍夫曼树;
图2示出了根据本发明的各种实施例的能够压缩和解压数据的计算机系统的框图;
图3示出了根据一个或多个实施例的加速器的框图;
图4示出图3所示的加速器的霍夫曼编码器的部分;
图5示出了图4所示的霍夫曼编码器的DHT生成器的排序模块的部分;
图6是示出根据非限制性实施例的方法的流程图;以及
图7是示出根据另一非限制性实施例的方法的流程图。
这里描述的图是说明性的。在不脱离本发明的精神的情况下,可以存在对其中描述的图或操作进行的多个变型。例如,可以以不同的顺序执行动作,或者可以添加、删除或修改动作。此外,术语“耦接”及其变型描述了在两个元件之间具有通信路径,但不暗示元件之间的直接连接,而在它们之间没有中间元件/连接。所有这些变化都被认为是说明书的一部分。
在附图和以下对所公开的实施例的详细描述中,附图中所示的各种元件具有两个或三个数字参考标号。除了次要的例外,每个参考数字的最左边的数字对应于其中首先示出其元件的图。
具体实施方式
在此参考相关附图描述本发明的各种实施例。在不偏离本发明的范围的情况下,可以设计本发明的替代实施例。在以下描述和附图中,在元件之间阐述了各种连接和位置关系(例如,上方、下方、相邻等)。除非另有说明,否则这些连接和/或位置关系可以是直接的或间接的,并且本发明并不旨在在这方面进行限制。因此,实体的耦接可以指直接或间接耦接,并且实体之间的位置关系可以是直接或间接位置关系。此外,本文所述的各种任务和过程步骤可并入具有本文未详细描述的额外步骤或功能性的更全面的程序或过程中。
以下定义和缩写用于解释权利要求和说明书。如本文所用,术语“包含”、“包括”、“具有”、“含有”或其任何其它变型旨在涵盖非排他性的包括。例如,包括一系列元素的组合物、混合物、工艺、方法、制品或装置不一定仅限于那些元素,而是可以包括未明确列出的或此类组合物、混合物、工艺、方法、制品或装置固有的其他元素。
另外,术语“示例性”在本文中用于表示“用作示例、实例或说明”,本文描述为“示例性”的任何实施例或设计不一定被解释为比其它实施例或设计优选或有利。术语“至少一个”和“一个或多个”可被理解为包括大于或等于一的任何整数,即,一、二、三、四等。术语“多个”可以被理解为包括大于或等于二的任何整数,即二、三、四、五等。术语“连接”可包括间接“连接”和直接“连接”两者。
术语“约”、“基本上”、“大约”及其变体旨在包括与基于提交本申请时可用的设备的特定量的测量相关联的误差度。例如,“约”可以包括给定值的±8%或5%或2%的范围。
为了简洁起见,与制造和使用本发明的方面相关的常规技术可以或可以不在本文中详细描述。特别地,用于实现本文描述的各种技术特征的计算系统和特定计算机程序的各个方面是公知的。因此,为了简洁起见,许多常规实现细节在本文中仅简要提及或完全省略,而不提供众所周知的系统和/或过程细节。
现在转到与本发明的方面更具体相关的技术的概述,由应用的数据压缩算法产生的数据表示大小的减小通常被称为压缩比(C/R)。压缩比可以被定义为未压缩大小和压缩大小之间的比率。因此,随着压缩比的增加,实现了计算机系统的存储空间的更有效使用,从而提高了计算机系统的整体性能。
DEFLATE数据压缩算法是一种常用的压缩数据的方法。当压缩数据时,DEFLATE算法有两个主要部分:(1)用于识别重复字符串的LZ77压缩和(2)该信息的霍夫曼编码。
LZ77压缩阶段试图在先前编码的源操作数中找到重复字符串。当发现匹配时,LZ77压缩阶段不输出重复字符串的文字(literal)字符,而是输出从重复字符串到在先前数据集历史中的原始(匹配)串的“距离”,以及数据的匹配“长度”。例如,假设输入操作数包含以下符号:ABBACBABBAABBABBA。该操作数可以被编码为:
文字字节A;文字字节B;文字字节B;文字字节A;文字字节C;文字字节B;距离6,长度4(这编码“ABBA”);距离4,长度8(这编码“ABBAABBA”)
可以看出,在输入操作数数据中可以找到的重复字符串越多,输出可以被压缩得越多。有两种方式可以检查输入操作数历史以查找匹配字符串:内联(inline)历史,以及经由循环历史缓冲器。对于内联历史,LZ77压缩器只查看先前来自源操作数的输入。对于循环历史缓冲器,将输入数据复制(实际复制或概念复制)到循环历史缓冲器,然后搜索该缓冲器中的数据以寻找匹配。在任一情况下,DEFLATE标准允许回溯至32KB以匹配字符串。
霍夫曼编码阶段是基于LZ77压缩器所产生的符号的概率和分布。霍夫曼编码背后的思想是,可以用可变位长度来编码符号,使得用很少的位来编码频繁的符号,而用许多位来编码稀有的符号。以这种方式,从LZ77压缩器获得的数据的进一步压缩是可能的。
对于该编码过程,DEFLATE标准支持三种类型的压缩数据块:文字拷贝块、固定霍夫曼表(FHT)和动态霍夫曼表(DHT)。FHT块是静态的,而DHT块包括:霍夫曼树的高度压缩版本、随后是使用该树编码的表示压缩数据的符号。
示例霍夫曼树在图1A和1B中示出。如图1A所示,霍夫曼树可以是高度不对称的,其中大多数节点(也称为叶子)沿着树的单个分支出现。可替代地,可以如图1B所示压缩霍夫曼树,其中,叶子分布遍历各个可用分支。在任一情况下,霍夫曼树被构造成使得叶子(节点)的深度由对应于每个叶子的符号的频率来确定。换句话说,叶子的深度由它的符号频率来确定。
表1说明了对应于图1A中描述的霍夫曼树的示例性DHT。表1中所示的DHT被构造为使得具有相对较高计数/频率的符号使用相对较短的码长度来编码。
表1:动态霍夫曼表
如表1所示,“A”和“E”符号具有最低频率,每个仅出现100次。“D”符号具有次高频率,并且在数据集中出现200次。“C”符号在数据集中出现400次,而“B”符号出现最频繁,出现800次。如表1中进一步所示,“A”符号被编码为二进制数“1110”,“B”符号被编码为“0”,“C”符号被编码为“10”,“D”符号被编码为“110”,“E”符号被编码为“1111”。
用最少的位来编码最频繁的符号(例如,上述例子中的“B”)使得压缩数据流所需的存储空间的直接减少。例如,出现800次的“B”符号在每次出现时可以被表示单个“0”位。因此,只需要800位(100字节)来存储“B”符号的每次出现。较低频率的符号“E”可以被表示为较长的二进制代码,例如“1111”。结果,“E”符号的100次出现需要400位(50字节)的存储。继续该示例,表1中描绘的符号可以使用总共375字节来编码。在不使用DHT的情况下,这个相同数据需要1600字节的存储。
为了增加DEFLATE压缩的速度,该霍夫曼树生成过程可以在硬件中实现。DEFLATE中的LZ77算法使用256个文字(ASCII值0x00-xFF)、29个长度符号和30个距离符号用于压缩。长度符号和距离符号表示数据流(数据历史)中的匹配字符串的距离和长度。由于长度总是跟随有距离,因此可以建立一个DHT来编码文字、块结束符号和长度符号。这需要总共286个符号字母。可以为距离符号构建第二DHT。这需要总共30个符号字母。
与霍夫曼树生成过程相关的一个挑战是,实际上难以用正确的符号填充每个DHT叶子。对于每个叶子,需要具有次高频率的符号。换句话说,必须确定、存储和排序每个符号的频率。这种排序过程在面积(所需的锁存器和宽度比较器的数量)、功率、和计时/布线考虑方面可能是昂贵的。
为了说明这一点,考虑对2N个字节的数据的LZ77压缩。为了将所有286个字母表符号完全(唯一地)编码到霍夫曼编码器的第一DHT中(即,编码文字、块结束和长度符号的DHT)将需要N位计数器。例如,使用所有286个符号对16MB数据进行LZ77压缩将需要24位计数器。在另一示例中,使用所有286个符号对32MB数据进行LZ77压缩将需要25位计数器。
为了存储与这286个符号中的每一个相关联的计数,排序块可以用于存储286个“符号、计数”对。在硬件实现中,这些对被存储在锁存器中。继续前面的例子,为了存储286个具有24位计数器的符号,需要6,864个锁存器(有时称为触发器)。虽然这一锁存器需求已经是面积密集的,但是对于计数器所需的每个附加位,所需锁存器的数量增加N。例如,使用25位计数器存储286个符号(对于32MB的数据流)需要7,150个锁存器。类似地,使用26位计数器存储286个符号(对于64MB的数据流)需要7,436个锁存器。
现在转到对本发明教导的各方面的概述,一个或多个实施例通过提供用于减少在生成动态霍夫曼表时符号排序所需的锁存器计数的新加速器硬件和软件实现方式,解决了现有技术的上述缺点。通过在排序之前将从LZ77压缩器接收的X位符号频率(有时称为“LZ计数”)映射到需要少于X个位(即X大于Y)的Y位类浮点表示来减少锁存器计数。以下过程是关于24位计数器来明确说明的,然而,应理解,低计数映射可适于对任何N位计数器起作用。仅为了易于讨论而选择24位计数器。
在本发明的一些实施例中,24位计数器(用于16MB的数据)可被映射到10位值。为了实现这一点,24位值被映射到5位指数(也称为移位字段)和5位尾数(也称为最高有效位)。
5位指数表示24位计数器中的第一个“1”的位置(该位被称为移位位)。数学上,5位指数是获得原始值所需的移位量。例如,24位值“000000010110111100010101”中的第一个(最高有效)“1”出现在第17位数字(从右侧读取)。第17位数字可被编码为5位二进制数“10001”。
一旦知道了这个移位,就可以丢弃该移位位左边的“0”位,而不会丢失任何信息。注意,需要5位指数来存储24位计数器中的移位位的每个可能位置(需要5个二进制数字来唯一地编码24个移位可能性)。虽然被示为5位指数,但是位数可以更多或更少,这取决于被映射的基础计数器。例如,32位计数器需要6位指数来用于移位的穷举映射。
5位尾数包含存在于24位计数器中的非零数据的五个最高有效位。在本发明的一些实施例中,5位尾数包括移位位,而在其它实施例中,移位位被跳过。例如,从先前示例“000000010110111100010101”生成的5位尾数是“10110”(当包括移位位和接下来的四位数字时)和“01101”(当跳过移位位并且包括接下来的五位数字时)。
在任一情况下,这些5位值然后被组合以提供24位计数器的10位多对一映射。“多对一”映射是指两个或两个以上输入值将映射到同一输出值的任何映射。继续前面的例子,多个24位计数器将映射到相同的10位值。
虽然两种方法都是可能的并且在本发明的预期范围内,但是第二种方法利用一个额外的数据位(移位位不被重复使用)。因此,第二种方法可以减少使用第一种方法生成的多对一映射的数量。继续前面的24位的示例,第一种方法(移位位是尾数的第一个数字)导致32-1映射,而第二种方法(忽略移位位)导致16-1映射。为了说明,对于具有值“1____XXXXX”的LZ计数(其中“_”表示在所有LZ计数中相同的位值,“X”表示不同的位值),所有这些32个数字都被映射成1个数字(即,32:1映射)。可替代地,对于具有值“1____XXXX”的LZ计数,这些数字中只有16个数字被映射成1个数字(即,16:1映射)。
为了进一步说明这一点,分别考虑数字929和959的24位表示的10位映射“1110100000”和“1110111111”(前导零已被丢弃)。重复使用移位位(这里,从右边起第10位数字,具有二进制值“01010”)导致相同的10位数:“01010,11101”和“01010,11101”。然而,忽略尾数中的移位位导致唯一的10位数“01010,11010”和“01010,11011”。
以这种方式(移位、尾数)构造多对一映射导致每个符号的精确计数(或频率)的丢失,但是保留了符号的相对频率分布。例如,考虑在16MB数据流中分别具有频率计数11、104、418、1117的符号“A”、“B”、“C”和“D”。24位计数器可以完全编码排序块中所有286个符号的精确“符号、计数”对。10位映射(5位移位,5位尾数)将丢失这些符号的精确计数值,但将保留相对频率(即,D计数>=C计数>=B计数>=A计数)。
因为相对符号频率被保留,所以可以减少锁存器计数,而不影响DHT树质量。换句话说,本公开允许在不知道符号的准确频率的情况下填充霍夫曼树。而且,因为压缩(deflate)算法不允许DHT树超过15个级别的深度(即编码长度应该是15位或更少),允许对高频符号进行多对一映射不会将错误引入DHT树。
减少用于给定的排序块的锁存器的数量释放了宝贵的晶片面积,减少了功耗,并且简化了加速器硬件的计时/布线。继续前面的示例,在对块进行排序之前将24位计数器映射到10位值将所需锁存器的数量从6,864个锁存器(24×286)减少到2,860个锁存器(10×286)。此外,10位值的使用简化了稍后的排序步骤,因为10位比较器可代替常规24位比较器。这导致进一步的面积节省。
在本发明的一些实施例中,指数(移位)和尾数的宽度是固定的(例如,如前所述,每个5位)。在本发明的一些实施例中,可动态调整指数(移位)和尾数的宽度。例如,可以根据LZ计数范围来调整宽度。
为了说明,考虑被实现为以“移位,尾数”格式表示LZ计数的“K”个位(即,在使用5位指数和5位尾数的先前例子中,“K”是10)。根据LZ计数的上限,“i”个位可以被分配给移位位并且“K-i”个位可以被分配给尾数。这导致对于相同的固定硬件成本在排序精度方面的有限改进。
表2示出了基于各种LZ计数范围的示例性动态宽度。如表2所示,通过动态地向尾数分配额外的位,多对一映射可以随着LZ计数范围的增大而减小。虽然表1示出了将单个位从移位字段移位到尾数,但是其它动态调整也是可能的。
表2:动态移位和尾数宽度
在本发明的一些实施例中,基于LZ计数范围,移位字段的宽度被做得尽可能小,从而释放额外位以用于尾数。移位字段的宽度可以被减小,直到位的丢失将导致一些移位位位置不再是唯一可分配的点为止。
现在参考图2,根据本公开的非限制性实施例示出了计算机系统10。计算机系统10可以是基于例如由国际商业机器公司(IBM)提供的z/体系结构。然而,该体系结构仅是计算机系统10的一个示例,并且不旨在对本文所述的实施例的使用范围或功能提出任何限制。其它系统配置也是可能的。无论如何,计算机系统10能够被实现和/或执行上文所阐述的任何功能。
计算机系统10可与众多其它通用或专用计算系统环境或配置一起操作。可适于与计算机系统/服务器12一起操作的众所周知的计算系统、环境和/或配置的示例包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、蜂窝电话、手持型或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费型电子产品、网络PC、小型计算机系统、大型计算机系统及包括以上系统或设备中的任一者的分布式云计算环境等。
可在由计算机系统10执行的计算机系统可执行指令(诸如,程序模块)的一般情境下描述计算机系统10。通常,程序模块可包括执行特定任务或实现特定抽象数据类型的例程、程序、目标程序、组件、逻辑、数据结构等。计算机系统10可在通过通信网络链接的远程处理设备执行任务的分布式云计算环境实践。在分布式计算环境中,程序模块可位于包括存储器存储设备的本地和远程计算机系统存储介质两者中。
如图2所示,计算机系统10以通用计算设备的形式被描述,该通用计算设备也被称为处理设备。计算机系统10的组件可以包括但不限于一个或多个处理器或处理单元16、压缩加速器17、系统存储器28以及将包括系统存储器28在内的各种系统组件耦接到处理单元16的总线18。
压缩加速器17可以被实现为硬件或硬件和软件两者,并且可以包括根据一个或多个实施例的用于使用DEFLATE数据压缩算法来压缩数据的功能和模块。在本发明的一些实施例中,压缩加速器17可以接收输入缓冲器上的数据,使用LZ77压缩器处理该数据,使用霍夫曼编码器编码该数据,并且将该数据输出到输出缓冲器。图3中描绘了压缩加速器17的实施例。
在本发明的一些实施例中,压缩加速器17可被直接连接到总线18(如所描绘的)。在本发明的一些实施例中,压缩加速器17连接到RAM 30/高速缓存32与处理单元16之间的总线18。在本发明的一些实施例中,压缩加速器17被直接连接到高速缓存32(例如,L3高速缓存),而不是总线18。在本发明的一些实施例中,压缩加速器17被直接连接到处理单元16。
总线18表示几种类型的总线结构中的任何一种或多种,包括存储器总线或存储器控制器、外围总线、加速图形端口、以及处理器或使用多种总线体系结构中的任何总线体系结构的局域总线。作为示例而非限制,这样的体系结构包括工业标准体系结构(ISA)总线,微通道体系结构(MCA)总线,增强型ISA(EISA)总线,视频电子标准协会(VESA)局域总线和外围组件互连(PCI)总线。
计算机系统10可包括多种计算机系统可读介质。这些介质可以是能够被计算机系统/服务器10访问的任意可获得的介质,它包括易失性和非易失性介质,可移动和不可移动的介质。
系统存储器28可以包括操作系统(OS)50以及易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存32。计算机系统10可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为示例,存储系统34可以用于读写不可移动的、非易失性磁介质(未示出并且通常称为“硬盘驱动器”)。尽管未示出,但是可以提供用于对可移动非易失性磁盘(例如,“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(诸如CD-ROM,DVD-ROM或其它光学介质)读写的光盘驱动器。在这种情况下,每个驱动器可以通过一个或多个数据介质接口连接到总线18。如下面将进一步描绘和描述的,存储器28可以包括至少一个程序产品,该程序产品具有一组(例如,至少一个)程序模块,这些程序模块被配置为执行本公开的实施例的功能。
OS 50控制其它计算机程序的执行,并提供调度、输入-输出控制、文件和数据管理、存储器管理、以及通信控制和相关服务。OS 50还可以包括库API(图1中未示出)。库API是包括用于执行由诸如加速器(图1中未示出)的专用硬件设备提供的数据操纵功能的API的软件库。
存储系统34可以存储基本输入输出系统(BIOS)。BIOS是一组基本例程,其在启动时初始化和测试硬件,开始OS 50的执行,并且支持硬件设备之间的数据传输。当计算机系统10在操作中时,一个或多个处理单元16被配置为执行存储在存储系统34内的指令,以向存储器28和从存储器28传递数据,并且通常根据指令控制计算机系统10的操作。
一个或多个处理单元16还可以访问内部毫码(未示出)和存储在其中的数据。内部毫码(有时称为固件)可以被视为与主存储器28分离且不同的数据存储区域,并且可以独立于OS而被访问或控制。内部毫码可以包含计算机系统10的被复杂构造的指令的一部分。复杂指令可以被定义为对程序员的单个指令;然而,它也可以包括内部许可的代码,该代码将一个复杂指令分解成许多不太复杂的指令。毫码包含已经为计算机系统10专门设计和测试的算法,并且可以提供对硬件的完全控制。在至少一个实施例中,毫码还可用于存储一个或多个压缩字典,这些字典可被递送到硬件以促进如以下更详细描述的数据解压缩。
以示例说明而非限制,具有一组(至少一个)程序模块42的程序/实用工具40以及OS 50、一个或多个应用程序、其它程序模块和程序数据可存储在存储器28中。操作系统、一个或多个应用程序、其它程序模块和程序数据中的每一个或它们的某种组合可包括网络环境的实现。程序模块42通常执行如本文所描述的本发明的实施例的功能和/或方法。
计算机系统10还可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信;还可与一个或多个使得用户能够与计算机系统/服务器10交互的设备通信;和/或与使得计算机系统/服务器10能够与一个或多个其它计算设备进行通信的任何设备(例如,网卡,调制解调器等)通信。这种通信可以通过输入/输出(I/O)接口22进行。此外,计算机系统10还可以通过网络适配器20与一个或多个网络(例如局域网(LAN),广域网(WAN),和/或公共网络(例如,因特网))通信。如图所示,网络适配器20通过总线18与计算机系统10的其它组件通信。应该理解,尽管未示出,但是其它硬件和/或软件组件可以与计算机系统10结合使用。示例包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器、数据备份存储系统等。
在计算机系统10中可以使用各种类型的压缩算法,诸如,例如,使用Lempel-Ziv编码的衍生方法来压缩数据的自适应无损数据压缩(ALDC)系列产品。作为一般的压缩技术,Lempel-Ziv 77(LZ77)算法很好地集成到处理许多不同数据类型所需的系统中。该算法通过保持所处理的字节的最近历史并且指向历史内的匹配序列来处理字节序列。通过用复制指针和长度代码替换匹配的字节序列来实现压缩,所述复制指针和长度代码一起在尺寸上小于被替换的字节序列。
压缩算法还可包括“DEFLATE”压缩格式,它使用LZ77算法(它从数据中去除重复)和霍夫曼编码的组合。霍夫曼编码是基于“霍夫曼树”的熵编码。为了对数据进行霍夫曼编码和解码,系统必须预先知道霍夫曼树正在被使用。为了适应解压缩(例如,“Inflate”操作),在每个压缩块的头处写入霍夫曼树。在一个实施例中,在Deflate标准中为霍夫曼树提供了两个选项。一种选择是“静态”树,它是单个硬编码的霍夫曼树,对所有压缩器和解压缩器都是已知的。使用这种静态树的优点在于,它的描述不必写入压缩块的头,并且准备好进行立即的解压缩。另一方面,“动态”树是为当前的数据块定制的,因此,必须将动态树的精确描述写入到输出。
霍夫曼编码还可以使用基于熵的可变长度码表来编码源符号,并且如前所述,被定义为静态或动态。在静态霍夫曼编码中,使用RFC中定义的固定表(FHT)来编码每个文字或距离。然而,在动态霍夫曼编码中,构造特殊编码表(DHT)以更好地适合正被压缩的数据的统计。在大多数情况下,与FHT相比,使用DHT获得了更好的压缩比(compression ratio)(例如质量),代价是降低了压缩率(compression rate)(例如性能)并增加了设计复杂性。固定霍夫曼编码方法和动态霍夫曼编码方法最好地反映了压缩率与压缩比之间的内在折衷。静态霍夫曼方法可以实现比使用动态霍夫曼编码可能的压缩比更低的压缩比。这是由于使用固定编码表而不管输入数据块的内容。例如,随机数据和四字母DNA序列将使用相同的霍夫曼表编码。
在本发明的一些实施例中,计算机系统10包括压缩库,该压缩库可以被实现为用于压缩/解压(deflation/inflation)的软件库,并且可以是压缩算法的提取。在至少一个实施例中,压缩库允许计算机系统10和/或压缩加速器17分解跨多个请求以任意方式要被压缩/解压的输入数据,并且提供任意大小的输出缓冲器以保存压缩/解压操作的结果。
图3描绘了根据一个或多个实施例的图2中所示的压缩加速器17的框图。压缩加速器17可以包括例如输入缓冲器302、LZ77压缩器304、霍夫曼编码器306(有时被称为DEFLATE霍夫曼编码器)和输出缓冲器308。如图3所示,输入缓冲器302可被通信地耦接到LZ77压缩器304,并且LZ77压缩器304的输出可被直接连接到霍夫曼编码器306的输入。以此方式,DEFLATE加速器200被配置为使用DEFLATE算法促进数据压缩。
在本发明的一些实施例中,未压缩数据由压缩加速器17在输入缓冲器302(有时称为输入数据缓冲器)上获得。在本发明的一些实施例中,压缩加速器17对提供给输入缓冲器302的数据执行LZ77压缩。在本发明的一些实施例中,由霍夫曼编码器306接收压缩数据并对其进行编码。在本发明的一些实施例中,被压缩和编码的数据可被存储在输出缓冲器308(有时被称为输出数据缓冲器)中。
为了启动数据压缩,压缩加速器17可以接收一个或多个请求以压缩输入缓冲器302中的目标数据或目标数据流。在本发明的一些实施例中,请求块(未示出)可用于促进该请求。在本发明的一些实施例中,请求块被传送到OS 50的压缩接口。对于每个请求,计算机系统10可以向输入缓冲器(例如,输入缓冲器302)提供待处理的数据,并且提供其中存储被处理的数据结果的输出缓冲器(例如,输出缓冲器308)。
在本发明的一些实施例中,为了开始处理压缩请求,压缩加速器17读取请求块,并处理输入缓冲器302中的数据,以生成被压缩的或/和被解压缩的数据。如本文所述,可以采用各种压缩算法,包括但不限于DEFLATE压缩算法和ALDC算法。所得到的压缩数据可以被保存在输出缓冲器308中。
图4描述了根据一个或多个实施例的图3所示的霍夫曼编码器306的DHT生成器400的方框图。如图4所示,DHT生成器400可以包括排序模块402,霍夫曼树模块404,树静态随机存取存储器(SRAM)406,树遍历模块408,码长度SRAM 410,和编码长度模块412。在本发明的一些实施例中,DHT生成器400是霍夫曼编码器(例如,图3中所示的霍夫曼编码器306)的第一级。
排序模块402接收由LZ77压缩器304压缩的每个符号的符号频率计数器(“LZ计数”,X位计数器)。根据一个或多个实施例,排序模块402然后将X位计数器映射到被压缩的多对一Y位值。在本发明的一些实施例中,对Y位值进行排序(如本文先前所讨论的,生成符号的相对频率分布)。
在本发明的一些实施例中,Y位映射可在排序之后但在霍夫曼树模块404之前被解压缩回X位值。以此方式,霍夫曼树模块404可接收完整的X位值且不需要被修改。类似地,任何剩余的下游模块,包括霍夫曼树模块404、树SRAM 406、树遍历模块408、码长度SRAM 410和编码长度模块412,都不需要被修改。换句话说,霍夫曼树模块404、树SRAM 406、树遍历模块408、码长度SRAM 410和编码长度模块412可以使用已知的DEFLATE压缩实现方式来实现,并且不意味着被限制。虽然为了便于讨论而被描述为具有单独的模块,但是应当理解,DHT生成器400可以包括更多或更少的模块。例如,分类模块402的输出可以由单个霍夫曼树模块接收并被编码到DHT中,并且可以包括或不包括单独的树SRAM和/或码长度SRAM。
图5描绘了根据一个或多个实施例的图4中所示的分类模块402的框图。如图5所示,排序模块402(也称为排序块)可以包括位转换器。为了便于讨论,描述了24位到10位转换器502;如本文先前所论述,其它X位到Y位转换是可能的。
在本发明的一些实施例中,24位到10位转换器502从LZ77压缩器(例如图3中所示的LZ77压缩器304)接收24位计数器。在本发明的一些实施例中,24位到10位转换器502根据以下算法基于24位计数器生成5位指数和5位尾数:
步骤1:确定24位计数器的前导零位(LZB)索引,其中,索引是从最低有效位到最高有效位的1到24(针对25位计数器是1到25,等)。
步骤2:通过级联24位计数器与“00000”来产生29位矢量。例如,24位值“000000010110111100010101”可与“00000”级联以形成“000000010110111100010101.00000”。
步骤3:将29位矢量移位LZB索引。
步骤4:将移位量(即,移位位位置)存储为5位指数。例如,24位值“000000010110111100010101”的第17位(从右读取,加下划线以用于强调)可被存储为5位二进制数“10001”。
步骤5:将五个最高有效数字存储为5位尾数。在本发明的一些实施例中,五个最高有效数字包括移位位和接下来的四个数字。例如,从24位值“000000010110111100010101”生成的5位尾数可以是“10110”。在本发明的一些实施例中,五个最高有效位包括紧跟在移位位之后的五个数字。例如,从24位值“000000010110111100010101”生成的5位尾数可以是“01101”。
步骤6:级联5位指数和5位尾数以生成10位值。继续前一示例,其中在尾数中忽略移位位,10位值为“10001,01101”(移位,尾数)。
在本发明的一些实施例中,24位到10位转换器502从LZ77压缩器接收用于数据流中每个符号的24位计数器(例如,用于DHT中286个符号中的每个符号的286个24位计数器)。在本发明的一些实施例中,为24位计数器中的每一个生成10位值。这些10位值可以被传递到排序模块504。
在本发明的一些实施例中,排序模块504完成286个10位值的值排序。可以使用任何已知的用于DEFLATE加速器的适当方法来完成10位值的排序。在本发明的一些实施例中,排序模块504在2,860个锁存器中存储286个“符号、计数”对,并使用2-D剪切排序以便快速执行。对于2-D剪切排序,286个“符号、计数”对可以被布置在填充有143个比较器的18×16矩阵中。比较器被间隔,使得没有两个比较器是水平或垂直相邻(直接左、右、上或下)。相反,每个比较器与一个或多个其他比较器对角地相邻。有利地,可以使用10位比较器代替24位比较器,进一步增加了由10位映射提供的面积节省。在本发明的一些实施例中,被排序的10位值然后可以用于生成动态霍夫曼树。
在本发明的一些实施例中,下游处理(在分类之后)需要转换回24位值。这允许例如容易地根据2个升序符号来添加LZ计数,并且比较下一个符号的LZ计数。在本发明的一些实施例中,10位到24位解压缩器506从排序模块504接收每个10位数字,并将每个数字转换回24位数字。为了便于讨论,描述了10位到24位解压缩器;如先前所讨论的,其它Y位至X位解压缩器也是可能的。
24位数可根据以下算法从10位数构造:步骤1.产生29位字段,其中所有数字都被设置为“0”。步骤2.将尾数从10位数字拷贝到24位数字的最低有效数字。步骤3.移位该移位位的值(或者如果在尾数中忽略移位位,则移位位减去一)并且如果在尾数中不包括移位位,则插入移位位。步骤4.丢弃五个前导位(结构上总是“0”)以将29位字段转换为24位字段。
为了说明,考虑例如从如本文先前所讨论的数字928的压缩生成的10位数字“01010,11010”(尾数忽略移移位)。在步骤2,29位字段被设置为“00……0011010”(截去前导零)。在步骤3,29位字段被移位10个数字(10是移位位“01010”的十进制值)并且移位位被插入,得到“00……001110100000.00000”。在步骤4,丢弃前导“0”中的五个(最左边的位),得到24位数字“000000000111010000000000”。虽然在10位到24位解压缩器的上下文中提供了先前的示例,但是相同的方案可以用于解压缩具有任何初始位宽(例如,11位、12位、20位等)的LZ计数。
图6描绘了示出根据非限制性实施例的用于在生成动态霍夫曼表时减少符号排序所需的锁存器计数的方法的流程图600。如框602所示,确定多个第一符号计数。第一符号计数中的每一个可以包括第一位宽。在本发明的一些实施例中,第一符号计数中的每一个被编码为24位数字。
在框604处,基于多个第一符号计数的映射来生成多个第二符号计数。第二符号计数可包括小于第一位宽的第二位宽。在本发明的一些实施例中,第二符号计数中的每一个被编码为10位数字。
在本发明的一些实施例中,生成第二符号计数中的每一个包括根据一个或多个实施例生成5位移位字段和5位尾数。在本发明的一些实施例中,5位移位字段编码第一符号的最高有效非零位(即,如本文先前所讨论的移位位)的位置。在本发明的一些实施例中,5位尾数对第一符号的最高有效非零位和接下来的四位进行编码(即,移位位被重新用作尾数中的第一位)。在本发明的一些实施例中,5位尾数对第一符号的在最高有效非零位之后的接下来五位进行编码(即,移位位不在尾数中被重复使用)。在本发明的一些实施例中,5位移位字段和5位尾数被级联以形成10位数。
在框606,多个第二符号计数按频率排序。在框608,根据一个或多个实施例,基于经排序的多个第二符号计数来生成动态霍夫曼树。在本发明的一些实施例中,如本文先前所讨论的,在生成动态霍夫曼树之前,将10位映射解压缩回24位数字。
图7描绘说明根据非限制性实施例的方法的流程图700。如框702所示,可以从输入缓冲器接收包括第一符号的数据流。
在框704处,可以基于第一符号来确定具有第一位宽的第一符号计数。在本发明的一些实施例中,第一位宽是24位。
在框706,基于第一符号计数生成5位移位字段。在本发明的一些实施例中,5位移位字段对第一符号的最高有效非零位的位置进行编码。
在框708,基于第一符号计数生成5位尾数。在本发明的一些实施例中,5位尾数对第一符号的最高有效非零位之后的接下来五位进行编码。
在框710,通过级联5位移位字段和5位尾数来生成具有第二位宽的第二符号计数。在框712,对第二符号计数的频率进行排序。
本发明可以是任何可能的技术细节集成级别的系统、方法和/或计算机程序产品。该计算机程序产品可以包括一个计算机可读存储介质(或多个计算机可读存储介质),其上具有计算机可读程序指令,用于使处理器执行本发明的各方面。
计算机可读存储介质可以是有形设备,其可以保留和存储指令以供指令执行设备使用。计算机可读存储介质可以是例如但不限于电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或前述的任何合适组合。计算机可读存储介质的更具体示例的非详尽列表包括以下内容:便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式光盘只读存储器(CD-ROM)、数字通用光盘(DVD)、记忆棒、软盘、诸如在其上记录有指令的打孔卡或凹槽内凸起结构的机械编码装置、以及前述的任何合适的组合。这里使用的计算机可读存储介质不应被解释为瞬时信号本身,诸如无线电波或其它自由传播的电磁波、通过波导或其它传输介质传播的电磁波(例如,通过光纤电缆传递的光脉冲)或通过电线传输的电信号。
本文描述的计算机可读程序指令可以从计算机可读存储介质下载到相应的计算/处理设备,或者经由网络(例如,因特网,局域网,广域网和/或无线网络)下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光传输光纤、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口从网络接收计算机可读程序指令,并转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。
用于执行本发明的操作的计算机可读程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、集成电路配置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括诸如Smalltalk,C++等的面向对象的编程语言,以及诸如“C”编程语言或类似编程语言的过程编程语言。计算机可读程序指令可以完全在用户的计算机上执行、部分地在用户计算机上执行、作为独立的软件包执行、部分地在用户计算机上并且部分地在远程计算机上执行、或完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可以通过任何类型的网络(包括局域网(LAN)或广域网(WAN))连接到用户的计算机,或者,可以连接到外部计算机(例如,利用互联网服务提供商来通过互联网连接)。在一些实施例中,包括例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA)的电子电路可以通过利用计算机可读程序指令的状态信息来个性化定制电子电路,该电子电路执行计算机可读程序指令,以便执行本发明的各方面。
本文参考根据本发明的实施例的方法、装置(系统)和计算机程序产品的流程图图示和/或框图来描述本发明的各方面。将理解,流程图图示和/或框图中的每个框以及流程图图示和/或框图中的框的组合可以由计算机可读程序指令实现。
这些计算机可读程序指令可以被提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器来生产出机器,以使得通过计算机的处理器或其它可编程数据处理装置执行的指令创建用于实现流程图和/或一个框图块或多个框图块中所指定的功能/动作的装置。这些计算机可读程序指令还可以存储在计算机可读存储介质中,这些计算机可读程序指令可以使得计算机、可编程数据处理装置和/或其它设备以特定方式工作,以使得具有存储在其中的指令的计算机可读存储介质包括制品,该制品包括实现流程图和/或一个框图块或多个框图块中指定的功能/动作的各方面的指令。
计算机可读程序指令还可以被加载到计算机,其它可编程数据处理装置或其它设备上,以使得在计算机、其它可编程装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,这样在计算机、其它可编程装置或其它设备上执行的指令实现在流程图和/或一个框图块或多个框图块中指定的功能/动作。
附图中的流程图和框图示出根据本发明的各种实施例的系统,方法和计算机程序产品的可能实施方式的体系结构,功能和操作。在这方面,流程图或框图中的每个框可以表示模块、程序段或指令的一部分,其包括用于实现指定的逻辑功能的一个或多个可执行指令。在一些替代实施方式中,框中所标注的功能可以不按图中所示的顺序发生。例如,连续示出的两个框实际上可以基本上并行地执行,或者这些框有时可以以相反的顺序执行,这取决于所涉及的功能。还应注意,框图和/或流程图图示中的每个框以及框图和/或流程图图示中的框的组合可以由执行特定功能或动作,或执行专用硬件和计算机指令的组合的专用的基于硬件的系统来实现。
已经出于说明的目的给出了本发明的各种实施例的描述,但是其不旨在是穷尽的或限于所公开的实施例。在不背离所描述的实施例的范围和精神的情况下,许多修改和变化对于本领域的普通技术人员将是显而易见的。选择本文所使用的术语以最好地解释实施例的原理、实际应用或对市场上存在的技术改进,或使本领域的其他普通技术人员能够理解本文所描述的实施例。
Claims (25)
1.一种加速器,包括:
输入缓冲器;
Lempel-Ziv 77即LZ77压缩器,其通信地耦接到所述输入缓冲器的输出;
霍夫曼编码器,其通信地耦接到所述LZ77压缩器,所述霍夫曼编码器包括位转换器;以及
输出缓冲器,其通信地耦接到所述霍夫曼编码器。
2.根据权利要求1所述的加速器,其中,所述位转换器被配置为将包括第一位宽的第一符号计数映射至包括第二位宽的第二符号计数。
3.根据权利要求2所述的加速器,其中,所述第二位宽小于所述第一位宽。
4.根据权利要求3所述的加速器,其中,所述位转换器包括24位至10位转换器,所述第一位宽包括24位,所述第二位宽包括10位。
5.根据权利要求4所述的加速器,其中,所述位转换器被配置为基于所述第一符号计数来生成5位移位字段和5位尾数。
6.根据权利要求5所述的加速器,其中,所述位转换器还被配置为级联所述5位移位字段和所述5位尾数以生成所述第二符号计数。
7.根据权利要求1所述的加速器,其中,所述加速器包括DEFLATE硬件加速器。
8.一种用于在生成动态霍夫曼表时减少符号排序所需的锁存器计数的方法,所述方法包括:
确定多个第一符号计数,所述第一符号计数中的每一个包括第一位宽;
生成多个第二符号计数,所述第二符号计数中的每一个是基于所述多个第一符号计数中的符号计数的映射,所述第二符号计数包括小于所述第一位宽的第二位宽;
按照频率对所述多个第二符号计数进行排序;以及
基于经排序的多个第二符号计数来生成动态霍夫曼树。
9.根据权利要求8所述的方法,其中,所述第一位宽包括24位,所述第二位宽包括10位。
10.根据权利要求9所述的方法,其中,生成所述多个第二符号计数中的每个第二符号计数包括基于所述多个第一符号计数中的第一符号来生成5位移位字段和5位尾数。
11.根据权利要求10所述的方法,还包括:级联所述5位移位字段和所述5位尾数。
12.根据权利要求10所述的方法,其中,所述5位移位字段对所述第一符号的最高有效非零位的位置进行编码。
13.根据权利要求12所述的方法,其中,所述5位尾数对所述第一符号的最高有效非零位和接下来的四个位进行编码。
14.根据权利要求12所述的方法,其中,所述5位尾数对所述第一符号的在所述最高有效非零位之后的接下来的五个位进行编码。
15.一种计算机程序产品,用于在生成动态霍夫曼表时减少符号排序所需的锁存器计数,所述计算机程序产品包括在其中体现有程序指令的计算机可读存储介质,所述程序指令可由电子计算机处理器执行以控制计算机系统执行操作,所述操作包括:
确定多个第一符号计数,所述第一符号计数中的每一个包括第一位宽;
生成多个第二符号计数,所述第二符号计数中的每一个是基于所述多个第一符号计数中的符号计数的映射,所述第二符号计数包括小于所述第一位宽的第二位宽;
按照频率对所述多个第二符号计数进行排序;以及
基于经排序的多个第二符号计数来生成动态霍夫曼树。
16.根据权利要求15所述的计算机程序产品,其中,生成所述多个第二符号计数中的每个第二符号计数包括基于所述多个第一符号计数中的第一符号来生成5位移位字段和5位尾数。
17.根据权利要求16所述的计算机程序产品,还包括:级联所述5位移位字段和所述5位尾数。
18.根据权利要求17所述的计算机程序产品,其中,所述5位移位字段对所述第一符号的最高有效非零位的位置进行编码。
19.根据权利要求18所述的计算机程序产品,其中,所述5位尾数对所述第一符号的在所述最高有效非零位之后的接下来的五个位进行编码。
20.根据权利要求9所述的方法,还包括:通过级联所述多个第一符号计数中的第一计数与5位字段来生成29位字段。
21.一种用于在生成动态霍夫曼表时减少符号排序所需的锁存器计数的系统,所述系统包括:
加速器;
具有计算机可读指令的存储器;以及
处理器,其被配置为执行所述计算机可读指令,其中,所述计算机可读指令在由所述处理器执行时使得所述加速器执行一种方法,所述方法包括:
确定多个第一符号计数,所述第一符号计数中的每一个包括第一位宽;
生成多个第二符号计数,所述第二符号计数中的每一个是基于所述多个第一符号计数中的符号计数的映射,所述第二符号计数包括小于所述第一位宽的第二位宽;
按照频率对所述多个第二符号计数进行排序;以及
基于经排序的多个第二符号计数来生成动态霍夫曼树。
22.根据权利要求21所述的系统,其中,生成所述多个第二符号计数中的每个第二符号计数包括基于所述多个第一符号计数中的第一符号来生成5位移位字段和5位尾数。
23.根据权利要求22所述的系统,其中,所述5位移位字段对所述第一符号的最高有效非零位的位置进行编码。
24.根据权利要求22所述的系统,其中,所述5位尾数对所述第一符号的在所述最高有效非零位之后的接下来的五个位进行编码。
25.一种方法,包括:
从输入缓冲器接收包括第一符号的数据流;
基于所述第一符号,确定具有第一位宽的第一符号计数;
基于所述第一符号计数,生成5位移位字段;
基于所述第一符号计数,生成5位尾数;
通过级联所述5位移位字段和所述5位尾数来确定具有第二位宽的第二符号计数;以及
对所述第二符号计数的频率进行排序。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/275,608 | 2019-02-14 | ||
US16/275,608 US10693493B1 (en) | 2019-02-14 | 2019-02-14 | Reducing latch count to save hardware area for dynamic Huffman table generation |
PCT/EP2020/053409 WO2020165133A1 (en) | 2019-02-14 | 2020-02-11 | Reducing latch count to save hardware area for dynamic huffman table generation |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113366765A true CN113366765A (zh) | 2021-09-07 |
Family
ID=69593650
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080012147.6A Pending CN113366765A (zh) | 2019-02-14 | 2020-02-11 | 减少锁存器计数以节省用于动态霍夫曼表生成的硬件面积 |
Country Status (5)
Country | Link |
---|---|
US (2) | US10693493B1 (zh) |
EP (1) | EP3925074A1 (zh) |
JP (1) | JP7425526B2 (zh) |
CN (1) | CN113366765A (zh) |
WO (1) | WO2020165133A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113824449A (zh) * | 2021-09-18 | 2021-12-21 | 山东云海国创云计算装备产业创新中心有限公司 | 一种静态霍夫曼并行编码方法、系统、存储介质及设备 |
CN113965207A (zh) * | 2021-12-17 | 2022-01-21 | 苏州浪潮智能科技有限公司 | 一种基于deflate霍夫曼编码的动态码表生成装置和方法 |
CN114401013A (zh) * | 2022-03-25 | 2022-04-26 | 苏州浪潮智能科技有限公司 | 一种适用于deflate格式的Huffman压缩编码字符频率统计装置 |
CN114640357A (zh) * | 2022-05-19 | 2022-06-17 | 深圳元象信息科技有限公司 | 数据编码方法、设备及存储介质 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112737596A (zh) * | 2021-01-07 | 2021-04-30 | 苏州浪潮智能科技有限公司 | 一种基于排序网络的动态霍夫曼编码方法、装置及设备 |
US11791838B2 (en) | 2021-01-15 | 2023-10-17 | Samsung Electronics Co., Ltd. | Near-storage acceleration of dictionary decoding |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5748121A (en) | 1995-12-06 | 1998-05-05 | Intel Corporation | Generation of huffman tables for signal encoding |
US6040790A (en) | 1998-05-29 | 2000-03-21 | Xerox Corporation | Method of building an adaptive huffman codeword tree |
US7358870B2 (en) | 2003-09-02 | 2008-04-15 | Nokia Corporation | Huffman coding and decoding based upon sectioning of a Huffman coding tree |
US7826670B2 (en) | 2005-06-15 | 2010-11-02 | Fujifilm Corporation | Data compression apparatus and data compression program storage medium |
US7307552B2 (en) | 2005-11-16 | 2007-12-11 | Cisco Technology, Inc. | Method and apparatus for efficient hardware based deflate |
US9362948B2 (en) * | 2008-02-14 | 2016-06-07 | Broadcom Corporation | System, method, and computer program product for saving and restoring a compression/decompression state |
US7538696B2 (en) * | 2007-08-31 | 2009-05-26 | Rmi Corporation | System and method for Huffman decoding within a compression engine |
US7609182B2 (en) | 2007-11-30 | 2009-10-27 | Comtech Aha Corporation | Generating dynamic huffman codes |
US20110307748A1 (en) | 2010-06-15 | 2011-12-15 | Qualcomm Incorporated | Techniques for error diagnosis in vlsi systems |
JP2012124878A (ja) | 2010-11-17 | 2012-06-28 | Sony Corp | 画像処理装置及び画像処理方法 |
US8766827B1 (en) | 2013-03-15 | 2014-07-01 | Intel Corporation | Parallel apparatus for high-speed, highly compressed LZ77 tokenization and Huffman encoding for deflate compression |
US9171007B2 (en) | 2013-03-15 | 2015-10-27 | International Business Machines Corporation | Compression/decompression accelerator protocol for software/hardware integration |
US9030771B2 (en) | 2013-04-26 | 2015-05-12 | Oracle International Corporation | Compressed data verification |
US9832287B2 (en) | 2014-03-28 | 2017-11-28 | Comtech Ef Data Corp. | System and method for dynamic Huffman decoding |
US9264068B2 (en) | 2014-05-09 | 2016-02-16 | Micron Technology, Inc. | Deflate compression algorithm |
US9337862B2 (en) | 2014-06-09 | 2016-05-10 | Tidal Systems, Inc. | VLSI efficient Huffman encoding apparatus and method |
US9515678B1 (en) | 2015-05-11 | 2016-12-06 | Via Alliance Semiconductor Co., Ltd. | Hardware data compressor that directly huffman encodes output tokens from LZ77 engine |
US9509335B1 (en) | 2015-05-11 | 2016-11-29 | Via Alliance Semiconductor Co., Ltd. | Hardware data compressor that constructs and uses dynamic-prime huffman code tables |
US9584156B1 (en) | 2015-11-17 | 2017-02-28 | International Business Mahcines Corporation | Creating a dynamic Huffman table |
US9929748B1 (en) | 2017-03-31 | 2018-03-27 | Intel Corporation | Techniques for data compression verification |
US10135463B1 (en) | 2017-09-29 | 2018-11-20 | Intel Corporation | Method and apparatus for accelerating canonical huffman encoding |
-
2019
- 2019-02-14 US US16/275,608 patent/US10693493B1/en active Active
-
2020
- 2020-01-24 US US16/751,737 patent/US10715174B1/en active Active
- 2020-02-11 WO PCT/EP2020/053409 patent/WO2020165133A1/en unknown
- 2020-02-11 CN CN202080012147.6A patent/CN113366765A/zh active Pending
- 2020-02-11 EP EP20705639.1A patent/EP3925074A1/en active Pending
- 2020-02-11 JP JP2021539586A patent/JP7425526B2/ja active Active
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113824449A (zh) * | 2021-09-18 | 2021-12-21 | 山东云海国创云计算装备产业创新中心有限公司 | 一种静态霍夫曼并行编码方法、系统、存储介质及设备 |
CN113965207A (zh) * | 2021-12-17 | 2022-01-21 | 苏州浪潮智能科技有限公司 | 一种基于deflate霍夫曼编码的动态码表生成装置和方法 |
CN113965207B (zh) * | 2021-12-17 | 2022-03-15 | 苏州浪潮智能科技有限公司 | 一种基于deflate霍夫曼编码的动态码表生成装置和方法 |
CN114401013A (zh) * | 2022-03-25 | 2022-04-26 | 苏州浪潮智能科技有限公司 | 一种适用于deflate格式的Huffman压缩编码字符频率统计装置 |
CN114640357A (zh) * | 2022-05-19 | 2022-06-17 | 深圳元象信息科技有限公司 | 数据编码方法、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
EP3925074A1 (en) | 2021-12-22 |
WO2020165133A1 (en) | 2020-08-20 |
JP7425526B2 (ja) | 2024-01-31 |
US10715174B1 (en) | 2020-07-14 |
JP2022520158A (ja) | 2022-03-29 |
US10693493B1 (en) | 2020-06-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113366765A (zh) | 减少锁存器计数以节省用于动态霍夫曼表生成的硬件面积 | |
US8090027B2 (en) | Data compression using an arbitrary-sized dictionary | |
JP7031828B2 (ja) | 意味論的値のデータ圧縮及び解凍のための方法、装置、及びシステム | |
US10187081B1 (en) | Dictionary preload for data compression | |
US7663511B2 (en) | Dynamic character encoding | |
CN112514270B (zh) | 数据压缩 | |
US6310563B1 (en) | Method and apparatus for enhanced decompressor parsing | |
US9094039B2 (en) | Efficient deflate decompression | |
JP2015505432A (ja) | データ処理システムにおいて、可変長符号化データ・ストリームを復号するための方法、コンピュータ・プログラム、および、装置 | |
US11031951B2 (en) | Verifying the correctness of a deflate compression accelerator | |
US10735025B2 (en) | Use of data prefixes to increase compression ratios | |
WO2014106782A1 (en) | High bandwidth compression to encoded data streams | |
US10164654B2 (en) | Data compressing device, data decompressing device, and data compressing/decompressing apparatus | |
Nandi et al. | A compression technique based on optimality of LZW code (OLZW) | |
Funasaka et al. | Adaptive loss‐less data compression method optimized for GPU decompression | |
CN107534446B (zh) | 用于高带宽lz77解压缩的asic块 | |
US10374629B1 (en) | Compression hardware including active compression parameters | |
US11606103B2 (en) | Data compression method, data compression device, data decompression method, and data decompression device | |
WO1995012248A1 (en) | Efficient optimal data recompression method and apparatus | |
US10873836B2 (en) | Efficient short message compression | |
US10623016B2 (en) | Accelerated compression/decompression including predefined dictionary | |
JP2016052046A (ja) | 圧縮装置、伸長装置およびストレージ装置 | |
JP2010258532A (ja) | ビット長を符号に変換する回路及び方法 | |
Philip et al. | LiBek II: A novel compression architecture using adaptive dictionary | |
Thakkar et al. | Two-stage algorithm for data compression |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |