压缩方法、解压缩方法、装置和数据处理系统与流程

文档序号:12690697阅读:191来源:国知局
压缩方法、解压缩方法、装置和数据处理系统与流程

本申请涉及数据处理领域,特别涉及一种压缩方法、解压缩方法、装置和数据处理系统。



背景技术:

变长编码(英文:Variable Length Coding)是一种压缩数据时使用的编码方式,在该编码方式中,待压缩数据中的字符可以由长度不同的码字(码字为若干位二进制码)来表示,通常将出现概率较高的字符用较短的码字(如01)来表示,而将出现概率较低的字符用较长的码字来表示(如111001),而字符与码字的对应关系可以记录在变长编码表中。

目前,采用变长编码对数据进行压缩所得到的数据称为压缩数据封装,该压缩数据封装可以包括:压缩数据和变长编码表等,对该压缩数据封装进行解压缩时,可以先对压缩数据封装进行解析,得到变长编码表,然后从压缩数据的第一位开始,根据该变长编码表依次对压缩数据进行解码,得到解压缩后的数据。

由于在解压缩前,上述压缩数据封装中的压缩数据中每个码字的长度是未知的,对压缩数据进行解压缩时,解出一个码字后才能确定下一个码字的起始位置,因而需要按照压缩数据的顺序一个码字接一个码字地进行解压缩,解压速度较低。



技术实现要素:

为了解决解压缩时解压速度较低的问题,本发明实施例提供了一种压缩方法、解压缩方法、装置和数据处理系统。所述技术方案如下:

本发明实施例提供的解压缩方法可以由解压引擎执行,该解压引擎可以设置在x86架构(英文:The X86 architecture)的处理器或高级精简指令集处理器(英文:Advanced RISC Machines;简称:ARM)架构的处理器中。

第一方面,本发明实施例提供了一种解压缩方法,该方法包括:

解压引擎根据第x时钟周期从压缩数据中读取的码长为a*N+b的码段,得到的(a*N+b)/a个子码段;其中,x为大于或等于1的整数;(a*N+b)/a个子码段中每个子码段的码长为c,(a*N+b)/a个子码段中包括首个子码段,首个子码段的起始位与第x时钟周期读取的码段的起始位重合,且(a*N+b)/a个子码段中相邻两个子码段的起始位之间间隔的码长为a-1,所述N为大于0的整数。

解压引擎基于变长编码表,并发地对(a*N+b)/a个子码段进行解压处理,得到(a*N+b)/a个字符,其中,解压引擎解压每一子码段能够得到一个字符。

该变长编码表可以包括多个码字,(a*N+b)/a个字符中每个字符对应于变长编码表中的一个码字;多个码字中至少两个码字对应的码长不同,多个码字中对应码长最长的码字对应的码长为c,多个码字中对应码长最短的码字对应的码长为a,且a为多个码字中每一码字对应的码长的最大公约数,其中,a为大于或等于2的整数,c为大于a的整数,c与a的差值为b。

解压引擎根据变长编码表和第x时钟周期读取的码段,从(a*N+b)/a个字符中确定出第x时钟周期的目标解压数据,其中,第x时钟周期的目标解压数据中,每相邻的两个有效字符中一个有效字符对应的码字的末位码元在第x时钟周期读取的码段中的位置和另一个有效字符对应的码字的起始码元在第x时钟周期读取的码段中的位置相邻。第x时钟周期的目标解压数据包括按照特定顺序排列的多个有效字符。

本发明实施例提供的解压缩方法,在对压缩数据进行解压缩时,通过并发地对(a*N+b)/a个子码段进行解压处理,得到(a*N+b)/a个字符,然后根据变长编码表和第x时钟周期读取的码段,从(a*N+b)/a个字符中确定出第x时钟周期的目标解压数据。不用等待解压完一个码字后再根据该码字的长度解压下一个码字。在进行解压缩时可以同时从多个位置开始解压缩,解压速度较高。

可选的,第x时钟周期读取的码长为a*N+b的码段的后b位与第x+1时钟周期读取的码长为a*N+b的码段前b位相重合。

本发明实施例提供的解压缩方法,解压引擎通过在读取两个相邻的时钟周期时,使后一时钟周期的前b位为前一时钟周期的后b位,避免了在解压时遗漏未解压的码段。

可选的,在x为等于1的情况下,解压引擎根据变长编码表和第x时钟周 期读取的码段,从(a*N+b)/a个字符中确定出第x时钟周期的目标解压数据,具体包括:

解压引擎从(a*N+b)/a个字符中确定出第x时钟周期的目标解压数据,第x时钟周期的目标解压数据中第一个有效字符对应的码字的起始码元和第x时钟周期读取的码段的起始码元相重合。

本发明实施例提供的解压缩方法,在x等于1时,通过目标解压数据的起始码元的位置确定了第1时钟周期的目标解压数据。

可选的,在x为大于或等于2的整数的情况下,解压引擎根据变长编码表和第x时钟周期读取的码段,从(a*N+b)/a个字符中确定出第x时钟周期的目标解压数据,具体包括:

解压引擎从(a*N+b)/a个字符中确定出c/a组候选解压数据;每组候选解压数据包括多个字符,且每相邻的两个字符中,一个字符对应的码字的末位码元在第x时钟周期读取的码段中的位置和另一个字符对应的码字的起始码元在第x时钟周期读取的码段中的位置是相邻的;每两组候选解压数据内第一个字符对应的码字的起始码元在第x时钟周期读取的码段中的位置是不相同的,且每组候选解压数据内第一个字符对应的码字的起始码元为第x时钟周期读取的码段中的第W*a个码元,W为大于或等于0且小于或等于b/a的整数。

