C读取大数据集在HDF5中变慢(使用HD5_read)

时间:2014-09-21 23:55:05

标签: c hdf5

我在数据集中有一个大表,大约有4000万行。在Python中,使用h5py库读取文件非常快。但是,我需要在我的C ++代码中读取数据。所以我尝试了以下代码,但是当我运行它时它只是冻结(太慢)。我已经测试了大约1000行的小案例的代码,这很好。我不知道该怎么办。希望有人可以提供帮助非常感谢你。这是我的代码:

#define NFIELDS  (hsize_t)  2
#define NRECORDS (hsize_t) 44169408

int main(){
    hid_t file_id, dataset_id, group_id; /* identifiers */
    herr_t status;
    float dset_data[NRECORDS][NFIELDS];

    file_id = H5Fopen("large.h5", H5F_ACC_RDONLY, H5P_DEFAULT);

    dataset_id = H5Dopen(file_id, "ds", H5P_DEFAULT);
    status = H5Dread(dataset_id, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL,
            H5P_DEFAULT, dset_data);

    /* Close the dataset. */
    H5Dclose(dataset_id);
    /* Close the file. */
    H5Fclose(file_id);

    printf("OK\n");



   for (int i =0; i< 44169408; ++i){
        printf("%f, %f\n", dset_data[i][0], dset_data[i][1]);
   }
   return 0;
}

1 个答案:

答案 0 :(得分:1)

您的代码看起来正确并且应该很快(假设文件中的数据也存储为浮点值,否则数据类型转换可能会减慢I / O的速度)。我打赌它会影响你的表现。