自适应速率压缩散列处理装置的制作方法

文档序号:11161950阅读:741来源:国知局
自适应速率压缩散列处理装置的制造方法

本申请案主张2014年8月12日提出申请的且标题为“自适应速率压缩散列处理器(Adaptive Rate Compression Hash Processor)”的第62/036,453号美国临时案的权益。

技术领域

本发明涉及用于压缩数据的系统及方法。



背景技术:

软件压缩很好理解且在公用域中可易于存取用于如GZIP等程序的源代码。考虑到GZIP压缩是基于DEFLATE[2]算法及霍夫曼(Huffman)编码[3],因此针对高带宽应用在硬件中进行用以实施压缩的算法是相对复杂的。压缩的意图是后期在数据流中使用所述数据流中早期出现的拷贝命令。因此,所有压缩实施方案均需要一搜索历史缓冲区及某一类型的比较长度函数以确定可用于拷贝命令的最长长度。用以在先前历史中实施搜索匹配的一种方法是实施散列函数,所述散列函数将可变长度字符串映射到可用于比较正压缩的数据流的固定值。

图1表示GZip的压缩算法的功能性硬件框图。输入数据102由实施(举例来说)LZ7/LZ78算法的模块108的散列模块104散列。将散列数据进行比较以由LZ CMD模块108按蓝波-立夫[4]算法或类似算法产生拷贝或文字命令。一旦收集对待压缩数据的统计,所述统计便被进行霍夫曼译码且接着被压缩以作为经压缩输出数据110而被发送出去。

本文中所揭示的系统及方法提供用于散列输入数据的经改进方法。

附图说明

为了将易于理解本发明的优点,将参考所附图式中所图解说明的具体实施例再现以上简略描述的对本发明的较特定说明。应理解,这些图式仅描绘本发明的典型实施例且因此并非被视为对本发明的范围的限制,透过使用附图将运用额外特异性及细节来描述及阐释本发明,在附图中:

图1是根据现有技术的用于实施压缩方案的组件的示意性框图;

图2是根据本发明的实施例的图解说明散列及散列链的产生的图式;

图3是根据本发明的实施例的用于产生散列链的方法的过程流程图;

图4是根据本发明的实施例的用于实施散列的电路的示意性框图;

图5是根据本发明的实施例的用于实施散列抑制的装置的示意性框图;

图6是根据本发明的实施例的用于散列抑制的方法的过程流程图;且

图7是适于实施根据本发明的实施例的方法的计算机系统的示意性框图。

具体实施方式

将易于理解,可将如在本文中大体描述及各图中图解说明的本发明的组件布置并设计成各种各样的不同配置。因此,如各图中所表示的对本发明的实施例的以下较详细说明并不打算限制如所主张的本发明的范围,而是仅表示根据本发明的目前所涵盖实施例的某些实例。参考图式将最佳地理解目前所描述实施例,其中通篇中相似部件由相似编号标示。

响应于此项技术的目前状态且(特定来说)响应于此项技术中通过当前可用设备及方法尚未完全解决的问题及需要已开发本发明。

可利用一或多个计算机可用或计算机可读媒体的任何组合,包含非暂时性媒体。举例来说,计算机可读媒体可包含以下各项中的一或多者:便携式计算机磁盘、硬盘、随机存取存储器(RAM)装置、只读存储器(ROM)装置、可擦除可编程只读存储器(EPROM或快闪存储器)装置、便携式光盘只读存储器(CDROM)、光学存储装置及磁性存储装置。在选定实施例中,计算机可读媒体可包括可含有、存储、传递、传播或传输供由指令执行系统、设备或装置使用或连同指令执行系统、设备或装置一起使用的程序的任何非暂时性媒体。

用于实施本发明的操作的计算机程序代码可以一或多种编程语言的任何组合而写入,所述编程语言包含面向对象的编程语言(例如Java、Smalltalk、C++等等)及常规过程编程语言(例如“C”编程语言或类似编程语言)。所述程序代码可作为独立软件封装在计算机系统上整体地执行、在独立硬件单元上执行、在与所述计算机相隔某一距离的远程计算机上部分地执行,或者在远程计算机或服务器上整体地执行。在于远程计算机或服务器上整体地执行的情景中,远程计算机可透过任何类型的网络(包含局域网络(LAN)或广域网络(WAN))连接到所述计算机,或者可与外部计算机进行连接(举例来说,使用因特网服务提供者透过因特网而进行)。

