1

我在从 hdf 文件中读取属性时遇到性能问题。从大约 18000 个组/数据集中读取属性(每个 10 个)似乎需要将近 1.5 分钟。希望有人能告诉我这是否确实是一个合理的时间这样的结构...... hdf文件在根下有大约300个组这300个组(T)中的每一个都有大约60个子组(V),这60个子组中的每一个都有1或2个数据集(D)

   Root 

       ----- T1 

            ----- V1 
                 ---- D 

            -----  V60 
                  ---- D 

         .... 
         .... 
         .... 

      -----  T300 

在每个级别我都在阅读最多 10 个微小的属性..

读取每个组是否主要意味着新的磁盘寻道?我最初的想法是,由于元数据属于不同的组......它们可能最终位于不同的磁盘块上,我正在考虑创建所有元数据的数据集

vtune 显示打开组和数据集的等待时间过长..有什么提高性能的建议..?

4

1 回答 1

1

每个对象(组或数据集)的元数据通常存储在对象头中,因此,正如您所说,它们很可能位于不同的磁盘块上。但是,正如您所发现的,如果您需要读取大量属性,这可能会导致性能下降。您制作包含所有属性的数据集的想法实际上已在 HDF5 中实现。这称为“密集属性存储”,可以使用H5Pset_attr_phase_change. 这里有一些示例代码。

您将需要在每个组和数据集上使用此功能。从参考手册中不清楚它是为所有具有密集属性存储的对象创建一个数据集,还是为每个对象创建一个数据集。这可能取决于文件驱动程序。

最后,如果密集的属性存储不能给您带来太多的加速,您可以考虑并行 IO。

于 2013-05-15T12:19:57.193 回答