解压引擎从c/a组候选解压数据中确定出第x时钟周期的目标解压数据;在压缩数据中,第x-1时钟周期的目标解压数据中最后一个字符对应的码字的末位码元和第x时钟周期的目标解压数据中第一个字符对应的码字的起始码元是相邻的,第x-1时钟周期的目标解压数据是指第x-1时钟周期读取的码段对应的目标解压数据。

本发明实施例提供的解压缩方法,在x为大于或等于2的整数的情况下,通过先获取第x周期读取的数据的可能的c/a个候选解压数据,然后再根据第x-1时钟周期的目标解压数据选出第x时钟周期的目标解压数据,使得解压引擎可以在上一时钟周期的数据还未解压完成时就开始获取候选解压数据,提高了解压数据的速度。在x等于1的情况下,第x-1时钟周期的目标解压数据即为对第1时钟周期读取的码段进行解压得到的按照特定顺序排列的多个有效字符。

可选的,解压引擎在确定出第x时钟周期的目标解压数据之后,该方法还包括:

解压引擎根据压缩数据,将获取的多个时钟周期的解压数据进行拼接,获取压缩数据对应的解压数据,拼接后相邻的两个时钟周期中,一个时钟周期的目标解压数据内最后一个字符对应的码字的末位码元在压缩数据中的位置和另一个时钟周期的目标解压数据内第一个字符对应的码字的起始码元在压缩数据中的位置是相邻的。

本发明实施例提供的解压缩方法,在得到多个时钟周期的解压数据后,将这些结果拼接起来以获得压缩数据的解压数据,解压速度较高。

第二方面,本发明实施例提供一种压缩方法,该压缩方法可以由压缩引擎执行,该方法包括:

压缩引擎确定变长编码表中每个码字对应的码长的目标公约数;变长编码表包括多个码字,目标公约数为大于或等于2的整数,待压缩数据中的每个字符对应于变长编码表中的一个码字;

压缩引擎根据待压缩数据中的每个字符和目标公约数,生成变长编码表;变长编码表中至少两个码字的码长不同,待压缩数据中出现概率较高的字符对应的码字的码长小于出现概率较低的字符对应的码字的码长,变长编码表中码字的码长的最大公约数为目标公约数;

压缩引擎根据变长编码表对待压缩数据进行压缩,得到压缩数据;

压缩引擎基于压缩数据和变长编码表生成压缩数据封装。

本发明实施例提供的压缩方法,根据待压缩数据中的每个字符和目标公约数,生成变长编码表,并根据该变长编码表对待压缩数据进行压缩,使得解压引擎在解压该压缩数据时,可以从多个位置并发开始解压,而不用等待解压完一个码字后再根据该码字的长度解压下一个码字,解压速度较高。

可选的,解压引擎确定变长编码表中每个码字对应的码长的目标公约数,包括:

解压引擎首先可以确定至少一个公约数,根据对应于至少一个公约数中每一公约数的变长编码表,对待压缩数据进行压缩,得到的压缩率均小于预设值,其中,根据至少一个公约数中每一公约数,均能够生成一个对应的变长编码表;

之后解压引擎可以从至少一个公约数中确定出目标公约数,目标公约数的数值大于至少一个公约数中除目标公约数之外的每一公约数的数值。

最大公约数a越大,本发明实施例提供的压缩方法压缩的数据的解压速度 就越高,但是压缩率可能会在最大公约数变大时升高。本发明实施例提供的压缩方法,通过预先确定对应的压缩率小于预设值的至少一个公约数,并从中选出最大的公约数作为目标公约数,保证了压缩率和解压速度都在一个较高的范围。

第三方面,本发明实施例提供一种解压缩装置,该解压缩装置包括多个单元,该多个单元用于实现上述第一方面或第一方面中任意一种可能的实现方式所提供的解压缩方法。

第四方面,本发明实施例提供一种压缩装置,该压缩装置包括多个单元,该多个单元用于实现上述第二方面或第二方面中任意一种可能的实现方式所提供的压缩方法。

第五方面,本发明实施例提供一种数据处理系统,该系统包括第三方面提供的解压缩装置和第四方面提供的压缩装置,所述压缩装置用于对待压缩数据进行压缩得到压缩数据;所述解压缩装置用于对所述压缩数据进行解压处理。

第六方面,提供一种解压缩装置,所述解压缩装置包括:底板以及设置在底板上的中央处理器(英文:Central Processing Unit;简称:CPU)和内存,该底板连接有总线接口,该总线接口可以连接有解压引擎,该解压引擎用于执行第一方面提供的解压缩方法。

第七方面,提供一种解压缩装置,所述解压缩装置包括:处理器芯片、与处理器芯片连接的内存、以及设置在处理器芯片上的CPU和总线接口,解压引擎可以集成在处理器芯片上,并通过总线接口和CPU连接,解压引擎用于执行第一方面提供的解压缩方法。

第八方面,提供的一种压缩装置,该压缩装置包括:至少一个处理器、至少一个网络接口、存储器以及至少一个总线,存储器与网络接口分别通过总线与处理器相连;处理器被配置为执行存储器中存储的指令;处理器通过执行指令来实现第二方面提供的压缩方法。

