diff options
-rw-r--r-- | testpar/t_fphdf5.c | 239 |
1 files changed, 151 insertions, 88 deletions
diff --git a/testpar/t_fphdf5.c b/testpar/t_fphdf5.c index 5a439b6..6a833cc 100644 --- a/testpar/t_fphdf5.c +++ b/testpar/t_fphdf5.c @@ -35,19 +35,18 @@ * Local Functions *===----------------------------------------------------------------------=== */ +static hid_t create_file(const char *filename); static hid_t create_group(hid_t loc, const char *grp_name, size_t size_hint); static hid_t create_dset(hid_t loc, const char *dset_name); static void access_dset(hid_t loc, const char *dset_name); static void slab_set(hssize_t start[], hsize_t count[], hsize_t stride[], hsize_t block[]); +static void fill_data(hssize_t start[], hsize_t count[]); static void write_data(hid_t loc, const char *dset_name, hssize_t start[], hsize_t count[], - hsize_t stride[], hsize_t block[], - int *buf); + hsize_t stride[], hsize_t block[]); static void verify_dataset(hid_t loc, const char *dset_name, hssize_t start[], - hsize_t count[], hsize_t stride[], hsize_t block[], - int *original); -static hid_t create_file(const char *filename); + hsize_t count[], hsize_t stride[], hsize_t block[]); static void test_group_creation(hid_t loc); static void test_dataset_creation(hid_t loc); static void test_dataset_access(hid_t loc); @@ -86,15 +85,22 @@ enum { DIM1 = 12 }; +int nerrors = 0; /* Errors count */ +int verbose = 0; /* Verbose, default is no */ + static MPI_Comm SAP_Comm = MPI_COMM_NULL; /* COMM for FPHDF5 */ static MPI_Comm SAP_Barrier_Comm = MPI_COMM_NULL; /* COMM used in barriers*/ static hid_t fapl = -1; /* FPHDF5 file access property list */ static int mpi_rank; /* Rank of this process */ static int mpi_size; /* Size of the COMM passed to FPHDF5 */ +static int *orig_data = NULL; /* Data that's written to datasets */ -int nerrors = 0; /* Errors count */ -int verbose = 0; /* Verbose, default is no */ +/* Hyperslab settings */ +static hssize_t start[RANK]; +static hsize_t count[RANK]; +static hsize_t stride[RANK]; +static hsize_t block[RANK]; static const char *progname = "t_fphdf5"; @@ -107,6 +113,27 @@ static const char *grp_tmpl = "Process %d's Datasets"; static char grp_name[128]; /*------------------------------------------------------------------------- + * Function: create_file + * Purpose: Create a new file with the given filename. + * Return: Success: Valid file ID + * Failure: -1 + * Programmer: Bill Wendling + * 29. October 2003 + * Modifications: + *------------------------------------------------------------------------- + */ +static hid_t +create_file(const char *filename) +{ + hid_t fid = -1; + + fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl); + VRFY((fid >= 0), "H5Fcreate"); + printf("%d: Created file %s\n", mpi_rank, filename); + return fid; +} + +/*------------------------------------------------------------------------- * Function: create_group * Purpose: Helper function that creates a group at the given * location with the given name and size_hint. @@ -122,10 +149,8 @@ create_group(hid_t loc, const char *grp_name, size_t size_hint) { hid_t group; - fprintf(stderr, "%d: Creating group \"%s\"\n", mpi_rank, grp_name); - VRFY(((group = H5Gcreate(loc, grp_name, size_hint)) >= 0), "H5Gcreate"); - fprintf(stderr, "%d: Created group \"%s\"\n", mpi_rank, grp_name); + printf("%d: Created group \"%s\"\n", mpi_rank, grp_name); return group; } @@ -147,11 +172,11 @@ create_dset(hid_t loc, const char *dset_name) hid_t dset, sid; VRFY(((sid = H5Screate_simple(RANK, dims, NULL)) >= 0), "H5Screate_simple"); - fprintf(stderr, "%d: Created simple dataspace\n", mpi_rank); + printf("%d: Created simple dataspace\n", mpi_rank); dset = H5Dcreate(loc, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT); VRFY((dset >= 0), "H5Dcreate"); - fprintf(stderr, "%d: Created dataset \"%s\"\n", mpi_rank, dset_name); + printf("%d: Created dataset \"%s\"\n", mpi_rank, dset_name); VRFY((H5Sclose(sid) >= 0), "H5Sclose"); return dset; @@ -202,8 +227,29 @@ slab_set(hssize_t start[], hsize_t count[], hsize_t stride[], hsize_t block[]) } /*------------------------------------------------------------------------- + * Function: fill_data + * Purpose: Fill data buffer with some data. + * Return: Nothing + * Programmer: Bill Wendling + * 13. November 2003 + * Modifications: + *------------------------------------------------------------------------- + */ +static void +fill_data(hssize_t start[], hsize_t count[]) +{ + int *dataptr = orig_data; + int i, j; + + /* put some trivial data in the buffer */ + for (i = 0; i < block[0]; ++i) + for (j = 0; j < block[1]; ++j) + *dataptr++ = (j + start[0]) * 100 + j + start[1] + 1; +} + +/*------------------------------------------------------------------------- * Function: write_data - * Purpose: Helper function that writes data to a dataset. + * Purpose: Writes data to a dataset. * Return: Nothing, but aborts if an error occurs. * Programmer: Bill Wendling * 29. October 2003 @@ -212,13 +258,13 @@ slab_set(hssize_t start[], hsize_t count[], hsize_t stride[], hsize_t block[]) */ static void write_data(hid_t loc, const char *dset_name, hssize_t start[], hsize_t count[], - hsize_t stride[], hsize_t block[], int *buf) + hsize_t stride[], hsize_t block[]) { herr_t hrc; hid_t file_dataspace, mem_dataspace; hid_t dataset, xfer; hsize_t j, k; - int *dataptr = buf; + int *dataptr = orig_data; /* See if dataset is there */ VRFY(((dataset = H5Dopen(loc, dset_name)) >= 0), "H5Dopen"); @@ -243,7 +289,7 @@ write_data(hid_t loc, const char *dset_name, hssize_t start[], hsize_t count[], VRFY((mem_dataspace >= 0), "H5Screate_simple"); hrc = H5Dwrite(dataset, H5T_NATIVE_INT, mem_dataspace, - file_dataspace, H5P_DEFAULT, buf); + file_dataspace, H5P_DEFAULT, orig_data); VRFY((hrc >= 0), "H5Dwrite"); VRFY((H5Sclose(mem_dataspace) >= 0), "H5Sclose"); @@ -263,7 +309,7 @@ write_data(hid_t loc, const char *dset_name, hssize_t start[], hsize_t count[], */ static void verify_dataset(hid_t loc, const char *dset_name, hssize_t start[], hsize_t count[], - hsize_t stride[], hsize_t block[], int *original) + hsize_t stride[], hsize_t block[]) { hid_t dataset, file_dataspace, mem_dataspace; hsize_t i, j; @@ -291,20 +337,22 @@ verify_dataset(hid_t loc, const char *dset_name, hssize_t start[], hsize_t count /* Verify the contents of the dataset */ for (i = 0; i < block[0]; ++i) for (j = 0; j < block[1]; ++j) - if (*data_array != *original) { + if (*data_array != *orig_data) { if (vrfyerrs++ < MAX_ERR_REPORT) fprintf(stderr, "Dataset Verify failed at " "[%ld][%ld](row %ld, col %ld): expect %d, got %d\n", (long)i, (long)j, (long)(i + start[0]), - (long)(j + start[1]), *original, *data_array); + (long)(j + start[1]), *orig_data, *data_array); ++data_array; - ++original; + ++orig_data; } - if (vrfyerrs) + if (vrfyerrs) { fprintf(stderr, "%d errors found in verify_dataset\n", vrfyerrs); + ++nerrors; + } VRFY((H5Sclose(mem_dataspace) >= 0), "H5Sclose"); VRFY((H5Sclose(file_dataspace) >= 0), "H5Sclose"); @@ -313,27 +361,6 @@ verify_dataset(hid_t loc, const char *dset_name, hssize_t start[], hsize_t count } /*------------------------------------------------------------------------- - * Function: create_file - * Purpose: Create a new file with the given filename. - * Return: Success: Valid file ID - * Failure: -1 - * Programmer: Bill Wendling - * 29. October 2003 - * Modifications: - *------------------------------------------------------------------------- - */ -static hid_t -create_file(const char *filename) -{ - hid_t fid = -1; - - fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl); - VRFY((fid >= 0), "H5Fcreate"); - fprintf(stderr, "%d: Created file %s\n", mpi_rank, filename); - return fid; -} - -/*------------------------------------------------------------------------- * Function: test_group_creation * Purpose: Test creation of multiple groups in the file. * Return: Nothing @@ -346,11 +373,12 @@ static void test_group_creation(hid_t loc) { if (mpi_rank == 0) { - hid_t group; int i; for (i = 0; i < mpi_size; ++i) if (i != SAP_RANK) { + hid_t group; + sprintf(grp_name, grp_tmpl, i); group = create_group(loc, grp_name, 4); VRFY((H5Gclose(group) >= 0), "H5Gclose"); @@ -415,28 +443,29 @@ test_dataset_creation(hid_t loc) static void test_dataset_access(hid_t loc) { - hid_t group; int i; for (i = 0; i < mpi_size; ++i) if (i != SAP_RANK) { + hid_t group; + sprintf(grp_name, grp_tmpl, i); VRFY(((group = H5Gopen(loc, grp_name)) >= 0), "H5Gopen"); sprintf(dset_name, dset_tmpl, 0); - fprintf(stderr, "%d: Accessing dataset \"%s/%s\"\n", mpi_rank, grp_name, dset_name); + printf("%d: Accessing dataset \"%s/%s\"\n", mpi_rank, grp_name, dset_name); access_dset(group, dset_name); sprintf(dset_name, dset_tmpl, 1); - fprintf(stderr, "%d: Accessing dataset \"%s/%s\"\n", mpi_rank, grp_name, dset_name); + printf("%d: Accessing dataset \"%s/%s\"\n", mpi_rank, grp_name, dset_name); access_dset(group, dset_name); sprintf(dset_name, dset_tmpl, 2); - fprintf(stderr, "%d: Accessing dataset \"%s/%s\"\n", mpi_rank, grp_name, dset_name); + printf("%d: Accessing dataset \"%s/%s\"\n", mpi_rank, grp_name, dset_name); access_dset(group, dset_name); sprintf(dset_name, dset_tmpl, 3); - fprintf(stderr, "%d: Accessing dataset \"%s/%s\"\n", mpi_rank, grp_name, dset_name); + printf("%d: Accessing dataset \"%s/%s\"\n", mpi_rank, grp_name, dset_name); access_dset(group, dset_name); VRFY((H5Gclose(group) >= 0), "H5Gclose"); @@ -458,19 +487,7 @@ test_dataset_access(hid_t loc) static void test_dataset_write(hid_t loc) { - hid_t group; - int i, *data_array = NULL; - - /* Hyperslab settings */ - hssize_t start[RANK]; - hsize_t count[RANK]; - hsize_t stride[RANK]; - hsize_t block[RANK]; - - data_array = (int *)malloc(DIM0 * DIM1 * sizeof(int)); - VRFY((data_array != NULL), "data_array malloc succeeded"); - - slab_set(start, count, stride, block); + int i; /*===-------------------------------------------------------------------=== * All processes write to each dataset. @@ -478,39 +495,39 @@ test_dataset_write(hid_t loc) */ for (i = 0; i < mpi_size; ++i) if (i != SAP_RANK) { + hid_t group; + sprintf(grp_name, grp_tmpl, i); VRFY(((group = H5Gopen(loc, grp_name)) >= 0), "H5Gopen"); /* Write to this dataset */ sprintf(dset_name, dset_tmpl, 0); - fprintf(stderr, "%d: Writing to \"/%s/%s\"\n", mpi_rank, grp_name, dset_name); - write_data(group, dset_name, start, count, stride, block, data_array); - fprintf(stderr, "%d: Verifying dataset \"/%s/%s\"\n", mpi_rank, grp_name, dset_name); - verify_dataset(group, dset_name, start, count, stride, block, data_array); + printf("%d: Writing to \"/%s/%s\"\n", mpi_rank, grp_name, dset_name); + write_data(group, dset_name, start, count, stride, block); + printf("%d: Verifying dataset \"/%s/%s\"\n", mpi_rank, grp_name, dset_name); + verify_dataset(group, dset_name, start, count, stride, block); sprintf(dset_name, dset_tmpl, 1); - fprintf(stderr, "%d: Writing to \"/%s/%s\"\n", mpi_rank, grp_name, dset_name); - write_data(group, dset_name, start, count, stride, block, data_array); - fprintf(stderr, "%d: Verifying dataset \"/%s/%s\"\n", mpi_rank, grp_name, dset_name); - verify_dataset(group, dset_name, start, count, stride, block, data_array); + printf("%d: Writing to \"/%s/%s\"\n", mpi_rank, grp_name, dset_name); + write_data(group, dset_name, start, count, stride, block); + printf("%d: Verifying dataset \"/%s/%s\"\n", mpi_rank, grp_name, dset_name); + verify_dataset(group, dset_name, start, count, stride, block); sprintf(dset_name, dset_tmpl, 2); - fprintf(stderr, "%d: Writing to \"/%s/%s\"\n", mpi_rank, grp_name, dset_name); - write_data(group, dset_name, start, count, stride, block, data_array); - fprintf(stderr, "%d: Verifying dataset \"/%s/%s\"\n", mpi_rank, grp_name, dset_name); - verify_dataset(group, dset_name, start, count, stride, block, data_array); + printf("%d: Writing to \"/%s/%s\"\n", mpi_rank, grp_name, dset_name); + write_data(group, dset_name, start, count, stride, block); + printf("%d: Verifying dataset \"/%s/%s\"\n", mpi_rank, grp_name, dset_name); + verify_dataset(group, dset_name, start, count, stride, block); sprintf(dset_name, dset_tmpl, 3); - fprintf(stderr, "%d: Writing to \"/%s/%s\"\n", mpi_rank, grp_name, dset_name); - write_data(group, dset_name, start, count, stride, block, data_array); - fprintf(stderr, "%d: Verifying dataset \"/%s/%s\"\n", mpi_rank, grp_name, dset_name); - verify_dataset(group, dset_name, start, count, stride, block, data_array); + printf("%d: Writing to \"/%s/%s\"\n", mpi_rank, grp_name, dset_name); + write_data(group, dset_name, start, count, stride, block); + printf("%d: Verifying dataset \"/%s/%s\"\n", mpi_rank, grp_name, dset_name); + verify_dataset(group, dset_name, start, count, stride, block); /* Close the group */ VRFY((H5Gclose(group) >= 0), "H5Gclose"); } - - free(data_array); } /*------------------------------------------------------------------------- @@ -583,14 +600,14 @@ main(int argc, char *argv[]) h5_show_hostname(); if (MAINPROCESS) { - fprintf(stderr, "===================================\n"); - fprintf(stderr, "FPHDF5 functionality tests\n"); - fprintf(stderr, "===================================\n"); + printf("===================================\n"); + printf("FPHDF5 functionality tests\n"); + printf("===================================\n"); } hrc = H5FPinit(MPI_COMM_WORLD, SAP_RANK, &SAP_Comm, &SAP_Barrier_Comm); VRFY((hrc == MPI_SUCCESS), "H5FP_init"); - fprintf(stderr, "%d: Initialized FPHDF5\n", mpi_rank); + printf("%d: Initialized FPHDF5\n", mpi_rank); if (mpi_rank != SAP_RANK) { /* @@ -601,12 +618,18 @@ main(int argc, char *argv[]) fapl = H5Pcreate(H5P_FILE_ACCESS); VRFY((fapl >= 0), "H5Pcreate"); - fprintf(stderr, "%d: Created access property list\n", mpi_rank); + printf("%d: Created access property list\n", mpi_rank); hrc = H5Pset_fapl_fphdf5(fapl, SAP_Comm, SAP_Barrier_Comm, MPI_INFO_NULL, (unsigned)SAP_RANK); VRFY((fapl >= 0), "H5Pset_fapl_fphdf5"); - fprintf(stderr, "%d: Set access property list\n", mpi_rank); + printf("%d: Set access property list\n", mpi_rank); + + orig_data = (int *)malloc(DIM0 * DIM1 * sizeof(int)); + VRFY((orig_data != NULL), "orig_data malloc succeeded"); + + slab_set(start, count, stride, block); + fill_data(start, count); for (i = 0; i < sizeof(FILENAME) / sizeof(FILENAME[0]) - 1; ++i) { if (h5_fixname(FILENAME[i], fapl, filenames[i], sizeof(filenames[i])) == NULL) { @@ -627,20 +650,60 @@ main(int argc, char *argv[]) VRFY((H5Fclose(fid) >= 0), "H5Fclose"); SYNC(SAP_Barrier_Comm); - fprintf(stderr, "%d: Closed file\n", mpi_rank); + printf("%d: Closed file\n", mpi_rank); fid = H5Fopen(filenames[i], H5F_ACC_RDONLY, fapl); VRFY((fid >= 0), "H5Fopen"); SYNC(SAP_Barrier_Comm); + + /*===------------------------------------------------------------=== + * Reverify that the data is still "correct" + *===------------------------------------------------------------=== + */ + for (i = 0; i < mpi_size; ++i) + if (i != SAP_RANK) { + hid_t group; + + sprintf(grp_name, grp_tmpl, i); + VRFY(((group = H5Gopen(fid, grp_name)) >= 0), "H5Gopen"); + + /* Write to this dataset */ + sprintf(dset_name, dset_tmpl, 0); + printf("%d: Reverifying dataset \"/%s/%s\"\n", mpi_rank, + grp_name, dset_name); + verify_dataset(group, dset_name, start, count, stride, block); + + sprintf(dset_name, dset_tmpl, 1); + printf("%d: Reverifying dataset \"/%s/%s\"\n", mpi_rank, + grp_name, dset_name); + verify_dataset(group, dset_name, start, count, stride, block); + + sprintf(dset_name, dset_tmpl, 2); + printf("%d: Reverifying dataset \"/%s/%s\"\n", mpi_rank, + grp_name, dset_name); + verify_dataset(group, dset_name, start, count, stride, block); + + sprintf(dset_name, dset_tmpl, 3); + printf("%d: Reverifying dataset \"/%s/%s\"\n", mpi_rank, + grp_name, dset_name); + verify_dataset(group, dset_name, start, count, stride, block); + + /* Close the group */ + VRFY((H5Gclose(group) >= 0), "H5Gclose"); + } + + SYNC(SAP_Barrier_Comm); VRFY((H5Fclose(fid) >= 0), "H5Fclose"); } + free(orig_data); + if (fapl > -1) h5_cleanup(FILENAME, fapl); } VRFY((H5FPfinalize() >= 0), "H5FPfinalize"); - fprintf(stderr, "%d: H5FP finalized\n", mpi_rank); + printf("%d: H5FP finalized\n", mpi_rank); if (MAINPROCESS) { /* only process 0 reports */ fprintf(stderr, "===================================\n"); @@ -671,7 +734,7 @@ main(int argc, char *argv[]) MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); if (mpi_rank == 0) - fprintf(stderr, "No t_fphdf5 test because FPHDF5 is not configured in\n"); + printf("No t_fphdf5 test because FPHDF5 is not configured in\n"); MPI_Finalize(); return 0; |