CN106852185A - 基于字典的并行压缩编码器 - Google Patents
基于字典的并行压缩编码器 Download PDFInfo
- Publication number
- CN106852185A CN106852185A CN201580057220.0A CN201580057220A CN106852185A CN 106852185 A CN106852185 A CN 106852185A CN 201580057220 A CN201580057220 A CN 201580057220A CN 106852185 A CN106852185 A CN 106852185A
- Authority
- CN
- China
- Prior art keywords
- token
- tokens
- input traffic
- word
- compression
- 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.)
- Granted
Links
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/42—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
-
- 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
-
- 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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明公开了利用历史搜索进行基于字典的压缩的数据压缩系统、设备和方法。所述系统、设备和方法可以使用并行处理技术进行数据压缩和编码。所述系统、设备和方法可以为硬件提供内存搜索技术。
Description
相关申请案交叉申请
本申请要求于2014年10月21日递交的发明名称为“数据压缩系统、设备和方法”的第62/066,572号美国临时专利申请案的在先申请优先权,以及于2015年10月20日递交的发明名称为“基于字典的并行压缩编码器”的第14/887,908号美国申请案的在先申请优先权,这些在先申请的内容以引入的方式并入本文。
技术领域
本文描述的实施例通常涉及数据压缩系统、设备和方法,尤其涉及无损数据压缩系统、设备和方法。
背景技术
数据压缩涉及对作为输入的符号序列进行处理,并尝试生成作为输出的较短的序列。无损数据压缩尝试在不丢失信息的情况下,通过标识并消除输入数据中的统计冗余以减少输出。
附图说明
图1是一些实施例中提供的数据压缩系统的示例的示意图;
图2是压缩处理的说明示例性输入的示意图;
图3是压缩处理的说明示例性输入的可替代示意图;
图4是一些实施例提供的示例性数据压缩方法的流程图;
图5是一些实施例提供的用于数据压缩的比较器网络的示意图;
图6是一些实施例提供的用于数据压缩的时序图的示意图;
图7是一些实施例提供的示例性数据压缩方法的可替代流程图;
图8是一些实施例提供的数据压缩系统的示例的可替代示意图;
图9是压缩处理的说明示例性输入的可替代示意图;
图10和图11是一些实施例提供的说明编码过程的表格。
为了进行说明,这些附图描述了示例性实施例。可以对这些示例性实施例进行变型、选择配置、选择组件以及作出修改。
发明内容
在第一方面,提供了一种用于对输入数据流进行编码以生成压缩输出流的电路。所述电路包括:输入单元,用于接收传入的输入数据流,所述输入数据流包括:一系列令牌,其中每个令牌定义所述输入数据流中的位置、长度和类型,所述类型为文字令牌或者复制令牌,每个文字令牌定义文字符号,每个复制令牌具有与所述数据流中一系列令牌中的另一令牌的位置的偏置;内存设备,用于将所述输入数据流的所述一系列令牌存储在存储位置。
所述电路包括:并行处理器,用于在参考所述输入数据流的一系列令牌中各自令牌的位置之前的其他令牌时,利用对内存设备中的所述输入数据流的并行扫描对所述令牌进行编码以同时处理所述输入数据流中的各个令牌,所述并行处理器通过基于所述并行扫描的结果消除所述输入数据流中的一部分令牌来生成所述压缩输出流。
所述电路包括:多个比较器,用于对来自并行扫描的存储器中存储位置的一系列令牌进行比较;内存选择器,用于为每个复制令牌选择对应于偏置的位置的存储位置。所述电路包括:输出单元,用于连接接收设备以输出所述压缩输出流。
在一些实施例中,所述并行处理器采用反向计算、清除计算、正向计算的并行扫描以同时处理所述输入数据流的令牌,以便更新用于生成所述压缩输出流的所述输入数据流。
在一些实施例中,在生成所述压缩输出流时,所述并行处理器利用前导计算和布局计算消除所述输入数据流的一部分令牌。
在一些实施例中,所述并行处理器利用反向计算更新所述传入的输入数据流以将文字令牌替换为附加复制令牌,所述被替换的文字令牌为前导复制令牌的末端,从所述压缩输出数据流中消除所述附加复制令牌,所述被替换的文字令牌被所述前导复制令牌覆盖。
在一些实施例中,所述并行处理器利用清除计算更新所述传入的输入数据流,以将长度小于4的复制令牌替换为文字令牌。
在一些实施例中,所述并行处理器利用正向计算更新所述传入的输入数据流,以合并具有相同偏置的连续重叠复制令牌和相连的文字符号。
在一些实施例中,所述并行处理器利用前导计算将每个令牌标记为非前导令牌或前导令牌中的任一个,所述前导令牌为以下令牌中的至少一个:所述输入数据流中的初始令牌、所述输入数据流中在复制令牌之前或之后的文字令牌、所述输入数据流中在文字令牌之前或之后的复制令牌,以及所述输入数据流中在具有不同偏置的复制令牌之前或之后的复制令牌。
在一些实施例中,所述并行处理器利用布局计算生成所述令牌的大小,通过将所有非前导令牌的大小固定为0并将所有前导令牌的大小固定为1,并确定所述压缩输出数据流中令牌的位置,每个位置由令牌的末端和起点定义,所述末端为所有前述的令牌的大小的前缀总和,所述起点为所述位置和所述前缀总和之差。
在一些实施例中,通过使用令牌的大小将具有非0大小的所有令牌写出至所述压缩输出数据流中所述令牌的位置,所述并行处理器使用所述布局计算的结果生成所述压缩输出数据流。
在一些实施例中,所述并行处理器通过将复制令牌合并成较大的复制令牌,通过将单独的文字令牌合并成较大的文字令牌,并且,针对长度为n的复制令牌,通过消除所述输入数据流中的接下来的n-1个令牌来消除所述输入数据流的一部分令牌。
在一些实施例中,所述处理器通过增加与消除的部分复制令牌相邻的复制令牌所要复制的符号的数量来消除一部分复制令牌。
在一些实施例中,所述编码器通过将每个长度小于预定义门限的复制令牌替换为文字令牌来消除一部分复制令牌。
在一些实施例中,所述并行处理器执行并行历史搜索以生成所述输入数据流的令牌。
在一些实施例中,所述并行处理器利用并行排序来执行并行历史搜索以生成所述输入数据流的令牌。
在一些实施例中,所述并行处理器执行顺序历史搜索以生成所述输入数据流的令牌。
在另一方面,提供了一种具有所述电路和用于传输压缩输出流的网络接口的压缩设备。
在另一方面,提供了一种具有所述电路和用于将压缩输出流存储在物理非瞬时性计算机可读介质上的存储控制器的压缩系统。
在一些实施例中,所述电路实现于图形处理器、并行中央处理器或者现场可编程门阵列之上。
在另一方面,提供了一种编码过程,涉及:接收输入数据流,所述输入数据流包括:一系列令牌,其中每个令牌定义所述输入数据流中的位置、长度和类型,所述类型为文字令牌或者复制令牌,每个文字令牌定义文字符号,每个复制令牌具有与所述输入数据流中的一系列令牌中的另一令牌的位置的偏置;在参考所述输入数据流的一系列令牌中各自令牌的位置之前的其他令牌时,利用对内存设备中的所述输入数据流的并行扫描对所述令牌进行编码以同时处理所述输入数据流中的各个令牌;通过基于所述并行扫描的结果消除所述输入数据流中的一部分令牌来生成压缩输出流;使作为非瞬时性计算机可读介质或共享内存或传输的编码后的压缩输出数据可用。
在一些实施例中,所述过程可以涉及采用反向计算、清除计算、正向计算的并行扫描对所述令牌进行编码以同时处理所述输入数据流的令牌,以便更新用于生成所述压缩输出流的所述输入数据流。
在一些实施例中,所述过程可以涉及使用前导计算和布局计算标识所述压缩输出流中的非前导令牌、前导令牌、令牌的大小、以及令牌的位置以便在生成所述压缩输出流时消除所述输入数据流的一部分令牌。
具体实施方式
数据压缩涉及接收符号序列作为输入,并尝试生成较短的序列作为输出。无损数据压缩尝试在不丢失信息的情况下,通过标识并消除输入数据中的统计冗余以减少输出。无损数据压缩根据解压缩生成原始输入流。有损压缩生成类似但可能不完全一样的流。
基于字典的压缩系统可用于在输入中查找重复的子字符串并对随后出现的这些子字符串进行编码作为指向早期出现的指针。
在输入流的每个位置,压缩系统可用于考虑各种因素,例如,另一字符序列、之前已出现过的最长序列、最近出现等等。不同的因素可以决定压缩系统、设备、或者方法运行的情况。可以使用各种度量对压缩系统进行评估,该度量包括例如压缩率、压缩/解压缩速度、分裂性、压缩/解压缩过程中所需要的内存和其他资源、并行执行工作的能力等等。压缩速度可以与压缩率成比例。例如,有些示例性系统可能压缩速度快、压缩率低,而其他系统可能压缩速度较慢、压缩率较高。
压缩速度会是一个重要的考虑因素。以全部流吞吐量运行的快速压缩系统会产生相对较小的压缩率。不过这会有助于减少数据输出。例如,压缩设备可以放置在主机设备和网络接口控制器设备或存储控制器设备之间。
根据另一方面,提供了一种利用排序技术实现并行历史搜索的压缩设备。并行处理可以提高压缩速度。
根据另一方面,提供了一种具备接收器以接收未压缩输入数据的压缩设备。输入数据可以表示为符号序列。所述压缩设备可以包括:处理器,用于对所述输入数据的符号序列执行基于字典的历史搜索,以便生成用于编码的标签或令牌的中间数据结构到压缩输出流中。所述压缩设备还可以包括:编码器,用于针对所述压缩输出流对输入数据的符号序列进行编码。输出生成器可以利用编码后的输入数据的符号序列生成令牌作为压缩输出数据。所述压缩设备可以包括:发送器,用于传输所述压缩输出数据;或者存储设备,用于存储所述压缩输出数据。
根据另一方面,提供了一种数据压缩方法。所述方法可以涉及对表示为符号序列的输入数据进行处理以生成输出数据。在每个位置,所述方法可以创建带有一个或多个符号的字符串的标签以及位置。所述方法还可以涉及通过前缀对标签进行排序以生成排序后的标签序列。对于排序后的标签序列中的每个标签,所述方法还可以涉及将所述标签和邻近或相邻标签进行比较。如果一个具有定义数量符号的公共前缀的标签有早期或其他来源,那么所述压缩设备创建复制令牌,否则,所述压缩设备创建文字令牌。所述方法可以涉及通过对应的位置或通过前缀对所述令牌进行排序。
根据一方面,提供了一种利用排序进行并行处理以实现历史搜索的压缩设备。例如,所述设备可以利用图形处理器(Graphic Processing Unit,简称GPU)或者高度并行中央处理器(Central Processing Unit,简称CPU)来实现。
根据另一方面,提供了一种具有编码器进行并行编码以生成压缩输出数据的压缩设备。所述编码器可以对来源于历史搜索的各种类型的输入数据进行操作,例如,对所述压缩输出数据进行编码。
根据另一方面,提供了一种压缩设备,其具有寄存器、用于利用搜索历史处理未压缩输入数据的现场可编程门阵列(Field Programmable Gate Array,简称FPGA)、以及存储所述搜索历史的结果的块随机存取存储器。此处描述的实施例可以提供一种在FPGA上实现并行历史搜索的过程。
根据另一方面,提供了一种压缩设备,其具有用于实现基于字典的压缩的历史搜索的处理器以及收缩的基于字典的压缩编码器。
根据另一方面,提供了一种通过并行处理器进行基于字典的压缩的编码方法。所述方法可以涉及接收未压缩输入数据。所述方法可以涉及利用后向计算处理输入数据。所述方法可以涉及利用清除计算处理输入数据。所述方法可以涉及利用正向计算处理输入数据。所述方法可以涉及利用前导计算处理输入数据。所述方法可以涉及利用布局计算处理输入数据。所述方法可以涉及利用后向计算、清除计算、正向计算、前导计算和布局计算的结果生成压缩的输入数据。
提供了说明性示例以说明此处所描述的实施例的各个方面。
图1说明了示例性压缩系统100的示意图。此处描述的实施例可以提供用于透明径内压缩和解压缩的硬件压缩设备102,此处也可称之为压缩引擎设备。作为一个说明示例性的实施,压缩设备102可以耦合到网络接口控制器设备104用于在网络106上进行数据传输。作为另一个说明示例性的实施,压缩设备102可以耦合到存储控制器设备108用于在存储介质上进行数据存储,例如,闪存设备112或DRAM内存卡110。此处描述的方法的结果可以是压缩输出数据的有形物理介质。
历史搜索
根据一方面,此处描述的实施例可以提供基于字典的压缩,例如,用于基于字典的压缩的基于矢量的历史搜索。
为了最大限度的压缩,示例性压缩系统可用于检测并确定最长匹配序列。一种示例性系统可以由中央处理器(Central Processing Unit,简称CPU)使用名为树的可持久化数据结构来执行。这些数据结构可定义为记录每个被观测前缀的位置的二叉查找树。
可替代地,另一个示例性压缩系统可以记录最近出现的符号字符串,该符号字符串与存储在标签数据结构中的不同数量的字符相匹配。作为一个说明性示例,存储在标签中的字符数量的范围可以是4到7。如果标签中的字符太少,在给定标签和编码的内存使用的前提下,处理后的字符串的压缩程度可能就没有那么高。如果每个标签中的字符太多,排序就会增加,因此,标签大小会增加内存使用。
作为一个说明性示例,4个字符的标签可能是最短的且不会导致扩展的标签。与重发送这4个字符作为文字相比,对复制了4个字符的标签进行编码可以保证不占用更多的空间。对于标签的数量,不同的编码方案可能会有不同的分界点。此处仅仅是个示例。在对排序后的邻近或相邻标签进行比较时,较长的标签可能会引入相当大的复杂度。由于较长的标签能够区分有5个符号或字符长度的复制和只有4个符号的复制,较长的标签也会增加压缩率。相应地,压缩复杂度和压缩率之间存在一定的折衷。
因为系统可能找不到复制参考的最佳匹配,因此系统可能会提供较低的压缩率(例如,未压缩的大小和压缩后的大小相比),但是它可以提供较快的压缩速度或吞吐量。示例性系统可以使用轮流在各个位置更新的散列表。系统可以是连续且数据相关的,并且可以具有软件配置。
此处描述的实施例可以利用并行处理硬件进行运行以体现并行性的益处。此处描述的实施例可以利用改进的历史搜索以利用排序来标识使用了基于排序的数据并行性的最近搜索。相应地,示例性系统100可以通过并行处理硬件来执行。
根据一方面,此处描述的实施例可以提供基于字典的压缩,例如,用于基于字典的压缩的基于矢量的历史搜索。硬件压缩设备可以配置针对压缩吞吐量而设计的各种压缩实施。历史搜索可能会是基于字典的压缩中的瓶颈,技术可以创建难以或不可能为其提取并行性的强线性关系链。
相应地,此处描述的实施例可以涉及通过排序实现的历史搜索。所述排序可以利用数据并行处理来实现,这将利用大量线程来进行并行化。
图2说明了压缩处理的示例性输入。示例性输入可以是统一大小的输入符号的序列,典型的是8位字节。示例性输出可以是与所述输入长度相同的令牌的序列。令牌可以是文字(例如,字符或符号)或者复制指令中的任一个。复制指令可以包括字符或符号复制所在的序列中的位置,以及被复制符号的数量。图2所示的示例说明了为符号9到13指向符号0到4的序列的早期实例的复制参考指针。这也可称之为反向复制。
图3说明了指向符号序列的后来实例的复制参考指针的替代实施,这也可称之为正向复制。
所述压缩设备102(如图1所示)可以有用于历史搜索输入数据流以生成历史搜索输出流的电路。所述电路可以有输入单元,用以接收符号序列的传入的输入数据流。内存设备将输入数据流的符号序列存储在存储位置。这也可称之为历史缓存。所述存储位置可与符号序列的位置相关联。
所述电路具有并行处理器,用以利用并行排序对内存设备中的输入数据流执行基于字典的历史搜索,以生成令牌的历史搜索输出数据流。每个令牌定义一种类型,所述类型为文字令牌或复制令牌。每个文字令牌定义输入数据流的符号序列的文字符号。每个复制令牌具有复制参考指针,用于标识输入数据流的符号序列中的一个或多个被复制符号的位置。所述位置对应存储所述输入数据流的内存设备的存储位置中的一个存储位置。所述被复制符号可以与历史搜索输出数据流的文字令牌的一个或多个文字符号相对应。也就是说,所述复制令牌可以指输入数据流中的位置或偏置,用以参考在那个位置或偏置的文字符号的复制。所述复制令牌也可以指示要复制多少符号。相应地,复制令牌可以定义符号的长度和复制参考指针的偏置值。
比较器将来自存储器中存储位置的符号序列进行比较,以标识一个或多个被复制符号和对应的一个或多个文字符号来进行并行排序。内存选择器为每个复制参考指针选择与各自复制参考指针所标识的位置相对应的存储位置。此处描述了示例性比较器和选择器。输出单元连接接收设备以输出历史搜索输出流用于输入数据流的压缩。
并行处理器连续生成代表输入数据流的标签,每个定义符号序列中k个连续符号的窗口的标签,其中k为整数,和输入数据流的符号序列中的标签位置。所述标签位置指的是窗口中k个连续符号的第一符号。内存设备中k个符号的窗口的第一符号的对应存储位置的所述标签位置。
为进行并行排序,所述并行处理器基于k个符号的窗口对标签进行排序。排序可以基于标签的k个符号的窗口的字典或文字数字顺序,这取决于输入数据流的符号的类型。
第一标签和第二标签可以有两个连续的标签位置,所述第一标签的窗口的k个符号的一部分和所述第二标签的窗口的k个符号的另一部分重叠,重叠符号的数量为k-1。
比较器可以对每个标签和预定数量的邻近或相邻标签进行比较以标识冗余标签。对于每个冗余标签,k个符号的窗口等于另一标签的k个符号的窗口。在一些示例中,为提供高效压缩,k的范围在4和7之间。
冗余标签可以指输入数据流中先前出现过的相同符号。给定标签A和B,若:两个标签的第一j符号完全相同;4<=j<=k,或者标签A的位置大于标签B的位置,则标签A对于标签B可能是冗余的。这是一个反向参考的示例。这可能会导致所述电路创建Copy(delta=B.position-A.position,length=j)令牌。如果A对于B不是冗余的,则所述电路可以创建Lit(content=first symbol,length=1)令牌。
针对每个冗余标签,并行处理器生成历史搜索输出数据流的复制令牌中的一个复制令牌,内存选择器为指向冗余标签的复制令牌的复制参考指针选择与其他标签的标签位置相对应的存储位置。
所述并行处理器通过标签位置对标签,包括冗余标签,进行排序以生成文字令牌和复制令牌的输出数据流,所述复制令牌与输出数据流中的标签位置处的冗余标签相对应。
所述电路可以在图像处理器或并行中央处理器上实现。所述电路可以耦合到编码器和输出生成器。所述编码器可以通过合并历史搜索输出数据流的一部分复制令牌和一部分文字令牌将历史搜索输出数据流转换为压缩输出流,其中所述压缩输出数据流相对于输入数据流而被压缩。所述输出生成器可用于输出压缩输出数据流。所述编码器通过编码器将连续重叠的复制令牌合并成较长的复制令牌来合并一部分复制令牌。所述编码器通过将单独的文字令牌组合成较大的合并文字令牌来合并一部分文字令牌。所述编码器通过针对每个复制令牌确定被复制的文字符号的长度n,其中n为整数,并且移除输入数据流的符号序列所定义的n-1个后续文字令牌来合并一部分复制令牌。在一些示例中,所述编码器是一种收缩的基于字典的压缩编码器,通过并行扫描进行反向计算、清除计算、正向计算、前导计算和布局计算以生成输出数据流。此处进一步描述了关于编码过程的细节。
如图1所示,压缩系统也可包括用于传输所述压缩输出流的网络接口104,其中所述压缩系统带有所述压缩设备,所述压缩设备具有所述电路。所述压缩系统也可包括用于将所述压缩输出流存储在物理非瞬时性计算机可读介质上的存储控制器108,其中所述压缩系统带有所述压缩设备,所述压缩设备具有所述电路。
图4说明了此处描述的实施例的一方面提供的通过并行历史搜索压缩数据的方法400的流程图。所述方法400可以由电路或者诸如GPU、并行CPU、FPGA或其他并行处理设备等特定硬件设备来执行。所述方法可以由硬件压缩设备或者各种实施例中的压缩系统来执行。
所述方法400可以涉及接收传入的输入数据流,所述输入数据流包括符号序列。所述方法400可以涉及将所述输入数据流的符号序列存储在内存设备上的存储位置。将要描述的是,所述方法400涉及利用并行排序对内存设备中的输入数据流进行并行处理以生成令牌的历史搜索输出数据流,每个令牌定义一种类型,所述类型为文字令牌或复制令牌中的任意一个。每个文字令牌定义输入数据流的符号序列的文字符号,每个复制令牌具有复制参考指针,用于标识输入数据流的符号序列中的一个或多个被复制符号的位置。所述位置对应存储所述输入数据流的内存设备的存储位置中的一个存储位置。所述一个或多个被复制符号与历史搜索输出数据流的文字令牌的一个或多个文字符号相对应。
在步骤402,硬件压缩设备可以在每个位置创建标签来表示输入数据流。该标签位置可视为k个字符或符号滑动窗口,其中k为整数。例如,k可以是4个字符。也就是说,硬件压缩设备可以连续生成代表输入数据流的标签,每个定义符号序列中k个连续符号的窗口的标签,其中k为整数,以及输入数据流的符号序列中的标签位置。所述标签位置可以指窗口中k个连续符号的第一符号,所述标签位置代表内存设备中的k个符号的窗口的第一符号的对应存储位置。
压缩可以涉及对字符窗口进行散列并将所述散列存储到表格中以供参考。4个相同字符会向表格中提供相同条目,以便所述设备在表格中检测到相同的散列时,所述设备执行复制操作。通常这是利用CPU来执行的顺序过程。然而,并行处理硬件可以提高压缩速度。所述电路可以利用比较器对字符窗口和存储在存储器中的其他字符窗口进行比较以查找匹配。此处描述的实施例可以利用并行处理硬件实现并行历史搜索。由于为了查找复制参考对早期符号序列进行了搜索,顺序历史搜索可能涉及数据依赖性。此处描述的实施例利用标签和排序操作实现并行历史搜索。
例如,标签操作可以对输入数据流进行处理以创建标签,其中每个标签存储k个符号的字符串和位置。参考图2作为一个说明性示例,如果k=4,则第一标签会是(“nort”@0),第二标签会是(“orth”@1)。
在步骤404,所述压缩设备可以通过前缀对标签进行排序,以打破位置关系。对于字母符号,所述排序可以是按照字母顺序的。针对不同的字符和符号,可以定义不同的排序顺序。所述压缩设备会对标签进行排序以标识邻近或相邻标签中的冗余数据,并将冗余文字符号或字符替换为复制参考指针,以便生成压缩输出。例如,所述排序的结果可以是(“nort”@0)、(“nort”@9)、(“orth”@1)、(“orth”@10)、(“rth”@2)、(“rthw”@11)等等。例如,所述压缩设备可以基于k个符号的窗口对标签进行排序。所述压缩设备可以将用于标识一个或多个被复制符号的来自内存设备中的存储位置的符号和对应的用于并行排序的一个或多个文字符号进行比较,并为每个复制参考指针选择与各自复制参考指针所标识的位置相对应的存储位置。
在步骤406,所述压缩设备可以针对排序后的序列中的每个标签将所述标签与相邻或邻近标签进行比较。例如,如果一个具有至少4个符号的公共前缀的标签有早期来源或其他来源,则所述系统或设备可以在数据流中创建复制令牌。否则,所述系统或设备可以在数据流中创建文字令牌。例如,在所述数据流中,所述标签(“nort”@9)的符号或字符可被替换为复制令牌(copy@0),以便指示应该为位置9从位置0中复制4个文字字符。记号(copy@0)是一个说明性示例,也可以表达为“从9个符号前复制4个符号”、“复制delta 9”等等。所述标签(“orth”@10)的符号或字符可以被替换为复制令牌(copy@1),“从9个符号前复制4个符号”、“复制delta9”等等。所述过程可以转换初始输入数据流以便生成复制令牌和文字令牌的中间数据流,每个都与输入数据流中他们的原始位置相关联。
处理器可以将每个标签和预定数量(例如,3个正向和3个反向,但可以修改和定制)的邻近或相邻标签进行比较以标识冗余标签。对于每个冗余标签,k个符号的窗口等于另一标签的k个符号的窗口。可以利用小于窗口的若干令牌对冗余标签进行标识。例如,k可以为7,可以由6个重叠符号来标识冗余标签。用于标识冗余标签的通用符号的数量可以少于窗口中符号的数量。针对每个冗余标签,所述过程可以涉及生成历史搜索输出数据流的复制令牌中的一个复制令牌,并为指向冗余标签的复制令牌的复制参考指针选择与其他标签的标签位置相对应的存储位置。冗余标签可以被标识为与另一标签全部相等的多个符号。所述过程通过将冗余标签的k个符号的窗口替换为复制参考指针来更新每个冗余标签。
在步骤408,所述系统或设备可以通过令牌在输入数据流(例如,存储在标签)中的原始位置对所产生的令牌进行排序以生成历史搜索输出数据流(例如,中间输出流)。这可以是中间数据结构,该中间数据结构可以作为输入提供给编码器以供进一步压缩处理。所述过程可以涉及通过标签位置对标签,包括冗余标签,进行排序以生成文字令牌和复制令牌的输出数据流,所述复制令牌与输出数据流中的标签位置处的冗余标签相对应。
例如,图2所示的输入序列“North by Northwest”可以通过标签和排序进行并行处理以生成(中间)历史搜索输出数据流:
文字N
文字o
文字r
文字t
文字h
文字SPACE
文字b
文字y
文字SPACE
从(delta)9个符号前复制4个符号。
从(delta)9个符号前复制4个符号。
文字r
文字t
文字h
文字w
文字e
文字s
文字t
所述过程可以涉及连接接收设备以输出历史搜索输出流用于输入数据流的压缩。
所述过程可以涉及通过消除一部分复制令牌和一部分文字令牌将历史搜索输出数据流的文字令牌和复制令牌编码成压缩输出流,其中所述压缩输出数据流相对于输入数据流而被压缩。所述过程可以将复制令牌合并成较大的复制令牌,将单独的文字令牌合并成较大的文字令牌。对于复制令牌,若其长度为n,则可以移除接下来的n-1个令牌。这可以由此处描述的编码器来执行。
相应地,在历史搜索过程之后,所述压缩设备可以执行编码过程以进一步压缩由历史搜索产生的数据。例如,最终的编码可能不包括第二复制也不包括“rth”的文字。最终的编码也可以将长度为4的两个重叠复制进行合并以生成长度为5的一个复制。但这不是压缩序列的历史搜索阶段的目的。独立的编码过程接下来可以将所述历史搜索的输出编码成类似如下所示的流:(Literal length=9)"North by"(Copy delta=-9length=5)(Literal length=4)"west"。特定控制编码可用于对(Literal length=9)and(Copydelta=-9length=5)等等进行编码。这些引号可能不包括在内,只是为清楚起见,用于定义文字字符串。此处结合图7对示例性编码过程进行了描述。这是一个说明性示例,其他编码过程可用于对各种实施例中所述的并行历史搜索的结果进行编码。
图9说明了另一个示例性输入流。仍参考图4的搜索历史过程400,在402,所述压缩设备为输入数据创建标签。所述标签可以并行生成。例如,标签的每个成分至少有4个字符。序列越长,排序操作可能会越慢。序列越短,就可能会创建太多标签,从而可能影响压缩。示例性标签可以是(west@0)(este@1)(ster@2)等等。
在404,所述压缩设备利用字符或符号(例如,令牌)的前缀和位置对标签执行并行排序。这会导致带有所有公共前缀的排序后的结构成为所述数据结构中的相邻条目。
在406,所述压缩设备将相邻和相近条目与匹配的通用符号字符串进行并行比较。例如,所述压缩设备可以在向前3个条目和向后3个条目中搜索通用字符串。所述压缩设备将通用文字字符串替换为复制参考。在一些示例性实施例中,所述压缩设备使用严格定向(例如,纯后向、纯正向)参考以避免复制参考中的循环指针。
所述压缩设备对历史搜索进行编码或令牌化,以将文字令牌替换为复制令牌。在编码后的序列的起始处,所述压缩设备仍然可以生成很多文字令牌,但是随着内存大小的增加,会生成更多的复制令牌以参考文字令牌。
对于图9所示的示例性输入字符串,中间数据流可以是文字和复制令牌的组合:WESTERN_NORTHWARD_BY[copy,8][copy,9][copy,10]TH[copy,0]EST,其中字母符号指示文字令牌。
历史搜索输出的中间数据流也可以表示为:(Lit'W')(Lit'E')(Lit'S')(Lit'T')(Lit'E')(Lit'R')(Lit'N')(Lit'')(Lit'N')(Lit'O')(Lit'R')(Lit'T')(Lit'H')(Lit'W')(Lit'A')(Lit'R')(Lit'D')(Lit'')(Lit'B')(Lit'Y')(Copy delta=-13,len=4)(Copy delta=-13,length=4)(Copy delta=-13,len=4)(Copy delta=-13,len=4)(Lit'T')(Lit'H')(Copy delta=-26,length=4)(Lit'E')(Lit'S')(Lit'T')。参考“Copydelta”可以指示相对于中间字符串中的复制令牌的位置所要复制的字符或符号的位置。参考“length”可以指示要复制的字符的数量。
压缩中的下一阶段是进行编码,其可以进一步缩减中间数据结构以合并复制并移除冗余文字的。
例如,所述编码器对WESTERN_NORTHWARD_BY_NORTHWEST的输出可以是:(Literallength=20)"WESTERN_NORTHWARD_BY"(Copy delta=-13,length=5)(Copy delta=-26,length=4)。所述编码器的另一示例性输出可以是:(Literal length=20)"WESTERN_NORTHWARD_BY"(Copy delta=-13,length=6)(Literal length=3)"EST"。第一个例子可能压缩地更好。
根据另一方面,此处描述的实施例可以为压缩提供硬件实现的基于内存的历史搜索。为了在压缩算法中实现高压缩速度,提高效率的步骤之一就是历史搜索。历史数据大小可能会增长至千字节、百万字节、甚至更高。在压缩过程中,在历史数据中搜索匹配会是一个很耗时的任务。为了并行化历史搜索可以使用的示例性硬件平台可以是FPGA。也可以使用其他诸如GPU或并行CPU的示例性并行处理设备,且所述设备可能适合此过程。
此处描述的示例性实施例可以基于用于压缩的快速并行历史搜索的要求。此处描述的示例性实施例可以使用FPGA作为压缩设备硬件平台。此处描述的示例性实施例可以考虑硬件约束,包括:FPGA上可用寄存器的数量;路由能力;以及功耗。
硬件实现
在一些方法中,输入数据的串行性质和很大的历史可能会导致冗长的历史匹配/搜索过程。在一些示例中,可以通过对该过程的一个或多个方面的并行化来提高该过程的速度。
历史匹配过程的硬件实现可适合于执行并行任务。
图5说明了用于历史匹配的示例性电路500的各方面。所述电路500可通过离散和/或集成组件的任意组合来实现。在一些实施例中,所述电路500能够在现场可编程门阵列(Field Programmable Gate Array,简称FPGA)上或专用集成电路(Application-SpecificIntegrated Circuit,简称ASIC)上实现。
所述电路500能用于对作为文字序列的输入数据502进行历史匹配。在图5中的示例性电路500中,文字长度为32字节。然而,在其他实施例中,文字可以是任意长度的数据流的部分,例如,1B、2B、4B、8B、16B、64B、128B、256B等等。在一些示例中,文字长度可以基于硬件要求或限制(例如,FPGA数据总线大小限制),或基于历史匹配最小标签大小。
所述电路500可包括第一存储器504,包括适合存储输入数据文字的多个存储位置。在一些实施例中,第一存储器可以由一个或多个存储单元构成。在其他实施例中,第一存储器可以为单独的较大的内存单元。例如,图5中示例性电路500中的第一存储器504包括16个32B的存储位置。在一些示例中,这些存储位置可以分布在多个寄存器或者分散的内存设备中。在另一示例中,这些存储位置可以是诸如RAM(随机存取存储器)模块的单独内存设备的一部分。
具有N个存储位置的第一存储器504可用于存储来自输入数据序列的N个最近引入的文字。在一些实施例中,第一存储器504可以是移位存储器或移位寄存器。在一些此类实施例中,最近引入的文字可以存储在第一内存位置(例如,图5中存储l15的内存位置),而第一存储器中的其他所有文字移位到右边的内存位置。随着新文字的引入,第一存储器504中最先的文字(即图5中存储I0的内存位置)被覆盖,或者不然就是从第一存储器中被清除。在其他实施例中,移位的顺序可以是从左到右,或者按照其他如先入先出类型的顺序。
在另一实施例中,第一存储器504可用于通过用最近引入的文字覆盖第一存储器中最早的文字来存储这N个最近引入的文字。例如,诸如指针、计数器、链表或其他元件的选择器或者过程能够提供随每个文字的引入而变化并且在各个内存位置之间循环的地址或其他存储位置标识。例如,图5中的示例性电路可包括4位计数器作为第一存储器的选择器。
在一个说明性示例中,序列中的第一文字可以存储在I15,第二文字在I14,第三文字在I13,等等,第16文字存储在I0。然后第17文字会通过覆盖序列中第一文字而存储在I15。
第一存储器504可以是寄存器阵列、环形缓存等,或者是其他任意在考虑到相同时钟周期内待读取的所有N个存储位置时能够允许存储最近引入的文字的数据存储结构。对于一些第一存储器中的文字被移位的实施例,第一存储器504可以是任意能够允许在相同时钟周期内读取并写入所有N个存储位置的数据存储结构。
在一些实施例中,第一存储器504可以是双端口或二端口存储器阵列,使得能够在相同时钟周期内对第一存储器504的每个存储位置进行读取和写入。在一些示例中,这样可以在读取时考虑到写入最近引入的文字的存储器,以便提供数据506供比较器508进行比较。在一些实例中,这样可以提高所述过程的有效流水线。
所述电路500包括用于存储历史输入数据的第二存储器510阵列。图5中的示例性电路500包括一个64个第二存储器的阵列,其中每个存储器有16个存储位置。在其他示例中,可以使用任意M数量的第二存储器。在一些实施例中,第二存储器的数量可以基于硬件要求,可用性或限制(例如,FPGA最大块RAM大小),或者基于有用历史匹配大小。
在一些实施例中,每个第二存储器中的存储位置的数量与第一存储器504中的存储位置的数量相对应。
所述第二存储器510阵列定义了一组用于存储输入数据502的历史的存储位置。在一些实施例中,该组存储位置可以在逻辑上划分成行,每一行包括一个来自各个第二存储器的存储位置。例如,行0包括Mem 0中的存储位置I0、Mem 1中的存储位置I1、Mem 2中的存储位置I2、……,以及Mem 63中的存储位置I63。
在一些实施例中,第二存储器510可用于存储NxM个最近引入文字。例如,诸如指针、计数器、链表或其他元件的选择器或者过程能够提供随每个文字的引入而变化并且在每个内存位置之间循环的地址或其他存储位置标识。例如,在图5中,10位计数器能够用作内存选择器,其中计数器的低6位能够识别引入文字被写入了64个第二存储器中的哪一个,计数器的上4位能够在那个第二存储器中识别内存位置。
在一些实施例中,所述选择器可以以任意顺序在内存位置之间循环,其中M个连续引入文字被各自存储到所述阵列中不同的第二存储器中。
在一些实施例中,所述第二存储器510可以是双端口或二端口存储器阵列,使得他们能够在相同时钟周期内进行读取和写入。在一些示例中,这样可以在读取时考虑到写入最近引入的文字的存储器,以便提供数据供比较器508进行比较。在一些实例中,这样可以提高所述过程的有效流水线。
在一些实施例中,所述电路500可能包括用于标识和第一存储器中的文字进行比较的第二存储器阵列中内存位置的选择行的行选择器。例如,诸如指针、计数器、链表或其他元件的选择器或者过程能够提供随每个文字的引入而变化并且在每行之间循环的地址或其他行标识。例如,在图5中,4位计数器能够识别在当前时钟周期和/或在当前文字被引入并存储到存储器中时使用了16行中的哪一行。
在实施例中,所述电路500在FPGA上实现,FPGA的规格会限制对第一和/或第二存储器的选择。例如,不是所有在FPGA上的寄存器都可用作第二存储器以将历史存储在FPGA上。例如,如果有用历史大小是32KB,则配置会规定需要用32KB,即256Kb,的寄存器将历史存储在FPGA上。这种资源量可能不存在或者对于历史匹配设备不可用。即使所需的寄存器的数量可用于将历史存储在FPGA上,路由也可能成问题。
根据此处描述的实施例,电路和设备可以将历史存储在“片上存储器”上或者作为第二存储器的BRAM(Block-RAM)上。在一些示例中,这样可以简化或有助于组织路由和/或减少寄存器的所需数量和使用。
所述电路500包括多个比较器508,用于对来自第一存储器504中每个存储位置的文字和存储在第二存储器510的选择行中的数据进行比较。在一些实施例中,比较器用于对文字和第二存储器选择行中的历史数据的一串数据窗口进行比较。在一些实施例中,数据窗口的数量可以基于在压缩过程中用于对符号/字符进行编码的比特数。在一些实施例中,每个数据窗口可以代表在不同数量的符号大小的偏置处找到的字量部分的历史数据。在其他实施例中,数据窗口可以基于输入总线宽度或者硬件中的可用资源。
在一个基本示例中,第一存储器的第一内存位置中的文字长度为一个字节,其取值为0xFF。第二存储器是一个具有3个存储器的阵列,选择行中的存储位置的取值有0x11、0x22、0x33。如果一个符号是4比特,则所述电路会有足够的比较器对0xFF和以4比特增量移位的0x112233的数据窗口进行比较。换言之,比较器可用于进行至少五次比较:0xFF和0x11、0xFF和0x12、0xFF和0x22、0xFF和0x23、以及0xFF和0x33。
所述电路也可以具有比较器用以对第一存储器的其他内存位置中的数据和来自第二存储器的选择行的数据进行比较。例如,如果第一存储器的下一个内存位置包含取值0xEE,则有些比较器会用于比较:0xEF和0x11、0xEF和0x12、0xEF和0x22、0xEF和0x23、以及0xEF和0x33(针对两个第一内存位置之间的重叠数据窗口);以及0xEE和0x11、0xEE和0x12、0xEE和0x22、0xEE和0x23、以及0xEE和0x33。
比较器可用于对来自所有第一内存位置的数据窗口和第二存储器的选择行中的所有数据的数据窗口进行比较。
在一些实施例中,所述电路可以包括存储单元,以存储来自第一存储器中先前数据的数据和/或来自先前选择行中的数据,以便捕获跨多行或多第一存储器文字的任意历史匹配。在一些实施例中,存储单元可以是符号/字符大小。
例如,基于上述示例,如果先前选择行的结尾是0x56(即历史数据包括…0x56112233…),则所述电路可具有一个存储取值0x6的存储单元。除了上述比较之外,比较器还可用于将0x61和第一存储器的数据(0xFF、0xFE、0xEE等等)进行比较。在一些示例中,对与先前数据行重叠的数据窗口所做的处理同样可以应用于清除第一存储器数据的数据窗口。
在一些实施例中,比较器用于在当前对第一存储器的数据和选择行中的数据进行所有的数据比较。
比较器可以是任意用于确定两个文字是否具有相同取值的比较器电路或设备。在一些实施例中,比较器可以是逻辑门、FPGA逻辑块、查找表、或其他任意合适的比较器电路。
在一些实施例中,电路500可以包括用于存储比较器的输出的一个或多个存储设备。
在一些实施例中,可以整理和/或提供代表历史匹配结果的比较器输出给编码器或其他设备或过程以继续对输入数据的压缩。
图5的说明性示例提供了一种历史匹配网络,在16个时钟周期内对16个输入和存储在内存中的32KB历史进行比较。
如图所示,假设n字节输入块流向输入队列以便和历史进行比较。另外,假设随着时间推移,整个32千字节的历史存储到了64个存储器中,其中每一个都是深16宽32字节(64*16*32字节=32千字节)。该历史可被认为是保存过去32KB的输入数据的滑动窗口。
针对该说明性示例,假设每个存储器都配置为双端口。可分配一个端口用于读取,以便对历史内容和输入进行比较。为了对32字节输入数据块和整个历史进行比较,可能需要1024x32字节的比较。这意味着在时钟周期0中,可以从所有64个存储器中读取15个位置中的位置0以进行历史比较。这样64x32字节的比较就完成了。由于所述输入移位到16深度的输入队列中,它可以和所有存储器的位置1处的接下来的64个条目进行比较,然后是所有存储器的位置2处的64个条目,等等,直到在位置15处进行最后的比较。然后所述输入数据块就可以和整个32KB的历史进行比较。
仍参考图5,为了并行化对多个流入的输入块的历史搜索,从历史中读取的数据可以和整个输入队列进行比较。例如,输入数据部分I0可以在Q=I0处进入。Q15可以和所有存储器的loc0进行比较。输入数据部分I1可以在Q=I1,I0处进入。Q15和Q14可以和所有存储器的loc1进行比较,这可能意味着I1可能不和所有存储器的第一行进行比较。因此,可以循环执行从存储器中进行读取以确保每个输入块都和所有的存储行进行比较。然后输入数据部分I2在Q=I2,I1,I0处进入。Q15、Q14和Q13可以和所有存储器的loc2进行比较,等等。然后输入数据部分I16可以在I16、I15、I14、I13、……、I1处进入。Q15、Q14、……、和Q0可以和所有存储器的loc0进行比较。关于处理的附加细节可以如图6所示,图6说明了一些实施例提供的历史搜索的示例性时序图。
可以分配另一个内存端口将新的输入块写入历史。新的输入可以只被写入一个存储器的16个位置中的位置j中。该位置j可以通过一个方式来计算:如果新的输入没有32KB大小,则将其写入历史中的下一个条目位置;或者可以覆盖历史中最先的条目。写入顺序可以在图6所示的图中找到。
作为一个说明性示例,如果输入流入一个16深度的输入队列,则每个输入需要16个时钟周期直到该输入和整个历史都进行了比较。此过程可以以流水线格式进行。比较可以重叠,这意味着只需要16个时钟周期来初始化流水线,之后通过循环的方式读取历史,则在每个时钟周期中针对未来输入的比较的结果都已准备就绪。
此处利用一个说明性示例来解释该技术。该示例可以泛指为任意数量的输入大小和历史大小,并考虑FPGA的资源限制或用于实现的其他硬件。
此处描述的实施例可以涉及包含散列表和正向复制的GPU并行硬件。在选择用于实现的特定硬件时要考虑硬件限制。例如,对GPU上计算单元之间的通信和同步进行管理以便创建输出可能是很困难的。
此处描述的实施例可以涉及可跨不同硬件平台及跨不同供应商硬件(例如,FPGA供应商)进行迁移的代码实现。此处描述的实施例可以提供涉及FPGA、CPU、和GPU/加速处理器(accelerated processing unit,简称APU)实现的异构实现。
在另一方面,此处描述的实施例可以给APU实现提供一种GPU和CPU的并行性合并的异构方法。本实施例可能涉及包括散列表创建(GPU)、并行文字和复制创建(GPU)、以及合并输出编码(CPU)的APU并行处理。在选择特定硬件实现时要考虑硬件限制。例如,GPU上可能没有足够的计算单元去实现所述处理。
在更进一步的方面,此处描述的实施例可以给另一APU实现提供一种GPU和CPU的并行性合并的异构方法。本实施例可能涉及包括全局散列表创建(GPU)、并行文字和复制创建(GPU)、以及合并输出编码(CPU)的APU并行处理。在选择特定硬件实现时要考虑硬件限制。例如,全局存储器可能涉及执行内核。
编码器
在另一方面,此处描述的实施例可以提供收缩的基于字典的压缩编码器,例如,用于执行编码以便将一系列令牌转换为压缩输出流的硬件设备。一种示例性应用可以是动态网络压缩。在执行历史搜索之后,所述压缩设备可以对数据流进行编码以供进一步压缩。这可能涉及合并复制令牌的复制以及进一步移除冗余文字令牌。为编码器提供输入的预处理中间数据流可能来自此处描述的并行历史搜索或者其他搜索过程。其他示例性历史搜索包括使用散列表的传统“snappy”过程、此处描述的FPGA硬件实现等等。此处以不同的历史搜索过程考虑输入数据流“BRANDISH_OATBRAN_BRANDY”作为一个说明性示例。在“BRANDY”的位置,历史搜索可以从“BRANDISH”中找到“BRAND”或者从“OATBRAN”中找到“BRAN”。二者中任一都可能是来自历史搜索的正确输出。不同的搜索可以按优先级排序。将该历史搜索的输出提供给编码器以供进一步处理。
通常,编码器可寻找相邻复制令牌,其中字符的第一长度或者复制参考的delta(例如,从9个符号前复制4个符号)大于或等于下一个delta。所述编码器可选择第一复制令牌,其次考虑相邻的复制令牌。所述编码器可以开始增量删除复制令牌并扩展在第一复制令牌中复制的字符的数量。
如图2所示,中间数据流可以是文字和复制令牌的组合:NORTH_BY_[copy,0][copy,1]RTHWEST。所述编码器生成的输出如图2所示,所述输出将两个各自具有4个符号的复制令牌:[copy,0]for“nort”和[copy,1]for“orth”合并成一个具有5个符号的复制令牌“north”。
如图9所示,中间数据流可以是文字和复制令牌的组合:WESTERN_NORTHWARD_BY[copy,8][copy,9][copy,10]TH[copy,0]EST。复制令牌参考最初可以参考4个字符,但是在编码后,可以参考6个字符并移除2个复制令牌。在此示例中,编码器可以将最初单独的复制令牌“nort”、“orth”、和“rthw”合并成一个具有较大组合的符号或字符的复制令牌“northw”。
如这些示例所示,在移除相邻的复制令牌以提供进一步压缩时,该编码过程扩大了复制令牌中符号的数量。
例如,编码器的一个任务可以包括将相邻文字合并成较大的文字。历史搜索可指示有(Lit'N')(Lit'O')(Lit"R')(Lit'T')(Lit'H')并将其转变成(Lit length=5)"North"。编码器的另一个任务可以包括将相邻复制合并为重叠来源。例如,(Copy delta=-4len=4)(Copy delta=-4len=4)可以转变为(Copy delta=-4len=5),然后从流中移除接下来的复制。编码器的再一个任务可以包括移除被复制“覆盖”的文字。来自历史流的输出流“AAAAAA”可以是(Lit'A')(Copy delta=-1length=4)(Copy delta=-1length=4)(Lit'A')(Lit'A')(Lit'A'),编码器会将其转换为(Lit length=1)'A'(Copy delta=-1length=5)。需要注意的是,末端文字已被所述复制“覆盖”。
在删除相邻复制参考时,所述编码器可以执行贪婪算法过程,此过程可以尝试获取最长的复制参考长度。这样并不总是可以提供最佳压缩,但是可以提高压缩速度。例如,一些编码操作可以选择重复文字的最佳组合。例如,参考图9中的示例,其他过程可能更依靠移除尽可能多的重复并标识“north”和“west”而不是使得复制令牌“northw”变得更长。
所述编码处理也可以减小窗口大小以便创建附加复制令牌并移除冗余文字。例如,文字令牌“est”可以通过减小窗口大小替换为复制令牌。
所述编码器可以利用扫描操作(也可称为前缀总和)的并行处理来实现。所述扫描是并行的且用于根据此处描述的一些实施例的压缩过程。例如,所述编码器可以对此处描述的并行历史搜索或其他实施例中的其他历史搜索技术生成的中间数据执行扫描过程。
如上所述,压缩可以将符号序列作为输入,并尝试生成较短的序列作为输出。例如,基于字典的压缩方案可以在输入中查找重复的子字符串并对后续出现进行编码作为指向早期出现或者后期出现的复制参考指针。
此处描述的实施例可以提供一种机制以将符号序列转换成一系列令牌。每个符号都可以是文字令牌(例如,不是输入流中之前/之后的位置的参考)或者来自历史中的复制令牌之一,复制令牌规定了所述流中的位置和被复制字符的数量。复制令牌可以复制不同数量的字符,所述编码器会对来自历史搜索输出的复制令牌进行合并以提供压缩输出数据。
此处描述的实施例可以使用数据并行压缩机制。输入数据流可能是按顺序进行压缩,这样会使编码过程成为瓶颈。在一些示例中,历史搜索也是并行的,则顺序编码处理会丢失历史搜索的并行化处理的益处。相应地,此处描述的实施例可以涉及并行执行编码过程的机制。
此处描述的实施例可以为编码设备806(如图8所示)提供一种电路以便对输入数据流进行编码以生成压缩输出流。
所述电路可以有输入单元,用以接收一系列令牌的传入的输入数据流。每个令牌定义输入数据流中的位置、长度和类型。所述类型可以是文字令牌或复制令牌。每个文字令牌定义文字符号,每个复制令牌具有与所述输入数据流中一系列令牌中的另一令牌的位置的偏置。内存设备将所述输入数据流的所述一系列令牌存储在存储位置。
在参考所述输入数据流的一系列令牌中各自令牌的位置之前的其他令牌时,并行处理器利用对内存设备中的所述输入数据流的并行扫描对所述令牌进行编码以同时处理所述输入数据流中的各个令牌。所述并行处理器通过基于所述并行扫描的结果消除所述输入数据流中的一部分令牌来生成所述压缩输出流。
多个比较器对来自并行扫描的存储器中的存储位置的一系列令牌进行比较。此处示例结合FPGA内存搜索对比较器进行了描述。内存选择器为每个复制令牌选择对应于偏置的位置的存储位置。此处示例结合FPGA内存搜索对比较器和选择器进行了描述。所述比较器和选择器可用于执行并行扫描操作。
输出单元用于连接接收设备以输出所述压缩输出流。压缩设备可以接收所述电路的输出,要求提供一个用于传输所述压缩输出流的网络接口。一种压缩系统可以接收所述电路的输出,以提供一种用于将所述压缩输出流存储在物理非瞬时性计算机可读介质上的存储控制器。所述电路可实现于图形处理器、并行中央处理器或者现场可编程门阵列之上。所述并行处理器可以执行并行历史搜索以生成所述输入数据流的令牌。所述并行处理器可以利用并行排序来执行并行历史搜索以生成所述输入数据流的令牌。所述并行处理器可以执行顺序历史搜索以生成所述输入数据流的令牌。相应地,所述用于编码的并行处理器可以利用不同类型的历史搜索进行工作以接收输入令牌。
在输入令牌和线程一样多的情况下,可以执行编码过程。即,每个线程负责发送自身的令牌所生成的字节。因为每个线程需要写入的位置取决于所述输入流中在其之前的所有线程写入的字节数量的集合,所以这可能很具有挑战性。线程之间可能需要一些通信,但是可能要保持在最低限度以有效利用通信资源。
作为说明示例性概述,根据此处描述的实施例的系统、方法和设备可以利用扫描技术进行并行处理。
例如,并行扫描技术可以是前缀总和的泛化。所述技术可以涉及使用关联运算符和序列exi、其中i∈{1,2,….,n}),并计算:
例如,添加了运算符的序列1;2;3;4;5可以生成:1;3;6;10;15。也就是,第j项是输入序列的第一j项的总和(使用提供的运算符)。
有一种变形称为右向扫描或正向扫描,是从序列的结尾计算总和。为了区别,标准技术可称为左向扫描或反向扫描。该技术可以并行执行。对于具有m个独立处理器的长度为n的序列,可以在阶段对所述技术进行计算。
所述并行扫描技术运作可以如下:可以在log2(n)阶段定义输入数据。在每个阶段j,所述技术可以计算yj;i for i in 0;1;2;:::;n-1。可以使用如下定义y0,i=xi for i∈{1,2,...,n}。针对阶段k∈{1,2,....,[log2(n)]},也可以使用如下定义Δ=2k-1。针对正向计算,可以使用如下定义针对反向计算,可以使用如下定义
在另一方面,此处描述的实施例提供一种利用并行过程进行压缩编码的过程。图7说明了一些实施例提供的一种用于数据压缩的示例性方法700。所述方法700可以由电路、编码器、压缩设备、压缩系统等等执行。
在一些示例性实施例中,所述编码过程可结合图4所描述的并行历史搜索的输出进行编码。如上所述,图7的独立编码过程接下来可以对图2的示例性输入流的历史搜索的输出进行编码以生成以下输出流:(Literal length=9)"North by"(Copy delta=-9length=5)(Literal length=4)"west"。特定控制代码可用于对(Literal length=9)and(Copy delta=-9length=5)等等进行编码。这些引号可不包括在内,仅用于说明。
每个令牌可以有长度len(τ)和是文字值或复制参考指针的类型type(τ),是文字值或复制参考。复制令牌也可以定义偏置offset(τ),其可以是在复制后面的字符数量。文字令牌可以定义符号sym(τ)。相应地,所述输入数据流可以是一系列令牌,其中,每个令牌定义输入数据流中的位置、长度和类型,所述类型是文字令牌或复制令牌。每个文字令牌可以定义文字符号,每个复制令牌可以有与所述输入数据流中一系列令牌中的另一令牌的位置的偏置。
在参考所述输入数据流的一系列令牌中各自令牌的位置之前的其他令牌时,所述过程涉及利用对内存设备中的所述输入数据流的并行扫描对所述令牌进行编码以同时处理所述输入数据流中的各个令牌。所述过程涉及通过基于所述并行扫描的结果消除所述输入数据流中的一部分令牌来生成压缩输出流。所述并行扫描的输出可以是更新的令牌(例如,更新的复制令牌或文字令牌),连同用于标识前导令牌、非前导令牌、令牌的大小数据和令牌的位置数据以指示所述压缩输出流的生成的数据结构。所述压缩输出流的生成涉及将令牌写到所述位置,其中,所述前导令牌、非前导令牌和大小数据指示哪些令牌被写出。例如,所有前导令牌都被写出但是大小为0的复制令牌没有被写出。所述过程涉及使作为非瞬时性计算机可读介质或共享内存或传输的编码后的压缩输出数据可用。
所述过程涉及采用反向计算、清除计算、正向计算的并行扫描对所述令牌进行编码以同时处理所述输入数据流的令牌,以便更新用于生成所述压缩输出流的所述输入数据流。
在步骤702,所述压缩设备可以执行后向计算。
在第一次计算中,文字和复制都存在。文字令牌长度可以为1,复制令牌可以更长。此处的示例为中间数据流提供4个字符的初始复制令牌。对于此次操作,候选令牌可以定义为γ,中心点可以为π。两个令牌之间的距离为deltaΔ。当不满足该条件时,所述输出可以和所述中心点完全相同。
在步骤704,所述压缩设备可以执行清除计算。例如,所述系统或设备可以利用如下所述执行后向扫描技术的两次计算:
在步骤706,所述压缩设备可以执行正向计算。在第三次计算,任一被复制覆盖的令牌也可以是一个复制。具有相同偏置的复制序列的前导的长度至少可以为4。此次计算的目的可以是将具有相同偏置的重叠复制进行聚合或合并,此外,将紧接着的文字进行合并以生成较长的文字序列。这可以是正向扫描,因为所述技术可以将信息从所述流中的后期条目传播到早期条目。
所述运算符可以是:
所述过程可以涉及使用前导计算和布局计算标识所述压缩输出流中的非前导令牌、前导令牌、令牌的大小、以及令牌的位置以便在生成所述压缩输出流时消除所述输入数据流的一部分令牌。
在步骤708,所述压缩设备可以执行前导计算。初始令牌可以为前导。紧跟在复制之前或之后的文字可以为前导。在文字之前或之后的复制可以为前导。在具有不同偏置的复制之前或之后的复制可以为前导。针对该说明性示例,其他令牌都不是前导。这可以通过观察令牌和其独立于所有其他前导校验的前一个令牌来实现。
在步骤710,所述设备或系统可以执行布局计算。作为一个说明性示例,假设一个函数σ用于在恒定时间内将每个令牌映射到编码大小。在一些示例中,所有非前导复制的大小可以固定为0,所有非前导文字的大小为1,则所述大小的前缀总和可以在令牌被编码后提供每个令牌的终端。从该位置减去所述大小得到起始位置。每个令牌都可单独编码。所述前缀总和可以是后向计算。
最后一次计算可以清除冲突复制以进行前导选择。正向计算可以将复制合并成较大的复制,将文字合并成文字链。所述清除计算可以移除某些短于4个符号长度的短复制,并会导致在比文字可能占用的字节更多的字节内进行编码。所述布局计算可以是所述编码器。每次计算可以是数据并行的并且都能很好地适合并行架构。
图10和图11示出了图7的编码过程不同阶段的示例。图10涉及输入数据流“aaaaabaaaaaa”。图11涉及输入数据流“North by Northwest”。所述输入数据流显示为令牌,包括文字令牌和复制令牌。文字令牌有文字符号和以格式‘literal symbol’:length所显示的长度。复制令牌有带有偏置值和符号长度的复制参考指针,以便按照格式Copy(offset,length)所示进行复制。不同列示出了扫描计算或阶段的示例性结果。
并行处理器采用反向计算、清除计算、正向计算的并行扫描以同时处理所述输入数据流的令牌,以便更新用于生成压缩输出流的所述输入数据流。BW指的是后向计算,CLEAN指的是清除计算,FW指的是正向计算。每个计算都作为具有不同扫描参数的并行扫描进行实现。所述计算更新所述输入数据流的令牌。
名称为“BW-1”的列指的是检查一个位置的后向计算,“BW-2”指的是检查两个位置的后向计算,等等。表格强调边缘情况以强调阶段或计算的操作。在图10所示的第一个示例中,所述突出强调示出了清楚计算的目的。在后向计算的最后有额外的复制令牌,可能会导致小于长度4的复制。
以图11的输入数据流“north by northwest”为例,在正向计算中,针对文字,所述编码器使用长度来表示有多少个文字“紧跟”当前文字。为获知大小和放进头部中的内容,所述编码器使用预定义的长度。所述令牌N:9会使示例显然突出,其中需要正向计算的所有log(N)阶段以得到最后编码。在图11的示例性输入数据流“north by northwest”中,复制令牌很有趣,因为编码过程需要几个阶段实现稳定,但是编码器到最后才稳定。
在生成所述压缩输出流时,所述并行处理器采用前导计算和布局计算消除所述输入数据流的一部分令牌。列“前导”示出了前导计算的示例性结果。列“大小”和“位置”示出了布局计算的示例性结果,这样就生成了大小和位置数据。
所处并行处理器利用后向计算(称为BW)更新传入的输入数据流以便将文字令牌替换为附加复制令牌,所述被替换的文字令牌是前导复制令牌的末端。将所述附加复制令牌从所述压缩输出数据流中消除,所述前导复制令牌覆盖了所述被替换的文字令牌。
所述并行处理器利用清除计算(称为CLEAN)更新所述传入的输入数据流,以将长度小于4的复制令牌替换为文字令牌。所述并行处理器利用正向计算更新所述传入的输入数据流,以合并具有相同偏置的连续重叠复制令牌和相连的文字符号。
所述并行处理器利用前导计算将每个令牌标记为非前导令牌或前导令牌中的任一个,所述前导令牌为以下令牌中的至少一个:所述输入数据流中的初始令牌、所述输入数据流中在复制令牌之前或之后的文字令牌、所述输入数据流中在文字令牌之前或之后的复制令牌,以及所述输入数据流中在具有不同偏置的复制令牌之前或之后的复制令牌。
所述并行处理器利用布局计算生成所述令牌的大小,通过将所有非前导令牌的大小固定为0并将所有前导令牌的大小固定为1,并确定所述压缩输出数据流中令牌的位置,每个位置由令牌的末端和起点定义,所述末端为所有前述的令牌的大小的前缀总和,所述起点为所述位置和所述前缀总和之差。
通过使用令牌的大小将具有非0大小的所有令牌写出至所述压缩输出数据流中所述令牌的位置,所述并行处理器使用所述布局计算的结果生成所述压缩输出数据流。前导令牌(和非前导令牌)、大小和位置的结果用于为所处压缩输出数据流生成或写所述令牌。所述前导令牌和非前导令牌可用于生成大小数据。所有大小为0的令牌没有被写出到所述压缩输出数据流,这会导致令牌的初始输入数据流的压缩。所述布局指示在所述压缩输出数据流中令牌应该写出的位置。
所述并行处理器通过将复制令牌合并成较大的复制令牌,通过将单独的文字令牌合并成较大的文字令牌,并且,针对长度为n的复制令牌,通过消除所述输入数据流中的接下来的n-1个令牌来消除所述输入数据流的一部分令牌。
所述处理器通过增加与消除的部分复制令牌相邻的复制令牌所要复制的符号的数量来消除一部分复制令牌。
所述编码器通过将每个长度小于预定义门限的复制令牌替换为文字令牌来消除一部分复制令牌。
相应地,此处描述的实施例可以提供用于并行化顺序过程的系统、设备和方法。直观地,每个编码的位置可取决于所有之前的令牌的聚合编码。此处描述的实施例可以提供对输入流中的令牌进行并行编码的系统、设备和方法。
所述计算可称为并行扫描的阶段。所述扫描(正向、方向、清除)将令牌作为输入并输出具有不同取值的一组令牌。所述前导计算标识哪些令牌在最后输出中需要头部。令牌头部可指示前导或非前导(通过对每个令牌和前一个令牌进行比较)。所述布局计算确定可以消除哪些令牌。例如,前导令牌提供信息以按大小排列所述令牌,前缀总和指示将令牌写在前缀总和输出的位置的位置信息。按大小排列指示有些令牌占据0比特,且这些令牌会从所述压缩输出数据流中消除。所述前导计算和布局计算用以消除输入数据流的一系列令牌的一部分复制令牌,编码,压缩输出数据流是相对于输入数据流被压缩。所述并行扫描利用稍有不同的参数重复调用不同的计算以生成用于写所述压缩输出数据流的数据。
所述编码器通过增加与消除的部分复制令牌相邻的复制令牌所要复制的符号的数量去合并这部分复制令牌。所述编码器将连续重叠的复制合并成较长的复制。
在另一方面,此处描述的实施例可以提供实现此处描述的数据转换技术的压缩引擎设备。图8示出了用于将未压缩输入数据802转换为压缩输出数据810的示例性压缩引擎设备800(通常称为压缩设备)。所述示例性压缩引擎设备可以包括搜索处理器804(例如,用于实现基于字典的历史搜索)、编码器806和输出生成器808。
所述压缩引擎设备800可以利用一些示例中的集成硬件设备或者由具有直接或网络连接的分布式设备来实现。
作为一个说明性示例,所述压缩引擎设备800可以利用向量机执行并行数据处理。在阶段1,所述压缩设备800可以通过并行数据处理技术使用处理器804来进行基于排序和合并的历史扫描。在阶段2,所述压缩设备800可以使用编码器806.作为一个示例,所述压缩引擎设备可以使用一个逻辑处理器进行对每个字节的输入。对于该说明性示例,所述压缩设备800可以执行O(logn)计算,其中n是所述输入的大小。每个处理器每次计算可以使用一个常数大小输入。所述收缩通信和同步可以有效利用硬件资源。
此处描述的实施例可以使用此处描述的并行数据处理技术。例如,所述编码可以高效地转化为FPGA。可以为不同粒度流将所述输入划分为信息块。更细粒度的流可能会影响压缩率。历史扫描实现可能需要考虑硬件。可以使用CPU/GPU架构来实施排序。FPGA架构和线速可能需要大量的多路复用器和优先编码器。这可能是资源密集型。
修改的实施例可以使用布隆过滤器、线性扫描等等。修改的实施例可以将历史大小视为一个可以随着FPGA的增大而增大的参数。在一些示例中,根据FPGA的大小,所述历史大小可能会受到限制。其他参数可以包括输入信息块大小,等等。此处描述的实施例可以包括跨窗口的复制或文字的传播以解除更细粒度流的限制。此处描述的实施例可以提供没有或有很少流水线泡沫的高效硬件架构。此处描述的实施例可以解释数据流。此处描述的实施例可以提供用于硬件实现的接口。此处描述的实施例可以包括可重构的组件。此处描述的实施例可以为固态硬盘、硬盘驱动器、内存、网络等等实现径内压缩。此处描述的实施例可以实现比特流压缩以加快FPGA部分重新配置。此处描述的实施例可以实现高速压缩。
本实施例可以提供以软件产品形式体现的技术方案。所述软件产品可以存储在非易失性或非临时性存储介质中、其可以是只读光盘(Compact Disk Read-Only Memory,简称CD-ROM)、U盘或可移动硬盘。所述软件产品可以包括许多指令,旨在使计算机设备(个人电脑、服务器或网络设备)执行本实施例所提供的方法。
程序代码应用于输入数据以执行此处描述的功能并生成输出信息。所述输出信息应用于一个或多个输出设备。在一些实施例中,通信接口可以是网络通信接口。在将所述发明的元件相结合的实施例中,所述通信接口可以是诸如用于进程间通信的软件通信接口。在其他实施例中,可能存在实现为硬件、软件和其组合的通信接口的组合。
每个计算机程序都可以存储在存储介质或设备(如ROM、磁盘、光盘)上,可被通用或专用可编程计算机读取,用于当存储介质或设备被计算机读取去执行此处描述的流程时配置并操作计算机。本实施例中,也可认为系统被实现为非瞬时性计算机可读存储介质,被配置了计算机程序,其中如此配置的存储介质会引导计算机以特定和预定义的方式进行操作以执行此处描述的功能。
此外,所描述的实施例的系统和方法能够分布在计算机程序产品中,该产品包括承载一个或多个处理器的计算机可用指令的物理非瞬时性计算机可读介质。所述介质可以以各种形式提供,包括一个或多个磁盘、光盘、磁带、芯片、磁性和电子存储介质、易失存储器、非易失存储器等等。非瞬时性计算机可读介质可包括所有计算机可读介质,除了瞬时性传播信号之外。所述术语非瞬时性并不是排除诸如主存储器、易失存储器、RAM等的计算机可读介质,其中,在其上存储的数据可能只是暂时存储。计算机可用指令也可以以各种形式存在,包括编译和未编译的代码。
可大量参考服务器、服务、接口、门户、平台或从硬件设备形成的其他系统。应该认识到的是,此类术语的使用被认为是代表一个或多个设备具有至少一个用于执行存储在计算机可读有形非瞬时性介质上的软件指令的处理器。应进一步认识到,所揭示的基于计算机的算法、过程、方法、或其他类型的指令集可以体现为包含存储引导处理器执行所揭示步骤的指令的非瞬时性有形计算机可读介质的计算机程序产品。
此处描述了各种示例性实施例。虽然每个实施例代表发明要素的单独组合,但是所揭示元件的所有可能的组合都被认为是本发明的主题。因此,如果一个实施例包含要素A、B和C,第二实施例包含要素B和D,则本发明的主题也被认为包括A、B、C或D的其他剩余的组合,即使没有明确揭示。
除非上下文另有所指,此处使用的术语“耦合至”意在同时包括直接耦合(此时两个相互耦合的元件相互接触)和间接耦合(此时至少有一个附加元件位于两个元件之间)。因此,术语“耦合至”和“与耦合”是同义的。
此处描述的实施例由物理计算机硬件实施例实现。此处描述的实施例提供有用物理机器,尤其是配置好的计算机硬件布置,例如计算设备、服务器、电子游戏终端、处理器、存储器、网络。例如,此处描述的实施例针对计算机装置和计算机通过电子数据信号的处理和转换所执行的方法。
此处描述的实施例可以涉及尤其用于实现各种动作的计算设备、服务器、接收器、发送器、处理器、存储器、显示器、网络。此处描述的实施例针对适合于处理和转换表示各种类型信息的电磁信号的电子机器。此处描述的实施例普遍整体地涉及机器和机器的使用;如没有计算机硬件、机器、各种硬件组件的使用,则此处描述的实施例没有意义或专利实用性。
虽然已详细地描述了本发明及其优点,但是应理解,可以在不脱离如所附权利要求书所界定的本发明的情况下对本发明做出各种改变、替代和更改。
此外,本发明的范围并不局限于说明书中所述的过程、机器、制造、物质组分、构件、方法和步骤的具体实施例。所属领域的一般技术人员可从本发明中轻易地了解,可根据本发明使用现有的或即将开发出的,具有与本文所描述的相应实施例实质相同的功能,或能够取得与所述实施例实质相同的结果的过程、机器、制造、物质组分、构件、方法或步骤。相应地,所附权利要求范围包括这些流程、机器、制造、物质组分、构件、方法或步骤。
Claims (21)
1.一种用于对输入数据流进行编码以生成压缩输出流的电路,其特征在于,所述电路包括:
输入单元,用于接收传入的输入数据流,所述输入数据流包括:一系列令牌,其中每个令牌定义所述输入数据流中的位置、长度和类型,所述类型为文字令牌或者复制令牌,每个文字令牌定义文字符号,每个复制令牌具有与所述输入数据流中一系列令牌中的另一令牌的位置的偏置;
内存设备,用于将所述输入数据流的所述一系列令牌存储在存储位置;
并行处理器,在参考所述输入数据流的一系列令牌中各自令牌的位置之前的其他令牌时,利用对内存设备中的所述输入数据流的并行扫描对所述令牌进行编码以同时处理所述输入数据流中的各个令牌,所述并行处理器通过基于所述并行扫描的结果消除所述输入数据流中的一部分令牌来生成所述压缩输出流;
多个比较器,用于对来自并行扫描的存储器中存储位置的一系列令牌进行比较;
内存选择器,用于为每个复制令牌选择对应于偏置的位置的存储位置;
输出单元,用于连接接收设备以输出所述压缩输出流。
2.如权利要求1所述的电路,其特征在于,所述并行处理器采用反向计算、清除计算、正向计算的并行扫描以同时处理所述输入数据流的令牌,以便更新用于生成所述压缩输出流的所述输入数据流。
3.如权利要求1所述的电路,其特征在于,在生成所述压缩输出流时,所述并行处理器利用前导计算和布局计算消除所述输入数据流的一部分令牌。
4.如权利要求1所述的电路,其特征在于,所述并行处理器利用反向计算更新所述传入的输入数据流以将文字令牌替换为附加复制令牌,所述被替换的文字令牌为前导复制令牌的末端,从所述压缩输出数据流中消除所述附加复制令牌,所述被替换的文字令牌被所述前导复制令牌覆盖。
5.如权利要求1所述的电路,其特征在于,所述并行处理器利用清除计算更新所述传入的输入数据流,以将长度小于4的复制令牌替换为文字令牌。
6.如权利要求1所述的电路,其特征在于,所述并行处理器利用正向计算更新所述传入的输入数据流,以分别合并具有相同偏置的连续重叠复制令牌和相连的文字符号。
7.如权利要求1所述的电路,其特征在于,所述并行处理器利用前导计算将每个令牌标记为非前导令牌或前导令牌中的任一个,所述前导令牌为以下令牌中的至少一个:所述输入数据流中的初始令牌、所述输入数据流中在复制令牌之前或之后的文字令牌、所述输入数据流中在文字令牌之前或之后的复制令牌,以及所述输入数据流中在具有不同偏置的复制令牌之前或之后的复制令牌。
8.如权利要求7所述的电路,其特征在于,所述并行处理器利用布局计算生成所述令牌的大小,通过将所有非前导令牌的大小固定为0并将所有前导令牌的大小固定为1,并确定所述压缩输出数据流中令牌的位置,每个位置由令牌的末端和起点定义,所述末端为所有前述的令牌的大小的前缀总和,所述起点为所述位置和所述前缀总和之差。
9.如权利要求8所述的电路,其特征在于,通过使用令牌的大小将具有非0大小的所有令牌写出至所述压缩输出数据流中所述令牌的位置,所述并行处理器使用所述布局计算的结果生成所述压缩输出数据流。
10.如权利要求1所述的电路,其特征在于,所述并行处理器通过将复制令牌合并成较大的复制令牌,通过将单独的文字令牌合并成较大的文字令牌,并且,针对长度为n的复制令牌,通过消除所述输入数据流中的接下来的n-1个令牌来消除所述输入数据流的一部分令牌。
11.如权利要求1所述的电路,其特征在于,所述处理器通过增加与消除的部分复制令牌相邻的复制令牌所要复制的符号的数量来消除一部分复制令牌。
12.如权利要求1所述的电路,其特征在于,所述编码器通过将每个长度小于预定义门限的复制令牌替换为文字令牌来消除一部分复制令牌。
13.如权利要求1所述的电路,其特征在于,所述并行处理器执行并行历史搜索以生成所述输入数据流的令牌。
14.如权利要求1所述的电路,其特征在于,所述并行处理器利用并行排序来执行并行历史搜索以生成所述输入数据流的令牌。
15.如权利要求1所述的电路,其特征在于,所述并行处理器执行顺序历史搜索以生成所述输入数据流的令牌。
16.一种具有如权利要求1所述的电路和用于传输所压缩输出流的网络接口的压缩设备。
17.一种具有如权利要求1所述的电路和用于将压缩输出流存储在物理非瞬时性计算机可读介质上的存储控制器的压缩系统。
18.如权利要求1所述的电路,实现于图形处理器、并行中央处理器或者现场可编程门阵列之上。
19.一种编码过程,包括:
接收输入数据流,所述输入数据流包括:一系列令牌,其中每个令牌定义所述输入数据流中的位置、长度和类型,所述类型为文字令牌或者复制令牌,每个文字令牌定义文字符号,每个复制令牌具有与所述输入数据流中的一系列令牌中的另一令牌的位置的偏置;
在参考所述输入数据流的一系列令牌中各自令牌的位置之前的其他令牌时,利用对内存设备中的所述输入数据流的并行扫描对所述令牌进行编码以同时处理所述输入数据流中的各个令牌;
通过基于所述并行扫描的结果消除所述输入数据流中的一部分令牌来生成压缩输出流;
使作为非瞬时性计算机可读介质或共享内存或传输的编码后的压缩输出数据可用。
20.如权利要求19所述的过程,还包括:采用反向计算、清除计算、正向计算的并行扫描对所述令牌进行编码以同时处理所述输入数据流的令牌,以便更新用于生成所述压缩输出流的所述输入数据流。
21.如权利要求19所述的过程,还包括:使用前导计算和布局计算标识所述压缩输出流中的非前导令牌、前导令牌、令牌的大小、以及令牌的位置以便在生成所述压缩输出流时消除所述输入数据流的一部分令牌。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201462066572P | 2014-10-21 | 2014-10-21 | |
US62/066,572 | 2014-10-21 | ||
US14/887,908 US9385748B2 (en) | 2014-10-21 | 2015-10-20 | Parallel dictionary-based compression encoder |
US14/887,908 | 2015-10-20 | ||
PCT/CN2015/092448 WO2016062252A1 (en) | 2014-10-21 | 2015-10-21 | Parallel dictionary-based compression encoder |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106852185A true CN106852185A (zh) | 2017-06-13 |
CN106852185B CN106852185B (zh) | 2019-10-25 |
Family
ID=55749106
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580055703.7A Active CN106797446B (zh) | 2014-10-21 | 2015-10-21 | 基于存储器的历史搜索 |
CN201580055720.0A Active CN107111623B (zh) | 2014-10-21 | 2015-10-21 | 用于基于词典的压缩的并行历史搜索和编码 |
CN201580057220.0A Active CN106852185B (zh) | 2014-10-21 | 2015-10-21 | 基于字典的并行压缩编码器 |
Family Applications Before (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580055703.7A Active CN106797446B (zh) | 2014-10-21 | 2015-10-21 | 基于存储器的历史搜索 |
CN201580055720.0A Active CN107111623B (zh) | 2014-10-21 | 2015-10-21 | 用于基于词典的压缩的并行历史搜索和编码 |
Country Status (3)
Country | Link |
---|---|
US (3) | US9385748B2 (zh) |
CN (3) | CN106797446B (zh) |
WO (3) | WO2016062251A1 (zh) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9385748B2 (en) * | 2014-10-21 | 2016-07-05 | Huawei Technologies Co., Ltd. | Parallel dictionary-based compression encoder |
US10509580B2 (en) * | 2016-04-01 | 2019-12-17 | Intel Corporation | Memory controller and methods for memory compression utilizing a hardware compression engine and a dictionary to indicate a zero value, full match, partial match, or no match |
US10528539B2 (en) * | 2016-07-01 | 2020-01-07 | Intel Corporation | Optimized selection of hash collision chains |
US10034407B2 (en) | 2016-07-22 | 2018-07-24 | Intel Corporation | Storage sled for a data center |
WO2018160341A1 (en) * | 2017-03-03 | 2018-09-07 | Google Llc | Secure code jump and execution gating |
US10735134B2 (en) * | 2017-08-11 | 2020-08-04 | Qualcomm Incorporated | Self-decodable redundancy versions for low-density parity-check codes |
CN109426650B (zh) * | 2017-08-28 | 2023-07-18 | 华为技术有限公司 | 处理器和处理标签的方法 |
US11509328B2 (en) * | 2018-05-31 | 2022-11-22 | Microsoft Technology Licensing, Llc | Computer data compression utilizing multiple symbol alphabets and dynamic binding of symbol alphabets |
CN109361398B (zh) * | 2018-10-11 | 2022-12-30 | 南威软件股份有限公司 | 一种基于并行和流水线设计的lz过程硬件压缩方法及系统 |
US11455326B2 (en) | 2019-07-21 | 2022-09-27 | Microsoft Technology Licensing, Llc | Efficient storage and retrieval of textual data |
US11309911B2 (en) | 2019-08-16 | 2022-04-19 | Advanced Micro Devices, Inc. | Semi-sorting compression with encoding and decoding tables |
US10749545B1 (en) * | 2019-08-30 | 2020-08-18 | Advanced Micro Devices, Inc. | Compressing tags in software and hardware semi-sorted caches |
US11288275B2 (en) * | 2019-09-09 | 2022-03-29 | Oracle International Corporation | Technique for fast join processing of dictionary encoded key columns in relational database systems |
US11593311B2 (en) * | 2019-09-24 | 2023-02-28 | Ati Technologies Ulc | Compression system with longest match processing for generating compressed data |
JP2021129143A (ja) * | 2020-02-10 | 2021-09-02 | キオクシア株式会社 | デコード装置 |
CN114077569B (zh) * | 2020-08-18 | 2023-07-18 | 富泰华工业(深圳)有限公司 | 压缩数据的方法及设备、解压缩数据的方法及设备 |
US11797747B1 (en) * | 2021-05-28 | 2023-10-24 | Cadence Design Systems, Inc. | Identifying redundant logic based on clock gate enable condition |
CN113377819B (zh) * | 2021-07-07 | 2023-02-03 | 山东方寸微电子科技有限公司 | 一种哈希表滚动查找方法、系统及芯片 |
JP2023039698A (ja) | 2021-09-09 | 2023-03-22 | キオクシア株式会社 | データ圧縮装置およびメモリシステム |
CN114090592B (zh) * | 2022-01-24 | 2022-04-26 | 苏州浪潮智能科技有限公司 | 一种数据处理方法、装置、设备及可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1144434A (zh) * | 1994-07-29 | 1997-03-05 | Dva公司 | 视频解压缩方法和装置 |
US8090027B2 (en) * | 2007-08-29 | 2012-01-03 | Red Hat, Inc. | Data compression using an arbitrary-sized dictionary |
CN103078646A (zh) * | 2012-12-31 | 2013-05-01 | 上海宇芯科技有限公司 | 字典查询压缩、解压缩方法及其装置 |
CN103326730A (zh) * | 2013-06-06 | 2013-09-25 | 清华大学 | 数据并行压缩方法 |
US20140198789A1 (en) * | 2013-01-11 | 2014-07-17 | Lsi Corporation | Low latency in-line data compression for packet transmission systems |
Family Cites Families (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5635932A (en) | 1994-10-17 | 1997-06-03 | Fujitsu Limited | Lempel-ziv compression with expulsion of dictionary buffer matches |
US5818368A (en) * | 1997-04-18 | 1998-10-06 | Premier Research, Llc | Method and apparatus for lossless digital data compression |
US5798718A (en) * | 1997-05-12 | 1998-08-25 | Lexmark International, Inc. | Sliding window data compression method and apparatus |
US6008743A (en) * | 1997-11-19 | 1999-12-28 | International Business Machines Corporation | Method and apparatus for switching between data compression modes |
JP3730385B2 (ja) | 1997-12-05 | 2006-01-05 | 株式会社東芝 | デ−タ圧縮装置 |
JP4242970B2 (ja) | 1998-07-09 | 2009-03-25 | 富士通株式会社 | データ圧縮方法及びデータ圧縮装置 |
US6218970B1 (en) * | 1998-09-11 | 2001-04-17 | International Business Machines Corporation | Literal handling in LZ compression employing MRU/LRU encoding |
US6195024B1 (en) | 1998-12-11 | 2001-02-27 | Realtime Data, Llc | Content independent data compression method and system |
US6819271B2 (en) * | 1999-01-29 | 2004-11-16 | Quickshift, Inc. | Parallel compression and decompression system and method having multiple parallel compression and decompression engines |
US6606040B2 (en) * | 2001-02-13 | 2003-08-12 | Mosaid Technologies, Inc. | Method and apparatus for adaptive data compression |
US6650261B2 (en) | 2001-09-06 | 2003-11-18 | Xerox Corporation | Sliding window compression method utilizing defined match locations |
US6657565B2 (en) * | 2002-03-21 | 2003-12-02 | International Business Machines Corporation | Method and system for improving lossless compression efficiency |
US7164370B1 (en) | 2005-10-06 | 2007-01-16 | Analog Devices, Inc. | System and method for decoding data compressed in accordance with dictionary-based compression schemes |
US20080120315A1 (en) * | 2006-11-21 | 2008-05-22 | Nokia Corporation | Signal message decompressor |
US7859877B2 (en) * | 2007-02-12 | 2010-12-28 | Marvell Israel (M.I.S.L.) Ltd. | Apparatus to detect patterns in data |
JP5216245B2 (ja) | 2007-06-01 | 2013-06-19 | 株式会社日立製作所 | 記憶システム、記憶制御装置及びデータ圧縮方法 |
CN101252694B (zh) | 2008-03-31 | 2011-08-17 | 清华大学 | 基于块的视频解码的帧存储压缩和地址映射系统 |
US7692561B2 (en) | 2008-07-17 | 2010-04-06 | International Business Machines Corporation | Method and apparatus for data decompression in the presence of memory hierarchies |
US7924178B2 (en) * | 2008-10-01 | 2011-04-12 | Seagate Technology Llc | System and method for lossless data compression |
US8044829B2 (en) * | 2009-03-05 | 2011-10-25 | Marvell World Trade Ltd. | Multi-mode encoding for data compression |
CN101572552B (zh) | 2009-06-11 | 2012-07-18 | 哈尔滨工业大学 | 基于内容可寻址存储器的高速无损数据压缩系统 |
CN101996139B (zh) * | 2009-08-28 | 2015-11-25 | 百度在线网络技术(北京)有限公司 | 数据匹配方法和数据匹配装置 |
US8669889B2 (en) | 2011-07-21 | 2014-03-11 | International Business Machines Corporation | Using variable length code tables to compress an input data stream to a compressed output data stream |
US8824569B2 (en) * | 2011-12-07 | 2014-09-02 | International Business Machines Corporation | High bandwidth decompression of variable length encoded data streams |
KR101956031B1 (ko) | 2012-10-15 | 2019-03-11 | 삼성전자 주식회사 | 데이터 압축 장치 및 방법, 데이터 압축 장치를 포함하는 메모리 시스템 |
US9385748B2 (en) * | 2014-10-21 | 2016-07-05 | Huawei Technologies Co., Ltd. | Parallel dictionary-based compression encoder |
-
2015
- 2015-10-20 US US14/887,908 patent/US9385748B2/en active Active
- 2015-10-20 US US14/887,963 patent/US9647684B2/en active Active
- 2015-10-20 US US14/887,982 patent/US9407287B2/en active Active
- 2015-10-21 WO PCT/CN2015/092447 patent/WO2016062251A1/en active Application Filing
- 2015-10-21 CN CN201580055703.7A patent/CN106797446B/zh active Active
- 2015-10-21 CN CN201580055720.0A patent/CN107111623B/zh active Active
- 2015-10-21 WO PCT/CN2015/092448 patent/WO2016062252A1/en active Application Filing
- 2015-10-21 CN CN201580057220.0A patent/CN106852185B/zh active Active
- 2015-10-21 WO PCT/CN2015/092453 patent/WO2016062254A1/en active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1144434A (zh) * | 1994-07-29 | 1997-03-05 | Dva公司 | 视频解压缩方法和装置 |
US8090027B2 (en) * | 2007-08-29 | 2012-01-03 | Red Hat, Inc. | Data compression using an arbitrary-sized dictionary |
CN103078646A (zh) * | 2012-12-31 | 2013-05-01 | 上海宇芯科技有限公司 | 字典查询压缩、解压缩方法及其装置 |
US20140198789A1 (en) * | 2013-01-11 | 2014-07-17 | Lsi Corporation | Low latency in-line data compression for packet transmission systems |
CN103326730A (zh) * | 2013-06-06 | 2013-09-25 | 清华大学 | 数据并行压缩方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106797446B (zh) | 2019-08-27 |
US20160112064A1 (en) | 2016-04-21 |
WO2016062252A1 (en) | 2016-04-28 |
US9647684B2 (en) | 2017-05-09 |
CN106852185B (zh) | 2019-10-25 |
US9385748B2 (en) | 2016-07-05 |
US20160112062A1 (en) | 2016-04-21 |
CN107111623B (zh) | 2020-04-03 |
US20160110115A1 (en) | 2016-04-21 |
WO2016062251A1 (en) | 2016-04-28 |
CN106797446A (zh) | 2017-05-31 |
CN107111623A (zh) | 2017-08-29 |
WO2016062254A1 (en) | 2016-04-28 |
US9407287B2 (en) | 2016-08-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106852185B (zh) | 基于字典的并行压缩编码器 | |
KR102169779B1 (ko) | 클리크를 통해 그래프를 압축하기 위한 시스템 및 방법 | |
CN116909984A (zh) | 使用虚拟化数据迭代器对神经网络进行数据处理性能增强 | |
CN111709243A (zh) | 一种基于深度学习的知识抽取方法与装置 | |
US20170193351A1 (en) | Methods and systems for vector length management | |
Žalik et al. | Chain code compression using string transformation techniques | |
CN113496123A (zh) | 谣言检测方法、装置、电子设备及存储介质 | |
CN113298892A (zh) | 一种图像编码方法和设备,及存储介质 | |
US11429317B2 (en) | Method, apparatus and computer program product for storing data | |
US20180114131A1 (en) | Boolean satisfiability | |
JP5120263B2 (ja) | パターンマッチング装置及び方法 | |
CN114332745B (zh) | 一种基于深度神经网络的近重复视频大数据清洗方法 | |
WO2018136371A1 (en) | Compressed encoding for bit sequence | |
CN111507195B (zh) | 虹膜分割神经网络模型的训练方法、虹膜分割方法及装置 | |
CN110895573B (zh) | 一种检索方法和装置 | |
Sun et al. | Efficient knowledge graph embedding training framework with multiple gpus | |
CN116186154A (zh) | 数据同步方法及装置 | |
US11928134B1 (en) | Medoid-based data compression | |
US20230280902A1 (en) | Compression and decompression of multi-dimensional data | |
Mari et al. | A novel audio representation using space filling curves | |
US20220375240A1 (en) | Method for detecting cells in images using autoencoder, computer device, and storage medium | |
CN113544684A (zh) | 数据置换装置、数据置换方法、程序 | |
Fowers et al. | Treebasis feature descriptor and its hardware implementation | |
CN118093533A (zh) | 特征向量的压缩方法和压缩文件的解压方法 | |
CN117435576A (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 | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20211222 Address after: 450046 Floor 9, building 1, Zhengshang Boya Plaza, Longzihu wisdom Island, Zhengdong New Area, Zhengzhou City, Henan Province Patentee after: Super fusion Digital Technology Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd. |