一种改进型lz4压缩算法的硬件实现系统的制作方法

文档序号:9455581阅读:884来源:国知局
一种改进型lz4压缩算法的硬件实现系统的制作方法
【技术领域】
[0001] 本发明涉及计算机数据无损压缩技术,尤其涉及一种改进型LZ4压缩算法的硬件 实现系统。
【背景技术】
[0002] 随着计算机和网络技术的飞速发展,互联网每天产生的数据量正呈现爆发增长的 态势,如何存储不断产生的海量数据,如何提高存储器利用效率,正成为存储系统设计者的 一大难题。
[0003] 自两位以色列研究者J. Ziv和A. Lempel在1977年提出了 LZ77压缩算法以来,各 种基于字典匹配的LZ压缩算法的变体相继被提出,其中包括LZ78, LZW,LZO, LZSS等。大部 分基于LZ77的变体被广泛用于文本和位图的无损压缩,其压缩编码的效率可以很大程度 上逼近信源的信息熵值。然而大部分LZ算法及其变体的压缩和解压缩的平均速度仅200~ 600MBps已经不能适应现代计算机设备中动辄IGBps以上的总线带宽。于是提出了一种压 缩解压缩速度远高于目前无损压缩解压缩算法的LZ变体算法一一LZ4。
[0004] LZ4压缩算法的速度优势在于其建立字典的过程中,减少了计算散列值和更新散 列表单元的次数,并且,在输出编码方面采用直接编码的方式,减小了算法输出过程中的延 迟。但正是由于LZ4压缩算法降低散列表更新次数以提高压缩速度的做法,导致LZ4压缩 算法的压缩率会比其他基于LZ变体的压缩算法要差一些。然而,目前所有的对LZ4压缩算 法的评估都是建立在软件实现的基础上,由于CPU架构的限制,并没有体现出LZ4压缩算法 的速度优势,并且,LZ4压缩算法本身有一定的改进空间,以在不显著影响其压缩速度的情 况下提升其压缩率。
[0005] 并且,软件压缩系统会占用大量的CPU资源,且压缩过程是串行执行,处理效率低 下,数据压缩造成的延迟比较大,拖慢了数据访问速度。

【发明内容】

