使用Fortran读取大型HDF

时间:2017-08-04 15:50:19

标签: fortran hdf5 hierarchical-data chunking large-data

我有一些用PyTables创建的HDF数据。这个数据非常大,一个3973850000 x 8双精度值的数组,但是使用PyTables压缩可以很容易地存储它。

我想使用Fortran访问此数据。我知道,

PROGRAM HDF_READ
USE HDF
IMPLICIT NONE

CHARACTER(LEN=100), PARAMETER :: filename = 'example.h5'
CHARACTER(LEN=100), PARAMETER :: dsetname = 'example_dset.h5'
INTEGER error
INTEGER(HID_T) :: file_id
INTEGER(HID_T) :: dset_id
INTEGER(HID_T) :: space_id
INTEGER(HSIZE_T), DIMENSION(2) :: data_dims, max_dims
DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: dset_data


!Initialize Fortran interface
CALL h5open_f(error)

!Open an existing file
CALL h5open_f(filename, H5F_ACC_RDONLY_F, file_id,error)
END PROGRAM HDF_READ

!Open a dataset
CALL h5dopen_f(file_id, dsetname, dset_id, error)

!Get dataspace ID
CALL h5dget_space_f(dset_id, space_id, error)

!Get dataspace dims
CALL h5sget_simple_extent_dims_f(space_id, data_dims,max_dims, error)

!Create array to read into
ALLOCATE(dset_data(data_dims(1), data_dims(2)))


!Get the data
CALL h5dread_f(dset_id, H5T_NATIVE_DOUBLE, dset_data, data_dims,error)

但是,这会产生一个明显的问题,因为当数组变得大于系统内存时,不能将数组分配给具有双精度浮点数的大尺寸。

访问此数据的最佳方法是什么?我目前的想法是针对某种分块方法?或者有没有办法将阵列存储在磁盘上? HDF是否有处理这类大数据的方法 - 我已经阅读过但却找不到与我的案例有关的任何内容。

0 个答案:

没有答案