[petsc-dev] HDF5 without H5Pset_fapl_mpio
Jed Brown
jed at jedbrown.org
Sun Apr 22 18:43:23 CDT 2018
The current code just charges along if H5Pset_fapl_mpio is not
available, but then H5Fcreate fails because ranks are fighting for a new
file.
#000: H5F.c line 491 in H5Fcreate(): unable to create 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
Seems to me that if the size of the communicator is 1, we shouldn't
bother trying H5Pset_fapl_mpio and if the comm is larger than 1, we need
to *fail* with a sensible error message if H5Pset_fapl_mpio is not
available. Does that sound right to the people that use HDF5 more
heavily?
#if defined(PETSC_HAVE_H5PSET_FAPL_MPIO)
PetscStackCallHDF5(H5Pset_fapl_mpio,(plist_id, PetscObjectComm((PetscObject)viewer), info));
#endif
/* Create or open the file collectively */
switch (hdf5->btype) {
case FILE_MODE_READ:
PetscStackCallHDF5Return(hdf5->file_id,H5Fopen,(name, H5F_ACC_RDONLY, plist_id));
break;
case FILE_MODE_APPEND:
PetscStackCallHDF5Return(hdf5->file_id,H5Fopen,(name, H5F_ACC_RDWR, plist_id));
break;
case FILE_MODE_WRITE:
PetscStackCallHDF5Return(hdf5->file_id,H5Fcreate,(name, H5F_ACC_TRUNC, H5P_DEFAULT, plist_id));
break;
default:
SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ORDER, "Must call PetscViewerFileSetMode() before PetscViewerFileSetName()");
}
More information about the petsc-dev
mailing list