8
\ begingroup美元

我读了医生但仍不知道

  • 有什么优点来启用或禁用洗牌,

  • 什么级别压缩[0 - 9]是最优的,

  • 块大小的最佳选择是什么?

\ endgroup美元

    1回答1

    12
    \ begingroup美元

    我做了一些图片在我的平板电脑来解释一切都好一点。对不起,他们并不好。

    洗牌

    如果我们不我们洗牌,我们商店价值(浮点数、双、整数、短整数,…)。因此,每个变量本身是连续存储在内存中。的第一个第二个价值遵循第一个值的最后一点。如果我们使用洗牌,第一位的所有连续变量的存储空间,其次是第二位,等等。

    在这里输入图像描述

    上图显示了六个8位整数的数组(只有8位,因为它是更少的涂装工作;-))。垂直黑匣子分成了8隔间代表8位整数。橙色箭头从左到右显示位如何被存储与洗牌。

    现在我们假设一些示例值:我们有一个数组的值4,2,4,5,7,6。如下图所示。第一行显示了小数表示。下面的矩阵是二进制表示。每个二进制列在第一行代表相应的十进制数。红色箭头表示正常的存储顺序。橙色箭头表示打乱存储顺序。

    在这里输入图像描述

    现在我们可以写下记忆碎片的顺序。我想用颜色。因此,你得到另一个图片:

    在这里输入图像描述

    我们有很多零开始的二进制表示的每个值(因为我们有非常低的值)。洗牌是有利的在这种情况下,因为我们有很长一段连续的内存部分满是相同的数字/条件(= 0)。

    如果我们没有低但更高的号码,(但)这是彼此接近,我们就不会有很长一段连续的内存部分充满0(零),但它可能是六1然后六0年代。通常在netCDF文件我们有更大的数组。假设一系列4-dim 100 x 200 x 365 x值,这非常类似于对方。然后我们会经常2.19 x 109在内存中连续的1或0,对压缩是相当不错的。

    然而,如果邻近值差别很大,洗牌也许不是一个好主意。

    组块

    如果我们有一个未压缩的文件(=没有分块;),或一个大块n-dim数组存储在内存中连续:起初的所有值数组的第一行第一个指数连续存储在内存中;然后我们去下一行(增加第二索引)和第二行连续写入内存;等等。

    我们也从去年开始索引,它反过来…——根据编程语言和的定义是什么。但是原则是一样的。

    下图显示了一个示例2-dim变量的一个空间和一个时间维度。红色箭头指示如何对齐的数据在内存中。2-dim的黑点是个体值数组。

    在这里输入图像描述

    现在,我们想要提取时间片(所有空间值在一个时间步)和空间切片(所有时间值在一个位置)从我们的数据。在第二种情况下我们得到一个时间序列(可能是一个时间序列模型数据)。在第一种情况下我们得到现状的图片(可以为地图)。下图中的蓝色和绿色的标记表示片的时间和空间。

    在这里输入图像描述

    时间和空间之间的区别如下。时间片是快速提取,因为连续的值存储在内存中。片的空间需要更多的时间,因为只有每个第六值提取。这是额外的例子吗工作/时间花费很低。然而,如果我们有一个大型4-dim变量,比space-slice-extraction time-slice-extraction将更快。

    当我们压缩数据,我们可以一块。这意味着,我们分裂大数组变量赋。为用户从外部看起来是一样的。netCDF-4组块自动,当我们压缩数据但不要定义一个组块模式。

    下图显示了一个示例中,我们的数据分成三块。红色箭头指示的对齐内存中的值。这仅仅是一个模范对齐。

    在这里输入图像描述

    现在,我们再次提取时间和空间片(下图)。绿色和蓝色指示片,一次。这里我们看到space-slice将更容易/更快然后提取之前。然而,时间片的提取需要更多的时间。

    在这里输入图像描述

    此外,压缩将当你改变块的大小不同。中描述的背景是相似的洗牌节:这取决于价值观相互邻近的一个或另一组块可能是有利的。

    现在你的问题:块大小的最佳选择是什么?

    关注使用

    这取决于你的数据使用和访问模式。如果你经常提取时间序列在特定的位置,它可能是有利的定义块的方式对应一个位置的值接近彼此对齐在内存中。

    但是要小心,一些软件像cdo访问netCDF数据总是以同样的方式——独立于在处理的是你用它来做什么。因此,如果你不通过C -直接访问文件或Fortran-netCDF4例程,但通过其他软件,最好的分块模式可能不依赖于你想做什么但软件如何……有些软件可能——例如总是沿着空间维度首先读取数据,尽管你想要数据在时间维度。

    专注于压缩:

    压缩文件的大小随分块布局。洗牌部分中描述的情况是相似的。如果数据在时间维度更有效的压缩,我上图例子的分块可能有利于文件大小(例如,高空间可变性,但低变化时间)。

    组块的总结

    最好的选择的块大小取决于你的访问模式,在您所使用的软件,你的数据本身,和你的关注访问时间和存储空间

    压缩级别

    压缩级别的选择取决于你的目标。如果你只是想存储数据(在存档或如果检查)和尽可能小,你可能会使用压缩级别9。

    如果你想访问数据经常和快速,你应该选择一个较低的压缩级别。我们使用压缩水平4。以上,减少文件大小非常低(为我们),这样我们没有理由超越。

    例子:目前,我使用一个海洋模型。我们有很多的土地在我们的模型中域(约1/3)。压缩一级足以减少文件大小约95%。然而,这是一个特例。

    简介:

    我试图给你要的功能的概述。具体的选择取决于你特定的用例,不能通用。对于你,我的回答可能太迟了,但是我希望它可以帮助一些人。对我来说,文档链接过去帮了很大的忙。

    \ endgroup美元
    1
    • 1
      \ begingroup美元 谢谢。该死,我曾希望得到“Silencium”的帽子…:-) \ endgroup美元
      - - - - - -daniel.heydebreck
      2017年12月19日21:04

    你的答案

    通过点击“发布你的答案”,你同意我们服务条款,隐私政策饼干的政策

    不是你要找的答案?浏览其他问题标记问你自己的问题