在FORTRAN / MPI / HDF5(1.10.1)中使用h5fopen_f打开文件时出错

时间:2017-12-07 14:06:18

标签: parallel-processing fortran hdf5

我使用的是使用HDF5的Fortran代码(1. 10 .1)。在某些时候,有人打电话使用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),但其余进程可以({{{{ 1}})。最后,我在其他地方安装了相同的代码并且工作得很好(版本1. 8 .14)。

这可能是版本的问题吗?

2 个答案:

答案 0 :(得分:2)

我找到了解决这个问题的两种方法:

  • 使用H5F_ACC_RDONLY_F代替H5F_ACC_RDWR_F将文件打开为只读(这对我来说很好,因为我不需要写。
  • 使用HDF5 1.8.14重新编译所有内容。我想版本1.10.x中的读写权限比版本1.8.x更严格。

理想情况下,我希望能够与HDF5一起使用更新版H5F_ACC_RDWR_F,但现在它适用于我。

答案 1 :(得分:0)

我在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"

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