下文参考根据本发明的实施例的方法、设备(系统)及计算机程序产品的流程图图解及/或框图而描述本发明。将理解,所述流程图图解及/或框图的每一框及所述流程图图解及/或框图中的框的组合可由计算机程序指令或代码实施。这些计算机程序指令可被提供到通用计算机、专用计算机或其它可编程数据处理设备的处理器以产生机器,使得所述指令(其经由计算机或其它可编程数据处理设备的处理器执行)形成用于实施所述流程图及/或框图的一或若干框中所规定的功能/行为的手段。

这些计算机程序指令还可存储于非暂时性计算机可读媒体中,所述非暂时性计算机可读媒体可引导计算机或其它可编程数据处理设备以特定方式起作用,使得存储于计算机可读媒体中的指令产生包含指令手段的制品,所述指令手段实施流程图及/或框图的一或若干框中所规定的功能/行为。

还可将计算机程序指令加载到计算机或其它可编程数据处理设备上以致使在计算机或其它可编程设备上执行一系列操作步骤,以产生计算机实施的处理程序,使得在计算机或其它可编程设备上执行的指令提供用于实施流程图及/或框图的一或若干框中所规定的功能/动作的处理程序。

参考图2及3,使用散列200来迅速对稍后将按蓝波-立夫(LZ)算法及其它压缩衍生物压缩的文件、字符串或其它数据集202的大部分或全部可能参考编索引。图2中展示可产生的散列表204及散列链206的实例。散列表204及散列链206的填充可使用图3的方法300执行。如根据本文中所揭示的方法而产生的散列表204及散列链206可经处理以根据此项技术中已知的任何方法(明确地,LZ算法)而压缩原始数据集202。

在步骤302处,检索当前位置P处的文字对N。首次地,文字对P可等于零。在图2的实例中,位置P等于X且N等于‘ab’。方法300可包含确定304相对于文字N是否应抑制散列链的产生。此可包含执行图5的方法600。如果未发现304散列受到抑制,那么方法300可包含产生306文字对N的散列(即,Hash(N)),其中Hash()是散列函数。图4中展示实例性散列函数及实施电路。

接着可查找308散列表204中在地址Hash(N)处的条目E。在图2的实例中,针对第一次出现的文字对‘ab’,E的值为零。举例来说,针对根据方法300而处理的每一扇区或数据文件,可将散列表204初始化为零。

接着可将E的值存储310于散列链206中的位置P处。在图2的实例中,值0存储于散列链206中用于‘ab’的第一实例的位置X处。还可将P的值写入312散列表204中的地址Hash(N)处。在所图解说明实例中,可将X的值写入散列表204中的地址Hash(‘ab’)处。

如果位置P是最后文字或文字对的位置,那么将发现314数据文件被完成且方法将结束。否则,将递增P的值以指向下一文字(即,P=P+1文字位置),且方法将在步骤302处继续进行。举例来说,对于字符串‘abcd’,在P=0处将首先处理文字对‘ab’。在P=1处,将处理文字对‘bc’,以此类推。即使在确定304散列受到抑制时,仍可执行步骤314及316,如图3中所展示。

在图2的实例中,步骤304到312的下一迭代将致使响应于检测到‘ab’下一次出现在位置Y处而从地址Hash(‘ab’)检索X的值。因此,将X写入散列链206中的位置Y处且将Y写入散列表中的地址Hash(‘ab’)处。

响应于检测到‘ab’下一次出现在位置Z处,从散列表204中的地址Hash(‘ab’)检索值Y。因此,将Y写入散列链206中的位置Z处且将Z写入散列表中的地址Hash(‘ab’)处。

如易于显而易见,散列表204及散列链206现在使一文字对的初次出现与所述相同文字对的一或多次后续出现相关。散列链中的位置X处的值指向位置Y。因此,当查找以文字‘ab’开始的字符串时,可遵循散列链206中对应于给出值Hash(‘ab’)的对的位置的指针而不必评估整个原始数据集。如上文所述,处理散列表204及/或散列链206以压缩原始数据集的方式可包含此项技术中已知的任何方法,例如LZ算法。

参考图4,散列函数(Hash())用于产生确定性索引,所述确定性索引是针对2个字节可存在的总共64K概率的子集。举例来说,8个位的2个字节(例如,字节0及字节1)各自可表示2^8个可能字符及(2^8)*(2^8)=64KB的可能字符组合。散列函数产生将所需搜索空间减小到2^13的13位散列或具有两个不同字节组合的概率的1/8的8K可能组合。此针对任何随机两字节组合产生相同散列值。

