首页 / 一种硬件并行压缩的系统及方法

一种硬件并行压缩的系统及方法有效专利 发明

技术领域

[0001] 本发明涉及数据压缩技术领域,尤其涉及一种硬件并行压缩的系统及方法。

相关背景技术

[0002] 随着大数据和人工智能不断发展,互联网上需要处理的数据规模越来越大,庞大的数据量会占用大量的磁盘资源,为了减少数据存储,避免数据占用过多存储资源,通常会对数据进行压缩,再进行存储。
[0003] 目前的数据压缩通常采用软件实现Gzip压缩算法,但会占用中央处理器(CPU,Central Processing Unit)大量的时间以及大量的内存资源,并且,由于采用Gzip算法压缩数据时,对前面的数据有依赖关系,所以现在大多采用单路压缩方式进行数据压缩,即每个周期最多只能处理一个字符,这样,数据压缩的速率较低。

具体实施方式

[0041] 本发明实施例提供硬件并行压缩的系统及方法,以实现多路并行压缩数据,提升数据压缩的速率。
[0042] 为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
[0043] 以下分别进行详细说明。
[0044] 本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0045] 本发明实施例提供的硬件并行压缩的系统,可实现Gzip硬件并行压缩功能。通过循环冗余校验模块、数据大小记录模块、压缩核调度模块和N个压缩核对数据进行压缩,对待压缩数据进行并行压缩时,每周期获取待压缩数据的M比特数据,每周期将M比特数据输入硬件并行压缩系统,其中,通过循环冗余校验模块生成待压缩数据的循环冗余校验码,以支持高位宽的循环冗余校验,压缩格式与软件压缩相同,支持软件对已经压缩完成的文件进行解压缩操作,通过压缩核调度模块调度N个压缩核对每周期输入的M比特数据进行多路并行压缩,N个压缩核之间没有数据依赖关系,一个周期内可以并行处理多个M比特数据,实现了多路并行压缩数据,提升了数据压缩的速率。同时,在压缩过程中,中央处理器可以利用直接存储器访问模块(DMA,Direct Memory Access)将内存上的待压缩数据传输到可编程逻辑器件(FPGA,Field Programmable Gate Array),即可进行数据压缩,无需中央处理器进行计算,减少了占用中央处理器的时间和内存资源。
[0046] 首先参见图1,图1为本发明实施例提供的一种硬件并行压缩的系统100的结构示意图,本发明实施例提供的一种硬件并行压缩的系统100可以包括:循环冗余校验模块101、数据大小记录模块102、压缩核调度模块103和N个压缩核104,N为正整数;
[0047] 对待压缩数据进行并行压缩时,每周期获取所述待压缩数据的M比特数据,每周期将所述M比特数据输入所述系统,M为正整数;
[0048] 其中,循环冗余校验模块101,用于计算待压缩数据的循环冗余校验码;
[0049] 数据大小记录模块102,用于计算待压缩数据的大小;
[0050] 压缩核调度模块103,用于检测N个压缩核104的执行状态,根据N个压缩核104的执行状态将输入的M比特数据分配到N个压缩核104中进行压缩;
[0051] N个压缩核104,用于压缩输入的M比特数据,其中,N个压缩核104并行压缩。
[0052] 可选的,循环冗余校验模块101具体用于,每周期将M比特数据输入系统时,计算每周期输入的M比特数据的循环冗余校验码,即,计算当前周期输入的M比特数据与循环冗余校验模块101前一周期计算得到的循环冗余校验码的逻辑关系,以得到当前周期的循环冗余校验码,当待压缩数据输入结束时,即得到待压缩数据的循环冗余校验码。
[0053] 进一步可选的,M可以为128,每周期将128比特数据输入系统时,计算128比特数据的32比特循环冗余校验码,即,计算当前周期输入的128比特数据与循环冗余校验模块101前一周期计算得到的32比特循环冗余校验码的逻辑关系,以得到当前周期的32比特循环冗余校验码,当待压缩数据输入结束时,即得到待压缩数据的32比特循环冗余校验码。
[0054] 可选的,数据大小记录模块102具体用于,当每周期将M比特数据输入系统时,记录M比特数据的大小,当待压缩数据输入结束时,通过记录的每周期输入的数据大小,即得到待压缩数据的大小。
[0055] 进一步可选的,M为128时,每周期将128比特数据输入系统,即每周期将16个8比特字符输入系统,当128比特数据有效时,数据大小记录模块102计数加16,直到待压缩数据全部输入结束,得到表示待压缩数据的大小的32比特数据。
[0056] 可选的,N个压缩核104中任意一个压缩核的执行状态包括准备状态、输入状态和工作状态,压缩核调度模块103具体用于,实时检测N个压缩核104的执行状态,将输入的M比特数据存入处于输入状态的压缩核的输入缓存,判断该处于输入状态的压缩核的输入缓存是否存满,如果存满,则将该处于输入状态的压缩核的执行状态转换为工作状态,对输入的M比特数据进行压缩;
[0057] 进一步可选的,压缩核调度模块103还用于,实时检测处于工作状态的压缩核是否有压缩完成的数据,如果处于工作状态的压缩核有压缩完成的数据,则将该处于工作状态的压缩核中压缩完成的数据传输到内存,将该处于工作状态的压缩核的执行状态转换为准备状态;
[0058] 进一步可选的,压缩核调度模块103还用于,当待压缩数据压缩完成时,从循环冗余校验模块101中获取待压缩数据的循环冗余校验码,从数据大小记录模块102中获取待压缩数据的大小,将待压缩数据的循环冗余校验码和待压缩数据的大小拼接在压缩完成的数据尾部,传输回内存。
[0059] 可选的,N个压缩核104中,各个压缩核之间没有数据依赖关系,由压缩核调度模块103对各个压缩核分配工作并行压缩,N个压缩核104中的第i个压缩核(i为不大于N的正整数)具体用于,压缩传入该第i个压缩核的M比特数据,当该第i个压缩核处于工作状态时,从该第i个压缩核的输入缓存中读取M比特数据进行硬件压缩处理,将压缩完成的数据存入该第i个压缩核的输出缓存,当输入缓存中的M比特数据全部压缩完成时,通知压缩核调度模块103读取输出缓存中压缩完成的数据。
[0060] 参见图2,图2为本发明实施例提供的一种硬件并行压缩的系统中压缩核调度模块200的结构示意图,本发明实施例提供的一种压缩核调度模块200可以包括:输入状态机模块201、辅助状态机模块202、输出状态机模块203和压缩核状态寄存模块204;
[0061] 其中,输入状态机模块201,用于将输入的M比特数据发送给第一压缩核、循环冗余校验模块和数据大小记录模块,将第一压缩核的存储信息发给辅助状态机模块202,其中,第一压缩核属于N个压缩核;
[0062] 辅助状态机模块202,用于转换N个压缩核的执行状态,将N个压缩核的执行状态发给输入状态机模块201和输出状态机模块203;
[0063] 输出状态机模块203,用于检测N个压缩核是否有压缩完成的数据输出,如果第二压缩核有压缩完成的数据输出,则将第二压缩核压缩完成的数据传输到内存,发送转换指令给辅助状态机模块202,其中,转换指令用于指示辅助状态机模块202转换第二压缩核的执行状态,第二压缩核属于N个压缩核;
[0064] 压缩核状态寄存模块204,用于存储N个压缩核的执行状态,压缩核状态寄存模块204由辅助状态机模块202调度。
[0065] 可选的,N个压缩核中任意一个压缩核的执行状态包括准备状态、输入状态和工作状态,硬件并行压缩系统中,每个工作周期只有一个压缩核处于输入状态,可以有多个压缩核处于工作状态或者准备状态,处于输入状态的压缩核表示该压缩核目前在接收数据并存入该压缩核的输入缓存,处于工作状态的压缩核表示该压缩核目前正在进行数据压缩工作,处于准备状态的压缩核表示该压缩核没有执行数据压缩工作,正在等待转换成输入状态以便接收数据。
[0066] 进一步可选的,第一压缩核的执行状态为输入状态,第二压缩核的执行状态为工作状态,辅助状态机模块202具体用于:
[0067] 根据第一压缩核的存储信息判断第一压缩核的输入缓存是否存满,如果存满,将第一压缩核的执行状态转换为工作状态;
[0068] 接受到转换指令时,将第二压缩核的执行状态转换为准备状态;
[0069] 获取处于准备状态的第三压缩核,将第三压缩核的执行状态转换为输入状态,其中,第三压缩核属于N个压缩核。
[0070] 可选的,输入状态机模块201与输出状态机模块203同时进行工作,互不干扰。
[0071] 可选的,压缩核状态寄存模块204具体用于,实时存储N个压缩核的执行状态,辅助状态机模块202每次先从压缩核状态寄存模块204中读取N个压缩核的执行状态,与辅助状态机模块202当前周期的信息计算后,将更新的N个压缩核的执行状态信息刷新存储回压缩核状态寄存模块204。
[0072] 参见图3,图3为本发明实施例提供的一种硬件并行压缩的系统中N个压缩核中的第i个压缩核300的结构示意图,本发明实施例提供的N个压缩核中的第i个压缩核300可以包括:输入缓存301、输出缓存302和压缩模块303;
[0073] 其中,i为不大于N的正整数;
[0074] 输入缓存301,用于存储输入第i个压缩核300的数据;
[0075] 输出缓存302,用于存储第i个压缩核300压缩完成的数据;
[0076] 压缩模块303,用于对输入第i个压缩核300的数据进行压缩,将第i个压缩核300压缩完成的数据发送给输出缓存302;
[0077] 其中,N个压缩核之间没有数据依赖关系,由压缩核调度模块对各个压缩核分配工作并行压缩,压缩模块303具体用于,压缩传入第i个压缩核300的M比特数据,当第i个压缩核300处于工作状态时,从第i个压缩核300的输入缓存301中读取M比特数据进行硬件压缩处理,将压缩完成的数据存入第i个压缩核300的输出缓存302,当输入缓存301中的M比特数据全部压缩完成时,通知压缩核调度模块读取输出缓存302中压缩完成的数据。
[0078] 参见图4,图4为本发明实施例提供的一种硬件并行压缩的方法的流程图。其中,如图4所示,本发明实施例提供的一种硬件并行压缩的方法可以包括:
[0079] 401、对待压缩数据进行并行压缩时,每周期获取待压缩数据的M比特数据,其中,M为正整数。
[0080] 402、计算待压缩数据的循环冗余校验码。
[0081] 可选的,计算待压缩数据的循环冗余校验码的方法可以是:
[0082] 每周期对M比特数据进行压缩时,计算每周期输入的M比特数据的循环冗余校验码,即,计算当前周期输入的M比特数据与前一周期计算得到的循环冗余校验码的逻辑关系,以得到当前周期的循环冗余校验码,当待压缩数据输入结束时,即得到待压缩数据的循环冗余校验码。
[0083] 进一步可选的,M可以为128,每周期对128比特数据进行压缩时,计算每周期输入的128比特数据的32比特循环冗余校验码,即,计算当前周期输入的128比特数据与前一周期计算得到的32比特循环冗余校验码的逻辑关系,以得到当前周期的32比特循环冗余校验码,当待压缩数据输入结束时,即得到待压缩数据的32比特循环冗余校验码。
[0084] 403、计算待压缩数据的大小。
[0085] 可选的,计算待压缩数据的大小的方法可以是:
[0086] 当每周期对M比特数据进行压缩时,记录M比特数据的大小,当待压缩数据输入结束时,通过记录的每周期输入的数据大小,即得到待压缩数据的大小。
[0087] 进一步可选的,M为128时,每周期对128比特数据进行压缩,即每周期对16个8比特字符进行压缩,当128比特数据有效时,计数加16,直到待压缩数据全部输入结束,得到表示待压缩数据的大小的32比特数据。
[0088] 404、检测N个压缩核的执行状态,其中,N为正整数。
[0089] 其中,N个压缩核之间没有数据依赖关系,N个压缩核中任意一个压缩核的执行状态包括准备状态、输入状态和工作状态,硬件并行压缩系统中,每个工作周期只有一个压缩核处于输入状态,可以有多个压缩核处于工作状态或者准备状态,处于输入状态的压缩核表示该压缩核目前在接收数据并存入该压缩核的输入缓存,处于工作状态的压缩核表示该压缩核目前正在进行数据压缩工作,处于准备状态的压缩核表示该压缩核没有执行数据压缩工作,正在等待转换成输入状态以便接收数据。
[0090] 405、根据N个压缩核的执行状态将M比特数据分配到N个压缩核中进行压缩,其中,N个压缩核并行压缩。
[0091] 可选的,N个压缩核中每个压缩核的执行状态包括准备状态、输入状态和工作状态,根据N个压缩核的执行状态将M比特数据分配到N个压缩核中进行压缩的方法可以是:
[0092] 将M比特数据发送给第一压缩核,其中,第一压缩核处于输入状态,第一压缩核属于N个压缩核;
[0093] 判断第一压缩核的输入缓存是否存满;
[0094] 如果存满,将第一压缩核的执行状态转换为工作状态,以对M比特数据进行压缩。
[0095] 进一步可选的,检测N个压缩核是否有压缩完成的数据输出;
[0096] 如果第二压缩核有压缩完成的数据输出,则将第二压缩核压缩完成的数据传输到内存,其中,第二压缩核处于工作状态,第二压缩核属于N个压缩核;
[0097] 将第二压缩核的执行状态转换为准备状态。
[0098] 进一步可选的,获取处于准备状态的第三压缩核,将第三压缩核的执行状态转换为输入状态,其中,第三压缩核属于N个压缩核。
[0099] 进一步可选的,当待压缩数据压缩完成时,获取待压缩数据的循环冗余校验码;
[0100] 获取待压缩数据的大小;
[0101] 将待压缩数据的循环冗余校验码和待压缩数据的大小拼接在压缩完成的数据尾部,传输到内存。
[0102] 参见图5,图5为本发明实施例提供的另一种硬件并行压缩的方法的流程图。其中,如图5所示,本发明实施例提供的另一种硬件并行压缩的方法可以包括:
[0103] 501、获取M比特数据输入压缩核调度模块。
[0104] 502、判断当前处于输入状态的压缩核中输入缓存是否存满,如果是,则进入步骤503,如果否,则进入步骤504。
[0105] 503、将当前处于输入状态的压缩核的执行状态转换为工作状态,获取下一个处于准备状态的压缩核,将处于准备状态的压缩核的执行状态转换为输入状态。
[0106] 504、将M比特数据发送给当前处于输入状态的压缩核、循环冗余校验模块和数据大小记录模块。
[0107] 505、判断待压缩数据是否输入结束,如果是,则进入步骤506,如果否,则进入步骤501。
[0108] 506、判断处于工作状态的压缩核是否将输出缓存中压缩完成的数据发送给压缩核调度模块,如果是,则进入步骤507,如果否,则进入步骤505。
[0109] 507、将已经把输出缓存中压缩完成的数据发送完毕的压缩核的执行状态转换为准备状态。
[0110] 508、判断是否还有处于工作状态的压缩核,如果是,则进入步骤506,如果否,则进入结束状态。
[0111] 本发明实施例提供的硬件并行压缩的方法中,从内存中获取待压缩数据,将待压缩数据传输到可编程逻辑器件(FPGA,Field Programmable Gate Array)后,先从待压缩数据中获取M比特输入压缩核调度模块,压缩核调度模块检测到当前处于输入状态的压缩核,将M比特数据发送给该处于输入状态的压缩核,直到处于输入状态的压缩核中的输入缓存存满数据后,将该压缩核的执行状态更改为工作状态,启动压缩工作,此时压缩核调度模块获取下一个处于准备状态的压缩核并将该压缩核的执行状态更改为输入状态。通过压缩核调度模块对输入数据进行分配压缩,每个压缩核可以获取一定数量的数据进行压缩工作,压缩核彼此之间没有数据依赖关系,可以实现并行压缩数据的效果,对比软件压缩,压缩速率大幅度提高。
[0112] 需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0113] 以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

当前第1页 第1页 第2页 第3页
相关技术
并行压缩相关技术
硬件并行相关技术
蔡晔发明人的其他相关专利技术