综上所述,本发明实施例提供的解压缩方法,在对压缩数据进行解压缩时,通过并发地对(a*N+b)/a个子码段进行解压处理,得到(a*N+b)/a个字符,然后根据变长编码表和第x时钟周期读取的码段,从(a*N+b)/a个字符中确定出第x时钟周期的目标解压数据。不用等待解压完一个码字后再根据该码字的长度解压下一个码字。解决了相关技术中解压速度较低的问题。在进行解压缩时可以同 时从多个位置开始解压缩,解压速度较高。

附图说明

图1A是本发明实施例提供的一种解压缩装置的结构方框图;

图1B是本发明实施例提供的另一种解压缩装置的结构方框图;

图1C是本发明实施例提供的一种压缩装置的结构方框图;

图2A是本发明实施例示出的一种压缩方法的流程图;

图2B是图2A所示实施例中一种确定目标公约数的流程图;

图3A是本发明实施例示出的一种解压缩方法的流程图;

图3B是图3A所示实施例中第x时钟周期读取的数据中码字与字符的对应关系示意图;

图3C是图3A所示实施例中解压引擎所占用的芯片面积条形图;

图4是本发明实施例提供的一种压缩装置的结构方框图;

图5A是本发明实施例提供的一种解压缩装置的结构方框图;

图5B是本发明实施例提供的一种解压缩装置的结构方框图;

图6为本发明实施例提供的一种数据处理系统的结构示意图。

具体实施方式

为了使本公开的目的、技术方案和优点更加清楚,下面将结合附图对本公开作进一步地详细描述,显然,所描述的实施例仅仅是本公开一部份实施例,而不是全部的实施例。

请参考图1A,其示出了本发明实施例提供的一种解压缩装置的结构方框图,该解压缩装置可以包括:底板11以及设置在底板11上的CPU12和内存13,该底板11连接有总线接口14,该总线接口14可以连接有解压引擎15,解压引擎15可以是扩展卡,而扩展卡可以为现场可编程门阵列(英文:Field-Programmable Gate Array;简称:FPGA)或应用专用集成电路(英文:Application Specific Integrated Circuit;简称:ASIC)。总线接口14可以为PCIe(一种总线接口)。

请参考图1B,其示出了本发明实施例提供的另一种解压缩装置的结构方框图,该解压缩装置可以包括:处理器芯片16、与处理器芯片16连接的内存17,以及设置在处理器芯片16上的CPU161和总线接口162,解压引擎163可以集 成在处理器芯片16上,并通过总线接口162和CPU161连接。其中,内存17可以为双倍速率同步动态随机存储器(英文:Double Data Rate SDRAM;简称:DDR),总线接口162可以为高级可扩展接口(英文:Advanced eXtensible Interface;简称:AXI)。

请参考图1C,其示出了本发明实施例提供的一种压缩装置的结构方框图,该压缩装置20可以包括:至少一个处理器21、至少一个网络接口22、存储器23以及至少一个总线24,存储器23与网络接口22分别通过总线24与处理器21相连;处理器21被配置为执行存储器23中存储的指令231。存储器23可能包含高速随机存取存储器(英文:Random Access Memory;简称:RAM),也可能还包括非不稳定的存储器(英文:non-volatile memory),例如至少一个磁盘存储器。

图2A是本发明实施例示出的一种压缩方法的流程图,本实施例以该压缩方法应用于对待压缩数据进行压缩来举例说明。该压缩方法可以包括如下几个步骤:

步骤201、压缩引擎获取待压缩数据中各种字符的概率分布。

在使用本发明实施例提供的压缩方法时,压缩引擎可以分析待压缩数据,以获取待压缩数据中各种字符的概率分布。待压缩数据可以是由多个不同的字符构成的,不同字符的出现概率可能不同,概率分布中可以包括每一字符的出现概率,示例性的,字符“A”的出现概率可以为4%(百分号),字符“B”的出现概率可以为6%。其中,待压缩数据中的字符是指存储于存储装置中未压缩的字符,存储装置在存储数据时,通常是以二进制位(英文:bit)为单位的,根据编码方式的不同,每个字符所占的二进制位的个数不同,如以美国信息交换标准代码(英文:American Standard Code for Information Interchange;简称:ASCII)作为编码方式的待压缩数据中,每个字符可以占8个二进制位。

本发明实施例中的压缩引擎可以通过软件或硬件结合在图1C所示的压缩装置中。

步骤202、压缩引擎确定变长编码表中每个码字对应的码长的目标公约数。

该变长编码表可以包括多个码字,目标公约数为大于或等于2的整数,待压缩数据中的每个字符对应于所述变长编码表中的一个码字。

该目标公约数为编码表中每一码字对应码长的最大公约数,而该编码表是由压缩引擎后续生成的。需要说明的是,码字由若干个码元组成,计算机通信中通常表现为若干位二进制数据。一个码元可以为一个二进制数。

如图2B所示,压缩引擎确定目标公约数的流程可以包括下面2个子步骤:

子步骤2021、压缩引擎确定至少一个公约数,根据对应于至少一个公约数中每一公约数的变长编码表,对待压缩数据进行压缩,得到的压缩率均小于预设值。

其中,根据至少一个公约数中每一公约数,均能够生成一个对应的变长编码表。

子步骤2021可以包括:

