基于存储器的历史搜索的制作方法

文档序号:12515623阅读:210来源:国知局
基于存储器的历史搜索的制作方法与工艺

本申请要求于2014年10月21日提交的、申请号为62/066,572、名称为“数据压缩系统、设备及方法”的美国临时专利申请及于2015年10月20日提交的、序列号为14/887,963、名称为“基于存储器的历史搜索”的美国专利申请的优先权,其全部内容通过引用结合在本申请中。

技术领域

本发明所述实施例通常涉及数据压缩系统、设备及方法,特别是涉及无损数据压缩的系统、设备及方法。

技术背景

数据压缩涉及处理一系列符号作为输入及尝试生成一较短序列作为输出。通过在输入数据中识别和消除统计冗余,无损数据压缩尝试在不丢失信息的情况下减少输出。

附图说明

图1为根据一些实施例的数据压缩系统的一实例的示意图;

图2为压缩处理说明性实例输入的示意图;

图3为压缩处理说明性实例输入的替代示意图;

图4为根据一些实施例的数据压缩方法的一实例的过程图;

图5为根据一些实施例的与数据压缩一同使用的比较器网络的示意图;

图6为根据一些实施例的与数据压缩一同使用的时序图的示意图;

图7为根据一些实施例的数据压缩方法的一替代过程图;

图8为根据一些实施例的数据压缩系统的一实例的替代示意图;

图9为压缩处理说明性实例输入的替代示意图;

根据一些实施例,图10和图11描述编码过程的表格。

这些附图描绘了用于说明目的的示例性实施例,可对这些示例性实施例进行变更、变换配置、变换组件及修改。



技术实现要素:

一方面,提供了一种历史匹配数据流的电路,该数据流按顺序引入该电路。电路涉及第一存储器,其包括N个存储位置,第一存储器用于存储当前引入的一系列符号,使得N个最近引入词存储在所述第一存储器和M个第二存储器的阵列中,每个第二存储器包括N个存储位置,所述阵列定义一组逻辑上分成N行M个存储位置的一组存储位置,每行存储位置包括每个所述M个第二存储器中的一个存储位置,所述M个第二存储器的阵列用于存储所述一组存储位置中所选择的一个存储位置处的当前引入词。电路有多个比较器和用于识别所选存储位置的存储器选择器,所述比较器用于将来自所述第一存储器中所有存储位置的数据与所述一组存储位置选定行中存储的数据进行比较,所述比较器输出提供历史匹配数据;所述存储器选择器用于识别每个词引入时存储位置序列中的下一存储位置,所述存储位置序列通过所述一组存储位置进行循环,使得M个所述连续引入词中的每一个都存储在所述阵列的不同第二存储器中。电路具有用于识别所选行的行选择器,用于识别每个词引入时的下一选定行,对于每N个引入词,所述选定行通过N行中的每一行进行循环。

一些实施例中,所述多个比较器用于将所述第一存储器中数据的重叠数据窗口与所选行中数据进行比较。

一些实施例中,每个所述第二存储器为双端口存储器或二端口存储器。

一些实施例中,电路在现场可编程门阵列(field programmable gate array,简称FPGA)或专用集成电路(application-specific integrated circuits,简称ASIC)上实现。

一些实施例中,第二存储器为块随机存取存储器。

一些实施例中,电路具有用于存储所述比较器输出的存储设备。

一些实施例中,第一存储器为移位寄存器或环形缓冲器。

一些实施例中,电路为同步电路,用于在每个时钟周期引入新词。

一些实施例中,在N个时钟周期后,将引入词与NxM词历史进行比较。

一些实施例中,所述数据窗口基于输入总线宽度或电路资源可用性。

另一方面,提供了一种历史匹配数据流的方法。方法涉及按顺序引入数据流中的每个词。在输入序列中引入当前词可包括在第一存储器中存储位置存储当前词,所述第一存储器具有N个存储位置,使得N个所述当前引入词存储在所述第一存储器中;在M个第二存储器的阵列中存储当前词,每个第二存储器包括N个词存储位置,所述阵列定义一组逻辑上分成N行M个存储位置的一组存储位置,每行存储位置包括每个所述M个第二存储器中的一个存储位置,其中当前词根据存储位置序列进行存储,所述存储位置序列通过一组存储位置进行循环,使得每个所述M个连续引入词存储在阵列的不同第二存储器中。该方法可涉及存储所述比较输出作为历史匹配结果,选定行随着每个词的引入而改变,对于每N个引入词,所述选定行通过N行中的每一行进行循环。

一些实施例中,将存储在所述第一存储器的N个存储位置中的数据与存储在所述选定行的数据进行比较包括将所述第一存储器的N个存储位置中数据的重叠数据窗口与存储在所选行中的数据进行比较。

一些实施例中,每个所述第二存储器为双端口存储器或二端口存储器。

一些实施例中,所述方法通过现场可编程门阵列(field programmable gatearray,简称FPGA)或专用集成电路(application-specific integrated circuits,简称ASIC)实现。

一些实施例中,第二存储器为块随机存取存储器。

一些实施例中,存储比较输出包括核对所述历史匹配结果。

一些实施例中,向编码器提供所述历史匹配结果。

一些实施例中,在N个时钟周期后,将引入词与NxM词历史进行比较。一些实施例中,所述数据窗口基于输入总线宽度或电路资源可用性。

另一方面,提供了一种历史匹配数据流的设备,按顺序引入数据流的每个词。设备具有第一存储器,其包括N个存储位置,第一存储器用于存储当前引入词,使得所述N个最近引入词存储在第一存储器;以及M个第二存储器的阵列,每个第二存储器包括N个存储位置,所述阵列定义一组逻辑上分成N行M个存储位置的一组存储位置,每行存储位置包括每个所述M个第二存储器中的一个存储位置,所述M个第二存储器的阵列用于存储所述一组存储位置中所选择的一个存储位置处的当前引入词。设备具有多个比较器,用于将来自所述第一存储器中所有存储位置的数据与所述一组存储位置选定行中存储的数据进行比较,所述比较器的输出提供历史匹配数据。设备还具有用于识别所选存储位置的存储器选择器,所述存储器选择器用于识别每个词引入时存储位置序列中的下一存储器位置,所述存储位置序列通过所述一组存储位置进行循环,使得M个所述连续引入词中的每一个都被存储在所述阵列的不同第二存储器中。设备具有用于识别所选行的行选择器,所述行选择器用于识别每个词引入时的下一选定行,对于每N个引入词,所述选定行通过N行中的每一行进行循环。

具体实施方式