[0006] 本发明所要解决的技术问题在于改进原始的LZ4压缩算法,主要体现在采用全范 围逐字散列的方法,改进了原始LZ4算法中,对匹配字符串内部不进行散列表录入的缺陷。 原始LZ4算法这样设计的原因是由于软件录入散列表的过程会大量消耗cpu资源,所以在 匹配串内部字符不会被录入散列表,而改进型LZ4算法是基于硬件电路优化的,可以将匹 配串内部的字符也录入散列表,这样的做法可以提升LZ4压缩算法的压缩率。使其在不显 著增加额外的延迟的情况下使压缩率有所提升,并且采用硬件电路实现该改进型LZ4压缩 算法。
[0007] 本发明具体采用以下技术方案解决上述技术问题:
[0008] -种改进型LZ4压缩算法的硬件实现系统,通过硬件实现系统实现待压缩文件的 全范围逐字散列的LZ4压缩算法;所述硬件实现系统包括数据输入模块、字符串拼接模块、 滑动字典模块、绝对地址产生模块、地址转换模块、散列表模块以及主控模块;
[0009] 所述数据输入模块用于读取待压缩文件的数据块,并暂存在FIFO中,等待后级模 块的读取;
[0010] 所述字符串拼接模块由两组移位寄存器构成;用于从FIFO中读取待压缩文件中 的数据,并将读入的字符与之前3个字符组合成一个新的4字节字符串对数据进行拼接,等 待所述散列表模块或所述主控模块的数据读取请求;
[0011] 所述滑动字典模块包含用于存储当前的字典以及紧邻字典的数据的存储器;用于 接收所述字符串拼接模块拼接完成的数据,并将其依次存入所述存储器中更新滑动字典;
[0012] 所述绝对地址产生模块包括地址累加电路,用于对文件中的每个字符产生独一无 二的32位绝对地址;
[0013] 所述地址转换模块包含地址减法电路,用于将来自所述绝对地址产生模块产生的 32位绝对地址转换成适用于所述滑动字典模块中的滑动字典寻址的16位相对地址;
[0014] 所述散列表模块包含一个用于存储散列表数据的存储器和一个用于计算散列地 址的逻辑运算电路;用于在更新过程中从所述字符串拼接模块中读取拼接好的4字节字符 串,并通过逻辑运算电路计算字符串的散列地址,将该4字节字符串对应的在数据块中的 绝对首地址存入存储器中散列地址对应的存储单元中;
[0015] 所述主控模块用于接收所述字符串拼接模块的4字节字符串作为当前字符串,并 将其发送给散列表模块计算散列地址;读取散列表中对应散列地址中的内容,并根据散列 表中对应散列地址中的内容根据所述地址转换模块转换的相对地址读取滑动字典模块中 的4字节字符串,并与当前字符串比对,输出匹配信息与未匹配信息。
[0016] 所述滑动字典模块包含一个位宽32bit,深度32KB,总容量128KB的存储器,用于 存储当前的64KB字典以及紧邻字典的数据,用地址指针调度的方式实现滑动的功能。
[0017] 所述散列地址的计算过程为用32位二进制值乘以0~232之间的黄金分割系数, 然后保留第31位到第17位,得到15位散列地址。
[0018] 所述通过硬件实现系统实现待压缩文件的全范围逐字散列的LZ4压缩算法包括 以下步骤:
[0019] 步骤1、初始化散列表和滑动字典,所有散列表存储单元内容全部初始化成0,滑 动字典初始化首地址和尾地址重合;
[0020] 步骤2、从待压缩文件中读入4字节字符串,计算该字符串散列地址,并将该字符 串在文件中的绝对首地址存入散列表中该字符串散列地址的对应单元;在读入过程中,将 所述字符串存入滑动字典中;
[0021] 步骤3、从待压缩文件中读入一个后续字符,将读入的字符与之前3个字符组合成 一个新的4字节字符串并计算其散列地址;在读入过程中,将所述字符存入滑动字典中直 至滑动字典达到设定大小并不断进行更新;
[0022] 步骤4、利用散列表查找滑动字典中是否存在新的4字节字符串的匹配字符串,如 果有匹配,则跳至步骤5,并保存当前字符串的散列映射关系;如果没有匹配,则返回步骤 3,同时计算匹配距离,且无匹配字符串长度加1并输出无匹配字符;
[0023] 步骤5、从待压缩文件中读入一个后续字符,读入过程中将读入的字符与之前3个 字符组合成一个新的4字节字符串,计算其散列地址并将散列映射关系保存至散列表中; 从滑动字典中读出步骤3的匹配字符串的后续字符;将读入的字符与该后续字符作比较, 如果匹配,那么重复本步骤;否则计算匹配字符串长度,返回步骤4 ;
[0024] 步骤6、将步骤4和步骤5得到的无匹配字符串长度、无匹配字符串、匹配字符串长 度以及匹配距离编码成压缩后的数据格式,输出到压缩目标文件中;同时,判断待压缩文件 是否结束,如果未结束,则返回步骤3 ;如果已结束,则结束压缩过程。
[0025] 所述步骤3中滑动字典的设定大小为64KB。
[0026] 所述步骤6中的编码:假设在扫描待处理区域字符的过程中,通过散列表找到了 在滑动字典中的匹配串,并且获得了匹配串的首地址,则该匹配串长度为N,用当前处理字 符的地址减去匹配串首地址得到有匹配字符串相对于滑动字典中的匹配串的偏移量0,用 当前处理字符的地址减去滑动字典尾地址即无匹配字符串长度M ;如果M和N均小于等于 15,则将M和N拼接成一个8位编码,其中M和N各占用4位;如果M超过15,则增加一个 8位编码的无匹配串长度的附加字节来表示多出的计数值;如果N超过15,则增加一个有匹 配串长度附加字节来表示多出的计数值;然后将M个无匹配字符直接输出到编码中,最后 输出16位的有匹配字符串的偏移量0以及可选的无匹配串长度附加位。
[0027] 相比现有技术,本发明具有以下有益效果:
[0028] 本发明设计了一种压缩速度高于现有的LZ系列无损压缩算法,采用全范围逐字 散列的方法,改进了原始LZ4算法中,对匹配字符串内部不进行散列表录入的缺陷。使其在 不显著增加额外的延迟的情况下使压缩率有所提升,并且采用硬件电路实现该改进型LZ4 压缩算法。该算法适用于对压缩速度和处理带宽要求很高的场合,并且保证压缩率不劣于 现有压缩算法;
[0029] 本发明采用全硬件实现该压缩算法,相比较软件实现的方式,硬件电路可以同时 处理压缩过程中的多个步骤,压缩过程造成的延时更低,处理性能更强,并且硬件实现的压 缩系统可以有效的降低数据中心服务器的CPU载荷。更有利于本发明算法的运行。
【附图说明】
[0030] 图1为本发明的一种改进型LZ4压缩算法流程图;
[0031] 图2为本发明的一种改进型LZ4压缩算法的数据处理过程示意图;
[0032] 图3为本发明的一种改进
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1