summaryrefslogtreecommitdiffstats
path: root/src/H5Dio.c
diff options
context:
space:
mode:
authorvchoi-hdfgroup <55293060+vchoi-hdfgroup@users.noreply.github.com>2023-08-07 03:12:07 (GMT)
committerGitHub <noreply@github.com>2023-08-07 03:12:07 (GMT)
commit291b2f7ae42958aa60b84a67a93eeca563a1d089 (patch)
treedc3536c6d779aadd4ca23bb7890d2751844d0780 /src/H5Dio.c
parentfb38a8b9249b9b01d71e706cac9c044e6f25d681 (diff)
downloadhdf5-291b2f7ae42958aa60b84a67a93eeca563a1d089.zip
hdf5-291b2f7ae42958aa60b84a67a93eeca563a1d089.tar.gz
hdf5-291b2f7ae42958aa60b84a67a93eeca563a1d089.tar.bz2
Implementation of the mpio driver with selection I/O. (#3222)
* This changes the default selection I/O to on for MPIO.
Diffstat (limited to 'src/H5Dio.c')
-rw-r--r--src/H5Dio.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/src/H5Dio.c b/src/H5Dio.c
index 89afde5..b978139 100644
--- a/src/H5Dio.c
+++ b/src/H5Dio.c
@@ -415,8 +415,14 @@ H5D__read(size_t count, H5D_dset_io_info_t *dset_info)
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get MPI-I/O transfer mode");
/* Only report the collective I/O mode if we're actually performing collective I/O */
- if (xfer_mode == H5FD_MPIO_COLLECTIVE)
+ if (xfer_mode == H5FD_MPIO_COLLECTIVE) {
H5CX_set_mpio_actual_io_mode(io_info.actual_io_mode);
+
+ /* If we did selection I/O, report that we used "link chunk" mode, since that's the most
+ * analogous to what selection I/O does */
+ if (io_info.use_select_io == H5D_SELECTION_IO_MODE_ON)
+ H5CX_set_mpio_actual_chunk_opt(H5D_MPIO_LINK_CHUNK);
+ }
}
#endif /* H5_HAVE_PARALLEL */
}
@@ -1131,20 +1137,16 @@ H5D__typeinfo_init_phase2(H5D_io_info_t *io_info)
assert(io_info);
/* If selection I/O mode is default (auto), enable it here if the VFD supports it (it will be turned off
- * later if something else conflicts), otherwise disable it. If we're using the MPIO VFD, the automatic
- * selection will happen in H5D__mpio_opt_possible() inside H5D__ioinfo_adjust(). */
-#ifdef H5_HAVE_PARALLEL
- if (!io_info->using_mpi_vfd)
-#endif /* H5_HAVE_PARALLEL */
- if (io_info->use_select_io == H5D_SELECTION_IO_MODE_DEFAULT) {
- if (H5F_has_vector_select_io(io_info->dsets_info[0].dset->oloc.file,
- io_info->op_type == H5D_IO_OP_WRITE))
- io_info->use_select_io = H5D_SELECTION_IO_MODE_ON;
- else {
- io_info->use_select_io = H5D_SELECTION_IO_MODE_OFF;
- io_info->no_selection_io_cause |= H5D_SEL_IO_DEFAULT_OFF;
- }
+ * later if something else conflicts), otherwise disable it */
+ if (io_info->use_select_io == H5D_SELECTION_IO_MODE_DEFAULT) {
+ if (H5F_has_vector_select_io(io_info->dsets_info[0].dset->oloc.file,
+ io_info->op_type == H5D_IO_OP_WRITE))
+ io_info->use_select_io = H5D_SELECTION_IO_MODE_ON;
+ else {
+ io_info->use_select_io = H5D_SELECTION_IO_MODE_OFF;
+ io_info->no_selection_io_cause |= H5D_SEL_IO_DEFAULT_OFF;
}
+ }
/* If we're doing type conversion and we might be doing selection I/O, check if the buffers are large
* enough to handle the whole I/O */