在 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
我正在使用使用 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