【问题标题】:What is the block size in HDF5?HDF5 中的块大小是多少?
【发布时间】:2018-03-14 07:48:56
【问题描述】:

引用HDF5 Hyperslab doc-:

块数组决定元素块的大小,从 数据空间。

该示例显示在 2x2 数据集中,其参数设置如下:

start offset is specified as [1,1], stride is [4,4], count is [3,7], and block is [2,2]

将产生 21 个 2x2 块。选择将在哪里(1,1), (5,1), (9,1), (1,5), (5,5) 我可以理解,因为起点是(1,1)选择从该点开始,而且由于步幅是(4,4)它在每个维度上移动 4,计数是(3,7) 它在 X 方向上增加 3 倍 4,在 Y 方向上增加 7 倍 4,即。在其对应的维度中。

但我不明白块大小是做什么的?这是否意味着我将获得 21 个 2x2 维度的块?这意味着每个块包含 4 个元素,但计数已经设置为 3 in 1 维度,那么这怎么可能?

【问题讨论】:

    标签: hdf5


    【解决方案1】:

    通过 H5Sselect_hypserslab() 创建的 hyperslab 选择允许您创建由重复元素块定义的区域。

    这在 HDF5 用户指南 found here 的第 7.4.2.2 节中有所描述(向下滚动到 7.4.2.2)。 H5Sselect_hyperslab() 参考手册条目也可能会有所帮助。

    这是来自 UG 的图表:

    以下是该图中使用的值:

    • 偏移量 = (0,1)
    • 步幅 = (4,3)
    • 计数 = (2,4)
    • 块 = (3,2)

    注意重复单元是一个 3x2 元素块。所以是的,您将获得 21 个 2x2 块。将有一个由三个块组成的网格,另一个是七个块,每个块在每个方向上间隔 4 个元素。第一个块将偏移 1,1。

    这个API调用最让人迷惑的是,其中三个参数以元素为单位,而count以块为单位。

    编辑:也许这会使块和计数的使用方式更加明显......

    【讨论】:

    • 那么count和block有什么区别呢?
    • 如果看图的下部区域代表数据集存储(忽略上部,代表内存,忽略数字),块数组决定了单个灰色区域的大小(在元素中)。 count数组表示每个维度中block的副本数。
    • 好吧,例如想象一个 2x2 数据集,如果我将块大小设为 3x2,会导致错误吗?
    • 是的,你会得到一个错误。数据空间选择不能超出数据集的范围。如果您尝试写入此类选择,您将收到“文件选择+偏移不在数据集中”错误。
    【解决方案2】:

    HDFS 默认块大小为 64 mb,可以根据我们的要求增加。1 映射器一次处理 1 个块。

    【讨论】:

    • 我正在讨论 hdf 而不是 hdfs。它们是不同的东西。
    猜你喜欢
    • 1970-01-01
    • 2012-08-03
    • 2016-01-28
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多