数据匹配方法和数据匹配装置的制作方法

文档序号:6575448阅读:151来源:国知局
专利名称:数据匹配方法和数据匹配装置的制作方法
技术领域
本发明实施例涉及数据压缩技术领域,尤其涉及一种数据匹配方法和数据匹配装置。
背景技术
目前,为了减少数据需要的存储介质,提高数据传输效率,数据压缩在互联网、数 据库、存储应用中应用非常广泛,包括数据库应用、数据备份、压缩文件系统、网页(web)前 端服务等。其中,GZIP压缩算法是目前应用最广泛的一种压缩算法,例如,在Web服务器软 件(例如,apache, IIS)上使用GZIP对网页进行压缩,从而提高访问响应速度。在相关技术中,GZIP压缩算法包括两部分Lz77算法与哈夫曼(Huffman)编码。 Lz77算法通过对原始数据进行去冗余处理以达到压缩的目的。该算法的软件实现方法是在 一个数据窗口内(该数据窗口的大小一般为32KB),不断的迭代寻找最佳的匹配数据串进 而消除冗余,并依赖中央处理器(Central Processing Unit ;以下简称CPU)对数据进行 压缩。在匹配查找过程中,为了快速向前定位可能匹配的数据,对每个比特(byte)的待 输入字符,会计算一个hash值,如果两个字符的hash值相同,则可能存在匹配。在目前的 实现方法中,会用一个链表数据结构保存所有hash值相同的字符索引,对每个输入字符, 首先计算其hash值,然后使用hash值寻址到对应的链表,依次把字符索引取出进行匹配查 找,最后会把当前字符的索引插入链表供后面字符的匹配查找使用。在实现本发明过程中,发明人发现现有技术中至少存在如下问题使用软件对Lz77算法进行串行处理的效率非常低,并且消耗大量的CPU与存储器 (memory)资源,成为软件实现Lz77算法的性能瓶颈。