图4中展示用于产生散列值的电路的实例。如显而易见,字节400、402的位7到0被输入到13个“异或非”门404的阵列。如显而易见,如果N+3<=7,那么字节402在位置N处的位被输入到具有字节400的位置N+3处的位的“异或非”门,或如果N+3>7,那么字节402在位置N处的位被输入到具有字节400的位置N+3-7处的位的“异或非”门。同样地,对于至多为N=4的N值,字节400的位置N处的每一位被输入到具有位置N+3处的位的“异或非”门。

参考图5,由于散列是基于字节的,因此通过使用具有在不需要大面积开销的情况下允许多个同时写入的多个存储器组的散列处理器可满足根据方法300来处理多个散列的挑战,这是因为单端口存储器可用于存储器组。FIFO可用于在将多个字节对写入到相同存储器组时处置散列冲突意向。当FIFO填满时,散列处理器关闭散列计算及散列链接操作(例如,图3的方法300)。关闭散列计算及散列链接会减小压缩速率,这是因为新散列值并未产生且因此稍后无法被索引以用于按LZ算法进行拷贝。

散列处理器500可使用图5中所展示的电路500来操作以计算每一字节对的散列值。举例来说,散列处理器500可使用散列限制引擎504来检测FIFO 506何时填满及何时存在针对写入的组冲突,使得散列处理器500可将散列产生抑制到对应于完整FIFO 506的SRAM散列组508,借此允许FIFO 506外流。通过抑制散列,散列处理器500能够以对压缩速率来说最小的成本维持高处理量。由于新散列值意指数据已经不太可压缩了,因此仅损失可忽略压缩量。当散列处理器500遇到正被重复的文字时,散列处理器500使用文字行程长度引擎510来抑制相同文字字符的至多16个字节的散列产生,以使用于产生拷贝命令的散列链接的散列冲突的数目最小化。

在某一实施例中,8个存储器组508可连同8个FIFO 506一起用于产生处理5个两字节对从而有效地产生四个散列值所需的散列数据及平滑功能性。每一平滑FIFO 506可针对8个写入存储器组508实施为16深FIFO以处理在计算仅四个散列时出现的散列冲突。任何数目个存储器组508可连同任何数目个FIFO 506一起用于产生正被散列的任何文字对的散列冲突的平滑功能性,只要所述数目超过需要存储的散列的所需数目即可。举例来说,对于需要较小带宽的应用,可使用四个组508写入及FIFO 506而非实例性实施方案中的八个来产生两个散列。在散列处理因FIFO 506填满而被停止之前,平滑FIFO 506可经实施具有比16深或浅的深度,如图6的方法600中所概述。

散列处理器500可实施图6中所展示的方法600。举例来说,对数据文件或字符串的压缩可在步骤602处开始且可包含根据图3的方法300产生604散列及散列链。如果发现606相同文字(即,重复文字),那么方法600可包含确定所述文字是否为第16个连续重复文字。如果否,那么产生所述文字的散列可受到抑制610,一直到第16个连续重复文字为止。如果确定612字符串或文件中的数据被完成,那么发送614数据以进行LZ匹配514过程,此过程根据霍夫曼译码或某一其它方法而用准备进行编码的命令文件中的拷贝/文字命令来替换文字。如上文所描述的字符串或文件中所识别的重复文字的行程可用“行程长度”文字来替换,所述“行程长度”文字用重复文字的数目及到重复文字的第一实例的位置的偏移来替换重复文字。在一些实施例中,命令文件中针对单个字符文字行程(即,重复文字的行程)的行程长度可被约束为始终指向16字符偏移的倍数。以此方式,行程长度拷贝命令将提供超过90%的压缩速率,此提供压缩速率与实施行程长度拷贝命令的复杂性之间的良好平衡。

在一些实施例中,步骤606到610的行程长度散列抑制可限于关联到匹配长度窗口的每隔一个字符或n的倍数个字符。举例来说,可每隔一个字符或每n个字符执行评估606及可能抑制610一次,其中n是大于2的整数。在一些实施例中,指示重复文字的字符串的行程长度命令可指重复文字的紧接在重复文字的字符串之前的初始实例或与自重复文字的字符串的偏移的多个文字位置。因此,在步骤606处确定文字被重复可包含评估文字在方法600的当前迭代中正处理的文字之前的任何任意偏移处是否被重复。

如果发现612较多数据将保留在文件或字符串中,那么处理在步骤604处相对于字符串或文件中的下一文字对继续进行。

