diff options
author | Neil Fortner <fortnern@gmail.com> | 2022-03-26 19:30:53 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-26 19:30:53 (GMT) |
commit | 42b767fc67ad1e13735e3cee2077f2e108f9463e (patch) | |
tree | 42267295f94bb67dca39ba6dd2dd9d1ac89ee0bd /src/H5Dio.c | |
parent | 25ef608e2f1678c04a81b11ed9443768cdbd9dbd (diff) | |
download | hdf5-42b767fc67ad1e13735e3cee2077f2e108f9463e.zip hdf5-42b767fc67ad1e13735e3cee2077f2e108f9463e.tar.gz hdf5-42b767fc67ad1e13735e3cee2077f2e108f9463e.tar.bz2 |
Merge initial version of selection I/O feature into develop (#1367)
Diffstat (limited to 'src/H5Dio.c')
-rw-r--r-- | src/H5Dio.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/H5Dio.c b/src/H5Dio.c index e226a0a..cb61b71 100644 --- a/src/H5Dio.c +++ b/src/H5Dio.c @@ -576,6 +576,10 @@ H5D__ioinfo_init(H5D_t *dset, const H5D_type_info_t *type_info, H5D_storage_t *s io_info->io_ops.single_write = H5D__scatgath_write; } /* end else */ + /* Start with selection I/O off, layout callback will turn it on if + * appropriate */ + io_info->use_select_io = FALSE; + #ifdef H5_HAVE_PARALLEL /* Determine if the file was opened with an MPI VFD */ io_info->using_mpi_vfd = H5F_HAS_FEATURE(dset->oloc.file, H5FD_FEAT_HAS_MPI); @@ -814,12 +818,17 @@ H5D__ioinfo_adjust(H5D_io_info_t *io_info, const H5D_t *dset, const H5S_t *file_ /* Check if we can use the optimized parallel I/O routines */ if (opt == TRUE) { - /* Override the I/O op pointers to the MPI-specific routines */ - io_info->io_ops.multi_read = dset->shared->layout.ops->par_read; - io_info->io_ops.multi_write = dset->shared->layout.ops->par_write; - io_info->io_ops.single_read = H5D__mpio_select_read; - io_info->io_ops.single_write = H5D__mpio_select_write; - } /* end if */ + /* Override the I/O op pointers to the MPI-specific routines, unless + * selection I/O is to be used - in this case the file driver will + * handle collective I/O */ + /* Check for selection/vector support in file driver? -NAF */ + if (!io_info->use_select_io) { + io_info->io_ops.multi_read = dset->shared->layout.ops->par_read; + io_info->io_ops.multi_write = dset->shared->layout.ops->par_write; + io_info->io_ops.single_read = H5D__mpio_select_read; + io_info->io_ops.single_write = H5D__mpio_select_write; + } /* end if */ + } /* end if */ else { /* Check if there are any filters in the pipeline. If there are, * we cannot break to independent I/O if this is a write operation |