在Matlab中使用HDF5 / H5优化压缩

时间:2016-03-14 19:38:44

标签: matlab compression hdf5

使用Matlab,我将生成几个数据文件并以H5格式存储为20x1500xN,其中N是一个可以变化的整数,但通常大约为2300.每个文件将有4个不同的数据集结构相同。因此,我将很快实现存储问题。我的两个问题:

  1. 是否有任何理由不拆分4个不同的数据集,而只是另存为4x20x1500xN?我希望将它们分开,因为它是不同的信号模式,但如果有任何计算/压缩优势而不将它们分开,我将加入它们。

  2. 使用Matlab的内置压缩功能,我设置deflate=9(和DataType=single)。但是,我现在已经意识到使用deflate会将我的计算时间乘以5.我意识到这可能与我ChunkSize有关,我刚刚提到20x1500x5 - 没有任何推理在它背后。是否存在优化计算负荷的战略方法w.r.t.通缩和压缩时间?

  3. 谢谢。

1 个答案:

答案 0 :(得分:1)

1-分裂还是合并?它不会在压缩过程中产生影响,因为它是在块中执行的。

2-你选择的chunkshape似乎确实很糟糕。 Chunksize确定将独立压缩的每个块的形状和大小。不好的是,每个块大小为600 kB,比L2缓存大得多,因此您的CPU可能会笨拙地等待数据进入。根据数据的性质和使用模式,您将使用最多(一次读取整个数组,随机读取,顺序读取......)您可能希望定位L1或L2大小,或介于两者之间。 Here是使用Python库完成的一些实验,可以作为指导。

一旦选择了chunksize(压缩块有多少字节),就必须选择一个chunkshape。我推荐最适合您阅读模式的形状,如果您正在进行部分阅读,或者如果您想一次读取整个数组,请首先填写最快的轴。在你的情况下,这将是1x1500x10,我认为(第二轴是最快的,最后一个是第二轴最快,而拳头是最慢的,如果我弄错的话会改变)。

最后,请记住,细节完全取决于您运行它的特定机器:CPU,硬盘驱动器或SSD的质量和负载,RAM的速度......所以微调总是需要一些实验。