发明内容
本发明实施例提供一种数据匹配方法和数据匹配装置,用以解决现有技术中使用 软件对Lz77算法进行串行处理的效率低、且消耗大量的CPU与存储器资源的缺陷,实现通 过基于可编程门阵列的硬件来实现Lz77算法。本发明实施例提供一种数据匹配方法,包括历史数据存储窗口将待输入字符之前预定字节的历史字符保存在历史数据存储 窗口的随机存储器中;哈希计算单元计算待输入字符的哈希值,根据哈希值确定与待输入 字符对应的字符索引,并将字符索引存储在哈希计算单元的随机存储器中,其中,字符索引 为与待输入字符对应的历史字符在历史数据存储窗口的随机存储器中的位置信息;匹配查 找单元获取哈希计算单元的随机存储器中的字符索引,并根据字符索引对待输入字符和历 史字符进行匹配。本发明实施例还提供一种数据匹配装置,包括历史数据存储窗口,用于保存待输入字符之前预定字节的历史字符;哈希计算单元,用于计算待输入字符的哈希值,根据哈希值确定与待输入字符对应的字符索引,并将字 符索引存储在哈希计算单元的随机存储器中,其中,字符索引为与待输入字符对应的历史 字符在历史数据存储窗口的随机存储器中的位置信息;匹配查找单元,用于获取哈希计算 单元的随机存储器中的字符索引,并根据字符索引对待输入字符和历史字符进行匹配。本发明实施例的数据匹配方法和数据匹配装置,通过基于可编程门阵列的硬件来 实现Lz77算法,克服了现有技术中使用软件对Lz77算法进行串行处理的效率低、且消耗大 量的CPU与存储器资源的缺陷,能够提高Lz77算法的处理效率,极大地节省了 CPU与存储 器的资源。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发 明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以 根据这些附图获得其他的附图。图1是根据本发明实施例的数据匹配装置的结构示意图;图2是根据本发明实施例的历史数据存储窗口分布式存储结构的示意图;图3是根据本发明实施例的交叉存储方式的示意图;图4是根据本发明实施例的哈希计算单元的随机存储器的结构示意图;图5是根据本发明实施例的哈希计算单元的结构示意图;图6是根据本发明实施例的匹配查找单元的结构示意图;图7是根据本发明实施例的前端处理单元的结构示意图;图8是根据本发明实施例的地址管理模块的结构示意图;图9是根据本发明实施例的数据选择模块的结构示意图;图10是根据本发明实施例的查询匹配模块的结构示意图;图11是根据本发明实施例的后端处理单元的结构示意图;图12是根据本发明实施例的数据匹配方法的流程图。
具体实施例方式根据本发明的实施例,Lz77算法的硬件实现可以基于专用集成电路 (Application Specific Integrated Circuit ;以下简称 ASIC)是或现场可编程门阵列 (Field-Programmable Gate Array ;以下简称FPGA)。其中,基于ASIC的方法因为一次投 入高,开发周期长,最终产品不灵活等缺点,不太适合产品更新换代快、需求灵活多变的互 联网应用。基于FPGA的方法一次投入适中,开发周期短,产品灵活可编程,因此在本发明实 施例中,采用基于低端低成本FPGA的硬件来实现Lz77算法。下面结合附图和具体实施例进一步说明本发明实施例的技术方案。根据本发明的实施例,提供了一种数据匹配装置,图1是根据本发明实施例的数 据匹配装置的结构示意图,如图1所示,根据本发明实施例的数据匹配装置包括历史数据 存储窗口 10、哈希(hash)计算单元12、匹配查找单元14。下面,对上述各个模块进行详细 的说明。
历史数据存储窗口 10用于保存待输入字符之前预定字节的历史字符,在本发明 的实施例中,优选地,上述预定字节为16千字节。具体地,Lz77算法需要定义一个历史数据存储窗口,其大小一般为32KB,当前待 输入字符会在这个历史数据存储窗口里面查找匹配。在基于低端低成本FPGA的解决方案 中,因为片内受随机存储器(random access memory ;以下简称RAM)资源的限制,所以将 历史数据存储窗口 10的大小设置为16KB,虽然历史数据存储窗口 10的大小变成了 16KB, 但是,16KB的历史数据存储窗口 10对压缩率影响仅在左右,非常之小。为了对待输入字符进行流式处理、以及多个匹配查找并发进行,本发明实施例的 历史数据存储窗口 10对历史字符的存储做了如下优化一、在多路进行匹配查找时,每个周期内有多个读请求访问历史数据存储窗口 10, 因此,必须采用新的存储结构来避免读冲突,在本发明实施例中,采用分布式的RAM结构, 每个RAM可以独立寻址,并且具有两个独立的读端口。在本发明的实施例中,如图2所示, 16KB的历史数据存储窗口采用16个独立的RAM存储历史字符,包括第一 RAM 21、第二 RAM
22........第十六RAM 216,每个RAM存储1KB的历史字符,这样每个周期(cycle)可以支
持32个并发的读访问。二、为了打破数据局部性,降低多个读操作同时访问同一个RAM的概率,本发明实 施例采用交叉(interleave)的方式存储历史字符,可以提高RAM的使用效率。具体地,输入的字符最有可能与最近的1KB之内的历史字符匹配,这会导致在匹 配查找过程中,大部分的读访问集中在这1KB的数据,存储这1KB数据的RAM因为读端口不 足而导致无法读取数据。采用交叉存储方式,把数据均勻分布存储在各个RAM里面,消除了 数据局部性,使每个RAM的负载均衡。其中,如图3所示,交叉存储方式具体包括从第1个 可单独寻址的分布式随机存储器开始,顺序存储历史字符,如果最后1个可单独寻址的分 布式随机存储器存储历史字符后,还存在未存储的历史字符,则从第1个可单独寻址的分 布式随机存储器开始,再次顺序存储所述未存储的历史字符,依次循环,直到将所述预定字 节的历史字符全部存储为止。例如,将0-3B的历史字符存储在第一 RAM中,将4-7B的历史 字符存储在第二 RAM中,将60-63B的历史字符存储在第十六RAM中,将64-67B的历史字符 存储在第一 RAM中,将68-7IB的历史字符存储在第而RAM中。三、历史数据存储窗口 10的数据端口由IByte变成4Byte,并且每个周期会从4个 RAM里面读取共16Byte的数据,这样可以使读请求的次数降低到原来的1/16。从上述的描述可以看出,与现有技术中采用32KB的历史数据存储窗口,历史字符 按照正常顺序存储,同一时刻只能读取一个历史字符相比,本发明实施例的基于FPGA的硬 件虽然资源受到限制,只能使用16KB的历史数据窗口,但是,本发明实施例采用16个分布 式可独立寻址的RAM,每个RAM存储1KB的历史数据,有两个独立的读端口,每个数据端口位 宽是4-byte,极大地提高了读访问的并发性;此外,历史字符是以交叉方式进行存储管理, 可以降低因为数据局部性造成的读冲突。哈希计算单元12,用于计算待输入字符的哈希值,根据待输入字符的哈希值确定 与待输入字符对应的字符索引,并将字符索引存储在哈希计算单元的随机存储器中,其中, 字符索引为与待输入字符对应的历史字符在历史数据存储窗口的随机存储器中的位置信 肩、ο
具体地,为了在一个周期内把hash值相同的字符索引取出来,提高匹配处理的并 发性,因此必须使用新的存储结构代替链表。本发明实施例把对应于同一个hash值的字符 索引存储在不同的RAM里面,每个RAM可以用hash值作为地址去存储和读取匹配字符索 弓丨。如图4所示,在本发明实施例的低端FPGA中,由于受到片内RAM资源的限制,对于每个 hash值,在哈希计算单元的第一随机存储器41和哈希计算单元的第二随机存储器42中分 别保存2个最近的字符索引,从而保证每个周期可以读取2个字符索引。在实际应用中, 该结构可以灵活扩展到保存更多个字符索引。对于每个待输入字符,哈希计算单元12先计 算其hash值,并用hash值作为地址访问哈希计算单元的第一随机存储器与哈希计算单元 的第二随机存储器,读取有效的字符索引,然后把当前字符索引写到hash值对应的存储位 置,如果哈希计算单元的第一随机存储器与哈希计算单元的第二随机存储器已经存储两个 有效的字符索引,则使用新字符索引替代旧字符索引。根据本发明的实施例,哈希计算单元12中除哈希计算单元的第一随机存储器41 和哈希计算单元的第二随机存储器42外,如图5所示,还包括如下模块哈希计算模块51、 写管理模块52、读管理模块53、字符索引过滤模块54。其中,哈希计算模块51用于计算待输入字符的哈希值;随后,将计算的哈希值发 送到写管理模块52,写管理模块52将对应于哈希值的至少两个字符索引分别存储在哈希 计算单元的第一随机存储器41和哈希计算单元的第二随机存储器42中;随后,读管理模块53就可以直接从哈希计算单元的第一随机存储器41和哈希计 算单元的第二随机存储器42中读取字符索引;在字符索引还未写入哈希计算单元的第一 随机存储器41和哈希计算单元的第二随机存储器42的情况下,读管理模块53还可以直接 从写管理模块读取未存储的字符索引。具体地,因为RAM的写操作要2个周期才能生效,如 果在这两个周期内需要读取待写入的数据,读管理模块53则从写管理模块52的缓存中直 接读取字符索引。最后,字符索引过滤模块54将读管理模块53输出的无效的地址进行过 滤并输出。其中,上述的无效地址是指偏移量超过历史数据窗口的地址等。从上述描述可以看出,相对于现有技术中使用链表来存储和管理字符索引,本发 明实施例使用两套独立的RAM,对每个hash值,保存最近的2个字符索引,可以并发读取两 个甚至多个字符索引,提高了处理性能。匹配查找单元14,用于获取哈希计算单元12的随机存储器(即,哈希计算单元的 第一随机存储器41和哈希计算单元的第二随机存储器42)中的字符索引,并根据字符索引 对待输入字符和历史字符进行匹配。具体地,如图6所示,匹配查找单元14包括前端处理单元60、后端处理单元62,其 中,前端处理单元60用于获取哈希计算单元的随机存储器中的字符索引,并根据获取的字 符索引对待输入字符和历史字符进行匹配,并发送匹配结果;后端处理单元62用于接收匹 配结果,并根据匹配结果计算匹配距离、匹配长度、以及不匹配时输出的字符。具体地,为了提高压缩率,匹配查找单元14支持Lazzy匹配。Lazzy匹配是指当前 待输入字符的匹配查找完成后并不马上输出,而是等下一个待输入字符的匹配完成后,比 较这两个匹配结果,选择最长的匹配输出,另外一个字符按照不匹配输出。对于每个待输入 字符,从haSh2100kup模块读取两个匹配字符索引,然后发起2路匹配查找,对于下一 cycle 输入的字符,同样从哈希计算单元12读取两个匹配字符索引,如果前一字符匹配命中,则发起2路Iazzy匹配查找,因此,系统最多同时共有4路匹配查找在同时进行。前端处理单 元60把4路匹配查找的信息发送给后端处理单元62,后端处理单元62负责计算每路匹配 查找的匹配距离,匹配长度,和不匹配时要输出的字符。下面,对前端处理单元60的结构进行详细说明,如图7所示,前端处理单元60包 括地址管理模块70、匹配查找单元的移位寄存器71、数据选择模块72、查询匹配模块73、 匹配逻辑控制模块74。下面,对上述各个模块分别进行说明。具体地,如图8所示,地址管理模块70主要用于根据字符索引产生并存储历史数 据存储窗口 10的读地址;因为历史数据窗口由16个独立的RAM构成,每个RAM两个读端 口,因此共需要管理32个读地址。在没有匹配的时候,读地址来自哈希计算单元12的两个 字符索引,匹配过程中读地址是上一次读地址加上偏移量。由于历史字符从历史数据存储 窗口 10读回来时,需要根据读地址对历史字符进行裁剪选择(truncate),所以读地址必须 寄存直到历史字符返回。匹配查找单元的移位寄存器71用于存储待输入字符;具体地,匹配查找单元的移 位寄存器71采用一个40bit移位寄存器寄存待输入字符,每发起一次新的匹配查找,匹配 查找单元的移位寄存器71的低24bit(3Byte)和来自历史数据窗口的3Byte字符进行比 较,如果相同,则这次匹配命中。在匹配命中后,每个周期使用匹配查找单元的移位寄存器 71的16-23bit和来自历史数据窗口的一个byte数据比较以判断匹配是否在持续。数据选择模块72用于根据读地址从历史数据存储窗口中的16个可单独寻址的分 布式随机存储器中读取并存储32字节的历史字符,并根据读地址的低4位从32字节的历 史字符中选择并存储有效的26字节的历史字符;具体地,如图9所示,数据选择模块72从历史数据窗口的16个分布式RAM的32 个读端口中选择2路有效的32byte历史字符,每路是16byte,这16byte数据里面只有 13byte在当次匹配中是用到的,因此数据剪裁单元还会根据读地址的低4bit来选取有效 的13byte数据,用来进行匹配查找。移位单元把已经匹配过的字符向右移走,保证字符数 据寄存器里面的数据都是没有使用过的。查询匹配模块73,用于在新发起的匹配查找中,根据字符索引对匹配查找单元的 移位寄存器的低24位中存储的3字节的待输入字符和26字节的历史字符中的3字节历史 字符进行匹配;如果3字节的待输入字符匹配命中,则意味着一次新的匹配查找开始在第 二个周期内,获取与当前待输入字符对应的至少两个字符索引,并根据与当前待输入字符 对应的至少两个字符索引对存储在匹配查找单元的移位寄存器的16至23位中的当前待输 入字符和26字节的历史字符中相应的1字节历史字符进行匹配操作,如果当前待输入字符 匹配成功,则继续对下一个当前待输入字符进行匹配,依次类推,直到匹配结束,如果当前 待输入字符匹配失败,则结束匹配;在匹配结束后,得到第一匹配结果。也就是说,如图10所示,查询匹配模块73通过比较来自匹配查找单元的移位寄存 器71和数据选择模块72的数据,以判断什么时候产生新的匹配,当前匹配什么时候结束 等。判断一个新匹配的开始时,在检测新哈希匹配及检测新懒惰匹配单元中,需要同时比较 3byte的数据,在匹配过程中,在检测哈希匹配及检测懒惰匹配单元中,每个周期只需要比 较Ibyte数据,如果匹配的长度大于255、遇到文件末尾、或者新输入的字符与来自历史字 符窗口的数据不相等,则当前匹配结束。
查询匹配模块73还用于如果3字节的待输入字符匹配命中,在第二个周期内,针 对当前待输入字符,发起一次和上述匹配查找并发进行的匹配查找,具体为根据字符索引 对匹配查找单元的移位寄存器中存储的当前待输入字符以及当前待输入字符之前的两个 待输入字符和26字节的历史字符中的3字节历史字符再次进行匹配;如果再次进行的匹配 为命中,在第三个周期内,获取与当前待输入字符的后一个待输入字符对应的至少两个字 符索引,并根据与后一个待输入字符对应的至少两个字符索引对存储在匹配查找单元的移 位寄存器的16至23位中的后一个待输入字符和26字节的历史字符中相应的1字节历史字 符进行匹配操作,如果后一个待输入字符匹配成功,则继续对下一个待输入字符进行匹配, 依次类推,直到匹配结束,如果后一个待输入字符匹配失败,则结束匹配;在匹配结束后,得 到第二匹配结果。通过上述处理,在匹配过程中,最多有4路匹配查找在同时进行,4路并发匹配查 找意味着可能有4次读请求同时访问一个RAM,但每个保存历史数据的RAM只有2个读端 口,这就导致了结构冒险。为了解决这个问题,匹配查找单元每次读请求会读取13byte数 据,因此后面至少有10个周期不需要读取新数据,因此4次读请求可以错开发送,消除了读 冲突。匹配逻辑控制模块74用于比较第一匹配结果和第二匹配结果,确定匹配字符最 长的匹配结果并输出,将另一匹配结果按照不匹配输出。在将匹配结果输出后,针对当前待 输入字符重新发起上述过程的匹配查找。此外,匹配逻辑控制模块还用于产生整个模块的控制信号和异常处理。前端处理单元60经过上述处理后,就会将匹配结果发送到后端处理单元62,后端 处理单元62的结构示意图如图11所示,后端处理单元62的计算哈希匹配0的匹配长度及 距离单元、计算哈希匹配1的匹配长度及距离单元、计算懒惰匹配0的匹配长度及距离单 元、计算懒惰匹配1的匹配长度及距离单元根据前端的输出计算每个匹配的长度,距离和 不匹配时该输出的字符,其中,上述四个单元由匹配查找有限状态机控制,最终输出不匹 配的字符输出、哈希匹配输出、懒惰匹配输出,上述三个输出经过多路选择后,随后,由多路 选择在4路匹配中选择匹配最长的一路输出(包括字符、匹配长度、匹配距离)。从上述描述可以看出,相对于现有技术在查找匹配过程中每次只发起一路匹配查 找,各个匹配查找串行完成来说,根据本发明实施例的硬件实现方法可以同时发起4路匹 配查找,可以极大提高处理能力。需要说明的是,目前实现的硬件支持4次并发匹配查找, 但硬件构架可以灵活扩展到支持8次及更多的并发匹配查找。在实际的应用中,可以将本发明实施例的技术方案应用于各种需要进行数据压缩 的应用环境中,例如,透明压缩文件系统用于对应用程序做完全透明的压缩和解压,并且能 够选择性地使用软件压缩方式和硬件压缩方式。将本发明实施例的数据匹配装置应用于该 透明压缩文件系统中,在该透明压缩文件系统高负载情况下能够节省30% -40%的CPU使 用率,并使其写性能具有非常明显的优势。通过使用本发明实施例的数据匹配装置,避免了 数据压缩时对系统CPU的消耗,进而改善了系统的整体性能。数据经该压缩文件系统的压 缩后,能够节约超过50 %的磁盘存储容量。此外,在实际应用中,还可以通过修改网页服务 器软件中的zlib库,使用硬件压缩的方式取代软件压缩方式,并将本发明实施例的技术方 案应用于网页服务器软件,能够极大提高系统每秒处理页面请求的数目。
通过上述处理,本发明实施例基于低端低成本的FPGA,利用较少的硬件资源实现 1ζ77算法,最终的压缩率和软件实现方法非常接近,但每个FPGA的处理带宽是软件压缩方 式的2倍多,且每秒处理事务的能力是单个CPU的6倍,可以达到CPU无法达到的处理能力。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可 以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单 元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其 中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性 的劳动的情况下,即可以理解并实施。根据本发明的实施例,提供了一种数据匹配方法,图12是根据本发明实施例的数 据匹配方法的流程图,如图12所示,根据本发明实施例的数据匹配方法包括步骤1201,历史数据存储窗口将待输入字符之前预定字节的历史字符保存在历史 数据存储窗口的随机存储器中;其中,历史数据存储窗口的随机存储器为16个可单独寻址 的分布式随机存储器,每个可单独寻址的分布式随机存储器均具有两个独立的读端口 ;此 外,在本发明实施例中,优选地,上述预定字节为16千字节。需要说明的是,历史数据存储 窗口的处理可以参照上述装置实施中相应的内容进行理解,其结构示意图可以参照图2进 行理解,在此不再赘述。在步骤1201中,历史数据存储窗口将待输入字符之前预定字节的历史字符保存 在历史数据存储窗口的随机存储器中的处理具体包括历史数据存储窗口从第1个可单独寻址的分布式随机存储器开始,将历史字符顺 序放入16个可单独寻址的分布式随机存储器中,如果将历史字符放入最后1个可单独寻址 的分布式随机存储器后,还存在未放入的历史字符,则将未放入的历史字符从第1个可单 独寻址的分布式随机存储器开始,再次顺序放入16个可单独寻址的分布式随机存储器,依 次循环,直到将预定字节的历史字符全部放入16个可单独寻址的分布式随机存储器中为 止,其中,每个可单独寻址的分布式随机存储器最多存储1千字节历史字符。上述过程可以 参照图3进行理解。步骤1202,哈希计算单元计算待输入字符的哈希值,根据哈希值确定与待输入字 符对应的字符索引,并将字符索引存储在哈希计算单元的随机存储器中,其中,字符索引为 与待输入字符对应的历史字符在历史数据存储窗口的随机存储器中的位置信息;具体地,在步骤1202中,哈希计算单元将字符索引存储在哈希计算单元的随机存 储器中的处理具体包括哈希计算单元以哈希值为地址,将对应于哈希值的至少两个字符索引分别存储在 不同的哈希计算单元的随机存储器中,其中,哈希计算单元的随机存储器包括至少两个随 机存储器;如果在哈希计算单元的随机存储器中,已经存储以哈希值为地址的旧字符索引, 则使用新字符索引替代旧字符索引。有关哈希计算单元的相关处理可以参照上述实施例中的相关内容进行理解,相关 的结构示意图可以参照图4、图5进行理解,在此不再赘述。随后,哈希计算单元读取字符索引,并将字符索引发送到匹配查找单元。在实际应 用中,哈希计算单元可以直接从哈希计算单元的随机存储器中读取字符索引;在字符索引 还未写入哈希计算单元的随机存储器的情况下,哈希计算单元也可以直接读取未存储的字符索引。步骤1203,匹配查找单元获取哈希计算单元的随机存储器中的字符索引,并根据 字符索引对待输入字符和历史字符进行匹配。在步骤1203中,匹配查找单元根据字符索引对待输入字符和历史字符进行匹配 的具体处理包括步骤1、匹配查找单元根据字符索引产生并存储历史数据存储窗口的读地址;步骤2、匹配查找单元根据读地址从历史数据存储窗口中的16个可单独寻址的分 布式随机存储器中读取并存储32字节的历史字符,并根据读地址的低4位从32字节的历 史字符中选择并存储有效的26字节的历史字符;步骤3、在新发起的匹配查找中,匹配查找单元根据字符索引对匹配查找单元的移 位寄存器的低24位中存储的3字节(第1、2、3个待输入字符)的待输入字符和26字节的 历史字符中的3字节历史字符进行匹配;步骤4、如果3字节的待输入字符的匹配未命中,则匹配不开始,如果3字节的待输 入字符的匹配为命中,则意味着一次新的匹配查找开始在第二个周期内,匹配查找单元获 取与当前待输入字符(第4个待输入字符)对应的至少两个字符索引,并根据与当前待输 入字符对应的至少两个字符索引对存储在匹配查找单元的移位寄存器的16至23位中的当 前待输入字符和26字节的历史字符中相应的1字节历史字符进行匹配操作,如果当前待输 入字符匹配成功,则继续对下一个当前待输入字符进行匹配,依次类推,直到匹配结束,如 果当前待输入字符匹配失败,则结束匹配;在匹配结束后,得到第一匹配结果。步骤5、如果3字节的待输入字符匹配命中,在第二个周期内,针对当前输入的字 符,发起一次和上述匹配查找并发进行的匹配查找,具体包括匹配查找单元根据字符索引 对匹配查找单元的移位寄存器中存储的当前待输入字符以及当前待输入字符之前的两个 待输入字符和26字节的历史字符中的3字节历史字符再次进行匹配;步骤6、如果再次进行的匹配为命中,在第三个周期内,匹配查找单元获取与当前 待输入字符的后一个待输入字符(第5字符)对应的至少两个字符索引,并根据与后一个 待输入字符对应的至少两个字符索引对存储在匹配查找单元的移位寄存器的16至23位中 的后一个待输入字符和26字节的历史字符中相应的1字节历史字符进行匹配操作,如果 后一个待输入字符匹配成功,则继续对下一个待输入字符进行匹配,依次类推,直到匹配结 束,如果后一个待输入字符匹配失败,则结束匹配;在匹配结束后,得到第二匹配结果。步骤7、比较第一匹配结果和第二匹配结果,确定匹配字符最长的匹配结果并输 出,将另一匹配结果按照不匹配输出;然后重复执行上述步骤3-步骤6,对当前待输入字符 重新发起新的匹配查找。需要说明的是,有关匹配查找单元的相关处理可以参照上述实施例中的相关内容 进行理解,相关的结构示意图可以参照图6至图11进行理解,在此不再赘述。综上所述,借助于本发明的技术方案,本发明实施例采用16个分布式可独立寻址 的RAM,每个RAM存储1KB的历史数据,有两个独立的读端口,每个数据端口位宽是4byte, 极大地提高了读访问的并发性;此外,历史字符是以交叉方式进行存储管理,可以降低因为 数据局部性造成的读冲突。本发明实施例的哈希计算单元使用两套独立的RAM,对每个hash值,保存最近的2个字符索弓I,可以并发读取两个字符索弓丨,提高了处理性能。此外,根据本发明实施例的硬 件实现方法可以同时发起4路匹配查找,并且可以灵活扩展到支持8次及更多的并发匹配 查找,极大提高了数据压缩的处理能力,可以达到CPU无法达到的处理能力。能够提高Lz77 算法的处理效率,极大地节省了 CPU与存储器的资源。本领域普通技术人员可以理解实现上述方法实施例的全部或部分步骤可以通过 程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序 在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者 光盘等各种可以存储程序代码的介质。最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽 管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然 可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替 换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精 神和范围。
权利要求
一种数据匹配方法,其特征在于,包括历史数据存储窗口将待输入字符之前预定字节的历史字符保存在所述历史数据存储窗口的随机存储器中;哈希计算单元计算所述待输入字符的哈希值,根据所述哈希值确定与所述待输入字符对应的字符索引,并将所述字符索引存储在所述哈希计算单元的随机存储器中,其中,所述字符索引为与所述待输入字符对应的历史字符在所述历史数据存储窗口的随机存储器中的位置信息;匹配查找单元获取所述哈希计算单元的随机存储器中的字符索引,并根据所述字符索引对所述待输入字符和所述历史字符进行匹配。
2.根据权利要求1所述的方法,其特征在于,所述历史数据存储窗口的随机存储器为 16个可单独寻址的分布式随机存储器,其中,每个可单独寻址的分布式随机存储器均具有 两个独立的读端口。
3.根据权利要求2所述的方法,其特征在于,所述历史数据存储窗口将待输入字符之 前预定字节的历史字符保存在所述历史数据存储窗口的随机存储器中包括所述历史数据存储窗口从第1个可单独寻址的分布式随机存储器开始,将所述历史字 符顺序放入所述16个可单独寻址的分布式随机存储器中,如果将所述历史字符放入最后1 个可单独寻址的分布式随机存储器后,还存在未放入的历史字符,则将所述未放入的历史 字符从所述第1个可单独寻址的分布式随机存储器开始,再次顺序放入所述16个可单独寻 址的分布式随机存储器,依次循环,直到将所述预定字节的历史字符全部放入所述16个可 单独寻址的分布式随机存储器中为止,其中,每个可单独寻址的分布式随机存储器最多存 储1千字节历史字符。
4.根据权利要求3所述的方法,其特征在于,所述预定字节为16千字节。
5.根据权利要求4所述的方法,其特征在于,所述哈希计算单元将所述字符索引存储 在所述哈希计算单元的随机存储器中包括所述哈希计算单元以所述哈希值为地址,将对应于所述哈希值的至少两个字符索引分 别存储在不同的哈希计算单元的随机存储器中,其中,所述哈希计算单元的随机存储器包 括至少两个随机存储器;如果在所述哈希计算单元的随机存储器中,已经存储以所述哈希值为地址的旧字符索 引,则使用新字符索引替代所述旧字符索引。
6.根据权利要求5所述的方法,其特征在于,所述匹配查找单元获取所述哈希计算单 元的随机存储器中的字符索引之前,所述方法还包括所述哈希计算单元读取所述字符索引,并将所述字符索引发送到所述匹配查找单元。
7.根据权利要求6所述的方法,其特征在于,所述哈希计算单元读取所述哈希计算单 元的随机存储器中的字符索引包括所述哈希计算单元直接从所述哈希计算单元的随机存储器中读取所述字符索引;或者,在所述字符索引还未写入所述哈希计算单元的随机存储器的情况下,直接读取未存储 的所述字符索引。
8.根据权利要求7所述的方法,其特征在于,所述匹配查找单元根据所述字符索引对所述待输入字符和所述历史字符进行匹配包括所述匹配查找单元根据所述字符索引产生并存储所述历史数据存储窗口的读地址;所述匹配查找单元根据所述读地址从所述历史数据存储窗口中的所述16个可单独寻 址的分布式随机存储器中读取并存储32字节的历史字符,并根据所述读地址的低4位从所 述32字节的历史字符中选择并存储有效的26字节的历史字符;在新发起的匹配查找中,所述匹配查找单元根据所述字符索引对所述匹配查找单元的 移位寄存器的低24位中存储的3字节的待输入字符和所述26字节的历史字符中的3字节 历史字符进行匹配;如果所述3字节的待输入字符匹配命中,在第二个周期内,所述匹配查找单元获取与 当前待输入字符对应的至少两个字符索引,并根据与所述当前待输入字符对应的至少两个 字符索引对存储在所述匹配查找单元的移位寄存器的16至23位中的所述当前待输入字符 和所述26字节的历史字符中相应的1字节历史字符进行匹配操作,如果所述当前待输入字 符匹配成功,则继续对下一个当前待输入字符进行匹配,依次类推,直到匹配结束,如果所 述当前待输入字符匹配失败,则结束匹配;在匹配结束后,得到第一匹配结果。
9.根据权利要求8所述的方法,其特征在于,还包括如果所述3字节的待输入字符匹配命中,在所述第二个周期内,所述匹配查找单元根 据所述字符索引对所述匹配查找单元的移位寄存器中存储的所述当前待输入字符以及所 述当前待输入字符之前的两个待输入字符和所述26字节的历史字符中的3字节历史字符 再次进行匹配;如果再次进行的匹配为命中,在第三个周期内,所述匹配查找单元获取与所述当前待 输入字符的后一个待输入字符对应的至少两个字符索引,并根据与所述后一个待输入字符 对应的至少两个字符索引对存储在所述匹配查找单元的移位寄存器的16至23位中的所述 后一个待输入字符和所述26字节的历史字符中相应的1字节历史字符进行匹配操作,如果 所述后一个待输入字符匹配成功,则继续对下一个待输入字符进行匹配,依次类推,直到匹 配结束,如果所述后一个待输入字符匹配失败,则结束匹配;在匹配结束后,得到第二匹配结果。
10.根据权利要求9所述的方法,其特征在于,还包括比较所述第一匹配结果和所述第二匹配结果,确定匹配字符最长的匹配结果并输出, 将另一匹配结果按照不匹配输出。
11.一种数据匹配装置,其特征在于,包括历史数据存储窗口,用于保存待输入字符之前预定字节的历史字符;哈希计算单元,用于计算所述待输入字符的哈希值,根据所述哈希值确定与所述待输 入字符对应的字符索引,并将所述字符索引存储在所述哈希计算单元的随机存储器中,其 中,所述字符索引为与所述待输入字符对应的历史字符在所述历史数据存储窗口的随机存 储器中的位置信息;匹配查找单元,用于获取所述哈希计算单元的随机存储器中的字符索引,并根据所述 字符索引对所述待输入字符和所述历史字符进行匹配。
12.根据权利要求11所述的装置,其特征在于,所述历史数据存储窗口具体包括16个可单独寻址的分布式随机存储器,用于从第1个可单独寻址的分布式随机存储器 开始,顺序存储所述历史字符,如果最后1个可单独寻址的分布式随机存储器存储所述历 史字符后,还存在未存储的历史字符,则从所述第1个可单独寻址的分布式随机存储器开 始,再次顺序存储所述未存储的历史字符,依次循环,直到将所述预定字节的历史字符全部 存储为止,其中,每个可单独寻址的分布式随机存储器最多存储1千字节历史字符。
13.根据权利要求12所述的装置,其特征在于,所述哈希计算单元具体包括 哈希计算模块,用于计算所述待输入字符的哈希值;写管理模块,用于将对应于所述哈希值的至少两个字符索引分别存储在哈希计算单元 的第一随机存储器、哈希计算单元的第二随机存储器中;所述哈希计算单元的第一随机存储器,用于以所述哈希值为地址,存储对应于所述哈 希值的一个字符索引,如果已经存储以所述哈希值为地址的旧字符索引,则使用新字符索 引替代所述旧字符索引;所述哈希计算单元的第二随机存储器,用于以所述哈希值为地址,存储对应于所述哈 希值的另一个字符索引,如果已经存储以所述哈希值为地址的旧字符索引,则使用新字符 索引替代所述旧字符索引;读管理模块,用于直接从所述哈希计算单元的第一随机存储器和所述哈希计算单元的 第二随机存储器中读取所述字符索引;或者,在所述字符索引还未写入所述哈希计算单元 的第一随机存储器和所述哈希计算单元的第二随机存储器的情况下,直接从所述写管理模 块读取未存储的所述字符索引。
14.根据权利要求13所述的装置,其特征在于,匹配查找单元具体包括前端处理单元,用于获取所述哈希计算单元的随机存储器中的字符索引,并根据所述 字符索引对所述待输入字符和所述历史字符进行匹配,并发送匹配结果;后端处理单元,用于接收所述匹配结果,并根据所述匹配结果计算匹配距离、匹配长 度、以及不匹配时输出的字符。
15.根据权利要求14所述的装置,其特征在于,所述前端处理单元具体包括地址管理模块,用于根据所述字符索引产生并存储所述历史数据存储窗口的读地址; 匹配查找单元的移位寄存器,用于存储所述待输入字符;数据选择模块,用于根据所述读地址从所述历史数据存储窗口中的所述16个可单独 寻址的分布式随机存储器中读取并存储32字节的历史字符,并根据所述读地址的低4位从 所述32字节的历史字符中选择并存储有效的26字节的历史字符;查询匹配模块,用于在新发起的匹配查找中,根据所述字符索引对所述匹配查找单元 的移位寄存器的低24位中存储的3字节的待输入字符和所述26字节的历史字符中的3字 节历史字符进行匹配;如果所述3字节的待输入字符匹配命中,在第二个周期内,获取与当 前待输入字符对应的至少两个字符索引,并根据与所述当前待输入字符对应的至少两个字 符索引对存储在所述匹配查找单元的移位寄存器的16至23位中的所述当前待输入字符和 所述26字节的历史字符中相应的1字节历史字符进行匹配操作,如果所述当前待输入字符 匹配成功,则继续对下一个当前待输入字符进行匹配,依次类推,直到匹配结束,如果所述 当前待输入字符匹配失败,则结束匹配;在匹配结束后,得到第一匹配结果。
16.根据权利要求15所述的装置,其特征在于,所述查询匹配模块进一步用于如果所述3字节的待输入字符匹配命中,在所述第二个周期内,根据所述字符索引对 所述匹配查找单元的移位寄存器中存储的所述当前待输入字符以及所述当前待输入字符 之前的两个待输入字符和所述26字节的历史字符中的3字节历史字符再次进行匹配;如果 再次进行的匹配为命中,在第三个周期内,获取与所述当前待输入字符的后一个待输入字 符对应的至少两个字符索引,并根据与所述后一个待输入字符对应的至少两个字符索引对 存储在所述匹配查找单元的移位寄存器的16至23位中的所述后一个待输入字符和所述26 字节的历史字符中相应的1字节历史字符进行匹配操作,如果所述后一个待输入字符匹配 成功,则继续对下一个待输入字符进行匹配,依次类推,直到匹配结束,如果所述后一个待 输入字符匹配失败,则结束匹配;在匹配结束后,得到第二匹配结果。
17.根据权利要求16所述的装置,其特征在于,所述前端处理单元还包括匹配逻辑控制模块,用于比较所述第一匹配结果和所述第二匹配结果,确定匹配字符 最长的匹配结果并输出,将另一匹配结果按照不匹配输出。
18.根据权利要求11至17中任一项所述的装置,其特征在于,所述数据匹配装置基于 可编程门阵列。
全文摘要
本发明提供一种数据匹配方法和数据匹配装置,其中,该方法包括历史数据存储窗口将待输入字符之前预定字节的历史字符保存在历史数据存储窗口的随机存储器中;哈希计算单元计算待输入字符的哈希值,根据哈希值确定与待输入字符对应的字符索引,并将字符索引存储在哈希计算单元的随机存储器中,其中,字符索引为与待输入字符对应的历史字符在历史数据存储窗口的随机存储器中的位置信息;匹配查找单元获取哈希计算单元的随机存储器中的字符索引,并根据字符索引对待输入字符和历史字符进行匹配。通过上述处理,能够提高Lz77算法的处理效率,极大地节省了CPU与存储器的资源。
文档编号G06F17/30GK101996139SQ200910091700
公开日2011年3月30日 申请日期2009年8月28日 优先权日2009年8月28日
发明者刘承辉, 唐会军, 欧阳剑, 盛克华 申请人:百度在线网络技术(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1