方法600可进一步包含确定616用于散列组508的FIFO缓冲区506是否填满。如果是,那么可关闭618对所述FIFO缓冲区506的散列处理且处理在步骤612处继续进行。如果否,那么所述方法可包含确定612字符串或文件的数据是否已全部被处理,且如果否,那么散列及散列链的产生可在步骤604处继续进行。否则,针对所述字符串或文件执行步骤614。

图7是图解说明实例性计算装置700的框图。计算装置700可用于执行各种过程,例如本文中所论述的那些过程。计算装置700可充当服务器、客户端或任何其它计算实体。计算装置可执行如本文中所论述的各种功能。计算装置700可为各种各样的计算装置中的任一者,例如桌上型计算机、笔记型计算机、服务器计算机、手持式计算机、平板计算机等等。在一些实施例中,含有实施本文中所揭示的方法的电路的硬件装置可包含于计算装置700中或嵌入下文所列的计算装置的组件中的任一者中。

计算装置700包含一或多个处理器702、一或多个存储器装置704、一或多个接口706、一或多个大容量存储装置708、一或多个输入/输出(I/O)装置710及显示装置730,此等全部耦合到总线712。处理器702包含执行存储器装置704及/或大容量存储装置708中所存储的指令的一或多个处理器或控制器。处理器702还可包含各种类型的计算机可读媒体,例如高速缓冲存储器。

存储器装置704包含各种计算机可读媒体,例如易失性存储器(例如,随机存取存储器(RAM)714)及/或非易失性存储器(例如,只读存储器(ROM)716)。存储器装置704还可包含可重写ROM,例如快闪存储器。

大容量存储装置708包含各种计算机可读媒体,例如磁带、磁盘、光盘、固态存储器(例如,快闪存储器)等等。如图7中所展示,特定大容量存储装置为硬盘驱动器724。大容量存储装置708中还可包含各种驱动器以实现从各种计算机可读媒体的读取及/或到各种计算机可读媒体的写入。大容量存储装置708包含可装卸媒体726及/或不可装卸媒体。

I/O装置710包含允许将数据及/或其它信息输入到计算装置700或从计算装置700检索数据及/或其它信息的各种装置。实例性I/O装置710包含光标控制装置、键盘、小键盘、麦克风、监视器或其它显示装置、扬声器、打印机、网络接口卡、调制解调器、镜头、CCD或其它图像俘获装置等等。

显示装置730包含能够向计算装置700的一或多个用户显示信息的任何类型的装置。显示装置730的实例包含监视器、显示终端、视频投影装置等等。

接口706包含允许计算装置700与其它系统、装置或计算环境互动的各种接口。实例性接口706包含任何数目个不同网络接口720,例如到局域网络(LAN)、广域网络(WAN)、无线网络及因特网的接口。其它接口包含用户接口718及外围装置接口722。接口706还可包含一或多个用户接口元件718。接口706还可包含一或多个外围接口,例如用于打印机、指向装置(鼠标、跟踪垫等)、键盘等等的接口。

总线712允许处理器702、存储器装置704、接口706、大容量存储装置708及I/O装置710彼此通信以及与耦合到总线712的其它装置或组件通信。总线712表示数种类型的总线结构中的一或多者,例如系统总线、PCI总线、IEEE 1394总线、USB总线等等。

出于图解目的,程序及其它可执行程序成分在本文中展示为离散块,但应理解,此些程序及成分可在各种时间驻存于计算装置700的不同存储组件中,且由处理器702执行。另一选择为,本文中所描述的系统及过程可以硬件或者硬件、软件及/或固件的组合而实施。举例来说,一或多个专用集成电路(ASIC)可经编程以实施本文中所描述的系统及过程中的一或多者。

在不背离本发明的精神或本质特性的情况下,本发明可体现为其它具体形式。所描述实施例在各方面均应视为仅为说明性的而非限制性的。因此,本发明的范围由所附权利要求书而非由前述说明指示。属于权利要求书的等效内容的意义及范围内的所有改变均将涵盖于权利要求书的范围内。

参考文献

[1].J.Gailly and M.Adler,GZIP:The Data Compression Program,1993,http://www.gzip.org/.

[2]DEFLATE Compressed Data Format Specification version 1.3.IETF.May 1996.p.1.sec.Abstract.RFC 1951.Retrieved 11 Nov.2012.

[3]D.A.Huffman,"A method for the construction of minimum-redundancy codes"Proc.IRE 40(9).pp.1098-1101.1952.

[4].Ziv,J.;Lempel,A.(1978)."Compression of individual sequences via variable-rate coding".IEEE Transactions on Information Theory 24(5):530.

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