数据匹配方法和数据匹配装置.pdf

上传人:Y94****206 文档编号:967059 上传时间:2018-03-22 格式:PDF 页数:23 大小:769.82KB
返回 下载 相关 举报
摘要
申请专利号:

CN200910091700.5

申请日:

2009.08.28

公开号:

CN101996139A

公开日:

2011.03.30

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 12/06申请日:20090828|||公开

IPC分类号:

G06F12/06; G06F17/30; H03M7/30

主分类号:

G06F12/06

申请人:

百度在线网络技术(北京)有限公司

发明人:

欧阳剑; 刘承辉; 盛克华; 唐会军

地址:

100080 北京市海淀区北四环西路58号理想国际大厦12层

优先权:

专利代理机构:

北京同立钧成知识产权代理有限公司 11205

代理人:

张红莲

PDF下载: PDF下载
内容摘要

本发明提供一种数据匹配方法和数据匹配装置,其中,该方法包括:历史数据存储窗口将待输入字符之前预定字节的历史字符保存在历史数据存储窗口的随机存储器中;哈希计算单元计算待输入字符的哈希值,根据哈希值确定与待输入字符对应的字符索引,并将字符索引存储在哈希计算单元的随机存储器中,其中,字符索引为与待输入字符对应的历史字符在历史数据存储窗口的随机存储器中的位置信息;匹配查找单元获取哈希计算单元的随机存储器中的字符索引,并根据字符索引对待输入字符和历史字符进行匹配。通过上述处理,能够提高Lz77算法的处理效率,极大地节省了CPU与存储器的资源。

权利要求书

1: 一种数据匹配方法, 其特征在于, 包括 : 历史数据存储窗口将待输入字符之前预定字节的历史字符保存在所述历史数据存储 窗口的随机存储器中 ; 哈希计算单元计算所述待输入字符的哈希值, 根据所述哈希值确定与所述待输入字符 对应的字符索引, 并将所述字符索引存储在所述哈希计算单元的随机存储器中, 其中, 所述 字符索引为与所述待输入字符对应的历史字符在所述历史数据存储窗口的随机存储器中 的位置信息 ; 匹配查找单元获取所述哈希计算单元的随机存储器中的字符索引, 并根据所述字符索 引对所述待输入字符和所述历史字符进行匹配。
2: 根据权利要求 1 所述的方法, 其特征在于, 所述历史数据存储窗口的随机存储器为 16 个可单独寻址的分布式随机存储器, 其中, 每个可单独寻址的分布式随机存储器均具有 两个独立的读端口。
3: 根据权利要求 2 所述的方法, 其特征在于, 所述历史数据存储窗口将待输入字符之 前预定字节的历史字符保存在所述历史数据存储窗口的随机存储器中包括 : 所述历史数据存储窗口从第 1 个可单独寻址的分布式随机存储器开始, 将所述历史字 符顺序放入所述 16 个可单独寻址的分布式随机存储器中, 如果将所述历史字符放入最后 1 个可单独寻址的分布式随机存储器后, 还存在未放入的历史字符, 则将所述未放入的历史 字符从所述第 1 个可单独寻址的分布式随机存储器开始, 再次顺序放入所述 16 个可单独寻 址的分布式随机存储器, 依次循环, 直到将所述预定字节的历史字符全部放入所述 16 个可 单独寻址的分布式随机存储器中为止, 其中, 每个可单独寻址的分布式随机存储器最多存 储 1 千字节历史字符。
4: 根据权利要求 3 所述的方法, 其特征在于, 所述预定字节为 16 千字节。
5: 根据权利要求 4 所述的方法, 其特征在于, 所述哈希计算单元将所述字符索引存储 在所述哈希计算单元的随机存储器中包括 : 所述哈希计算单元以所述哈希值为地址, 将对应于所述哈希值的至少两个字符索引分 别存储在不同的哈希计算单元的随机存储器中, 其中, 所述哈希计算单元的随机存储器包 括至少两个随机存储器 ; 如果在所述哈希计算单元的随机存储器中, 已经存储以所述哈希值为地址的旧字符索 引, 则使用新字符索引替代所述旧字符索引。
6: 根据权利要求 5 所述的方法, 其特征在于, 所述匹配查找单元获取所述哈希计算单 元的随机存储器中的字符索引之前, 所述方法还包括 : 所述哈希计算单元读取所述字符索引, 并将所述字符索引发送到所述匹配查找单元。
7: 根据权利要求 6 所述的方法, 其特征在于, 所述哈希计算单元读取所述哈希计算单 元的随机存储器中的字符索引包括 : 所述哈希计算单元直接从所述哈希计算单元的随机存储器中读取所述字符索引 ; 或 者, 在所述字符索引还未写入所述哈希计算单元的随机存储器的情况下, 直接读取未存储 的所述字符索引。
8: 根据权利要求 7 所述的方法, 其特征在于, 所述匹配查找单元根据所述字符索引对 2 所述待输入字符和所述历史字符进行匹配包括 : 所述匹配查找单元根据所述字符索引产生并存储所述历史数据存储窗口的读地址 ; 所述匹配查找单元根据所述读地址从所述历史数据存储窗口中的所述 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 所述的装置, 3 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 所述的装置, 其特征在于, 所述查询匹配模块进一步用于 : 4 如果所述 3 字节的待输入字符匹配命中, 在所述第二个周期内, 根据所述字符索引对 所述匹配查找单元的移位寄存器中存储的所述当前待输入字符以及所述当前待输入字符 之前的两个待输入字符和所述 26 字节的历史字符中的 3 字节历史字符再次进行匹配 ; 如果 再次进行的匹配为命中, 在第三个周期内, 获取与所述当前待输入字符的后一个待输入字 符对应的至少两个字符索引, 并根据与所述后一个待输入字符对应的至少两个字符索引对 存储在所述匹配查找单元的移位寄存器的 16 至 23 位中的所述后一个待输入字符和所述 26 字节的历史字符中相应的 1 字节历史字符进行匹配操作, 如果所述后一个待输入字符匹配 成功, 则继续对下一个待输入字符进行匹配, 依次类推, 直到匹配结束, 如果所述后一个待 输入字符匹配失败, 则结束匹配 ; 在匹配结束后, 得到第二匹配结果。
17: 根据权利要求 16 所述的装置, 其特征在于, 所述前端处理单元还包括 : 匹配逻辑控制模块, 用于比较所述第一匹配结果和所述第二匹配结果, 确定匹配字符 最长的匹配结果并输出, 将另一匹配结果按照不匹配输出。
18: 根据权利要求 11 至 17 中任一项所述的装置, 其特征在于, 所述数据匹配装置基于 可编程门阵列。

