性能读取嵌套层次结构



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

   Root 
       ----- T1 
            ----- V1 
                 ---- D 
            -----  V60 
                  ---- D 
         .... 
         .... 
         .... 
      -----  T300 

在每个级别,我最多读取10个微小属性。

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

vtune 显示打开组和数据集的等待时间很长 ..任何提高性能的建议..?

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

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

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

最新更新