数据压缩涉及接收一系列符号作为输入及尝试生成较短序列作为输出。通过在输入数据中识别和消除统计冗余,无损数据压缩尝试在不丢失信息的情况下减少输出。无损数据压缩在解压缩时生成原始输入流。有损压缩生成相似但可能不同的数据流。

基于词典的压缩系统可用于发现输入中的重复子串,编码随后出现的子串做为先前出现子串的指针。

在输入流的每个位置,压缩系统可用于考虑各种因素,例如,其它字符序列、先前出现的最长序列、最近出现的序列,等等。不同因素可决定压缩系统、设备、或方法的功能如何。压缩系统可用通过各种度量进行评估,例如,这些度量包括压缩/解压过程中的压缩率、压缩/解压速度、可拆分性、占用内存及其他资源,进行协同工作的能力等等。压缩速度可与压缩率成比例。例如,一些实例系统可具有高压缩速度和低压缩率,而其他系统可具有相对低压缩速度和相对高压缩率。

压缩速度可能是一个重要的考虑因素。以全流吞吐量运作的快速压缩系统可生成相对较小压缩率。这可能有助于减少数据输出。例如,压缩设备可位于主机和网络接口控制器设备之间或主机和存储控制器设备之间。

根据本发明的另一方面,提供了一种压缩设备,该压缩设备通过排序法执行并行历史搜索。并行处理可提高压缩速度。

根据本发明的另一方面,提供了一种压缩设备,该压缩设备具有接收未压缩输入数据的接收器。输入数据可表示为一系列符号。压缩设备可包括处理器,用于在输入数据的该系列符号上执行基于词典的历史搜索,生成标签或令牌的中间数据结构,其被编码为压缩输出流。压缩设备可进一步包括编码器,用于编码压缩输出流的输入数据的该系列符号。输出生成器可使用输入数据已编码的该系列符号生成令牌作为压缩输出数据。压缩设备可包括发射器,用于发送压缩输出数据或存储设备,用于存储压缩输出数据。

根据本发明的另一方面,提供了一种数据压缩的方法。该方法可涉及处理输入数据,输入数据表示为一系列符号,以生成输出数据。在每个位置,方法可使用一个或多个符号的字符串和一个位置创建一个标签。方法还可涉及通过前缀对标签进行排序,以生成排序的标签序列。对于每个标签序列中的标签来说,该方法可进一步涉及将该标签和临近标签或相邻标签进行比较。如果在一定数量的符号中,具有公共前缀的标签有较早来源或其他来源,则压缩设备创建复制令牌,否则创建文字令牌。该方法可涉及通过相应位置或前缀对令牌进行排序。

根据本发明的另一方面,提供了一种压缩设备,利用并行处理,该压缩设备通过排序执行历史搜索。例如,设备可通过使用图像处理单元(graphicsprocessing unit,简称GPU)或高度并行的中央处理器(central processing unit,简称CPU)来实现。

根据本发明的另一方面,提供了一种压缩设备,该压缩设备具有进行并行编码的编码器,以生成压缩输出数据。编码器作用于来源于历史搜索的不同类型的输入数据,例如,编码压缩输出数据。

根据本发明的另一方面,提供了一种带寄存器、现场可编程门阵列(fieldprogrammable gate array,简称FPGA)和块随机存取存储器的压缩设备,现场可编程门阵列用于使用检索历史处理未压缩输入数据,块随机存取存储器用于存储检索历史结果。本发明所描述实施例可提供在FPGA执行并行历史搜索的过程。

根据本发明的另一方面,提供了一种压缩设备,其具有处理器和基于收缩词典的压缩编码器,处理器用于对基于词典的压缩执行历史搜索。

根据本发明的另一方面,提供了一种使用并行处理器编码来进行基于词典的压缩的方法。方法可涉及接收未压缩输入数据。方法可涉及使用反向计算处理输入数据。方法可涉及使用清除计算处理输入数据。方法可涉及使用正向计算处理输入数据。方法可涉及使用标头计算处理输入数据。方法可涉及使用布局计算处理输入数据。方法可涉及使用反向计算、清除计算、正向计算、标头计算和布局计算的结果生成压缩输入数据。

提供示例性实例来表示本发明所述实施例的不同方面。

图1描述了实例压缩系统100的示意图。本发明所述实施例可提供硬件压缩设备102用于透明路径内压缩及解压,在此也称为压缩引擎设备。作为一个示例性实施实例,压缩设备102可耦合到网络接口控制器设备104用于通过网络106进行数据传输。作为另一个示例性实施实例,压缩设备102可耦合到存储控制器设备108用于在存储介质,如闪存设备112或DRAM内存卡110上进行数据存储。所述方法的结果可以是压缩输出数据的有形物理介质。

历史搜索

根据本发明的一个方面,所述实施例可提供基于词典的压缩,例如,用于基于词典的压缩的基于矢量的历史搜索。

为了进行最大限度压缩,一实例压缩系统可用于检测和确定最长匹配序列。使用持久性数据结构,所述持久性数据结构称为树,一实例系统可通过中央处理器(central processing unit,简称CPU)来实现。这些数据结构可定义为二元搜索树,二元搜索树记录每一个观察的前缀的位置。

或者,另一实例压缩系统可记录最近出现的字符串,该存储在标签数据结构中的字符串与不同字符数相匹配。作为一个示例性实例,存储在标签中的字符数的范围可以是4个到7个。如果标签中的字符太少,考虑到标签的内存使用情况和编码情况,则处理的字符串不会那样压缩。如果每个标签中的字符太多,则排序增加,因此,标签大小可能增加内存使用。

作为一个示例性实例,每个标签四个字符可能是不会引起扩展的最短标签。相对于重新发送四个文字字符,对复制这四个字符的标签进行编码可保证不会占用更多空间。对于标签数量,不同的编码方案可能有不同的界值点,这仅仅是一个实例。与邻近或相邻排序后标签相比,较长的标签可能相当复杂。由于较长的标签可以区分出五个符号或字符长度的副本和只有四个符号长度的副本,较长的标签也可增大压缩率。相应地,可在压缩复杂度和压缩率之间进行取舍。

由于系统无法找到复制参考的最佳匹配,系统可能提供较低压缩率(如,相对于压缩尺寸的未压缩尺寸),但可以提供更快的压缩速度或吞吐量。一个实例系统可能使用一个哈希表,哈希表在每个位置依次更新。系统可以是连续性和数据依赖性的,也可以具有软件配置。

所述实施例可使用并行处理硬件来实施以便显示出并行性的益处。所述实施例可使用修改的历史搜索来识别最近搜索,最近搜索通过排序来利用数据并行。相应地,实例系统100通过使用并行处理硬件来实施。

