性能读取嵌套层次结构

时间:2012-09-27 10:34:50

标签: performance hdf5

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

   Root 

       ----- T1 

            ----- V1 
                 ---- D 

            -----  V60 
                  ---- D 

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

      -----  T300 

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

读取每个组的意思主要是新的磁盘搜索吗?我最初的想法是,由于元数据属于不同的组......它们可能最终会出现在不同的磁盘块上 我正在考虑创建所有元数据的数据集

vtune显示打开组和数据集的大量等待时间  ..提高性能的建议..?

1 个答案:

答案 0 :(得分:1)

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

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

最后,如果密集属性存储不能为您提供更多的加速,您可以考虑并行IO。