summaryrefslogtreecommitdiffstats
path: root/src/H5FDint.c
diff options
context:
space:
mode:
authorNeil Fortner <fortnern@gmail.com>2023-04-28 23:58:25 (GMT)
committerGitHub <noreply@github.com>2023-04-28 23:58:25 (GMT)
commit3236fb79cedcbe8fed2f421db1ae15f630b5b90f (patch)
treeb4751d6d020d057f4a43f3c89186418cdd1ac0cf /src/H5FDint.c
parent4497feb5756d76479fb36fef999692c0909f8340 (diff)
downloadhdf5-3236fb79cedcbe8fed2f421db1ae15f630b5b90f.zip
hdf5-3236fb79cedcbe8fed2f421db1ae15f630b5b90f.tar.gz
hdf5-3236fb79cedcbe8fed2f421db1ae15f630b5b90f.tar.bz2
Implement selection I/O with type conversion (#2823)
Initial implementation of selection I/O with type conversion. Allows Parallel collective I/O with type conversion, as long as selection I/O is enabled.
Diffstat (limited to 'src/H5FDint.c')
-rw-r--r--src/H5FDint.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/H5FDint.c b/src/H5FDint.c
index c5b8713..6d90aae 100644
--- a/src/H5FDint.c
+++ b/src/H5FDint.c
@@ -469,6 +469,7 @@ H5FD_read_vector(H5FD_t *file, uint32_t count, H5FD_mem_t types[], haddr_t addrs
*/
extend_sizes = FALSE;
extend_types = FALSE;
+ uint32_t no_selection_io_cause;
for (i = 0; i < count; i++) {
@@ -505,6 +506,11 @@ H5FD_read_vector(H5FD_t *file, uint32_t count, H5FD_mem_t types[], haddr_t addrs
if ((file->cls->read)(file, type, dxpl_id, addrs[i], size, bufs[i]) < 0)
HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "driver read request failed")
}
+
+ /* Add H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB to no selection I/O cause */
+ H5CX_get_no_selection_io_cause(&no_selection_io_cause);
+ no_selection_io_cause |= H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB;
+ H5CX_set_no_selection_io_cause(no_selection_io_cause);
}
done:
@@ -669,6 +675,7 @@ H5FD_write_vector(H5FD_t *file, uint32_t count, H5FD_mem_t types[], haddr_t addr
*/
extend_sizes = FALSE;
extend_types = FALSE;
+ uint32_t no_selection_io_cause;
for (i = 0; i < count; i++) {
@@ -705,6 +712,11 @@ H5FD_write_vector(H5FD_t *file, uint32_t count, H5FD_mem_t types[], haddr_t addr
if ((file->cls->write)(file, type, dxpl_id, addrs[i], size, bufs[i]) < 0)
HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "driver write request failed")
}
+
+ /* Add H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB to no selection I/O cause */
+ H5CX_get_no_selection_io_cause(&no_selection_io_cause);
+ no_selection_io_cause |= H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB;
+ H5CX_set_no_selection_io_cause(no_selection_io_cause);
}
done:
@@ -991,6 +1003,14 @@ H5FD__read_selection_translate(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, uin
0)
HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "driver read vector request failed")
}
+ else {
+ uint32_t no_selection_io_cause;
+
+ /* Add H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB to no selection I/O cause */
+ H5CX_get_no_selection_io_cause(&no_selection_io_cause);
+ no_selection_io_cause |= H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB;
+ H5CX_set_no_selection_io_cause(no_selection_io_cause);
+ }
done:
/* Terminate and free iterators */
@@ -1630,6 +1650,14 @@ H5FD__write_selection_translate(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, ui
0)
HGOTO_ERROR(H5E_VFL, H5E_WRITEERROR, FAIL, "driver write vector request failed")
}
+ else {
+ uint32_t no_selection_io_cause;
+
+ /* Add H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB to no selection I/O cause */
+ H5CX_get_no_selection_io_cause(&no_selection_io_cause);
+ no_selection_io_cause |= H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB;
+ H5CX_set_no_selection_io_cause(no_selection_io_cause);
+ }
done:
/* Terminate and free iterators */