Who are you?

sz配置文件详解

这篇文档内容主要是对sz的配置文件sz.config中的参数进行一个较为详细的介绍,原配置文件可在[sz_package]/example/sz.config中找到

ENV

Endian Type:大端字节序(BIG_ENDIAN_DATA) or 小端字节序(LITTLE_ENDIAN_DATA)

一般来说,不同的机器Unicode编码方式不同:

  • x86,x64和arm架构的机器:采用小端编码方式
  • PowerPc(ppc),MAC OS和KEIL C51:采用大端编码方式

Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做”零宽度非换行空格”(ZERO WIDTH NO-BREAK SPACE),用FEFF表示。这正好是两个字节,而且FF比FE大1。

如果一个文本文件的头两个字节(以十六进制形式表示)是FE FF,就表示该文件采用大头方式;如果头两个字节是FF FE,就表示该文件采用小头方式。

一般声明方式如下:

1
dataEndianType = LITTLE_ENDIAN_DATA

PARAMETER

layers

在数据预测编码中的层数,可以取1,2,3,不过作者建议取1,这在大部分情况下都是适用的。

一般声明方式如下:

1
layers = 1

sampleDistance

采样距离决定了用于优化量化间隔的采样点数,例如,采样距离为50意味着2%的数据点是采样点。

一般声明方式如下:

1
sampleDistance = 100

quantization intervals

量化间隔必须设置为偶数,如果我们将其数值置为0,那么SZ将会自定搜寻最好的参数设置。如果不设置为0,那么它的取值范围为4~65536。

一般声明方式如下:

1
quantization_intervals = 0

maximum quantization intervals

注意:只有当量化间隔设置为0时,此项设置才是有效的。

一般而言,此项设置不会改变压缩率,但是会对压缩速度产生一定影响(通常只有10%的影响)。最大量化间隔数值设置越大,压缩速度越低,但是sz就越有能力实现高精度数据的高压缩率。

  • 对于低精度数据的压缩(如压缩误差范围(error bound)为1e-2),最大量化间隔可以设置为256或是65536;
  • 对于高精度数据的压缩要求(如压缩误差范围为1e-6),最大量化间隔可以设置为2097152(2^21)。

一般声明方式如下:

1
max_quant_intervals = 2097152

predThreshold

预测数据的百分比阈值。如predThreshold=0.97表示97%的数据将要被预测。

一般声明方式如下:

1
predThreshold = 0.99

offset

这个参数可以被用来调整不意压缩的数据的压缩率。数值范围为[0,10],不过作者建议取0。

一般声明方式如下:

1
offset = 0

SZ_Mode

有3种模式可选:

  • SZ_BEST_SPEED:sz将通过忽略Gzip压缩这一步来实现尽可能快的数据压缩;
  • SZ_DEFAULT_COMPRESSION:sz将会在压缩率和压缩速度之间寻找一个平衡点,实现兼顾两方面的压缩;
  • SZ_BEST_COMPRESSION:sz将尽量实现高压缩率

通常来说,模式1比其他两种模式的压缩速度要快(30%以上)。模式2的压缩率与模式3的压缩率接近(实际应该还是3的压缩率高一点),但是模式2的压缩速度较模式3要快10%左右。

一般声明方式如下:

1
szMode = SZ_BEST_COMPRESSION

GZIP_Mode

注意:只用当szMode设置为SZ_BEST_COMPRESSION时,此项设置才是有效的。

有4种模式可供选择(各选项含义同上):

  • Gzip_NO_COMPRESSION
  • Gzip_BEST_SPEED
  • Gzip_BEST_COMPRESSION
  • Gzip_DEFAULT_COMPRESSION

一般声明方式如下:

1
gzipMode = Gzip_BEST_COMPRESSION

errorBoundMode

误差限定模式有5种可选:ABS_AND_REL, ABS_OR_REL, ABS, REL, PW_REL

一般声明方式如下:

1
errorBoundMode = REL

同时,我们在选择了某种误差模式后,我们需要对其误差进行相应的数值限定:

  • ABS

    注意:只有当误差限定模式设置为ABS或是ABS_AND_REL, ABS_OR_REL时,此项设置才有效。

    绝对误差限定压缩或是解压缩的数据误差在一个绝对误差范围内。例如,绝对误差值为0.0001意味着解压缩的数据数值必须在[ V-0.0001, V+0.0001 ]范围内,其中V是某个原始数据数值。

    一般声明方式如下:

    1
    absErrBound = 1E-2
  • REL

    注意:只有当误差限定模式设置为REL或是ABS_AND_REL, ABS_OR_REL时,此项设置才有效。

    相对误差限定压缩或是解压缩的数据误差在一个全局数据误差范围内。例如,相对误差值为0.01,数据集为{100,101,102,…,109,110},那么全局数据变化范围为110-100=10,所以全局数据误差范围为10*0.01=0.1

    一般声明方式如下:

    1
    relBoundRatio = 1E-4
  • PW_REL

    注意:只有当误差限定模式设置为PW_REL时,此项设置才有效。

    一般不会使用这项误差模式,其含义如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #point-wise relative Bound Ratio
    #pw_relBountRatio is to limit the (de)compression errors by considering the point-wise original data values.
    #For example, suppose pw_relBoundRatio is set to 0.01, and the data set is {100,101,102,103,104,...,110}, so the compression errors will be limited to {1,1.01,1.02,....1.10} for the data points.
    #Only valid when errorBoundMode = PW_REL
    pw_relBoundRatio = 1E-5
    #point-wise relative-error-bound segment size
    #The larger this value, the lower overhead of maitaining error bound information for each segment, while stricter absolute bound used to control the point-wise relative-error-bound.
    segment_size = 32

    一般声明方式如下:

    1
    2
    pw_relBoundRatio = 1E-5
    segment_size = 32

参考

  • [sz_package]/example/sz.config