根据本发明的一个方面,所述实施例可提供基于词典的压缩,例如,用于基于词典的压缩的基于矢量的历史搜索。硬件压缩设备可配置多种压缩实现方式,这些压缩实现方式设计用于压缩吞吐量。历史搜索可能是基于词典压缩的瓶颈,通过技术创建强线性相关链,这些强线性相关链很难或不可能提取出并行性。

相应地,所述实施例可涉及通过排序实施的历史搜索。排序可通过数据并行处理实施,通过使用大量线程进行并行排序。

图2描述了压缩处理的实例输入。实例输入可以为一系列大小一致的输入符号,通常为8个比特的字节。实例输出可以是一系列令牌,这些令牌的长度与输入相同。令牌可以是文字(如字符或符号),也可以是复制指令。复制指令可包括序列内的位置以及正在复制的字符数,符或符号的副本来自于所述序列。图2所示实例描述了从符号9-13到先前实例的符号0-4的复制参考指针。这些符号称为逆向副本。

图3描述了通过符号序列的随后实例的复制参考指针的替代实施方式,而这些符号可称为前向副本。

压缩设备102(如图1)可具有历史搜索输入数据流的电路,以生成历史搜索输出流。电路可具有输入单元以接收一系列符号的传入输入数据流。存储器设备在存储位置存储输入数据流的一系列符号。这可以称为历史缓冲。通过一系列符号,存储位置可能与位置相互关联。

电路具有并行处理器,通过并行排序,在存储器设备中的输入数据流上进行基于词典的历史搜索,以生产令牌的历史搜索输出数据流。每个令牌定义一种类型,该类型为文字令牌或复制令牌。每个文字令牌定义输入数据流中一系列符号中的文字符号。每个复制令牌具有一个复制参考指针,复制参考指针识别输入数据流的一系列符号中的一个或多个复制符号的位置。位置与存储输入数据流的存储器设备的存储位置中的一个存储位置相对应。复制符号可具有历史搜索输出数据流的文字令牌中的相应的一个或多个文字符号。即,复制令牌可能是指输入数据流中的位置或位移,或者是指该位置或偏移上的文字符号副本。复制令牌也可表示可复制的符号数。相应地,复制令牌可定义符号长度和复制参考指针的偏移值。

比较器将存储器中存储位置的一系列符号进行比较,以为并行排序确定一个或多个复制符号及相应的一个或多个文字符号。对于每个复制参考指针而言,存储器选择器选择对应位置的存储位置,该对应位置由各复制参考指针确定。此处描述了实例比较器和选择器。输出单元连接接收设备以输出用于输入数据流压缩的历史搜索输出流。

并行处理器连续生成表示输入数据流的标签,每个标签定义一系列符号中k个连续符号的窗口,其中k为整数,以及输入数据流的一系列符号的标签位置。标签位置即窗口中k个连续符号中的第一个符号。在存储器设备中,标签位置为k个符号窗口的第一个符号的对应存储位置。

用于并行排序的并行处理器基于k个符号的窗口对标签进行排序。根据输入数据流的符号类型,排序可基于标签的k个符号窗口的词典或字母数字顺序。

第一和第二标签可具有两个连续的标签位置,通过(k-1)个重叠符号,第一标签窗口的k个符号的一部分与第二标签窗口的k个符号的另一部分重叠。

比较器可将每个标签与预定量的邻近或相邻标签进行比较,以确定冗余标签,对于每个冗余标签,k个符号的窗口与另一个标签的k个符号的窗口相同。一些实例中,k的范围为4到7,以便提供有效压缩。

冗余标签是指输入数据流中先前出现的相同符号。给定标签A和B,如果两个标签的前j个符号相同的话,标签A对于标签B来说为冗余的,其中k大于等于j,而j大于等于4,或标签A的位置大于标签B的位置。这仅是逆引用的一个实例。这就使得电路创建复制(delta=位置B-位置A,长度=j)令牌。如果A对于B来说不是冗余的,则电路可创建Lit(内容=第一符号,长度=1)令牌。

对于每个冗余标签,并行处理器生成用于历史搜索输出数据流的复制令牌的一个复制令牌;对于用于冗余标签的复制令牌的复制参考指针,存储器选择器选择对应于其他标签的标签位置的存储位置。

并行处理器根据标签位置对标签,包括冗余标签,进行排序,以生成文字令牌和复制令牌的输出数据流,在输出数据流中的标签位置,复制令牌与冗余标签相对应。

电路可在图形处理器或并行中央处理器上实现。电路可耦合到编码器和输出生成器。通过合并历史搜索输出数据流的一部分复制令牌和一部分文字令牌,编码器可将历史搜索输出数据流转换成压缩输出数据流,该压缩输出数据流相对于输入数据流进行压缩。输出生成器可用于输出压缩输出数据流。通过将连续重叠复制令牌合并到较长复制令牌,编码器将一部分复制令牌进行合并。通过将各个文字令牌合并到较大的文字令牌中,编码器将部分文字令牌进行合并。对于每个复制令牌,编码器通过确定复制的文字符号的长度n(n为整数)和去除输入数据流的一系列符号所定义的(n-1)个后续文字令牌来合并部分复制令牌。一些实例中,编码器为基于收缩词典的压缩编码器,对反向计算、清除计算、正向计算、标头计算和布局计算进行并行扫描,以生成输出数据流。此处对编码过程进行了更为详细的描述。

如图1所示,带具有电路的压缩设备的压缩系统包括用于发送压缩输出流的网络接口104。带具有电路的压缩设备的压缩系统也可包括存储控制器108,其用于在物理永久性计算机可读介质中存储压缩输出流。

图4描述了根据所述实施例的一方面的压缩数据的并行历史搜索方法400的过程图。方法400可通过电路或特殊硬件设备,如GPU、并行CPU、FPGA或其他并行处理设备执行。在多个实施例中,方法也可通过硬件压缩设备或压缩系统执行。

方法400可涉及接收传入输入数据流,其包括一系列符号。方法400可涉及在存储器设备的存储位置存储输入数据流的一系列符号。如下所述,方法400涉及通过并行排序并行处理存储器设备中的输入数据流,以产生令牌的历史搜索输出数据流,每个令牌定义一个类型,该类型可以是文字令牌,也可以是复制令牌。每个文字令牌定义输入数据流的一系列符号的文字符号,每个复制令牌具有复制参考指针,用于识别输入数据流的一系列符号的一个或多个复制符号。位置与存储输入数据流的存储器设备的存储位置中的一个存储位置相对应。一个或多个复制符号具有对应的历史搜索输出数据流的文字令牌中的相应的一个或多个文字符号。

