summaryrefslogtreecommitdiffstats
path: root/testpar
diff options
context:
space:
mode:
authorjhendersonHDF <jhenderson@hdfgroup.org>2023-10-21 01:08:49 (GMT)
committerGitHub <noreply@github.com>2023-10-21 01:08:49 (GMT)
commitb16808d35160fb0d22999447dbf53838d7918a7a (patch)
treeeaf7a8cb712da1f2b200f6b2f0a44ed538d50409 /testpar
parent302f54a566533615545f76af8f34f2665341539b (diff)
downloadhdf5-b16808d35160fb0d22999447dbf53838d7918a7a.zip
hdf5-b16808d35160fb0d22999447dbf53838d7918a7a.tar.gz
hdf5-b16808d35160fb0d22999447dbf53838d7918a7a.tar.bz2
Sync with develop (#3737)
* Correct ld in format strings in cmpd_dset.c (#3697) Removes clang warnings * Clean up comments. (#3695) * Add NVidia compiler support and CI (#3686) * Work around Theta system issue failure in links test (#3710) When the Subfiling VFD is enabled, the links test may try to initialize the Subfiling VFD and call MPI_Init_thread. On Theta, this appears to have an issue that will cause the links test to fail. Reworked the test to check for the same conditions in a more roundabout way that doesn't involved initializing the Subfiling VFD * Fix issue with unmatched messages in ph5diff (#3719) * provide an alternative to mapfile for older bash (#3717) * Attempt to quiet some warnings with cray compilers. (#3724) * Fix CMake VOL passthrough tests by copying files to correct directory (#3721) * Develop intel split (#3722) * Split intel compiler flags into sub-folders * Update Intel options for warnings * Mostly CMake, Autotools needs additional work * Fixes and adjustments to t_filters_parallel (#3714) Broadcast number of datasets to create in multi-dataset I/O cases so that interference with random number generation doesn't cause mismatches between ranks Set fill time for datasets to "never" by default and adjust on a per-test basis to avoid writing fill values to chunks when it's unnecessary Reduce number of loops run in some tests when performing multi-dataset I/O Fix an issue in the "fill time never" test where data verification could fill if file space reuse causes application buffers to be filled with chosen fill value when reading from datasets with uninitialized storage Skip multi-chunk I/O test configurations for multi-dataset I/O configurations when the TestExpress level is > 1 since those tests can be more stressful on the file system Disable use of persistent file free space management for now since it occasionally runs into an infinite loop in the library's free space management code * Suppress cast-qual warning in H5TB Fortran wrapper (#3728) This interface is fundamentally broken, const-wise. * Add new API function H5Pget_actual_select_io_mode() (#2974) This function allows the user to determine if the library performed selection I/O, vector I/O, or scalar (legacy) I/O during the last HDF5 operation performed with the provided DXPL. Expanded existing tests to check this functionality. * Test scripts now execute in-source with creation of tmp dir (#3723) Fixes a few issues created in #3580: * Fixes a problem where committed tools test files were deleted when cleaning after an in-source build * Fixes issues with test file paths in Autotools tools test scripts * Add -h and --help as flags in h5cc & h5fc (#3729) Adds these common help flags in addition to -help * Update the library version matrix for H5Pset_libver_bounds() (#3702) * Fixed #3524 Added 1.12, 1.14, and 1.16 to the table for libver bounds in the H5Pset_libver_bounds docs. * Remove references to LIBVER_V116 --------- Co-authored-by: H. Joe Lee <hyoklee@hdfgroup.org> Co-authored-by: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Co-authored-by: Scot Breitenfeld <brtnfld@hdfgroup.org> Co-authored-by: Dana Robinson <43805+derobins@users.noreply.github.com> Co-authored-by: Neil Fortner <fortnern@gmail.com> Co-authored-by: Glenn Song <43005495+glennsong09@users.noreply.github.com> Co-authored-by: bmribler <39579120+bmribler@users.noreply.github.com>
Diffstat (limited to 'testpar')
-rw-r--r--testpar/t_filters_parallel.c843
-rw-r--r--testpar/t_filters_parallel.h2
-rw-r--r--testpar/t_select_io_dset.c641
3 files changed, 921 insertions, 565 deletions
diff --git a/testpar/t_filters_parallel.c b/testpar/t_filters_parallel.c
index bdfde09..6c05408 100644
--- a/testpar/t_filters_parallel.c
+++ b/testpar/t_filters_parallel.c
@@ -69,10 +69,11 @@ typedef enum num_chunks_written_t {
typedef void (*test_func)(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id, hid_t dcpl_id,
hid_t dxpl_id, test_mode_t test_mode);
-static herr_t set_dcpl_filter(hid_t dcpl_id, H5Z_filter_t filter_id, filter_options_t *filter_options);
-static void verify_space_alloc_status(size_t num_dsets, hid_t *dset_ids, hid_t dcpl_id,
- num_chunks_written_t chunks_written);
-static void verify_chunk_opt_status(size_t num_dsets, hid_t dxpl_id);
+static herr_t set_dcpl_filter(hid_t dcpl_id, H5Z_filter_t filter_id, filter_options_t *filter_options);
+static void verify_space_alloc_status(size_t num_dsets, hid_t *dset_ids, hid_t dcpl_id,
+ num_chunks_written_t chunks_written);
+static void verify_chunk_opt_status(size_t num_dsets, test_mode_t test_mode, bool any_io, bool any_filters,
+ bool collective, bool unalloc_read, bool did_alloc, hid_t dxpl_id);
static const char *test_mode_to_string(test_mode_t test_mode);
static void create_datasets(hid_t parent_obj_id, const char *dset_name, hid_t type_id, hid_t filespace_id,
@@ -80,9 +81,11 @@ static void create_datasets(hid_t parent_obj_id, const char *dset_name, hid_t ty
static void open_datasets(hid_t parent_obj_id, const char *dset_name, size_t num_dsets, test_mode_t test_mode,
hid_t *dset_ids);
static void write_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id,
- hid_t *fspace_ids, hid_t dxpl_id, const void **bufs, test_mode_t test_mode);
+ hid_t *fspace_ids, hid_t dcpl_id, hid_t dxpl_id, const void **bufs,
+ test_mode_t test_mode, bool any_io, bool collective, bool overwrite);
static void read_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id, hid_t fspace_id,
- hid_t dxpl_id, void **bufs, test_mode_t test_mode);
+ hid_t dcpl_id, hid_t dxpl_id, void **bufs, test_mode_t test_mode, bool any_io,
+ bool collective, bool all_uninit_read);
static void select_hyperslab(size_t num_dsets, hid_t *dset_ids, hsize_t *start, hsize_t *stride,
hsize_t *count, hsize_t *block, hid_t *fspace_ids);
@@ -471,11 +474,15 @@ verify_space_alloc_status(size_t num_dsets, hid_t *dset_ids, hid_t dcpl_id,
* I/O was performed.
*/
static void
-verify_chunk_opt_status(size_t num_dsets, hid_t dxpl_id)
+verify_chunk_opt_status(size_t num_dsets, test_mode_t test_mode, bool any_io, bool any_filters,
+ bool collective, bool unalloc_read, bool did_alloc, hid_t dxpl_id)
{
H5D_mpio_actual_chunk_opt_mode_t chunk_opt_mode;
H5D_selection_io_mode_t sel_io_mode;
+ uint32_t actual_sel_io_mode;
+ uint32_t actual_sel_io_mode_reduced;
uint32_t no_sel_io_cause = 0;
+ int mpi_code;
herr_t ret;
if (H5P_DEFAULT != dxpl_id) {
@@ -528,6 +535,95 @@ verify_chunk_opt_status(size_t num_dsets, hid_t dxpl_id)
"verified I/O optimization was linked-chunk I/O");
}
}
+
+ /* Verify actual selection I/O mode */
+ ret = H5Pget_actual_selection_io_mode(dxpl_id, &actual_sel_io_mode);
+ VRFY((ret >= 0), "H5Pget_actual_selection_io_mode succeeded");
+
+ /* Reduce results to process 0 (bitwise OR so we get all I/O types) */
+ mpi_code =
+ MPI_Reduce(&actual_sel_io_mode, &actual_sel_io_mode_reduced, 1, MPI_UINT32_T, MPI_BOR, 0, comm);
+ VRFY((MPI_SUCCESS == mpi_code), "MPI_Reduce succeeded");
+
+ /* Verify selection I/O mode on rank 0 */
+ if (mpi_rank == 0) {
+ /* No actual I/O performed, only reported I/O will be from allocation, even if "no" datasets were
+ * involved (num_dsets == 0 implies the call was expected to fail, but it fails after allocation).
+ * Also if the test mode is mixed filtered and unfiltered and the call did not fail, then there
+ * will always be an I/O callback made with raw data. This is because unfiltered datasets fall
+ * back to scalar I/O when mixed with filtered, and scalar I/O reports an I/O call was made even
+ * with a size of 0 bytes, while vector I/O does not report I/O was made if passed 0 vector
+ * elements (because no elements were raw data), which is what happens when performing I/O on a
+ * filtered dataset with no selection. Vector I/O does report an I/O call was made if passed a raw
+ * data element of size 0, so this is consistent. */
+ if (!any_io) {
+ if (did_alloc || (num_dsets > 0 && test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED))
+ VRFY(H5D_SCALAR_IO == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was scalar I/O");
+ else
+ VRFY(0 == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was 0 (no I/O)");
+ }
+ /* No filters, library should have used selection I/O if enabled, scalar I/O otherwise */
+ else if (!any_filters) {
+ assert(!unalloc_read && !did_alloc);
+ if (sel_io_mode == H5D_SELECTION_IO_MODE_DEFAULT || sel_io_mode == H5D_SELECTION_IO_MODE_ON)
+ VRFY(H5D_SELECTION_IO == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was selection I/O");
+ else
+ VRFY(H5D_SCALAR_IO == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was scalar I/O");
+ }
+ /* Independent I/O, library should have done no I/O if reading from unallocated datasets, scalar
+ * I/O otherwise, since filtered I/O is only supported with scalar I/O in independent/serial */
+ else if (!collective) {
+ if (unalloc_read)
+ VRFY(0 == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was 0 (no I/O)");
+ else
+ VRFY(H5D_SCALAR_IO == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was scalar I/O");
+ }
+ else
+ switch (test_mode) {
+ case USE_SINGLE_DATASET:
+ case USE_MULTIPLE_DATASETS:
+ /* Collective case with only filtered datasets. If we performed allocation then there
+ * should be scalar I/O for allocation in addition to vector I/O for the actual data.
+ * If we're reading from an unallocated dataset then there should be no actual I/O.
+ * Otherwise there should only be vector I/O. */
+ if (did_alloc)
+ VRFY((H5D_SCALAR_IO | H5D_VECTOR_IO) == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was scalar and vector I/O");
+ else if (unalloc_read)
+ VRFY(0 == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was 0 (no I/O)");
+ else
+ VRFY(H5D_VECTOR_IO == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was vector I/O");
+ break;
+
+ case USE_MULTIPLE_DATASETS_MIXED_FILTERED:
+ /* Collective case with mixed filtered and unfiltered datasets. If we're reading from
+ * a unallocated datasets then there should be scalar I/O from reading the unfilitered
+ * datasets, since they are always allocated in parallel. Otherwise there should be
+ * vector I/O from the filtered datasets and scalar I/O from the unfiltered datasets.
+ */
+ if (unalloc_read)
+ VRFY(H5D_SCALAR_IO == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was scalar I/O");
+ else
+ VRFY((H5D_SCALAR_IO | H5D_VECTOR_IO) == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was scalar and vector I/O");
+ break;
+
+ case TEST_MODE_SENTINEL:
+ default:
+ printf("Invalid test mode\n");
+ fflush(stdout);
+ MPI_Abort(MPI_COMM_WORLD, -1);
+ }
+ }
}
}
@@ -576,11 +672,21 @@ create_datasets(hid_t parent_obj_id, const char *dset_name, hid_t type_id, hid_t
case USE_MULTIPLE_DATASETS:
case USE_MULTIPLE_DATASETS_MIXED_FILTERED:
dset_name_ptr = dset_name_multi_buf;
- n_dsets = (rand() % (MAX_NUM_DSETS_MULTI - 1)) + 2;
+
+ if (MAINPROCESS)
+ n_dsets = (rand() % (MAX_NUM_DSETS_MULTI - 1)) + 2;
+
+ if (mpi_size > 1)
+ VRFY((MPI_SUCCESS == MPI_Bcast(&n_dsets, 1, MPI_INT, 0, comm)), "MPI_Bcast succeeded");
/* Select between 1 and (n_dsets - 1) datasets to be unfiltered */
if (test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED) {
- n_unfiltered = (rand() % (n_dsets - 1)) + 1;
+ if (MAINPROCESS)
+ n_unfiltered = (rand() % (n_dsets - 1)) + 1;
+
+ if (mpi_size > 1)
+ VRFY((MPI_SUCCESS == MPI_Bcast(&n_unfiltered, 1, MPI_INT, 0, comm)),
+ "MPI_Bcast succeeded");
unfiltered_dcpl = H5Pcopy(dcpl_id);
VRFY((unfiltered_dcpl >= 0), "H5Pcopy succeeded");
@@ -621,7 +727,11 @@ create_datasets(hid_t parent_obj_id, const char *dset_name, hid_t type_id, hid_t
* remaining datasets as unfiltered datasets. Otherwise,
* randomly determine if a dataset will be unfiltered.
*/
- unfiltered = ((size_t)n_unfiltered == dsets_left) || ((rand() % 2) == 0);
+ if (MAINPROCESS)
+ unfiltered = ((size_t)n_unfiltered == dsets_left) || ((rand() % 2) == 0);
+
+ if (mpi_size > 1)
+ VRFY((MPI_SUCCESS == MPI_Bcast(&unfiltered, 1, MPI_C_BOOL, 0, comm)), "MPI_Bcast succeeded");
if (unfiltered) {
curr_dcpl = unfiltered_dcpl;
@@ -693,10 +803,12 @@ open_datasets(hid_t parent_obj_id, const char *dset_name, size_t num_dsets, test
*/
static void
write_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id, hid_t *fspace_ids,
- hid_t dxpl_id, const void **bufs, test_mode_t test_mode)
+ hid_t dcpl_id, hid_t dxpl_id, const void **bufs, test_mode_t test_mode, bool any_io,
+ bool collective, bool overwrite)
{
- hid_t mem_type_ids[MAX_NUM_DSETS_MULTI];
- hid_t mem_space_ids[MAX_NUM_DSETS_MULTI];
+ hid_t mem_type_ids[MAX_NUM_DSETS_MULTI];
+ hid_t mem_space_ids[MAX_NUM_DSETS_MULTI];
+ H5D_alloc_time_t alloc_time = H5D_ALLOC_TIME_DEFAULT;
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
mem_type_ids[dset_idx] = type_id;
@@ -724,7 +836,11 @@ write_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id
MPI_Abort(MPI_COMM_WORLD, -1);
}
- verify_chunk_opt_status(num_dsets, dxpl_id);
+ if (!overwrite)
+ VRFY(H5Pget_alloc_time(dcpl_id, &alloc_time) >= 0, "H5Pget_alloc_time succeeded");
+
+ verify_chunk_opt_status(num_dsets, test_mode, any_io, true, collective, false,
+ !overwrite && (alloc_time == H5D_ALLOC_TIME_LATE), dxpl_id);
}
/*
@@ -733,11 +849,13 @@ write_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id
*/
static void
read_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id, hid_t fspace_id,
- hid_t dxpl_id, void **bufs, test_mode_t test_mode)
+ hid_t dcpl_id, hid_t dxpl_id, void **bufs, test_mode_t test_mode, bool any_io, bool collective,
+ bool all_uninit_read)
{
- hid_t mem_type_ids[MAX_NUM_DSETS_MULTI];
- hid_t mem_space_ids[MAX_NUM_DSETS_MULTI];
- hid_t file_space_ids[MAX_NUM_DSETS_MULTI];
+ hid_t mem_type_ids[MAX_NUM_DSETS_MULTI];
+ hid_t mem_space_ids[MAX_NUM_DSETS_MULTI];
+ hid_t file_space_ids[MAX_NUM_DSETS_MULTI];
+ H5D_alloc_time_t alloc_time = H5D_ALLOC_TIME_DEFAULT;
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
mem_type_ids[dset_idx] = type_id;
@@ -766,7 +884,13 @@ read_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id,
MPI_Abort(MPI_COMM_WORLD, -1);
}
- verify_chunk_opt_status(num_dsets, dxpl_id);
+ if (all_uninit_read)
+ VRFY(H5Pget_alloc_time(dcpl_id, &alloc_time) >= 0, "H5Pget_alloc_time succeeded");
+
+ verify_chunk_opt_status(num_dsets, test_mode, any_io, true, collective,
+ all_uninit_read &&
+ (alloc_time == H5D_ALLOC_TIME_INCR || alloc_time == H5D_ALLOC_TIME_LATE),
+ false, dxpl_id);
}
static void
@@ -940,8 +1064,8 @@ test_write_one_chunk_filtered_dataset(const char *parent_group, H5Z_filter_t fil
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -973,7 +1097,8 @@ test_write_one_chunk_filtered_dataset(const char *parent_group, H5Z_filter_t fil
(C_DATATYPE)dset_idx;
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -1094,8 +1219,8 @@ test_write_filtered_dataset_no_overlap(const char *parent_group, H5Z_filter_t fi
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -1124,7 +1249,8 @@ test_write_filtered_dataset_no_overlap(const char *parent_group, H5Z_filter_t fi
(j / (dataset_dims[0] / (hsize_t)mpi_size * dataset_dims[1])) + dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -1201,6 +1327,12 @@ test_write_filtered_dataset_no_overlap_partial(const char *parent_group, H5Z_fil
plist_id = H5Pcopy(dcpl_id);
VRFY((plist_id >= 0), "DCPL copy succeeded");
+ /*
+ * Since we're only doing a partial write to the dataset, make
+ * sure the fill time is set appropriately
+ */
+ VRFY((H5Pset_fill_time(plist_id, H5D_FILL_TIME_IFSET) >= 0), "H5Pset_fill_time succeeded");
+
VRFY((H5Pset_chunk(plist_id, WRITE_UNSHARED_FILTERED_CHUNKS_PARTIAL_DATASET_DIMS, chunk_dims) >= 0),
"Chunk size set");
@@ -1245,8 +1377,8 @@ test_write_filtered_dataset_no_overlap_partial(const char *parent_group, H5Z_fil
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -1283,7 +1415,8 @@ test_write_filtered_dataset_no_overlap_partial(const char *parent_group, H5Z_fil
}
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -1404,8 +1537,8 @@ test_write_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t filte
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -1436,7 +1569,8 @@ test_write_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t filte
dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -1485,6 +1619,7 @@ test_write_filtered_dataset_single_unlim_dim_no_overlap(const char *parent_group
hsize_t block[WRITE_UNSHARED_ONE_UNLIM_DIM_DATASET_DIMS];
size_t data_size;
size_t num_dsets;
+ size_t num_loops;
hid_t dset_ids[MAX_NUM_DSETS_MULTI];
hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
@@ -1551,7 +1686,12 @@ test_write_filtered_dataset_single_unlim_dim_no_overlap(const char *parent_group
read_bufs[dset_idx] = tmp_buf;
}
- for (size_t i = 0; i < (size_t)WRITE_UNSHARED_ONE_UNLIM_DIM_NLOOPS; i++) {
+ /* Determine number of loops to run through */
+ num_loops = WRITE_UNSHARED_ONE_UNLIM_DIM_NLOOPS;
+ if ((test_mode == USE_MULTIPLE_DATASETS) || (test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED))
+ num_loops /= 2;
+
+ for (size_t i = 0; i < num_loops; i++) {
/* Each process defines the dataset selection in memory and writes
* it to the hyperslab in the file
*/
@@ -1567,8 +1707,8 @@ test_write_filtered_dataset_single_unlim_dim_no_overlap(const char *parent_group
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, i > 0);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -1582,15 +1722,15 @@ test_write_filtered_dataset_single_unlim_dim_no_overlap(const char *parent_group
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(read_bufs[dset_idx], 255, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Verify the correct data was written */
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
"Data verification succeeded");
- if (i < (size_t)WRITE_UNSHARED_ONE_UNLIM_DIM_NLOOPS - 1) {
+ if (i < num_loops - 1) {
/* Extend the dataset(s) by count[1] chunks in the extensible dimension */
dataset_dims[1] += count[1] * block[1];
@@ -1646,6 +1786,7 @@ test_write_filtered_dataset_single_unlim_dim_overlap(const char *parent_group, H
hsize_t block[WRITE_SHARED_ONE_UNLIM_DIM_DATASET_DIMS];
size_t data_size;
size_t num_dsets;
+ size_t num_loops;
hid_t dset_ids[MAX_NUM_DSETS_MULTI];
hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
@@ -1712,7 +1853,12 @@ test_write_filtered_dataset_single_unlim_dim_overlap(const char *parent_group, H
read_bufs[dset_idx] = tmp_buf;
}
- for (size_t i = 0; i < (size_t)WRITE_SHARED_ONE_UNLIM_DIM_NLOOPS; i++) {
+ /* Determine number of loops to run through */
+ num_loops = WRITE_SHARED_ONE_UNLIM_DIM_NLOOPS;
+ if ((test_mode == USE_MULTIPLE_DATASETS) || (test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED))
+ num_loops /= 2;
+
+ for (size_t i = 0; i < num_loops; i++) {
/* Each process defines the dataset selection in memory and writes
* it to the hyperslab in the file
*/
@@ -1727,8 +1873,8 @@ test_write_filtered_dataset_single_unlim_dim_overlap(const char *parent_group, H
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, i > 0);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -1742,15 +1888,15 @@ test_write_filtered_dataset_single_unlim_dim_overlap(const char *parent_group, H
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(read_bufs[dset_idx], 255, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Verify the correct data was written */
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
"Data verification succeeded");
- if (i < (size_t)WRITE_SHARED_ONE_UNLIM_DIM_NLOOPS - 1) {
+ if (i < num_loops - 1) {
/* Extend the dataset(s) by count[1] chunks in the extensible dimension */
dataset_dims[1] += count[1] * block[1];
@@ -1808,6 +1954,7 @@ test_write_filtered_dataset_multi_unlim_dim_no_overlap(const char *parent_group,
hsize_t block[WRITE_UNSHARED_TWO_UNLIM_DIM_DATASET_DIMS];
size_t data_size;
size_t num_dsets;
+ size_t num_loops;
hid_t dset_ids[MAX_NUM_DSETS_MULTI];
hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
@@ -1855,7 +2002,12 @@ test_write_filtered_dataset_multi_unlim_dim_no_overlap(const char *parent_group,
VRFY((H5Sclose(filespace) >= 0), "File dataspace close succeeded");
- for (size_t i = 0; i < (size_t)WRITE_UNSHARED_TWO_UNLIM_DIM_NLOOPS; i++) {
+ /* Determine number of loops to run through */
+ num_loops = WRITE_UNSHARED_TWO_UNLIM_DIM_NLOOPS;
+ if ((test_mode == USE_MULTIPLE_DATASETS) || (test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED))
+ num_loops /= 2;
+
+ for (size_t i = 0; i < num_loops; i++) {
/* Set selected dimensions */
sel_dims[0] = (i + 1) * WRITE_UNSHARED_TWO_UNLIM_DIM_CH_NROWS;
sel_dims[1] = (i + 1) * WRITE_UNSHARED_TWO_UNLIM_DIM_CH_NCOLS;
@@ -1893,8 +2045,8 @@ test_write_filtered_dataset_multi_unlim_dim_no_overlap(const char *parent_group,
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, i > 0);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -1908,15 +2060,15 @@ test_write_filtered_dataset_multi_unlim_dim_no_overlap(const char *parent_group,
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(read_bufs[dset_idx], 255, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Verify the correct data was written */
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
"Data verification succeeded");
- if (i < (size_t)WRITE_UNSHARED_TWO_UNLIM_DIM_NLOOPS - 1) {
+ if (i < num_loops - 1) {
/*
* Extend the dataset(s) by the size of one chunk per rank
* in the first extensible dimension. Extend the dataset(s)
@@ -1977,6 +2129,7 @@ test_write_filtered_dataset_multi_unlim_dim_overlap(const char *parent_group, H5
hsize_t block[WRITE_SHARED_TWO_UNLIM_DIM_DATASET_DIMS];
size_t data_size;
size_t num_dsets;
+ size_t num_loops;
hid_t dset_ids[MAX_NUM_DSETS_MULTI];
hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
@@ -2024,7 +2177,12 @@ test_write_filtered_dataset_multi_unlim_dim_overlap(const char *parent_group, H5
VRFY((H5Sclose(filespace) >= 0), "File dataspace close succeeded");
- for (size_t i = 0; i < (size_t)WRITE_SHARED_TWO_UNLIM_DIM_NLOOPS; i++) {
+ /* Determine number of loops to run through */
+ num_loops = WRITE_SHARED_TWO_UNLIM_DIM_NLOOPS;
+ if ((test_mode == USE_MULTIPLE_DATASETS) || (test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED))
+ num_loops /= 2;
+
+ for (size_t i = 0; i < num_loops; i++) {
/* Set selected dimensions */
sel_dims[0] = (i + 1);
sel_dims[1] = (i + 1) * (size_t)WRITE_SHARED_TWO_UNLIM_DIM_CH_NCOLS;
@@ -2062,8 +2220,8 @@ test_write_filtered_dataset_multi_unlim_dim_overlap(const char *parent_group, H5
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, i > 0);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -2077,15 +2235,15 @@ test_write_filtered_dataset_multi_unlim_dim_overlap(const char *parent_group, H5
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(read_bufs[dset_idx], 255, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Verify the correct data was written */
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
"Data verification succeeded");
- if (i < (size_t)WRITE_SHARED_TWO_UNLIM_DIM_NLOOPS - 1) {
+ if (i < num_loops - 1) {
/* Extend the dataset(s) by the size of a chunk in each extensible dimension */
dataset_dims[0] += (hsize_t)WRITE_SHARED_TWO_UNLIM_DIM_CH_NROWS;
dataset_dims[1] += (hsize_t)WRITE_SHARED_TWO_UNLIM_DIM_CH_NCOLS;
@@ -2131,28 +2289,31 @@ test_write_filtered_dataset_single_no_selection(const char *parent_group, H5Z_fi
hid_t fapl_id, hid_t dcpl_id, hid_t dxpl_id,
test_mode_t test_mode)
{
- C_DATATYPE *correct_bufs[MAX_NUM_DSETS_MULTI] = {0};
- const void *data_bufs[MAX_NUM_DSETS_MULTI] = {0};
- void *data_bufs_nc[MAX_NUM_DSETS_MULTI] = {0}; /* non-const buffer pointers for freeing */
- void *read_bufs[MAX_NUM_DSETS_MULTI] = {0};
- hsize_t dataset_dims[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t chunk_dims[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t sel_dims[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t start[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t stride[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t count[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t block[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- size_t data_size, correct_buf_size;
- size_t num_dsets;
- hid_t dset_ids[MAX_NUM_DSETS_MULTI];
- hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
- hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
- hid_t group_id = H5I_INVALID_HID;
- hid_t filespace = H5I_INVALID_HID;
+ H5D_alloc_time_t alloc_time;
+ C_DATATYPE *correct_bufs[MAX_NUM_DSETS_MULTI] = {0};
+ const void *data_bufs[MAX_NUM_DSETS_MULTI] = {0};
+ void *data_bufs_nc[MAX_NUM_DSETS_MULTI] = {0}; /* non-const buffer pointers for freeing */
+ void *read_bufs[MAX_NUM_DSETS_MULTI] = {0};
+ hsize_t dataset_dims[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t chunk_dims[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t sel_dims[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t start[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t stride[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t count[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t block[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ size_t data_size, correct_buf_size;
+ size_t num_dsets;
+ hid_t dset_ids[MAX_NUM_DSETS_MULTI];
+ hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
+ hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
+ hid_t group_id = H5I_INVALID_HID;
+ hid_t filespace = H5I_INVALID_HID;
if (MAINPROCESS)
puts("Testing write to filtered chunks with a single process having no selection");
+ VRFY((H5Pget_alloc_time(dcpl_id, &alloc_time) >= 0), "H5Pget_alloc_time succeeded");
+
file_id = H5Fopen(filenames[0], H5F_ACC_RDWR, fapl_id);
VRFY((file_id >= 0), "Test file open succeeded");
@@ -2177,6 +2338,12 @@ test_write_filtered_dataset_single_no_selection(const char *parent_group, H5Z_fi
plist_id = H5Pcopy(dcpl_id);
VRFY((plist_id >= 0), "DCPL copy succeeded");
+ /*
+ * Since we're only doing a partial write to the dataset, make
+ * sure the fill time is set appropriately
+ */
+ VRFY((H5Pset_fill_time(plist_id, H5D_FILL_TIME_IFSET) >= 0), "H5Pset_fill_time succeeded");
+
VRFY((H5Pset_chunk(plist_id, WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS, chunk_dims) >= 0),
"Chunk size set");
@@ -2226,8 +2393,8 @@ test_write_filtered_dataset_single_no_selection(const char *parent_group, H5Z_fi
}
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, mpi_size > 1, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -2267,7 +2434,8 @@ test_write_filtered_dataset_single_no_selection(const char *parent_group, H5Z_fi
}
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, mpi_size == 1 && alloc_time == H5D_ALLOC_TIME_INCR);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -2305,23 +2473,26 @@ static void
test_write_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id,
hid_t dcpl_id, hid_t dxpl_id, test_mode_t test_mode)
{
- C_DATATYPE *correct_bufs[MAX_NUM_DSETS_MULTI] = {0};
- const void *data_bufs[MAX_NUM_DSETS_MULTI] = {0};
- void *data_bufs_nc[MAX_NUM_DSETS_MULTI] = {0}; /* non-const buffer pointers for freeing */
- void *read_bufs[MAX_NUM_DSETS_MULTI] = {0};
- hsize_t dataset_dims[WRITE_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t chunk_dims[WRITE_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- size_t data_size, correct_buf_size;
- size_t num_dsets;
- hid_t dset_ids[MAX_NUM_DSETS_MULTI];
- hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
- hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
- hid_t group_id = H5I_INVALID_HID;
- hid_t filespace = H5I_INVALID_HID;
+ H5D_alloc_time_t alloc_time;
+ C_DATATYPE *correct_bufs[MAX_NUM_DSETS_MULTI] = {0};
+ const void *data_bufs[MAX_NUM_DSETS_MULTI] = {0};
+ void *data_bufs_nc[MAX_NUM_DSETS_MULTI] = {0}; /* non-const buffer pointers for freeing */
+ void *read_bufs[MAX_NUM_DSETS_MULTI] = {0};
+ hsize_t dataset_dims[WRITE_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t chunk_dims[WRITE_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ size_t data_size, correct_buf_size;
+ size_t num_dsets;
+ hid_t dset_ids[MAX_NUM_DSETS_MULTI];
+ hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
+ hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
+ hid_t group_id = H5I_INVALID_HID;
+ hid_t filespace = H5I_INVALID_HID;
if (MAINPROCESS)
puts("Testing write to filtered chunks with all processes having no selection");
+ VRFY((H5Pget_alloc_time(dcpl_id, &alloc_time) >= 0), "H5Pget_alloc_time succeeded");
+
file_id = H5Fopen(filenames[0], H5F_ACC_RDWR, fapl_id);
VRFY((file_id >= 0), "Test file open succeeded");
@@ -2341,6 +2512,12 @@ test_write_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filte
plist_id = H5Pcopy(dcpl_id);
VRFY((plist_id >= 0), "DCPL copy succeeded");
+ /*
+ * Since we're doing a no-op write to the dataset,
+ * make sure the fill time is set appropriately
+ */
+ VRFY((H5Pset_fill_time(plist_id, H5D_FILL_TIME_IFSET) >= 0), "H5Pset_fill_time succeeded");
+
VRFY((H5Pset_chunk(plist_id, WRITE_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS, chunk_dims) >= 0),
"Chunk size set");
@@ -2372,8 +2549,8 @@ test_write_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filte
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, false, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -2397,7 +2574,8 @@ test_write_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filte
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, alloc_time == H5D_ALLOC_TIME_INCR);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -2514,8 +2692,8 @@ test_write_filtered_dataset_point_selection(const char *parent_group, H5Z_filter
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -2547,7 +2725,8 @@ test_write_filtered_dataset_point_selection(const char *parent_group, H5Z_filter
dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -2673,8 +2852,8 @@ test_write_filtered_dataset_interleaved_write(const char *parent_group, H5Z_filt
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -2715,7 +2894,8 @@ test_write_filtered_dataset_interleaved_write(const char *parent_group, H5Z_filt
+ dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -2852,8 +3032,8 @@ test_write_transformed_filtered_dataset_no_overlap(const char *parent_group, H5Z
/* Set data transform expression */
VRFY((H5Pset_data_transform(plist_id, "x") >= 0), "Set data transform expression succeeded");
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, plist_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, plist_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -2887,7 +3067,8 @@ test_write_transformed_filtered_dataset_no_overlap(const char *parent_group, H5Z
(j / (dataset_dims[0] / (hsize_t)mpi_size * dataset_dims[1])) + dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -3016,8 +3197,8 @@ test_write_3d_filtered_dataset_no_overlap_separate_pages(const char *parent_grou
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -3046,7 +3227,8 @@ test_write_3d_filtered_dataset_no_overlap_separate_pages(const char *parent_grou
(C_DATATYPE)((j % (hsize_t)mpi_size) + (j / (hsize_t)mpi_size) + dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -3176,8 +3358,8 @@ test_write_3d_filtered_dataset_no_overlap_same_pages(const char *parent_group, H
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -3206,7 +3388,8 @@ test_write_3d_filtered_dataset_no_overlap_same_pages(const char *parent_group, H
(j / (dataset_dims[0] * dataset_dims[1])) + dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -3333,8 +3516,8 @@ test_write_3d_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t fi
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -3380,7 +3563,8 @@ test_write_3d_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t fi
+ dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -3524,7 +3708,8 @@ test_write_cmpd_filtered_dataset_no_conversion_unshared(const char *parent_group
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs, test_mode);
+ write_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id, data_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -3557,7 +3742,8 @@ test_write_cmpd_filtered_dataset_no_conversion_unshared(const char *parent_group
}
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs, test_mode,
+ true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -3702,7 +3888,8 @@ test_write_cmpd_filtered_dataset_no_conversion_shared(const char *parent_group,
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs, test_mode);
+ write_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id, data_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -3738,7 +3925,8 @@ test_write_cmpd_filtered_dataset_no_conversion_shared(const char *parent_group,
}
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs, test_mode,
+ true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -3797,6 +3985,7 @@ test_write_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_gro
hid_t group_id = H5I_INVALID_HID;
hid_t filetype = H5I_INVALID_HID, memtype = H5I_INVALID_HID;
hid_t filespace = H5I_INVALID_HID;
+ H5D_alloc_time_t alloc_time;
if (MAINPROCESS)
puts("Testing write to unshared filtered chunks in Compound Datatype dataset with Datatype "
@@ -3831,6 +4020,9 @@ test_write_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_gro
dataset_dims, NULL);
VRFY((filespace >= 0), "File dataspace creation succeeded");
+ /* Retrieve allocation time */
+ VRFY((H5Pget_alloc_time(dcpl_id, &alloc_time) >= 0), "H5Pget_alloc_time succeeded");
+
/* Create chunked dataset */
plist_id = H5Pcopy(dcpl_id);
VRFY((plist_id >= 0), "DCPL copy succeeded");
@@ -3915,7 +4107,7 @@ test_write_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_gro
* of the H5Dwrite loop:
*/
/* write_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids,
- dxpl_id, data_bufs, test_mode); */
+ dcpl_id, dxpl_id, data_bufs, test_mode, true, true, false); */
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
herr_t expected = FAIL;
herr_t ret;
@@ -3958,9 +4150,10 @@ test_write_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_gro
VRFY((ret == expected), "Dataset write");
if (expected == SUCCEED)
- verify_chunk_opt_status(1, dxpl_id);
+ verify_chunk_opt_status(1, test_mode, true, false, true, false, false, dxpl_id);
else
- verify_chunk_opt_status(0, dxpl_id);
+ verify_chunk_opt_status(0, test_mode, false, true, true, false, alloc_time == H5D_ALLOC_TIME_LATE,
+ dxpl_id);
}
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
@@ -3986,7 +4179,11 @@ test_write_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_gro
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ /* If some writes succeeded (due to mixed filtered mode) or if allocation time is late, then there is data
+ * on disk to be read */
+ read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs, test_mode,
+ true, false,
+ !(test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED || alloc_time == H5D_ALLOC_TIME_LATE));
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
hid_t dset_dcpl;
@@ -4066,6 +4263,7 @@ test_write_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group
hid_t group_id = H5I_INVALID_HID;
hid_t filetype = H5I_INVALID_HID, memtype = H5I_INVALID_HID;
hid_t filespace = H5I_INVALID_HID;
+ H5D_alloc_time_t alloc_time;
if (MAINPROCESS)
puts("Testing write to shared filtered chunks in Compound Datatype dataset with Datatype conversion");
@@ -4099,6 +4297,9 @@ test_write_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group
dataset_dims, NULL);
VRFY((filespace >= 0), "File dataspace creation succeeded");
+ /* Retrieve allocation time */
+ VRFY((H5Pget_alloc_time(dcpl_id, &alloc_time) >= 0), "H5Pget_alloc_time succeeded");
+
/* Create chunked dataset */
plist_id = H5Pcopy(dcpl_id);
VRFY((plist_id >= 0), "DCPL copy succeeded");
@@ -4183,7 +4384,7 @@ test_write_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group
* of the H5Dwrite loop:
*/
/* write_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids,
- dxpl_id, data_bufs, test_mode); */
+ dcpl_id, dxpl_id, data_bufs, test_mode, true, true, false); */
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
herr_t expected = FAIL;
herr_t ret;
@@ -4226,9 +4427,10 @@ test_write_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group
VRFY((ret == expected), "Dataset write");
if (expected == SUCCEED)
- verify_chunk_opt_status(1, dxpl_id);
+ verify_chunk_opt_status(1, test_mode, true, false, true, false, false, dxpl_id);
else
- verify_chunk_opt_status(0, dxpl_id);
+ verify_chunk_opt_status(0, test_mode, false, true, true, false, alloc_time == H5D_ALLOC_TIME_LATE,
+ dxpl_id);
}
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
@@ -4254,7 +4456,11 @@ test_write_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ /* If some writes succeeded (due to mixed filtered mode) or if allocation time is late, then there is data
+ * on disk to be read */
+ read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs, test_mode,
+ true, false,
+ !(test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED || alloc_time == H5D_ALLOC_TIME_LATE));
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
hid_t dset_dcpl;
@@ -4419,8 +4625,8 @@ test_read_one_chunk_filtered_dataset(const char *parent_group, H5Z_filter_t filt
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -4475,8 +4681,8 @@ test_read_one_chunk_filtered_dataset(const char *parent_group, H5Z_filter_t filt
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -4639,8 +4845,8 @@ test_read_filtered_dataset_no_overlap(const char *parent_group, H5Z_filter_t fil
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -4695,8 +4901,8 @@ test_read_filtered_dataset_no_overlap(const char *parent_group, H5Z_filter_t fil
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -4861,8 +5067,8 @@ test_read_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t filter
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -4917,8 +5123,8 @@ test_read_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t filter
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -5107,8 +5313,8 @@ test_read_filtered_dataset_single_no_selection(const char *parent_group, H5Z_fil
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -5173,8 +5379,8 @@ test_read_filtered_dataset_single_no_selection(const char *parent_group, H5Z_fil
}
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, mpi_size > 1 ? true : false, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -5250,7 +5456,6 @@ test_read_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filter
void *read_bufs[MAX_NUM_DSETS_MULTI] = {0};
hsize_t dataset_dims[READ_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
hsize_t chunk_dims[READ_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t sel_dims[READ_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
size_t data_size, read_buf_size;
size_t num_dsets;
hid_t dset_ids[MAX_NUM_DSETS_MULTI];
@@ -5339,8 +5544,8 @@ test_read_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filter
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -5368,8 +5573,6 @@ test_read_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filter
open_datasets(group_id, READ_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_NAME, num_dsets, test_mode,
dset_ids);
- sel_dims[0] = sel_dims[1] = 0;
-
select_none(num_dsets, dset_ids, fspace_ids);
read_buf_size = dataset_dims[0] * dataset_dims[1] * sizeof(C_DATATYPE);
@@ -5385,8 +5588,8 @@ test_read_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filter
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(data_bufs_nc[dset_idx], 0, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, false, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
@@ -5529,8 +5732,8 @@ test_read_filtered_dataset_point_selection(const char *parent_group, H5Z_filter_
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -5586,8 +5789,8 @@ test_read_filtered_dataset_point_selection(const char *parent_group, H5Z_filter_
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -5784,8 +5987,8 @@ test_read_filtered_dataset_interleaved_read(const char *parent_group, H5Z_filter
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -5842,8 +6045,8 @@ test_read_filtered_dataset_interleaved_read(const char *parent_group, H5Z_filter
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -6025,8 +6228,8 @@ test_read_3d_filtered_dataset_no_overlap_separate_pages(const char *parent_group
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -6089,8 +6292,8 @@ test_read_3d_filtered_dataset_no_overlap_separate_pages(const char *parent_group
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -6282,8 +6485,8 @@ test_read_transformed_filtered_dataset_no_overlap(const char *parent_group, H5Z_
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
VRFY((H5Pclose(plist_id) >= 0), "DXPL close succeeded");
@@ -6349,8 +6552,8 @@ test_read_transformed_filtered_dataset_no_overlap(const char *parent_group, H5Z_
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -6518,8 +6721,8 @@ test_read_3d_filtered_dataset_no_overlap_same_pages(const char *parent_group, H5
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -6581,8 +6784,8 @@ test_read_3d_filtered_dataset_no_overlap_same_pages(const char *parent_group, H5
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -6765,8 +6968,8 @@ test_read_3d_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t fil
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -6826,8 +7029,8 @@ test_read_3d_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t fil
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -7035,7 +7238,8 @@ test_read_cmpd_filtered_dataset_no_conversion_unshared(const char *parent_group,
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs, test_mode);
+ write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT, data_bufs,
+ test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -7091,7 +7295,8 @@ test_read_cmpd_filtered_dataset_no_conversion_unshared(const char *parent_group,
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -7285,7 +7490,8 @@ test_read_cmpd_filtered_dataset_no_conversion_shared(const char *parent_group, H
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs, test_mode);
+ write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT, data_bufs,
+ test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -7341,7 +7547,8 @@ test_read_cmpd_filtered_dataset_no_conversion_shared(const char *parent_group, H
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -7538,7 +7745,8 @@ test_read_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_grou
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs, test_mode);
+ write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT, data_bufs,
+ test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -7594,7 +7802,8 @@ test_read_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_grou
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, false, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -7797,7 +8006,8 @@ test_read_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group,
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs, test_mode);
+ write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT, data_bufs,
+ test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -7853,7 +8063,8 @@ test_read_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group,
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, false, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -8006,8 +8217,8 @@ test_write_serial_read_parallel(const char *parent_group, H5Z_filter_t filter_id
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -8051,7 +8262,8 @@ test_write_serial_read_parallel(const char *parent_group, H5Z_filter_t filter_id
open_datasets(group_id, WRITE_SERIAL_READ_PARALLEL_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -8177,8 +8389,8 @@ test_write_parallel_read_serial(const char *parent_group, H5Z_filter_t filter_id
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -8228,8 +8440,8 @@ test_write_parallel_read_serial(const char *parent_group, H5Z_filter_t filter_id
(j / (dataset_dims[0] * dataset_dims[1])) + dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, H5P_DEFAULT, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, H5P_DEFAULT,
+ read_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -8275,6 +8487,7 @@ test_shrinking_growing_chunks(const char *parent_group, H5Z_filter_t filter_id,
hsize_t block[SHRINKING_GROWING_CHUNKS_DATASET_DIMS];
size_t data_size;
size_t num_dsets;
+ size_t num_loops;
hid_t dset_ids[MAX_NUM_DSETS_MULTI];
hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
@@ -8352,7 +8565,12 @@ test_shrinking_growing_chunks(const char *parent_group, H5Z_filter_t filter_id,
read_bufs[dset_idx] = tmp_buf;
}
- for (size_t i = 0; i < SHRINKING_GROWING_CHUNKS_NLOOPS; i++) {
+ /* Determine number of loops to run through */
+ num_loops = SHRINKING_GROWING_CHUNKS_NLOOPS;
+ if ((test_mode == USE_MULTIPLE_DATASETS) || (test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED))
+ num_loops /= 2;
+
+ for (size_t i = 0; i < num_loops; i++) {
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
/* Continually write random float data, followed by zeroed-out data */
if (i % 2)
@@ -8366,8 +8584,8 @@ test_shrinking_growing_chunks(const char *parent_group, H5Z_filter_t filter_id,
}
}
- write_datasets(num_dsets, dset_ids, H5T_NATIVE_DOUBLE, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, H5T_NATIVE_DOUBLE, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, i > 0);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -8381,8 +8599,8 @@ test_shrinking_growing_chunks(const char *parent_group, H5Z_filter_t filter_id,
}
}
- read_datasets(num_dsets, dset_ids, H5T_NATIVE_DOUBLE, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, H5T_NATIVE_DOUBLE, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
@@ -8511,8 +8729,8 @@ test_edge_chunks_no_overlap(const char *parent_group, H5Z_filter_t filter_id, hi
read_bufs[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id,
@@ -8525,8 +8743,8 @@ test_edge_chunks_no_overlap(const char *parent_group, H5Z_filter_t filter_id, hi
/* Verify the correct data was written */
open_datasets(group_id, WRITE_UNSHARED_FILTERED_EDGE_CHUNKS_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
@@ -8544,6 +8762,12 @@ test_edge_chunks_no_overlap(const char *parent_group, H5Z_filter_t filter_id, hi
filespace = H5Screate_simple(WRITE_UNSHARED_FILTERED_EDGE_CHUNKS_DATASET_DIMS, dataset_dims, NULL);
VRFY((filespace >= 0), "File dataspace creation succeeded");
+ /*
+ * Since we're only doing a partial write to the dataset, make
+ * sure the fill time is set appropriately
+ */
+ VRFY((H5Pset_fill_time(plist_id, H5D_FILL_TIME_IFSET) >= 0), "H5Pset_fill_time succeeded");
+
H5Pset_chunk_opts(plist_id, H5D_CHUNK_DONT_FILTER_PARTIAL_CHUNKS);
/* Create datasets depending on the current test mode */
@@ -8570,8 +8794,8 @@ test_edge_chunks_no_overlap(const char *parent_group, H5Z_filter_t filter_id, hi
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id,
@@ -8587,8 +8811,8 @@ test_edge_chunks_no_overlap(const char *parent_group, H5Z_filter_t filter_id, hi
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(read_bufs[dset_idx], 255, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
@@ -8717,8 +8941,8 @@ test_edge_chunks_overlap(const char *parent_group, H5Z_filter_t filter_id, hid_t
read_bufs[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, SOME_CHUNKS_WRITTEN);
@@ -8729,8 +8953,8 @@ test_edge_chunks_overlap(const char *parent_group, H5Z_filter_t filter_id, hid_t
/* Verify the correct data was written */
open_datasets(group_id, WRITE_SHARED_FILTERED_EDGE_CHUNKS_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
@@ -8748,6 +8972,12 @@ test_edge_chunks_overlap(const char *parent_group, H5Z_filter_t filter_id, hid_t
filespace = H5Screate_simple(WRITE_SHARED_FILTERED_EDGE_CHUNKS_DATASET_DIMS, dataset_dims, NULL);
VRFY((filespace >= 0), "File dataspace creation succeeded");
+ /*
+ * Since we're only doing a partial write to the dataset, make
+ * sure the fill time is set appropriately
+ */
+ VRFY((H5Pset_fill_time(plist_id, H5D_FILL_TIME_IFSET) >= 0), "H5Pset_fill_time succeeded");
+
H5Pset_chunk_opts(plist_id, H5D_CHUNK_DONT_FILTER_PARTIAL_CHUNKS);
/* Create datasets depending on the current test mode */
@@ -8775,8 +9005,8 @@ test_edge_chunks_overlap(const char *parent_group, H5Z_filter_t filter_id, hid_t
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, SOME_CHUNKS_WRITTEN);
@@ -8790,8 +9020,8 @@ test_edge_chunks_overlap(const char *parent_group, H5Z_filter_t filter_id, hid_t
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(read_bufs[dset_idx], 255, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
@@ -8870,6 +9100,9 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
plist_id = H5Pcopy(dcpl_id);
VRFY((plist_id >= 0), "DCPL copy succeeded");
+ /* Make sure the fill time is set appropriately */
+ VRFY((H5Pset_fill_time(plist_id, H5D_FILL_TIME_IFSET) >= 0), "H5Pset_fill_time succeeded");
+
VRFY((H5Pset_chunk(plist_id, FILL_VALUES_TEST_DATASET_DIMS, chunk_dims) >= 0), "Chunk size set");
/* Add test filter to the pipeline */
@@ -8899,7 +9132,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
}
/* Read entire dataset and verify that the fill value is returned */
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, true);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
for (size_t j = 0; j < read_buf_size / sizeof(C_DATATYPE); j++)
@@ -8941,8 +9175,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, SOME_CHUNKS_WRITTEN);
@@ -8953,7 +9187,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
/* Verify correct data was written */
open_datasets(group_id, FILL_VALUES_TEST_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
/*
* Each MPI rank communicates their written piece of data
@@ -9001,8 +9236,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, true);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -9013,7 +9248,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
/* Verify correct data was written */
open_datasets(group_id, FILL_VALUES_TEST_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
C_DATATYPE *tmp_buf = read_bufs[dset_idx];
@@ -9046,7 +9282,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
VRFY((H5Sclose(filespace) >= 0), "File dataspace close succeeded");
/* Read entire dataset and verify that the fill value is returned */
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, true);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
for (size_t j = 0; j < read_buf_size / sizeof(C_DATATYPE); j++)
@@ -9081,8 +9318,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
tmp_buf[j] = (C_DATATYPE)(GEN_DATA(j) + dset_idx);
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, SOME_CHUNKS_WRITTEN);
@@ -9093,7 +9330,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
/* Verify correct data was written */
open_datasets(group_id, FILL_VALUES_TEST_DATASET_NAME2, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t i = 0; i < (size_t)mpi_size; i++) {
recvcounts[i] = (int)(count[1] * block[1]);
@@ -9135,8 +9373,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, true);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -9147,7 +9385,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
/* Verify correct data was written */
open_datasets(group_id, FILL_VALUES_TEST_DATASET_NAME2, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
C_DATATYPE *tmp_buf = read_bufs[dset_idx];
@@ -9231,6 +9470,9 @@ test_fill_value_undefined(const char *parent_group, H5Z_filter_t filter_id, hid_
plist_id = H5Pcopy(dcpl_id);
VRFY((plist_id >= 0), "DCPL copy succeeded");
+ /* Make sure the fill time is set appropriately */
+ VRFY((H5Pset_fill_time(plist_id, H5D_FILL_TIME_IFSET) >= 0), "H5Pset_fill_time succeeded");
+
VRFY((H5Pset_chunk(plist_id, FILL_VALUE_UNDEFINED_TEST_DATASET_DIMS, chunk_dims) >= 0), "Chunk size set");
/* Add test filter to the pipeline */
@@ -9283,8 +9525,8 @@ test_fill_value_undefined(const char *parent_group, H5Z_filter_t filter_id, hid_
* allocation in parallel, so the read should succeed in that case.
*/
if (alloc_time == H5D_ALLOC_TIME_EARLY) {
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, true);
}
else {
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
@@ -9322,9 +9564,11 @@ test_fill_value_undefined(const char *parent_group, H5Z_filter_t filter_id, hid_
VRFY((ret == expected), "Dataset write");
if (expected == SUCCEED)
- verify_chunk_opt_status(1, dxpl_id);
+ verify_chunk_opt_status(1, test_mode, true, false, true, false, false, dxpl_id);
else
- verify_chunk_opt_status(0, dxpl_id);
+ verify_chunk_opt_status(
+ 0, test_mode, false, true, true,
+ alloc_time == H5D_ALLOC_TIME_INCR || alloc_time == H5D_ALLOC_TIME_LATE, false, dxpl_id);
}
}
@@ -9358,8 +9602,8 @@ test_fill_value_undefined(const char *parent_group, H5Z_filter_t filter_id, hid_
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, SOME_CHUNKS_WRITTEN);
@@ -9369,7 +9613,8 @@ test_fill_value_undefined(const char *parent_group, H5Z_filter_t filter_id, hid_
open_datasets(group_id, FILL_VALUE_UNDEFINED_TEST_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((H5Sclose(fspace_ids[dset_idx]) >= 0), "File dataspace close succeeded");
@@ -9393,8 +9638,8 @@ test_fill_value_undefined(const char *parent_group, H5Z_filter_t filter_id, hid_
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, true);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -9405,7 +9650,8 @@ test_fill_value_undefined(const char *parent_group, H5Z_filter_t filter_id, hid_
/* Verify correct data was written */
open_datasets(group_id, FILL_VALUE_UNDEFINED_TEST_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
free(data_bufs_nc[dset_idx]);
@@ -9449,12 +9695,10 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
size_t num_dsets;
hid_t dset_ids[MAX_NUM_DSETS_MULTI];
hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
- hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
- hid_t group_id = H5I_INVALID_HID;
- hid_t filespace = H5I_INVALID_HID;
- int *recvcounts = NULL;
- int *displs = NULL;
- int mpi_code;
+ hid_t file_id = H5I_INVALID_HID;
+ hid_t plist_id = H5I_INVALID_HID;
+ hid_t group_id = H5I_INVALID_HID;
+ hid_t filespace = H5I_INVALID_HID;
if (MAINPROCESS)
puts("Testing fill time H5D_FILL_TIME_NEVER");
@@ -9504,7 +9748,7 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
VRFY((set_dcpl_filter(plist_id, filter_id, NULL) >= 0), "Filter set");
/* Set a fill value */
- fill_value = FILL_VALUES_TEST_FILL_VAL;
+ fill_value = FILL_TIME_NEVER_TEST_FILL_VAL;
VRFY((H5Pset_fill_value(plist_id, HDF5_DATATYPE_NAME, &fill_value) >= 0), "Fill Value set");
/* Set fill time of 'never' */
@@ -9519,6 +9763,21 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
VRFY((H5Sclose(filespace) >= 0), "File dataspace close succeeded");
+ /* Allocate buffer for reading entire dataset */
+ read_buf_size = dataset_dims[0] * dataset_dims[1] * sizeof(C_DATATYPE);
+
+ for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
+ read_bufs[dset_idx] = calloc(1, read_buf_size);
+ VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
+ }
+
+ /* Allocate buffer of fill values */
+ fill_buf = calloc(1, read_buf_size);
+ VRFY((NULL != fill_buf), "calloc succeeded");
+
+ for (size_t i = 0; i < read_buf_size / sizeof(C_DATATYPE); i++)
+ fill_buf[i] = FILL_TIME_NEVER_TEST_FILL_VAL;
+
/*
* Since we aren't writing fill values to the chunks of the
* datasets we just created, close and re-open file to ensure
@@ -9538,37 +9797,22 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
open_datasets(group_id, FILL_TIME_NEVER_TEST_DATASET_NAME, num_dsets, test_mode, dset_ids);
- /* Allocate buffer for reading entire dataset */
- read_buf_size = dataset_dims[0] * dataset_dims[1] * sizeof(C_DATATYPE);
-
- for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
- read_bufs[dset_idx] = calloc(1, read_buf_size);
- VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
- }
-
- fill_buf = calloc(1, read_buf_size);
- VRFY((NULL != fill_buf), "calloc succeeded");
-
- /* Read entire dataset and verify that the fill value isn't returned */
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
-
- for (size_t i = 0; i < read_buf_size / sizeof(C_DATATYPE); i++)
- fill_buf[i] = FILL_TIME_NEVER_TEST_FILL_VAL;
-
/*
- * It should be very unlikely for the dataset's random
- * values to all be the fill value, so this should be
- * a safe comparison in theory.
+ * Read entire dataset just to try to verify bad behavior doesn't
+ * occur. Don't attempt to verify the contents of the read buffer(s)
+ * yet, because there's no guarantee as to what may have been
+ * read from the dataset.
*/
- for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
- VRFY((0 != memcmp(read_bufs[dset_idx], fill_buf, read_buf_size)), "Data verification succeeded");
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, true);
/*
* Write to part of the first chunk in the dataset with
- * all ranks, then read the whole dataset and ensure that
- * the fill value isn't returned for the unwritten part of
- * the chunk, as well as for the rest of the dataset that
- * hasn't been written to yet.
+ * all ranks, then read the whole dataset just to try to
+ * verify bad behavior doesn't occur. Don't attempt to
+ * verify the contents of the read buffer(s) yet, because
+ * there's no guarantee as to what may have been read from
+ * the dataset.
*/
count[0] = 1;
count[1] = 1;
@@ -9595,8 +9839,8 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, SOME_CHUNKS_WRITTEN);
@@ -9607,35 +9851,8 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
/* Verify correct data was written */
open_datasets(group_id, FILL_TIME_NEVER_TEST_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
-
- /*
- * Each MPI rank communicates their written piece of data
- * into each other rank's correctness-checking buffer
- */
- recvcounts = calloc(1, (size_t)mpi_size * sizeof(*recvcounts));
- VRFY((NULL != recvcounts), "calloc succeeded");
-
- displs = calloc(1, (size_t)mpi_size * sizeof(*displs));
- VRFY((NULL != displs), "calloc succeeded");
-
- for (size_t i = 0; i < (size_t)mpi_size; i++) {
- recvcounts[i] = (int)(count[1] * block[1]);
- displs[i] = (int)(i * dataset_dims[1]);
- }
-
- for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
- mpi_code = MPI_Allgatherv(data_bufs[dset_idx], recvcounts[mpi_rank], C_DATATYPE_MPI, fill_buf,
- recvcounts, displs, C_DATATYPE_MPI, comm);
- VRFY((MPI_SUCCESS == mpi_code), "MPI_Allgatherv succeeded");
-
- /*
- * It should be very unlikely for the dataset's random
- * values to all be the fill value, so this should be
- * a safe comparison in theory.
- */
- VRFY((0 != memcmp(read_bufs[dset_idx], fill_buf, read_buf_size)), "Data verification succeeded");
- }
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((H5Sclose(fspace_ids[dset_idx]) >= 0), "File dataspace close succeeded");
@@ -9659,8 +9876,8 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -9671,7 +9888,8 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
/* Verify correct data was written */
open_datasets(group_id, FILL_TIME_NEVER_TEST_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
C_DATATYPE *tmp_buf = read_bufs[dset_idx];
@@ -9680,9 +9898,6 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
VRFY((tmp_buf[j] != FILL_TIME_NEVER_TEST_FILL_VAL), "Data verification succeeded");
}
- free(displs);
- free(recvcounts);
-
free(fill_buf);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
@@ -9827,7 +10042,13 @@ main(int argc, char **argv)
fcpl_id = H5Pcreate(H5P_FILE_CREATE);
VRFY((fcpl_id >= 0), "FCPL creation succeeded");
- VRFY((H5Pset_file_space_strategy(fcpl_id, H5F_FSPACE_STRATEGY_PAGE, true, 1) >= 0),
+ /*
+ * TODO: Ideally, use persistent free space management. However,
+ * this occasionally runs into an infinite loop in the library's
+ * free space management code, so don't persist free space for now
+ * until that is fixed.
+ */
+ VRFY((H5Pset_file_space_strategy(fcpl_id, H5F_FSPACE_STRATEGY_PAGE, false, 1) >= 0),
"H5Pset_file_space_strategy succeeded");
VRFY((h5_fixname(FILENAME[0], fapl_id, filenames[0], sizeof(filenames[0])) != NULL),
@@ -9956,6 +10177,19 @@ main(int argc, char **argv)
continue;
}
+ /*
+ * If TestExpress is > 1, only run the multi-chunk I/O
+ * configuration tests for the 'USE_SINGLE_DATASET' case,
+ * as the 'USE_MULTIPLE_DATASETS' and 'USE_MULTIPLE_DATASETS_MIXED_FILTERED'
+ * cases are more stressful on the file system.
+ */
+ if (test_express_level_g > 1) {
+ if (((test_mode == USE_MULTIPLE_DATASETS) ||
+ (test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED)) &&
+ (chunk_opt != H5FD_MPIO_CHUNK_ONE_IO))
+ continue;
+ }
+
if (MAINPROCESS) {
printf("== Running tests in mode '%s' with filter '%s' using selection I/O mode "
"'%s', '%s' and '%s' allocation time ==\n\n",
@@ -9992,6 +10226,15 @@ main(int argc, char **argv)
VRFY((H5Pset_dxpl_mpio_chunk_opt(dxpl_id, chunk_opt) >= 0),
"H5Pset_dxpl_mpio_chunk_opt succeeded");
+ /*
+ * Disable writing of fill values by default. Otherwise, a
+ * lot of time may be spent writing fill values to chunks
+ * when they're going to be fully overwritten anyway.
+ * Individual tests will alter this behavior as necessary.
+ */
+ VRFY((H5Pset_fill_time(dcpl_id, H5D_FILL_TIME_NEVER) >= 0),
+ "H5Pset_fill_time succeeded");
+
/* Create a group to hold all the datasets for this combination
* of filter and chunk optimization mode. Then, close the file
* again since some tests may need to open the file in a special
diff --git a/testpar/t_filters_parallel.h b/testpar/t_filters_parallel.h
index c0b1db8..04d3639 100644
--- a/testpar/t_filters_parallel.h
+++ b/testpar/t_filters_parallel.h
@@ -444,7 +444,7 @@ typedef struct {
#define SHRINKING_GROWING_CHUNKS_NCOLS (mpi_size * DIM1_SCALE_FACTOR)
#define SHRINKING_GROWING_CHUNKS_CH_NROWS (SHRINKING_GROWING_CHUNKS_NROWS / mpi_size)
#define SHRINKING_GROWING_CHUNKS_CH_NCOLS (SHRINKING_GROWING_CHUNKS_NCOLS / mpi_size)
-#define SHRINKING_GROWING_CHUNKS_NLOOPS 20
+#define SHRINKING_GROWING_CHUNKS_NLOOPS 8
/* Defines for the unshared filtered edge chunks write test */
#define WRITE_UNSHARED_FILTERED_EDGE_CHUNKS_DATASET_NAME "unshared_filtered_edge_chunks_write"
diff --git a/testpar/t_select_io_dset.c b/testpar/t_select_io_dset.c
index 2e6839e..2be2b40 100644
--- a/testpar/t_select_io_dset.c
+++ b/testpar/t_select_io_dset.c
@@ -159,7 +159,7 @@ set_dxpl(hid_t dxpl, H5D_selection_io_mode_t select_io_mode, H5FD_mpio_xfer_t mp
} /* set_dxpl() */
/*
- * Helper routine to check actual I/O mode on a dxpl
+ * Helper routine to check actual parallel I/O mode on a dxpl
*/
static void
check_io_mode(hid_t dxpl, unsigned chunked)
@@ -186,29 +186,65 @@ check_io_mode(hid_t dxpl, unsigned chunked)
} /* check_io_mode() */
+static void
+testing_check_io_mode(hid_t dxpl, H5D_mpio_actual_io_mode_t exp_io_mode)
+{
+ H5D_mpio_actual_io_mode_t actual_io_mode;
+
+ if (H5Pget_mpio_actual_io_mode(dxpl, &actual_io_mode) < 0)
+ P_TEST_ERROR;
+
+ if (actual_io_mode != exp_io_mode) {
+ nerrors++;
+ if (MAINPROCESS)
+ printf("\n Failed: Incorrect I/O mode (expected/actual) %u:%u", (unsigned)exp_io_mode,
+ (unsigned)actual_io_mode);
+ }
+
+} /* testing_check_io_mode() */
+
+/*
+ * Helper routine to check actual selection I/O mode on a dxpl
+ */
+static void
+check_actual_selection_io_mode(hid_t dxpl, uint32_t sel_io_mode_expected)
+{
+ uint32_t actual_sel_io_mode;
+
+ if (H5Pget_actual_selection_io_mode(dxpl, &actual_sel_io_mode) < 0)
+ P_TEST_ERROR;
+ if (actual_sel_io_mode != sel_io_mode_expected) {
+ if (MAINPROCESS)
+ printf("\n Failed: Incorrect selection I/O mode (expected/actual) %u:%u",
+ (unsigned)sel_io_mode_expected, (unsigned)actual_sel_io_mode);
+ P_TEST_ERROR;
+ }
+}
+
/*
* Case 1: single dataset read/write, no type conversion (null case)
*/
static void
-test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned select, unsigned mwbuf)
{
- int i;
- hid_t did = H5I_INVALID_HID;
- hid_t sid = H5I_INVALID_HID;
- hid_t dcpl = H5I_INVALID_HID;
- hid_t dxpl = H5I_INVALID_HID;
- hid_t ntrans_dxpl = H5I_INVALID_HID;
- hid_t fspace_id = H5I_INVALID_HID;
- hid_t mspace_id = H5I_INVALID_HID;
- hsize_t dims[1];
- hsize_t cdims[1];
- hsize_t start[1], stride[1], count[1], block[1];
- int wbuf[DSET_SELECT_DIM];
- int wbuf_bak[DSET_SELECT_DIM];
- int trans_wbuf[DSET_SELECT_DIM];
- int rbuf[DSET_SELECT_DIM];
- char dset_name[DSET_NAME_LEN];
- const char *expr = "2*x";
+ int i;
+ hid_t did = H5I_INVALID_HID;
+ hid_t sid = H5I_INVALID_HID;
+ hid_t dcpl = H5I_INVALID_HID;
+ hid_t dxpl = H5I_INVALID_HID;
+ hid_t ntrans_dxpl = H5I_INVALID_HID;
+ hid_t fspace_id = H5I_INVALID_HID;
+ hid_t mspace_id = H5I_INVALID_HID;
+ hsize_t dims[1];
+ hsize_t cdims[1];
+ hsize_t start[1], stride[1], count[1], block[1];
+ int wbuf[DSET_SELECT_DIM];
+ int wbuf_bak[DSET_SELECT_DIM];
+ int trans_wbuf[DSET_SELECT_DIM];
+ int rbuf[DSET_SELECT_DIM];
+ char dset_name[DSET_NAME_LEN];
+ const char *expr = "2*x";
+ H5D_mpio_actual_io_mode_t exp_io_mode = H5D_MPIO_NO_COLLECTIVE;
curr_nerrors = nerrors;
@@ -224,11 +260,13 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
cdims[0] = DSET_SELECT_CHUNK_DIM;
if (H5Pset_chunk(dcpl, 1, cdims) < 0)
P_TEST_ERROR;
+ if (!dtrans && H5Pset_deflate(dcpl, 2) < 0)
+ P_TEST_ERROR;
}
/* Generate dataset name */
- snprintf(dset_name, sizeof(dset_name), "no_tconv_%s_%s_%s", chunked ? "chunked" : "contig",
- dtrans ? "xform" : "noxform", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_name, sizeof(dset_name), "no_tconv_%s_%s_%s_%s", chunked ? "chunked" : "contig",
+ dtrans ? "xform" : "noxform", select ? "sel" : "nosel", mwbuf ? "mwbuf" : "nomwbuf");
/* Create dataset */
if ((did = H5Dcreate2(fid, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
@@ -262,7 +300,8 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
P_TEST_ERROR;
@@ -284,7 +323,14 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
if (mwbuf)
memcpy(wbuf, wbuf_bak, sizeof(wbuf));
- check_io_mode(dxpl, chunked);
+ if (!dtrans || select)
+ exp_io_mode = chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE;
+ testing_check_io_mode(dxpl, exp_io_mode);
+
+ if (chunked && !dtrans)
+ check_actual_selection_io_mode(dxpl, H5D_VECTOR_IO);
+ else
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Read data from the dataset (if dtrans, without data transform set in dxpl) */
if (H5Dread(did, H5T_NATIVE_INT, mspace_id, fspace_id, ntrans_dxpl, rbuf) < 0)
@@ -327,6 +373,8 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
P_TEST_ERROR;
if (H5Pclose(dxpl) < 0)
P_TEST_ERROR;
+ if (H5Pclose(dcpl) < 0)
+ P_TEST_ERROR;
if (H5Pclose(ntrans_dxpl) < 0)
P_TEST_ERROR;
@@ -339,7 +387,7 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
* Case 2: single dataset read/write, no size change, no background buffer
*/
static void
-test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
+test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned select, unsigned mwbuf)
{
int i;
hid_t did = H5I_INVALID_HID;
@@ -356,6 +404,8 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
char *rbuf = NULL;
char dset_name[DSET_NAME_LEN];
+ H5D_mpio_actual_io_mode_t exp_io_mode = H5D_MPIO_NO_COLLECTIVE;
+
curr_nerrors = nerrors;
if ((wbuf = (char *)malloc((size_t)(4 * DSET_SELECT_DIM))) == NULL)
@@ -379,8 +429,8 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
}
/* Generate dataset name */
- snprintf(dset_name, sizeof(dset_name), "no_size_change_%s_%s", chunked ? "chunked" : "contig",
- mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_name, sizeof(dset_name), "no_size_change_%s_%s_%s", chunked ? "chunked" : "contig",
+ select ? "sel" : "nosel", mwbuf ? "mwbuf" : "nomwbuf");
/* Create 1d dataset */
if ((did = H5Dcreate2(fid, dset_name, H5T_STD_I32BE, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
@@ -416,7 +466,8 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
/* Copy wbuf if the library will be modifying it */
if (mwbuf)
@@ -430,7 +481,11 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
if (mwbuf)
memcpy(wbuf, wbuf_bak, (size_t)(4 * DSET_SELECT_DIM));
- check_io_mode(dxpl, chunked);
+ if (select)
+ exp_io_mode = chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE;
+
+ testing_check_io_mode(dxpl, exp_io_mode);
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Read the data from the dataset with little endian */
if (H5Dread(did, H5T_STD_I32LE, mspace_id, fspace_id, dxpl, rbuf) < 0)
@@ -489,25 +544,26 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
* Case 3: single dataset read/write, larger mem type, no background buffer
*/
static void
-test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned select, unsigned mwbuf)
{
- int i;
- hid_t did = H5I_INVALID_HID;
- hid_t sid = H5I_INVALID_HID;
- hid_t dcpl = H5I_INVALID_HID;
- hid_t dxpl = H5I_INVALID_HID;
- hid_t ntrans_dxpl = H5I_INVALID_HID;
- hid_t fspace_id = H5I_INVALID_HID;
- hid_t mspace_id = H5I_INVALID_HID;
- hsize_t dims[1];
- hsize_t cdims[1];
- hsize_t start[1], stride[1], count[1], block[1];
- long wbuf[DSET_SELECT_DIM];
- long wbuf_bak[DSET_SELECT_DIM];
- long trans_wbuf[DSET_SELECT_DIM];
- long long rbuf[DSET_SELECT_DIM];
- char dset_name[DSET_NAME_LEN];
- const char *expr = "100 - x";
+ int i;
+ hid_t did = H5I_INVALID_HID;
+ hid_t sid = H5I_INVALID_HID;
+ hid_t dcpl = H5I_INVALID_HID;
+ hid_t dxpl = H5I_INVALID_HID;
+ hid_t ntrans_dxpl = H5I_INVALID_HID;
+ hid_t fspace_id = H5I_INVALID_HID;
+ hid_t mspace_id = H5I_INVALID_HID;
+ hsize_t dims[1];
+ hsize_t cdims[1];
+ hsize_t start[1], stride[1], count[1], block[1];
+ long wbuf[DSET_SELECT_DIM];
+ long wbuf_bak[DSET_SELECT_DIM];
+ long trans_wbuf[DSET_SELECT_DIM];
+ long long rbuf[DSET_SELECT_DIM];
+ char dset_name[DSET_NAME_LEN];
+ const char *expr = "100 - x";
+ H5D_mpio_actual_io_mode_t exp_io_mode = H5D_MPIO_NO_COLLECTIVE;
curr_nerrors = nerrors;
@@ -525,8 +581,8 @@ test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsign
}
/* Generate dataset name */
- snprintf(dset_name, sizeof(dset_name), "larger_no_bkg_%s_%s_%s", chunked ? "chunked" : "contig",
- dtrans ? "xform" : "noxform", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_name, sizeof(dset_name), "larger_no_bkg_%s_%s_%s_%s", chunked ? "chunked" : "contig",
+ dtrans ? "xform" : "noxform", select ? "sel" : "nosel", mwbuf ? "mwbuf" : "nomwbuf");
/* Create 1d chunked dataset with/without data transform */
if ((did = H5Dcreate2(fid, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
@@ -560,7 +616,8 @@ test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsign
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
P_TEST_ERROR;
@@ -582,7 +639,11 @@ test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsign
if (mwbuf)
memcpy(wbuf, wbuf_bak, sizeof(wbuf));
- check_io_mode(dxpl, chunked);
+ if (select)
+ exp_io_mode = chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE;
+
+ testing_check_io_mode(dxpl, exp_io_mode);
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Read data from the dataset (if dtrans, without data transform set in dxpl) */
if (H5Dread(did, H5T_NATIVE_LLONG, mspace_id, fspace_id, ntrans_dxpl, rbuf) < 0)
@@ -637,25 +698,26 @@ test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsign
* Case 4: single dataset reader/write, smaller mem type, no background buffer
*/
static void
-test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned select, unsigned mwbuf)
{
- int i;
- hid_t did = H5I_INVALID_HID;
- hid_t sid = H5I_INVALID_HID;
- hid_t dcpl = H5I_INVALID_HID;
- hid_t dxpl = H5I_INVALID_HID;
- hid_t ntrans_dxpl = H5I_INVALID_HID;
- hid_t fspace_id = H5I_INVALID_HID;
- hid_t mspace_id = H5I_INVALID_HID;
- hsize_t dims[1];
- hsize_t cdims[1];
- hsize_t start[1], stride[1], count[1], block[1];
- short wbuf[DSET_SELECT_DIM];
- int wbuf_bak[DSET_SELECT_DIM];
- short trans_wbuf[DSET_SELECT_DIM];
- short rbuf[DSET_SELECT_DIM];
- char dset_name[DSET_NAME_LEN];
- const char *expr = "2 * (10 + x)";
+ int i;
+ hid_t did = H5I_INVALID_HID;
+ hid_t sid = H5I_INVALID_HID;
+ hid_t dcpl = H5I_INVALID_HID;
+ hid_t dxpl = H5I_INVALID_HID;
+ hid_t ntrans_dxpl = H5I_INVALID_HID;
+ hid_t fspace_id = H5I_INVALID_HID;
+ hid_t mspace_id = H5I_INVALID_HID;
+ hsize_t dims[1];
+ hsize_t cdims[1];
+ hsize_t start[1], stride[1], count[1], block[1];
+ short wbuf[DSET_SELECT_DIM];
+ int wbuf_bak[DSET_SELECT_DIM];
+ short trans_wbuf[DSET_SELECT_DIM];
+ short rbuf[DSET_SELECT_DIM];
+ char dset_name[DSET_NAME_LEN];
+ const char *expr = "2 * (10 + x)";
+ H5D_mpio_actual_io_mode_t exp_io_mode = H5D_MPIO_NO_COLLECTIVE;
curr_nerrors = nerrors;
@@ -673,8 +735,8 @@ test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsig
}
/* Generate dataset name */
- snprintf(dset_name, sizeof(dset_name), "smaller_no_bkg_%s_%s_%s", chunked ? "chunked" : "contig",
- dtrans ? "xform" : "noxform", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_name, sizeof(dset_name), "smaller_no_bkg_%s_%s_%s_%s", chunked ? "chunked" : "contig",
+ dtrans ? "xform" : "noxform", select ? "sel" : "nosel", mwbuf ? "mwbuf" : "nomwbuf");
/* Create 1d chunked dataset with/without data transform */
if ((did = H5Dcreate2(fid, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
@@ -708,7 +770,8 @@ test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsig
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
P_TEST_ERROR;
@@ -731,7 +794,11 @@ test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsig
if (mwbuf)
memcpy(wbuf, wbuf_bak, sizeof(wbuf));
- check_io_mode(dxpl, chunked);
+ if (select)
+ exp_io_mode = chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE;
+
+ testing_check_io_mode(dxpl, exp_io_mode);
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Read data from the dataset (if dtrans, without data transform set in dxpl) */
if (H5Dread(did, H5T_NATIVE_SHORT, mspace_id, fspace_id, ntrans_dxpl, rbuf) < 0)
@@ -804,7 +871,7 @@ test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsig
* Verify the values read
*/
static void
-test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
+test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned select, unsigned mwbuf)
{
int i;
hid_t did = H5I_INVALID_HID;
@@ -870,8 +937,8 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Case 5(a) */
/* Generate dataset name */
- snprintf(dset_name, sizeof(dset_name), "cmpd_with_bkg_%s_%s", chunked ? "chunked" : "contig",
- mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_name, sizeof(dset_name), "cmpd_with_bkg_%s_%s_%s", chunked ? "chunked" : "contig",
+ select ? "sel" : "nosel", mwbuf ? "mwbuf" : "nomwbuf");
/* Create 1d dataset */
if ((did = H5Dcreate2(fid, dset_name, s1_tid, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
@@ -907,7 +974,8 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
/* Copy wbuf if the library will be modifying it */
if (mwbuf)
@@ -917,12 +985,12 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
if (H5Dwrite(did, s1_tid, mspace_id, fspace_id, dxpl, s1_wbuf) < 0)
P_TEST_ERROR;
+ check_io_mode(dxpl, chunked);
+
/* Restore wbuf from backup if the library modified it */
if (mwbuf)
memcpy(s1_wbuf, s1_wbuf_bak, sizeof(s1_t) * DSET_SELECT_DIM);
- check_io_mode(dxpl, chunked);
-
/* Read all the data from the dataset */
memset(s1_rbuf, 0, sizeof(s1_t) * DSET_SELECT_DIM);
if (H5Dread(did, s1_tid, mspace_id, fspace_id, dxpl, s1_rbuf) < 0)
@@ -1094,6 +1162,10 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
if (H5Tclose(ss_bc_tid) < 0)
P_TEST_ERROR;
+ if (H5Pclose(dxpl) < 0)
+ P_TEST_ERROR;
+ if (H5Pclose(dcpl) < 0)
+ P_TEST_ERROR;
if (H5Dclose(did) < 0)
P_TEST_ERROR;
@@ -1115,7 +1187,7 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
* Case 6: Type conversions + some processes have null/empty selections in datasets
*/
static void
-test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned select, unsigned mwbuf)
{
int i;
hid_t did = H5I_INVALID_HID;
@@ -1158,8 +1230,8 @@ test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned
}
/* Generate dataset name */
- snprintf(dset_name, sizeof(dset_name), "tconv_sel_empty_%s_%s_%s", chunked ? "chunked" : "contig",
- dtrans ? "xform" : "noxform", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_name, sizeof(dset_name), "tconv_sel_empty_%s_%s_%s_%s", chunked ? "chunked" : "contig",
+ dtrans ? "xform" : "noxform", select ? "sel" : "nosel", mwbuf ? "mwbuf" : "nomwbuf");
/* Create dataset */
if ((did = H5Dcreate2(fid, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
@@ -1170,7 +1242,8 @@ test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
P_TEST_ERROR;
@@ -1210,7 +1283,7 @@ test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned
/* Create a memory dataspace */
if ((mspace_id = H5Screate_simple(1, block, NULL)) < 0)
P_TEST_ERROR;
- if (mpi_rank) {
+ if (!MAINPROCESS) {
if (H5Sselect_none(mspace_id) < 0)
P_TEST_ERROR;
}
@@ -1227,7 +1300,13 @@ test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned
if (mwbuf)
memcpy(lwbuf, lwbuf_bak, sizeof(lwbuf));
- check_io_mode(dxpl, chunked);
+ /* If not using selection I/O there will be no collective I/O, since type conversion is unsupported by
+ * legacy collective I/O */
+ testing_check_io_mode(
+ dxpl, select ? (chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE) : 0);
+
+ /* If not using selection I/O then the main process will do scalar I/O and others will do none */
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : (MAINPROCESS ? H5D_SCALAR_IO : 0));
/* Read the data from the dataset: type conversion int-->long */
/* If dtrans, without data transform set in dxpl */
@@ -1395,7 +1474,7 @@ test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned
* Datatype for all datasets: H5T_NATIVE_LONG
*/
static void
-test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned select, unsigned mwbuf)
{
size_t ndsets;
int i, j;
@@ -1410,6 +1489,8 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
hid_t mem_sids[MULTI_NUM_DSETS];
hid_t mem_tids[MULTI_NUM_DSETS];
+ bool any_tconv = false;
+
char dset_names[MULTI_NUM_DSETS][DSET_NAME_LEN];
hid_t dset_dids[MULTI_NUM_DSETS];
@@ -1457,7 +1538,8 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
P_TEST_ERROR;
@@ -1469,17 +1551,24 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
/* Set up file space ids and dataset ids */
for (i = 0; i < (int)ndsets; i++) {
+ bool tconv;
+
if ((file_sids[i] = H5Screate_simple(1, dims, NULL)) < 0)
P_TEST_ERROR;
/* Generate dataset name */
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_dset%d_%s_%s_%s", i,
- chunked ? "chunked" : "contig", dtrans ? "xform" : "noxform", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_dset%d_%s_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", dtrans ? "xform" : "noxform", select ? "select" : "noselect",
+ mwbuf ? "mwbuf" : "nomwbuf");
+
+ /* Flip a coin to see if we're doing type conversion */
+ tconv = HDrandom() % 2;
+ if (tconv)
+ any_tconv = true;
/* Create ith dataset */
- if ((dset_dids[i] =
- H5Dcreate2(fid, dset_names[i], ((HDrandom() % 2) ? H5T_NATIVE_LONG : H5T_NATIVE_INT),
- file_sids[i], H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
+ if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], (tconv ? H5T_NATIVE_LONG : H5T_NATIVE_INT),
+ file_sids[i], H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
P_TEST_ERROR;
}
@@ -1555,7 +1644,12 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
if (mwbuf)
memcpy(total_wbuf, total_wbuf_bak, ndsets * DSET_SELECT_DIM * sizeof(int));
- check_io_mode(dxpl, chunked);
+ /* If doing type conversion or transform and not using selection I/O there will be no collective I/O,
+ * since type conversion is unsupported by legacy collective I/O */
+ testing_check_io_mode(dxpl, ((any_tconv || dtrans) && !select)
+ ? 0
+ : (chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE));
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Read data from the dataset (if dtrans, without data transform set in dxpl) */
if (H5Dread_multi(ndsets, dset_dids, mem_tids, mem_sids, file_sids, ntrans_dxpl, rbufs) < 0)
@@ -1708,7 +1802,7 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
* --Verify values read
*/
static void
-test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
+test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned select, unsigned mwbuf)
{
size_t ndsets;
int i, j, mm;
@@ -1769,7 +1863,8 @@ test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
/* Each process takes x number of elements */
block[0] = dims[0] / (hsize_t)mpi_size;
@@ -1794,8 +1889,8 @@ test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Generate dataset name */
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_cmpd_dset%d_%s_%s", i,
- chunked ? "chunked" : "contig", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_cmpd_dset%d_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", select ? "select" : "noselect", mwbuf ? "mwbuf" : "nomwbuf");
/* Create ith dataset */
if ((dset_dids[i] =
@@ -1860,6 +1955,7 @@ test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
memcpy(total_wbuf, total_wbuf_bak, buf_size);
check_io_mode(dxpl, chunked);
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
if (H5Dread_multi(ndsets, dset_dids, mem_tids, mem_sids, file_sids, dxpl, rbufs) < 0)
P_TEST_ERROR;
@@ -2164,7 +2260,7 @@ test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
* Datatype for all datasets: H5T_STD_I16BE
*/
static void
-test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
+test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned select, unsigned mwbuf)
{
size_t ndsets;
int i, j;
@@ -2222,7 +2318,8 @@ test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
/* Set up file space ids, mem space ids, and dataset ids */
for (i = 0; i < (int)ndsets; i++) {
@@ -2230,8 +2327,8 @@ test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Generate dataset name */
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_size_dset%d_%s_%s", i,
- chunked ? "chunked" : "contig", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_size_dset%d_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", select ? "select" : "noselect", mwbuf ? "mwbuf" : "nomwbuf");
/* Create ith dataset */
if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], H5T_STD_I32BE, file_sids[i], H5P_DEFAULT, dcpl,
@@ -2301,6 +2398,7 @@ test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
memcpy(total_wbuf, total_wbuf_bak, buf_size);
check_io_mode(dxpl, chunked);
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Read data from the dataset */
if (H5Dread_multi(ndsets, dset_dids, mem_tids, mem_sids, file_sids, dxpl, rbufs) < 0)
@@ -2510,7 +2608,7 @@ test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
* --this will trigger type conversion for (a), (b) & (c)
*/
static void
-test_multi_dsets_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_multi_dsets_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned select, unsigned mwbuf)
{
size_t ndsets;
int i, j;
@@ -2568,7 +2666,8 @@ test_multi_dsets_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, un
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
P_TEST_ERROR;
@@ -2584,8 +2683,9 @@ test_multi_dsets_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, un
P_TEST_ERROR;
/* Generate dataset name */
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_sel_dset%d_%s_%s_%s", i,
- chunked ? "chunked" : "contig", dtrans ? "xform" : "noxform", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_sel_dset%d_%s_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", dtrans ? "xform" : "noxform", select ? "select" : "noselect",
+ mwbuf ? "mwbuf" : "nomwbuf");
if (i == 0) {
if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], H5T_NATIVE_INT, file_sids[i], H5P_DEFAULT,
@@ -2769,7 +2869,11 @@ test_multi_dsets_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, un
if (mwbuf)
memcpy(total_wbuf, total_wbuf_bak, buf_size);
- check_io_mode(dxpl, chunked);
+ /* If not using selection I/O there will be no collective I/O, since type conversion is unsupported by
+ * legacy collective I/O */
+ testing_check_io_mode(
+ dxpl, select ? (chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE) : 0);
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Initialize buffer indices */
for (i = 0; i < (int)ndsets; i++) {
@@ -2903,7 +3007,7 @@ test_multi_dsets_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, un
* --fields 'b' and 'd' are (DSET_SELECT_DIM + j + start[0])
*/
static void
-test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
+test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned select, unsigned mwbuf)
{
size_t ndsets;
int i, j, mm;
@@ -2920,6 +3024,8 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
hid_t mem_tids[MULTI_NUM_DSETS];
hid_t r_mem_tids[MULTI_NUM_DSETS];
+ bool any_tconv;
+
multi_dset_type_t dset_types[MULTI_NUM_DSETS];
hid_t s1_tid = H5I_INVALID_HID;
@@ -2978,7 +3084,8 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
/* Set dataset layout: contiguous or chunked */
dims[0] = DSET_SELECT_DIM;
@@ -3039,24 +3146,27 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
mm = HDrandom() % (int)ndsets;
if (mm == 0) {
dset_types[i] = DSET_WITH_NO_CONV;
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_all_nconv_dset%d_%s_%s", i,
- chunked ? "chunked" : "contig", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_all_nconv_dset%d_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", select ? "select" : "noselect",
+ mwbuf ? "mwbuf" : "nomwbuf");
if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], H5T_NATIVE_INT, file_sids[i], H5P_DEFAULT,
dcpl, H5P_DEFAULT)) < 0)
P_TEST_ERROR;
}
else if (mm == 1) {
dset_types[i] = DSET_WITH_CONV_AND_NO_BKG;
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_all_conv_nbkg_dset%d_%s_%s", i,
- chunked ? "chunked" : "contig", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_all_conv_nbkg_dset%d_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", select ? "select" : "noselect",
+ mwbuf ? "mwbuf" : "nomwbuf");
if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], H5T_NATIVE_LONG, file_sids[i], H5P_DEFAULT,
dcpl, H5P_DEFAULT)) < 0)
P_TEST_ERROR;
}
else {
dset_types[i] = DSET_WITH_CONV_AND_BKG;
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_all_conv_bkg_dset%d_%s_%s", i,
- chunked ? "chunked" : "contig", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_all_conv_bkg_dset%d_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", select ? "select" : "noselect",
+ mwbuf ? "mwbuf" : "nomwbuf");
if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], s1_tid, file_sids[i], H5P_DEFAULT, dcpl,
H5P_DEFAULT)) < 0)
P_TEST_ERROR;
@@ -3119,6 +3229,8 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
/* Test with s settings for ndsets */
for (s = SETTING_A; s <= SETTING_B; s++) {
+ any_tconv = false;
+
/* for i ndsets */
for (i = 0; i < (int)ndsets; i++) {
@@ -3171,6 +3283,9 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
mem_tids[i] = H5T_NATIVE_LONG;
r_mem_tids[i] = H5T_NATIVE_SHORT;
+
+ /* There is type conversion in the read op */
+ any_tconv = true;
}
break;
@@ -3194,6 +3309,9 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
}
mem_tids[i] = s1_tid;
r_mem_tids[i] = s3_tid;
+
+ /* There is type conversion in the read op */
+ any_tconv = true;
}
else if (s == SETTING_B) {
/* Initialize buffer indices */
@@ -3246,7 +3364,12 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
if (H5Dread_multi(ndsets, dset_dids, r_mem_tids, mem_sids, file_sids, dxpl, rbufs) < 0)
P_TEST_ERROR;
- check_io_mode(dxpl, chunked);
+ /* If doing type conversion and not using selection I/O there will be no collective I/O, since
+ * type conversion is unsupported by legacy collective I/O */
+ testing_check_io_mode(dxpl, (any_tconv && !select) ? 0
+ : (chunked ? H5D_MPIO_CHUNK_COLLECTIVE
+ : H5D_MPIO_CONTIGUOUS_COLLECTIVE));
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Verify result read */
/* for i ndsets */
@@ -3422,6 +3545,8 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
if ((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0)
P_TEST_ERROR;
+ set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, false);
+
if ((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
P_TEST_ERROR;
@@ -3442,20 +3567,12 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
/* Datatype conversion */
if (test_mode & TEST_DATATYPE_CONVERSION) {
- /* With one exception, all will land at H5FD__mpio_read/write_selection().
- * As the xfer mode is H5FD_MPIO_INDEPENDENT, this will call
- * H5FD__read/write_from_selection() triggering H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB.
- */
- no_selection_io_cause_read_expected |= H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB;
+ /* With one exception, all will land at H5FD__mpio_read/write_selection() */
- /* Exception case: This will turn off selection I/O landing at H5FD__mpio_write() */
- if ((test_mode & TEST_TCONV_BUF_TOO_SMALL) && !(test_mode & TEST_IN_PLACE_TCONV))
- no_selection_io_cause_write_expected |= H5D_SEL_IO_TCONV_BUF_TOO_SMALL;
- else
- no_selection_io_cause_write_expected |= H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB;
+ if (test_mode & TEST_IN_PLACE_TCONV)
+ if (H5Pset_modify_write_buf(dxpl, true) < 0)
+ P_TEST_ERROR;
- if (H5Pset_selection_io(dxpl, H5D_SELECTION_IO_MODE_ON) < 0)
- P_TEST_ERROR;
tid = H5T_NATIVE_UINT;
/* If we're testing a too small tconv buffer, set the buffer to be too small */
@@ -3463,11 +3580,13 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
if (H5Pset_buffer(dxpl, sizeof(int), NULL, NULL) < 0)
P_TEST_ERROR;
- if (test_mode & TEST_IN_PLACE_TCONV) {
- if (H5Pset_modify_write_buf(dxpl, true) < 0)
- P_TEST_ERROR;
- }
- /* In-place type conversion for read doesn't require modify_write_buf */
+ /* Exception case: When the type conversion buffer is too small and we're not allowing the library
+ * to modify the write buffer, the library will fall back to scalar independent I/O since the
+ * selection I/O path with type conversion requires a full size conversion buffer */
+ if (!(test_mode & TEST_IN_PLACE_TCONV))
+ /* In-place type conversion for read doesn't require modify_write_buf, so the read will still
+ * use selection I/O */
+ no_selection_io_cause_write_expected |= H5D_SEL_IO_TCONV_BUF_TOO_SMALL;
}
}
@@ -3493,6 +3612,10 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
if (H5Dwrite(did, tid, H5S_ALL, H5S_ALL, dxpl, wbuf) < 0)
P_TEST_ERROR;
+ if (!(test_mode & TEST_DISABLE_BY_API || test_mode & TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET ||
+ ((test_mode & TEST_TCONV_BUF_TOO_SMALL) && !(test_mode & TEST_IN_PLACE_TCONV))))
+ check_actual_selection_io_mode(dxpl, H5D_SELECTION_IO);
+
if (H5Pget_no_selection_io_cause(dxpl, &no_selection_io_cause_write) < 0)
P_TEST_ERROR;
@@ -3535,9 +3658,6 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
static void
test_get_no_selection_io_cause(const char *filename, hid_t fapl)
{
- hid_t dxpl = H5I_INVALID_HID;
- H5D_selection_io_mode_t selection_io_mode;
-
if (MAINPROCESS) {
printf("\n");
TESTING("for H5Pget_no_selection_io_cause()");
@@ -3545,21 +3665,6 @@ test_get_no_selection_io_cause(const char *filename, hid_t fapl)
curr_nerrors = nerrors;
- if ((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0)
- P_TEST_ERROR;
- if (H5Pget_selection_io(dxpl, &selection_io_mode) < 0)
- P_TEST_ERROR;
- if (H5Pclose(dxpl) < 0)
- P_TEST_ERROR;
-
- /* The following tests are based on H5D_SELECTION_IO_MODE_DEFAULT as the
- * default setting in the library; skip the tests if that is not true */
- if (selection_io_mode != H5D_SELECTION_IO_MODE_DEFAULT) {
- if (MAINPROCESS)
- SKIPPED();
- return;
- }
-
test_no_selection_io_cause_mode(filename, fapl, TEST_DISABLE_BY_API);
test_no_selection_io_cause_mode(filename, fapl, TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET);
test_no_selection_io_cause_mode(filename, fapl, TEST_DATATYPE_CONVERSION);
@@ -3952,6 +4057,7 @@ main(int argc, char *argv[])
int test_select_config;
unsigned chunked;
unsigned dtrans;
+ unsigned select;
unsigned mwbuf;
h5_reset();
@@ -3978,163 +4084,170 @@ main(int argc, char *argv[])
/* therefore, not all tests are run with data transform */
for (dtrans = false; dtrans <= true; dtrans++) {
- /* Test with and without modify_write_buf turned on */
- for (mwbuf = false; mwbuf <= true; mwbuf++) {
-
- if (MAINPROCESS) {
- /* Print configuration message */
- printf("Testing for selection I/O ");
- if (chunked)
- printf("with chunked dataset, ");
- else
- printf("with contiguous dataset, ");
- if (dtrans)
- printf("data transform, ");
- else
- printf("without data transform, ");
- if (mwbuf)
- printf("and with modifying write buffers\n");
- else
- printf("and without modifying write buffers\n");
- }
+ for (select = false; select <= true; select++) {
+
+ /* Test with and without modify_write_buf turned on */
+ for (mwbuf = false; mwbuf <= true; mwbuf++) {
+
+ if (MAINPROCESS) {
+ /* Print configuration message */
+ printf("Testing for selection I/O ");
+ if (chunked)
+ printf("with chunked dataset, ");
+ else
+ printf("with contiguous dataset, ");
+ if (dtrans)
+ printf("data transform, ");
+ else
+ printf("without data transform, ");
+ if (select)
+ printf("selection I/O ON, ");
+ else
+ printf("selection I/O OFF, ");
+ if (mwbuf)
+ printf("and with modifying write buffers\n");
+ else
+ printf("and without modifying write buffers\n");
+ }
+
+ for (test_select_config = (int)TEST_NO_TYPE_CONV;
+ test_select_config < (int)TEST_SELECT_NTESTS; test_select_config++) {
+
+ switch (test_select_config) {
+
+ case TEST_NO_TYPE_CONV: /* case 1 */
+ if (MAINPROCESS)
+ TESTING_2("No type conversion (null case)");
- for (test_select_config = (int)TEST_NO_TYPE_CONV;
- test_select_config < (int)TEST_SELECT_NTESTS; test_select_config++) {
+ test_no_type_conv(fid, chunked, dtrans, select, mwbuf);
- switch (test_select_config) {
+ break;
- case TEST_NO_TYPE_CONV: /* case 1 */
- if (MAINPROCESS)
- TESTING_2("No type conversion (null case)");
+ case TEST_NO_SIZE_CHANGE_NO_BKG: /* case 2 */
+ if (MAINPROCESS)
+ TESTING_2("No size change, no background buffer");
- test_no_type_conv(fid, chunked, dtrans, mwbuf);
+ /* Data transforms does not apply to the dataset datatype for this test */
+ if (dtrans) {
+ if (MAINPROCESS)
+ SKIPPED();
+ continue;
+ }
- break;
+ test_no_size_change_no_bkg(fid, chunked, select, mwbuf);
- case TEST_NO_SIZE_CHANGE_NO_BKG: /* case 2 */
- if (MAINPROCESS)
- TESTING_2("No size change, no background buffer");
+ break;
- /* Data transforms does not apply to the dataset datatype for this test */
- if (dtrans) {
+ case TEST_LARGER_MEM_NO_BKG: /* case 3 */
if (MAINPROCESS)
- SKIPPED();
- continue;
- }
-
- test_no_size_change_no_bkg(fid, chunked, mwbuf);
+ TESTING_2("Larger memory type, no background buffer");
- break;
+ test_larger_mem_type_no_bkg(fid, chunked, dtrans, select, mwbuf);
- case TEST_LARGER_MEM_NO_BKG: /* case 3 */
- if (MAINPROCESS)
- TESTING_2("Larger memory type, no background buffer");
-
- test_larger_mem_type_no_bkg(fid, chunked, dtrans, mwbuf);
-
- break;
+ break;
- case TEST_SMALLER_MEM_NO_BKG: /* case 4 */
- if (MAINPROCESS)
- TESTING_2("Smaller memory type, no background buffer");
+ case TEST_SMALLER_MEM_NO_BKG: /* case 4 */
+ if (MAINPROCESS)
+ TESTING_2("Smaller memory type, no background buffer");
- test_smaller_mem_type_no_bkg(fid, chunked, dtrans, mwbuf);
+ test_smaller_mem_type_no_bkg(fid, chunked, dtrans, select, mwbuf);
- break;
+ break;
- case TEST_CMPD_WITH_BKG: /* case 5 */
- if (MAINPROCESS)
- TESTING_2("Compound types with background buffer");
- /* Data transforms does not apply to the dataset datatype for this test */
- if (dtrans) {
+ case TEST_CMPD_WITH_BKG: /* case 5 */
if (MAINPROCESS)
- SKIPPED();
- continue;
- }
-
- test_cmpd_with_bkg(fid, chunked, mwbuf);
+ TESTING_2("Compound types with background buffer");
+ /* Data transforms does not apply to the dataset datatype for this test */
+ if (dtrans) {
+ if (MAINPROCESS)
+ SKIPPED();
+ continue;
+ }
- break;
+ test_cmpd_with_bkg(fid, chunked, select, mwbuf);
- case TEST_TYPE_CONV_SEL_EMPTY: /* case 6 */
- if (MAINPROCESS)
- TESTING_2("Empty selections + Type conversion");
+ break;
- test_type_conv_sel_empty(fid, chunked, dtrans, mwbuf);
+ case TEST_TYPE_CONV_SEL_EMPTY: /* case 6 */
+ if (MAINPROCESS)
+ TESTING_2("Empty selections + Type conversion");
- break;
+ test_type_conv_sel_empty(fid, chunked, dtrans, select, mwbuf);
- case TEST_MULTI_CONV_NO_BKG: /* case 7 */
- if (MAINPROCESS)
- TESTING_2("multi-datasets: type conv + no bkg buffer");
+ break;
- test_multi_dsets_no_bkg(fid, chunked, dtrans, mwbuf);
+ case TEST_MULTI_CONV_NO_BKG: /* case 7 */
+ if (MAINPROCESS)
+ TESTING_2("multi-datasets: type conv + no bkg buffer");
- break;
+ test_multi_dsets_no_bkg(fid, chunked, dtrans, select, mwbuf);
- case TEST_MULTI_CONV_BKG: /* case 8 */
- if (MAINPROCESS)
- TESTING_2("multi-datasets: type conv + bkg buffer");
+ break;
- /* Data transforms does not apply to the dataset datatype for this test */
- if (dtrans) {
+ case TEST_MULTI_CONV_BKG: /* case 8 */
if (MAINPROCESS)
- SKIPPED();
- }
- else
- test_multi_dsets_cmpd_with_bkg(fid, chunked, mwbuf);
+ TESTING_2("multi-datasets: type conv + bkg buffer");
- break;
+ /* Data transforms does not apply to the dataset datatype for this test */
+ if (dtrans) {
+ if (MAINPROCESS)
+ SKIPPED();
+ }
+ else
+ test_multi_dsets_cmpd_with_bkg(fid, chunked, select, mwbuf);
- case TEST_MULTI_CONV_SIZE_CHANGE: /* case 9 */
- if (MAINPROCESS)
- TESTING_2("multi-datasets: type conv + size change + no bkg buffer");
+ break;
- /* Data transforms does not apply to the dataset datatype for this test */
- if (dtrans) {
+ case TEST_MULTI_CONV_SIZE_CHANGE: /* case 9 */
if (MAINPROCESS)
- SKIPPED();
- }
- else
- test_multi_dsets_size_change_no_bkg(fid, chunked, mwbuf);
+ TESTING_2("multi-datasets: type conv + size change + no bkg buffer");
- break;
+ /* Data transforms does not apply to the dataset datatype for this test */
+ if (dtrans) {
+ if (MAINPROCESS)
+ SKIPPED();
+ }
+ else
+ test_multi_dsets_size_change_no_bkg(fid, chunked, select, mwbuf);
- case TEST_MULTI_CONV_SEL_EMPTY: /* case 10 */
- if (MAINPROCESS)
- TESTING_2("multi-datasets: type conv + empty selections");
+ break;
- test_multi_dsets_conv_sel_empty(fid, chunked, dtrans, mwbuf);
+ case TEST_MULTI_CONV_SEL_EMPTY: /* case 10 */
+ if (MAINPROCESS)
+ TESTING_2("multi-datasets: type conv + empty selections");
- break;
+ test_multi_dsets_conv_sel_empty(fid, chunked, dtrans, select, mwbuf);
- case TEST_MULTI_ALL: /* case 11 */
- if (MAINPROCESS)
- TESTING_2("multi-datasets: no conv + conv without bkg + conv with bkg");
+ break;
- /* Data transforms does not apply to the dataset datatype for this test */
- if (dtrans) {
+ case TEST_MULTI_ALL: /* case 11 */
if (MAINPROCESS)
- SKIPPED();
- }
- else
- test_multi_dsets_all(2, fid, chunked, mwbuf);
+ TESTING_2("multi-datasets: no conv + conv without bkg + conv with bkg");
+
+ /* Data transforms does not apply to the dataset datatype for this test */
+ if (dtrans) {
+ if (MAINPROCESS)
+ SKIPPED();
+ }
+ else
+ test_multi_dsets_all(2, fid, chunked, select, mwbuf);
- break;
+ break;
- case TEST_SELECT_NTESTS:
- default:
- P_TEST_ERROR;
- break;
+ case TEST_SELECT_NTESTS:
+ default:
+ P_TEST_ERROR;
+ break;
- } /* end switch */
+ } /* end switch */
- } /* end for test_select_config */
+ } /* end for test_select_config */
- } /* end mwbuf */
+ } /* end mwbuf */
- } /* end dtrans */
- } /* end chunked */
+ } /* end select */
+ } /* end dtrans */
+ } /* end chunked */
if (H5Fclose(fid) < 0)
P_TEST_ERROR;