summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--testpar/t_fphdf5.c206
1 files changed, 113 insertions, 93 deletions
diff --git a/testpar/t_fphdf5.c b/testpar/t_fphdf5.c
index fcb3625..71b1272 100644
--- a/testpar/t_fphdf5.c
+++ b/testpar/t_fphdf5.c
@@ -21,6 +21,7 @@
* Bill Wendling (wendling@ncsa.uiuc.edu)
* 20. February 2003
*/
+#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -35,9 +36,10 @@
*===-----------------------------------------------------------------------===
*/
static hid_t create_group(hid_t loc, const char *name, size_t size_hint);
-static hid_t create_dset(hid_t loc, const char *name, hsize_t *dims, int ndims);
+static hid_t create_dset(hid_t loc, const char *name, int ndims, ...);
+static void access_dset(hid_t loc, const char *dset_name, ...);
static void write_data(hid_t loc, const char *name, const void *buf);
-static void create_file(const char *filename, int sap_rank);
+static void create_file(const char *filename);
/*===-----------------------------------------------------------------------===
* Filenames
@@ -57,16 +59,17 @@ static char filenames[2][PATH_MAX]; /* "Fixed" filenames */
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 int nerrors = 0; /* Number of errors encountered */
static hid_t fapl = -1; /* FPHDF5 file access property list */
-static int verbose = 0; /* Verbose output? */
+
+int nerrors; /* Errors count */
+int verbose; /* Verbose, default is no */
/*-------------------------------------------------------------------------
* Function: create_group
* Purpose: Helper function that creates a group at the given
* location with the given name and size_hint.
* Return: Success: The handle to the new group
- * Failure: <0
+ * Failure: Aborts
* Programmer: Bill Wendling
* 29. October 2003
* Modifications:
@@ -92,17 +95,28 @@ static hid_t create_group(hid_t loc, const char *name, size_t size_hint)
* Purpose: Helper function that creates a dataset at the given
* location with the given name and dimensions
* Return: Success: The handle to the new dataset
- * Failure: <0
+ * Failure: Aborts
* Programmer: Bill Wendling
* 29. October 2003
* Modifications:
*-------------------------------------------------------------------------
*/
-static hid_t create_dset(hid_t loc, const char *name, hsize_t *dims, int ndims)
+static hid_t create_dset(hid_t loc, const char *name, int ndims, ...)
{
- int mpi_rank, mrc;
+ va_list ap;
+ hsize_t dims[3];
+ int i, mpi_rank, mrc;
hid_t dset, sid;
+ VRFY((ndims >= 1 && ndims <= 3), "create_dset");
+
+ va_start(ap, ndims);
+
+ for (i = 0; i < ndims; ++i)
+ dims[i] = va_arg(ap, int);
+
+ va_end(ap);
+
mrc = MPI_Comm_rank(SAP_Comm, &mpi_rank);
VRFY((mrc == MPI_SUCCESS), "MPI_Comm_rank");
@@ -119,9 +133,52 @@ static hid_t create_dset(hid_t loc, const char *name, hsize_t *dims, int ndims)
}
/*-------------------------------------------------------------------------
+ * Function: access_dset
+ * Purpose: Quickly check that we can access this dataset.
+ * Return: Nothing, but aborts if an error occurs.
+ * Programmer: Bill Wendling
+ * 03. November 2003
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+static void access_dset(hid_t loc, const char *dset_name, ...)
+{
+ va_list ap;
+ int mpi_rank, mrc;
+ hid_t dataset;
+
+ mrc = MPI_Comm_rank(SAP_Comm, &mpi_rank);
+ VRFY((mrc == MPI_SUCCESS), "MPI_Comm_rank");
+
+ /* Open the dataset */
+ dataset = H5Dopen(loc, dset_name);
+ VRFY((dataset >= 0), "H5Dopen");
+ printf("%d: Opened dataset \"%s\"\n", mpi_rank, dset_name);
+
+ /* Close the dataset */
+ VRFY((H5Dclose(dataset) >= 0), "H5Dclose");
+
+ /* Print out a nice message */
+ printf("%d: Accessed dataset \"/", mpi_rank);
+ va_start(ap, dset_name);
+
+ for (;;) {
+ const char *str = va_arg(ap, char *);
+
+ if (!str)
+ break;
+
+ printf("%s/", str);
+ }
+
+ va_end(ap);
+ printf("%s\"\n", dset_name);
+}
+
+/*-------------------------------------------------------------------------
* Function: write_data
* Purpose: Helper function that writes data to a dataset.
- * Return: Nothing
+ * Return: Nothing, but aborts if an error occurs.
* Programmer: Bill Wendling
* 29. October 2003
* Modifications:
@@ -162,10 +219,10 @@ static void write_data(hid_t loc, const char *name, const void *buf)
* Modifications:
*-------------------------------------------------------------------------
*/
-static void create_file(const char *filename, int sap_rank)
+static void create_file(const char *filename)
{
int mpi_rank, mrc;
- hid_t fid = -1, dataset = -1;
+ hid_t fid = -1, dataset = -1, group = -1;
/* Datasets to create */
const char dset_3x5[] = "Dataset 3x5";
@@ -197,48 +254,51 @@ static void create_file(const char *filename, int sap_rank)
*/
if (mpi_rank == 0) {
/* Create a dataset in the file */
- hid_t group;
- hsize_t dims[3];
+ group = create_group(fid, group_dsets, 4);
- group = create_group(fid, group_dsets, 9);
-
- /*===---------------------------------------------------------------===
- * Create 3x5 dataset
- *===---------------------------------------------------------------===
- */
- dims[0] = 3;
- dims[1] = 5;
+ /* Create 3x5 dataset */
+ dataset = create_dset(group, dset_3x5, 2, 3, 5);
+ VRFY((H5Dclose(dataset) >= 0), "H5Dclose");
- dataset = create_dset(group, dset_3x5, dims, 2);
+ /* Create 3x5x7 dataset */
+ dataset = create_dset(group, dset_3x5x7, 3, 3, 5, 7);
VRFY((H5Dclose(dataset) >= 0), "H5Dclose");
- /*===---------------------------------------------------------------===
- * Create 3x5x7 dataset
- *===---------------------------------------------------------------===
- */
- dims[0] = 3;
- dims[1] = 5;
- dims[2] = 7;
+ /* Create 2x4x8 dataset */
+ dataset = create_dset(group, dset_2x4x8, 3, 2, 4, 8);
+ VRFY((H5Dclose(dataset) >= 0), "H5Dclose");
- dataset = create_dset(group, dset_3x5x7, dims, 3);
+ /* Create 5x7x11 dataset */
+ dataset = create_dset(group, dset_5x7x11, 3, 5, 7, 11);
VRFY((H5Dclose(dataset) >= 0), "H5Dclose");
VRFY((H5Gclose(group) >= 0), "H5Gclose");
}
- printf("%d: MPI barrier 1.0\n", mpi_rank);
- MPI_Barrier(SAP_Barrier_Comm);
+ SYNC(SAP_Barrier_Comm);
+
+ /*===-------------------------------------------------------------------===
+ * Check that we can access all of the datasets created above
+ *===-------------------------------------------------------------------===
+ */
+ VRFY((group = H5Gopen(fid, group_dsets)), "H5Gopen");
+ access_dset(group, dset_3x5, group_dsets, NULL);
+ access_dset(group, dset_3x5x7, group_dsets, NULL);
+ access_dset(group, dset_2x4x8, group_dsets, NULL);
+ access_dset(group, dset_5x7x11, group_dsets, NULL);
+ VRFY((H5Gclose(group) >= 0), "H5Gclose");
+
+ SYNC(SAP_Barrier_Comm);
/*===-------------------------------------------------------------------===
* Access datasets
*===-------------------------------------------------------------------===
*/
if (mpi_rank == 2) {
- hid_t xfer, group;
int i, j, k;
int rdata[3][5];
int sdata[3][5][7];
- group = H5Gopen(fid, group_dsets);
+ VRFY(((group = H5Gopen(fid, group_dsets)) >= 0), "H5Gopen");
/*===---------------------------------------------------------------===
* Open 3x5 dataset and write values to it.
@@ -263,101 +323,62 @@ static void create_file(const char *filename, int sap_rank)
VRFY((H5Gclose(group) >= 0), "H5Gclose");
}
- printf("%d: MPI barrier 2.0\n", mpi_rank);
- MPI_Barrier(SAP_Barrier_Comm);
+ SYNC(SAP_Barrier_Comm);
/*===-------------------------------------------------------------------===
* Create a group
*===-------------------------------------------------------------------===
*/
if (mpi_rank == 2) {
- /*===---------------------------------------------------------------===
- * Create group "/group_1"
- *===---------------------------------------------------------------===
- */
- hid_t group = create_group(fid, group_1, 37);
+ /* Create group "/group_1" */
+ group = create_group(fid, group_1, 37);
VRFY((H5Gclose(group) >= 0), "H5Gclose");
}
- printf("%d: MPI barrier 3.0\n", mpi_rank);
- MPI_Barrier(SAP_Barrier_Comm);
+ SYNC(SAP_Barrier_Comm);
/*===-------------------------------------------------------------------===
* Create another group
*===-------------------------------------------------------------------===
*/
if (mpi_rank == 0) {
- /*===---------------------------------------------------------------===
- * Create group "/group_2"
- *===---------------------------------------------------------------===
- */
- hid_t group = create_group(fid, group_2, 37);
+ /* Create group "/group_2" */
+ group = create_group(fid, group_2, 37);
VRFY((H5Gclose(group) >= 0), "H5Gclose");
}
- printf("%d: MPI barrier 4.0\n", mpi_rank);
- MPI_Barrier(SAP_Barrier_Comm);
+ SYNC(SAP_Barrier_Comm);
/*===-------------------------------------------------------------------===
* Access groups and co-create datasets in them
*===-------------------------------------------------------------------===
*/
if (mpi_rank == 0) {
- hid_t group;
- hsize_t dims[3];
-
- /*===---------------------------------------------------------------===
- * Access group "/group_1"
- *===---------------------------------------------------------------===
- */
+ /* Access group "/group_1" */
printf("%d: Opening group \"%s\"\n", mpi_rank, group_1);
- group = H5Gopen(fid, group_1);
- VRFY((group >= 0), "H5Gopen");
+ VRFY(((group = H5Gopen(fid, group_1)) >= 0), "H5Gopen");
printf("%d: Opened group \"%s\"\n", mpi_rank, group_1);
- /*===---------------------------------------------------------------===
- * Create dataset "/group_1/dset-2x4x8"
- *===---------------------------------------------------------------===
- */
- dims[0] = 2;
- dims[1] = 4;
- dims[2] = 8;
-
- dataset = create_dset(group, dset_2x4x8, dims, 3);
+ /* Create dataset "/group_1/dset-2x4x8" */
+ dataset = create_dset(group, dset_2x4x8, 3, 2, 4, 8);
VRFY((H5Dclose(dataset) >= 0), "H5Dclose");
VRFY((H5Gclose(group) >= 0), "H5Gclose");
- } else {
- hid_t group;
- hsize_t dims[3];
-
- /*===---------------------------------------------------------------===
- * Access group "/group_2"
- *===---------------------------------------------------------------===
- */
+ } else if (mpi_rank == 2) {
+ /* Access group "/group_2" */
printf("%d: Opening group \"%s\"\n", mpi_rank, group_2);
- group = H5Gopen(fid, group_2);
- VRFY((group >= 0), "H5Gopen");
+ VRFY(((group = H5Gopen(fid, group_2)) >= 0), "H5Gopen");
printf("%d: Opened group \"%s\"\n", mpi_rank, group_2);
- /*===---------------------------------------------------------------===
- * Create dataset "/group_2/dset-5x7x11"
- *===---------------------------------------------------------------===
- */
- dims[0] = 5;
- dims[1] = 7;
- dims[2] = 11;
-
- dataset = create_dset(group, dset_5x7x11, dims, 3);
+ /* Create dataset "/group_2/dset-5x7x11" */
+ dataset = create_dset(group, dset_5x7x11, 3, 5, 7, 11);
VRFY((H5Dclose(dataset) >= 0), "H5Dclose");
VRFY((H5Gclose(group) >= 0), "H5Gclose");
}
- printf("%d: MPI barrier 5.0\n", mpi_rank);
- MPI_Barrier(SAP_Barrier_Comm);
+ SYNC(SAP_Barrier_Comm);
-done:
if (fid > -1) {
VRFY((H5Fclose(fid) >= 0), "H5Fclose");
printf("%d: Closed file\n", mpi_rank);
@@ -369,7 +390,6 @@ int main(int argc, char *argv[])
int mrc;
int mpi_rank;
int sap_rank = 1;
- int ret = EXIT_SUCCESS;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
@@ -392,7 +412,7 @@ int main(int argc, char *argv[])
* Setup the file access property list that's used to create the
* file.
*/
- int i;
+ unsigned i;
fapl = H5Pcreate(H5P_FILE_ACCESS);
VRFY((fapl >= 0), "H5Pcreate");
@@ -410,7 +430,7 @@ int main(int argc, char *argv[])
goto fail;
}
- create_file(filenames[i], sap_rank);
+ create_file(filenames[i]);
}
if (fapl > -1)