步骤402中,在每个位置,硬件压缩设备可创建标签来表示输入数据流。这种标签操作可视为一个k字符或符号滑动窗口,其中k为整数。例如,k可以为四个字符。即,硬件压缩设备可连续生成表示输入数据流的标签,每个标签定义一系列符号中k个连续符号的窗口,其中k为整数,以及输入数据流的一系列符号的标签位置。标签位置可以是窗口中k个连续符号中的第一个符号,在存储器设备中,标签位置为k个符号窗口的第一个符号的对应存储位置。

压缩可涉及取字符窗口的哈希值和将该哈希值存储在参考表中。相同的四个字符可赋予到表的相同条目,使得当设备检测到表中相同哈希值时,设备进行复制操作。这种操作通常为使用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)替换,表明四个文字字符应从位置0复制到位置9。记号(copy@0)为一示例性实例,其可表达为“从先前9个符号中复制4个”、“复制delta 9”等等。标签("nort"@10)的符号或字符可被一个复制令牌(copy@1)、“从先前9个符号中复制4个”、“复制delta 9”等等替换。过程可将初始输入数据流进行转换以生成复制令牌和文字令牌的中间数据流,每个令牌均链接到输入数据流中令牌的原始位置。

过程可将每个标签与预定量的(如三个前向令牌和三个逆向令牌,可改进和自定义)邻近或相邻标签进行比较,以识别冗余标签,对于每个冗余标签,k个符号的窗口与另一个标签的k个符号的窗口相同。冗余标签使用若干小于窗口的令牌进行识别。例如,k可以是7,冗余标签可通过六个重叠符号识别。识别冗余标签的通用符号的数量可少于窗口中符号的数量。对于每个冗余标签,过程可涉及生成用于历史搜索输出数据流的复制令牌的一个复制令牌;对于用于冗余标签的复制令牌的参考部分指针,选择对应于其他标签的标签位置的存储位置。冗余标签可识别为同等于另外一个标签的若干符号。通过使用复制参考指针替换冗余标签的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的副本。但是,这并不是压缩序列历史搜索阶段的目的。单独的编码过程可将历史搜索输出编码到数据流,该数据流可显示如下:(副本delta=-9长度=5)(文字长度=4)位于(文字长度=9)北偏西。特殊控制码可用于编码(文字长度=9)、(副本delta=-9长度=5)等等。不包括引文,引文用于清晰定义文字串。图7描述了实例编码处理。图7为一示例性实例,在其他实施例中,其他编码过程可用于编码并行历史搜索结果。

图9描述了另一实例输入流。步骤402中,参考图4的查询历史过程400,压缩设备创建输入数据标签。标签可并行生成。对于该实例,标签的每个组件具有至少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')(Copydelta=-13,len=4)(Copy delta=-13,length=4)(Copy delta=-13,len=4)(Copydelta=-13,len=4)(Lit'T')(Lit'H')(Copy delta=-26,length=4)(Lit'E')(Lit'S')(Lit'T')。引文“Copy delta”可表示相对于中间串中复制令牌的位置的要复制的字符或符号位置。引文“length”可表示要复制的字符数。

压缩的下一阶段为编码,编码可进一步减少中间数据结构,以合并副本删除冗余文字。

对于实例WESTERN_NORTHWARD_BY_NORTHWEST,编码器输出可以是:(Literal length=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-specific integrated circuits,简称ASIC)上实现。

电路500可用于历史匹配输入数据502做为一系列词。图5所示实例电路500中,词的长度为32字节;然而,其他实施例中,词可以是任意长度数据流的一部分,如,1B、2B、4B、8B、16B、64B、128B、256B等。一些实例中,词长可基于硬件要求或限制(如FPGA数据总线大小限制)或基于历史匹配最小标签大小。

电路500可包括第一存储器504,第一存储器包括若干适用于存储输入数据词的存储位置。一些实施例中,第一存储器可由一个或多个存储元件组成。其他实施例中,第一存储器可以是单独的较大存储器元件。例如,图5所示实例电路500中,第一存储器504包括十六个32B存储位置。一些实例中,这些存储位置可分布在若干个寄存器或单独的存储器设备中。在另一实例中,这些存储位置可以是单独存储器设备的一部分,例如,随机存取存储器模块(random access memory,简称RAM)。

具有N个存储位置的第一存储器504可用于存储输入数据序列的N个最近引入词。其他实施例中,第一存储器504可以是移位式存储器或移位寄存器。在这样一些实施例中,新引入词可存储在第一存储器位置中(例如,图5中存储I15的存储器位置)而第一存储器中的所有其他词转移到右边的存储器位置。由于新词的引入,第一存储器504中的最旧的词(如图5中存储器位置存储的I0)被覆盖,或从第一存储器中删除。在其他实施例中,转移序列可从左到右,或根据其他任何先进先出顺序。

在另一实施例中,第一存储器504可用于通过利用当前新引入词覆盖第一存储器中最旧的词来存储N个最近引入的词。例如,选择器,如指针、计数器、链表或其他元件或过程可提供地址或其他存储位置标识,其他存储位置标识随着每个词的引入而改变,通过每个存储位置进行循环。例如,图5中实例电路可包括一个4-比特计数器作为第一存储器的选择器。

在一示例性实例中,序列中的第1词存储在I15,第2词存储在I14,第3词存储在I13,等,第16词存储在I0。第16词可存储在I15覆盖序列中的第1词。

第一存储器504可以是寄存器阵列、循环缓冲器阵列等,或其他任意数据存储结构,这些数据存储结构允许存储新引入词,同时也允许在同一时钟周期内读取所有N个存储位置。在第一存储器中词转移的实施例中,第一存储器504可以是任意数据存储结构,这些数据存储结构允许在同一时钟周期内读取并写入所有N个存储位置。

一些实施例中,第一存储器504可以是双端口或二端口存储器阵列,使得在同一时钟周期内,第一存储器504的每个存储位置都可被读取并写入。在一些实例中,允许存储器写入新引入词,同时读取该词以提供数据506由比较器508进行比较。一些实例中,可提高该过程的有效流水线操作。

电路500包括第二存储器510阵列,用于存储历史输入数据。图5所示实例电路500包括具有16个存储位置的64位第二存储器阵列。在其他实例中,可使用任意M个第二存储器。一些实施例中,第二存储器数可基于硬件要求、可用性或限制性(如FPGA最大区块RAM尺寸)或基于所需历史匹配尺寸。

一些实施例中,每个第二存储器中存储位置数对应于第一存储器504中的存储位置数。

第二存储器阵列510定义存储输入数据502历史的存储位置集。一些实施例中,存储位置集逻辑划分为行,每行包括来自每个第二存储器的一个存储位置。例如,0行包括存储器0中存储位置I0,存储器1中存储位置I1,存储器2中存储位置I2……存储器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 random access memory,简称Block-RAM)的历史。一些实例中,这就简化了路由或有助于组织路由和/或减少寄存器的使用或降低所需寄存器的数量。

