CN110334066A - 一种基于FPGA的Gzip解压缩方法、装置及系统 - Google Patents
一种基于FPGA的Gzip解压缩方法、装置及系统 Download PDFInfo
- Publication number
- CN110334066A CN110334066A CN201910384799.1A CN201910384799A CN110334066A CN 110334066 A CN110334066 A CN 110334066A CN 201910384799 A CN201910384799 A CN 201910384799A CN 110334066 A CN110334066 A CN 110334066A
- Authority
- CN
- China
- Prior art keywords
- data block
- data
- fpga
- decompressed
- current
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
- G06F16/1744—Redundancy elimination performed by the file system using compression, e.g. sparse files
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明公开了一种基于FPGA的Gzip解压缩方法、装置、系统及服务器,包括:处理器对获取的Gzip压缩文件中压缩数据块中的数据块头进行解析,确定压缩数据块的编码模式;若编码模式为动态Huffman(霍夫曼)编码模式,则将每个待解压数据块和各自对应的动态霍夫曼码表和数据块信息发送到FPGA,以利用FPGA对待解压数据块进行并行解码;本发明通过CPU+FPGA联合实现Gzip解压缩,利用FPGA根据处理器解析得到的霍夫曼码表,对待解压数据块进行并行解码,提升了Gzip解压缩的性能,降低了处理器的利用率;并且处理器采用范式霍夫曼编码模式生成动态霍夫曼码表,减少了所需的码表量,进一步提高了解码速度。
Description
技术领域
本发明涉及数据压缩领域,特别涉及一种基于FPGA的Gzip解压缩方法、装置、系统及服务器。
背景技术
随着信息技术的进步和互联网行业的迅猛发展,人们每天都在产生大量的数据信息,大数据时代已经来临。超大规模的数据量对数据存储和网络传输带宽带来了很大的挑战,因此在有限的硬件资源条件下进行数据压缩十分有必要。数据压缩可以分为有损压缩和无损压缩两种方式。有损压缩会造成一定程度的数据失真,解压后不能将原来的数据完成重构。无损压缩则是无失真的压缩,只是在压缩过程中去除数据的冗余度,解压后可以将数据完全恢复。对于文本资料、用户数据、应用程序等的压缩,往往都要求无损压缩方式。
Gzip是一种通用的实时无损数据压缩方法,Gzip压缩方法应用的是Deflate无损压缩算法,是基于两种无损压缩算法—LZ77算法和Huffman算法的组合;Gzip解压缩方法则是利用的是Inflate解压算法:LZ77解压缩和Huffman解压缩算法的组合。
目前Gzip压缩作为互联网大规模数据处理的重要手段,不仅可以节省硬件存储资源,还可以大幅提高网络传输带宽。然而,目前服务器上大多利用软件实现Gzip压缩和解压缩算法,这样的实现方式存在两个缺陷:一是CPU(处理器)利用率会很高,影响服务器上的其他程序的运行;二是解压缩算法中要求反复进行查表和内存读写操作,用CPU实现只能串行进行,导致执行效率低,解压缩性能不高。
因此,如何能够在提升Gzip解压缩的性能,降低Gzip解压缩过程中处理器的利用率,是现今急需解决的问题。
发明内容
本发明的目的是提供一种基于FPGA的Gzip解压缩方法、装置、系统及服务器,以利用FPGA(Field-Programmable Gate Array,现场可编程门阵列)对提高Gzip解压缩的速率,提升Gzip解压缩的性能,降低Gzip解压缩过程中处理器的利用率。
为解决上述技术问题,本发明提供一种基于FPGA的Gzip解压缩方法,包括:
处理器对获取的Gzip压缩文件中压缩数据块中的数据块头进行解析,确定所述压缩数据块的编码模式;其中,所述编码模式包括存储模式、静态Huffman编码模式和动态Huffman编码模式;
若所述编码模式为所述静态Huffman编码模式,则获取所述数据块头对应的一个静态Huffman码表,并将所述压缩数据块中的待解压数据块和各自对应的数据块信息及所述静态Huffman码表发送到FPGA,以利用FPGA对所述待解压数据块进行并行解码;其中,所述数据块信息包括数据块大小信息和偏移量;
若所述编码模式为所述动态Huffman编码模式,则生成每个所述待解压数据块各自对应的动态Huffman码表,并将每个所述待解压数据块和各自对应的动态Huffman码表和数据块信息发送到所述FPGA,以利用所述FPGA对所述待解压数据块进行并行解码。
可选的,所述确定所述压缩数据块的编码模式之后,还包括:
若所述编码模式为存储模式,则将所述待解压数据块输出到解压文件。
可选的,所述生成每个所述待解压数据块各自对应的动态Huffman码表,并将每个所述待解压数据块和各自对应的动态Huffman码表和数据块信息发送到所述FPGA,包括:
根据当前压缩数据块中的当前数据块头,生成当前数据块头对应的当前动态Huffman码表;
将当前动态Huffman码表、当前压缩数据块中的当前待解压数据块和对应的当前数据块信息发送到存储器;其中,所述存储器和所述FPGA均设置在FPGA加速卡上;
对应的,所述将当前动态Huffman码表、当前压缩数据块中的当前待解压数据块和对应的当前数据块信息发送到存储器之后,还包括:
所述FPGA利用当前数据块信息和当前动态Huffman码表,对当前待解压数据块进行并行解码,并将解码得到的当前解码数据发送到所述存储器。
可选的,所述将解码得到的当前解码数据发送到所述存储器之后,还包括:
FPGA判断当前待解压数据块是否为最后一个所述待解压数据块;
若否,则处理器将下一压缩数据块作为当前压缩数据块,执行所述根据当前压缩数据块中的当前数据块头,生成当前数据块头对应的当前动态Huffman码表的步骤。
可选的,该方法还包括:
所述FPGA根据每个所述待解压数据块各自对应的数据块信息和动态Huffman码表或所述静态Huffman码表,对每个所述待解压数据块进行并行Huffman解码,获取解码输出数据和对应的数据信息;其中,所述数据信息包括有效数据个数及结束标志;
根据所述数据信息,确定所述解码输出数据中的有效数据,并对所述有效数据进行LZ77解码,获取每个所述待解压数据块对应的解压数据块。
可选的,所述FPGA根据每个所述待解压数据块各自对应的数据块信息和动态Huffman码表或所述静态Huffman码表,对每个所述待解压数据块进行并行Huffman解码,获取解码输出数据和对应的数据信息,包括:
所述FPGA利用第一内核根据当前数据块信息和当前动态Huffman码表或所述静态Huffman码表,对当前待解压数据块的bit数据流中8个相邻的起始位置进行并行解码,获取当前解码输出数据和对应的当前数据信息;
利用第二内核根据当前数据信息,确定当前解码输出数据中的当前有效数据,并依次将当前有效数据输出到第三内核;其中,所述第二内核每次向所述第三内核输出的当前有效数据的个数小于或等于2;
利用所述第三内核对输入的当前有效数据进行LZ77解码,获取对应的当前解压数据。
可选的,所述利用所述第三内核对输入的当前有效数据进行LZ77解码,获取对应的解压数据,包括:
若所述第二内核输入的当前有效数据为字符,则将当前有效数据作为当前解压数据,输出到FPGA加速卡上的存储器,并更新预设缓冲区;
若所述第二内核输入的当前有效数据为长度+距离,则从预设缓冲区存储的最新已输出的解压数据中复制所述长度的字符串作为当前解压数据,输出到FPGA加速卡上的存储器,并更新预设缓冲区;其中,所述字符串的复制起始点在当前输出位置前的所述距离处,所述预设缓冲区的容量大于或等于所述距离的最大值。
本发明还提供了一种基于FPGA的Gzip解压缩装置,包括:
数据头解析模块,用于对获取的Gzip压缩文件中压缩数据块中的数据块头进行解析,确定所述压缩数据块的编码模式;其中,所述编码模式包括存储模式、静态Huffman编码模式和动态Huffman编码模式;
获取发送模块,用于若所述编码模式为所述静态Huffman编码模式,则获取所述数据块头对应的一个静态Huffman码表,并将所述压缩数据块中的待解压数据块和各自对应的数据块信息及所述静态Huffman码表发送到FPGA,以利用FPGA对所述待解压数据块进行并行解码;其中,所述数据块信息包括数据块大小信息和偏移量;
生成发送模块,用于若所述编码模式为所述动态Huffman编码模式,则生成每个所述待解压数据块各自对应的动态Huffman码表,并将每个所述待解压数据块和各自对应的动态Huffman码表和数据块信息发送到所述FPGA,以利用所述FPGA对所述待解压数据块进行并行解码。
本发明还提供了一种服务器,包括存储器及处理器,所述存储器中储存有计算机程序,所述处理器执行所述存储器中的计算机程序时实现如上述所述的基于FPGA的Gzip解压缩方法的步骤。
本发明还提供了一种基于FPGA的Gzip解压缩系统,包括:
如上一项所述的服务器和与所述服务器连接的FPGA加速卡;其中,所述FPGA加速卡上设置有FPGA和存储器。
本发明所提供的一种基于FPGA的Gzip解压缩方法,包括:
处理器对获取的Gzip压缩文件中压缩数据块中的数据块头进行解析,确定所述压缩数据块的编码模式;其中,所述编码模式包括存储模式、静态Huffman编码模式和动态Huffman编码模式;若所述编码模式为所述静态Huffman编码模式,则获取所述数据块头对应的一个静态Huffman码表,并将所述压缩数据块中的待解压数据块和各自对应的数据块信息及所述静态Huffman码表发送到FPGA,以利用FPGA对所述待解压数据块进行并行解码;其中,所述数据块信息包括数据块大小信息和偏移量;若所述编码模式为所述动态Huffman编码模式,则生成每个所述待解压数据块各自对应的动态Huffman码表,并将每个所述待解压数据块和各自对应的动态Huffman码表和数据块信息发送到所述FPGA,以利用所述FPGA对所述待解压数据块进行并行解码;
可见,本发明通过CPU+FPGA联合实现Gzip解压缩,利用FPGA根据处理器对数据块头解析得到的Huffman码表及数据块信息,对待解压数据块进行并行解码,提升了Gzip解压缩的性能,降低了处理器的利用率;并且处理器采用范式Huffman编码模式生成动态Huffman码表,减少了所需的码表量,进一步提高了解码速度。此外,本发明还提供了一种基于FPGA的Gzip解压缩装置、系统及服务器,同样具有上述有益效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例所提供的一种基于FPGA的Gzip解压缩方法的流程图;
图2为本发明实施例所提供的另一种基于FPGA的Gzip解压缩方法的流程图;
图3为本发明实施例所提供的一种基于FPGA的Gzip解压缩系统的结构示意图;
图4为本发明实施例所提供的另一种基于FPGA的Gzip解压缩方法中的解码流程示意图;
图5为本发明实施例所提供的一种基于FPGA的Gzip解压缩装置的结构框图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参考图1,图1为本发明实施例所提供的一种基于FPGA的Gzip解压缩方法的流程图。该方法可以包括:
步骤101:处理器对获取的Gzip压缩文件中压缩数据块中的数据块头进行解析,确定压缩数据块的编码模式;其中,编码模式包括存储模式、静态Huffman编码模式和动态Huffman编码模式。
可以理解的是,本步骤的目的可以为服务器中的处理器通过对Gzip压缩文件中压缩数据块中的数据块头进行解析,确定压缩数据块的编码模式,即确定压缩数据块中的待解压数据块采用哪种Huffman编码模式,从而采用对应的方式进行解码,实现Gzip压缩文件的解压缩。如图2所示,压缩数据块的编码模式为存储模式(00)时,可以直接将待解压数据块输出到解压文件;编码模式为静态Huffman编码模式(01)时,此时所有的待解压数据块解码所需的Huffman码表是固定的,只需向FPGA传输一次码表(静态Huffman码表)即可;编码模式为动态Huffman编码模式(10)时,此时可以根据每个数据块头生成对应的Huffman码表(动态Huffman编码),在向FPGA传输待解压数据块的同时,也可将对应的Huffman码表和数据块信息传输给FPGA。
对应的,本步骤之前还可以包括Gzip压缩文件的确定过程,如处理器可以对获取的待解压文件的文件头进行解析,判断待解压文件是否为Gzip压缩文件;若是,则进入本步骤,以实现对待解压文件(Gzip压缩文件)的解压缩;若否,则通过其他方法对待解压文件进行解压缩。也就是说,由于Gzip压缩文件可以包括以下三部分:文件头、压缩数据块和文件尾,其中文件头定义了gzip文件的标识符、压缩算法种类、时间戳、操作系统等信息,因此处理器可以通过对待解压文件的文件头的解析,确定待解压文件是否采用Gzip压缩,从而确定是否为Gzip压缩文件。
具体的,由于文件头和数据块头的解析操作运算量小,但是运算过程复杂,本实施例中选用处理器完成对文件头和数据块头的解析。
需要说明的是,对于本步骤中处理器对获取的Gzip压缩文件中压缩数据块中的数据块头进行解析,确定压缩数据块的编码模式的具体方式,可以由设计人员根据实用场景和用户需求自行设置,由于Gzip压缩文件中全部压缩数据块的编码模式相同,本步骤中处理器可以对Gzip压缩文件中任一压缩数据块的数据块头进行解析,确定全部压缩数据块的编码模式,如处理器可以仅对Gzip压缩文件中第一个需要解码的压缩数据块的数据块头进行解析,不需要对Gzip压缩文件中之后其他的压缩数据块的数据块头进行解析。只要处理器可以确定Gzip压缩文件中每个压缩数据块的编码模式,本实施例对此不受任何限制。
具体的,对于压缩数据块的编码模式为存储模式的情况,可以由设计人员自行设置,如可以采用与现有技术中存储模式的解码方法相同或相似的方式实现,可以由处理器将压缩数据块中的待解压数据块直接或经过一定处理输出到解压文件,实现Gzip压缩文件的解压;处理器可以将压缩数据块中的待解压数据块发送到FPGA,由FPGA将压缩数据块中的待解压数据块直接或经过一定处理输出到解压文件,实现Gzip压缩文件的解压。本实施例对此不做任何限制。
步骤102:若编码模式为静态Huffman编码模式,则获取数据块头对应的一个静态Huffman码表,并将压缩数据块中的待解压数据块和各自对应的数据块信息及静态Huffman码表发送到FPGA,以利用FPGA对待解压数据块进行并行解码;其中,数据块信息包括数据块大小信息和偏移量。
可以理解的是,本步骤的目的可以为在压缩数据块的编码模式为静态Huffman编码模式时,处理器通过获取全部压缩数据块的数据块头均对应的一个固定的静态Huffman码表,并将该静态Huffman码表与待解压数据块及各自对应的数据块信息发送到FPGA,使FPGA可以利用该静态Huffman码表和数据块信息,对每个待解压数据块进行并行解码。
对应的,对于本步骤中处理器获取全部数据块头均对应的一个静态Huffman码表的具体方式,可以由设计人员自行设置,如处理器在确定Gzip压缩文件中压缩数据块的编码模式为静态Huffman编码模式后,可以直接读取预先存储的静态Huffman码表,也可以从利用网络下载静态Huffman码表,还可以根据数据块头生成静态Huffman码表。只要处理器可以获取全部数据块头均对应的一个静态Huffman码表,本实施例对此不受任何限制。
具体的,本步骤中每个待解压数据块各自对应的数据块信息可以为FPGA对待解压数据块进行并行解码时所需要的信息,如数据块信息可以包括用于告知解码有效的起始位置的偏移量,及用于控制一个待解压数据块解码结束的数据块大小信息。对应的,对于数据块信息的具体获取过程,可以由设计人员自行设置,如可以采用与现有技术相同或相似的方式实现,本实施例对此不受任何限制。
需要说明的是,对于本步骤中处理器将压缩数据块中的待解压数据块和各自对应的数据块信息及静态Huffman码表发送到FPGA的具体方式,可以由设计人员根据实用场景和用户需求自行设置,如处理器和FPGA加速卡上的FPGA之间的数据交互均通过读写FPGA加速卡上的存储器(如DDR,双倍速率同步动态随机存储器)来实现时,处理器可以将上述数据发送到该存储器;如图3所示,服务器中的处理器(CPU)可以通过PCIe接口将上述数据发送到FPGA加速卡上的DDR。只要FPGA可以获取处理器发送的上述数据,本实施例对此不做任何限制。
具体的,对于本步骤中处理器将压缩数据块中的待解压数据块和各自对应的数据块信息及静态Huffman码表发送到FPGA的具体过程,可以由设计人员自行设置,如为了避免FPGA加速卡中存储器上的资源浪费,处理器每次仅向该存储器传输预设数量(如1个)的待解压数据块,且在FPGA将该存储器中的待解压数据块解码完成后再进行下一次发送;如预设数量为1时,处理器可以在第一次向该存储器传输一个当前待解压数据块和对应的当前数据块信息的同时,传输静态Huffman码表;并在FPGA将当前待解压数据块解码完成后再向该存储器传输下一待解压数据块和对应的下一数据块信息。只要FPGA可以获取Gzip压缩文件中全部待解压数据块和各自对应的数据块信息及静态Huffman码表,实现对全部待解压数据块的并行解码,本实施例对此不受任何限制。
可以理解的是,本实施例所提供的方法还可以包括FPGA利用静态Huffman码表和数据块信息,对每个待解压数据块进行并行解码步骤。对于非存储模式(静态Huffman编码模式和动态Huffman编码模式)的待解压数据块,解压缩过程分为Huffman解码和LZ77解码两步。Huffman压缩有两种模式,对于静态Huffman压缩模式,解压缩较为简单,通过已定义好的静态Huffman码表进行解码即可;对于动态Huffman压缩模式,传统的动态Huffman解码时需要重建动态Huffman树,二叉树大量占用内存、编解码速度慢,本实施例中采用范式Huffman编码模式生成动态Huffman码表进行解码,需要的码表量大大减小,解码速度也能提高。
对应的,本实施例还可以包括:FPGA根据每个待解压数据块各自对应的数据块信息和静态Huffman码表,对每个待解压数据块进行并行Huffman解码,获取解码输出数据和对应的数据信息;其中,数据信息包括有效数据个数及结束标志;根据数据信息,确定解码输出数据中的有效数据,并对有效数据进行LZ77解码,获取每个待解压数据块对应的解压数据块。
具体的,FPGA中Huffman解码过程采取并行解码,如针对输入的bit数据流,可以对8个相邻的起始位置进行并行解码,因此一次解码能够输出8个结果(解码输出数据)。Huffman解码后的解码输出数据分为三种,字符(literal)、距离(distance)和长度(length),距离和长度永远是联合出现的。因此,Huffman解码的输出只有两种,字符(literal)或距离长度对(length+distance)。利用并行解码方式,可以大大提高解码速度,提高Huffman解压缩性能。
进行并行Huffman解码时,得出8个结果中,很可能会解出无效结果,实际输出结果有效数量为0-8。因此,需要将无效结果滤除,将有效结果输出给LZ77解码模块进行解码。
FPGA中LZ77解码过程相对简单,对于literal,直接将其输出即可;对于length+distance,需要从已输出的数据流中复制长度为length的字符串到输出数据流,复制字符串的起点为当前输出位置前的distance处。distance的最大值可以为32768,因此还可以设置一个32768大小的length缓冲区(预设缓冲区),存储解码输出数据流。每次将有效数据写出到输出数据流的同时还需要更新length缓冲区中。
进一步的,本实施例中可以基于OpenCL(Open Computing Language,开放式计算语言)语言或其他语言(如硬件描述语言HDL),在FPGA中设置三个内核(kernel)完成Huffman解码和LZ77解码。即FPGA可以利用第一内核根据当前数据块信息和静态Huffman码表,对当前待解压数据块的bit数据流中8个相邻的起始位置进行并行解码,获取当前解码输出数据和对应的当前数据信息;利用第二内核根据当前数据信息,确定当前解码输出数据中的当前有效数据,并依次将当前有效数据输出到第三内核;其中,第二内核每次向第三内核输出的当前有效数据的个数小于或等于2;利用第三内核对输入的当前有效数据进行LZ77解码,获取对应的当前解压数据。
具体的,如图2至图4所示,kernel_1(第一内核,Huffman_decode)从DDR读出静态Huffman码表、压缩数据流(bit数据流)、数据块大小信息和初始解码偏移量进行并行Huffman解码,kernel_1每执行一次完成一个待解压数据块的Huffman解压缩,还可以将已消耗bit数量信息再写回给DDR,同时通过channel(通道)将解码输出数据传输给kernel_2(第二内核,LZ77_buffer),同时传输的还有有效数据个数及结束标志;
kernel_2完成Huffman解码输出数据筛选整理,每次最多输出两个数据结果,一共包含三种情况,1个literal,2个literal或者length+distance,通过channel将结果传输给kernel_3(第三内核,LZ77_decode);
kernel_3主要完成LZ77解码工作,在每次执行开始时,可以先从DDR读入32768大小的缓冲区数据(解压数据),用于后续length+distance的解码。由于每次只接收最多2个解码输出数据,因此只需要判定是处理literal还是length+distance。判定为literal时,可以直接将数据写出到输出数据流(解压数据)。判定为length+distance,则根据length的大小,每次并行地解码出8个字符,直到length长度字符复制完毕。这样有利于实现流水线操作,进而提高解码速率。
也就是说,若第二内核输入的当前有效数据为字符,则将当前有效数据作为当前解压数据,输出到FPGA加速卡上的存储器,并更新预设缓冲区;若第二内核输入的当前有效数据为长度+距离,则从预设缓冲区存储的最新已输出的解压数据中复制长度的字符串作为当前解压数据,输出到FPGA加速卡上的存储器,并更新预设缓冲区;其中,字符串的复制起始点在当前输出位置前的距离处,预设缓冲区的容量大于或等于距离的最大值。
步骤103:若编码模式为动态Huffman编码模式,则生成每个待解压数据块各自对应的动态Huffman码表,并将每个待解压数据块和各自对应的动态Huffman码表和数据块信息发送到FPGA,以利用FPGA对待解压数据块进行并行解码。
可以理解的是,本步骤的目的可以为在压缩数据块的编码模式为动态Huffman编码模式时,处理器通过生成每个压缩数据块的数据块头各自对应的动态Huffman码表,并将待解压数据块和各自对应的数据块信息及动态Huffman码表发送到FPGA,使FPGA可以利用对应的动态Huffman码表和数据块信息,对每个待解压数据块进行并行解码。
对应的,对于本步骤中处理器生成每个数据块头各自对应的动态Huffman码表的具体方式,可以由设计人员自行设置,如可以采用与现有技术中的范式Huffman编码技术相同或相似的方式实现。只要处理器可以生成每个数据块头各自对应的动态Huffman码表,本实施例对此不受任何限制。
需要说明的是,对于本步骤中将每个待解压数据块和各自对应的动态Huffman码表和数据块信息发送到FPGA的具体方式,可以由设计人员根据实用场景和用户需求自行设置,如可以采用与上述上一步骤中将压缩数据块中的待解压数据块和各自对应的数据块信息及静态Huffman码表发送到FPGA的方式相同或相似的方式实现。只要FPGA可以获取处理器发送的每个待解压数据块和各自对应的动态Huffman码表和数据块信息,本实施例对此不做任何限制。
具体的,对于本步骤中处理器将每个待解压数据块和各自对应的动态Huffman码表和数据块信息发送到FPGA的具体过程,可以由设计人员自行设置,如为了避免FPGA加速卡中存储器上的资源浪费,处理器每次仅向该存储器传输预设数量(如1个)的待解压数据块和对应的动态Huffman码表及数据块信息,且在FPGA将该存储器中的待解压数据块解码完成后再进行下一次发送;如预设数量为1时,处理器可以在FPGA将当前待解压数据块解码完成后再向该存储器传输下一待解压数据块和对应的下一数据块信息和下一动态Huffman码表。只要FPGA可以获取Gzip压缩文件中全部待解压数据块和各自对应的数据块信息及动态静态Huffman码表,实现对全部待解压数据块的并行解码,本实施例对此不受任何限制。
需要说明的是,本实施例所提供的方法还可以包括FPGA利用对应的动态Huffman码表和数据块信息,对每个待解压数据块进行并行解码步骤,如处理器每次向FPGA加速卡上的存储器传输一个待解压数据块和对应的数据块信息及当前动态Huffman码表时,FPGA可以利用当前数据块信息和当前动态Huffman码表,对当前待解压数据块进行并行解码,并将解码得到的当前解码数据发送到存储器。
具体的,对于FPGA利用对应的动态Huffman码表和数据块信息,对每个待解压数据块进行并行解码的具体过程,可以由设计人员自行设置,如可以采用与上述利用对应的数据块信息和静态Huffman码表,对每个待解压数据块进行并行解码的过程相似的方式,如可以将Huffman解码过程中使用的静态Huffman码表更换为待解压数据块对应的动态Huffman码表。本实施例对此不做任何限制。
也就是说,FPGA根据每个待解压数据块各自对应的数据块信息和动态Huffman码表,对每个待解压数据块进行并行Huffman解码,获取解码输出数据和对应的数据信息;其中,数据信息包括有效数据个数及结束标志;根据数据信息,确定解码输出数据中的有效数据,并对有效数据进行LZ77解码,获取每个待解压数据块对应的解压数据块。
具体的,如图2至图4所示,FPGA可以利用第一内核(kernel_1)根据当前数据块信息和当前动态Huffman码表,对当前待解压数据块的bit数据流中8个相邻的起始位置进行并行解码,获取当前解码输出数据和对应的当前数据信息;利用第二内核(kernel_2)根据当前数据信息,确定当前解码输出数据中的当前有效数据,并依次将当前有效数据输出到第三内核;其中,第二内核每次向第三内核输出的当前有效数据的个数小于或等于2;利用第三内核(kernel_3)对输入的当前有效数据进行LZ77解码,获取对应的当前解压数据。
对应的,若第二内核输入的当前有效数据为字符,则将当前有效数据作为当前解压数据,输出到FPGA加速卡上的存储器,并更新预设缓冲区;若第二内核输入的当前有效数据为长度+距离,则从预设缓冲区存储的最新已输出的解压数据中复制长度的字符串作为当前解压数据,输出到FPGA加速卡上的存储器,并更新预设缓冲区;其中,字符串的复制起始点在当前输出位置前的距离处,预设缓冲区的容量大于或等于距离的最大值。
可以理解的是,如图2所示,FPGA每解码完成一个待解压数据块之后,还可以判断解码完成的待解压数据块是否为最后一个待解压数据块,以确定Gzip压缩文件是否解压完成。如处理器每次向FPGA发送一个待解压数据块时,FPGA可以在解码完成该待解压数据块(当前待解压数据块)后,判断当前待解压数据块是否为最后一个待解压数据块;若否,则说明当前Gzip压缩文件未解压完,可以提示处理器继续将下一待解压数据块发送给FPGA;若是,则可以结束本流程,或提示处理器Gzip压缩文件解压完成。对应的,处理器还可以将Gzip压缩文件的信息(如待解压数据块个数信息)发送给FPGA,以保证FPGA可以判断解码完成的待解压数据块是否为最后一个待解压数据块。
需要说明的是,本实施例中利用FPGA对Gzip压缩文件中非存储模式的待解压数据块进行并行解码,实现了Gzip压缩文件的解压缩,对应的处理器还可以根据FPGA解码得到的解压数据块,生成Gzip压缩文件对应的解压文件。对于处理器利用解压数据块生成Gzip压缩文件对应的解压文件的具体方式,可以采用与现有技术相同或相似的方式实现,如图3所示处理器从DDR读取解压数据块后可以直接将输出到解压文件,本实施例对此不受任何限制。
本实施例中,本发明实施例通过CPU+FPGA联合实现Gzip解压缩,利用FPGA根据处理器对数据块头解析得到的Huffman码表及数据块信息,对待解压数据块进行并行解码,提升了Gzip解压缩的性能,降低了处理器的利用率;并且处理器采用范式Huffman编码模式生成动态Huffman码表,减少了所需的码表量,进一步提高了解码速度。
请参考图5,图5为本发明实施例所提供的一种基于FPGA的Gzip解压缩装置的结构框图。该装置可以包括:
数据头解析模块100,用于对获取的Gzip压缩文件中压缩数据块中的数据块头进行解析,确定压缩数据块的编码模式;其中,编码模式包括存储模式、静态Huffman编码模式和动态Huffman编码模式;
获取发送模块200,用于若编码模式为静态Huffman编码模式,则获取数据块头对应的一个静态Huffman码表,并将压缩数据块中的待解压数据块和各自对应的数据块信息及静态Huffman码表发送到FPGA,以利用FPGA对待解压数据块进行并行解码;其中,数据块信息包括数据块大小信息和偏移量;
生成发送模块300,用于若编码模式为动态Huffman编码模式,则生成每个待解压数据块各自对应的动态Huffman码表,并将每个待解压数据块和各自对应的动态Huffman码表和数据块信息发送到FPGA,以利用FPGA对待解压数据块进行并行解码。
可选的,该装置还可以包括:
存储解压模块,用于若编码模式为存储模式,则将待解压数据块输出到解压文件。
可选的,生成发送模块300可以包括:
生成子模块,用于根据当前压缩数据块中的当前数据块头,生成当前数据块头对应的当前动态Huffman码表;
发送子模块,用于将当前动态Huffman码表、当前压缩数据块中的当前待解压数据块和对应的当前数据块信息发送到存储器;其中,存储器和FPGA均设置在FPGA加速卡上;
本实施例中,本发明实施例通过CPU+FPGA联合实现Gzip解压缩,利用FPGA根据处理器对数据块头解析得到的Huffman码表及数据块信息,对待解压数据块进行并行解码,提升了Gzip解压缩的性能,降低了处理器的利用率;并且通过生成发送模块300采用范式Huffman编码模式生成动态Huffman码表,减少了所需的码表量,进一步提高了解码速度。
本发明实施例还提供了一种服务器,可以包括存储器及处理器,存储器中储存有计算机程序,处理器执行存储器中的计算机程序时实现如上述实施例所提供的基于FPGA的Gzip解压缩方法的步骤。
此外,本发明实施例还提供了一种基于FPGA的Gzip解压缩系统,可以包括:如上一实施例所提供的服务器和与服务器连接的FPGA加速卡;其中,FPGA加速卡上设置有FPGA和存储器。
可选的,如图3所示,服务器与FPGA加速卡可以通过PCIe接口连接。例如FPGA加速卡可以为标准的半高半长的PCIe板卡,可以方便地插在服务器上,仅占用一个PCIe槽位。
具体的,对于FPGA加速卡上的FPGA和存储器的具体结构类型,可以由设计人员自行设置,如图3所示,FPGA可以选用Intel的Arria10系列FPGA,存储器可以选用DDR。本实施例对此不做任何限制。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置、系统及服务器而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上对本发明所提供的一种基于FPGA的Gzip解压缩方法、装置、系统及服务器进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
Claims (10)
1.一种基于FPGA的Gzip解压缩方法,其特征在于,包括:
处理器对获取的Gzip压缩文件中压缩数据块中的数据块头进行解析,确定所述压缩数据块的编码模式;其中,所述编码模式包括存储模式、静态Huffman编码模式和动态Huffman编码模式;
若所述编码模式为所述静态Huffman编码模式,则获取所述数据块头对应的一个静态Huffman码表,并将所述压缩数据块中的待解压数据块和各自对应的数据块信息及所述静态Huffman码表发送到FPGA,以利用FPGA对所述待解压数据块进行并行解码;其中,所述数据块信息包括数据块大小信息和偏移量;
若所述编码模式为所述动态Huffman编码模式,则生成每个所述待解压数据块各自对应的动态Huffman码表,并将每个所述待解压数据块和各自对应的动态Huffman码表和数据块信息发送到所述FPGA,以利用所述FPGA对所述待解压数据块进行并行解码。
2.根据权利要求1所述的基于FPGA的Gzip解压缩方法,其特征在于,所述确定所述压缩数据块的编码模式之后,还包括:
若所述编码模式为存储模式,则将所述待解压数据块输出到解压文件。
3.根据权利要求1所述的基于FPGA的Gzip解压缩方法,其特征在于,所述生成每个所述待解压数据块各自对应的动态Huffman码表,并将每个所述待解压数据块和各自对应的动态Huffman码表和数据块信息发送到所述FPGA,包括:
根据当前压缩数据块中的当前数据块头,生成当前数据块头对应的当前动态Huffman码表;
将当前动态Huffman码表、当前压缩数据块中的当前待解压数据块和对应的当前数据块信息发送到存储器;其中,所述存储器和所述FPGA均设置在FPGA加速卡上;
对应的,所述将当前动态Huffman码表、当前压缩数据块中的当前待解压数据块和对应的当前数据块信息发送到存储器之后,还包括:
所述FPGA利用当前数据块信息和当前动态Huffman码表,对当前待解压数据块进行并行解码,并将解码得到的当前解码数据发送到所述存储器。
4.根据权利要求3所述的基于FPGA的Gzip解压缩方法,其特征在于,所述将解码得到的当前解码数据发送到所述存储器之后,还包括:
FPGA判断当前待解压数据块是否为最后一个所述待解压数据块;
若否,则处理器将下一压缩数据块作为当前压缩数据块,执行所述根据当前压缩数据块中的当前数据块头,生成当前数据块头对应的当前动态Huffman码表的步骤。
5.根据权利要求1至4任一项所述的基于FPGA的Gzip解压缩方法,其特征在于,还包括:
所述FPGA根据每个所述待解压数据块各自对应的数据块信息和动态Huffman码表或所述静态Huffman码表,对每个所述待解压数据块进行并行Huffman解码,获取解码输出数据和对应的数据信息;其中,所述数据信息包括有效数据个数及结束标志;
根据所述数据信息,确定所述解码输出数据中的有效数据,并对所述有效数据进行LZ77解码,获取每个所述待解压数据块对应的解压数据块。
6.根据权利要求5所述的基于FPGA的Gzip解压缩方法,其特征在于,所述FPGA根据每个所述待解压数据块各自对应的数据块信息和动态Huffman码表或所述静态Huffman码表,对每个所述待解压数据块进行并行Huffman解码,获取解码输出数据和对应的数据信息,包括:
所述FPGA利用第一内核根据当前数据块信息和当前动态Huffman码表或所述静态Huffman码表,对当前待解压数据块的bit数据流中8个相邻的起始位置进行并行解码,获取当前解码输出数据和对应的当前数据信息;
利用第二内核根据当前数据信息,确定当前解码输出数据中的当前有效数据,并依次将当前有效数据输出到第三内核;其中,所述第二内核每次向所述第三内核输出的当前有效数据的个数小于或等于2;
利用所述第三内核对输入的当前有效数据进行LZ77解码,获取对应的当前解压数据。
7.根据权利要求5所述的基于FPGA的Gzip解压缩方法,其特征在于,所述利用所述第三内核对输入的当前有效数据进行LZ77解码,获取对应的解压数据,包括:
若所述第二内核输入的当前有效数据为字符,则将当前有效数据作为当前解压数据,输出到FPGA加速卡上的存储器,并更新预设缓冲区;
若所述第二内核输入的当前有效数据为长度+距离,则从预设缓冲区存储的最新已输出的解压数据中复制所述长度的字符串作为当前解压数据,输出到FPGA加速卡上的存储器,并更新预设缓冲区;其中,所述字符串的复制起始点在当前输出位置前的所述距离处,所述预设缓冲区的容量大于或等于所述距离的最大值。
8.一种基于FPGA的Gzip解压缩装置,其特征在于,包括:
数据头解析模块,用于对获取的Gzip压缩文件中压缩数据块中的数据块头进行解析,确定所述压缩数据块的编码模式;其中,所述编码模式包括存储模式、静态Huffman编码模式和动态Huffman编码模式;
获取发送模块,用于若所述编码模式为所述静态Huffman编码模式,则获取所述数据块头对应的一个静态Huffman码表,并将所述压缩数据块中的待解压数据块和各自对应的数据块信息及所述静态Huffman码表发送到FPGA,以利用FPGA对所述待解压数据块进行并行解码;其中,所述数据块信息包括数据块大小信息和偏移量;
生成发送模块,用于若所述编码模式为所述动态Huffman编码模式,则生成每个所述待解压数据块各自对应的动态Huffman码表,并将每个所述待解压数据块和各自对应的动态Huffman码表和数据块信息发送到所述FPGA,以利用所述FPGA对所述待解压数据块进行并行解码。
9.一种服务器,包括存储器及处理器,所述存储器中储存有计算机程序,其特征在于,所述处理器执行所述存储器中的计算机程序时实现如权利要求1至3任一项所述的基于FPGA的Gzip解压缩方法的步骤。
10.一种基于FPGA的Gzip解压缩系统,其特征在于,包括:
如权利要求9所述的服务器和与所述服务器连接的FPGA加速卡;其中,所述FPGA加速卡上设置有FPGA和存储器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910384799.1A CN110334066A (zh) | 2019-05-09 | 2019-05-09 | 一种基于FPGA的Gzip解压缩方法、装置及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910384799.1A CN110334066A (zh) | 2019-05-09 | 2019-05-09 | 一种基于FPGA的Gzip解压缩方法、装置及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110334066A true CN110334066A (zh) | 2019-10-15 |
Family
ID=68139442
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910384799.1A Pending CN110334066A (zh) | 2019-05-09 | 2019-05-09 | 一种基于FPGA的Gzip解压缩方法、装置及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110334066A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111711968A (zh) * | 2020-06-10 | 2020-09-25 | 京信通信系统(中国)有限公司 | 报文处理方法、装置、通信设备和通信系统 |
CN111884660A (zh) * | 2020-07-13 | 2020-11-03 | 山东云海国创云计算装备产业创新中心有限公司 | 一种哈夫曼编码设备 |
CN112817926A (zh) * | 2021-02-22 | 2021-05-18 | 北京安华金和科技有限公司 | 文件处理方法及装置、存储介质及电子装置 |
CN113626092A (zh) * | 2021-10-14 | 2021-11-09 | 广州匠芯创科技有限公司 | 嵌入式系统启动方法与soc芯片 |
CN114124106A (zh) * | 2022-01-28 | 2022-03-01 | 苏州浪潮智能科技有限公司 | 一种lz4解压缩方法、系统、存储介质及设备 |
WO2023082156A1 (zh) * | 2021-11-10 | 2023-05-19 | 山东方寸微电子科技有限公司 | 一种lz77解码电路及其工作方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103248369A (zh) * | 2013-05-21 | 2013-08-14 | 南京畅洋科技有限公司 | 基于fpga的压缩系统及其方法 |
CN105933009A (zh) * | 2016-05-19 | 2016-09-07 | 浪潮(北京)电子信息产业有限公司 | 数据压缩方法及系统、解压缩方法及系统 |
CN107027036A (zh) * | 2017-05-12 | 2017-08-08 | 郑州云海信息技术有限公司 | 一种fpga异构加速平台的解压缩方法、装置及系统 |
US20190121789A1 (en) * | 2016-07-07 | 2019-04-25 | Cross Commerce Media, Inc. | High-density compression method and computing system |
-
2019
- 2019-05-09 CN CN201910384799.1A patent/CN110334066A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103248369A (zh) * | 2013-05-21 | 2013-08-14 | 南京畅洋科技有限公司 | 基于fpga的压缩系统及其方法 |
CN105933009A (zh) * | 2016-05-19 | 2016-09-07 | 浪潮(北京)电子信息产业有限公司 | 数据压缩方法及系统、解压缩方法及系统 |
US20190121789A1 (en) * | 2016-07-07 | 2019-04-25 | Cross Commerce Media, Inc. | High-density compression method and computing system |
CN107027036A (zh) * | 2017-05-12 | 2017-08-08 | 郑州云海信息技术有限公司 | 一种fpga异构加速平台的解压缩方法、装置及系统 |
Non-Patent Citations (1)
Title |
---|
陈大莉: "基于FPGA的GZIP解压缩算法的设计和实现", 《中国优秀硕士学位论文全文数据库信息科技辑》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111711968A (zh) * | 2020-06-10 | 2020-09-25 | 京信通信系统(中国)有限公司 | 报文处理方法、装置、通信设备和通信系统 |
CN111711968B (zh) * | 2020-06-10 | 2022-02-01 | 京信网络系统股份有限公司 | 报文处理方法、装置、通信设备和通信系统 |
CN111884660A (zh) * | 2020-07-13 | 2020-11-03 | 山东云海国创云计算装备产业创新中心有限公司 | 一种哈夫曼编码设备 |
CN112817926A (zh) * | 2021-02-22 | 2021-05-18 | 北京安华金和科技有限公司 | 文件处理方法及装置、存储介质及电子装置 |
CN112817926B (zh) * | 2021-02-22 | 2022-02-22 | 北京安华金和科技有限公司 | 文件处理方法及装置、存储介质及电子装置 |
CN113626092A (zh) * | 2021-10-14 | 2021-11-09 | 广州匠芯创科技有限公司 | 嵌入式系统启动方法与soc芯片 |
WO2023082156A1 (zh) * | 2021-11-10 | 2023-05-19 | 山东方寸微电子科技有限公司 | 一种lz77解码电路及其工作方法 |
CN114124106A (zh) * | 2022-01-28 | 2022-03-01 | 苏州浪潮智能科技有限公司 | 一种lz4解压缩方法、系统、存储介质及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110334066A (zh) | 一种基于FPGA的Gzip解压缩方法、装置及系统 | |
US9477682B1 (en) | Parallel compression of data chunks of a shared data object using a log-structured file system | |
US7924183B2 (en) | Method and system for reducing required storage during decompression of a compressed file | |
CN107027036A (zh) | 一种fpga异构加速平台的解压缩方法、装置及系统 | |
US11463102B2 (en) | Data compression method, data decompression method, and related apparatus, electronic device, and system | |
CN111967244B (zh) | 一种基于fpga的fast协议解码方法、装置及设备 | |
CN102970043B (zh) | 一种基于gzip的压缩硬件系统及其加速方法 | |
US10224959B2 (en) | Techniques for data compression verification | |
US8806292B2 (en) | Method of hybrid compression acceleration utilizing special and general purpose processors | |
US11550756B2 (en) | System and method for error-resilient data reduction | |
US20090140894A1 (en) | Adaptive entropy coding compression output formats | |
WO2021012278A1 (zh) | 一种数据的处理方法、系统、编码器及解码器 | |
CN104811209A (zh) | 一种抗最长匹配检测的压缩文件数据嵌入方法及装置 | |
CN106293542B (zh) | 一种文件解压缩的方法及装置 | |
CN202931290U (zh) | 一种基于gzip的压缩硬件系统 | |
CN108932315A (zh) | 一种数据解压的方法以及相关装置 | |
CN102891732A (zh) | 数据发送方法和装置以及数据接收方法和装置 | |
WO2014000443A1 (zh) | 一种图像数据压缩和解压缩方法、装置 | |
US7564383B2 (en) | Compression ratio of adaptive compression algorithms | |
CN114416752B (zh) | Kv ssd的数据处理方法及装置 | |
US7398276B2 (en) | Parallel predictive compression and access of a sequential list of executable instructions | |
US9729168B1 (en) | Decompression of a compressed data unit | |
CN112579607B (zh) | 数据访问方法和装置、存储介质、电子设备 | |
Swarnkar et al. | An Implementation of Efficient Text Data Compression | |
Mendoza et al. | Modifying Bit-Level Data Compression Scheme based on Adaptive Hamming Code Data Compression Algorithm |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20191015 |