1)压缩引擎首先可以预先设置多个公约数,这多个公约数均为大于或等于2且小于S的整数,S为待压缩数据中每个字符所占的二进制位的个数(这是因为如果公约数大于或等于字符所占的二进制位的个数,以该公约数为压缩数据中每个码字的码长的最大公约数时,压缩数据的数据量会大于待压缩数据,难以起到压缩的目的)。示例性的,待压缩数据中字符所占的位的个数为8,则公约数可以预先设置为2至7这6个数。

2)在设置了多个公约数后,压缩引擎可以估计这多个公约数中每个公约数对应的压缩率(英文:Compression ratio),压缩率是数据压缩后的大小与压缩前的大小之比。示例性的,待压缩数据在压缩前的大小为100兆字节(英文:Megabytes;简称:M),而压缩后的大小为10M,则压缩率为10%。

压缩引擎在估计每个公约数的压缩率时,可以对待压缩数据进行采样得到采样数据,然后根据每一个公约数生成一个变长编码表(根据公约数生成编码表的过程可以参考步骤203),并根据每个变长编码表对采样数据进行压缩得到每个公约数对应的压缩率。其中,根据这多个公约数中任一公约数生成的编码表中,记录有采样数据中每个字符和该字符对应的码字之间的对应关系,同时,变长编码表中每个字符对应的码字的码长为该任一公约数的正整数倍。

3)从多个公约数中筛选出对应的压缩率小于预设值的至少一个公约数。

预设值可以为操作人员预先设置的,该预设值在设置时可以考虑对于解压速度的要求,对于解压速度要求高时,可以设置一个较高的预设值,而在对解压速度要求低时,可以设置一个较小的预设值。这是因为通常压缩率越小,解 压速度就会越慢。

子步骤2022、压缩引擎从至少一个公约数中确定出目标公约数,目标公约数的数值大于至少一个公约数中除目标公约数之外的每一公约数的数值。

压缩引擎确定出目标公约数,该目标公约数是指对应的压缩率小于预设值的至少一个公约数中具有最大值的公约数。

应当明白的是,在前述“至少一个公约数”中,在该“至少一个公约数”的数量为1的情况下,也即该“至少一个公约数”就是指一个公约数,则该公约数即为目标公约数。只有在该“至少一个公约数”的数量大于或等于2的情况下,目标公约数才是指大于至少一个公约数中除目标公约数之外的每一公约数的数值的公约数。

由于本发明实施例提供的压缩方法对应的解压缩方法(参考图3A所示的实施例)中,变长编码表中码字的最大公约数越大,解压引擎每个时钟周期读取的数据就越多,解压速度也就越高,因而在考虑解压速度的情况下,可以将压缩率小于预设值的公约数中最大的公约数确定为目标公约数。

此外,由于最大公约数越大,表示字符的码字的码长也会越长,进而用于表示待压缩数据的压缩数据(压缩数据是由一个个码字构成的)的数据量也会越大,因而最大公约数越大,压缩率也会越大。在考虑压缩率的情况下,也可以将压缩率小于预设值的公约数中最小的公约数确定为目标公约数。

步骤203,压缩引擎根据待压缩数据中的每个字符和目标公约数,生成变长编码表。

变长编码表中至少两个码字的码长不同,待压缩数据中出现概率较高的字符对应的码字的码长小于出现概率较低的字符对应的码字的码长,变长编码表中码字的码长的最大公约数为目标公约数。

变长编码表是记录待压缩数据中字符与码字的对应关系的映射表,生成变长编码表的过程是确定待压缩数据中字符与码字的对应关系的过程。其中,变长编码表中每一码字对应于待压缩数据中的一个字符,相同的字符对应的码字是相同的,不同的字符对应的码字是不同的。对于“不同的字符对应的码字不同”,一种情况是不同的字符对应的码字的位数(或者说“码长”)不同;另一种情况是虽然不同的字符对应的码字的位数相同,但是码字中的二进制数据的排列次序不同。参见表1,字符A对应的码字是000,字符B对应码字是001, 则字符A对应的码字000和字符B对应码字001的虽然位数是相同的,但是码字中二进制数据的排列顺序不同。进一步参见表1,字符A对应的代码是000,字符F对应代码的101000,则字符A对应的代码000和字符F对应代码101000的位数是不同的。

在生成变长编码表时,可以按照待压缩数据中每个字符出现概率从大到小的顺序,为每个字符分配长度从小到大的码字,即字符出现的概率越大,就将该字符与长度越短的码字对应,这样就能够以较少的数据量来表示待压缩数据。

示例性的,目标公约数为3时,变长编码表可以如表1所示:

表1

在表1中,字符列中,码长较短的码字对应的字符出现的概率要大于码长较长的码字对应的字符出现的概率。与字符位于同一行的码长,代表该字符对应的码字的码长,或者代表该字符对应的码字包含的码元的数量,例如与字符“P”位于同一行的码长6代表的就是字符“P”对应的码字“110010”的码长。而与字符位于同一行的码字代表该字符对应的码字,例如与字符“Q”位于同一行的码字“110011”代表该字符“Q”对应的码字。待压缩数据中字符的排列顺序与压缩数据中码字的排列顺序是一致的。

本发明实施例中的变长编码可以是一种熵编码(英文:entropy encoding),熵编码是无损压缩时使用的一种编码方式。

步骤204、压缩引擎根据变长编码表对待压缩数据进行压缩,得到压缩数据。