电路500包括多个比较器508,用于将来自第一存储器504内每个存储位置的词与存储在第二存储器510的所选行的数据进行比较。一些实施例中,比较器用于将该词与第二存储器所选行中历史数据的一系列数据窗口进行比较。一些实施例中,数据窗口的数量可基于压缩过程中编码符号/字符的比特数。一些实施例中,每个数据窗口可表示不同数量符号大小的偏移的历史数据的词大小部分。一些实施例中,数据窗口可基于硬件中输入总线宽度或可用资源。

一基本实例中,第一存储器第一存储位置的词的长度为1字节,其值为0xFF。第二存储器为三个存储器的阵列,所选行的存储位置的值为0x11,0x22和0x33。若符号为4比特,电路将具有足够多的比较器用以将0xFF与4比特增量中移入的0x112233的数据窗口相比较。也就是说,比较器可用于进行至少5次比较: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等等)进行比较。一些实施例中,与先前数据行重叠的数据窗口(s)的处理同样可应用到清理后的第一存储器数据的数据窗口(s)。

一些实施例中,比较器可用于同时进行所有数据的比较:第一存储器数据和所选行数据的比较。

比较器可以是任意比较器电路或设备,用于确定两个词是否具有相同值。一些实例中,比较器可以是逻辑门、FPGA逻辑块、查询表或其他任意适合的比较器电路。

一些实施例中,电路500具有一个或多个用于存储比较器输出的存储设备。

一些实施例中,表示历史匹配结果的比较器输出整理和/或提供给编码器或其他设备或过程,以继续压缩输入数据。

图5所示示例性实例提供历史匹配网络,用于在16个时钟周期内比较16输入和存储器中存储的32KB的历史。

如图所示,假设n字节输入块输入到输入队列与历史进行比较。同样假设随着时间的推移,整个32KB的历史存储在64个存储器中,每个存储器16字节深,32字节宽(64*16*32字节=32KB)。可以将历史看作存储以前的32KB输入数据的滑动窗。

在该示例性实例中,假设每个存储器可配置为双端口。一个端口分配用于读取数据,以将输入和历史内容进行比较。为了将一块32字节的输入数据与整个历史进行比较,需要进行1024x 32字节比较。这就意味着,在时钟周期0中,15个位置中的位置0可从所有64个存储器中读取用于历史比较,并完成64x 32字节比较。由于输入转移到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包括哈希表和正向副本。当选择特殊硬件进行实现时候,也可考虑硬件限制。例如,管理GPU上计算单元间的通讯与同步以创建输出是很困难的。

所述实施例可以涉及代码实现,通过不同硬件平台和不同供应商硬件(如FPGA供应商)代码实现是便携式的。所述实施例可以涉及FPGA、CPU和GPU/加速处理器(accelerated processing unit,简称APU)实现方式的异构实现。

另一方面,所述实施例通过异构方法提供APU实现用于结合GPU和CPU的并行性。实施例可以涉及APU哈希表创建(GPU)的并行处理、并行文字和副本创建(GPU)及输出编码(CPU)的合并。当选择特殊硬件实现时,也可考虑硬件限制。例如,GPU上计算单元不够实现该过程。

再一方面,所述实施例通过异构方法提供另一APU实现用于结合GPU和CPU的并行性。实施例可以涉及APU的并行处理,包括总体哈希表创建(GPU)、并行文字和副本创建(GPU)及输出编码(CPU)的合并。当选择特殊硬件实现时,也可考虑硬件限制。例如,全局存储器可以涉及内核执行。编码器

另一方面,所述实施例可能提供一基于收缩词典的压缩编码器,如,硬件设备,用于实施编码将一系列令牌转换成压缩输出流。实例应用可能为运行中的网络压缩。实施历史搜索后,压缩设备可编码数据流进行进一步压缩。这就涉及合并复制令牌的副本和进一步去除冗余文字令牌。提供输入至编码器的预处理中间数据流来自所述并行历史搜索,或来自其他搜索过程。其他实例历史搜索包括传统的使用所述哈希表、FPGA硬件实现等等的“时髦”过程。不同历史搜索过程的示例性实例将输入数据流“BRANDISH_OATBRAN_BRANDY”考虑在内。在“BRANDY”位置处,历史搜索可从“BRANDISH”查找“BRAND”或从“OATBRAN”查找“BRAN”。两种都是历史搜索的正确输出。不同搜索可依主次排列。该历史搜索输出提供给编码器用于进一步处理。

通常,编码器可查找相邻复制令牌,符号的第一长度或复制参考(例如,从先前9个符号中复制四个符号)的delta大于等于下一个delta。编码器可选择第一复制令牌,然后查看相邻复制令牌。编码器可开始以递增方式删除复制令牌并扩展复制到第一复制令牌中的字符的量。

如图2所示,中间数据流可为文字令牌和复制令牌的组合:NORTH_BY_[copy,0][copy,1]RTHWEST。所得编码器输出如图2所示。图2中,两个复制令牌“nort”的[copy,0]和“orth”的[copy,1]各自与四个符号组合成“north”的五个符号的一个复制令牌。

如图9所示,中间数据流可为文字令牌和复制令牌的组合:WESTERN_NORTHWARD_BY[copy,8][copy,9][copy,10]TH[copy,0]EST。复制令牌参考初始引用四个字符,但编码后可引用六个字符,去除两个复制令牌。在该实例中,编码器可通过较大的符号或字符集将初始分离的复制令牌“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=5)及后续副本。编码器的再一个任务可包括去除副本覆盖的文字。数据流“AAAAAA”的历史流输出可以是(Lit'A')(Copy delta=-1length=4)(Copydelta=-1length=4)(Lit'A')(Lit'A')(Lit'A'),编码器可将其转换成(Litlength=1)'A'(Copy delta=-1length=5)。注意尾文字已被副本覆盖。

编码器可实现贪婪算法过程,在删除相邻复制参考过程中,该过程尝试获得最长复制参考长度。在这个过程中,不一定提供最佳压缩,但是可能加快压缩速度。例如,一些编码操作可能选择重复词的最佳组合。参考图9的实例,另一过程期望尽可能多的去除重复而非创建较长复制令牌“northw”,并识别令牌,例如“north”和“west”。

编码处理还可减小窗口尺寸生成另外的复制令牌以去除冗余文字。例如,通过减小窗口尺寸,文字令牌“est”可用复制令牌代替。

编码器可通过扫描操作(也可称为前缀和)的并行处理来实现。扫描是并行的,根据所述一些实施例,其可用于压缩过程。例如,编码器可对所述并行历史搜索产生的中间数据进行扫描处理,或对其他实施例中,其他历史搜索技术产生的中间数据进行扫描处理。