说明书


数据匹配方法和数据匹配装置

    【技术领域】
     本发明实施例涉及数据压缩技术领域, 尤其涉及一种数据匹配方法和数据匹配装置。 背景技术 目前, 为了减少数据需要的存储介质, 提高数据传输效率, 数据压缩在互联网、 数 据库、 存储应用中应用非常广泛, 包括数据库应用、 数据备份、 压缩文件系统、 网页 (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 对压缩率影响仅在 1%左右, 非常之小。
     为了对待输入字符进行流式处理、 以及多个匹配查找并发进行, 本发明实施例的 历史数据存储窗口 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-71B 的历史字符存储在第而 RAM 中。
     三、 历史数据存储窗口 10 的数据端口由 1Byte 变成 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 匹配是指当前 待输入字符的匹配查找完成后并不马上输出, 而是等下一个待输入字符的匹配完成后, 比 较这两个匹配结果, 选择最长的匹配输出, 另外一个字符按照不匹配输出。 对于每个待输入 字符, 从 hash2lookup 模块读取两个匹配字符索引, 然后发起 2 路匹配查找, 对于下一 cycle 输入的字符, 同样从哈希计算单元 12 读取两个匹配字符索引, 如果前一字符匹配命中, 则发起 2 路 lazzy 匹配查找, 因此, 系统最多同时共有 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 的数据, 在匹配过程中, 在检测哈希匹配及检测懒惰匹配单元中, 每个周期只需要比 较 1byte 数据, 如果匹配的长度大于 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, 利用较少的硬件资源实现 lz77 算法, 最终的压缩率和软件实现方法非常接近, 但每个 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
     个字符索引, 可以并发读取两个字符索引, 提高了处理性能。此外, 根据本发明实施例的硬 件实现方法可以同时发起 4 路匹配查找, 并且可以灵活扩展到支持 8 次及更多的并发匹配 查找, 极大提高了数据压缩的处理能力, 可以达到 CPU 无法达到的处理能力。 能够提高 Lz77 算法的处理效率, 极大地节省了 CPU 与存储器的资源。
     本领域普通技术人员可以理解 : 实现上述方法实施例的全部或部分步骤可以通过 程序指令相关的硬件来完成, 前述的程序可以存储于一计算机可读取存储介质中, 该程序 在执行时, 执行包括上述方法实施例的步骤 ; 而前述的存储介质包括 : ROM、 RAM、 磁碟或者 光盘等各种可以存储程序代码的介质。
     最后应说明的是 : 以上实施例仅用以说明本发明的技术方案, 而非对其限制 ; 尽 管参照前述实施例对本发明进行了详细的说明, 本领域的普通技术人员应当理解 : 其依然 可以对前述各实施例所记载的技术方案进行修改, 或者对其中部分技术特征进行等同替 换; 而这些修改或者替换, 并不使相应技术方案的本质脱离本发明各实施例技术方案的精 神和范围。

数据匹配方法和数据匹配装置.pdf_第1页
第1页 / 共23页
数据匹配方法和数据匹配装置.pdf_第2页
第2页 / 共23页
数据匹配方法和数据匹配装置.pdf_第3页
第3页 / 共23页
点击查看更多>>
资源描述

《数据匹配方法和数据匹配装置.pdf》由会员分享,可在线阅读,更多相关《数据匹配方法和数据匹配装置.pdf(23页珍藏版)》请在专利查询网上搜索。

1、10申请公布号CN101996139A43申请公布日20110330CN101996139ACN101996139A21申请号200910091700522申请日20090828G06F12/06200601G06F17/30200601H03M7/3020060171申请人百度在线网络技术北京有限公司地址100080北京市海淀区北四环西路58号理想国际大厦12层72发明人欧阳剑刘承辉盛克华唐会军74专利代理机构北京同立钧成知识产权代理有限公司11205代理人张红莲54发明名称数据匹配方法和数据匹配装置57摘要本发明提供一种数据匹配方法和数据匹配装置,其中,该方法包括历史数据存储窗口将待输入字。

2、符之前预定字节的历史字符保存在历史数据存储窗口的随机存储器中;哈希计算单元计算待输入字符的哈希值,根据哈希值确定与待输入字符对应的字符索引,并将字符索引存储在哈希计算单元的随机存储器中,其中,字符索引为与待输入字符对应的历史字符在历史数据存储窗口的随机存储器中的位置信息;匹配查找单元获取哈希计算单元的随机存储器中的字符索引,并根据字符索引对待输入字符和历史字符进行匹配。通过上述处理,能够提高LZ77算法的处理效率,极大地节省了CPU与存储器的资源。51INTCL19中华人民共和国国家知识产权局12发明专利申请权利要求书4页说明书9页附图9页CN101996144A1/4页21一种数据匹配方法,。

3、其特征在于,包括历史数据存储窗口将待输入字符之前预定字节的历史字符保存在所述历史数据存储窗口的随机存储器中;哈希计算单元计算所述待输入字符的哈希值,根据所述哈希值确定与所述待输入字符对应的字符索引,并将所述字符索引存储在所述哈希计算单元的随机存储器中,其中,所述字符索引为与所述待输入字符对应的历史字符在所述历史数据存储窗口的随机存储器中的位置信息;匹配查找单元获取所述哈希计算单元的随机存储器中的字符索引,并根据所述字符索引对所述待输入字符和所述历史字符进行匹配。2根据权利要求1所述的方法,其特征在于,所述历史数据存储窗口的随机存储器为16个可单独寻址的分布式随机存储器,其中,每个可单独寻址的分。

4、布式随机存储器均具有两个独立的读端口。3根据权利要求2所述的方法,其特征在于,所述历史数据存储窗口将待输入字符之前预定字节的历史字符保存在所述历史数据存储窗口的随机存储器中包括所述历史数据存储窗口从第1个可单独寻址的分布式随机存储器开始,将所述历史字符顺序放入所述16个可单独寻址的分布式随机存储器中,如果将所述历史字符放入最后1个可单独寻址的分布式随机存储器后,还存在未放入的历史字符,则将所述未放入的历史字符从所述第1个可单独寻址的分布式随机存储器开始,再次顺序放入所述16个可单独寻址的分布式随机存储器,依次循环,直到将所述预定字节的历史字符全部放入所述16个可单独寻址的分布式随机存储器中为止。

5、,其中,每个可单独寻址的分布式随机存储器最多存储1千字节历史字符。4根据权利要求3所述的方法,其特征在于,所述预定字节为16千字节。5根据权利要求4所述的方法,其特征在于,所述哈希计算单元将所述字符索引存储在所述哈希计算单元的随机存储器中包括所述哈希计算单元以所述哈希值为地址,将对应于所述哈希值的至少两个字符索引分别存储在不同的哈希计算单元的随机存储器中,其中,所述哈希计算单元的随机存储器包括至少两个随机存储器;如果在所述哈希计算单元的随机存储器中,已经存储以所述哈希值为地址的旧字符索引,则使用新字符索引替代所述旧字符索引。6根据权利要求5所述的方法,其特征在于,所述匹配查找单元获取所述哈希计。

6、算单元的随机存储器中的字符索引之前,所述方法还包括所述哈希计算单元读取所述字符索引,并将所述字符索引发送到所述匹配查找单元。7根据权利要求6所述的方法,其特征在于,所述哈希计算单元读取所述哈希计算单元的随机存储器中的字符索引包括所述哈希计算单元直接从所述哈希计算单元的随机存储器中读取所述字符索引;或者,在所述字符索引还未写入所述哈希计算单元的随机存储器的情况下,直接读取未存储的所述字符索引。8根据权利要求7所述的方法,其特征在于,所述匹配查找单元根据所述字符索引对权利要求书CN101996139ACN101996144A2/4页3所述待输入字符和所述历史字符进行匹配包括所述匹配查找单元根据所述。

7、字符索引产生并存储所述历史数据存储窗口的读地址;所述匹配查找单元根据所述读地址从所述历史数据存储窗口中的所述16个可单独寻址的分布式随机存储器中读取并存储32字节的历史字符,并根据所述读地址的低4位从所述32字节的历史字符中选择并存储有效的26字节的历史字符;在新发起的匹配查找中,所述匹配查找单元根据所述字符索引对所述匹配查找单元的移位寄存器的低24位中存储的3字节的待输入字符和所述26字节的历史字符中的3字节历史字符进行匹配;如果所述3字节的待输入字符匹配命中,在第二个周期内,所述匹配查找单元获取与当前待输入字符对应的至少两个字符索引,并根据与所述当前待输入字符对应的至少两个字符索引对存储在。

8、所述匹配查找单元的移位寄存器的16至23位中的所述当前待输入字符和所述26字节的历史字符中相应的1字节历史字符进行匹配操作,如果所述当前待输入字符匹配成功,则继续对下一个当前待输入字符进行匹配,依次类推,直到匹配结束,如果所述当前待输入字符匹配失败,则结束匹配;在匹配结束后,得到第一匹配结果。9根据权利要求8所述的方法,其特征在于,还包括如果所述3字节的待输入字符匹配命中,在所述第二个周期内,所述匹配查找单元根据所述字符索引对所述匹配查找单元的移位寄存器中存储的所述当前待输入字符以及所述当前待输入字符之前的两个待输入字符和所述26字节的历史字符中的3字节历史字符再次进行匹配;如果再次进行的匹配。

9、为命中,在第三个周期内,所述匹配查找单元获取与所述当前待输入字符的后一个待输入字符对应的至少两个字符索引,并根据与所述后一个待输入字符对应的至少两个字符索引对存储在所述匹配查找单元的移位寄存器的16至23位中的所述后一个待输入字符和所述26字节的历史字符中相应的1字节历史字符进行匹配操作,如果所述后一个待输入字符匹配成功,则继续对下一个待输入字符进行匹配,依次类推,直到匹配结束,如果所述后一个待输入字符匹配失败,则结束匹配;在匹配结束后,得到第二匹配结果。10根据权利要求9所述的方法,其特征在于,还包括比较所述第一匹配结果和所述第二匹配结果,确定匹配字符最长的匹配结果并输出,将另一匹配结果按照。

10、不匹配输出。11一种数据匹配装置,其特征在于,包括历史数据存储窗口,用于保存待输入字符之前预定字节的历史字符;哈希计算单元,用于计算所述待输入字符的哈希值,根据所述哈希值确定与所述待输入字符对应的字符索引,并将所述字符索引存储在所述哈希计算单元的随机存储器中,其中,所述字符索引为与所述待输入字符对应的历史字符在所述历史数据存储窗口的随机存储器中的位置信息;匹配查找单元,用于获取所述哈希计算单元的随机存储器中的字符索引,并根据所述字符索引对所述待输入字符和所述历史字符进行匹配。12根据权利要求11所述的装置,其特征在于,所述历史数据存储窗口具体包括权利要求书CN101996139ACN10199。

11、6144A3/4页416个可单独寻址的分布式随机存储器,用于从第1个可单独寻址的分布式随机存储器开始,顺序存储所述历史字符,如果最后1个可单独寻址的分布式随机存储器存储所述历史字符后,还存在未存储的历史字符,则从所述第1个可单独寻址的分布式随机存储器开始,再次顺序存储所述未存储的历史字符,依次循环,直到将所述预定字节的历史字符全部存储为止,其中,每个可单独寻址的分布式随机存储器最多存储1千字节历史字符。13根据权利要求12所述的装置,其特征在于,所述哈希计算单元具体包括哈希计算模块,用于计算所述待输入字符的哈希值;写管理模块,用于将对应于所述哈希值的至少两个字符索引分别存储在哈希计算单元的第一。

12、随机存储器、哈希计算单元的第二随机存储器中;所述哈希计算单元的第一随机存储器,用于以所述哈希值为地址,存储对应于所述哈希值的一个字符索引,如果已经存储以所述哈希值为地址的旧字符索引,则使用新字符索引替代所述旧字符索引;所述哈希计算单元的第二随机存储器,用于以所述哈希值为地址,存储对应于所述哈希值的另一个字符索引,如果已经存储以所述哈希值为地址的旧字符索引,则使用新字符索引替代所述旧字符索引;读管理模块,用于直接从所述哈希计算单元的第一随机存储器和所述哈希计算单元的第二随机存储器中读取所述字符索引;或者,在所述字符索引还未写入所述哈希计算单元的第一随机存储器和所述哈希计算单元的第二随机存储器的情。

13、况下,直接从所述写管理模块读取未存储的所述字符索引。14根据权利要求13所述的装置,其特征在于,匹配查找单元具体包括前端处理单元,用于获取所述哈希计算单元的随机存储器中的字符索引,并根据所述字符索引对所述待输入字符和所述历史字符进行匹配,并发送匹配结果;后端处理单元,用于接收所述匹配结果,并根据所述匹配结果计算匹配距离、匹配长度、以及不匹配时输出的字符。15根据权利要求14所述的装置,其特征在于,所述前端处理单元具体包括地址管理模块,用于根据所述字符索引产生并存储所述历史数据存储窗口的读地址;匹配查找单元的移位寄存器,用于存储所述待输入字符;数据选择模块,用于根据所述读地址从所述历史数据存储窗。

14、口中的所述16个可单独寻址的分布式随机存储器中读取并存储32字节的历史字符,并根据所述读地址的低4位从所述32字节的历史字符中选择并存储有效的26字节的历史字符;查询匹配模块,用于在新发起的匹配查找中,根据所述字符索引对所述匹配查找单元的移位寄存器的低24位中存储的3字节的待输入字符和所述26字节的历史字符中的3字节历史字符进行匹配;如果所述3字节的待输入字符匹配命中,在第二个周期内,获取与当前待输入字符对应的至少两个字符索引,并根据与所述当前待输入字符对应的至少两个字符索引对存储在所述匹配查找单元的移位寄存器的16至23位中的所述当前待输入字符和所述26字节的历史字符中相应的1字节历史字符进。

15、行匹配操作,如果所述当前待输入字符匹配成功,则继续对下一个当前待输入字符进行匹配,依次类推,直到匹配结束,如果所述当前待输入字符匹配失败,则结束匹配;在匹配结束后,得到第一匹配结果。16根据权利要求15所述的装置,其特征在于,所述查询匹配模块进一步用于权利要求书CN101996139ACN101996144A4/4页5如果所述3字节的待输入字符匹配命中,在所述第二个周期内,根据所述字符索引对所述匹配查找单元的移位寄存器中存储的所述当前待输入字符以及所述当前待输入字符之前的两个待输入字符和所述26字节的历史字符中的3字节历史字符再次进行匹配;如果再次进行的匹配为命中,在第三个周期内,获取与所述当。

16、前待输入字符的后一个待输入字符对应的至少两个字符索引,并根据与所述后一个待输入字符对应的至少两个字符索引对存储在所述匹配查找单元的移位寄存器的16至23位中的所述后一个待输入字符和所述26字节的历史字符中相应的1字节历史字符进行匹配操作,如果所述后一个待输入字符匹配成功,则继续对下一个待输入字符进行匹配,依次类推,直到匹配结束,如果所述后一个待输入字符匹配失败,则结束匹配;在匹配结束后,得到第二匹配结果。17根据权利要求16所述的装置,其特征在于,所述前端处理单元还包括匹配逻辑控制模块,用于比较所述第一匹配结果和所述第二匹配结果,确定匹配字符最长的匹配结果并输出,将另一匹配结果按照不匹配输出。。

17、18根据权利要求11至17中任一项所述的装置,其特征在于,所述数据匹配装置基于可编程门阵列。权利要求书CN101996139ACN101996144A1/9页6数据匹配方法和数据匹配装置技术领域0001本发明实施例涉及数据压缩技术领域,尤其涉及一种数据匹配方法和数据匹配装置。背景技术0002目前,为了减少数据需要的存储介质,提高数据传输效率,数据压缩在互联网、数据库、存储应用中应用非常广泛,包括数据库应用、数据备份、压缩文件系统、网页WEB前端服务等。其中,GZIP压缩算法是目前应用最广泛的一种压缩算法,例如,在WEB服务器软件例如,APACHE、IIS上使用GZIP对网页进行压缩,从而提高访。

18、问响应速度。0003在相关技术中,GZIP压缩算法包括两部分LZ77算法与哈夫曼HUFFMAN编码。LZ77算法通过对原始数据进行去冗余处理以达到压缩的目的。该算法的软件实现方法是在一个数据窗口内该数据窗口的大小一般为32KB,不断的迭代寻找最佳的匹配数据串进而消除冗余,并依赖中央处理器CENTRALPROCESSINGUNIT;以下简称CPU对数据进行压缩。0004在匹配查找过程中,为了快速向前定位可能匹配的数据,对每个比特BYTE的待输入字符,会计算一个HASH值,如果两个字符的HASH值相同,则可能存在匹配。在目前的实现方法中,会用一个链表数据结构保存所有HASH值相同的字符索引,对每个。

19、输入字符,首先计算其HASH值,然后使用HASH值寻址到对应的链表,依次把字符索引取出进行匹配查找,最后会把当前字符的索引插入链表供后面字符的匹配查找使用。0005在实现本发明过程中,发明人发现现有技术中至少存在如下问题0006使用软件对LZ77算法进行串行处理的效率非常低,并且消耗大量的CPU与存储器MEMORY资源,成为软件实现LZ77算法的性能瓶颈。发明内容0007本发明实施例提供一种数据匹配方法和数据匹配装置,用以解决现有技术中使用软件对LZ77算法进行串行处理的效率低、且消耗大量的CPU与存储器资源的缺陷,实现通过基于可编程门阵列的硬件来实现LZ77算法。0008本发明实施例提供一种。

20、数据匹配方法,包括0009历史数据存储窗口将待输入字符之前预定字节的历史字符保存在历史数据存储窗口的随机存储器中;哈希计算单元计算待输入字符的哈希值,根据哈希值确定与待输入字符对应的字符索引,并将字符索引存储在哈希计算单元的随机存储器中,其中,字符索引为与待输入字符对应的历史字符在历史数据存储窗口的随机存储器中的位置信息;匹配查找单元获取哈希计算单元的随机存储器中的字符索引,并根据字符索引对待输入字符和历史字符进行匹配。0010本发明实施例还提供一种数据匹配装置,包括0011历史数据存储窗口,用于保存待输入字符之前预定字节的历史字符;哈希计算单说明书CN101996139ACN10199614。

21、4A2/9页7元,用于计算待输入字符的哈希值,根据哈希值确定与待输入字符对应的字符索引,并将字符索引存储在哈希计算单元的随机存储器中,其中,字符索引为与待输入字符对应的历史字符在历史数据存储窗口的随机存储器中的位置信息;匹配查找单元,用于获取哈希计算单元的随机存储器中的字符索引,并根据字符索引对待输入字符和历史字符进行匹配。0012本发明实施例的数据匹配方法和数据匹配装置,通过基于可编程门阵列的硬件来实现LZ77算法,克服了现有技术中使用软件对LZ77算法进行串行处理的效率低、且消耗大量的CPU与存储器资源的缺陷,能够提高LZ77算法的处理效率,极大地节省了CPU与存储器的资源。附图说明001。

22、3为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。0014图1是根据本发明实施例的数据匹配装置的结构示意图;0015图2是根据本发明实施例的历史数据存储窗口分布式存储结构的示意图;0016图3是根据本发明实施例的交叉存储方式的示意图;0017图4是根据本发明实施例的哈希计算单元的随机存储器的结构示意图;0018图5是根据本发明实施例的哈希计算单元的结构示意图;0019图6是根据本发明实施例。

23、的匹配查找单元的结构示意图;0020图7是根据本发明实施例的前端处理单元的结构示意图;0021图8是根据本发明实施例的地址管理模块的结构示意图;0022图9是根据本发明实施例的数据选择模块的结构示意图;0023图10是根据本发明实施例的查询匹配模块的结构示意图;0024图11是根据本发明实施例的后端处理单元的结构示意图;0025图12是根据本发明实施例的数据匹配方法的流程图。具体实施方式0026根据本发明的实施例,LZ77算法的硬件实现可以基于专用集成电路APPLICATIONSPECIFICINTEGRATEDCIRCUIT;以下简称ASIC是或现场可编程门阵列FIELDPROGRAMMAB。

24、LEGATEARRAY;以下简称FPGA。其中,基于ASIC的方法因为一次投入高,开发周期长,最终产品不灵活等缺点,不太适合产品更新换代快、需求灵活多变的互联网应用。基于FPGA的方法一次投入适中,开发周期短,产品灵活可编程,因此在本发明实施例中,采用基于低端低成本FPGA的硬件来实现LZ77算法。0027下面结合附图和具体实施例进一步说明本发明实施例的技术方案。0028根据本发明的实施例,提供了一种数据匹配装置,图1是根据本发明实施例的数据匹配装置的结构示意图,如图1所示,根据本发明实施例的数据匹配装置包括历史数据存储窗口10、哈希HASH计算单元12、匹配查找单元14。下面,对上述各个模块。

25、进行详细的说明。说明书CN101996139ACN101996144A3/9页80029历史数据存储窗口10用于保存待输入字符之前预定字节的历史字符,在本发明的实施例中,优选地,上述预定字节为16千字节。0030具体地,LZ77算法需要定义一个历史数据存储窗口,其大小一般为32KB,当前待输入字符会在这个历史数据存储窗口里面查找匹配。在基于低端低成本FPGA的解决方案中,因为片内受随机存储器RANDOMACCESSMEMORY;以下简称RAM资源的限制,所以将历史数据存储窗口10的大小设置为16KB,虽然历史数据存储窗口10的大小变成了16KB,但是,16KB的历史数据存储窗口10对压缩率影响。

26、仅在1左右,非常之小。0031为了对待输入字符进行流式处理、以及多个匹配查找并发进行,本发明实施例的历史数据存储窗口10对历史字符的存储做了如下优化0032一、在多路进行匹配查找时,每个周期内有多个读请求访问历史数据存储窗口10,因此,必须采用新的存储结构来避免读冲突,在本发明实施例中,采用分布式的RAM结构,每个RAM可以独立寻址,并且具有两个独立的读端口。在本发明的实施例中,如图2所示,16KB的历史数据存储窗口采用16个独立的RAM存储历史字符,包括第一RAM21、第二RAM22、第十六RAM216,每个RAM存储1KB的历史字符,这样每个周期CYCLE可以支持32个并发的读访问。003。

27、3二、为了打破数据局部性,降低多个读操作同时访问同一个RAM的概率,本发明实施例采用交叉INTERLEAVE的方式存储历史字符,可以提高RAM的使用效率。0034具体地,输入的字符最有可能与最近的1KB之内的历史字符匹配,这会导致在匹配查找过程中,大部分的读访问集中在这1KB的数据,存储这1KB数据的RAM因为读端口不足而导致无法读取数据。采用交叉存储方式,把数据均匀分布存储在各个RAM里面,消除了数据局部性,使每个RAM的负载均衡。其中,如图3所示,交叉存储方式具体包括从第1个可单独寻址的分布式随机存储器开始,顺序存储历史字符,如果最后1个可单独寻址的分布式随机存储器存储历史字符后,还存在未。

28、存储的历史字符,则从第1个可单独寻址的分布式随机存储器开始,再次顺序存储所述未存储的历史字符,依次循环,直到将所述预定字节的历史字符全部存储为止。例如,将03B的历史字符存储在第一RAM中,将47B的历史字符存储在第二RAM中,将6063B的历史字符存储在第十六RAM中,将6467B的历史字符存储在第一RAM中,将6871B的历史字符存储在第而RAM中。0035三、历史数据存储窗口10的数据端口由1BYTE变成4BYTE,并且每个周期会从4个RAM里面读取共16BYTE的数据,这样可以使读请求的次数降低到原来的1/16。0036从上述的描述可以看出,与现有技术中采用32KB的历史数据存储窗口,。

29、历史字符按照正常顺序存储,同一时刻只能读取一个历史字符相比,本发明实施例的基于FPGA的硬件虽然资源受到限制,只能使用16KB的历史数据窗口,但是,本发明实施例采用16个分布式可独立寻址的RAM,每个RAM存储1KB的历史数据,有两个独立的读端口,每个数据端口位宽是4BYTE,极大地提高了读访问的并发性;此外,历史字符是以交叉方式进行存储管理,可以降低因为数据局部性造成的读冲突。0037哈希计算单元12,用于计算待输入字符的哈希值,根据待输入字符的哈希值确定与待输入字符对应的字符索引,并将字符索引存储在哈希计算单元的随机存储器中,其中,字符索引为与待输入字符对应的历史字符在历史数据存储窗口的随。

30、机存储器中的位置信息。说明书CN101996139ACN101996144A4/9页90038具体地,为了在一个周期内把HASH值相同的字符索引取出来,提高匹配处理的并发性,因此必须使用新的存储结构代替链表。本发明实施例把对应于同一个HASH值的字符索引存储在不同的RAM里面,每个RAM可以用HASH值作为地址去存储和读取匹配字符索引。如图4所示,在本发明实施例的低端FPGA中,由于受到片内RAM资源的限制,对于每个HASH值,在哈希计算单元的第一随机存储器41和哈希计算单元的第二随机存储器42中分别保存2个最近的字符索引,从而保证每个周期可以读取2个字符索引。在实际应用中,该结构可以灵活扩展。

31、到保存更多个字符索引。对于每个待输入字符,哈希计算单元12先计算其HASH值,并用HASH值作为地址访问哈希计算单元的第一随机存储器与哈希计算单元的第二随机存储器,读取有效的字符索引,然后把当前字符索引写到HASH值对应的存储位置,如果哈希计算单元的第一随机存储器与哈希计算单元的第二随机存储器已经存储两个有效的字符索引,则使用新字符索引替代旧字符索引。0039根据本发明的实施例,哈希计算单元12中除哈希计算单元的第一随机存储器41和哈希计算单元的第二随机存储器42外,如图5所示,还包括如下模块哈希计算模块51、写管理模块52、读管理模块53、字符索引过滤模块54。0040其中,哈希计算模块51。

32、用于计算待输入字符的哈希值;随后,将计算的哈希值发送到写管理模块52,写管理模块52将对应于哈希值的至少两个字符索引分别存储在哈希计算单元的第一随机存储器41和哈希计算单元的第二随机存储器42中;0041随后,读管理模块53就可以直接从哈希计算单元的第一随机存储器41和哈希计算单元的第二随机存储器42中读取字符索引;在字符索引还未写入哈希计算单元的第一随机存储器41和哈希计算单元的第二随机存储器42的情况下,读管理模块53还可以直接从写管理模块读取未存储的字符索引。具体地,因为RAM的写操作要2个周期才能生效,如果在这两个周期内需要读取待写入的数据,读管理模块53则从写管理模块52的缓存中直接。

33、读取字符索引。最后,字符索引过滤模块54将读管理模块53输出的无效的地址进行过滤并输出。其中,上述的无效地址是指偏移量超过历史数据窗口的地址等。0042从上述描述可以看出,相对于现有技术中使用链表来存储和管理字符索引,本发明实施例使用两套独立的RAM,对每个HASH值,保存最近的2个字符索引,可以并发读取两个甚至多个字符索引,提高了处理性能。0043匹配查找单元14,用于获取哈希计算单元12的随机存储器即,哈希计算单元的第一随机存储器41和哈希计算单元的第二随机存储器42中的字符索引,并根据字符索引对待输入字符和历史字符进行匹配。0044具体地,如图6所示,匹配查找单元14包括前端处理单元60。

34、、后端处理单元62,其中,前端处理单元60用于获取哈希计算单元的随机存储器中的字符索引,并根据获取的字符索引对待输入字符和历史字符进行匹配,并发送匹配结果;后端处理单元62用于接收匹配结果,并根据匹配结果计算匹配距离、匹配长度、以及不匹配时输出的字符。0045具体地,为了提高压缩率,匹配查找单元14支持LAZZY匹配。LAZZY匹配是指当前待输入字符的匹配查找完成后并不马上输出,而是等下一个待输入字符的匹配完成后,比较这两个匹配结果,选择最长的匹配输出,另外一个字符按照不匹配输出。对于每个待输入字符,从HASH2LOOKUP模块读取两个匹配字符索引,然后发起2路匹配查找,对于下一CYCLE输入。

35、的字符,同样从哈希计算单元12读取两个匹配字符索引,如果前一字符匹配命中,则说明书CN101996139ACN101996144A5/9页10发起2路LAZZY匹配查找,因此,系统最多同时共有4路匹配查找在同时进行。前端处理单元60把4路匹配查找的信息发送给后端处理单元62,后端处理单元62负责计算每路匹配查找的匹配距离,匹配长度,和不匹配时要输出的字符。0046下面,对前端处理单元60的结构进行详细说明,如图7所示,前端处理单元60包括地址管理模块70、匹配查找单元的移位寄存器71、数据选择模块72、查询匹配模块73、匹配逻辑控制模块74。下面,对上述各个模块分别进行说明。0047具体地,如。

36、图8所示,地址管理模块70主要用于根据字符索引产生并存储历史数据存储窗口10的读地址;因为历史数据窗口由16个独立的RAM构成,每个RAM两个读端口,因此共需要管理32个读地址。在没有匹配的时候,读地址来自哈希计算单元12的两个字符索引,匹配过程中读地址是上一次读地址加上偏移量。由于历史字符从历史数据存储窗口10读回来时,需要根据读地址对历史字符进行裁剪选择TRUNCATE,所以读地址必须寄存直到历史字符返回。0048匹配查找单元的移位寄存器71用于存储待输入字符;具体地,匹配查找单元的移位寄存器71采用一个40BIT移位寄存器寄存待输入字符,每发起一次新的匹配查找,匹配查找单元的移位寄存器7。

37、1的低24BIT3BYTE和来自历史数据窗口的3BYTE字符进行比较,如果相同,则这次匹配命中。在匹配命中后,每个周期使用匹配查找单元的移位寄存器71的1623BIT和来自历史数据窗口的一个BYTE数据比较以判断匹配是否在持续。0049数据选择模块72用于根据读地址从历史数据存储窗口中的16个可单独寻址的分布式随机存储器中读取并存储32字节的历史字符,并根据读地址的低4位从32字节的历史字符中选择并存储有效的26字节的历史字符;0050具体地,如图9所示,数据选择模块72从历史数据窗口的16个分布式RAM的32个读端口中选择2路有效的32BYTE历史字符,每路是16BYTE,这16BYTE数据。

38、里面只有13BYTE在当次匹配中是用到的,因此数据剪裁单元还会根据读地址的低4BIT来选取有效的13BYTE数据,用来进行匹配查找。移位单元把已经匹配过的字符向右移走,保证字符数据寄存器里面的数据都是没有使用过的。0051查询匹配模块73,用于在新发起的匹配查找中,根据字符索引对匹配查找单元的移位寄存器的低24位中存储的3字节的待输入字符和26字节的历史字符中的3字节历史字符进行匹配;如果3字节的待输入字符匹配命中,则意味着一次新的匹配查找开始在第二个周期内,获取与当前待输入字符对应的至少两个字符索引,并根据与当前待输入字符对应的至少两个字符索引对存储在匹配查找单元的移位寄存器的16至23位中。

39、的当前待输入字符和26字节的历史字符中相应的1字节历史字符进行匹配操作,如果当前待输入字符匹配成功,则继续对下一个当前待输入字符进行匹配,依次类推,直到匹配结束,如果当前待输入字符匹配失败,则结束匹配;在匹配结束后,得到第一匹配结果。0052也就是说,如图10所示,查询匹配模块73通过比较来自匹配查找单元的移位寄存器71和数据选择模块72的数据,以判断什么时候产生新的匹配,当前匹配什么时候结束等。判断一个新匹配的开始时,在检测新哈希匹配及检测新懒惰匹配单元中,需要同时比较3BYTE的数据,在匹配过程中,在检测哈希匹配及检测懒惰匹配单元中,每个周期只需要比较1BYTE数据,如果匹配的长度大于25。

40、5、遇到文件末尾、或者新输入的字符与来自历史字符窗口的数据不相等,则当前匹配结束。说明书CN101996139ACN101996144A6/9页110053查询匹配模块73还用于如果3字节的待输入字符匹配命中,在第二个周期内,针对当前待输入字符,发起一次和上述匹配查找并发进行的匹配查找,具体为根据字符索引对匹配查找单元的移位寄存器中存储的当前待输入字符以及当前待输入字符之前的两个待输入字符和26字节的历史字符中的3字节历史字符再次进行匹配;如果再次进行的匹配为命中,在第三个周期内,获取与当前待输入字符的后一个待输入字符对应的至少两个字符索引,并根据与后一个待输入字符对应的至少两个字符索引对存储。

41、在匹配查找单元的移位寄存器的16至23位中的后一个待输入字符和26字节的历史字符中相应的1字节历史字符进行匹配操作,如果后一个待输入字符匹配成功,则继续对下一个待输入字符进行匹配,依次类推,直到匹配结束,如果后一个待输入字符匹配失败,则结束匹配;在匹配结束后,得到第二匹配结果。0054通过上述处理,在匹配过程中,最多有4路匹配查找在同时进行,4路并发匹配查找意味着可能有4次读请求同时访问一个RAM,但每个保存历史数据的RAM只有2个读端口,这就导致了结构冒险。为了解决这个问题,匹配查找单元每次读请求会读取13BYTE数据,因此后面至少有10个周期不需要读取新数据,因此4次读请求可以错开发送,消。

42、除了读冲突。0055匹配逻辑控制模块74用于比较第一匹配结果和第二匹配结果,确定匹配字符最长的匹配结果并输出,将另一匹配结果按照不匹配输出。在将匹配结果输出后,针对当前待输入字符重新发起上述过程的匹配查找。0056此外,匹配逻辑控制模块还用于产生整个模块的控制信号和异常处理。0057前端处理单元60经过上述处理后,就会将匹配结果发送到后端处理单元62,后端处理单元62的结构示意图如图11所示,后端处理单元62的计算哈希匹配0的匹配长度及距离单元、计算哈希匹配1的匹配长度及距离单元、计算懒惰匹配0的匹配长度及距离单元、计算懒惰匹配1的匹配长度及距离单元根据前端的输出计算每个匹配的长度,距离和不匹。

43、配时该输出的字符,其中,上述四个单元由匹配查找有限状态机控制,最终输出不匹配的字符输出、哈希匹配输出、懒惰匹配输出,上述三个输出经过多路选择后,随后,由多路选择在4路匹配中选择匹配最长的一路输出包括字符、匹配长度、匹配距离。0058从上述描述可以看出,相对于现有技术在查找匹配过程中每次只发起一路匹配查找,各个匹配查找串行完成来说,根据本发明实施例的硬件实现方法可以同时发起4路匹配查找,可以极大提高处理能力。需要说明的是,目前实现的硬件支持4次并发匹配查找,但硬件构架可以灵活扩展到支持8次及更多的并发匹配查找。0059在实际的应用中,可以将本发明实施例的技术方案应用于各种需要进行数据压缩的应用环。

44、境中,例如,透明压缩文件系统用于对应用程序做完全透明的压缩和解压,并且能够选择性地使用软件压缩方式和硬件压缩方式。将本发明实施例的数据匹配装置应用于该透明压缩文件系统中,在该透明压缩文件系统高负载情况下能够节省3040的CPU使用率,并使其写性能具有非常明显的优势。通过使用本发明实施例的数据匹配装置,避免了数据压缩时对系统CPU的消耗,进而改善了系统的整体性能。数据经该压缩文件系统的压缩后,能够节约超过50的磁盘存储容量。此外,在实际应用中,还可以通过修改网页服务器软件中的ZLIB库,使用硬件压缩的方式取代软件压缩方式,并将本发明实施例的技术方案应用于网页服务器软件,能够极大提高系统每秒处理页。

45、面请求的数目。说明书CN101996139ACN101996144A7/9页120060通过上述处理,本发明实施例基于低端低成本的FPGA,利用较少的硬件资源实现LZ77算法,最终的压缩率和软件实现方法非常接近,但每个FPGA的处理带宽是软件压缩方式的2倍多,且每秒处理事务的能力是单个CPU的6倍,可以达到CPU无法达到的处理能力。0061以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施。

46、例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。0062根据本发明的实施例,提供了一种数据匹配方法,图12是根据本发明实施例的数据匹配方法的流程图,如图12所示,根据本发明实施例的数据匹配方法包括0063步骤1201,历史数据存储窗口将待输入字符之前预定字节的历史字符保存在历史数据存储窗口的随机存储器中;其中,历史数据存储窗口的随机存储器为16个可单独寻址的分布式随机存储器,每个可单独寻址的分布式随机存储器均具有两个独立的读端口;此外,在本发明实施例中,优选地,上述预定字节为16千字节。需要说明的是,历史数据存储窗口的处理可以参照上述装置实施中相应的内容进行理解。

47、,其结构示意图可以参照图2进行理解,在此不再赘述。0064在步骤1201中,历史数据存储窗口将待输入字符之前预定字节的历史字符保存在历史数据存储窗口的随机存储器中的处理具体包括0065历史数据存储窗口从第1个可单独寻址的分布式随机存储器开始,将历史字符顺序放入16个可单独寻址的分布式随机存储器中,如果将历史字符放入最后1个可单独寻址的分布式随机存储器后,还存在未放入的历史字符,则将未放入的历史字符从第1个可单独寻址的分布式随机存储器开始,再次顺序放入16个可单独寻址的分布式随机存储器,依次循环,直到将预定字节的历史字符全部放入16个可单独寻址的分布式随机存储器中为止,其中,每个可单独寻址的分布。

48、式随机存储器最多存储1千字节历史字符。上述过程可以参照图3进行理解。0066步骤1202,哈希计算单元计算待输入字符的哈希值,根据哈希值确定与待输入字符对应的字符索引,并将字符索引存储在哈希计算单元的随机存储器中,其中,字符索引为与待输入字符对应的历史字符在历史数据存储窗口的随机存储器中的位置信息;0067具体地,在步骤1202中,哈希计算单元将字符索引存储在哈希计算单元的随机存储器中的处理具体包括0068哈希计算单元以哈希值为地址,将对应于哈希值的至少两个字符索引分别存储在不同的哈希计算单元的随机存储器中,其中,哈希计算单元的随机存储器包括至少两个随机存储器;如果在哈希计算单元的随机存储器中。

49、,已经存储以哈希值为地址的旧字符索引,则使用新字符索引替代旧字符索引。0069有关哈希计算单元的相关处理可以参照上述实施例中的相关内容进行理解,相关的结构示意图可以参照图4、图5进行理解,在此不再赘述。0070随后,哈希计算单元读取字符索引,并将字符索引发送到匹配查找单元。在实际应用中,哈希计算单元可以直接从哈希计算单元的随机存储器中读取字符索引;在字符索引还未写入哈希计算单元的随机存储器的情况下,哈希计算单元也可以直接读取未存储的字说明书CN101996139ACN101996144A8/9页13符索引。0071步骤1203,匹配查找单元获取哈希计算单元的随机存储器中的字符索引,并根据字符索引对待输入字符和历史字符进行匹配。0072在步骤1203中,匹配查找单元根据字符索引对待输入字符和历史字符进行匹配的具体处理包括0073步骤1、匹配查找单元根据字符索引产生并存储历史数据存储窗口的读地址;0074步骤2、匹配查找单元根据读地址从历史数据存储窗口中的16个可单独寻址的分布式随机存储器中读取并存储32字节的历史字符,并根据读地址的低4位从32字节的历史字符中选择并存储有效的26字节的历史字符;0075步骤3、在新发起的匹配查找中,匹配查找单元根据字符索引对匹配查找单元的移位寄存器的低24位中存储的3字节第1、2、3个待输入字符的待输入字符和26字节的历史字符中的3字节历史。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1