diff options
author | jhendersonHDF <jhenderson@hdfgroup.org> | 2023-12-27 22:28:41 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-27 22:28:41 (GMT) |
commit | 6ffc55c6d9c1f3a30e4db1bc71c452c50952ee85 (patch) | |
tree | c4215cf360c4a3350aa5315939622b982390df53 /src/H5FDsubfiling/H5FDioc_threads.c | |
parent | 695efa94dfcd62c5ef42d03a7f1425c4105819df (diff) | |
download | hdf5-6ffc55c6d9c1f3a30e4db1bc71c452c50952ee85.zip hdf5-6ffc55c6d9c1f3a30e4db1bc71c452c50952ee85.tar.gz hdf5-6ffc55c6d9c1f3a30e4db1bc71c452c50952ee85.tar.bz2 |
Implement optimized support for vector I/O in Subfiling VFD (#3896)
Vector I/O requests are now processed within a single
set of I/O call batches, rather than each I/O vector
entry (tuple constructed from the types, addrs, sizes
and bufs arrays) being processed individually. This allows I/O to be
more efficiently parallelized among the I/O concentrator processes
during large I/O requests.
* Fixed some calculations and add test cases for issues spotted from review
* Removed a variable that was compensating for previous miscalculations
Diffstat (limited to 'src/H5FDsubfiling/H5FDioc_threads.c')
-rw-r--r-- | src/H5FDsubfiling/H5FDioc_threads.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/H5FDsubfiling/H5FDioc_threads.c b/src/H5FDsubfiling/H5FDioc_threads.c index c86157b..85c2561 100644 --- a/src/H5FDsubfiling/H5FDioc_threads.c +++ b/src/H5FDsubfiling/H5FDioc_threads.c @@ -456,8 +456,9 @@ translate_opcode(io_op_t op) case LOGGING_OP: return "LOGGING_OP"; break; + default: + return "unknown"; } - return "unknown"; } #endif @@ -873,9 +874,14 @@ ioc_file_queue_read_indep(sf_work_request_t *msg, int ioc_idx, int source, MPI_C * unpredictable order. However, if some IOCs own more than * 1 subfile, we need to associate each read with a unique * message tag to make sure the data is received in the - * correct order. + * correct order. We also need a unique message tag in the + * case where only 1 subfile is used in total. In this case, + * vector I/O calls are passed directly down to this VFD without + * being split up into multiple I/O requests, so we need the + * tag to distinguish each I/O request. */ - need_data_tag = sf_context->sf_num_subfiles != sf_context->topology->n_io_concentrators; + need_data_tag = (sf_context->sf_num_subfiles == 1) || + (sf_context->sf_num_subfiles != sf_context->topology->n_io_concentrators); if (!need_data_tag) send_tag = READ_INDEP_DATA; |