HDF5 1.14.5
API Reference
|
Functions | |
herr_t | H5Fset_mpi_atomicity (hid_t file_id, hbool_t flag) |
Sets the MPI atomicity mode. | |
herr_t | H5Fget_mpi_atomicity (hid_t file_id, hbool_t *flag) |
Retrieves the atomicity mode in use. | |
Retrieves the atomicity mode in use.
[in] | file_id | File identifier |
[out] | flag | Logical flag for atomicity setting. Valid values are:
|
H5Fget_mpi_atomicity() retrieves the current consistency semantics mode for data access for the file file_id
.
Upon successful return, flag
will be set to 1
if file access is set to atomic mode and 0
if file access is set to nonatomic mode.
Sets the MPI atomicity mode.
[in] | file_id | File identifier |
[in] | flag | Logical flag for atomicity setting. Valid values are:
|
H5Fset_mpi_atomicity() sets MPI consistency semantics for data access to the file, file_id
.
If flag
is set to 1
, all file access operations will appear atomic, guaranteeing sequential consistency. If flag
is set to 0
, enforcement of atomic file access will be turned off.
H5Fset_mpi_atomicity() is a collective function and all participating processes must pass the same values for file_id
and flag
.
This function is available only when the HDF5 library is configured with parallel support (–enable-parallel | HDF5_ENABLE_PARALLEL
). It is useful only when used with the H5FD_MPIO driver (see H5Pset_fapl_mpio()).
H5Fset_mpi_atomicity() calls MPI_File_set_atomicity
underneath and is not supported if the execution platform does not support MPI_File_set_atomicity
. When it is supported and used, the performance of data access operations may drop significantly.
In certain scenarios, even when MPI_File_set_atomicity
is supported, setting atomicity with H5Fset_mpi_atomicity() and flag
set to 1 does not always yield strictly atomic updates. For example, some H5Dwrite() calls translate to multiple MPI_File_write_at
calls. This happens in all cases where the high-level file access routine translates to multiple lower level file access routines. The following scenarios will raise this issue:
This issue arises because MPI atomicity is a matter of MPI file access operations rather than HDF5 access operations. But the user is normally seeking atomicity at the HDF5 level. To accomplish this, the application must set a barrier after a write, H5Dwrite(), but before the next read, H5Dread(), in addition to calling H5Fset_mpi_atomicity().The barrier will guarantee that all underlying write operations execute atomically before the read operations starts. This ensures additional ordering semantics and will normally produce the desired behavior.