在得到了变长编码表之后,可以根据变长编码表对待压缩数据进行压缩,得到压缩数据。示例性的,变长编码表为表1,根据表1对待压缩数据“ABC”进行压缩后,得到的压缩数据为“000 001 010”。

步骤205、压缩引擎基于压缩数据和变长编码表生成压缩数据封装。

在获取了变长编码表和压缩数据之后,压缩引擎基于压缩数据和变长编码表生成压缩数据封装。压缩数据封装还可以包括其他数据,如效验码(英文:CHECKSUM)等。

本发明实施例提供的压缩方法的压缩率相较于基于LZ4(一种编码方法)的压缩方法的压缩率下降了30%左右。

综上所述,本发明实施例提供的压缩方法,通过生成码字的长度具有最大公约数的变长编码表,并根据该变长编码表对待压缩数据进行压缩,使得解压引擎在解压该压缩数据时,可以从多个位置并发开始解压,而不用等待解压完一个码字后再根据该码字的长度解压下一个码字,解压速度较高。

图3A是本发明实施例示出的一种解压缩方法的流程图,本实施例以该解压缩方法应用于对图2A所示实施例提供的压缩方法生成的压缩数据封装进行解压来举例说明,该解压缩方法可以被图1A或图1B中的解压引擎来实现。该解 压缩方法可以包括如下几个步骤:

步骤301、解压引擎分析压缩数据封装,得到变长编码表和压缩数据。

在使用本发明实施例提供的解压缩方法时,解压引擎首先可以分析压缩数据封装,得到变长编码表和压缩数据。其中,压缩数据封装可以是图2A所示实施例提供的压缩方法压缩得到的压缩数据封装,该压缩数据封装中可以包括变长编码表、压缩数据和其他数据。

本步骤是可选的步骤,即解压引擎也可以直接得到变长编码和压缩数据。

步骤302、解压引擎按照压缩数据的生成顺序在每个时钟周期从压缩数据中读取码长为a*N+b的码段,第x时钟周期读取的码长为a*N+b的码段的后b位与第x+1时钟周期读取的码长为a*N+b的码段前b位相重合。

在获取了变长编码表后,解压引擎可以按照压缩数据的生成顺序(即先生成的数据先读取,后生成数据的后读取)在每个时钟周期从压缩数据中读取码长为a*N+b的码段(a*N+b大于或等于压缩数据中最长的码字的码长c),第x时钟周期读取的码长为a*N+b的码段的后b位与第x+1时钟周期读取的码长为a*N+b的码段前b位相重合,其中,N为大于0的整数,a代表上述实施例中提到的目标公约数,N的值可以根据硬件情况预先设置,b为压缩数据中最长码字的码长c和最短码字的码长a(最短码字的码长等于目标公约数a)的差值,a*N可以表示本发明实施例提供的解压方法的解压速度,即a和N越大,本发明实施例提供的解压方法的解压速度就越高。示例性的,在a=3,c=12,b=c-a=9时,解压引擎每个时钟周期读取3N+9位的数据。

压缩数据中,码字的码长的最大公约数a、压缩数据中最长码字的码长和最短码字的码长的差值b等数值,可以是解压引擎在解压之前就预先获知的,示例性的,可以是在设置解压引擎时就将这些数值写入了解压引擎。或者,码字的码长的最大公约数a、压缩数据中最长码字的码长和最短码字的码长的差值b等数值也可以是包括在变长编码表中,解压引擎可以在解析变长编码表时获取这些数值。

时钟周期(英文:Clock Cycle)也称为振荡周期,时钟周期是计算机中的时间单位。在一个时钟周期内,CPU完成一个基本的动作。

在步骤302中,解压引擎从压缩数据中每个时钟周期读取了固定码长的码段,因此可以以一个稳定的带宽向解压引擎传输数据,解压引擎对于带宽的利 用率较高,本发明实施例提供的解压方法可以应用于带宽压缩场景,例如神经网络参数在线解压应用,而相关技术中由于每个时钟周期解压的码字的码长可能不同,因而解压引擎读取的码段的码长也不同,难以应用于带宽压缩场景。

在本发明实施例提供的解压方法中,解压引擎可以通过调整N的值来调节每个时钟周期读取的数据量,进而调节解压速度。

由于相邻的两个时钟周期中的前一个时钟周期读取的码段末尾可能存在未解压的多位码元,为了避免这些码元遗漏,解压引擎在每个时钟周期读取码段时,将前一个时钟周期读取的码段的最后b位重复读取,这是因为整个压缩数据的码长是a的整数倍,前一个时钟周期最多可能未解压的码元的个数为b(在前一个时钟周期读取的码段中,最后一个码字为最大的长度c时,前一个时钟周期遗漏的未解压码元为最大个数b),前一个时钟周期最少可能未解压的码元的个数为0。需要说明的是,实际上,前一个时钟周期未解压的码元的个数为区间[0,K]内一个整数与a的乘积,其中K等于b/a。

步骤303、解压引擎根据第x时钟周期从压缩数据中读取的码长为a*N+b的码段,得到的(a*N+b)/a个子码段。

其中,x为大于或等于1的整数;(a*N+b)/a个子码段中每个子码段的码长为c,(a*N+b)/a个子码段中包括首个子码段,首个子码段的起始位与第x时钟周期读取的码段的起始位重合,且(a*N+b)/a个子码段中相邻两个子码段的起始位之间间隔的码长为a-1。

