summaryrefslogtreecommitdiffstats
path: root/testpar/t_bigio.c
diff options
context:
space:
mode:
Diffstat (limited to 'testpar/t_bigio.c')
-rw-r--r--testpar/t_bigio.c57
1 files changed, 34 insertions, 23 deletions
diff --git a/testpar/t_bigio.c b/testpar/t_bigio.c
index 2bd4006..1c66748 100644
--- a/testpar/t_bigio.c
+++ b/testpar/t_bigio.c
@@ -27,7 +27,6 @@ const char *FILENAME[3] = {"bigio_test.h5", "single_rank_independent_io.h5", NUL
#define DXFER_COLLECTIVE_IO 0x1 /* Collective IO*/
#define DXFER_INDEPENDENT_IO 0x2 /* Independent IO collectively */
#define DXFER_BIGCOUNT (1 < 29)
-#define LARGE_DIM 1610612736
#define HYPER 1
#define POINT 2
@@ -1107,12 +1106,11 @@ single_rank_independent_io(void)
HDprintf("\nSingle Rank Independent I/O\n");
if (MAIN_PROCESS) {
- hsize_t dims[] = {LARGE_DIM};
+ hsize_t dims[1];
hid_t file_id = -1;
hid_t fapl_id = -1;
hid_t dset_id = -1;
hid_t fspace_id = -1;
- hid_t mspace_id = -1;
herr_t ret;
int *data = NULL;
uint64_t i;
@@ -1124,6 +1122,12 @@ single_rank_independent_io(void)
file_id = H5Fcreate(FILENAME[1], H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
VRFY_G((file_id >= 0), "H5Dcreate2 succeeded");
+ /*
+ * Calculate the number of elements needed to exceed
+ * MPI's INT_MAX limitation
+ */
+ dims[0] = (INT_MAX / sizeof(int)) + 10;
+
fspace_id = H5Screate_simple(1, dims, NULL);
VRFY_G((fspace_id >= 0), "H5Screate_simple fspace_id succeeded");
@@ -1135,47 +1139,35 @@ single_rank_independent_io(void)
VRFY_G((dset_id >= 0), "H5Dcreate2 succeeded");
- data = malloc(LARGE_DIM * sizeof(int));
+ data = malloc(dims[0] * sizeof(int));
/* Initialize data */
- for (i = 0; i < LARGE_DIM; i++)
+ for (i = 0; i < dims[0]; i++)
data[i] = (int)(i % (uint64_t)DXFER_BIGCOUNT);
- if (mpi_rank_g == 0)
- H5Sselect_all(fspace_id);
- else
- H5Sselect_none(fspace_id);
-
- dims[0] = LARGE_DIM;
- mspace_id = H5Screate_simple(1, dims, NULL);
- VRFY_G((mspace_id >= 0), "H5Screate_simple mspace_id succeeded");
-
/* Write data */
- ret = H5Dwrite(dset_id, H5T_NATIVE_INT, mspace_id, fspace_id, H5P_DEFAULT, data);
+ ret = H5Dwrite(dset_id, H5T_NATIVE_INT, H5S_BLOCK, fspace_id, H5P_DEFAULT, data);
VRFY_G((ret >= 0), "H5Dwrite succeeded");
/* Wipe buffer */
- HDmemset(data, 0, LARGE_DIM * sizeof(int));
+ HDmemset(data, 0, dims[0] * sizeof(int));
/* Read data back */
- ret = H5Dread(dset_id, H5T_NATIVE_INT, mspace_id, fspace_id, H5P_DEFAULT, data);
+ ret = H5Dread(dset_id, H5T_NATIVE_INT, H5S_BLOCK, fspace_id, H5P_DEFAULT, data);
VRFY_G((ret >= 0), "H5Dread succeeded");
/* Verify data */
- for (i = 0; i < LARGE_DIM; i++)
+ for (i = 0; i < dims[0]; i++)
if (data[i] != (int)(i % (uint64_t)DXFER_BIGCOUNT)) {
HDfprintf(stderr, "verify failed\n");
exit(1);
}
free(data);
- H5Sclose(mspace_id);
H5Sclose(fspace_id);
H5Pclose(fapl_id);
H5Dclose(dset_id);
H5Fclose(file_id);
-
- HDremove(FILENAME[1]);
}
MPI_Barrier(MPI_COMM_WORLD);
}
@@ -1898,13 +1890,32 @@ main(int argc, char **argv)
MPI_Barrier(MPI_COMM_WORLD);
coll_chunk3();
MPI_Barrier(MPI_COMM_WORLD);
+
+ /*
+ * Reset big count for the next test, as it
+ * doesn't use the functionality in the same
+ * way as the previous tests.
+ */
+ H5_mpi_set_bigio_count(oldsize);
single_rank_independent_io();
/* turn off alarm */
TestAlarmOff();
- if (mpi_rank_g == 0)
- HDremove(FILENAME[0]);
+ if (mpi_rank_g == 0) {
+ hid_t fapl_id = H5Pcreate(H5P_FILE_ACCESS);
+
+ H5Pset_fapl_mpio(fapl_id, MPI_COMM_SELF, MPI_INFO_NULL);
+
+ H5E_BEGIN_TRY
+ {
+ H5Fdelete(FILENAME[0], fapl_id);
+ H5Fdelete(FILENAME[1], fapl_id);
+ }
+ H5E_END_TRY;
+
+ H5Pclose(fapl_id);
+ }
/* close HDF5 library */
H5close();