如上所述,压缩可将一系列符号作为输入,并尝试生产较短序列作为输出。基于词典的压缩方案可找到输入中的重复子串,并编码,例如,随后出现的子串作为早期出现的子串或后期出现的子串的复制参考指针。

所述实施例可提供一种机制将一系列符号转换成一系列令牌。每个符号可以是一个文字令牌(如输入流中先前/后面位置的非引用),也可以是指定数据流中位置和复制字符数的历史复制令牌。由于编码器将来自历史搜索输出的复制令牌合并以提供压缩输出数据,复制令牌已复制不同数量的字符。

所述实施例可使用数据并行编码机制输入数据流按顺序编码,这可能使得编码过程出现瓶颈问题。在一些并行历史搜索的实例中,按顺序编码处理可能失去并行处理历史搜索的处理效益。相应地,所述实施例可以涉及并行执行编码过程的机制。

所述实施例可提供用于编码器806的电路(图8所示)来编码输入数据流以生成压缩输出流。

电路可以具有输入单元用于接收一系列令牌的传入输入数据流。每个令牌定义输入数据流的位置、长度以及类型。令牌类型可以是文字令牌或复制令牌。每个文字令牌定义文字符号。在输入数据流的一系列令牌中,每个复制令牌具有到另一令牌位置的偏移。存储器设备存储存储位置处输入数据流的一系列令牌。

并行处理器使用存储设备中输入数据流并行扫描来编码令牌对输入数据流中的每个令牌同时进行处理,与此同时,引用其他令牌,这些令牌位置在输入数据流一系列令牌的各个令牌之前。并行处理器通过去除基于并行扫描结果的输入数据流令牌的一部分生成压缩输出流。

多个比较器将用于并行扫描的存储器的存储位置的一系列令牌进行比较。所述比较器实例与FPGA存储器搜索相关。对于每个复制令牌,存储器选择器选择对应于偏移位置的存储位置。所述比较器和选择器实例与FPGA存储器搜索相关。比较器和选择器可用于实现并行扫描操作。

输出单元连接一接收设备用以输出压缩输出流。压缩设备可接收电路输出要求提供网络接口用于传输压缩输出流。压缩系统可接收电路输出提供存储控制器用以在物理永久性计算机可读介质中存储压缩输出流。电路可在图形处理器、并行中央处理器或现场可编程门阵列上实现。并行处理器可执行并行历史搜索生成输入数据流令牌。并行处理器可使用并行排序执行并行历史搜索生成输入数据流令牌。并行处理器可执行按顺序历史搜索生成输入数据流令牌。相应地,编码用并行处理器可与不同类型的历史搜索共同起作用以接收输入令牌。

编码过程可在输入令牌与线程一样多的情况下在实施,例如,每个线程负责发送自身令牌生成的字节。由于每个线程需要写入的位置取决于输入流中位于该线程前的所有线程写入的字节数的总和,编码过程可能是一个挑战。需要在线程之间进行一些通信,但是这些最低限度的通信可高效的利用通信资源。

作为示例性实例概述,根据所述实施例的系统、方法和设备可使用并行处理扫描技术。

例如,并行扫描技术可以是广义的前缀和。该技术可能涉及使用结合运算符带i∈{1,2,....,n}的序列exi,并计算:

例如,添加运算符的序列1、2、3、4、5可生成:1、3、6、10、15即,第j个术语为输入序列前j个术语的和(使用所提供的运算符)。

变化,也称为向右扫描或向前扫描,在序列的最后替换和。为了区分,标准技术称为向左扫描或向后扫描。该技术可并行进行。对于带m个独立处理器的一系列长度n,该技术可在阶段进行计算。

并行扫描技术工作如下:输入数据可在log2(n)阶段进行定义。在每个j阶段,利用该技术计算用于0;1;2;:::;n-1的yj;i。可使用以下定义:y0,i=xifor i∈{1,2,....,n}。对于k∈{1,2,....,[log2(n)]}阶段,也可使用以下定义:Δ=2k-1。对于正向计算,可使用以下定义:对于反向计算,可使用以下定义

另一方面,所述实施例提供使用并行处理压缩编码的过程。图7描述了根据一些实施例的数据压缩方法700的一实例。方法700可通过电路、编码器、压缩设备、压缩系统等执行。

一些实施例中,编码过程可编码图4涉及的并行历史搜索输出。如上所示,图7的分离编码过程则可编码图2的实例输入流所用的历史搜索输出以生成以下输出流:(Literal length=20)“WESTERN_NORTHWARD_BY”(Copydelta=-9,length=6)(Literal length=3)“EST”。特殊控制代码可用于编码(Literallength=9)、(Copy delta=-9length=5)等等。引用不包括在内,也不用于阐明。

每个令牌可具有长度len(τ)以及类型type(τ),类型可以是文字值也可以是复制参考指针。复制令牌也可定义偏移offset(τ),其可以是复制回副本的字符数。文字令牌可定义符号sym(τ)。相应地,输入数据流可以是一系列令牌,每个令牌定义输入数据流中的一个位置、长度和类型,令牌类型可以是文字令牌或复制令牌。每个文字令牌可定义一个文字符号,在输入数据流的一系列令牌中,每个复制令牌具有到另一令牌位置的偏移。

过程涉及使用存储器设备中输入数据流并行扫描来编码令牌对输入数据流中的每个令牌同时进行处理,与此同时,引用其他令牌,这些令牌位置在输入数据流一系列令牌的各个令牌之前。过程涉及通过去除基于并行扫描结果的输入数据流令牌的一部分生成压缩输出流。并行扫描输出可以是带数据结构的更新的令牌(例如,更新的复制令牌和文字令牌),数据结构用于识别标头令牌、非标头令牌、令牌尺寸数据及令牌位置数据,以指示压缩输出流的生成。生成压缩输出数据涉及将令牌写入位置,标头令牌、非标头令牌、令牌尺寸数据表明哪些令牌被写出。例如,所有的标头令牌都可写出,而零尺寸复制令牌不可写出。过程涉及使编码压缩输出数据可作为永久性计算机可读介质或共享存储器或传输装置。

过程涉及使用反向计算、清除计算和正向计算的并行扫描进行令牌编码,以同时处理输入数据流令牌来更新输入数据流生成压缩输出流。

步骤702中,压缩设备可执行反向计算。

在该第一次计算中,可能存在文字和副本。文字令牌的长度可能是1,复制令牌可能更长。所述实例提供了带有初始四个字符的复制令牌的中间数据。对于该操作,候选令牌可能定义为γ,支点为π。两个令牌之间的距离为deltaΔ。当条件不符时,输出可能与支点相同。