步骤304、解压引擎基于变长编码表,并发地对(a*N+b)/a个子码段进行解压处理,得到(a*N+b)/a个字符,其中,解压每一子码段得到一个字符。在x等于1时,执行步骤305;在x为大于或等于2的整数时,执行步骤306。

在第x时钟周期读取的a*N+b位数据中,解压引擎可以并发的对多个子码段进行解压处理,在对每个子码段进行解压处理得到的一个字符对应的码字的起始码元为每个子码段的起始码元。

其中,解压引擎对码长为a*N+b的码段中的起始位为第N*a位至第(N+K-1)*a位开始的多个子码段根据变长编码表进行解压缩时,码长为a*N+b的码段中剩余的码元的个数不够c个,解压引擎可以将这些码元不够c个的子码段以预设值(该预设值可以随意设置,如全为0或全为1,或者0和1交替等)将码长填充至c,然后再对这些子码段进行解压缩,得到多个字符,之后可以检 测每个子码段解压得到的字符在变长编码表中对应的码字的码长,如某个子码段解压得到的字符在变长编码表中对应的码字的码长大于该子码段在填充前的码长,则可以将该子码段解压得到的字符删除,在删除字符后,a*N+b位数据中存在未解压的若干码元。

示例性的,第x时钟周期读取的码段为“000 001 010 011 100”,a=3,c=6,依照表1所示的变长编码表,同时对子码段“000 001”、“001 010”、“010 011”、“011 100”和“100 000”进行解压缩,得到的字符为码字000对应的字符“A”,码字001对应的字符“B”,码字010对应的字符“C”、码字011对应的字符“D”以及码字“100”对应的字符“E”。其中“100 000”为填充为6位的子码段,根据该6位子码段解压得到的字符“E”对应的码字的码长为3,不大于“100 000”在填充前的长度,因而可以不删除字符“E”。

需要说明的是,压缩数据中的码字与将该压缩数据进行解压得到的目标解压数据中的字符是一一对应的。压缩数据中的第K个码字是与目标解压数据中的第K个字符对应的,确定了某个码字的起始位,就能够确定该码字(从起始位开始读取最少a位码元,最多c位码元,能够从变长编码表中得到这些码元表示的一个码字)。现有技术中,压缩数据中的每个码字的码长不全相同,不按照压缩数据中的顺序解压出一个码字前,解压引擎无法获知该码字的码长,进而也无法获知下一个码字的起始位。但由于本发明实施例提供的解压方法中的压缩数据中的码字的码长具有最大公约数a,因而解压数据中每个字符对应的码字的起始位是包括在(a*N+b)/a个子码段中每个子码段的起始位中的,可以称对压缩数据解压得到的目标解压数据中每个字符对应的码字(从变长编码表中可以得知每个字符对应的码字)的起始位为(a*N+b)/a个子码段的起始位中的正确起始位(正确起始位是以该位在整个压缩数据中的顺序来确定的,如解压数据中第一个字符对应的码字的起始位为整个压缩数据的第一位,则整个压缩数据中的第一位即为解压数据中第一个字符对应的码字的正确起始位),而将(a*N+b)/a个子码段的起始位中除正确起始位的其他位称为错误起始位。步骤304并发对(a*N+b)/a个子码段进行解压处理得到的多个字符中,包括从正确起始位开始解压得到的有效字符和从错误起始位开始解压得到的无效字符。

步骤305,在x等于1时,解压引擎从(a*N+b)/a个字符中确定出第x时钟周期的目标解压数据,第x时钟周期的目标解压数据中第一个有效字符对应的 码字的起始码元和第x时钟周期读取的码段的起始码元相重合。

其中,第x时钟周期的目标解压数据中,每相邻的两个有效字符中一个有效字符对应的码字的末位码元在第x时钟周期读取的码段中的位置和另一个有效字符对应的码字的起始码元在第x时钟周期读取的码段中的位置相邻。第x时钟周期的目标解压数据包括按照特定顺序排列的多个有效字符。

解压引擎在得到了(a*N+b)/a个字符后,就得知了这(a*N+b)/a个字符中每个字符对应的码字的码长。因为这多个字符中包括从错误起始位开始解压得到的无效字符,因而可以从中选出多个有效字符进行拼接,以得到第x时钟周期的目标解压数据,而选择的依据可以是先确定第x时钟周期读取的码长为a*N+b的码段中第一个码字的正确起始位,然后根据该正确起始位以及第一个码字的码长来确定第二个码字的正确起始位(第二个码字的正确起始位为第一个码字的末位的下一位),以此类推,解压引擎就能够获得每个有效字符对应的码字的正确起始位,进而就能够选出多个有效字符,将这多个有效字符以每个有效字符对应的码字在第x时钟周期读取的a*N+b位数据中的先后顺序进行拼接,就得到了第x时钟周期读取的数据的目标解压数据。

在x=1时,第x时钟周期读取的码长为a*N+b的码段的起始位即为压缩数据的起始位,该起始位为第x时钟周期读取的码长为a*N+b的码段中第一个码字的正确起始位。

示例性的,如图3B所示,其为第x时钟周期读取码长为a*N+b的码段中的前24位码元,在步骤304中,可以得到其中每个码字的码长以及每个码字对应的字符,即0至5位构成的码长为6的码字对应字符A,3至8位构成的码长为6的码字对应字符B,6至14位构成的码长为9的码字对应字符C,9至14位构成的码长为6的码字对应字符D,12至23位构成的码长为12的码字对应字符E,15至17位构成的码长为3的码字对应字符F,其中,码字的码长以及码字对应的字符可以如表2所示:

