文摘
随着红外(工业革命)4.0,传感器在物联网的传播(物联网)可能产生大量的数据,这将挑战存储和网络带宽有限的传感器。因此,大数据压缩的研究是有价值的领域的传感器。一个问题是如何有效地压缩长河中数据的有限内存的一个传感器。保持性能,传统的压缩技术有治疗数据流规模小而无能,这将降低压缩比。为了解决这个问题,本文提出一种block-split编码算法命名为“CZ-Array算法”和实现共享软件名为“ComZip。“CZ-Array可以使用一个相对较小的数据窗口覆盖一个可配置的大规模,这有利于压缩比。它快速的时间复杂度O (<年代pan class="nowrap"> )年代pan>,适合大数据压缩。实验结果表明,与CZ-Array ComZip可以获得一个更好的比gzip压缩比,lz4, bzip2,和p7zip多个流数据压缩,它也有一个称职的速度在这些通用数据压缩软件。此外,CZ-Array简洁,符合传感器的硬件并行实现。
<年代pan class="end-abs">1。介绍
随着红外(工业革命)4.0和下面的快速扩大物联网(物联网),大量的传感器可以在各个领域,这将产生大量的数据。4.0红外的灵魂,物联网与智能决策和控制依赖于这些有价值的数据。但传播传感器的智能系统数据也带来问题,特别是在WSN(无线传感器网络)和宝贵的带宽。由于有限的存储容量和网络带宽,GBs或TBs数据传感器在物联网使一个巨大的挑战。
数据压缩是一个可取的办法减少存储消耗,加快交通网络。在实践中,流数据被广泛用于支持大数据量超过最大存储一个传感器。例如,传感器与HD(高清)相机可以处理的视频数据流,尽管小内存。在大多数情况下,很多传感器在同一区可能产生类似的数据,可以收集和压缩流,然后传输到后端云平台。
本文关注的是传感器的压缩计算严格要求低消费,快速编码,和节约能源。这些特殊要求排除大部分不压缩算法。我们注意到无损压缩,因为它是一般。即使是有损压缩系统通常包含一个熵编码器作为终端设备,这取决于无损压缩。例如,在图像压缩、DCT(离散余弦变换)算法(1)需要无损压缩。一些有损压缩算法可以避免熵编码器,如圣言(奇异值分解)算法(2),但他们通常消耗更多的计算资源和能源比无损压缩。
一个问题是关于有限记忆长河下各个传感器的数据。传感器必须压缩gb的数据或更多,而传感器只有MBs的RAM(随机存取内存)或更少。在大多数传统的压缩算法,压缩率取决于数据窗口的大小,内存的容量是有限的。保持性能,传统技术把数据流规模小而无能,这将降低压缩比。
例如,2 MB的数据窗口看不到2 MB的流数据一次;因此,压缩算法不能合并数据内外这个窗口,即使他们是相似的和可压缩。窗外规模限制的压缩率。不幸的是,由于有限的硬件性能和能耗的传感器,很难扩大长河中数据压缩的数据窗口。
此外,物联网中的多个数据流是常见的,如双摄像头视频数据也推出,这些流可能冗余数据,应该被压缩。但自从小的数据窗口能看到一点点流的一部分,它怎么能看到更多流,这样就可以合并吗?
在我们之前的论文中,我们设计和升级压缩格式命名“CZ格式”可以支持1 TB的数据窗口(或更大)3,4),它在我们的压缩软件名为“ComZip实现。“但传感器的RAM仍然限制了数据窗口大小。并使用闪存来扩展数据窗口是不好的,因为压缩速度会明显下降。
解决问题的长河中数据压缩和数据窗口大小有限,本文提出一种block-split编码算法在ComZip“CZ-Array算法”,并实现它。CZ-Array算法具有以下特点:<年代pan class="list">(1)年代pan>它将数据流分为块和重建的时间复杂度O (<年代pan class="nowrap">
)年代pan>所以数据窗口可以覆盖更大的范围以适应大数据压缩年代pan>(2)年代pan>它构建一组匹配链接加快LZ77压缩算法(5从O(),降低了时间复杂度<年代vg height="8.8423pt" id="M3" style="vertical-align:-0.2064009pt" version="1.1" viewbox="-0.0498162 -8.6359 11.0475 8.8423" width="11.0475pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
我们做一些实验平台x86/64和手臂(先进的RISC机器),比较之间的数据压缩效率与CZ-Array ComZip, gzip、bzip2, p7zip lz4。实验结果表明,与CZ-Array ComZip可以获得最好的压缩比在这些通用数据压缩软件的多个流数据压缩,和它也有主管速度。此外,算法分析推断CZ-Array简洁,符合传感器的硬件并行实现。
进一步的实验中,我们在网站上提供2版本的ComZip: Ubuntu Linux (x86/64平台)和Raspbian (ARM平台)。其他研究人员可以下载它们http://www.28x28.com: 81 / doc / cz_array.html。
本文的其余部分的结构如下:
部分2表示传感器的长河中数据压缩问题。部分3介绍了CZ-Array编码的算法。部分4分析CZ-Array算法的复杂性。实验结果给出了部分5。结论给出了部分6。
2。传感器的长河中数据压缩问题
视频/音频或其他特殊传感器在物联网可以生成长河中数据,但数据传输的瓶颈,存储和计算网络的传感器需要消除。数据压缩满足这个需求。图1显示了一个典型的场景在网络轻和重传感器,在长河中生成的数据。
这个网络有很多轻量级节点情况和生成长河中数据。因为他们有有限的能量、存储容量和计算资源,他们既不能保持数据在本地也不能让强大的压缩。与此同时,几重网络中的节点可以收集和压缩数据,以减少长途带宽,然后传输到后端云平台。云平台有足够的资源存储、减压和分析数据。
在我们之前的论文,我们已经讨论了沉重的大数据压缩和加密网络中传感器节点(4,6),但如果重节点压缩长河中数据,我们仍然有问题有限的内存,能源消耗,速度和压缩比。本文主要关注以下问题:<年代pan class="list">(1)年代pan>有限的数据窗口大小;如何覆盖更大的范围来看到更多数据流到一个更好的压缩比?年代pan>(2)年代pan>保持压缩比基本不变;如何提高压缩算法的速度?年代pan>
在我们之前3]和[4),我们已经表明,一个较大的数据窗口可以获得更好的压缩比。在本文中,我们仍然使用相同的压缩比的定义如下:<年代pan class="equation_break" id="EEq1">
和<年代vg height="8.68572pt" id="M7" style="vertical-align:-0.0498209pt" version="1.1" viewbox="-0.0498162 -8.6359 10.095 8.68572" width="10.095pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
压缩算法可以合并相似的数据片段在一个数据窗口。因此,一个较大的数据窗口可以看到更多的合并数据和有更多的机会。但是数据窗口大小容量的内存是有限的。尽管在图1云平台有足够的RAM对于大型数据窗口,一个典型的heavy-node传感器目前只有MBs的RAM。使用VM(虚拟内存)扩大数据窗口不够好,因为闪存比内存慢得多。
此外,一个沉重的节点可能从不同的轻量级节点收集数据流,流可能有类似的数据片段。但有一个数据窗口能看到不止一个流更多的合并机会吗?
对于第二个问题,压缩速度传感器是非常重要的,尤其是重节点。GBs的流数据必须被压缩,而传感器的计算资源是有限的。减少数据窗口大小加速计算不是一个好方法,因为压缩比沉明显,再次遇到了第一个问题。
来解决这个问题,我们需要检查有关工作主要在传感器和流数据压缩。
在[3]和[4),我们已经讨论了当前无损压缩的数学模型和方法可分为3类:<年代pan class="list">(1)年代pan>压缩基于概率和统计:典型的算法在这个类是霍夫曼和算术编码(7]。数据窗口大小几乎不能影响等一类压缩的速度年代pan>维护的统计数据压缩,霍夫曼编码的时间复杂度是O(磅<年代pan class="nowrap">
)年代pan>和传统的算术编码是O (<年代pan class="nowrap">
)。年代pan>
是符号的编码量,如256个字符和索引码字在某些LZ算法。O (<年代pan class="nowrap">
)年代pan>不够快,但是目前的算术编码算法进行了优化并达成O(磅吗<年代pan class="nowrap">
),年代pan>包括在ComZip [3]。年代pan>(2)年代pan>基于字典的压缩索引:典型算法在该类LZ系列(5),如LZ77和LZ78 /降落区年代pan>实现字符串匹配的时间复杂度传统LZ77 LZ78和降落区编码是O (<年代vg height="8.8423pt" id="M16" style="vertical-align:-0.2064009pt" version="1.1" viewbox="-0.0498162 -8.6359 11.0475 8.8423" width="11.0475pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
传统BWT编码的时间复杂度是O (<年代pan class="nowrap"> ),年代pan>这是太慢了。但目前BWT算法优化,达到O (<年代pan class="nowrap"> ),年代pan>包括在ComZip CZ-BWT算法(6]。
此外,我们使用一种新方法将数据流分割成块和重建的时间复杂度O (<我>N我>)。这是BWT和MTF / RLE,但这是另一种提高压缩比的数据窗口。本文作为CZ-Array算法的一部分。
米TF和RLE简洁,易于实现,但其压缩比当前压缩领域的竞争力。为了达到更好的压缩比和性能,目前流行的压缩软件通常结合不同的压缩模型和方法。表1流行的压缩软件的特点和ComZip列表。
专注于压缩比和速度的平衡,本文忽略了一些现有的方法,如MTF, RLE, PPMd [10),和PAQ过低压缩比和速度。
在本文中,术语“数据窗口”指的是不同的在每个压缩算法的数据结构。如果软件结合了多个数据窗口,我们以其瓶颈窗口为重点。表2在典型的压缩算法显示了数据窗口。
扩大的数据窗口,提高性能,研究人员尝试各种方式。每个压缩类都有一个不同的算法优化。如前所述,ComZip也保持了最优算法的3类,但每一次我们不能专注于太多的点。在[6),我们的时间复杂性传统BWT相比,BWT与sa) (11],与GSACA BWT [12),和CZ-BWT当前BWT研究。
研究压缩与AI(人工智能)是一个充满希望的方向。目前的研究主要是围绕一些特殊领域,如图像压缩的神经网络(13- - - - - -15]。然而,这仍然是一个问题对于人工智能实现一般领域无损的压缩效率,尤其是在计算资源有限的传感器。论述了通用压缩,和一些比人工智能算法更为实用。我们可以继续学习人工智能算法的为我们的未来的工作。
压缩的性能是很重要的传感器,所以并行计算的研究和硬件加速如ASIC(专用集成电路)和FPGA(现场可编程门阵列)[16- - - - - -18是有价值的。研究的一个热点是GPU(图形处理器)加速度(19- - - - - -21]。但是当我们提到的4),问题是并行线程的数据窗口分割成小片,然后降低压缩比。确切地说,本文关心的数据窗口大小和规模。
在[6),我们已经考虑CZ-BWT简洁的硬件设计,本文也认为CZ-Array的硬件实现。扩大规模的数据窗口,CZ-Array遵循突袭的命题(独立磁盘冗余阵列)[22),以前用于存储容量、性能和容错。提高压缩速度、CZ-Array参考来自lz4 [17),一个基于LZ77当前最快的LZ算法。RAID和lz4都简洁,但突袭不是用于压缩之前,和lz4小数据窗口和低压缩比。
我们安排我们的工作在数据编码的研究。表3显示了在我们的工作的关系。我们使用相同的平台:ComZip软件系统。ComZip与未揭露的部分是一个复杂的平台各种编码的研究问题,它仍在发展中。本文描述清楚,每一次我们只能关注几点。所以每篇论文显示不同的细节,和我们称之为专注A, B, C, D。
图2显示了这些ComZip集中在平台。我们可以看到,每篇论文的数据有不同的表象ComZip因为不同的问题。通常情况下,本文侧重于数组编码,所以绿色箭头在图2指出ComZip细节看不见的的数据3,4,6]。此外,本文比较了相似的焦点结构C和D:匹配链接建设者(MLB)。尽管有这些mlb CZ-BWT [6)和CZ-Array有不同的功能中,我们将介绍用一个类似的结构,可简化硬件设计和节省成本。
3所示。CZ-Array编码
3.1。CZ-Array的概念
压缩软件ComZip使用并行管道命名为“CZ管道。“我们已经介绍了CZ编码框架管道(4,6),扭转框架CZ解码管道。图3是相同的编码框架,所不同的是,CZ-Array单位是嵌入式,包括<年代pan class="list">(1)年代pan>巴布(块数组构建器),它可以组合多个数据流为一个统一的数组数据流和扩大规模的窗口年代pan>(2)年代pan>大联盟(匹配链接生成器),它可以改善LZ77和BWT编码的速度年代pan>
CZ-Array结合以下方法来掩盖一个较大的数据窗口规模和速度压缩:<年代pan class="list">(1)年代pan>CZ-Array使用巴布多个数据流混合到一个统一的阵列流的多个数据流中可以看到相同的窗口年代pan>如图4一个数据流,无论多长时间,压缩单元只能看到部分在数据窗口中。传统的压缩算法在图4(一)必须把流连续,这意味着流队列的窗外规模和无形的。一个并行的压缩算法在图4 (b)可以把多个流加快,但是窗口必须分成部分,和不同部位不能看到对方;因此,规模缩小的窗口。年代pan>规模在图的窗口4 (c)不是缩小而CZ-Array对多个流在同一个窗口中。这种情况下意味着更好的压缩比,因为类似的部分不同的流可能偶然和匹配。这样的机会不会出现在图4 (b)。年代pan>多个流混合到一个统一的流由巴布快。我们得到了提示从突袭22),实现了巴布领域的无损压缩。在巴布,流分成块,块重新安排在不同的序列,然后传输到数据窗口作为一种新的流。年代pan>(2)年代pan>CZ-Array使用MLB BWT或LZ77编码管道,这样可以优化的编码速度年代pan>美国职棒大联盟,可以创建匹配链接BWT之前或LZ77编码。如图5匹配有利于快速链接位置没有byte-searching数据流。图5(一个)显示了基本的匹配链接,用于CZ-BWT。在[6),我们称之为“桶排序链接。“图5 (b)显示了无尽的匹配链接,用于LZ77图所示5 (c)。年代pan>从图5 (c)我们可以看到,反转字符串“ZYXCBA…”是当前目标编码。<年代vg height="9.49473pt" id="M23" style="vertical-align:-0.2063999pt" version="1.1" viewbox="-0.0498162 -9.28833 6.66314 9.49473" width="6.66314pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
(一)传统数据窗口年代trong>
(b)传统的并行数据窗口年代trong>
(c) CZ-Array数据窗口年代trong>
(一)基本匹配链接年代trong>
(b)使无尽的匹配关系年代trong>
(c) LZ77字符串匹配年代trong>
3.2。巴布编码
巴布受益于RAID的暗示,尽管他们是不同的。图6显示了raid - 0和巴布的编码的最简单的场景。在图6(一),我们假设系列文件写入空raid - 0。这个文件数据流分成块,然后写入不同的磁盘的RAID。在图6 (b),这些磁盘块读取,然后叠成一个连续的文件。
(一)raid - 0写作年代trong>
(b) raid - 0阅读年代trong>
(c)巴布编码年代trong>
(d)巴布解码年代trong>
在图6 (c),我们假设所有的数据流都没完没了的或具有相同的长度。他们分成块,组织作为一个整体数组,数组,然后安排到一个统一的流在巴布。在图6 (d),我们看到了逆转的过程:一个统一的阵列流恢复成多个数据流。
如raid - 5可以使用<年代pan class="inline_break">
块(<年代vg height="6.1673pt" id="M27" style="vertical-align:-0.2063904pt" version="1.1" viewbox="-0.0498162 -5.96091 6.6501 6.1673" width="6.6501pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
在图6,RAID和巴布的编码算法可以很容易地确定数据块的适当的顺序,因为情况下很简单,块大小是一样的。但在实践中,数据流是更复杂的,如不同长度的多个流,突然结束,和新开始流。因此,巴布编码算法对这些情况。
在BAB编码过程中,我们定义的<年代vg height="6.1673pt" id="M34" style="vertical-align:-0.2063904pt" version="1.1" viewbox="-0.0498162 -5.96091 6.6501 6.1673" width="6.6501pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
图6显示最简单的情况<年代pan class="inline_break">
。年代pan>但在实践中,数据窗口大小有限,所以这一点<年代vg height="6.1673pt" id="M40" style="vertical-align:-0.2063904pt" version="1.1" viewbox="-0.0498162 -5.96091 6.6501 6.1673" width="6.6501pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
如图7,我们把情况分成2例来简化算法设计:<年代pan class="list">(1)年代pan>案例1:<我>流我>(<我>我我>]。<我>长度我>和<年代vg height="8.68572pt" id="M42" style="vertical-align:-0.0498209pt" version="1.1" viewbox="-0.0498162 -8.6359 9.2729 8.68572" width="9.2729pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
(一)案例1:已知流数量和长度年代trong>
(b)案例2:未知的流量长度年代trong>
不同的例图7导致不同的块结构。一块在图7(一)包含纯数据,而在图块7 (b)表中所示的结构吗4前,一块头载荷数据。我们设计这一块巴布的头提供信息解码算法,以便它可以正确分离流。
关注周围的准确问题压缩比和速度,本文跳过第二种情况和讨论了算法的实现案例1。算法1和2展示案例1的BAB编码和解码。
|
||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
明确的算法描述,实现细节省略。例如,由于每个流长度已知在案例1中,算法1和2只是长度控制理所当然:如果当前流结束时,输入/输出程序会得到实际的数据长度,即使固定块长度<年代vg height="8.68572pt" id="M95" style="vertical-align:-0.0498209pt" version="1.1" viewbox="-0.0498162 -8.6359 7.94191 8.68572" width="7.94191pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3.3。MLB和LZ77编码
大联盟可以加速BWT LZ77编码。我们引入了CZ-BWT编码(6),这实际上包括MLB算法在第一阶段。本文就着重于其他大联盟和LZ77算法编码匹配的链接。
如图5 (b),美国职棒大联盟,可以使用一个桶数组无尽的匹配关系,如“华”链接和“XYZ”链接,然后提供他们LZ77编码器。图5 (c)显示了示例LZ77字符串匹配的编码器。“XYZ”链接后,我们可以看到两个匹配点:4字节匹配和匹配5字节。
关于这些算法所示数据的更多细节8(一个)和8 (b)。有两个阶段在我们LZ77编码:(图8(一个))构建匹配在MLB和(图的链接8 (b))每次匹配链接后发现的最大匹配长度LZ77编码器。所以,输出长度/索引码字来自这些最大匹配长度和相应的匹配点位置。无法找到匹配点时,输出一个字符代码字母。
(一)数据窗口流缓冲区年代trong>
(b) LZ77字符串匹配年代trong>
在图8(一个),数据流及其匹配链接可以是无穷无尽的。但在实践中,数据窗口的内存是有限的传感器。数据流经过时,数据窗口滑流缓冲区,和部分数据的缓冲区将失去信息,这样我们不能按照匹配数据窗口以外的链接。切割的链接是缓慢的,但我们可能只是区分链接指针是否已经超过窗口绑定。
定位数据窗口滑动流缓冲区,我们定义“直”字符串<年代vg height="6.1673pt" id="M97" style="vertical-align:-0.2063904pt" version="1.1" viewbox="-0.0498162 -5.96091 4.9929 6.1673" width="4.9929pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
在[6),我们已经建立了CZ-BWT匹配链接,也称为“桶排序链接。“现在,我们为LZ77构建匹配的链接<我>缓冲区我>。图8显示“XYZ”链接的例子,我们看到3匹配点。256年桶数组<年代up>3年代up>链接标题,链接是无穷无尽的。我们定义链接和标题的结构如下:<年代pan class="equation_break" id="EEq3">
是固定的长度匹配每个匹配点的链接。在图的例子5,<年代pan class="inline_break">
“华”和“XYZ”。<年代vg height="8.8423pt" id="M108" style="vertical-align:-0.2064009pt" version="1.1" viewbox="-0.0498162 -8.6359 3.66193 8.8423" width="3.66193pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
图8 (b)显示了快速字符串匹配的匹配链接。我们可以看到逆转字符串“ZYXCBA…”开始<年代vg height="11.439pt" id="M111" style="vertical-align:-2.15067pt" version="1.1" viewbox="-0.0498162 -9.28833 24.9445 11.439" width="24.9445pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
数据流可能很长或无穷无尽,而流缓冲区是有限的;因此,数据窗口滑动在这个缓冲区将达到边缘buf [<年代vg height="8.98583pt" id="M112" style="vertical-align:-0.3499308pt" version="1.1" viewbox="-0.0498162 -8.6359 32.6866 8.98583" width="32.6866pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
然后,方程(2)改变和扩展成一个一致的模量方程:<年代pan class="equation_break" id="EEq6">
作为<年代pan class="inline_break"> ,年代pan>数据窗口总是占据了一半的流缓冲区,和新鲜的流数据填补另一半。为了简化算法描述,本文隐藏了实现细节方程(6),但理所当然,方程(5)是有效的。
匹配后的链接不够快,需要进一步加速。寻找所有匹配的点沿着链接最大匹配长度消耗太多时间,然而大多数的尝试未能增加匹配的长度。因此,我们提出了一个可配置的参数<我>视线我>控制匹配时间和观察,显然LZ77编码加速,而压缩率略有下降。
算法3显示了MLB编码,包括匹配的链接建设和LZ77编码。我们可以使用一个普通LZ77解码算法没有匹配的链接。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4所示。CZ-Array算法的分析
CZ-Array算法包括巴布编码/解码和MLB编码。MLB解码是不必要的,因为MLB编码只是创建匹配链接加速LZ77编码。我们可以参考raid - 0在BAB编码的分析,我们可以比较LZ77和MLB编码和其他典型的LZ算法在一些流行的压缩软件,如7 - zip / p7zip gzip, lz4。
4.1。时间复杂性
以下4.4.1。巴布编码
在实践中,raid - 0是非常快的,其算法简单。其性能的关键因素<年代vg height="8.8423pt" id="M171" style="vertical-align:-0.2064009pt" version="1.1" viewbox="-0.0498162 -8.6359 11.0475 8.8423" width="11.0475pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
所示的算法1和2和图6,巴布编码类似于raid - 0。不同的是巴布编码与不同长度对多个流,但是这个操作还快,不影响性能。BAB编码的时间复杂度是O (<年代pan class="nowrap"> )。年代pan>我们可以预期实际BAB编码和RAID一样快。
4.1.2。MLB和LZ77编码
所示的算法3和图8,我们可以把算法分为2部分:阶段(a)建立匹配的链接,和阶段(b) LZ77编码匹配链接。
阶段(一)类似于第一阶段的CZ-BWT编码(6]。我们已经讨论了桶排序的时间复杂度是O (<年代pan class="nowrap">
)年代pan>在[6]。<年代vg height="8.8423pt" id="M179" style="vertical-align:-0.2064009pt" version="1.1" viewbox="-0.0498162 -8.6359 11.0475 8.8423" width="11.0475pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
借助匹配链接、阶段(b)比传统LZ77算法快。根据LZ77压缩的原理5)的关键计算LZ77编码字符串匹配,决定了编码速度。传统LZ77编码时间的复杂度O (<年代vg height="8.8423pt" id="M181" style="vertical-align:-0.2064009pt" version="1.1" viewbox="-0.0498162 -8.6359 11.0475 8.8423" width="11.0475pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
gzip的软件也使用匹配链接加快LZ77编码,但每次它跟踪一个链接找到所有匹配点在数据窗口中,所以时间复杂度仍然是O (<年代vg height="8.8423pt" id="M182" style="vertical-align:-0.2064009pt" version="1.1" viewbox="-0.0498162 -8.6359 11.0475 8.8423" width="11.0475pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
我们有一个更快的方式在阶段(b)的算法3。一个可配置的参数<我>视线我>用于控制适用的匹配点的数量在每个链接。然后我们不需要跟踪整个匹配的链接。取<年代pan class="inline_break"> 例如,每次只匹配第一个10分链接检查寻找最大匹配长度。在实践中,我们把<我>视线我>作为一个常数,所以ComZip的时间复杂度(LZ77)编码<年代pan class="inline_break"> 。年代pan>
调查,lz4是最快的一个平行LZ系列的压缩软件。它的最高速度因为每次只检查一个关键点,它充分利用CPU的缓存。然后,我们可以大致认为lz4快速LZ77短匹配链接<年代pan class="inline_break"> 。年代pan>lz4编码的时间复杂度也O (<年代pan class="nowrap"> )。年代pan>
在[6),我们已经讨论了bzip2 (BWT)编码的时间复杂度O (<年代pan class="nowrap"> )。年代pan>
4.2。空间复杂性
4.2.1。准备巴布编码
的内存使用是重要的传感器。所示的算法1和2,巴布编码需要缓冲块和一组数组。块缓冲区空间复杂度O (<年代pan class="nowrap">
)。年代pan>
是块大小。流信息数组空间复杂度O (<年代pan class="nowrap">
)。年代pan>
数组的行数量。但<年代vg height="6.1673pt" id="M193" style="vertical-align:-0.2063904pt" version="1.1" viewbox="-0.0498162 -5.96091 6.6501 6.1673" width="6.6501pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
4.2.2。MLB和LZ77编码
软件gzip 32 KB数据窗口。它需要内存10 N (2 N双窗口缓冲区,4 N匹配链接,和4<我>N我>4<年代vg height="10.1524pt" id="M196" style="vertical-align:-0.04990005pt" version="1.1" viewbox="-0.0498162 -10.1025 6.17869 10.1524" width="6.17869pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
7 - zip和ComZip支持多流并行压缩,和他们也支持大型数据窗口在GB级别。每个线程的7 - zip(降落区)编码需要内存9.5 N(主要为二叉树)。所以,7 - zip(降落区)编码的空间复杂度是O (<年代pan class="nowrap"> )。年代pan>
ComZip需要窗口的内存缓冲区,匹配链接和链接标题。在图8流缓冲区是一个双窗口缓冲区和需要内存2 N,但在ComZip我们优化的动态随机存取存储器的使用需求<年代pan class="nowrap">
。年代pan>匹配的链接需要内存4 N(支持2 GB数据窗口)或5 N(支持512 GB)。链接标题形式与256年一桶数组<年代vg height="12.308pt" id="M203" style="vertical-align:-0.04979992pt" version="1.1" viewbox="-0.0498162 -12.2582 5.247 12.308" width="5.247pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
4.3。压缩比
LZ系列压缩基地字符串匹配。所以的压缩率取决于匹配的机会和最大匹配每个匹配点的长度。如果一个匹配点出去的数据窗口,它不能导致的压缩率。
巴布编码重建数据流,以便多个流中可以看到相同的数据窗口。如果流是相似的,许多有利于压缩比匹配点。但如果流是完全不同的,压缩比会略有降低,如减少数据窗口大小的影响。这些数据中观察实验结果,我们可以推断出一个实验规则:仔细匹配点可能会有更大的匹配长度。
实践中的数据是复杂的,所以我们需要做各种数据实验这一规则建模。本文只需要一个简单的例子来解释这些巴布的效果。根据方程(1)和图4,我们假设<年代vg height="13.8895pt" id="M206" style="vertical-align:-5.36452pt" version="1.1" viewbox="-0.0498162 -8.52498 21.1495 13.8895" width="21.1495pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
是数据窗口大小。当巴布混合<年代vg height="6.1673pt" id="M209" style="vertical-align:-0.2063904pt" version="1.1" viewbox="-0.0498162 -5.96091 6.6501 6.1673" width="6.6501pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
我们把<年代vg height="8.8423pt" id="M212" style="vertical-align:-0.2064009pt" version="1.1" viewbox="-0.0498162 -8.6359 11.0475 8.8423" width="11.0475pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
方程(9)推断,压缩比将略有减少,如果流块数组中是完全不同的。但如果流是相似的,作为一个简单的例子我们可以假设<年代vg height="14.0004pt" id="M214" style="vertical-align:-5.3645pt" version="1.1" viewbox="-0.0498162 -8.6359 21.4888 14.0004" width="21.4888pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
方程的影响(9)和(10)聚在一起,结果将显示的主要因素方程(10),推断的压缩率就会增加。
我们可能仍然使用方程(7)作为一个例子来估计的压缩率数据窗口大小的限制,但我们也应该考虑压缩格式的影响。gzip的32 KB的窗口是远离7 - zip的1 GB数据窗口,但gzip的长度/索引代码字母很短,这有助于提高压缩比。毕竟,32 KB的规模太小,我们可能期望的gzip压缩比在我们的实验中是最低的。但结果显示lz4是最低的。
Lz4是专为高速并行压缩。每个线程都有一个独立的64 KB数据压缩窗口。但是到达的时间复杂度O (<年代pan class="nowrap"> ),年代pan>每次在LZ编码它只有一个匹配点,将失去的其余部分匹配机会窗口。作为对比,gzip尝试所有的匹配点32 KB的窗口,它还有霍夫曼编码,所以它的压缩比是高于lz4。
尽管bzip2使用BWT编码代替LZ系列,我们可能仍然使用方程的例子(7),得到了实验结果的支持。因为数据窗口的gzip、lz4和bzip2都小,压缩比是没有竞争力的。如果他们使用更大的窗户,他们的压缩速度会慢下来。
7- - - - - -- - - - - - - - - -zip和ComZip大型数据窗口的优势在GB的水平,所以他们的压缩比很高。和他们都支持多流并行高速的压缩。但是我们应该考虑多个线程的内存消耗。如果一个传感器的内存是有限的,它仍然可以支持高压缩比的大窗户吗?
像lz4的行为,7 - zip还使用独立的并行线程的数据窗口。正如上面提到的,7 - zip(降落区)编码空间复杂度O (<年代pan class="nowrap"> )。年代pan>例如,如果它使用<年代pan class="inline_break"> 线程,每个线程使用<年代pan class="inline_break"> MB的窗口,窗口大小<年代pan class="inline_break"> 。年代pan>另一方面,如果总窗口大小的内存限制<年代pan class="inline_break"> MB,每个线程只是独立窗口<年代pan class="inline_break"> MB。因此,并行7 - zip编码的压缩比降低<年代pan class="nowrap"> 。年代pan>
ComZip股票数据窗口所有并行线程。如果总窗口大小<年代pan class="inline_break">
MB,每个(LZ77)编码线程可以充分利用<年代vg height="8.55521pt" id="M225" style="vertical-align:-0.2063904pt" version="1.1" viewbox="-0.0498162 -8.34882 18.8898 8.55521" width="18.8898pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
此外,ComZip (LZ77)编码的时间复杂度O (<年代pan class="nowrap"> ),年代pan>这意味着它有潜力扩大的数据窗口更高的压缩比,没有明显的快速速度损失。作为对比,7 - zip(降落区)编码的时间复杂度O (<年代pan class="nowrap"> )。年代pan>
ComZip使用<我>视线我>控制适用的高速度的匹配点的数量和跳过匹配链接余数。这将略有降低压缩比,但我们可以扩大<年代vg height="8.8423pt" id="M228" style="vertical-align:-0.2064009pt" version="1.1" viewbox="-0.0498162 -8.6359 11.0475 8.8423" width="11.0475pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
表5显示了CZ-Array的比较和其他LZ / BWT编码这些流行的压缩软件。
4.4。硬件设计的复杂性
硬件加速是有价值的对于计算资源有限的传感器。CZ-Array的算法,包括巴布和MLB编码、简洁的硬件实现。
如图6,巴布和RAID编码是一样的。在实践中,磁盘阵列控制器的硬件成熟和迅速,这可能会对巴布的硬件实现。图9显示了巴布的主要硬件设计。编码器使用多路复用器将数据流,和译码器使用一个信号分离器将阵列流。蓄电池计数时钟。当一块输出,多路复用器/解复用器将切换到下一个数据流。
(一)编码器年代trong>
(b)译码器年代trong>
这仅仅是主要的设计,可以把数据流具有相同的长度。算法的实现1和2需要额外的控制逻辑电路的情况。
图10显示了大联盟的主要硬件设计。清晰地展示设计,我们使用3块RAM。但在实践中,我们可以使用同一块内存和分成3个区域的数据地址。这也是主要的设计和算法的实现3阶段(一)需要额外的详细设计。例如,这种设计不能停止和重启的蓄电池时数据窗口。
5。实验结果
在[3,4,6),我们已经做了一些实验来比较ComZip和其他压缩软件,但它们在不同版本、不同情况下。本文主要关注CZ-Array和比较ComZip p7zip (7 - zip的Linux版本),bzip2, lz4, gzip。这些压缩软件很受欢迎,和很多其他的压缩软件与他们相比。我们可能只是与他们比较ComZip可以估计因为与他人比较。
在本文中,我们使用的参数“9”gzip和lz4获得最大压缩比。对于ComZip本身,我们使用<年代pan class="inline_break"> 测试BAB编码,然后使用<年代pan class="inline_break"> 模拟ComZip没有巴布。这是可行的通过修改参数配置文件中的“列”“cz.ini”。我们也使用<年代pan class="inline_break"> 和<年代pan class="inline_break"> MB通过修改参数“视觉”和“集群”。
我们发现4公共文件模拟数据流,并感谢OpenWRT项目的开发者。表6显示这些文件。他们可以从下载http://downloads.openwrt.org/
本文的实验硬件平台:2日x86/64和手臂。他们的表演可以提供未来和当前大量传感器节点的引用。Linux操作系统的实验平台。我们仍然在网站上提供ComZip,但是港口变成81。研究人员可以用它来做更多的实验与新数据。它可以从下载http://www.28x28.com: 81 / doc / cz_array.html
5.1。x86/64平台上测试
这个平台是一种常见的台式电脑使用以下设备:AMD Ryzen 2700 x 8核和16-thread CPU, 64 GB DDR4内存,250 GB的SSD(固态硬盘)和Ubuntu Linux 16.04 (x64)。我们认为这台电脑是未来高端移动传感器,因为承运人的电机可以提供足够的能量。软件版本是ComZip v20180421 (64 b), p7zip v16.02, bzip2 v1.0.6, lz4 v1.8.3, gzip v1.6。,提高匹配的效率链接,ComZip用途<年代pan class="inline_break"> 在这个实验中,这意味着斗阵图8与26 b匹配字符串而不是24 b。
表7和图11显示压缩文件大小的关系<年代vg height="14.1101pt" id="M250" style="vertical-align:-5.4742pt" version="1.1" viewbox="-0.0498162 -8.6359 22.8132 14.1101" width="22.8132pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
表8和图12显示和压缩/解压时间之间的关系<年代pan class="nowrap"> 。年代pan>图12隐藏了解压时间,因为我们还没有优化ComZip的减压。当前减压程序只是验证ComZip的压缩算法是正确的,所以它可能会低于其他软件。我们首先关注压缩性能,优化的减压ComZip是我们未来的工作。
在图11和表7,我们观察到p7zip (<年代pan class="inline_break">
MB)压缩率最高<年代pan class="nowrap">
,年代pan>但我们应该知道它的总窗口大小。在这个实验中,p7zip有16个线程并行压缩。如果表7显示<年代pan class="inline_break">
MB,总窗口大小是8 GB。另一方面,我们可能比较ComZip的压缩比(<年代pan class="inline_break">
MB)和p7zip (<年代pan class="inline_break">
MB),因为他们的内存消耗接近:ComZip (5<年代vg height="8.8423pt" id="M259" style="vertical-align:-0.2064009pt" version="1.1" viewbox="-0.0498162 -8.6359 11.0475 8.8423" width="11.0475pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
所以,我们可能会考虑与巴布ComZip最佳压缩比在这些软件中,和lz4最坏的打算<年代vg height="8.8423pt" id="M263" style="vertical-align:-0.2064009pt" version="1.1" viewbox="-0.0498162 -8.6359 8.28119 8.8423" width="8.28119pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
根据压缩速度如图12和表8,ComZip没有巴布(<年代pan class="inline_break">
MB)是最快的,而ComZip与巴布(<年代pan class="inline_break">
MB)和lz4非常接近了。lz4和ComZip压缩速度的优势,因为他们有时间复杂度O (<年代pan class="nowrap">
)。年代pan>但我们观察异常曲线显示ComZip小<年代vg height="8.8423pt" id="M270" style="vertical-align:-0.2064009pt" version="1.1" viewbox="-0.0498162 -8.6359 11.0475 8.8423" width="11.0475pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
p7zip的曲线是复杂的。当<年代pan class="inline_break">
MB, p7zip压缩也快。但是,当<年代vg height="8.8423pt" id="M274" style="vertical-align:-0.2064009pt" version="1.1" viewbox="-0.0498162 -8.6359 11.0475 8.8423" width="11.0475pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
的gzip、bzip2压缩比和速度都没有竞争力,所以本文简单地提供了他们的结果。
最重要的是,这x86/64平台上的实验结果表明,在ComZip CZ-Array使用大数据窗口具有以下优点:高压缩比和速度,共享窗口,和高效的内存消耗。ComZip巴布可以有最高的压缩比和速度在这些软件中,这是实际的长河中数据压缩。
此外,实验数据是虚拟路由器OpenWRT图像文件,并且结果推断CZ-Array ComZip有潜力压缩大量的虚拟机文件云平台具有良好的性能。
5.2。测试在ARM平台上
这个平台是一个流行的覆盆子与以下设备:π3 b +手臂Cortex-A53 4核的CPU, 1 GB的DDR2内存,32 GB微SDXC (SD扩展能力)和Raspbian Linux 9。我们认为这个覆盆子π是当前重节点的移动传感器便宜。软件版本是:ComZip v20180421 (32 b), p7zip v16.02, bzip2 v1.0.6, lz4 v1.8.3, gzip v1.6。在这个实验中,ComZip用途<年代pan class="inline_break"> 。年代pan>
表9和图13显示压缩文件大小的关系<年代vg height="14.0004pt" id="M283" style="vertical-align:-5.3645pt" version="1.1" viewbox="-0.0498162 -8.6359 21.4888 14.0004" width="21.4888pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
实验平台硬件的限制,特别是1 GB RAM。当<年代pan class="inline_break">
MB, ComZip中止对RAM不足。但其他软件更加糟糕。只有源代码可以使用它<年代pan class="inline_break">
MB (<年代pan class="inline_break">
)。年代pan>
是并行压缩线程的数量。和p7zip只能支持<年代pan class="inline_break">
MB (<我>p我> =2)和<年代pan class="inline_break">
MB (<年代pan class="inline_break">
),年代pan>和更大的<年代vg height="8.8423pt" id="M293" style="vertical-align:-0.2064009pt" version="1.1" viewbox="-0.0498162 -8.6359 11.0475 8.8423" width="11.0475pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
图12和表9这个实验表明p7zip不能达到<年代pan class="inline_break"> MB,因此其压缩比不跟上ComZip巴布。然后,ComZip巴布有最好的压缩比,lz4有最坏的打算。
在图14和表10,我们观察到lz4是最快的,与巴布ComZip第二最快。我们估计的原因可能是CPU缓存手臂很小,适合小的64 KB数据窗口的lz4展示性能。ComZip, 4核的CPU限制了并行管道CZ编码的性能。
p7zip的曲线是复杂的。当<年代vg height="8.8423pt" id="M295" style="vertical-align:-0.2064009pt" version="1.1" viewbox="-0.0498162 -8.6359 11.0475 8.8423" width="11.0475pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
最重要的是,这ARM平台的实验结果还表明,在ComZip CZ-Array高压缩比和速度。特别是在有限内存的一个传感器,在这些软件中,只有ComZip巴布可以看到2流或更多在数据窗口中,及其共享窗口带来高效的内存消耗。在这个平台上,ComZip巴布可以有最大的数据窗口中,最高的压缩比,第二个最快的速度在这些软件中,这是实际的长河中数据压缩。
从以上实验结果,我们可以得到一些支持CZ-Array的优点:大窗口和共享和高效的内存消耗,高压缩比和速度对比其他流行的压缩软件。这些结果提供一些参考的性能CZ-Array x86/64和ARM平台上运行,这可能推断出未来使用CZ-Array的可行性和实用性和电流传感器。
根据目前的结果,我们可以继续研究在以下几点我们未来的工作原理:<年代pan class="list">(1)年代pan>分析压缩比之间的关系和匹配的机会年代pan>(2)年代pan>提高MLB和LZ77编码获得更好的压缩比年代pan>(3)年代pan>ComZip的压缩算法更好的优化速度年代pan>(4)年代pan>与GPU加速编码/解码,ASIC或其他硬件设备年代pan>
6。结论
物联网的迅速扩张导致了许多传感器,产生大量的数据,使数据传输和存储的挑战。一个可取的方式要求是流数据压缩,可以治疗长河中内存有限的传感器数据。
但是传感器的长河中压缩的问题仍然存在。由于每个传感器的有限的计算资源,扩大的数据窗口没有快速减少编码/解码速度是一个问题。压缩多个数据流,在同一个窗口中看到他们受限于一个传感器的RAM是另一个问题。如果传感器需要硬件加速,简化硬件设计的压缩算法是必要的。
要解决这些问题,介绍了CZ-Array算法,包括巴布和MLB编码block-split编码算法。在共享ComZip CZ-Array实现。它支持目前高达512 GB的数据窗口,满足长河中数据压缩的要求。
分析表明,CZ-Array编码的时间复杂度O (<年代pan class="nowrap"> ),年代pan>超过7 - zip和保持lz4,目前最快的压缩软件之一。CZ-Array编码的空间复杂度是O (<年代pan class="nowrap"> ),年代pan>超过7 - zip和lz4多流并行压缩。所以CZ-Array的压缩比大数据窗口可以高。巴布的主要硬件设计和MLB推断的硬件加速CZ-Array相对容易实现。
实验结果支持,如果CZ-Array ComZip将多个数据流与它有能力获得最佳压缩比和最快的或第二压缩速度最快,在比较流行的压缩软件:p7zip, bzip2 lz4, gzip。和这些结果的性能提供参考CZ-Array x86/64和ARM平台上运行,这可能推断它是可行的和实际使用CZ-Array将来和电流传感器。
另一方面,这些实验结果也提供一些证明CZ-Array的弱点。比较p7zip, ComZip的压缩比,而巴布不够高。原因是参数<我>视线我>限制匹配的机会。
数据可用性
使用的数据来支持本研究的结果包括在本文中。
的利益冲突
作者宣称没有利益冲突有关的出版。
确认
本文由广东省重点研发项目(2018 b010113001 2019 b010137001),广州中国科学技术基金会(201802010023,201802010023),中央大学和基础研究基金。
引用
-
m·阿利斯泰尔·m·n·雷德福,h·w·伊恩,算术编码重新审视,“<我>一个CM交易信息系统我>,16卷,不。3、256 - 294年,1998页。
视图: 谷歌学术搜索 -
m .洞穴和d·j·惠勒<我>一块分类无损数据压缩算法我>,数字系统研究中心,1994年。
n Timoshevskaya和w·c·冯SAIS-OPT: sa)算法的描述和优化后缀数组建设”<我>第四届IEEE国际会议上计算生物和医学科学的进步(ICCABS)我>美国佛罗里达州,页1 - 6,2014。
视图: 谷歌学术搜索美国-拜尔,<我>线性时间后缀排序——后缀数组构造的新方法我>乌尔姆大学硕士论文,2015年。
j .江”,与神经网络图像压缩——一项调查,”<我>信号处理:图像通信我>,14卷,不。9日,第760 - 737页,1999年。
视图: 谷歌学术搜索i Cheema和a . a . Khokhar”高性能计算burrows - wheeler变换fpga架构,”<我>国际会议上可重构fpga学报》上我>2013年,页1 - 6,墨西哥坎昆。
视图: 谷歌学术搜索版权
版权©2020秦建成et al。这是一个开放分布式下文章知识共享归属许可,它允许无限制的使用、分配和复制在任何媒介,提供最初的工作是正确引用。