步骤704中,压缩设备可执行清除计算。例如,系统或设备可能执行以下逆向扫描技术的两次计算:

步骤706中,压缩设备可执行正向计算。在该第三次计算中,任意副本覆盖的令牌也可能为一个副本。具有相同位移的一系列副本中的标头副本长度至少为4。该计算目的可能是将具有相同位移的副本进行聚合或合并,并将连续的文字进行结合,以生成一较长文字序列。由于该技术可将信息从数据流的后面条目传递到先前条目,该技术可以是正向扫描。

运算符可为:

当生成压缩输出流时,过程可涉及使用标头计算和布局计算识别压缩输出流中非标头令牌、标头令牌、令牌大小及令牌位置,以清除输入数据流的部分令牌。

步骤708中,压缩设备可执行标头计算。初始令牌可为标头。副本前后的文字可为标头。文字前后的副本可为标头。副本前后的具有不同位移的文字可为标头。对于该示例性实例,其他令牌都不是标头。通过查找令牌及其前导子来实现,而与其他所有标头检查无关。

步骤710中,设备或系统可执行布局计算。作为示例性实例,假设存在将每个令牌映射到恒定时间的编码大小的函数σ。一些实例中,所有非标头副本尺寸可固定为0,所有非标头文字尺寸为1,则编码后,尺寸的前缀和将提供每个令牌的终点。将尺寸从该位置减去得到开始位置。每个令牌可独立编码。前缀和可能为反向计算。

最后的计算可清除冲突的副本用于标头选择。正向计算可将副本到较合并到大副本并将文字合并到文字链中。清除计算可去除一些短于4个符号的短副本,相对于文字所占的字节,其可被编码成多个字节。布局计算可为编码器。每种方法都是数据并行的,可很好地适应并行架构。

图10和图11示出了图7在不同阶段的编码过程。图10涉及输入数据流'aaaaabaaaaaa'。图11涉及输入数据流'North by Northwest'。输入数据流显示为令牌,其包括文字令牌和复制令牌。文字令牌具有文字符号和长度,格式为“文字符号”:长度。复制令牌具有带偏移值和要复制的符号长度的复制参考指针,所述复制参考指针如格式副本(偏移,长度)所示。不同列表示扫描方法或阶段的实例结果。

并行处理器使用反向计算、清除计算和正向计算的并行扫描同时处理输入数据流令牌以更新输入数据流来生成压缩输出流。BW是指反向计算,CLEAN是指清除计算,FW是指正向计算。每种方法作为具有不同扫描参数的并行扫描来实行。这些方法更新输入数据流令牌。

标题为“BW-1”的列是指在一个位置结束查找的反向计算,“BW-2”是指在两个位置结束查找的反向计算。表中边缘位置高亮化,以强调阶段或方法的操作。在图10所示第一实例中,高亮部分表示清除计算的目的。在可能生成的长度小于4副本的反向计算结束时,会生成额外的复制令牌。

在文字的图11所示“north by northwest”实例输入数据流的正向计算中,编码器使用长度表示当前文字后有几个文字。编码器使用预定义长度,以便得知输入标头的尺寸及内容。N:9令牌可高亮化实例,需要正向计算的所有对数(N)阶段以得到最终编码。由于编码过程需经过数个阶段来稳定,复制令牌对图11的“north by northwest”实例输入数据流感兴趣,但是编码器最后稳定下来。

当生产压缩输出流时,并行处理器使用标头计算和布局计算清除输入数据流的部分令牌。“标头”列表示标头计算实例结果。“尺寸”和“位置”列表示布局计算实例结果,生成尺寸和位置数据。

并行处理器通过反向计算(即BW)更新传入的输入数据流利用附加的复制令牌来替换文字令牌,所替换的文字令牌在标头复制令牌的末端。附加的复制令牌从压缩输出数据流清除,所替换的文字令牌由标头复制令牌覆盖。

并行处理器通过清除计算(即CLEAN)更新传入的输入数据流来复制令牌替换为文字令牌,复制令牌的长度小于4。并行处理器通过正向计算更新传入的输入数据流来将连续重叠复制令牌进行合并,重叠复制令牌具有相同偏移值和连续文字符号。

并行处理器使用标头计算将每个令牌标记为非标头令牌或标头令牌,标头令牌为输入数据流中初始令牌、输入数据流中复制令牌后面或前面的文字令牌、输入数据流中文字令牌后面或前面的复制令牌和输入数据流中具有不同偏移值的复制令牌后面或前面的复制令牌中的至少一个。

通过将所有非标头令牌的尺寸固定为0并将所有标头令牌的尺寸固定为1,并行处理器使用布局计算生成令牌尺寸,确定压缩输出数据流中令牌的位置,每个位置由令牌的终点和起点来定义,其终点为所有先前令牌尺寸的前缀和,其起点为位置和前缀和之间的差值。

通过使用令牌尺寸,将所有非零尺寸的令牌写出到压缩输出数据流中令牌的位置,并行处理器使用布局计算的结果生成压缩输出数据流。标头令牌(及非标头令牌)结果、尺寸及位置用于生成或写入压缩输出数据流令牌。标头令牌和非标头令牌可用于生成尺寸数据。所有零尺寸令牌不写出到压缩输出数据流中,使得令牌的初始输入数据流得以压缩。布局表示令牌应在压缩输出数据流中写出的位置。

对于长度为n的复制令牌,通过将复制令牌合并到较大复制令牌以及将各个文字符号合并到较大文字令牌,并将输入数据流中下(n-1)个令牌去除,并行处理器清除输入数据流的一部分令牌。

通过增加与被清除部分的复制令牌相邻的复制令牌所要复制的符号的数量,并行处理器去除部分复制令牌。

编码器通过替换每个复制令牌来清除部分复制令牌,复制令牌长度短于文字令牌的预定义阈值。

相应地,所述实施例可提供用于并行化顺序过程的系统、设备和方法。直观上看,每次编码的位置取决于所有先前令牌的总计编码。所述实施例可提供并行编码输入流中令牌的系统、设备和方法。

这些方法可表示为并行扫描阶段。扫描(正推、逆推和清除)将令牌作为输入并将具有不同值得一组令牌输出。标头计算识别在最终输出中哪些令牌需要标头。令牌标头可(通过将每个令牌和先前令牌进行比较)表示标头或非标头。布局计算决定可清除的令牌。例如,标头令牌提供信息将令牌按大小排序,前缀和表示前缀和输出的写入令牌位置处位置信息。按照大小排序表示一些令牌为0字节,这些0字节的令牌可从压缩输出数据流中清除。标头计算和布局计算清除输入数据流中系列令牌的一部分复制令牌,编码正在压缩的压缩输出数据流涉及输入数据流。通过反复调用,使用稍有不同的参数,并行扫描使用不同方法生成数据用于写入压缩输出数据流。