表2

在表2中,每个字符自上而下的顺序,和每个字符对应的码字的起始位在第x时钟周期读取码长为a*N+b的码段中的先后顺序是一致的。从图3B示出的24位码元以及该24位码元对应的多个字符中确定有效字符的方式可以为:以该24位码元的起始位作为第一个码字的起始位(该起始位为第一个有效字符对应的码字的正确起始位),确定了第一个码字的码长为6,且第一个码字对应的字符为A,由于第一个码字的码长为6,因而第二个码字的正确起始位为该24位码元的第6位(前0至5位被第一个码字占用),而以该24位码元的第6位为起始位置的码字对应的字符为C,因而可以将字符C作为第二个有效字符,由于第二个有效字符对应的码字的码长为9,因而第三个码字的正确起始位为该24位码元的第15位(前0至14位被第一个码字和第二个码字占用),以第15位为起始位置的码字对应的字符为F,因而得到的解压数据为A C F。

步骤306、在x为大于或等于2的整数时,解压引擎从(a*N+b)/a个字符中确定出c/a组候选解压数据。

其中,每组候选解压数据包括多个字符,且每相邻的两个字符中,一个字符对应的码字的末位码元在第x时钟周期读取的码段中的位置和另一个字符对应的码字的起始码元在第x时钟周期读取的码段中的位置是相邻的;每两组候选解压数据内第一个字符对应的码字的起始码元在第x时钟周期读取的码段中的位置是不相同的,且每组候选解压数据内第一个字符对应的码字的起始码元为第x时钟周期读取的码段中的第W*a个码元,W为大于或等于0且小于或等于b/a的整数。

在x为大于或等于2的整数时,由于第x-1时钟周期读取的数据还未完成解压缩,解压引擎难以获知第x-1时钟周期读取的数据中未解压的码元的个数,因而解压引擎当前难以确定读取的码长为a*N+b的码段中第一个码字的正确起始位。此时,解压引擎可以确定出所有可能的正确起始位(所有可能的正确起始位为第x时钟周期读取的码长为a*N+b的码段中的第H*a位,H取0至K中的每个整数,K=b/a),然后分别以这些所有可能的正确起始位为第一个码字的正确起始位,以步骤305中的方式得到c/a个候选解压数据。

其中,由于第x时钟周期读取的码段的前b位与第x-1时钟周期读取的码段的后b位是重复的,而这重复的b位中的前几位可能存在第x-1时钟周期读取的码段中最后一个码字的一部分,第x时钟周期读取的码段中第一个码字的正确起始位为第x-1时钟周期读取的码段中最后一个码字的末位的下一位。

由于压缩数据中码字的码长的最大公约数为a,因而第x时钟周期读取的码段的前b位中存在的第x-1时钟周期读取的码段的长度可以为0至K中的任一整数与a的乘积(在长度为0*a时,表明第x时钟周期读取的码段的前b位中不存在第x-1时钟周期读取的码段中最后一个码字的一部分),因而第x时钟周期读取的码段的前b位码元中的第H*a位可能是第x时钟周期读取的码段中第一个码字的正确起始位,而候选解压数据的个数取决于0至K中整数的个数,该个数等于K+1=b/a+1=(a+b)/a=c/a,其中,给K加1是因为0也算作0至K中的一个整数。

示例性的,c=9,a=3,第x时钟周期读取的码段的前9位为“000 001 010”,则其中的第0位、第3位和第6位为可能的正确起始位,解压引擎可以分别将第0位、第3位和第6位作为3个候选解压数据中第一个字符对应的码字的起始位,并分别以步骤305中的方式得到3个候选解压数据。

步骤307、解压引擎从c/a组候选解压数据中确定出第x时钟周期的目标解压数据。

在压缩数据中,第x-1时钟周期的目标解压数据中最后一个字符对应的码字的末位码元和第x时钟周期的目标解压数据中第一个字符对应的码字的起始码元是相邻的,第x-1时钟周期的目标解压数据是指第x-1时钟周期读取的码段对应的目标解压数据。在x等于1的情况下,第x-1时钟周期的目标解压数据即为对第1时钟周期读取的码段进行解压得到的按照特定顺序排列的多个有效字符。

解压引擎在得到了第x时钟周期的c/a个候选解压数据后,同时也完成了对第x-1时钟周期读取的码段的解压,得到了第x-1时钟周期的目标解压数据,解压引擎可以根据第x-1时钟周期的目标解压数据确定第x时钟周期读取的数据中第一个码字的正确起始位,并从c/a个候选解压数据中选出第x时钟周期的目标解压数据。

示例性的,第x-1时钟周期的解压数据为“ABCD”,对应的码字为“000 001 010 011”,第x-1时钟周期读取的码段为“000 001 010 011 101”,b=6,a=3,c=9, N=4,a*N+b=15,第x时钟周期读取的码段为“011 101000 101001”,其中前6位为第x-1时钟周期读取的码段的后6位,第x-1时钟周期读取的码段中后三位“101”为一个6位的码字的前三位,以步骤304中的方式不会对这三位进行解压缩,这三位数据为未解压的码段,可以将这三位码段的起始码元确定为第x时钟周期的目标解压数据中第一个字符对应的码字的起始码元。

