CN111294053B - 硬件友好的数据压缩方法、系统及装置 - Google Patents
硬件友好的数据压缩方法、系统及装置 Download PDFInfo
- Publication number
- CN111294053B CN111294053B CN201910972547.0A CN201910972547A CN111294053B CN 111294053 B CN111294053 B CN 111294053B CN 201910972547 A CN201910972547 A CN 201910972547A CN 111294053 B CN111294053 B CN 111294053B
- Authority
- CN
- China
- Prior art keywords
- data
- matching
- literal
- length
- match
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 48
- 238000013144 data compression Methods 0.000 title claims description 7
- 230000006837 decompression Effects 0.000 claims description 23
- 239000012634 fragment Substances 0.000 claims description 21
- 238000012856 packing Methods 0.000 claims 1
- 238000007906 compression Methods 0.000 description 23
- 230000006835 compression Effects 0.000 description 18
- PCTMTFRHKVHKIS-BMFZQQSSSA-N (1s,3r,4e,6e,8e,10e,12e,14e,16e,18s,19r,20r,21s,25r,27r,30r,31r,33s,35r,37s,38r)-3-[(2r,3s,4s,5s,6r)-4-amino-3,5-dihydroxy-6-methyloxan-2-yl]oxy-19,25,27,30,31,33,35,37-octahydroxy-18,20,21-trimethyl-23-oxo-22,39-dioxabicyclo[33.3.1]nonatriaconta-4,6,8,10 Chemical compound C1C=C2C[C@@H](OS(O)(=O)=O)CC[C@]2(C)[C@@H]2[C@@H]1[C@@H]1CC[C@H]([C@H](C)CCCC(C)C)[C@@]1(C)CC2.O[C@H]1[C@@H](N)[C@H](O)[C@@H](C)O[C@H]1O[C@H]1/C=C/C=C/C=C/C=C/C=C/C=C/C=C/[C@H](C)[C@@H](O)[C@@H](C)[C@H](C)OC(=O)C[C@H](O)C[C@H](O)CC[C@@H](O)[C@H](O)C[C@H](O)C[C@](O)(C[C@H](O)[C@H]2C(O)=O)O[C@H]2C1 PCTMTFRHKVHKIS-BMFZQQSSSA-N 0.000 description 15
- 238000012545 processing Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 201000000770 hypomyelinating leukodystrophy 6 Diseases 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
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/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3088—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- 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/46—Conversion to or from run-length codes, i.e. by representing the number of consecutive digits, or groups of digits, of the same kind by a code word and a digit indicative of that kind
- H03M7/48—Conversion to or from run-length codes, i.e. by representing the number of consecutive digits, or groups of digits, of the same kind by a code word and a digit indicative of that kind alternating with other codes during the code conversion process, e.g. run-length coding being performed only as long as sufficientlylong runs of digits of the same kind are present
-
- 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/6005—Decoder 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/6011—Encoder aspects
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
提供了用于压缩数据的系统、装置和方法。一个示例性的方法可以包括将一个或多个字面量长度字段与一个或多个字面量字段交织到输出。字面量字段可以包含逐字复制到输出的第一数据段,并且一个或多个字面量长度字段中的每一个可以包含表示后续字面量字段的长度的值。该方法还可以包括确定与先前逐字复制的数据序列匹配的第二数据段和匹配位置,并且将输出的一个或多个匹配长度字段和包含匹配位置的匹配位置字段写入输出。字面量长度字段可以包含第一数据段的总长度,并且匹配长度字段可以包含第二数据段的总长度。
Description
技术领域
本文的公开内容涉及数据压缩,特别涉及无损压缩。
背景技术
数据压缩在通信和计算等数字信号系统中得到了广泛的应用。例如,为了节省存储空间或传输时间,通常将计算机数据压缩为TAR或ZIP文件格式。多年来,基于亚伯拉罕·伦佩尔(Abraham Lempel)和雅各布·齐夫(Jacob Ziv)最初在1977年和1978年发表的压缩技术,开发了一系列压缩方案,这些压缩技术被称为LZ77和LZ78。LZ系列压缩方案中的一些方案有利于压缩比而不是速度,而另一些则牺牲压缩比以获得更高的速度。然而,这些各种LZ压缩技术是为通用计算系统开发的,该系统通常使用通用中央处理单元(CPU)来执行数据压缩或解压缩操作。因此,需要一种更加硬件友好的压缩技术,例如,适用于现场可编程门阵列(FPGA)或专用集成电路(ASIC)的压缩技术。
发明内容
本公开提供了用于无损压缩的系统和方法。压缩的数据可以包括两种类型的数据:字面量和匹配。字面量可以指可以从输入到输出逐字复制的数据。匹配可以指与先前复制的字面量匹配的数据,因此可以用对先前副本的指示对象替换。在一个实施例中,一个压缩数据块可以包括:与一个或多个字面量字段交织的一个或多个字面量长度字段,在初始匹配长度字段之后插入匹配位置字段的一个或多个匹配长度字段,以及零个或多个重复长度字段。
一个示例性的压缩过程可以生成与一个或多个字面量字段交织的一个或多个字面量长度字段,使得一旦可以填充一个字面量长度字段和一个字面量字段,就可以输出要逐字复制的数据。一旦找到最小匹配大小的数据片段的匹配,就可以生成一个或多个匹配长度字段,并且可以定位匹配位置并将其插入到初始匹配长度字段之后的匹配位置字段中。该压缩过程可以进一步确定是否重复匹配数据段,并记录匹配数据段重复的次数。因此,重复长度字段可以组合包含表示匹配数据段可以重复多少次的总值。
在一个示例性实施例中,提供了一种用于生成压缩数据的方法。该方法可以包括:将一个或多个字面量长度字段与一个或多个字面量字段交织到输出,所述一个或多个字面量字段中的每一个包含从输入数据流逐字复制到输出的第一数据段的一部分,所述一个或者多个字面量长度字段的每一个包含表示后续字面量字段的长度的值,所述一个或多个字面量长度字段的组合包含表示所述第一数据段的总长度的第一总值;确定与先前逐字复制的数据序列匹配的所述输入数据流的第二数据段和匹配位置;以及向输出写入一个或多个匹配长度字段和包含表示所述匹配位置的值的匹配位置字段,所述一个或多个匹配长度字段的组合包含表示所述第二数据段的总长度的第二总值。
在另一示例性实施例中,提供了一种包括编码器的装置。所述编码器可以包括:数据打包器,用于从输入数据流生成一个或多个数据片段,所述一个或多个数据片段中的每一个具有最小匹配长度的长度;散列值计算器,用于为所述一个或多个数据片段中的每一个生成散列值;散列表,用于使用各自的散列值跟踪所述一个或多个数据片段;匹配位置搜索器,用于基于所述散列表中的条目搜索数据片段是否在已处理的数据中具有匹配;匹配位置合并器,用于合并已在已处理数据中找到匹配的两个或多个数据片段;以及输出汇编器。所述输出汇编器可以被配置为:将一个或多个字面量长度字段与一个或多个字面量字段交织到输出,所述一个或多个字面量字段中的每一个包含从所述输入数据流逐字复制到输出的第一数据段的一部分,所述一个或多个字面量长度字段中的每一个包含表示后续字面量字段长度的值,所述一个或多个字面量长度字段的组合包含表示所述第一数据段的总长度的第一总值;确定与先前逐字复制的数据序列匹配的输入数据流的第二数据段和匹配位置;以及向输出写入一个或多个匹配长度字段和包含表示匹配位置的值的匹配位置字段,所述一个或多个匹配长度字段的组合包含表示所述第二数据段的总长度的第二总值。
在又一示例性实施例中,本文所公开的还可以包括具有可执行指令的非暂时性机器可读介质,其中所述可执行指令在由计算机系统执行时使得所述计算机系统:将一个或多个字面量长度字段与一个或多个字面量字段交织到输出,所述一个或多个字面量字段中的每一个包含从输入数据流逐字复制到输出的第一数据段的一部分,所述一个或多个字面量长度字段中的每一个包含表示后续字面量字段长度的值,所述一个或多个字面量长度字段的组合包含表示所述第一数据段的总长度的第一总值;确定与先前逐字复制的数据序列匹配的输入数据流的第二数据段和匹配位置;以及向输出写入一个或多个匹配长度字段和包含表示所述匹配位置的值的匹配位置字段,所述一个或多个匹配长度字段的组合包含表示所述第二数据段的总长度的第二总值。
附图简述
图1示意性地示出了根据本公开的实施例的压缩数据块。
图2示意性地示出了根据本公开的实施例的编码器。
图3示意性地示出了根据本公开的实施例的解码器。
图4示意性地示出了根据本公开的实施例的计算系统。
图5是根据本公开的实施例的压缩数据流的流程图。
图6是根据本公开的实施例的解压缩压缩数据流的流程图。
具体实施方式
现在将参考附图详细描述根据本申请的具体实施例。为了一致性,各个附图中的相同元件由相同的附图标记表示。
本公开提供了一种用于无损压缩的系统和方法。压缩的数据可以包括两种类型的数据:字面量和匹配。字面量可以指可以从输入中逐字复制的数据。匹配可以指与先前复制的字面量匹配的数据,因此可以用对先前副本的指示对象替换。在一个实施例中,压缩数据块可以包括:与一个或多个字面量字段交织的一个或多个字面量长度字段,在初始匹配长度字段之后插入匹配位置字段的一个或多个匹配长度字段,以及零个或多个重复长度字段。
一个示例性压缩过程可以生成与一个或多个字面量字段交织的一个或多个字面量长度字段,使得一旦一个字面量长度字段达到其最大值并且相应的字面量字段填满,就可以输出要逐字复制的数据。一旦找到最小匹配大小的数据片段的匹配项,就可以生成一个或多个匹配长度字段,并且可以定位匹配位置并将其插入到初始匹配长度字段之后的匹配位置字段中。该压缩过程可以进一步确定是否重复匹配数据段并记录匹配数据段重复的次数。因此,重复长度字段可以组合包含表示匹配数据段重复次数的总值。
图1示意性地示出了根据本公开的实施例的压缩格式。该压缩格式可以在压缩数据块100中表示,压缩数据块100可以是由压缩过程生成的压缩数据单元。压缩数据块100可以包括第一段120和第二段126,第一段120用于从输入数据流中逐字复制的数据片段,第二段126用于匹配的数据片段。第一段120可以被称为压缩数据块100的字面量段,第二段126可以被称为压缩数据块100的匹配段。在一些实施例中,要压缩的数据可以作为字节流处理,每个字节是8比特。因此,字面量段120可以包含从输入数据流复制的字节串和要逐字复制的字符串的长度。匹配段126可以包括关于可以从先前处理的数据匹配的字节串的信息,使得不需要再次逐字复制字节串。应当注意,使用字节作为用于压缩的数据单元仅是一个示例,各种实施例可以针对其他合适大小的数据单元(例如,4比特、16比特、24比特、32比特或64比特)实现本文公开的技术。
在一些实施例中,要搜索和匹配的数据片段可以具有最小匹配长度。也就是说,对于小于最小匹配长度的字节序列,不需要执行匹配操作。最小匹配长度可以表示为最小匹配。典型的最小匹配可以是四(4),但是在一些实施例中可以使用其他数字。出于说明目的,本公开中的各示例可以使用四作为最小匹配的示例。
第一段120可以被称为字面量区段,并且可以包括初始字面量区段122和扩展字面量区段124。初始字面量区段122可以包括初始字面量长度字段102和初始字面量字段104。初始字面量长度字段102可以存储被称为初始字面量长度的值。初始字面量长度字段102可以具有固定的比特宽度,并且该固定的宽度可以确定初始字面量长度的最大值和初始字面量字段104的大小。该固定的宽度可以是多个比特,对应数值是正整数,其可以是2但通常大于2,例如,3、4、5等。出于说明的目的,在本公开中初始字面量长度字段102可以使用3比特作为示例,因此初始字面量长度的范围可以从0(所有三个比特位都是0)到7(所有三个比特位都是1)。如果初始字面量长度为0,则不从输入数据流逐字地复制数据,并且初始字面量字段104可以为空。在一个实施例中,当初始字面量长度为0(二进制为“000”)时,初始字面量字段104可能不存在于压缩数据块100中。
如果初始字面量长度是可以大于0的数字“x”(例如,x可以是1、2、3、4、5、6或7),则初始字面量字段104可以具有“x”字节的宽度并包含从输入数据流中逐字复制的“x”字节数据。当初始字面量长度小于7时,可能不需要扩展字面量区段124。因此,在一个实施例中,当初始字面量长度字段102中的值小于7时,压缩数据块100可以不具有扩展字面量区段124。例如,如果要从数据流逐字复制的字节串可以是表示为“ABCDE”的五个字节,则字面量段120可以由值为“101”(例如,数字5的二进制数)的初始字面量长度字段102和五字节“ABCDE”的初始字面量字段104组成。因为没有更多要从输入流复制的字面量数据,所以该示例中的字面量段120不具有任何扩展字面量长度字段106或扩展字面量字段108。请注意,本公开的示例中的字节串可以是任何数据而不一定是字符。例如“ABCDE”和任何其他示例性字符串的字符符号,可用于表示数据流中的不同字节值。
扩展字面量区段124可以包括扩展字面量长度字段106.1到106.k和扩展字面量字段108.1到108.k。扩展字面量长度字段106.1到106.k的每一个也可以具有固定的比特宽度。在一些实施例中,扩展字面量长度字段106.1到106.k中的每一个可以具有相等的固定宽度。在一些其他实施例中,扩展字面量长度字段106.1到106.k中的至少一个字段可以具有可以与其他字段不同的固定宽度。此外,在一个实施例中,扩展字面量长度字段106.1到106.k的固定宽度可以等于初始字面量长度字段102的固定宽度。但是,在一些其他实施例中,扩展字面量长度字段106.1到106.k的固定宽度可以与初始字面量长度字段102的固定宽度不同。扩展字面量长度字段106.1到106.k的示例性固定宽度可以是8比特、16比特等。出于说明的目的,本公开可以使用4比特作为扩展字面量长度字段106.1到106.k的示例。因此,任何扩展字面量长度字段106.1到106.k中的值的范围可以从0(所有四个比特位为0)到15(所有四个比特位都是1)。
当初始字面量长度字段102的所有比特位均为1时,初始字面量长度可以是7(3比特的二进制“111”),并且可能需要扩展字面量区段124的至少第一扩展字面量长度字段106.1。扩展字面量长度字段106.1和扩展字面量字段108.1的作用可以类似于初始字面量长度字段102和初始字面量字段104,因为扩展字面量长度字段106.1中的值可以指示扩展字面量字段108.1中可以包含多少字节。当扩展字面量长度字段106.1的所有比特位都达到1时,可能需要下一个扩展字面量长度字段106.2(以及可能需要下一个扩展字面量字段108.2)。当扩展字面量长度字段106.1为0时,扩展字面量字段108.1可以是空的。因此,在一个实施例中,当扩展字面量长度字段106.1的值为零时,扩展字段108.1可能不存在。例如,从数据流逐字复制的字节串可以是表示为“ABCDEFG”的7个字节,字面量段120可以包括3个比特位均为1(“111”)的初始字面量长度字段102、七字节“ABCDEFG”的初始字面量字段104和4个比特位均为0(“0000”)的扩展字面量长度字段106.1。因为没有更多字面量数据要从输入流中复制。该示例中的字面量段120不具有任何扩展字面量字段108或任何更多扩展字面量长度字段106(除了扩展字面量长度字段106.1之外)。
当扩展字面量长度字段106.1大于零时,可能需要扩展字面量字段108.1。例如,从数据流逐字复制的字节串可以是表示为“ABCDEFGH”的8字节,字面量段120可以包括3个比特位均为1(“111”)的初始字面量长度字段102、十字节“ABCDEFG”的初始字面量字段104、3个比特位为0和1个比特位为1(“0001”)的扩展字面量长度字段106.1和1字节“H”的扩展字面量字段108.1。该示例中的字面量段120不具有任何更多的扩展字面量长度字段106(除了扩展字面量长度字段106.1之外)或任何更多扩展字面量字段108(除了扩展字面量字段108.1之外)。
当扩展字面量长度字段106.1的所有比特位都达到1时,例如,对于所有4个比特的二进制“1111”和值15,可能需要扩展字面量长度字段106.2,并且扩展字面量字段108.2可以包含从输入数据流中复制的字节串的下一部分。因此,可以在填充前一个字面量字段并且前一个字面量长度字段的所有比特位都达到1之后,逐个添加扩展字面量长度字段106.1到106.k及其配套的扩展字面量字段108.1到108.k。也就是说,扩展字面量长度字段106.k仅在前一个扩展字面量长度字段106.k-1的所有比特位都是1时存在。数字k可以表示在初始字面量字段104之后添加扩展字面量字段的总数。在一些实施例中,字面量长度字段和/或扩展字面量长度字段中的比特数可以由硬件限制来确定,例如但不限于为压缩操作分配的存储器的大小、微处理器的缓存的大小,等等。
第二段126可以包括初始匹配区段128、扩展匹配长度区段130和重复匹配区段132。初始匹配区段128和扩展匹配长度区段130可以统称为匹配区段,并且重复匹配区段132可以简称为重复区段。初始匹配区段128可以包括初始匹配长度字段110和匹配位置字段112。初始匹配长度字段110可以具有固定的比特宽度,以指示在先前处理的数据中可以匹配字节序列的长度。初始匹配长度字段110的示例性固定宽度可以是2比特、3比特、4比特、5比特或任何合适整数的比特。出于说明目的,本发明中的实例可使用3比特作为初始匹配长度字段110的实例。匹配位置字段112可以包含指示匹配的字节序列可以位于何处的位置值。在一个实施例中,位置值可以是从输入数据流的起始起的绝对索引。可以将大文件划分成多个块,例如,4KB的块,并且可以在处理期间将每个块称为一个输入流。在另一个实施例中,位置值可以是从输入数据流中的当前位置向已经处理的数据计数的偏移量。例如,如果位置值是作为偏移量的数字“y”,则匹配的字节串可以从当前位置开始向后计数y个字节。匹配位置字段112的示例性宽度可以是8比特、10比特、12比特或任何合适的比特值。出于说明目的,本公开中的示例可以使用12比特作为匹配位置字段112的示例。
扩展匹配长度区段130可以包括一个或多个扩展匹配长度字段114.1到114.m。扩展匹配长度字段114.1到114.m中的每一个可以具有固定的比特带宽。扩展匹配长度字段114.1到114.m的固定宽度在一些实施例中可以相等而在其他一些实施例中可以不相等。扩展匹配长度字段114.1到114.m的示例性固定宽度可以是2比特、3比特、4比特、5比特或任何合适的比特值。出于说明目的,本公开中的示例可以使用8比特作为扩展匹配长度字段114.1到114.m的示例。当匹配的字节序列的长度达到初始匹配长度字段110的最大值(例如,所有比特位均为1)时,可以使用第一扩展匹配长度字段114.1。并且当匹配的字节序列的长度达到初始匹配长度字段110(例如,所有比特位均为1)和第一扩展匹配长度字段114.1(例如,所有比特位均为1)两者中包含的最大值的总和时,可以使用下一个扩展匹配长度字段114.2。因此,仅在先前匹配长度字段(例如,初始匹配长度字段110和扩展匹配长度字段114.1到扩展匹配长度字段114.m-1)中的所有比特位均为1时,才可以使用扩展匹配长度字段114.m。
在一个实施例中,因为匹配至少是针对最小匹配长度的序列,所以字节序列的实际匹配长度可以是包含在初始匹配长度字段110和所有扩展匹配长度字段114中的总值加上最小匹配并减去1(例如,实际匹配长度=总值+最小匹配-1)。例如:当字节序列的实际匹配长度为4时,初始匹配长度字段110中的值可以是1(1);当字节序列的实际匹配长度为6时,初始匹配长度字段110中的值可以为3(3);当字节序列的实际匹配长度为15时,初始匹配长度字段110中的值可以是7(7)(例如,二进制“111”),并且扩展匹配长度字段114.1中的值可以是5(5)(例如,二进制“00000101”);等等。
例如,输入数据流可以是“ABCDEFGHIJKABCDE”。在一个实施例中,前11个字节“ABCDEFGHIJK”可以被分成“ABCDEFG”和“HIJK”两个部分,其中第一部分“ABCDEFG”被复制到初始字面量字段104,并且第二部分“HIJK”被复制到扩展字面量字段108.1。初始字面量长度字段102可以包括均为1的3个比特位(例如,“111”)。扩展字面量长度字段106.1可以包含值4(例如,“0100”)。的接下来的5个字节“ABCDE”可以是前五5个字节的匹配序列。考虑到最小匹配,初始匹配长度字段110可以包含值2(例如,二进制“010”)。在使用绝对索引作为匹配位置的实施例中,匹配位置字段112可以包含值0(对于从零开始索引的情况)或值1(对于从一开始索引的情况)。在使用偏移量作为匹配位置的实施例中,匹配位置字段112可以包含值11(11),因为匹配的序列通过从当前位置计数11个字节开始。
重复匹配区段132可以包括初始重复长度字段116和扩展重复长度字段118.1到118.n。匹配的数据可以保持重复以形成重复模式。初始重复长度字段116可以具有等于或大于1的固定宽度,例如,1比特、2比特、3比特等。初始重复长度字段116和扩展重复长度字段118.1到118.n可以包含指示重复次数的值。重复长度字段118.1到118.n中的每一个可以具有固定的比特宽度。重复长度字段118.1到118.n的固定宽度在一些实施例中可以相等而在其他一些实施例中可以不相等。重复长度字段118.1到118.n的示例性宽度可以是2比特、3比特、4比特或任何合适数量的比特。出于说明的目的,本公开中的初始重复长度116和扩展重复长度字段118.1到118.n可以使用2比特作为示例。类似于扩展字面量长度字段和扩展匹配长度字段,仅当先前的重复长度字段中的所有比特位都是1时,才可以使用扩展重复长度字段118.2到118.n。
例如,要压缩的数据可以是100个字节重复的零。在最小匹配为4的情况下,前四个零字节可以作为零字符串复制到初始字面量字段104。接下来的四个零字节可以是四个零字节的匹配序列。匹配的第二个四个零字节(这100个零字节中的第三个四个零字节)和所有后面的匹配的四个零字节可以形成具有23次重复的重复模式。在该示例中,初始重复长度字段116可以具有值3(例如,二进制“11”),扩展重复长度字段118.1至118.6可以包含值3(例如,二进制“11”),并且扩展重复长度字段118.8可以包含值2(例如,二进制“10”)。
上述的“重复模式”匹配可用于减轻传统LZ系列压缩算法中重叠匹配的问题。在一个实施例中,可以假设长重复模式很少存在,因此,重复匹配区段132可以仅在初始匹配长度字段110的值小于其最大值(例如,小于均为1的值)时存在。考虑到最小匹配,对于初始匹配长度字段110的宽度为3比特且最大值为7的示例,这可以有效地将重复模式的序列的最大长度设置为9字节(例如,6+最小批数-1)。换句话说,在该实施例中,重复字段116和第一扩展匹配长度字段114.1可以是互斥的。
压缩数据块100可以通过不同实施例中的各种实现来生成。图2示意性地示出了根据本公开的一个实施例的编码器200。编码器200可以被配置为接收输入数据流并为输入数据生成压缩数据块,因此可以称为压缩器或压缩引擎。编码器200可以包括数据打包器202、散列值计算器204、散列表更新器206、散列表212、匹配位置搜索器208和匹配位置合并器210。数据打包器202可以接收输入数据流,并通过生成多个数据片段的短序列来处理所接收的数据。每个数据片段可以包括最小匹配字节。第一个数据片段可以从数据流的起始字节开始,所有其他数据片段可以从前面的数据片段的第二个字节处开始。例如,数据流“ABCDEFG”可以被打包成“ABCD”,“BCDE”,“CDEF”和“DEFG”的4字节数据片段序列。在一些实施例中,可以可选地将要压缩的数据划分为多个块,例如,4K字节(4KB)块。并且位置信息可以是一个块内的位置。例如,绝对索引可以是从块开始的位置。在以块为单位处理数据的实施例中,除了第一个数据片段可以在当前块的起始字节处开始之外,每个数据片段可以在先前数据片段的第二字节处开始。
数据打包器202可以具有确定可以在一批中打包多少数据片段的数据处理带宽,。例如,如果数据打包器202具有4的数据处理带宽,则数据打包器202可以在一批中打包四个4字节数据片段。因此,可以将数据序列“ABCDEFGHABCDE”在前四个4字节序列中打包成“ABCD”、“BCDE”、“CDEF”和“DEFG”,并从数据打包器202输出。在接下来的四个4字节序列“EFGH”、“FGHA”、“GHAB”和“HABC”可以第二批被打包在数据打包器202中,并从数据打包器202输出。在另一个实施例中,数据打包器202可以具有8的数据处理带宽,并且可以在成批从数据打包器202生成和输出八个4字节序列。
散列值计算器204可以被配置为生成由数据打包器202生成的短序列的散列值。例如,如果数据打包器202生成4个短序列并且成批发送到散列值计算器202,则散列值计算器204可以成批生成4个散列值,每个散列值可以分别针对一个短序列的数据片段生成。用于生成散列值的4字节序列也可以称为与散列值对应的4字节序列。
由散列值计算器204生成的散列值可以被发送到散列表更新器206,其中可以在散列表212中跟踪先前处理的散列值及其对应的4字节数据片段序列(和位置)。散列表212可以以合适的数据结构实现,例如但不限于字典,其中散列值可以用作字典中的条目的索引。索引指向的每个条目可以具有一个用于存储相应的4字节序列的字段和另一个用于存储位置的字段。在一个实施例中,该位置可以是当前正在处理的4K字节块中的相应4字节序列的绝对索引,例如,以4K字节块中的第一字节为0(用0索引定位)或者1(用1索引定位)开始。
在一些实施例中,当从散列值计算器204接收到多个散列值及其对应的4字节序列时,散列表更新器206可以按照对应的4字节序列在输入流的位置的顺序处理散列值。例如,输入数据流“ABCDEFGHABCDE”的前四个4字节序列可以是“ABCD”、“BCDE”、“CDEF”和“DEFG”,并且可以首先处理4字节序列“ABCD”,然后第二处理“BCDE”,第三处理“CDEF”和最后处理“DEFG”。
如果散列表212没有由散列表更新器206新接收的散列值指向的条目,则散列表更新器206可以尝试用新接收的散列值作为新条目的索引来更新散列表212,将相应的4字节序列和4字节序列的位置存储在数据流中。在一些实施例中,如果没有空间容纳新条目,则可以清除现有条目并且新条目可以占用所清除条目的空间。在一个实施例中,可以使用缓存替换算法来选择该现有条目,例如但不限于最近最少使用算法(LRU)。
如果散列表212已经具有由新接收的散列值指向的条目,则它可以是匹配或散列值冲突。匹配可能意味着对应于新接收的散列值的4字节序列在已经处理的数据中并且已被找到。也就是说,4字节序列已经被复制到字面量字符串的输出中,并且它的位置在散列表中。散列值冲突可能意味着对应于新接收的散列值的4字节序列不在已经处理的数据中,但是已经处理的数据具有另外的4字节序列,其具有等于新接收的散列值的散列值。
如果新接收的散列值是散列表的条目的现有索引,则匹配位置搜索器208可以将对应于新接收的散列值的4字节序列与存储在散列表由索引指向的条目中的4字节序列进行比较。如果两个4字节序列相等,则存在匹配,并且可以将4字节序列和存储在条目中的位置传递给匹配位置合并器210。
如果两个4字节序列不同,则为散列冲突并且可以使用冲突解决技术。冲突解决技术可以是本领域已知的技术之一或任何未来开发的合适技术。例如,处理散列冲突的一种方法是在散列表中添加另一个条目,以便一个索引可以指向散列表中的两个或更多个条目,并且每次新接收的散列值是现有索引时,索引指向的条目中的每4字节序列可以检查以确定是否存在匹配或散列冲突。
在一个实施例中,匹配位置搜索器208可以接收用于生成散列值的4字节序列和表示用于搜索窗口中匹配位置的窗口(例如,当前4KB数据块)的长度的固定宽度(例如,12比特)。
匹配位置合并器210可以被配置为生成匹配长度和匹配位置信息。在一些实施例中,匹配位置合并器210可以被配置为确定是否存在多个匹配的4字节序列,其位置是以连续顺序从散列表获得的,并确定匹配的长度是否可以是单个匹配数据序列的长度。例如,如果两个连续的4字节序列“ABCD”和“BCDE”都匹配,则匹配位置合并器210可以被配置为将这两个序列合并成一个匹配序列“ABCDE”,其匹配长度为5个字节,并且匹配位置是匹配序列“ABCD”的位置。在一个实施例中,匹配序列的位置可以直接从散列表条目获得,该散列表条目可以是输入数据流中匹配序列的绝对索引,并且匹配序列的绝对索引可以放入匹配位置字段中作为匹配位置。在另一实施例中,要作为匹配位置放入匹配位置字段中的值可以是通过从当前位置的值减去绝对索引而获得的偏移量。
在一些实施例中,散列表212可以具有有限的大小,并非所有先前处理的散列值及其对应的4字节序列可以被保存在散列表212中。因此,可能存在散列值和相应的4字节序列中的遗漏匹配。在一个实施例中,匹配位置合并器210可以被配置为如果遗漏的匹配模式位于由索引距离最大为最小匹配分开的两个匹配序列之间的输入流中,则恢复遗漏的匹配模式。当索引差值等于两个匹配位置的差值,并且该差值是最小匹配或更小时,两个连续匹配之间的所有序列可以合并为一个匹配序列。
例如,如果正在处理五个连续序列“ABCD”、“BCDE”、“CDEF”、“DEFG”、“EFGH”及其散列值,并且字符串“ABCDEFGH”在已处理的数据中,则在理想情况下,应该在散列表212中跟踪所有五个序列并进行匹配。但是由于大小限制,散列表212可以具有“ABCD”和“EFGH”的条目,但没有“BCDE”、“CDEF”或“DEFG”的条目,假设匹配的序列“ABCD”具有存储在散列表中的绝对索引“N”,那么匹配的序列“EFGH”可以具有存储在散列表中的绝对索引“N+4”。“EFGH”和“ABCD”之间的索引距离是4并且等于匹配序列之间的差值,并且索引差值是最小匹配,因此满足最小匹配或更小的条件。在这种情况下,匹配位置合并器210可以确定匹配的模式是“ABCDEFGH”,匹配长度为8(“8”),匹配位置是“ABCD”序列的位置(例如“N”或当前指数的偏移量减去N)。
在另一个例子中,假设“ABCDEDEFG”序列是在已处理数据中,并且“ABCD”、“BCDE”和“DEFG”在散列表中的位置值为L、L+1和L+5,并且L可以是一个大于或等于零的索引值。现在假设另一个“ABCDEFG”序列被打包成位置值为M的“ABCD”、位置值为M+1的“BCDE”、位置值为M+2的“CDEF”和位置值M+3的“DEFG”。4字节序列“ABCD”、“BCDE”和“DEFG”可以与对应的散列表条目匹配。“BCDE”和“DEFG”是连续的匹配,但匹配位置值的差值为4,索引差值为2,因此,“ABCDEFG”序列中“BCDE”和“DEFG”之间的序列不是遗漏匹配,这两个序列不能组合成一个匹配的序列。
因此,在一个实施例中,匹配位置合并器210可以在确定匹配长度和匹配位置之前,检查索引距离及两个连续匹配之间的匹配位置差值。
在一个实施例中,匹配位置合并器210可以接收对应于散列值的4字节序列和表示用于合并窗口内的匹配序列的窗口长度的固定宽度(例如,12比特)。
输出汇编器214可以被配置为通过首先将一个或多个字面量长度字段与一个或多个字面量字段交织来为输入数据流生成压缩数据块。该一个或多个字面量字段中的每一个可以包含从输入流逐字复制到输出的第一数据段的一部分,并且该一个或多个字面量长度字段中的每一个可以包含表示后续字面量字段的长度的值。该一个或多个字面量长度字段的组合可以包含表示第一数据段的总长度的总值。
输出汇编器214还可以被配置为处理任何重复模式。如果存在具有相同匹配位置和匹配长度的任何连续匹配序列,则可以检测到重复模式,并且输出汇编器214可以生成初始重复长度字段116和任何扩展重复长度字段118,其中这些字段中的总值表示重复次数。
在一个实施例中,数据片段的所有4字节序列可以被传递到输出汇编器214,而不管这些序列中是否已经与先前处理的数据匹配或被确定为可以恢复的遗漏匹配。当序列在先前处理的数据中不匹配并且不能作为遗漏匹配恢复时,可以确定需要将4字节序列中的第一个字节逐字地复制到压缩数据块。例如,如果“ABCD”没有匹配且无法作为遗漏匹配恢复,则“A”可以逐字地复制到压缩数据块,因为“BCD”可能是下一个4字节序列“BCDE”的前三个字节,可以与先前处理的数据片段匹配。如果“BCDE”没有匹配并且不能作为遗漏匹配恢复,则“B”可以逐字地复制到压缩数据块。当要逐字复制的字节数达到可以由初始字面量长度(例如,7)表示的最大值时,初始字面量长度字段102可以是完整的,并且初始字面量字段104可以用初始字面量长度表示的最大字节数字段填充,并且任何后续字节可以被填充到一个或多个扩展字面量字段,直到由每个对应的扩展字面量长度字段指示的最大值。
当可以匹配一个或多个4字节数据片段序列时,可以完成一个或多个字面量长度字段与一个或多个字面量字段的交织。匹配位置合并器210可以将匹配位置(例如,绝对索引或偏移)和匹配长度传递给输出汇编器214。输出汇编器214可以将一个或多个匹配长度字段和包含匹配位置的匹配位置字段写入输出。一个或多个匹配长度字段的组合可以包含表示匹配数据段的总长度的总值。
在一个实施例中,一旦数据到达输出汇编器214,就可以生成字面量长度字段、字面量字段、匹配长度字段、位置字段、重复字段和重复长度字段,并立即输出。因此,在从编码器200输出压缩数据之前,不需要等待整个压缩数据块被汇编。
图3示意性地示出了根据本公开的一个实施例的解码器300。解码器300可以包括输入缓冲器302、区段提取器304、存储器命令生成器306、解压缩缓冲器308和输出缓冲器310。解码器300可以处理压缩数据的输入流以生成解压缩数据。解码器300可以在输入缓冲器302处接收压缩数据块。在一个实施例中,输入缓冲器302可以具有固定的宽度以便于后续处理。例如,如果最小匹配是4,则输入缓冲器可以具有8字节宽度,使得可以在其中临时存储8个字节。两个8字节可以组合成16字节以输入到区段提取器304。
在区段提取器304处,可以从输入的压缩数据中提取字面量区段、匹配区段和重复区段。例如,基于压缩数据块100的格式。区段提取器304可以被配置为读取输入数据的内容,区分不同区段并分离字面量区段、匹配区段和重复区段。分离的字面量区段、匹配区段和重复区段可以被传递到存储器命令生成器306。
在存储器命令生成器306中,可以生成读取和写入命令。例如,从提取的字面量区段,可以通过组合初始字面量字段中的字面量字符串和所有扩展字面量字段(如果有)来生成字面量字符串。存储器命令生成器306可以生成一个或多个写命令以将该字面量字符串写入解压缩缓冲器308。解压缩缓冲器308可以将字面量字符串发送到输出缓冲器310并且还保存字面量字符串的副本。从提取的匹配区段,可以获得匹配位置,并且可以通过组合初始匹配长度字段和所有扩展匹配长度字段(如果有的话)中的值来确定匹配长度,并且可以由存储器命令生成器306发出读取命令,以从匹配位置处的已解压缩的数据中读取匹配长度的匹配字节序列,并将匹配字节序列写入解压缩缓冲器308。并且,如果存在重复区段,则可以通过组合所有重复长度字段的值来确定重复次数,并且可以在解压缩缓冲器308中重建重复的数据序列。在一个实施例中,可以将从匹配区段和重复区段重建的解压缩数据发送到输出缓冲器310。
在一个实施例中,解压缩缓冲器308可以包括解压缩缓存器和解压缩存储器。解压缩存储器可以用作用于保存已经处理的数据的存储器,使得可以从已经处理的数据获得匹配模式。解压缩缓存器可以在字面量字符串被发送到输出缓冲器310之前用作字面量字符串的临时存储,并且还可以在任何匹配模式和重复模式可以恢复为解压缩(或预压缩)格式之前用作工作缓存来组合从解压缩存储器获得的匹配和重复模式。在一个实施例中,输出缓冲器310的输入可以具有与耦合到解码器300的数据总线的宽度匹配的宽度。
在一些实施例中,解码器的吞吐量可能受到解压缩存储器的带宽的限制。例如,解压缩存储器可以由静态随机存取存储器(SRAM)实现,而对解压缩存储器的读取或写入操作可能会受到SRAM的读取或写入吞吐量限制的约束。缓存可用于缓解瓶颈。例如,由D触发器(DFF)实现的缓存可以提高吞吐量。
在一个实施例中,编码器200和解码器300中的任一个或两者可以在现场可编程门阵列(FPGA)或专用IC(ASIC)中实现。在另一个实施例中,编码器200和解码器300可以由计算机系统400实现,如图4所示。计算机系统400可以包括计算机处理器402和存储器404。存储器404可以包括可执行指令,使得处理器402可以执行并执行编码器200和解码器300的所有功能。
图5示出了根据本公开的实施例的用于压缩数据流的过程500。过程500可以从输入数据流生成一个或多个压缩数据块100。在框502中,将一个或多个字面量长度字段与一个或多个字面量字段交织到输出。所述一个或多个字面量长度字段可以包含逐字从输入流复制到输出的第一数据段。该一个或多个字面量字段中的每一个可以包含从输入数据流逐字复制到输出的第一数据段的一部分,并且该一个或多个字面量长度字段中的每一个可以包含表示后续字面量长度字段的值。该一个或多个字面量长度字段的组合可以包含表示第一数据段的总长度的第一总值;
在框504中,可以确定第二数据段以匹配先前逐字复制的数据序列,并且可以确定匹配位置。该第二数据段可以是具有最小匹配长度的一个匹配数据片段,或者包括从多个匹配数据片段合并的数据。在框506中,可以将一个或多个匹配长度字段和匹配位置字段写入输出。该匹配位置字段可以包含表示匹配位置的值,并且该一个或多个匹配长度字段的组合可以包含表示第二数据段的总长度的第二总值。
图6示出了根据本公开的一个实施例的用于解压缩压缩数据流的过程600。压缩数据流可包括一个或多个压缩数据块100。在框602中,可以接收一个或多个压缩数据块。例如,输入缓冲器可以接收要解压缩的一个或多个压缩数据块。在框604中,可以从该压缩数据块中提取不同区段。例如,可以从压缩数据块100中提取字面量区段、匹配区段和重复区段。在框606中,可以生成存储器命令。例如,可以生成写命令以将字面量区段中的字面量字符串写入解压缩缓冲器,以及可以生成读取命令以从匹配位置读取具有匹配长度的匹配字节序列,并将匹配序列发送到解压缩缓冲器。在框608中,可以将解压缩的数据写入到输出缓冲器。在框610中,可以从解压缩器输出解压缩的数据。例如,解压缩的数据可以被输出到PCIe总线。
在一些实施例中,交织字面量长度字段和字面量字段可以使编码过程更加硬件友好,因为不需要将可能很长的字面量数据字符串存储在缓冲器中。因此,示例性的编码器可以在处理完字面量数据片段后立即输出,并且数据片段的大小可以通过设计选择(例如,吞吐量要求或硬件资源)来确定。例如,如果将长字符串数据逐字从输入流复制到输出流,则可以在处理完长字符串的每个数据片段后立即输出。此外,在诸如LZ4的一些传统LZ系列压缩技术中,压缩数据块中的第一字段(例如,令牌)包括初始字符长度和初始匹配长度。这样的令牌要求对要对逐字复制数据进行缓存并且仅在找到第一匹配之后才开始输出处理。相反的,根据本公开的编码器的实施例可以立即开始输出字面量数据(一旦字面量长度字段达到其最大值)而不等待找到第一匹配。
此外,诸如LZ4的大多数传统LZ系列压缩技术都依赖于解码期间的重叠匹配,其中匹配数据段的某些部分包含在尚未解压缩的数据中。重叠匹配使数据与时间有关,因为当找到匹配时解码器不能使用尚未解压缩的数据,并且解码器必须等待数据变得可用才输出解压缩数据。根据本公开的实施例可以使用重复模式确定,重复字段和一个或多个重复长度字段来节省解码期间重叠匹配的麻烦,因为重复数据段已经被解码并且与时间无关。
另外,在一些实施例中,匹配位置可以是搜索窗口中的绝对索引(例如,4KB),并且不需要基于偏移来计算匹配位置。
在一个示例性实施例中,提供了一种用于生成压缩数据的方法。该方法可以包括:将一个或多个字面量长度字段与一个或多个字面量字段交织到输出,所述一个或多个字面量字段中的每一个包含从输入数据流逐字复制到输出的第一数据段的一部分,所述一个或多个字面量长度字段中的每一个包含表示后续字面量字段长度的值,所述一个或多个字面量长度字段组合包含表示所述第一数据段的总长度的第一总值;确定与先前逐字复制的数据序列和匹配位置匹配的输入数据流的第二数据段;并且向所述输出写入一个或多个匹配长度字段和包含表示所述匹配位置的值的匹配位置字段,所述一个或多个匹配长度字段的组合包含表示第二数据段的总长度的第二总值。
在一个实施例中,该方法可以进一步包括:将输入数据流打包成多个数据片段,计算多个数据片段中的每一个的散列值,并确定所述多个数据片段中的每一个是否分别基于所述散列值在先前处理的数据中具有匹配。每个数据片段的长度都可以是最小匹配长度,所述多个数据片段的第一数据片段从所述输入数据流的起始数据单元处开始,而所述第一数据片段之后的每个所述数据片段从前一个数据片段的第二个数据单元处开始;
在一个实施例中,可以通过合并两个或更多个匹配的数据片段来获得所述第二数据片段,并且其匹配位置是该两个或更多个匹配的数据片段中的第一匹配数据片段的位置。
在一个实施例中,可以通过合并由索引差值分开的至少两个匹配数据片段来获得所述第二数据片段,所述索引差值等于匹配位置差值,并且所述索引差值是所述最小匹配长度或小于所述最小匹配长度。
在一个实施例中,该方法还可以在散列表中跟踪先前处理的数据。
在一个实施例中,所述散列表是具有散列值作为索引的字典,并且索引指向的每个条目可以存储与所述散列值相对应的数据片段和所述数据片段的位置。
在一个实施例中,该方法还可以包括:确定是否存在重复模式;以及生成一个或多个重复长度字段,其包含表示重复模式的重复次数的第三总值。
在一个实施例中,所述匹配位置可以是从该输入数据流的起始起的绝对索引。
在一个实施例中,所述匹配位置可以是从正在处理的数据片段的当前位置起的偏移量。
在另一示例性实施例中,提供了一种包括编码器装置。所述编码器包括:数据打包器,用于从输入数据流生成一个或多个数据片段,所述一个或多个数据片段中的每一个具有最小匹配长度;散列值计算器,用于为所述一个或多个数据片段中的每一个生成散列值;散列表,用于使用各自的散列值跟踪所述一个或多个数据片段;匹配位置搜索器,用于基于所述散列表中的条目搜索数据片段是否在已处理的数据中具有匹配;匹配位置合并器,用于合并已在已处理数据中找到匹配的两个或多个数据片段;以及输出汇编器,其被配置为:将一个或多个字面量长度字段与一个或多个字面量字段交织到输出,所述一个或多个字面量字段中的每一个包含从所述输入数据流逐字复制到输出的第一数据段的一部分,所述一个或多个字面量长度字段中的每一个包含表示后续字面量字段长度的值,所述一个或多个字面量长度字段的组合包含表示所述第一数据段的总长度的第一总值;确定与先前逐字复制的数据序列匹配的输入数据流的第二数据段和匹配位置;以及向输出写入一个或多个匹配长度字段和包含表示匹配位置的值的匹配位置字段,所述一个或多个匹配长度字段的组合包含表示所述第二数据段的总长度的第二总值。
在一个实施例中,所述一个或多个数据片段的第一数据片段在所述输入数据流的起始数据单元处开始,并且所述第一数据片段之后的每个数据片段在前一个数据片段的第二数据单元处开始。
在一个实施例中,可以通过合并两个或更多个匹配的数据片段来获得所述第二数据片段,并且所述匹配位置是两个或更多个匹配的数据片段的第一匹配数据片段的位置。
在一个实施例中,可以通过合并由等于匹配位置差值的索引差值分开的至少两个匹配数据片段来获得所述第二数据片段,并且所述索引差值是所述最小匹配长度或小于所述最小匹配长度。
在一个实施例中,所述散列表是具有散列值作为索引的字典,并且索引指向的每个条目存储与所述散列值对应的数据片段和所述数据片段的位置。
在一个实施例中,所述输出汇编器还可以被配置为:确定是否存在重复模式;以及生成一个或多个重复长度字段,其包含表示重复模式的重复次数的第三总值。
在一个实施例中,所述匹配位置是从所述输入数据流的起始起的绝对索引。
在一个实施例中,所述匹配位置是从正在处理的数据片段的当前位置起的偏移。
在一个实施例中,该装置还可以包括:解码器,该解码器包括:区段提取器,被配置为提取包含一个或多个字面量字段的所述一个或多个字面量长度字段作为字面量区段,并提取所述一个或多个匹配长度字段和匹配位置字段作为匹配区段;用于存储解压缩数据的解压缩缓冲器;以及存储器命令生成器,用于将从所述字面量区段获得的字面量字符串写入所述解压缩缓冲器并从所述解压缩缓冲器中读取匹配的数据序列。
在又一示例性实施例中,本文所公开的还可以包括具有可执行指令的非暂时性机器可读介质,其中,所述可执行指令在由计算机系统执行时使得所述计算机系统:将一个或多个字面量长度字段与一个或多个字面量字段交织到输出,所述一个或多个字面量字段中的每一个包含从输入数据流逐字复制到输出的第一数据段的一部分,所述一个或者多个字面量长度字段的每一个包含表示后续字面量字段的长度的值,所述一个或多个字面量长度字段的组合包含表示所述第一数据段的总长度的第一总值;确定与先前逐字复制的数据序列匹配的输入数据流的第二数据段和匹配位置;以及向输出写入一个或多个匹配长度字段和包含表示该匹配位置的值的匹配位置字段,所述一个或多个匹配长度字段的组合包含表示所述第二数据段的总长度的第二总值。
在一个实施例中,所述可执行指令在由处理器执行时还使计算机系统:确定是否存在重复模式;并生成一个或多个重复长度字段,其包含表示重复模式的重复次数的第三总值。
任何所公开的方法和操作可以实现为存储在一个或多个计算机可读存储介质(例如,非暂时性计算机可读介质,诸如一个或多个光学介质盘,易失性存储器组件(诸如动态随机存取存储器(DRAM)或静态随机存取存储器(SRAM)),或非易失性存储器组件(例如硬盘驱动器))上并在设备控制器(例如,由ASIC执行的固件)上执行的计算机可执行指令(例如,用于本文所述操作的软件代码)。用于实现所公开的技术的任何计算机可执行指令以及在所公开的实施例的实现期间创建和使用的任何数据可以存储在一个或多个计算机可读介质(例如,非暂时性计算机可读介质)上。
虽然本文已经公开了各种方面和实施例,但是其他方面和实施例对于本领域技术人员来说将是显而易见的。这里公开的各个方面和实施例是出于说明的目的而不是限制性的,真正的范围和精神由所附权利要求指示。
Claims (20)
1.一种数据压缩方法,其特征在于,包括:
将一个或多个字面量长度字段与一个或多个字面量字段交织到输出,所述一个或多个字面量字段中的每一个包含从输入数据流逐字复制到所述输出的第一数据段的一部分,所述一个或多个字面量长度字段的每一个包含表示后续字面量字段的长度的值,所述一个或多个字面量长度字段的组合包含表示所述第一数据段的总长度的第一总值;
确定与先前逐字复制的数据序列匹配的所述输入数据流的第二数据段和匹配位置;以及
向所述输出写入一个或多个匹配长度字段和包含表示所述匹配位置的值的匹配位置字段,所述一个或多个匹配长度字段的组合包含表示所述第二数据段的总长度的第二总值。
2.如权利要求1所述的方法,其特征在于,还包括:
将所述输入数据流打包成多个数据片段,每个所述数据片段具有最小匹配长度的长度,所述多个数据片段的第一数据片段从所述输入数据流的起始数据单元处开始,所述第一数据片段之后的每个所述数据片段从前一个数据片段的第二个数据单元处开始;
计算所述多个数据片段中的每一个的散列值;以及
分别基于对应的散列值,确定所述多个数据片段中的每一个是否在先前处理的数据中具有匹配。
3.如权利要求2所述的方法,其特征在于,第二数据片段通过合并两个或更多个匹配的数据片段来获得,并且所述匹配位置是所述两个或更多个匹配的数据片段的第一匹配数据片段的位置。
4.如权利要求2所述的方法,其特征在于,第二数据片段通过合并由索引差值分开的至少两个匹配数据片段来获得所述索引差值等于匹配位置差值,并且所述索引差值是所述最小匹配长度或小于所述最小匹配长度。
5.如权利要求2所述的方法,其特征在于,还包括:在散列表中跟踪先前处理的数据。
6.如权利要求5所述的方法,其特征在于,所述散列表是以散列值作为索引的字典,并且索引指向的每个条目存储与所述散列值对应的数据片段和所述数据片段的位置。
7.如权利要求2所述的方法,其特征在于,还包括:
确定是否存在重复模式;以及
生成一个或多个重复长度字段,其包含表示所述重复模式的重复次数的第三总值。
8.如权利要求1所述的方法,其特征在于,所述匹配位置是从所述输入数据流的起始起的绝对索引。
9.如权利要求1所述的方法,其特征在于,所述匹配位置是相对于正在处理的数据片段的当前位置的偏移量。
10.一种数据压缩装置,其特征在于,包括:
编码器,所述编码器包括:
数据打包器,用于从输入数据流生成一个或多个数据片段,所述一个或多个数据片段中的每一个具有最小匹配长度;
散列值计算器,用于为所述一个或多个数据片段中的每一个生成散列值;
散列表,用于使用对应的散列值跟踪所述一个或多个数据片段;
匹配位置搜索器,用于基于所述散列表中的条目搜索数据片段是否在已处理的数据中具有匹配;
匹配位置合并器,用于合并已在已处理数据中找到匹配的两个或多个数据片段;以及
输出汇编器,被配置为:将一个或多个字面量长度字段与一个或多个字面量字段交织到输出,所述一个或多个字面量字段中的每一个包含从所述输入数据流逐字复制到输出的第一数据段的一部分,所述一个或多个字面量长度字段中的每一个包含表示后续字面量字段长度的值,所述一个或多个字面量长度字段的组合包含表示所述第一数据段的总长度的第一总值;
确定与先前逐字复制的数据序列匹配的所述输入数据流的第二数据段和匹配位置;以及
向所述输出写入一个或多个匹配长度字段和包含表示匹配位置的值的匹配位置字段,所述一个或多个匹配长度字段的组合包含表示所述第二数据段的总长度的第二总值。
11.如权利要求10所述的装置,其特征在于,所述一个或多个数据片段的第一数据片段在所述输入数据流的起始数据单元处开始,并且所述第一数据片段之后的每个数据片段在前一个数据片段的第二数据单元处开始。
12.如权利要求11所述的装置,其特征在于,第二数据片段通过合并两个或更多个匹配的数据片段来获得,并且所述匹配位置是两个或更多个匹配的数据片段的第一匹配数据片段的位置。
13.如权利要求11所述的装置,其特征在于,第二数据片段通过合并由等于匹配位置差值的索引差值分开的至少两个匹配数据片段来获得,并且所述索引差值是所述最小匹配长度或小于所述最小匹配长度。
14.如权利要求10所述的装置,其特征在于,所述散列表是以散列值作为索引的字典,并且索引指向的每个条目存储与所述散列值对应的数据片段和所述数据片段的位置。
15.如权利要求10所述的装置,其特征在于,所述输出汇编器还被配置为:
确定是否存在重复模式;以及
生成一个或多个重复长度字段,其包含表示所述重复模式的重复次数的第三总值。
16.如权利要求10所述的装置,其特征在于,所述匹配位置是从所述输入数据流的起始起的绝对索引。
17.如权利要求10所述的装置,其特征在于,所述匹配位置是相对于正在处理的数据片段的当前位置的偏移量。
18.如权利要求10所述的装置,其特征在于,还包括解码器,所述解码器包括:
区段提取器,被配置为提取包含一个或多个字面量字段的所述一个或多个字面量长度字段作为字面量区段,并提取所述一个或多个匹配长度字段和所述匹配位置字段作为匹配区段;
用于存储解压缩数据的解压缩缓冲器;以及
存储器命令生成器,用于将从所述字面量区段获得的字面量字符串写入到所述解压缩缓冲器并从所述解压缩缓冲器中读取匹配的数据序列。
19.一种具有可执行指令的非暂时性机器可读介质,其特征在于,所述可执行指令在由计算机系统的处理器执行时使得所述计算机系统:
将一个或多个字面量长度字段与一个或多个字面量字段交织到输出,所述一个或多个字面量字段中的每一个包含从输入数据流逐字复制到输出的第一数据段的一部分,所述一个或者多个字面量长度字段的每一个包含表示后续字面量字段的长度的值,所述一个或多个字面量长度字段的组合包含表示所述第一数据段的总长度的第一总值;
确定与先前逐字复制的数据序列匹配的输入数据流的第二数据段和匹配位置;以及
向输出写入一个或多个匹配长度字段和包含表示匹配位置的值的匹配位置字段,所述一个或多个匹配长度字段的组合包含表示所述第二数据段的总长度的第二总值。
20.如权利要求19所述的非暂时性机器可读介质,其特征在于,所述可执行指令在由所述处理器执行时还使所述计算机系统:
确定是否存在重复模式;以及
生成一个或多个重复长度字段,其包含表示所述重复模式的重复次数的第三总值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110338304.9A CN113098525A (zh) | 2018-12-06 | 2019-10-10 | 硬件友好的数据压缩方法、系统及装置 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/211,313 US10476518B1 (en) | 2018-12-06 | 2018-12-06 | Hardware friendly data compression |
US16/211,313 | 2018-12-06 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110338304.9A Division CN113098525A (zh) | 2018-12-06 | 2019-10-10 | 硬件友好的数据压缩方法、系统及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111294053A CN111294053A (zh) | 2020-06-16 |
CN111294053B true CN111294053B (zh) | 2023-06-16 |
Family
ID=68466345
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910972547.0A Active CN111294053B (zh) | 2018-12-06 | 2019-10-10 | 硬件友好的数据压缩方法、系统及装置 |
CN202110338304.9A Pending CN113098525A (zh) | 2018-12-06 | 2019-10-10 | 硬件友好的数据压缩方法、系统及装置 |
CN202010297782.5A Pending CN112615628A (zh) | 2018-12-06 | 2020-04-15 | 硬件友好地数据压缩 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110338304.9A Pending CN113098525A (zh) | 2018-12-06 | 2019-10-10 | 硬件友好的数据压缩方法、系统及装置 |
CN202010297782.5A Pending CN112615628A (zh) | 2018-12-06 | 2020-04-15 | 硬件友好地数据压缩 |
Country Status (2)
Country | Link |
---|---|
US (3) | US10476518B1 (zh) |
CN (3) | CN111294053B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11436209B2 (en) * | 2019-10-31 | 2022-09-06 | EMC IP Holding Company LLC | Techniques for efficiently determining similarity hashes |
US11184023B1 (en) * | 2020-08-24 | 2021-11-23 | Innogrit Technologies Co., Ltd. | Hardware friendly data compression |
CN113656660B (zh) * | 2021-10-14 | 2022-06-28 | 北京中科闻歌科技股份有限公司 | 跨模态数据的匹配方法、装置、设备及介质 |
CN113986174A (zh) * | 2021-10-28 | 2022-01-28 | 无锡华普微电子有限公司 | 摩托车开机动画显示控制方法、控制装置及显示系统 |
JP7475319B2 (ja) | 2021-11-16 | 2024-04-26 | 株式会社日立製作所 | ストレージシステム及びストレージシステムにおけるデータ処理方法 |
CN114244373B (zh) * | 2022-02-24 | 2022-05-20 | 麒麟软件有限公司 | Lz系列压缩算法编解码速度优化方法 |
CN117792403B (zh) * | 2024-02-26 | 2024-05-07 | 成都农业科技职业学院 | 基于流式大数据技术的分布式农业数据存储管理方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5406279A (en) * | 1992-09-02 | 1995-04-11 | Cirrus Logic, Inc. | General purpose, hash-based technique for single-pass lossless data compression |
CN1997011A (zh) * | 2006-07-26 | 2007-07-11 | 白杰 | 数据分割方法和数据分割装置 |
JP2010136417A (ja) * | 2004-12-28 | 2010-06-17 | Casio Electronics Co Ltd | データ圧縮装置、及びデータ復元装置 |
CN101989443A (zh) * | 2009-03-05 | 2011-03-23 | 马维尔国际贸易有限公司 | 用于数据压缩的多模式编码 |
CN105191144A (zh) * | 2013-03-22 | 2015-12-23 | 富士通株式会社 | 压缩装置、压缩方法、解压装置、解压方法以及信息处理系统 |
CN108880556A (zh) * | 2018-05-30 | 2018-11-23 | 中国人民解放军战略支援部队信息工程大学 | 基于lz77的无损数据压缩方法、误码修复方法及编码器和解码器 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5933104A (en) * | 1995-11-22 | 1999-08-03 | Microsoft Corporation | Method and system for compression and decompression using variable-sized offset and length fields |
US7340499B1 (en) * | 1999-12-03 | 2008-03-04 | Sun Microsystems, Inc. | Dynamic embedding of literal object data in supplied instance of information object |
US7127520B2 (en) * | 2002-06-28 | 2006-10-24 | Streamserve | Method and system for transforming input data streams |
US7764202B2 (en) * | 2008-11-26 | 2010-07-27 | Red Hat, Inc. | Lossless data compression with separated index values and literal values in output stream |
GB2483502B (en) * | 2010-09-10 | 2014-05-07 | Imagination Tech Ltd | Random accessible lossless parameter data compression for title based 3D computer graphics system |
US9934279B2 (en) * | 2013-12-05 | 2018-04-03 | Oracle International Corporation | Pattern matching across multiple input data streams |
US9846574B2 (en) * | 2014-12-19 | 2017-12-19 | Signalfx, Inc. | Representing result data streams based on execution of data stream language programs |
US9686560B2 (en) * | 2015-02-23 | 2017-06-20 | Teledyne Dalsa, Inc. | Lossless data compression and decompression apparatus, system, and method |
US10542457B2 (en) * | 2015-04-20 | 2020-01-21 | Qualcomm Incorporated | Enhanced compression formats for data compression |
US9628111B2 (en) * | 2015-05-11 | 2017-04-18 | Via Alliance Semiconductor Co., Ltd. | Hardware data compressor with multiple string match search hash tables each based on different hash size |
CN106385260B (zh) * | 2016-09-28 | 2019-05-21 | 中电莱斯信息系统有限公司 | 一种基于低延时的lz无损压缩算法的fpga实现系统 |
CN107180018B (zh) * | 2017-05-17 | 2018-11-20 | 上海兆芯集成电路有限公司 | 基于散列的加速压缩方法以及使用此方法的装置 |
CN107395209B (zh) * | 2017-07-03 | 2020-11-24 | 北京京东尚科信息技术有限公司 | 数据压缩方法、数据解压缩方法及其设备 |
US10462495B2 (en) * | 2017-08-09 | 2019-10-29 | Vital Images, Inc. | Progressive lossless compression of image data |
US10411727B1 (en) * | 2018-10-10 | 2019-09-10 | Ambarella, Inc. | High throughput hardware unit providing efficient lossless data compression in convolution neural networks |
US10454498B1 (en) * | 2018-10-18 | 2019-10-22 | Pure Storage, Inc. | Fully pipelined hardware engine design for fast and efficient inline lossless data compression |
-
2018
- 2018-12-06 US US16/211,313 patent/US10476518B1/en active Active
-
2019
- 2019-10-03 US US16/591,737 patent/US10587285B1/en active Active
- 2019-10-10 CN CN201910972547.0A patent/CN111294053B/zh active Active
- 2019-10-10 CN CN202110338304.9A patent/CN113098525A/zh active Pending
-
2020
- 2020-01-29 US US16/775,410 patent/US10938410B2/en active Active
- 2020-04-15 CN CN202010297782.5A patent/CN112615628A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5406279A (en) * | 1992-09-02 | 1995-04-11 | Cirrus Logic, Inc. | General purpose, hash-based technique for single-pass lossless data compression |
JP2010136417A (ja) * | 2004-12-28 | 2010-06-17 | Casio Electronics Co Ltd | データ圧縮装置、及びデータ復元装置 |
CN1997011A (zh) * | 2006-07-26 | 2007-07-11 | 白杰 | 数据分割方法和数据分割装置 |
CN101989443A (zh) * | 2009-03-05 | 2011-03-23 | 马维尔国际贸易有限公司 | 用于数据压缩的多模式编码 |
CN105191144A (zh) * | 2013-03-22 | 2015-12-23 | 富士通株式会社 | 压缩装置、压缩方法、解压装置、解压方法以及信息处理系统 |
CN108880556A (zh) * | 2018-05-30 | 2018-11-23 | 中国人民解放军战略支援部队信息工程大学 | 基于lz77的无损数据压缩方法、误码修复方法及编码器和解码器 |
Non-Patent Citations (1)
Title |
---|
王忠效.基于字符串匹配的通用数据压缩算法.计算机应用.1995,(01), * |
Also Published As
Publication number | Publication date |
---|---|
US10938410B2 (en) | 2021-03-02 |
US10587285B1 (en) | 2020-03-10 |
US20200186165A1 (en) | 2020-06-11 |
CN112615628A (zh) | 2021-04-06 |
US10476518B1 (en) | 2019-11-12 |
CN113098525A (zh) | 2021-07-09 |
CN111294053A (zh) | 2020-06-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111294053B (zh) | 硬件友好的数据压缩方法、系统及装置 | |
CN108768403B (zh) | 基于lzw的无损数据压缩、解压方法及lzw编码器、解码器 | |
US8988257B2 (en) | Data compression utilizing variable and limited length codes | |
US7817069B2 (en) | Alternative encoding for LZSS output | |
US7215259B2 (en) | Data compression with selective encoding of short matches | |
JP6319740B2 (ja) | データ圧縮を高速化する方法、並びに、データ圧縮を高速化するためのコンピュータ、及びそのコンピュータ・プログラム | |
JP3362177B2 (ja) | データ圧縮方法及び装置 | |
US6744388B1 (en) | Hardware-friendly general purpose data compression/decompression algorithm | |
US6614368B1 (en) | Data compression method and apparatus utilizing cascaded character tables | |
CN112514270B (zh) | 数据压缩 | |
JPS60116228A (ja) | ディジタル信号ストリーム圧縮方法及び圧縮装置 | |
EP0438955A1 (en) | Data compression method | |
KR20120115244A (ko) | 데이터 압축 동안의 대안적 인코딩 솔루션들 평가 | |
KR19990029626A (ko) | 적응형 데이터 압축을 수행하는 방법 및 장치 | |
US20190052284A1 (en) | Data compression apparatus, data decompression apparatus, data compression program, data decompression program, data compression method, and data decompression method | |
US5502439A (en) | Method for compression of binary data | |
JP3241788B2 (ja) | データ圧縮方式 | |
EP0435802B1 (en) | Method of decompressing compressed data | |
US5010344A (en) | Method of decoding compressed data | |
JP3241787B2 (ja) | データ圧縮方式 | |
JP3242795B2 (ja) | データ処理装置及びデータ処理方法 | |
RU2473960C2 (ru) | Способ нахождения максимальных повторяющихся участков последовательности символов конечного алфавита и способ вычисления вспомогательного массива | |
CN112738124B (zh) | 硬件友好的数据压缩方法、压缩器 | |
CN117375627B (zh) | 适用于字符串的纯文本格式数据的无损压缩方法和系统 | |
CN113315523B (zh) | 硬件友好的数据解压缩 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: Room 601-606, No. 40, Lane 565, Shengxia Road, China (Shanghai) Pilot Free Trade Zone, Pudong New Area, Shanghai, 201210 (nominal floor 6, actual floor 5) Patentee after: Yingren Technology Co.,Ltd. Address before: Room 502, 570 Shengxia Road, China (Shanghai) Pilot Free Trade Zone, Pudong New Area, Shanghai, 201210 Patentee before: Yingren Technology (Shanghai) Co.,Ltd. |