通过增加与被清除部分的复制令牌相邻的复制令牌所要复制的符号的数量,编码器去除部分复制令牌。编码器将连续重叠副本合并到较大副本。

另一方面,所述实施例可提供压缩引擎设备,压缩引擎设备实施此处所述数据转换技术。图8表示示例性实例压缩引擎设备800(通常称为压缩设备),其将未压缩输入数据802转换成压缩输出数据810。实例压缩引擎设备可包括搜索处理器804(例如,实施基于词典的历史搜索)、编码器806及输出生成器808。

一些实施例中,压缩引擎设备800可使用集成硬件设备实现,或通过具有直接连接或网络连接的分布设备实现。

作为示例性实例,压缩引擎设备800可通过使用矢量机执行并行数据处理。在第一阶段中,通过使用并行数据处理技术,压缩设备800可使用处理器804进行基于排序和合并的历史扫描。在第二阶段中,压缩引擎设备800可使用编码器806。例如,压缩引擎设备可将一个逻辑处理器用于输入每个字节。对于该示例性实例,压缩设备800可执行O(logn)方法,其中n为输入大小。在每种方法中,每个处理器可用恒定尺寸。收缩通信和同步可为硬件资源的有效利用。

所述实施例可使用此处所述的并行数据处理技术。例如,编码可高效转换到FPGA。输入可分割为用于不同粒度的流传送的块。更细粒度的流传送可影响压缩率。历史扫描实现需要考虑硬件方面。排序可通过CPU/GPU架构实现。FPGA架构及同系架构需要大量复用器和优先编码器。这些可以是资源密集型的。

修改实施例中可使用布隆过滤器、线性扫描等。修改实施例可将历史大小作为一个参数来考虑,历史大小可随FPGA的增大而增加。一些实例中,取决于FPGA的大小,历史大小可能受限。其他参数可包括输入块大小、等等。所述实施例可包括跨窗口副本或文字的传播以及去掉细粒流传送的限制。所述实施例可提供没有或具有少数流水线泡沫的有效硬件架构。所述实施例可解释数据流。所述实施例可提供硬件实施接口。所述实施例可包括可重构部件。所述实施例可为固体状态驱动器、硬盘驱动器、存储器、网络等实现路内压缩。所述实施例可实施比特流压缩以加速FPGA部分重构。所述实施例可实现高速解压。

实施例可提供以软件产品形式体现的技术方案。软件产品可存储在非易失性或永久性存储介质中,存储介质可以是只读光盘储存器(compact discread-only memory,简称CD-ROM)、U盘或可移动硬盘。软件产品可包括大量用于使能计算机设备(个人电脑、服务器或网络设备)的指令,以执行实施例所提供的方法。

程序代码应用于输入数据执行所述函数,生成输出信息。输出信息应用到一个或多个输出设备中。一些实施例中,通信接口可以是网络通信接口。在结合本发明元件的实施例中,通信接口可以是软件通信接口,如进程间通信用接口。其他实施例中,通信接口如硬件、软件及其组合可结合使用。

每个计算机程序可存储在存储介质或设备中(如ROM、磁盘和光盘),该存储介质或设备可通过通用或特殊目的可编程计算机读取,当该存储介质或设备通过计算机读取执行所述程序,其用于配置和运行计算机。系统实施例也可通过永久性计算机可读存储介质实现,该系统配置有计算机程序,这样配置该存储介质使得计算机以一种特殊或预定义的方式运行执行所述函数。

此外,所述实施例的系统和方法可分配到计算机程序产品中,该计算机程序产品包括物理永久性计算机可读介质,该物理永久性计算机可读介质携带用于一个或多个处理器的计算机可用指令。提供不同形式的介质,包括一个或多个磁盘、高密度磁盘、磁带、芯片、磁性和电子存储介质、易失存储器、非易失存储器等。除瞬变传播信号外,永久性计算机可读介质可包括所有计算机可读介质。术语“永久性”并不是指排除计算机可读介质,如主存储器、易失存储器、RAM等,其中存储在其上的数据可只是暂存。计算机可用指令也可为不同形式,这些形式包括编译代码和非编译代码。

关于硬件设备组成的服务器、服务、接口、门户、平台或其他系统,将进行大量参考。应当注意的是,这些术语的使用被认为表示具有至少一个处理器的一个或多个设备,处理器用于执行存储在计算机可读有形的永久性介质中的软件指令。更应注意的是,所公开的基于计算机的算法、过程、方法或其他类型的指令集可作为包括存储指令的永久性有形计算机可读介质的计算机程序产品,这些指令使得处理器执行所公开的步骤。

在此描述了不同实例实施例。尽管每个实施例代表发明要素的一种组合,所有可能的发明要素的组合被认为是发明的主题。因此,若一个实施例包括A、B、C要素,第二实施例包括B、D要素,即使没有明确公开,则也可认为发明主题包括A、B、C和D的其他余下组合。

由于术语在此使用,除非语境另有规定,术语“耦合到”意在包括直接耦合(其中两个相互耦合的要素相互接触)和间接耦合(其中至少一个附加的元件位于两个要素之间)。因此,术语“耦合到”和“相耦合”为同义词。

所述实施例通过物理计算机硬件实施例实现。所述实施例提供有用物理机,特别是如计算设备、服务器、电子游戏终端、处理器、存储器和网络中的计算机硬件配置。例如,所述实施例针对计算机装置和方法,这些装置和方法通过计算机处理和转换电子数据信号来实现。

所述实施例可涉及计算设备、服务器、接收器、发送器、处理器、存储器、显示器及网络,这些部件特别用于执行不同动作。所述实施例针对用于处理和转换电磁信号的电子仪器,电磁信号表示不同类型的信息。所述实施例普遍并完整地涉及机器及其使用;脱离了以计算机硬件、机器和不同硬件组件的使用方式,所述实施例没有意义和实用性。

虽然已详细地描述了本发明及其优点,但是应理解,可以在不脱离如所附权利要求书所界定的本发明的情况下对本发明做出各种改变、替代和更改。

此外,本发明的范围并不局限于说明书中所述的过程、机器、制造、物质组分、构件、方法和步骤的具体实施例。所属领域的一般技术人员可从本发明中轻易地了解,可根据本发明使用现有的或即将开发出的、具有与本文所描述的相应实施例实质相同的功能、或能够取得与所述实施例实质相同的结果的过程、机器、制造、物质组分、构件、方法或步骤。相应地,所附权利要求范围包括这些过程、机器、制造、物质组分、构件、方法及步骤。

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