需要说明的是,本发明实施例在对每个时钟周期读取的码段是并发的进行处理的,即解压引擎在第x-1时钟周期读取了码段后,解压引擎在对在第x-1时钟周期读取的码段进行解压缩时,解压引擎又在第x时钟周期读取了码段,并同时开始对第x时钟周期读取的码段进行解压。第x-1时钟周期读取的码段比第x时钟周期读取的码段先读取一个时钟周期,因而解压引擎在对第x时钟周期读取的码段进行步骤303至步骤307的任何一种处理时,都比解压引擎在对x-1时钟周期读取的码段进行相同处理慢一个步骤。因此,解压引擎在对第x时钟周期读取的码段的处理过程中,在执行步骤306时,解压引擎已经完成了对第x-1时钟周期读取的码段的解压,得到了第x-1时钟周期的目标解压数据。

通过步骤302至步骤307能够将压缩数据中的全部数据进行解压缩,获取每个时钟周期的目标解压数据。

步骤308、解压引擎根据压缩数据,将获取的多个时钟周期的解压数据进行拼接,获取压缩数据对应的解压数据。

其中,拼接后相邻的两个时钟周期中,一个时钟周期的目标解压数据内最后一个字符对应的码字的末位码元在压缩数据中的位置和另一个时钟周期的目标解压数据内第一个字符对应的码字的起始码元在压缩数据中的位置是相邻的。

如图3C所示,其为应用本发明实施例提供的解压缩方法时、应用基于霍夫曼编码的解压缩方法时以及应用基于LZ4的解压缩方法时,解压引擎所占用的芯片面积的条形图,其中,纵轴代表芯片面积,芯片的面积单位为平方毫米,芯片是指16纳米(nm)工艺的芯片。其中,条形31代表应用基于霍夫曼编码的解压缩方法时,解压引擎所占用的芯片面积,该面积为0.05平方毫米。条形32代表最大公约数为3,应用本发明实施例提供的解压缩方法时,解压引擎所占用的芯片面积,该面积为0.035平方毫米。条形33代表最大公约数为2,应用本发明实施例提供的解压缩方法时,解压引擎所占用的芯片面积,该面积为 0.025平方毫米。条形34代表应用基于LZ4的解压缩方法时,解压引擎所占用的芯片面积,该面积为0.16平方毫米。可以看出本发明实施例提供的解压缩方法,所占用的芯片面积小于相关技术中的解压缩方法。

此外,本发明实施例提供的解压缩方法的解压速度可以达到根据哈夫曼编码生成的压缩数据封装的解压速度的10倍左右,并与基于LZ4生成的压缩数据封装的解压速度基本持平。

综上所述,本发明实施例提供的解压缩方法,在对压缩数据进行解压缩时,通过并发地对(a*N+b)/a个子码段进行解压处理,得到(a*N+b)/a个字符,然后根据变长编码表和第x时钟周期读取的码段,从(a*N+b)/a个字符中确定出第x时钟周期的目标解压数据。不用等待解压完一个码字后再根据该码字的长度解压下一个码字。解决了相关技术中解压速度较低的问题。在进行解压缩时可以同时从多个位置开始解压缩,解压速度较高。

图4是本发明实施例提供的一种压缩装置的结构方框图,该压缩装置可以成为终端或服务器的部分或者全部。该压缩装置400可以包括:

公约数确定单元410,用于执行上述实施例中的步骤202。

编码表生成单元420,用于执行上述实施例中的步骤203和步骤201。

压缩单元430,用于执行上述实施例中的步骤204。

封装生成单元440,用于执行上述实施例中的步骤205。

综上所述,本发明实施例提供的压缩装置,通过生成码字的长度具有最大公约数的变长编码表,并根据该变长编码表对待压缩数据进行压缩,使得解压引擎在解压该压缩数据时,可以从多个位置并发开始解压,而不用等待解压完一个码字后再根据该码字的长度解压下一个码字,解压速度较高。

图5A是本发明实施例提供的一种解压缩装置的结构方框图。该解压缩装置500可以包括:

子码段确定单元510,用于执行上述实施例中的步骤301、302和303。

解压单元520,用于执行上述实施例中的步骤304。

解压数据确定单元530,用于执行上述实施例中的步骤305、306和307。

可选的,如图5B所示,该解压缩装置500还可以包括:

拼接单元540,用于执行上述实施例中的步骤308。

综上所述,本发明实施例提供的解压缩装置,在对压缩数据进行解压缩时,通过并发地对(a*N+b)/a个子码段进行解压处理,得到(a*N+b)/a个字符,然后根据变长编码表和第x时钟周期读取的码段,从(a*N+b)/a个字符中确定出第x时钟周期的目标解压数据。不用等待解压完一个码字后再根据该码字的长度解压下一个码字。解决了相关技术中解压速度较低的问题。在进行解压缩时可以同时从多个位置开始解压缩,解压速度较高。

参见附图6,为本发明实施例提供的一种数据处理系统的结构示意图,该数据处理系统包括压缩装置61和解压缩装置63,压缩装置61可以为前述实施例所述的压缩装置,解压缩装置63可以为前述实施例所述的解压缩装置。压缩装置61用于对待压缩数据进行压缩得到压缩数据;解压缩装置63用于对所述压缩数据进行解压处理。该数据处理系统可以应用于终端或服务器中。其中,终端可以包括智能手机、平板电脑、计算机和膝上型计算机,而服务器可以是一台服务器,或者由若干台服务器组成的服务器集群,或者是一个云计算服务中心。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于 一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所述仅为本发明实施例的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包括在本申请的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1