在 FORTRAN / MPI / HDF5 ( 1.10.1 ) 中打开带有 h5fopen_f 的文件时出错

Error opening a file with h5fopen_f in FORTRAN / MPI / HDF5 ( 1.10.1 )

我正在使用使用 HDF5 (1.10.1) 的 Fortran 代码。在某些时候,会调用使用 h5fopen_f:

打开文件
H5FileName = "+hdf5/Temperature_00000_00001.h5"
CALL h5fopen_f(H5FileName, H5F_ACC_RDWR_F, file, hdferr)
Scalardataset = 'Temperature_00001_0000'
call h5ltget_dataset_info_f(file, Scalardataset, dimstmp, type_class, type_size, hdferr)
call h5fclose_f(file,hdferr)

这给我一个错误:

HDF5-DIAG: Error detected in HDF5 (1.10.1) MPI-process 0:
  #000: H5F.c line 586 in H5Fopen(): unable to open file
    major: File accessibilty
    minor: Unable to open file
  #001: H5Fint.c line 1305 in H5F_open(): unable to lock the file
    major: File accessibilty
    minor: Unable to open file
  #002: H5FD.c line 1839 in H5FD_lock(): driver lock request failed
    major: Virtual File Layer
    minor: Can't update object
  #003: H5FDsec2.c line 940 in H5FD_sec2_lock(): unable to lock file, errno = 11, error message = 'Resource temporarily unavailable'
    major: File accessibilty
    minor: Bad file ID accessed

我已经检查过该文件是否存在,它在它应该存在的位置并且我有正确的权限。此外,当我只使用一个进程时代码工作正常,当我使用多个进程时,其中一个进程能够打开文件( err=0 ),但其余进程不能( err=-1).最后,我在其他地方安装了相同的代码并且它工作正常(版本 1.8.14)。

会不会是版本问题?

我找到了两种解决方法:

  • 以只读方式打开文件,使用 H5F_ACC_RDONLY_F 而不是 H5F_ACC_RDWR_F(这对我来说很好,因为我不需要写。
  • 使用 HDF5 1.8.14 重新编译所有内容。我猜读写权限在版本 1.10.x 中比在版本 1.8.x.
  • 中更受限制

理想情况下,我希望能够将 HDF5 的更新版本与 H5F_ACC_RDWR_F 一起使用,但目前它对我有用。

我在 HDF5 1.10.1 中遇到了非常相似的问题。我们正在使用多个阅读器以 H5F_ACC_RDONLY 模式访问文件。

通过设置环境变量禁用文件锁定似乎解决了 H5FDsec2.c line 940 in H5FD_sec2_lock(): unable to lock file, errno = 11, error message = 'Resource temporarily unavailable':

export HDF5_USE_FILE_LOCKING="FALSE"

此环境变量由 hdf5 在运行时检查。参见:https://support.hdfgroup.org/ftp/HDF5/current/src/unpacked/release_docs/RELEASE.txt