CN113497627A - 一种数据压缩和解压缩方法、装置及系统 - Google Patents
一种数据压缩和解压缩方法、装置及系统 Download PDFInfo
- Publication number
- CN113497627A CN113497627A CN202010203201.7A CN202010203201A CN113497627A CN 113497627 A CN113497627 A CN 113497627A CN 202010203201 A CN202010203201 A CN 202010203201A CN 113497627 A CN113497627 A CN 113497627A
- Authority
- CN
- China
- Prior art keywords
- length
- data
- compression
- decompression
- compressed
- 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
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本申请实施例公开了一种数据压缩和解压缩方法、装置及系统,应用于数据处理技术领域,用于在压缩率不同时,选择最优的压缩数据块长度,以实现数据压缩及解压缩的最优化。该方法包括:在进行数据压缩时,压缩引擎获取待压缩的目标数据后依次将其中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果;其中,L和l分别为解压引擎解压出口最大带宽长度和入口最大带宽长度;接着依次将l变更为l1至ln,重复执行前述压缩步骤,得到n个压缩结果,并获取这n个压缩结果中数据总长度最小的压缩结果对应的压缩数据块长度,进而再将该压缩数据块长度存储至压缩信息中,并向解压引擎发送该压缩信息和数据总长度最小的压缩结果。
Description
技术领域
本申请涉及数据处理技术领域,尤其涉及一种数据压缩和解压缩方法、装置及系统。
背景技术
随着人工智能(artificial intelligence,AI)技术的快速发展,越来越多的采用AI硬件加速器(即AI硬件集成芯片)对数据量较大的运算进行加速,例如,可以采用AI硬件加速器对利用卷积神经网络(convolutional neural networks,CNN)实现的图像处理的过程进行加速等。
但在利用AI硬件加速器运行卷积神经网等机器学习算法时,往往需要大量参数,而这些参数无法完全保存在AI硬件加速器的芯片内部,所以在运行机器学习算法时,需要从外部实时导入大量参数来完成计算。由于实时导入参数将占用AI硬件加速器的输入/输出(input/output,I/O)带宽,如果IO带宽不足,将无法实时导入足够的外部参数,会导致AI硬件加速器的计算单元空置,从而降低AI硬件加速器的整体性能。因此,需要预先对外部参数进行离线压缩来减小外部参数的数据量,并在AI硬件加速器内通过解压引擎进行实时在线解压还原出原始外部参数,以便可以在相同的I/O带宽下获取更多外部参数。
然而,目前对外部参数进行离线压缩时,采用的方式通常是每次取固定长度为L(解压出口最大带宽长度)字节的原始数据作为当前原始数据块block,尝试进行压缩,若压缩后长度小于解压入口最大带宽长度l,则填0补到长度为l,否则将L字节的原始数据中的剩余数据放到下一个block进行压缩,最终得到若干个长度为l的压缩数据块,相应的,在AI硬件加速器内进行在线解压时,每次取长度为l字节的压缩数据块进行解压,得到长度小于等于L字节的数据,并将之拼接得到若干个长度为L的解压结果。虽然该解压方法能够保证在解压时每一时钟周期读取固定长度的数据,前后两时钟周期读取的数据之间无耦合关系,解压后数据长度也不会大于解压出口的数据位宽,便于硬件实现,但这种压缩/解压缩方法在对稀疏率较低的数据进行处理时,由于压缩率高,会导致每一时钟周期对应的解压结果中包含的数据长度较短,使得需要将多个时钟周期的解压结果拼接后才能凑够L长度的数据,进而导致解压出口带宽利用率较低,另外,反复的数据拼接操作也会将数据频繁的移位,功耗较大。而对稀疏率较高的数据进行处理时,由于压缩率低,在压缩时填充了0值,又变相的降低了数据压缩率。可见,目前常用的这种数据压缩/解压缩的方法在对压缩率不同的数据进行处理时,要么会降低数据压缩率,要么会降低解压出口带宽的利用率且功耗较大。
发明内容
本申请实施例提供了一种数据压缩和解压缩方法、装置及系统,有助于在压缩率不同时,选择最优的压缩数据块长度,以实现数据压缩及解压缩的最优化。
第一方面,本申请提供了一种数据压缩方法,该方法包括:在进行数据压缩时,压缩引擎在获取到待压缩的目标数据后,首先依次将目标数据中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果;其中,L为解压引擎解压出口最大带宽长度;l为解压引擎解压入口最大带宽长度;然后,依次将l变更为l1至ln,重复执行前述压缩步骤,得到n个压缩结果,并获取这n个压缩结果中数据总长度最小的压缩结果对应的压缩数据块长度,进而可以将该压缩数据块长度存储至压缩信息中,并向解压引擎(如图1中的AI硬件加速器102中的解压引擎)发送该压缩信息和数据总长度最小的压缩结果。
与传统技术相比,本申请可以在压缩率不同时,选择数据总长度最小的压缩结果作为最终的压缩结果并将其对应的压缩数据块长度发送给解压引擎,以便解压引擎可以根据该压缩数据块长度进行解压缩,这样使得在压缩率较高时,解压引擎入口读取的无效数据少,不会降低解压出口带宽利用率,并且,在压缩率较低时,解压引擎入口读取的数据多(这是因为压缩结果对应的压缩数据块长度较大),解压后基本能保证解压出口在每一时钟周期均可以输出数据,无需对解压结果进行反复的数据移位、拼接,只需进行一次数据拼接操作即可,避免了功耗浪费,从而实现了数据压缩及解压缩的最优化。
一种可能的实现方式中,依次将目标数据中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果,包括:依次对目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第一压缩结果;当存在第一压缩结果的字节长度小于l时,在第一压缩结果之后添加数值0作为第一附加数据,使得第一压缩结果和第一附加数据的字节长度之和达到l,并将第一压缩结果和第一附加数据共同作为更新后的第一压缩结果;将所有无需更新的第一压缩结果和所有所述更新后的第一压缩结果按照先后顺序进行排序,得到一个压缩结果。
这样,使得当解压时数据块长度达到L时就说明可以停止解压了,压缩数据剩余的0值可以丢弃,进而提高解压效率。
一种可能的实现方式中,依次将目标数据中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果,包括:依次对目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第二压缩结果;当存在第二压缩结果的字节长度等于l时,则将所有第二压缩结果按照先后顺序进行排序,得到一个压缩结果。以便后续可以解压缩后得到数据块长度为L的原始数据,不会大于解压出口最大带宽长度,便于硬件实现。
一种可能的实现方式中,依次将目标数据中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果,包括:依次对目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第三压缩结果;当存在第三压缩结果的字节长度大于l时,将目标数据中L字节长度的数据块中部分尾部数据去除,得到去除尾部数据之后的长度小于L的数据块;对去除尾部数据之后的长度小于L的数据块进行压缩,得到第四压缩结果;当第四压缩结果的字节长度小于l且第四压缩结果的字节长度再加上一个编码长度大于l时,在第四压缩结果之后添加无效标志作为第二附加数据,使得第四压缩结果和第二附加数据的字节长度之和达到l,并将第四压缩结果和所述第二附加数据作为更新后的第三压缩结果;将所有无需更新的第三压缩结果和所有更新后的第三压缩结果按照先后顺序进行排序,得到一个压缩结果。
这样,使得当解压时若识别到无效标志时,则可以停止解压缩操作,输出解压得到的长度小于或等于L的原始数据块,将失效标志后的压缩数据丢弃,进而提高解压效率。
一种可能的实现方式中,获取n个压缩结果中数据总长度最小的压缩结果对应的压缩数据块长度,包括:获取n个压缩结果中每一压缩结果各自包含的所有压缩数据块相加后的数据总长度;从每一压缩结果各自包含的所有压缩数据块相加后的数据总长度中,确定数据总长度最小的压缩结果对应的压缩数据块长度。以便解压引擎可以根据该压缩数据块长度进行解压缩,这样使得在压缩率较高时,解压引擎入口读取的无效数据少,不会降低解压出口带宽利用率,并且,在压缩率较低时,解压引擎入口读取的数据多,解压后基本能保证解压出口在每一时钟周期均可以输出数据,无需对解压结果进行反复的数据移位、拼接,只需进行一次数据拼接操作即可,避免了功耗浪费。
第二方面,本申请还提供了一种数据解压缩方法,该方法包括:解压引擎(如图1中的AI硬件加速器102中的解压引擎)在获取到压缩引擎发送的待解压缩数据和待解压缩数据对应的压缩信息后,可以先获取压缩信息中的压缩数据块长度;其中,待解压缩数据为原始数据对应的数据总长度最小的压缩结果;然后,依次将待解压缩数据中长度为压缩数据块长度的数据块进行解压缩,得到解压缩结果。
这样,使得解压引擎根据压缩数据块长度进行解压缩时,当压缩率较高时,解压引擎入口读取的无效数据少,不会降低解压出口带宽利用率,当压缩率较低时,解压引擎入口读取的数据多,解压后基本能保证解压出口在每一时钟周期均可以输出数据,无需对解压结果进行反复的数据移位、拼接,只需进行一次数据拼接操作即可,避免了功耗浪费。
一种可能的实现方式中,依次将待解压缩数据中长度为压缩数据块长度的数据块进行解压缩,得到解压缩结果,包括:依次将待解压缩数据中长度为压缩数据块长度的数据块进行解压缩;在对压缩数据块长度的数据块进行解压得到的原始数据块的长度等于L时,停止解压缩操作,输出L长度的原始数据块;或,在对压缩数据块长度的数据块进行解压时,若识别到无效标志时,则停止解压缩操作,输出解压得到的长度小于或等于L的原始数据块;其中,L为解压引擎解压出口最大带宽长度。从而可以实现数据解压缩的最优化。
第三方面,本申请还提供了一种数据压缩和解压缩系统,该系统包括:压缩引擎和解压引擎;其中,压缩引擎,用于执行:S1:获取待压缩的目标数据;S2:依次将目标数据中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果;L为解压引擎解压出口最大带宽长度;l为解压引擎解压入口最大带宽长度;S3:依次将l变更为l1至ln,重复执行步骤S2,得到n个压缩结果;ln为大于1且小于L的正整数;n为大于1的正整数;S4:获取n个压缩结果中数据总长度最小的压缩结果对应的压缩数据块长度;S5:将压缩数据块长度存储至压缩信息中,并向解压引擎发送压缩信息和数据总长度最小的压缩结果;解压引擎,用于获取压缩信息中的压缩数据块长度;依次将待解压缩数据中长度为压缩数据块长度的数据块进行解压缩,得到解压缩结果。
一种可能的实现方式中,压缩引擎还用于:依次对目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第一压缩结果;当存在第一压缩结果的字节长度小于l时,在第一压缩结果之后添加数值0作为第一附加数据,使得第一压缩结果和第一附加数据的字节长度之和达到l,并将第一压缩结果和第一附加数据共同作为更新后的第一压缩结果;将所有无需更新的第一压缩结果和所有更新后的第一压缩结果按照先后顺序进行排序,得到一个压缩结果。
一种可能的实现方式中,压缩引擎还用于:依次对目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第二压缩结果;当存在第二压缩结果的字节长度等于l时,则将所有第二压缩结果按照先后顺序进行排序,得到一个压缩结果。
一种可能的实现方式中,压缩引擎还用于:依次对目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第三压缩结果;当存在第三压缩结果的字节长度大于l时,将目标数据中L字节长度的数据块中部分尾部数据去除,得到去除尾部数据之后的长度小于L的数据块;对去除尾部数据之后的长度小于L的数据块进行压缩,得到第四压缩结果;当第四压缩结果的字节长度小于l且第四压缩结果的字节长度再加上一个编码长度大于l时,在第四压缩结果之后添加无效标志作为第二附加数据,使得第四压缩结果和第二附加数据的字节长度之和达到l,并将第四压缩结果和第二附加数据作为更新后的第三压缩结果;将所有无需更新的第三压缩结果和所有更新后的第三压缩结果按照先后顺序进行排序,得到一个压缩结果。
一种可能的实现方式中,压缩引擎还用于:获取所述n个压缩结果中每一压缩结果各自包含的所有压缩数据块相加后的数据总长度;从每一压缩结果各自包含的所有压缩数据块相加后的数据总长度中,确定数据总长度最小的压缩结果对应的压缩数据块长度。
一种可能的实现方式中,解压引擎还用于:依次将待解压缩数据中长度为压缩数据块长度的数据块进行解压缩;在对压缩数据块长度的数据块进行解压得到的原始数据块的长度等于L时,停止解压缩操作,输出L长度的原始数据块;或,在对压缩数据块长度的数据块进行解压时,若识别到无效标志时,则停止解压缩操作,输出解压得到的长度小于或等于L的原始数据块;其中,L为解压引擎解压出口最大带宽长度。
第四方面,本申请还提供了一种数据压缩装置,该装置包括:第一获取单元,用于获取待压缩的目标数据;第一压缩单元,用于依次将目标数据中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果;L为解压引擎解压出口最大带宽长度;l为解压引擎解压入口最大带宽长度;第二压缩单元,用于依次将l变更为l1至ln,重复调用第一压缩单元依次将目标数据中L字节长度的数据块分别压缩为l1至ln字节长度的压缩数据块,得到n个压缩结果;ln为大于1且小于L的正整数;n为大于1的正整数;第二获取单元,用于获取n个压缩结果中数据总长度最小的压缩结果对应的压缩数据块长度;发送单元,用于将压缩数据块长度存储至压缩信息中,并向解压引擎发送压缩信息和数据总长度最小的压缩结果。
一种可能的实现方式中,第一压缩单元包括:
第一压缩子单元,用于依次对目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第一压缩结果;
第一添加子单元,用于当存在第一压缩结果的字节长度小于所述l时,在第一压缩结果之后添加数值0作为第一附加数据,使得第一压缩结果和所述第一附加数据的字节长度之和达到l,并将第一压缩结果和第一附加数据共同作为更新后的第一压缩结果;
第一获得子单元,用于将所有无需更新的第一压缩结果和所有更新后的第一压缩结果按照先后顺序进行排序,得到一个压缩结果。
一种可能的实现方式中,第一压缩单元包括:
第二压缩子单元,用于依次对目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第二压缩结果;
第二获得子单元,用于当存在第二压缩结果的字节长度等于l时,则将所有第二压缩结果按照先后顺序进行排序,得到一个压缩结果。
一种可能的实现方式中,第一压缩单元包括:
第三压缩子单元,用于依次对目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第三压缩结果;
去除子单元,用于当存在第三压缩结果的字节长度大于l时,将目标数据中L字节长度的数据块中部分尾部数据去除,得到去除尾部数据之后的长度小于L的数据块;
第四压缩子单元,用于对去除尾部数据之后的长度小于L的数据块进行压缩,得到第四压缩结果;
第二添加子单元,用于当第四压缩结果的字节长度小于l且第四压缩结果的字节长度再加上一个编码长度大于所述l时,在第四压缩结果之后添加无效标志作为第二附加数据,使得第四压缩结果和第二附加数据的字节长度之和达到l,并将第四压缩结果和第二附加数据作为更新后的第三压缩结果;
第三获得子单元,用于将所有无需更新的第三压缩结果和所有更新后的第三压缩结果按照先后顺序进行排序,得到一个压缩结果。
一种可能的实现方式中,第二获取单元包括:
获取子单元,用于获取n个压缩结果中每一压缩结果各自包含的所有压缩数据块相加后的数据总长度;
确定子单元,用于从每一压缩结果各自包含的所有压缩数据块相加后的数据总长度中,确定数据总长度最小的压缩结果对应的压缩数据块长度。
第五方面,本申请还提供了一种数据解压缩装置,该装置包括:
第一获取单元,用于获取压缩引擎发送的待解压缩数据和待解压缩数据对应的压缩信息;待解压缩数据为原始数据对应的数据总长度最小的压缩结果;第二获取单元,用于获取压缩信息中的压缩数据块长度;解压缩单元,用于依次将待解压缩数据中长度为压缩数据块长度的数据块进行解压缩,得到解压缩结果。
一种可能的实现方式中,解压缩单元包括:
解压缩子单元,用于依次将待解压缩数据中长度为压缩数据块长度的数据块进行解压缩;
输出子单元,用于在对压缩数据块长度的数据块进行解压得到的原始数据块的长度等于L时,停止解压缩操作,输出L长度的原始数据块;或,在对压缩数据块长度的数据块进行解压时,若识别到无效标志时,则停止解压缩操作,输出解压得到的长度小于或等于L的原始数据块;其中,L为解压引擎解压出口最大带宽长度。
第六方面,本申请还提供了一种数据压缩设备,该设备包括存储器、处理器;
存储器,用于存储指令;处理器,用于执行存储器中的指令,执行上述第一方面的任意一项方法。
第七方面,本申请还提供了一种数据解压缩设备,该设备包括存储器、处理器;
存储器,用于存储指令;处理器,用于执行存储器中的指令,执行上述第二方面的任意一项方法。
第八方面,本申请还提供了一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行上述任意一项方法。
从以上技术方案可以看出,本申请实施例具有以下优点:
本申请实施例在进行数据压缩时,压缩引擎首先获取待压缩的目标数据;然后依次将目标数据中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果;其中,L为解压引擎解压出口最大带宽长度;l为解压引擎解压入口最大带宽长度;接着,依次将l变更为l1至ln,重复执行前述压缩步骤,得到n个压缩结果,并获取这n个压缩结果中数据总长度最小的压缩结果对应的压缩数据块长度,进而可以将该压缩数据块长度存储至压缩信息中,并向解压引擎发送该压缩信息和数据总长度最小的压缩结果。可见,由于本申请可以在压缩率不同时,选择了数据总长度最小的压缩结果作为最终的压缩结果并将其对应的压缩数据块长度发送给解压引擎,以便解压引擎可以根据该压缩数据块长度进行解压缩,这样使得在压缩率较高时,解压引擎入口读取的无效数据少,不会降低解压出口带宽利用率,并且,在压缩率较低时,解压引擎入口读取的数据多(这是因为压缩结果对应的压缩数据块长度较大),解压后基本能保证解压出口在每一时钟周期均可以输出数据,无需对解压结果进行反复的数据移位、拼接,只需进行一次数据拼接操作即可,避免了功耗浪费,从而实现了数据压缩及解压缩的最优化。
附图说明
图1为本申请实施例提供的AI硬件加速器的结构框图;
图2为本申请实施例提供的一种数据压缩方法的流程图;
图3为本申请实施例提供的将目标数据中L字节长度的数据块压缩为l字节长度的压缩数据块的示意图之一;
图4为本申请实施例提供的将目标数据中L字节长度的数据块压缩为l字节长度的压缩数据块的示意图之二;
图5为本申请实施例提供的将目标数据中L字节长度的数据块压缩为l字节长度的压缩数据块的示意图之三;
图6为本申请实施例提供的一种数据解压缩方法的流程图;
图7为本申请实施例提供的数据压缩方法的整体实现过程示意图;
图8为本申请实施例提供的一个数据压缩和解压缩系统的结构框图;
图9为本申请实施例提供的一种数据压缩装置的结构框图;
图10为本申请实施例提供的一种数据解压缩装置的结构框图;
图11为本申请实施例提供的一种数据压缩设备的结构示意图;
图12为本申请实施例提供的一种数据解压缩设备的结构示意图。
具体实施方式
本申请实施例提供了一种数据压缩方法、装置及系统,有助于在压缩率不同时,选择最优的压缩块长度,以实现数据压缩及解压缩的最优化。
下面结合附图,对本申请的实施例进行描述。
参见图1,其示出了本申请实施例提供的AI硬件加速器的结构框图,如图1所示,该场景中,包括了中央处理器(central processing unit,CPU)101、AI硬件加速器102和外部存储单元103。中央处理器101与AI硬件加速器102连接,AI硬件加速器102和外部存储单元103连接。上述“连接”可以是直接连接,也可以是间接连接。
其中,中央处理器101可以是主机中央处理器(host CPU),用于为挂载其上的AI硬件加速器102分配加速任务等。
AI硬件加速器102包括解压引擎、参数缓存单元(weight buffer)、数据缓存单元(data buffer)、矩阵计算单元(cube unit)、向量计算单元(vector unit)、累加器(accumulator)、存储器读写控制器(direct memory access controller,DMAC)、片上统一缓存单元(on-chip unified buffer)、指令控制单元(flow control)、指令提取缓存单元(instruction fetch buffer)。以及总线接口单元(bus interface unit,BIU)。
矩阵计算单元,用于完成矩阵乘矩阵计算,比如完成卷积神经网络中卷积层和全连接层对应的矩阵乘矩阵计算。具体来讲,在进行卷积层或全连接层运算时,矩阵计算单元从数据缓存单元和参数缓存单元中读取数据矩阵对应的数据,其中,从参数缓存单元中读取的参数数据是通过DMAC搬运到参数缓存单元中,在搬运过程中,需要先通过解压引擎进行参数数据解压缩操作,然后才能在矩阵计算单元上进行矩阵乘计算,得到矩阵的部分结果或最终结果,保存在累加器中。
向量处理单元可以在实际情况需要的情况下,对矩阵计算单元的输出结果做进一步处理,如向量乘、向量加、指数运算、对数运算、大小比较等操作。主要用于神经网络中非卷积层和全连接层外其他层的网络计算,如激活函数(rectified linear unit,Relu)层、池化(Pooling)层等。
片上统一缓存单元,用于存储输出的计算结果,以及神经网络某些层的输入数据等。
总线接口单元,用于通过总线在CPU101与DMAC、指令提取缓存单元之间进行交互,以便CPU101可以通过总线控制AI硬件加速器102的启动,AI硬件加速器102也可以通过总线从外部存储单元103获取压缩后的数据和机器学习模型参数等,然后利用解压引擎完成实时在线解压,并对解压还原之后的数据进行各种计算。
DMAC主要用于将外部存储单元103中的数据搬运到参数缓存单元、数据缓存单元或片上统一缓存单元中,或者将片上统一缓存单元中的数据搬运到外部存储单元103中。
指令提取缓存单元,用于缓存指令,并通过指令控制单元输出指令,以控制AI硬件加速器102的工作过程。
外部存储单元103指的是私有于AI硬件加速器硬件架构的外部存储器,可以是双倍速率的SDRAM存储器(double data rate,DDR),包括DDR、DDR2、DDR3、DDR4等一系列规格。用于存储待处理数据以及经过压缩引擎(与AI硬件加速器102配套的软件)压缩后的压缩数据,用以为AI硬件加速器102提供相应的服务,如提供参数数据等。
在本申请实施例中,压缩引擎首先获取待压缩的目标数据;然后依次将目标数据中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果;接着,依次将l变更为l1至ln,重复执行前述压缩步骤,得到n个压缩结果,并获取这n个压缩结果中数据总长度最小的压缩结果对应的压缩数据块长度,进而可以将该压缩数据块长度存储至压缩信息中,并向AI硬件加速器102发送该压缩信息和数据总长度最小的压缩结果。在此基础上,AI硬件加速器102中的解压引擎可以根据该压缩信息获取压缩数据块长度,并依次将数据总长度最小的压缩结果中长度为该压缩数据块长度的数据块进行解压缩,得到解压缩结果,进而实现了数据压缩及解压缩的最优化。
需要注意的是,上述应用场景仅是为了便于理解本申请而示出,本申请的实施方式在此方面不受任何限制。相反,本申请的实施方式可以应用于适用的任何场景。
基于以上应用场景,本申请实施例提供了一种数据压缩方法,该方法可应用于与AI硬件加速器102配套的压缩引擎,下面对该方法进行介绍。
S1:获取待压缩的目标数据。
在本实施例中,将采用本实施例进行压缩的数据定义为目标数据,需要说明的是,本申请实施例不限制目标数据的类型以及获取方式,比如,目标数据可以是通过某摄像头拍摄到的人物R的人脸图像,或者,目标数据也可以是预先构建的某卷积神经网络模型的模型参数等。压缩引擎在获取到待压缩的目标数据后,可以通过下述步骤S2-S5对目标数据进行最优化压缩。
S2:依次将目标数据中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果;其中,L为解压引擎解压出口最大带宽长度;l为解压引擎解压入口最大带宽长度。
在本实施例中,通过步骤S1获取到待压缩的目标数据后,进一步可以依次按序从目标数据中取出L字节长度的数据块,并利用现有或未来出现的压缩算法,尝试对其进行压缩,并分别将各个L字节长度的数据块压缩为l字节长度的压缩数据块,得到一个压缩结果。比如,可以利用熵编码、霍夫曼(Huffman)编码、游程编码等通用的压缩算法以及这些压缩算法的混合或变种的压缩算法进行压缩。本实施例优先选择能够逐个扫描待压缩字符并顺序进行编码压缩的压缩算法,从而能够实现在对数据进行压缩的同时获取到压缩后数据长度,用以进行后续步骤。
其中,L指的是AI硬件加速器中解压引擎解压出口的最大带宽长度。l指的是AI硬件加速器中解压引擎解压入口的最大带宽长度。二者可以根据压缩引擎的硬件支持情况来确定,比如,可以预先在AI硬件加速器电路实现中配置好L和l的具体取值,或者也可以通过在程序或者AI硬件加速器电路运行时读取相关的配置值来确定L和l的具体取值,再比如,还可以通过读取保存在本地或者远端的记载有L和l取值的配置文件来确定L和l的具体取值。
在本实施例的一种可能的实现方式中,本步骤S2的具体实现过程可以包括下述步骤A1-A3:
步骤A1:依次对目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第一压缩结果。
在本实现方式中,依次从目标数据中取出L字节长度的数据块,并在每次取出L字节长度的数据块后,即对其进行压缩,得到该数据块对应的第一压缩结果,此处将第一压缩结果对应的数据长度定义为x1。
步骤A2:当存在第一压缩结果的字节长度小于l时,在第一压缩结果之后添加数值0作为第一附加数据,使得第一压缩结果和第一附加数据的字节长度之和达到l,并将第一压缩结果和第一附加数据共同作为更新后的第一压缩结果。
在本实现方式中,当存在某一数据块对应的第一压缩结果的字节长度x1小于l时,即小于解压引擎解压入口的最大带宽长度,此时,需要在该第一压缩结果之后添加数值0作为第一附加数据。使得该第一压缩结果的字节长度x1和第一附加数据中所有添加的数值0的字节长度之和达到l。进而可以将第一压缩结果和第一附加数据共同作为更新后的第一压缩结果。
举例说明:如图3所示,假设将L字节长度的目标数据压缩后得到的第一压缩结果的字节长度x1小于解压引擎解压入口的最大带宽长度l,此时,可以在第一压缩结果后添加数值0作为第一附加数据,如图中灰色阴影方框所示。其中,添加的数值0的总字节长度为l-x1,这样,可以使得第一压缩结果和第一附加数据的字节长度之和刚好达到l。
步骤A3:将所有无需更新的第一压缩结果和所有更新后的第一压缩结果按照先后顺序进行排序,得到一个压缩结果。
在本实现方式中,通过步骤A2在字节长度小于l的第一压缩结果之后添加第一附加数据进行更新后,进一步可以将所有更新后的第一压缩结果以及无需更新的第一压缩结果(即字节长度等于l的第一压缩结果)按照先后顺序进行排序,以得到目标数据对应的压缩步长为l的一个合并后的压缩结果。
在本实施例的一种可能的实现方式中,本步骤S2的具体实现过程可以包括下述步骤B1-B2:
步骤B1:依次对目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第二压缩结果。
在本实现方式中,依次从目标数据中取出L字节长度的数据块,并在每次取出L字节长度的数据块后,即对其进行压缩,得到该数据块对应的第二压缩结果,此处将第二压缩结果对应的数据长度定义为x2。
步骤B2:当存在第二压缩结果的字节长度等于所述l时,则将所有第二压缩结果按照先后顺序进行排序,得到一个压缩结果。
在本实现方式中,当通过步骤B1得到的目标数据中L字节长度的数据块对应的第二压缩结果的字节长度x2等于l时,即等于解压引擎解压入口的最大带宽长度,此时,可以将所有第二压缩结果按照先后顺序进行排序,以得到目标数据对应的压缩步长为l的一个合并后的压缩结果。
在本实施例的一种可能的实现方式中,本步骤S2的具体实现过程可以包括下述步骤C1-C5:
步骤C1:依次对目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第三压缩结果。
在本实现方式中,依次从目标数据中取出L字节长度的数据块,并在每次取出L字节长度的数据块后,即对其进行压缩,得到该数据块对应的第三压缩结果,此处将第三压缩结果对应的数据长度定义为x3。
步骤C2:当存在第三压缩结果的字节长度大于l时,将目标数据中L字节长度的数据块中部分尾部数据去除,得到去除尾部数据之后的长度小于L的数据块。
在本实现方式中,当存在某一数据块对应的第三压缩结果的字节长度x3大于l时,即大于解压引擎解压入口的最大带宽长度,此时,需要将L字节长度的数据块中部分尾部数据去除,得到去除尾部数据之后的长度小于L的数据块,以便在对其进行压缩后得到的压缩结果的字节长度可以不大于l。而去除的尾部数据将与后续数据拼接为下一个L字节长度的数据块,进行后续压缩。
举例说明:如图4所示,假设将L字节长度的目标数据压缩后得到的第三压缩结果的字节长度x3大于解压引擎解压入口的最大带宽长度l,此时,可以将L字节长度的数据块中部分尾部数据去除(如图中灰色阴影方框所示),得到去除尾部数据之后的长度小于L的数据块,以便在对其进行压缩后得到的压缩结果的字节长度可以不大于l。而去除的尾部数据将与后续数据拼接为下一个L字节长度的数据块,进行后续压缩。
步骤C3:对去除尾部数据之后的长度小于L的数据块进行压缩,得到第四压缩结果。
在本实现方式中,通过步骤C2将目标数据中L字节长度的数据块中部分尾部数据去除,得到去除尾部数据之后的长度小于L的数据块后,进一步可以对该长度小于L的数据块进行压缩,得到该数据块对应的第四压缩结果,此处将第四压缩结果对应的数据长度定义为x4。
需要说明的是,为了提高数据压缩率以及解压出口带宽的利用率并降低功耗,在将L字节长度的数据块中部分尾部数据去除后,要保证对剩下的长度小于L的数据块进行压缩后得到的第四压缩结果的长度x4是所采用压缩算法允许的最大的接近于l的值,即,需要满足第四压缩结果的字节长度x4小于l且第四压缩结果的字节长度x4再加上一个编码长度将大于1,其中,“一个编码长度”指的是采用压缩算法对数据进行压缩时,每次取出的一个固定长度的数据进行压缩后得到的压缩后的数据长度。
举例说明:假设解压引擎解压入口的最大带宽长度l为64bit,第四结果的字节长度x4是60bit,并且“一个编码长度”是6bit,此时,既保证了第四压缩结果的字节长度x4小于l,即60bit<64bit,也保证了第四压缩结果的字节长度x4再加上一个编码长度大于l,即60bit+6bit>64bit。所以,将目标数据中L字节长度的数据块压缩到60bit时,即可停止压缩,并将该数据块中剩下的尾部数据去除。
步骤C4:当第四压缩结果的字节长度小于l且第四压缩结果的字节长度再加上一个编码长度大于l时,在第四压缩结果之后添加无效标志作为第二附加数据,使得第四压缩结果和第二附加数据的字节长度之和达到l,并将第四压缩结果和第二附加数据作为更新后的第三压缩结果。
在本实现方式中,当第四压缩结果的字节长度x4小于l且第四压缩结果的字节长度x4再加上一个编码长度大于l时,可以在第四压缩结果之后添加无效标志作为第二附加数据。使得第四压缩结果的字节长度x4和第二附加数据中所有添加的无效标志的字节长度之和达到l。进而可以将第四压缩结果和第二附加数据共同作为更新后的第三压缩结果。
其中,无效标志的具体取值可以根据所采用的压缩算法的不同而不同,例如,当采用熵编码和游程编码的组合压缩算法进行压缩时,如果出现011字符,则表明该字符往后的所有字符均为无效标志,对于解压引擎来说,当识别到无效标志时,即可停止解压缩,将这些无效标志丢弃。
举例说明:如图5所示,假设将去除尾部数据后的剩下的长度小于L的数据块压缩后得到的第四压缩结果的字节长度x4小于解压引擎解压入口的最大带宽长度l,此时,可以在第四压缩结果后添加无效标志作为第二附加数据,如图中灰色阴影方框所示。其中,添加的无效标志的总字节长度为l-x4,使得第四压缩结果和第二附加数据的字节长度之和刚好达到l。
步骤C5:将所有无需更新的第三压缩结果和所有更新后的第三压缩结果按照先后顺序进行排序,得到一个压缩结果。
在本实现方式中,通过步骤C4将第四压缩结果之后添加第二附加数据作为更新后的第三压缩结果后,进一步可以将所有更新后的第三压缩结果以及无需更新的第三压缩结果(即字节长度等于l的第三压缩结果)按照先后顺序进行排序,以得到目标数据对应的压缩步长为l的一个合并后的压缩结果。
需要说明的,在执行上述步骤S2依次将目标数据中L字节长度的数据块分别压缩为l字节长度的压缩数据块时,可能会出现上述步骤A1-A3、B1-B2、以及C1-C5这三种不同的情况中的至少一种,但不论出现哪种情况,均可以按照上述对应步骤进行操作,直至将目标数据包含的所有数据块压缩完成,得到目标数据对应的一个最终的压缩结果。
S3:依次将l变更为l1至ln,重复执行步骤S2,得到n个压缩结果;其中,ln为大于1且小于L的正整数;n为大于1的正整数。
在本实施例中,为了选择出最优的压缩数据块长度,以实现数据压缩及解压缩的最优化,可以遍历1至L中所有的正整数,作为压缩数据块长度,即,可以依次分别将压缩数据块长度取值为l1至ln,其中,l1至ln均为大于1且小于L的正整数,且n为大于1的正整数,即1<l1<ln<L。然后,可以依次将步骤S2中的l变更为l1至ln,重复执行步骤S2后,可以分别得到目标数据对应的n个压缩结果。可以理解的是,l是l1至L中的某一个值,具体取值可根据解压引擎的硬件规格来决定。
举例说明:假设1=64bit=8Byte,L=64Byte,则l1至ln可以依次取值为1至64中的所有正整数,即,1<l1<…<ln<64,且l1至ln均为正整数。
S4:获取n个压缩结果中数据总长度最小的压缩结果对应的压缩数据块长度。
在本实施例中,通过步骤S3依次将l变更为l1至ln,分别对目标数据进行压缩,得到n个压缩结果后,可以计算出这n个压缩结果各自包含的数据总长度,并从中获取到数据总长度最小的压缩结果及其对应的压缩数据块长度,具体实现过程可以包括下述步骤D1-D2:
步骤D1:获取n个压缩结果中每一压缩结果各自包含的所有压缩数据块相加后的数据总长度。
为了选择出最优的压缩数据块长度,首先需要计算出n个压缩结果中每一压缩结果各自包含的所有压缩数据块相加后的数据总长度。例如,假设这n个压缩结果中的某一压缩结果包含了1000个l字节长度的压缩数据块,且l取值为64bit,则可以计算出该压缩结果包含的数据总长度为64000bit,即,1000*64bit=64000bit。
步骤D2:从每一压缩结果各自包含的所有压缩数据块相加后的数据总长度中,确定数据总长度最小的压缩结果对应的压缩数据块长度。
通过步骤D1获取到n个压缩结果各自包含的所有压缩数据块相加后的数据总长度后,进一步可以从中选择出包含的数据总长度最小的压缩结果对应的压缩数据块长度作为最优的压缩数据块长度,其对应的压缩率是最低的。
S5:将压缩数据块长度存储至压缩信息中,并向解压引擎发送压缩信息和数据总长度最小的压缩结果。
在本实施例中,通过步骤S4获取到数据总长度最小的压缩结果对应的压缩数据块长度后,进一步可以将该压缩数据块长度存到压缩信息中,比如,可以在进行数据压缩时,将目标数据原始长度、压缩模式以及压缩数据块长度统一定义为压缩信息,并与对应的数据总长度最小的压缩结果分别存在内存中,再向解压引擎发送该压缩信息和数据总长度最小的压缩结果,以便解压引擎可以在读取该压缩信息后,根据其中包含的压缩数据块长度,对数据总长度最小的压缩结果进行解压缩操作。这样,能够保证在压缩率不同时,选择出最优的压缩块长度,以实现目标数据压缩及解压缩的最优化。
需要说明是,在选择需要向解压引擎发送的压缩结果及其对应的压缩数据块长度时,还需要考虑解压引擎的硬件规格所能支持的压缩范围,即,解压引擎可以支持的不同长度的数据解压缩操作,以及所采用的压缩算法所能达到的压缩效果。在执行上述步骤S1-S4后,将获得的n个压缩结果各自对应的压缩数据块长度与实际情况相结合,再根据经验值来确定最终的向解压引擎发送的压缩结果及其对应的压缩数据块长度。
综上,本实施例提供的一种数据压缩方法,在进行数据压缩时,压缩引擎首先获取待压缩的目标数据;然后依次将目标数据中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果;其中,L为解压引擎解压出口最大带宽长度;l为解压引擎解压入口最大带宽长度;接着,依次将l变更为l1至ln,重复执行前述压缩步骤,得到n个压缩结果,并获取这n个压缩结果中数据总长度最小的压缩结果对应的压缩数据块长度,进而可以将该压缩数据块长度存储至压缩信息中,并向解压引擎发送该压缩信息和数据总长度最小的压缩结果。可见,由于本申请可以在压缩率不同时,选择了数据总长度最小的压缩结果作为最终的压缩结果并将其对应的压缩数据块长度发送给解压引擎,以便解压引擎可以根据该压缩数据块长度进行解压缩,这样使得在压缩率较高时,解压引擎入口读取的无效数据少,不会降低解压出口带宽利用率,并且,在压缩率较低时,解压引擎入口读取的数据多,解压后基本能保证解压出口在每一时钟周期均可以输出数据,无需对解压结果进行反复的数据移位、拼接,只需进行一次数据拼接操作即可,避免了功耗浪费,从而实现了数据压缩及解压缩的最优化。
对应于上述数据压缩方法,相应的,本申请实施例还提供了一种数据解压缩方法。参见图6,该图为本申请实施例提供的一种数据解压缩方法的流程图。下面对该方法进行介绍。
S601:获取压缩引擎发送的待解压缩数据和待解压缩数据对应的压缩信息;其中,待解压缩数据为原始数据对应的数据总长度最小的压缩结果。
在本申请实施例中,为了实现数据解压缩的最优化,解压引擎首先需要获取到压缩引擎发送的待解压缩数据和待解压缩数据对应的压缩信息,其中,待解压缩数据为原始数据对应的数据总长度最小的压缩结果,具体获取方式可参见上述步骤S1-S5的相关介绍。压缩信息包含有原始数据的原始长度、压缩模式以及压缩数据块长度。
S602:获取压缩信息中的压缩数据块长度。
在本申请实施例中,通过步骤S601获取到待解压缩数据对应的压缩信息后,进一步可以获取到该压缩信息中包含的压缩数据块长度,用以执行后续步骤S603。
S603:依次将待解压缩数据中长度为压缩数据块长度的数据块进行解压缩,得到解压缩结果。
在本申请实施例中,通过步骤S601获取到压缩数据块长度后,进一步可以依次将待解压缩数据中长度为压缩数据块长度的数据块进行解压缩,得到解压缩结果。然后再将解压结果(即原始数据)输出至解压出口进行输出。
在本实施例的一种可能的实现方式中,本步骤S603的具体实现过程可以包括下述步骤E1-E2:
步骤E1:依次将待解压缩数据中长度为压缩数据块长度的数据块进行解压缩。
在本实现方式中,获取到压缩数据块长度后,可以依次从待解压缩数据中取出该长度的压缩数据块,并在每次取出该长度的压缩数据块后,即对其进行接压缩,得到该数据块对应解压缩结果。
步骤E2:在对压缩数据块长度的数据块进行解压得到的原始数据块的长度等于L时,停止解压缩操作,输出L长度的原始数据块;或,在对压缩数据块长度的数据块进行解压时,若识别到无效标志时,则停止解压缩操作,输出解压得到的长度小于或等于L的原始数据块;其中,L为解压引擎解压出口最大带宽长度。
在本实现方式中,当通过步骤E1依次将待解压缩数据中长度为压缩数据块长度的数据块进行解压缩,得到每一压缩数据块对应的原始数据块时,若原始数据块的长度等于L时,停止解压缩操作,输出L长度的原始数据块即可。并且即使压缩数据块中还有剩余的编码部分,也无效考虑,这是因为这些剩余的编码部分只能是通过上述步骤A2添加的数值0(即第一附加数据),可以将其丢弃。
或者,若在对压缩数据块进行解压缩时,若解压得到的长度小于L的原始数据块后识别到无效标志,则若判断出该无效标志后的所有编码为非法码字,则可以立即停止解压缩操作,并且可以将这些编码丢弃,只需要将解压得到的长度小于L的原始数据块输出即可。
或者,若在对压缩数据块进行解压缩时,若解压得到的长度等于L的原始数据块后识别到无效标志,则若判断出该无效标志为添加的0值组成的,则可以立即停止解压缩操作,并且可以将这些0值丢弃,只需要将解压得到的长度等于L的原始数据块输出即可。
需要说明的是,对于上述步骤A2填充数值0的情况,也可以用填充其他无效字符来替代,这样只要解压引擎识别到了该无效字符就无法进行解码,即可确定已经完成了对压缩数据块的解压,剩下的这些无效字符都可以丢弃。
这样,解压引擎根据压缩数据块长度进行解压缩,可以使得当压缩率较高时,解压引擎入口读取的无效数据少,不会降低解压出口带宽利用率,而当压缩率较低时,解压引擎入口读取的数据多(这是因为压缩结果对应的压缩数据块块长度较大),解压后基本能保证解压出口在每一时钟周期均可以输出数据,无需对解压结果进行反复的数据移位、拼接,只需进行一次数据拼接操作即可,避免了功耗浪费,实现了数据解压缩的最优化。
为便于理解,现结合图7所示的数据压缩方法的整体实现过程示意图,对本申请提供的数据压缩和解压缩方法进行介绍:
S701:根据解压引擎的规格,确定解压引擎每一时钟周期解压出口最大带宽长度L和解压入口最大带宽长度l。需要说明的是,本申请实施例后续将以l=8Byte=64bit、L=64Byte进行介绍。
S702:在压缩过程中,压缩引擎判断是否还有未压缩的原始数据,若否,则执行后续步骤S706,退出压缩过程;若是,则读取长度为L的原始数据进行压缩,并将压缩后的数据长度x与l比较,当x小于l,执行后续步骤S703,当x大于l,执行后续步骤S704,当x等于l,执行后续步骤S705。当所有数据都已经被读取并完成压缩后,执行后续步骤S706,退出压缩过程。
具体来讲,在压缩过程中,压缩引擎每次取长度为L字节的原始数据尝试进行压缩,并在压缩过程中同时记录当前压缩后的数据长度x。如果L字节的原始数据在压缩之后的数据长度x<l,那么执行后续步骤S703;如果压缩之后的数据长度x刚好等于l,那么执行后续步骤S705;如果压缩之后的数据长度x>l,则去除L长度的原始数据的尾部数据,使得压缩后的数据长度x0小于l,并且当x0达到压缩算法允许的、最大的接近于l的临界值时,执行后续步骤S704。其中,x0需满足条件:x0<l且x0加上下一个编码长度则大于l。其中,“一个编码长度”指的是采用压缩算法对数据进行压缩时,每次取出的一个固定长度的数据进行压缩后得到的压缩后的数据长度。
S703:压缩引擎将压缩数据的后面l-x位填充0,使其长度等于l。
具体来讲,压缩引擎在压缩数据的后面添加数值0,直至补充到长度达到l为止。此时,新的压缩数据可以包括两部分数据:之前的压缩数据和补充数值0,总长度为l。进而可以继续执行后续步骤S705。
S704:压缩引擎在去除L长度的原始数据的尾部数据,使得压缩后的长度x0小于l后,可以继续填充无效标志,直至补充到长度达到l为止,并且,将去除的尾部数据并入后续数据,组成下一个L长度的原始数据块进行后续压缩。
S705:压缩引擎将压缩后的数据按顺序写入压缩文件,然后返回进行执行步骤S702。
S706:退出本轮压缩过程,并记录压缩后数据总长度。
S707:依次将l分别更换为l1至ln,重复执行上述S702~S706。
S708:完成全部l取值的数据压缩后,选出压缩后数据总长度的最小值及其对应的压缩数据块长度(此处将其定义为l_best),其对应的压缩结果即为当前最优压缩结果,其对应的压缩率最低。进而可以将该l_best存入压缩信息,并向解压引擎发送该压缩结果和压缩信息。
需要说明的是,步骤S701-S708与上文步骤S1-S5实现过程一致,相关之处请参见上文步骤S1-S5的介绍,在此不再赘述。
S709:解压引擎从压缩信息中获取压缩数据块长度l_best。
S710:解压引擎每一时钟周期读取l_best长度的压缩数据,并将这些数据发给解压入口单元。
S711:解压引擎根据压缩算法,将其获得的l-best长度的压缩数据进行解压缩,然后将解压得到的原始数据存入解压出口缓存单元中,并记录当前的有效解压长度(即解压后的数据长度)。由于之前压缩数据时所采用的压缩方式的保证,使得长度为l_best=8Byte的压缩数据在解压还原以后的长度一定不会超过L(即64Byte),因此容量为L=64Byte的解压出口缓存单元一定能存放得下这些解压缩后的数据。
S712:解压引擎将解压出口缓存单元存储的内容根据有效解压长度进行拼接并组合输出最终的解压结果。
综上,由于本申请可以在压缩率不同时,压缩引擎选择了数据总长度最小的压缩结果作为最终的压缩结果并将其对应的压缩数据块长度l_best发送给解压引擎,这样,解压引擎可以根据l_best进行解压缩,使得在压缩率较高时,解压引擎入口读取的无效数据少,不会降低解压出口带宽利用率,并且,在压缩率较低时,解压引擎入口读取的数据多(这是因为压缩结果对应的压缩数据块块长度较大),解压后基本能保证解压出口在每一时钟周期均可以输出数据,无需对解压结果进行反复的数据移位、拼接,只需进行一次数据拼接操作即可,避免了功耗浪费,实现了数据压缩及解压缩的最优化。
接下来,对本申请实施例提供的一种数据压缩和解压缩系统进行介绍。
参见图8,该认证系统包括压缩引擎801和解压引擎802,二者之间可以是直接连接,也可以是间接连接。
其中,压缩引擎801,用于执行:S1:获取待压缩的目标数据;S2:依次将目标数据中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果;其中,L为解压引擎解压出口最大带宽长度;l为解压引擎解压入口最大带宽长度;S3:依次将l变更为l1至ln,重复执行步骤S2,得到n个压缩结果;其中,ln为大于1且小于L的正整数;n为大于1的正整数;S4:获取n个压缩结果中数据总长度最小的压缩结果对应的压缩数据块长度;S5:将该压缩数据块长度存储至压缩信息中,并向解压引擎802发送压缩信息和数据总长度最小的压缩结果;具体实现过程请参见上文步骤S1-S5的介绍,在此不再赘述。
解压引擎802,用于获取压缩信息中的压缩数据块长度;依次将待解压缩数据中长度为压缩数据块长度的数据块进行解压缩,得到解压缩结果。具体实现过程请参见上文步骤S601-S603的介绍,在此不再赘述。
在本实施例的一种可能的实现方式中,压缩引擎801具体用于:
依次对目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第一压缩结果;
当存在第一压缩结果的字节长度小于l时,在第一压缩结果之后添加数值0作为第一附加数据,使得第一压缩结果和第一附加数据的字节长度之和达到l,并将第一压缩结果和第一附加数据共同作为更新后的第一压缩结果;
将所有无需更新的第一压缩结果和所有更新后的第一压缩结果按照先后顺序进行排序,得到一个压缩结果。
在本实施例的一种可能的实现方式中,压缩引擎801具体用于:
依次对目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第二压缩结果;
当存在第二压缩结果的字节长度等于l时,则将所有第二压缩结果按照先后顺序进行排序,得到一个压缩结果。
在本实施例的一种可能的实现方式中,压缩引擎801具体用于:
依次对目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第三压缩结果;
当存在第三压缩结果的字节长度大于l时,将目标数据中L字节长度的数据块中部分尾部数据去除,得到去除尾部数据之后的长度小于L的数据块;
对去除尾部数据之后的长度小于L的数据块进行压缩,得到第四压缩结果;
当第四压缩结果的字节长度小于l且第四压缩结果的字节长度再加上一个编码长度大于l时,在第四压缩结果之后添加无效标志作为第二附加数据,使得第四压缩结果和第二附加数据的字节长度之和达到l,并将第四压缩结果和第二附加数据作为更新后的第三压缩结果;
将所有无需更新的第三压缩结果和所有更新后的第三压缩结果按照先后顺序进行排序,得到一个压缩结果。
在本实施例的一种可能的实现方式中,压缩引擎801具体用于:
获取n个压缩结果中每一压缩结果各自包含的所有压缩数据块相加后的数据总长度;
从每一压缩结果各自包含的所有压缩数据块相加后的数据总长度中,确定数据总长度最小的压缩结果对应的压缩数据块长度。
在本实施例的一种可能的实现方式中,解压引擎802具体用于:
依次将待解压缩数据中长度为压缩数据块长度的数据块进行解压缩;
在对压缩数据块长度的数据块进行解压得到的原始数据块的长度等于L时,停止解压缩操作,输出L长度的原始数据块;或,在对压缩数据块长度的数据块进行解压时,若识别到无效标志时,则停止解压缩操作,输出解压得到的长度小于L的原始数据块;其中,L为解压引擎解压出口最大带宽长度。
为便于更好的实施本申请实施例的上述方案,下面还提供用于实施上述数据压缩方案的一种相关装置。请参见图9所示,本申请实施例提供的一种数据压缩装置900。该装置900可以包括:第一获取单元901、第一压缩单元902、第二压缩单元903、第二获取单元904和发送单元905。其中,第一获取单元901用于执行图2所示实施例中的S1。第一压缩单元902用于执行图2所示实施例中的S2。第二压缩单元903用于执行图2所示实施例中的S3。第二获取单元904用于执行图2所示实施例中的S4。发送单元905用于执行图2所示实施例中的S5。具体的,
第一获取单元901,用于获取待压缩的目标数据;
第一压缩单元902,用于依次将目标数据中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果;其中,L为解压引擎解压出口最大带宽长度;l为解压引擎解压入口最大带宽长度;
第二压缩单元903,用于依次将l变更为l1至ln,重复调用第一压缩单元902依次将目标数据中L字节长度的数据块分别压缩为l1至ln字节长度的压缩数据块,得到n个压缩结果;其中,ln为大于1且小于L的正整数;n为大于1的正整数;
第二获取单元904,用于获取n个压缩结果中数据总长度最小的压缩结果对应的压缩数据块长度;
发送单元905,用于将压缩数据块长度存储至压缩信息中,并向解压引擎发送压缩信息和数据总长度最小的压缩结果。
在本实施例的一种实现方式中,第一压缩单元902包括:
第一压缩子单元,用于依次对目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第一压缩结果;
第一添加子单元,用于当存在第一压缩结果的字节长度小于所述l时,在第一压缩结果之后添加数值0作为第一附加数据,使得第一压缩结果和所述第一附加数据的字节长度之和达到l,并将第一压缩结果和第一附加数据共同作为更新后的第一压缩结果;
第一获得子单元,用于将所有无需更新的第一压缩结果和所有更新后的第一压缩结果按照先后顺序进行排序,得到一个压缩结果。
在本实施例的一种实现方式中,第一压缩单元902包括:
第二压缩子单元,用于依次对目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第二压缩结果;
第二获得子单元,用于当存在第二压缩结果的字节长度等于l时,则将所有第二压缩结果按照先后顺序进行排序,得到一个压缩结果。
在本实施例的一种实现方式中,第一压缩单元902包括:
第三压缩子单元,用于依次对目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第三压缩结果;
去除子单元,用于当存在第三压缩结果的字节长度大于l时,将目标数据中L字节长度的数据块中部分尾部数据去除,得到去除尾部数据之后的长度小于L的数据块;
第四压缩子单元,用于对去除尾部数据之后的长度小于L的数据块进行压缩,得到第四压缩结果;
第二添加子单元,用于当第四压缩结果的字节长度小于l且第四压缩结果的字节长度再加上一个编码长度大于所述l时,在第四压缩结果之后添加无效标志作为第二附加数据,使得第四压缩结果和第二附加数据的字节长度之和达到l,并将第四压缩结果和第二附加数据作为更新后的第三压缩结果;
第三获得子单元,用于将所有无需更新的第三压缩结果和所有更新后的第三压缩结果按照先后顺序进行排序,得到一个压缩结果。
在本实施例的一种实现方式中,第二获取单元904包括:
获取子单元,用于获取n个压缩结果中每一压缩结果各自包含的所有压缩数据块相加后的数据总长度;
确定子单元,用于从每一压缩结果各自包含的所有压缩数据块相加后的数据总长度中,确定数据总长度最小的压缩结果对应的压缩数据块长度。
综上,本实施例提供的一种数据压缩装置,在进行数据压缩时,压缩引擎首先获取待压缩的目标数据;然后依次将目标数据中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果;其中,L为解压引擎解压出口最大带宽长度;l为解压引擎解压入口最大带宽长度;接着,依次将l变更为l1至ln,重复执行前述压缩步骤,得到n个压缩结果,并获取这n个压缩结果中数据总长度最小的压缩结果对应的压缩数据块长度,进而可以将该压缩数据块长度存储至压缩信息中,并向解压引擎发送该压缩信息和数据总长度最小的压缩结果。可见,由于本申请可以在压缩率不同时,选择了数据总长度最小的压缩结果作为最终的压缩结果并将其对应的压缩数据块长度发送给解压引擎,以便解压引擎可以根据该压缩数据块长度进行解压缩,这样使得在压缩率较高时,解压引擎入口读取的无效数据少,不会降低解压出口带宽利用率,并且,在压缩率较低时,解压引擎入口读取的数据多,解压后基本能保证解压出口在每一时钟周期均可以输出数据,无需对解压结果进行反复的数据移位、拼接,只需进行一次数据拼接操作即可,避免了功耗浪费,从而实现了数据压缩及解压缩的最优化。
为便于更好的实施本申请实施例的上述方案,下面还提供用于实施上述数据接压缩方案的一种相关装置。请参见图10所示,本申请实施例提供的一种数据解压缩装置1000。该装置1000可以包括:第一获取单元1001、第二获取单元1002和解压缩单元1003。其中,第一获取单元1001用于执行图6所示实施例中的S601。第二获取单元1002用于执行图6所示实施例中的S602。解压缩单元1003用于执行图6所示实施例中的S603。具体的,
第一获取单元1001,用于获取压缩引擎发送的待解压缩数据和所述待解压缩数据对应的压缩信息;其中,待解压缩数据为原始数据对应的数据总长度最小的压缩结果;
第二获取单元1002,用于获取压缩信息中的压缩数据块长度;
解压缩单元1003,用于依次将待解压缩数据中长度为压缩数据块长度的数据块进行解压缩,得到解压缩结果。
在本实施例的一种实现方式中,解压缩单元1003包括:
解压缩子单元,用于依次将待解压缩数据中长度为压缩数据块长度的数据块进行解压缩;
输出子单元,用于在对压缩数据块长度的数据块进行解压得到的原始数据块的长度等于L时,停止解压缩操作,输出L长度的原始数据块;或,在对压缩数据块长度的数据块进行解压时,若识别到无效标志时,则停止解压缩操作,输出解压得到的长度小于或等于L的原始数据块;其中,L为解压引擎解压出口最大带宽长度。
综上,本实施例提供的一种数据解压缩装置,在进行数据解压缩时,解压引擎根据压缩数据块长度进行解压缩,可以使得当压缩率较高时,解压引擎入口读取的无效数据少,不会降低解压出口带宽利用率,而当压缩率较低时,解压引擎入口读取的数据多(这是因为压缩结果对应的压缩数据块块长度较大),解压后基本能保证解压出口在每一时钟周期均可以输出数据,无需对解压结果进行反复的数据移位、拼接,只需进行一次数据拼接操作即可,避免了功耗浪费,实现了数据解压缩的最优化。
参见图11,本申请实施例提供了一种数据压缩设备1100,该设备包括存储器1101、处理器1102和通信接口1103,
存储器1101,用于存储指令;
处理器1102,用于执行存储器1101中的指令,执行上述应用于图2所示实施例中的数据压缩方法;
通信接口1103,用于进行通信。
存储器1101、处理器1102和通信接口1103通过总线1104相互连接;总线1104可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图11中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
在具体实施例中,处理器1102用于在进行数据时,压缩引擎获取待压缩的目标数据后依次将其中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果;其中,L和l分别为解压引擎解压出口最大带宽长度和入口最大带宽长度;接着依次将l变更为l1至ln,重复执行前述压缩步骤,得到n个压缩结果,并获取这n个压缩结果中数据总长度最小的压缩结果对应的压缩数据块长度,进而再将该压缩数据块长度存储至压缩信息中,并向解压引擎发送该压缩信息和数据总长度最小的压缩结果。该处理器1102的详细处理过程请参考上述图2所示实施例中S1、S2、S3、S4和S5的详细描述,这里不再赘述。
参见图12,本申请实施例提供了一种数据解压缩设备1200,该设备包括存储器1201、处理器1202和通信接口1203,
存储器1201,用于存储指令;
处理器1202,用于执行存储器1201中的指令,执行上述应用于图6所示实施例中的数据解压缩方法;
通信接口1203,用于进行通信。
存储器1201、处理器1202和通信接口1203通过总线1204相互连接;总线1204可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图12中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
在具体实施例中,处理器1202用于在进行数据解压缩时,解压引擎在获取到压缩引擎发送的待解压缩数据和待解压缩数据对应的压缩信息后,可以先获取压缩信息中的压缩数据块长度;其中,待解压缩数据为原始数据对应的数据总长度最小的压缩结果;然后,依次将待解压缩数据中长度为压缩数据块长度的数据块进行解压缩,得到解压缩结果。该处理器1202的详细处理过程请参考上述图6所示实施例中S601、S602和S603的详细描述,这里不再赘述。
上述存储器1101和存储器1201可以是随机存取存储器(random-access memory,RAM)、闪存(flash)、只读存储器(read only memory,ROM)、可擦写可编程只读存储器(erasable programmable read only memory,EPROM)、电可擦除可编程只读存储器(electrically erasable programmable read only memory,EEPROM)、寄存器(register)、硬盘、移动硬盘、CD-ROM或者本领域技术人员知晓的任何其他形式的存储介质。
上述处理器1102和处理器1202例如可以是中央处理器(central processingunit,CPU)、通用处理器、数字信号处理器(digital signal processor,DSP)、专用集成电路(application-specific integrated circuit,ASIC)、现场可编程门阵列(fieldprogrammable gate array,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。
上述通信接口1103和通信接口1303例如可以是接口卡等,可以为以太(ethernet)接口或异步传输模式(asynchronous transfer mode,ATM)接口。
本申请实施例还提供了一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行上述数据压缩方法和数据解压缩方法。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (23)
1.一种数据压缩方法,其特征在于,所述方法包括:
S1:获取待压缩的目标数据;
S2:依次将所述目标数据中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果;所述L为解压引擎解压出口最大带宽长度;所述l为所述解压引擎解压入口最大带宽长度;
S3:依次将所述l变更为l1至ln,重复执行步骤S2,得到n个压缩结果;所述ln为大于1且小于所述L的正整数;n为大于1的正整数;
S4:获取所述n个压缩结果中数据总长度最小的压缩结果对应的压缩数据块长度;
S5:将所述压缩数据块长度存储至压缩信息中,并向所述解压引擎发送所述压缩信息和所述数据总长度最小的压缩结果。
2.根据权利要求1所述的方法,其特征在于,所述依次将所述目标数据中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果,包括:
依次对所述目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第一压缩结果;
当存在所述第一压缩结果的字节长度小于所述l时,在所述第一压缩结果之后添加数值0作为第一附加数据,使得所述第一压缩结果和所述第一附加数据的字节长度之和达到l,并将所述第一压缩结果和所述第一附加数据共同作为更新后的第一压缩结果;
将所有无需更新的第一压缩结果和所有所述更新后的第一压缩结果按照先后顺序进行排序,得到一个压缩结果。
3.根据权利要求1所述的方法,其特征在于,所述依次将所述目标数据中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果,包括:
依次对所述目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第二压缩结果;
当存在所述第二压缩结果的字节长度等于所述l时,则将所有所述第二压缩结果按照先后顺序进行排序,得到一个压缩结果。
4.根据权利要求1所述的方法,其特征在于,所述依次将所述目标数据中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果,包括:
依次对所述目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第三压缩结果;
当存在所述第三压缩结果的字节长度大于所述l时,将所述目标数据中L字节长度的数据块中部分尾部数据去除,得到去除尾部数据之后的长度小于L的数据块;
对所述去除尾部数据之后的长度小于L的数据块进行压缩,得到第四压缩结果;
当所述第四压缩结果的字节长度小于所述l且所述第四压缩结果的字节长度再加上一个编码长度大于所述l时,在所述第四压缩结果之后添加无效标志作为第二附加数据,使得所述第四压缩结果和所述第二附加数据的字节长度之和达到l,并将所述第四压缩结果和所述第二附加数据作为更新后的第三压缩结果;
将所有无需更新的第三压缩结果和所有所述更新后的第三压缩结果按照先后顺序进行排序,得到一个压缩结果。
5.根据权利要求1所述的方法,其特征在于,所述获取所述n个压缩结果中数据总长度最小的压缩结果对应的压缩数据块长度,包括:
获取所述n个压缩结果中每一压缩结果各自包含的所有压缩数据块相加后的数据总长度;
从所述每一压缩结果各自包含的所有压缩数据块相加后的数据总长度中,确定数据总长度最小的压缩结果对应的压缩数据块长度。
6.一种数据解压缩方法,其特征在于,所述方法包括:
获取压缩引擎发送的待解压缩数据和所述待解压缩数据对应的压缩信息;所述待解压缩数据为原始数据对应的数据总长度最小的压缩结果;
获取所述压缩信息中的压缩数据块长度;
依次将所述待解压缩数据中长度为所述压缩数据块长度的数据块进行解压缩,得到解压缩结果。
7.根据权利要求6所述的方法,其特征在于,所述依次将所述待解压缩数据中长度为所述压缩数据块长度的数据块进行解压缩,得到解压缩结果,包括:
依次将所述待解压缩数据中长度为所述压缩数据块长度的数据块进行解压缩;
在对所述压缩数据块长度的数据块进行解压得到的原始数据块的长度等于L时,停止所述解压缩操作,输出所述L长度的原始数据块;或,在对所述压缩数据块长度的数据块进行解压时,若识别到无效标志时,则停止所述解压缩操作,输出解压得到的长度小于或等于所述L的原始数据块;其中,所述L为解压引擎解压出口最大带宽长度。
8.一种数据压缩和解压缩系统,其特征在于,所述系统包括:压缩引擎和解压引擎;
所述压缩引擎,用于执行:S1:获取待压缩的目标数据;S2:依次将所述目标数据中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果;所述L为解压引擎解压出口最大带宽长度;所述l为所述解压引擎解压入口最大带宽长度;S3:依次将所述l变更为l1至ln,重复执行步骤S2,得到n个压缩结果;所述ln为大于1且小于所述L的正整数;n为大于1的正整数;S4:获取所述n个压缩结果中数据总长度最小的压缩结果对应的压缩数据块长度;S5:将所述压缩数据块长度存储至压缩信息中,并向所述解压引擎发送所述压缩信息和所述数据总长度最小的压缩结果;
所述解压引擎,用于获取所述压缩信息中的压缩数据块长度;依次将所述待解压缩数据中长度为所述压缩数据块长度的数据块进行解压缩,得到解压缩结果。
9.根据权利要求8所述的系统,其特征在于,所述压缩引擎还用于:
依次对所述目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第一压缩结果;
当存在所述第一压缩结果的字节长度小于所述l时,在所述第一压缩结果之后添加数值0作为第一附加数据,使得所述第一压缩结果和所述第一附加数据的字节长度之和达到l,并将所述第一压缩结果和所述第一附加数据共同作为更新后的第一压缩结果;
将所有无需更新的第一压缩结果和所有所述更新后的第一压缩结果按照先后顺序进行排序,得到一个压缩结果。
10.根据权利要求8所述的系统,其特征在于,所述压缩引擎还用于:
依次对所述目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第二压缩结果;
当存在所述第二压缩结果的字节长度等于所述l时,则将所有所述第二压缩结果按照先后顺序进行排序,得到一个压缩结果。
11.根据权利要求8所述的系统,其特征在于,所述压缩引擎还用于:
依次对所述目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第三压缩结果;
当存在所述第三压缩结果的字节长度大于所述l时,将所述目标数据中L字节长度的数据块中部分尾部数据去除,得到去除尾部数据之后的长度小于L的数据块;
对所述去除尾部数据之后的长度小于L的数据块进行压缩,得到第四压缩结果;
当所述第四压缩结果的字节长度小于所述l且所述第四压缩结果的字节长度再加上一个编码长度大于所述l时,在所述第四压缩结果之后添加无效标志作为第二附加数据,使得所述第四压缩结果和所述第二附加数据的字节长度之和达到l,并将所述第四压缩结果和所述第二附加数据作为更新后的第三压缩结果;
将所有无需更新的第三压缩结果和所有所述更新后的第三压缩结果按照先后顺序进行排序,得到一个压缩结果。
12.根据权利要求8所述的系统,其特征在于,所述压缩引擎还用于:
获取所述n个压缩结果中每一压缩结果各自包含的所有压缩数据块相加后的数据总长度;
从所述每一压缩结果各自包含的所有压缩数据块相加后的数据总长度中,确定数据总长度最小的压缩结果对应的压缩数据块长度。
13.根据权利要求8所述的系统,其特征在于,所述解压引擎还用于:
依次将所述待解压缩数据中长度为所述压缩数据块长度的数据块进行解压缩;
在对所述压缩数据块长度的数据块进行解压得到的原始数据块的长度等于L时,停止所述解压缩操作,输出所述L长度的原始数据块;或,在对所述压缩数据块长度的数据块进行解压时,若识别到无效标志时,则停止所述解压缩操作,输出解压得到的长度小于或等于所述L的原始数据块;其中,所述L为解压引擎解压出口最大带宽长度。
14.一种数据压缩装置,其特征在于,所述装置包括:
第一获取单元,用于获取待压缩的目标数据;
第一压缩单元,用于依次将所述目标数据中L字节长度的数据块分别压缩为l字节长度的压缩数据块,得到一个压缩结果;所述L为解压引擎解压出口最大带宽长度;所述l为所述解压引擎解压入口最大带宽长度;
第二压缩单元,用于依次将所述l变更为l1至ln,重复调用第一压缩单元依次将所述目标数据中L字节长度的数据块分别压缩为l1至ln字节长度的压缩数据块,得到n个压缩结果;所述ln为大于1且小于所述L的正整数;n为大于1的正整数;
第二获取单元,用于获取所述n个压缩结果中数据总长度最小的压缩结果对应的压缩数据块长度;
发送单元,用于将所述压缩数据块长度存储至压缩信息中,并向所述解压引擎发送所述压缩信息和所述数据总长度最小的压缩结果。
15.根据权利要求14所述的装置,其特征在于,所述第一压缩单元包括:
第一压缩子单元,用于依次对所述目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第一压缩结果;
第一添加子单元,用于当存在所述第一压缩结果的字节长度小于所述l时,在所述第一压缩结果之后添加数值0作为第一附加数据,使得所述第一压缩结果和所述第一附加数据的字节长度之和达到l,并将所述第一压缩结果和所述第一附加数据共同作为更新后的第一压缩结果;
第一获得子单元,用于将所有无需更新的第一压缩结果和所有所述更新后的第一压缩结果按照先后顺序进行排序,得到一个压缩结果。
16.根据权利要求14所述的装置,其特征在于,所述第一压缩单元包括:
第二压缩子单元,用于依次对所述目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第二压缩结果;
第二获得子单元,用于当存在所述第二压缩结果的字节长度等于所述l时,则将所有所述第二压缩结果按照先后顺序进行排序,得到一个压缩结果。
17.根据权利要求14所述的装置,其特征在于,所述第一压缩单元包括:
第三压缩子单元,用于依次对所述目标数据中L字节长度的数据块进行压缩,得到各个数据块对应的第三压缩结果;
去除子单元,用于当存在所述第三压缩结果的字节长度大于所述l时,将所述目标数据中L字节长度的数据块中部分尾部数据去除,得到去除尾部数据之后的长度小于L的数据块;
第四压缩子单元,用于对所述去除尾部数据之后的长度小于L的数据块进行压缩,得到第四压缩结果;
第二添加子单元,用于当所述第四压缩结果的字节长度小于所述l且所述第四压缩结果的字节长度再加上一个编码长度大于所述l时,在所述第四压缩结果之后添加无效标志作为第二附加数据,使得所述第四压缩结果和所述第二附加数据的字节长度之和达到l,并将所述第四压缩结果和所述第二附加数据作为更新后的第三压缩结果;
第三获得子单元,用于将所有无需更新的第三压缩结果和所有所述更新后的第三压缩结果按照先后顺序进行排序,得到一个压缩结果。
18.根据权利要求14所述的装置,其特征在于,所述第二获取单元包括:
获取子单元,用于获取所述n个压缩结果中每一压缩结果各自包含的所有压缩数据块相加后的数据总长度;
确定子单元,用于从所述每一压缩结果各自包含的所有压缩数据块相加后的数据总长度中,确定数据总长度最小的压缩结果对应的压缩数据块长度。
19.一种数据解压缩装置,其特征在于,所述装置包括:
第一获取单元,用于获取压缩引擎发送的待解压缩数据和所述待解压缩数据对应的压缩信息;所述待解压缩数据为原始数据对应的数据总长度最小的压缩结果;
第二获取单元,用于获取所述压缩信息中的压缩数据块长度;
解压缩单元,用于依次将所述待解压缩数据中长度为所述压缩数据块长度的数据块进行解压缩,得到解压缩结果。
20.根据权利要求19所述的装置,其特征在于,所述解压缩单元包括:
解压缩子单元,用于依次将所述待解压缩数据中长度为所述压缩数据块长度的数据块进行解压缩;
输出子单元,用于在对所述压缩数据块长度的数据块进行解压得到的原始数据块的长度等于L时,停止所述解压缩操作,输出所述L长度的原始数据块;或,在对所述压缩数据块长度的数据块进行解压时,若识别到无效标志时,则停止所述解压缩操作,输出解压得到的长度小于或等于所述L的原始数据块;其中,所述L为解压引擎解压出口最大带宽长度。
21.一种数据压缩设备,其特征在于,所述设备包括存储器、处理器;
所述存储器,用于存储指令;
所述处理器,用于执行所述存储器中的所述指令,执行权利要求1-5任意一项所述的方法。
22.一种数据解压缩设备,其特征在于,所述设备包括存储器、处理器;
所述存储器,用于存储指令;
所述处理器,用于执行所述存储器中的所述指令,执行权利要求6-7任意一项所述的方法。
23.一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得所述计算机执行以上权利要求1-7任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010203201.7A CN113497627A (zh) | 2020-03-20 | 2020-03-20 | 一种数据压缩和解压缩方法、装置及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010203201.7A CN113497627A (zh) | 2020-03-20 | 2020-03-20 | 一种数据压缩和解压缩方法、装置及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113497627A true CN113497627A (zh) | 2021-10-12 |
Family
ID=77994116
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010203201.7A Pending CN113497627A (zh) | 2020-03-20 | 2020-03-20 | 一种数据压缩和解压缩方法、装置及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113497627A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113704206A (zh) * | 2021-10-29 | 2021-11-26 | 苏州浪潮智能科技有限公司 | 一种元数据的处理方法、装置、电子设备及存储介质 |
CN114296643A (zh) * | 2021-12-16 | 2022-04-08 | 杭州海康威视数字技术股份有限公司 | 一种数据处理方法及装置 |
-
2020
- 2020-03-20 CN CN202010203201.7A patent/CN113497627A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113704206A (zh) * | 2021-10-29 | 2021-11-26 | 苏州浪潮智能科技有限公司 | 一种元数据的处理方法、装置、电子设备及存储介质 |
CN113704206B (zh) * | 2021-10-29 | 2022-02-22 | 苏州浪潮智能科技有限公司 | 一种元数据的处理方法、装置、电子设备及存储介质 |
CN114296643A (zh) * | 2021-12-16 | 2022-04-08 | 杭州海康威视数字技术股份有限公司 | 一种数据处理方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10644721B2 (en) | Processing core data compression and storage system | |
CN102970043B (zh) | 一种基于gzip的压缩硬件系统及其加速方法 | |
CN103997346B (zh) | 一种基于流水线的数据匹配方法和装置 | |
CN110784225A (zh) | 数据压缩、解压方法及相关装置、电子设备、系统 | |
US11973519B2 (en) | Normalized probability determination for character encoding | |
US20220231698A1 (en) | Near-storage acceleration of dictionary decoding | |
CN108287877B (zh) | 一种rib渲染压缩文件fpga压缩/解压缩系统及硬件解压方法 | |
CN113497627A (zh) | 一种数据压缩和解压缩方法、装置及系统 | |
CN112003814B (zh) | 行情数据处理方法、装置、终端设备及存储介质 | |
CN106685429B (zh) | 整数压缩方法及装置 | |
CN110943744A (zh) | 数据压缩、解压缩以及基于数据压缩和解压缩的处理方法及装置 | |
CN111507465A (zh) | 一种可配置的卷积神经网络处理器电路 | |
CN113272854A (zh) | 利用高级互连技术加速ai训练的方法和系统 | |
CN111008691B (zh) | 一种权值和激活值都二值化的卷积神经网络加速器架构 | |
CN116192154B (zh) | 数据压缩及数据解压方法、装置、电子设备、芯片 | |
US9455742B2 (en) | Compression ratio for a compression engine | |
CN109889204A (zh) | 一种fpga及其压缩数据的方法、加速卡 | |
CN100551066C (zh) | 编码器及自适应算术编码的实现方法及装置 | |
CN110569970A (zh) | 一种应用于卷积神经网络中硬件加速器的数据传输方法 | |
CN113495669B (zh) | 一种解压装置、加速器、和用于解压装置的方法 | |
CN116566396A (zh) | 数据压缩方法、装置、存储介质、设备集群及程序产品 | |
CN212873459U (zh) | 一种用于数据压缩存储的系统 | |
WO2023237121A1 (zh) | 一种数据处理方法、装置及相关设备 | |
WO2021237518A1 (zh) | 数据存储的方法、装置、处理器及计算机存储介质 | |
CN118100955A (zh) | 一种用于对压缩数据进行并行解压的预处理的方法 |
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 |