summaryrefslogtreecommitdiffstats
path: root/testpar
diff options
context:
space:
mode:
Diffstat (limited to 'testpar')
-rw-r--r--testpar/t_dset.c54
-rw-r--r--testpar/t_mdset.c6
-rw-r--r--testpar/testphdf5.c100
-rw-r--r--testpar/testphdf5.h6
4 files changed, 143 insertions, 23 deletions
diff --git a/testpar/t_dset.c b/testpar/t_dset.c
index 1bbc1a4..d2fb067 100644
--- a/testpar/t_dset.c
+++ b/testpar/t_dset.c
@@ -23,6 +23,10 @@
* Setup the dimensions of the hyperslab.
* Two modes--by rows or by columns.
* Assume dimension rank is 2.
+ * BYROW divide into slabs of rows
+ * BYCOL divide into blocks of columns
+ * ZROW same as BYROW except process 0 gets 0 rows
+ * ZCOL same as BYCOL except process 0 gets 0 columns
*/
void
slab_set(int mpi_rank, int mpi_size, hssize_t start[], hsize_t count[],
@@ -51,15 +55,32 @@ if (verbose) printf("slab_set BYROW\n");
count[1] = 1;
start[0] = 0;
start[1] = mpi_rank*block[1];
-#ifdef DISABLED
- /* change the above macro to #ifndef if you want to test */
- /* zero elements access. */
- printf("set to size 0\n");
- if (!(mpi_rank % 3))
- block[1]=0;
-#endif
if (verbose) printf("slab_set BYCOL\n");
break;
+ case ZROW:
+ /* Similar to BYROW except process 0 gets 0 row */
+ block[0] = (mpi_rank ? dim0/mpi_size : 0);
+ block[1] = dim1;
+ stride[0] = block[0];
+ stride[1] = block[1];
+ count[0] = 1;
+ count[1] = 1;
+ start[0] = (mpi_rank? mpi_rank*block[0] : 0);
+ start[1] = 0;
+if (verbose) printf("slab_set ZROW\n");
+ break;
+ case ZCOL:
+ /* Similar to BYCOL except process 0 gets 0 column */
+ block[0] = dim0;
+ block[1] = (mpi_rank ? dim1/mpi_size : 0);
+ stride[0] = block[0];
+ stride[1] = block[1];
+ count[0] = 1;
+ count[1] = 1;
+ start[0] = 0;
+ start[1] = (mpi_rank? mpi_rank*block[1] : 0);
+if (verbose) printf("slab_set ZCOL\n");
+ break;
default:
/* Unknown mode. Set it to cover the whole dataset. */
printf("unknown slab_set mode (%d)\n", mode);
@@ -551,10 +572,29 @@ dataset_writeAll(char *filename)
VRFY((ret >= 0), "H5Pcreate xfer succeeded");
/* write data collectively */
+ MESG("writeAll by Row");
ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
xfer_plist, data_array1);
VRFY((ret >= 0), "H5Dwrite dataset1 succeeded");
+#ifdef NEWSTUFF
+printf("doing ZROW write\n");
+ /* setup dimensions again to writeAll with zero rows for process 0 */
+ slab_set(mpi_rank, mpi_size, start, count, stride, block, ZROW);
+ ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+ VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+ /* need to make mem_dataspace to match for process 0 */
+ if (MAINPROCESS){
+ ret=H5Sselect_hyperslab(mem_dataspace, H5S_SELECT_SET, start, stride, count, block);
+ VRFY((ret >= 0), "H5Sset_hyperslab mem_dataspace succeeded");
+ }
+ MESG("writeAll by Zero Row");
+ ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+ xfer_plist, data_array1);
+ VRFY((ret >= 0), "H5Dwrite dataset1 by ZROW succeeded");
+#endif
+
+
/* release all temporary handles. */
/* Could have used them for dataset2 but it is cleaner */
/* to create them again.*/
diff --git a/testpar/t_mdset.c b/testpar/t_mdset.c
index cc23e1c..3fd3bdb 100644
--- a/testpar/t_mdset.c
+++ b/testpar/t_mdset.c
@@ -49,7 +49,11 @@ void multiple_dset_write(char *filename)
H5Dwrite (dataset, H5T_NATIVE_DOUBLE, memspace, filespace, H5P_DEFAULT, outme);
H5Dclose (dataset);
- }
+ if (! ((i+1) % 10)) {
+ printf("created %d datasets\n", i+1);
+ MPI_Barrier(MPI_COMM_WORLD);
+ }
+}
H5Sclose (filespace);
H5Sclose (memspace);
diff --git a/testpar/testphdf5.c b/testpar/testphdf5.c
index 9199b69..22907f8 100644
--- a/testpar/testphdf5.c
+++ b/testpar/testphdf5.c
@@ -20,6 +20,7 @@ void *old_client_data; /* previous error handler arg.*/
/* other option flags */
int doread=1; /* read test */
int dowrite=1; /* write test */
+int domdset=1; /* multiple dataset test */
/* FILENAME and filenames must have the same number of names */
const char *FILENAME[5]={
"ParaEg1",
@@ -81,6 +82,66 @@ int MPI_Init(int *argc, char ***argv)
}
#endif /* USE_PAUSE */
+#if 0 /* temp. disabled */
+int MPI_Type_commit(MPI_Datatype *mpi_type)
+{
+ int ret_code;
+ ret_code=PMPI_Type_commit(mpi_type);
+ printf("PMPI_Type_commit ret_code=%d, mpi_type=%d\n", ret_code, *mpi_type);
+ return (ret_code);
+}
+
+int MPI_Type_free(MPI_Datatype *mpi_type)
+{
+ int ret_code;
+ printf("PMPI_Type_free mpi_type=%d, ", *mpi_type);
+ ret_code=PMPI_Type_free(mpi_type);
+ printf("ret_code=%d\n", ret_code);
+ return (ret_code);
+}
+
+int MPI_Type_contiguous(int count, MPI_Datatype oldtype, MPI_Datatype *newtype)
+{
+ int ret_code;
+ ret_code=PMPI_Type_contiguous(count, oldtype, newtype);
+ printf("PMPI_Type_contiguous ret_code=%d, count=%d, old_type=%d, new_type=%d\n",
+ ret_code, count, oldtype, *newtype);
+ return (ret_code);
+}
+
+int MPI_Type_vector(int count, int blocklength, int stride, MPI_Datatype oldtype, MPI_Datatype *newtype)
+{
+ int ret_code;
+ ret_code=PMPI_Type_vector(count, blocklength, stride, oldtype, newtype);
+ printf("PMPI_Type_vector ret_code=%d, count=%d, blocklength=%d, stride=%d, "
+ "old_type=%d, new_type=%d\n",
+ ret_code, count, blocklength, stride, oldtype, *newtype);
+ return (ret_code);
+}
+
+int MPI_Type_struct(int count, int *array_of_blocklengths, MPI_Aint *array_of_displacements, MPI_Datatype *array_of_types, MPI_Datatype *newtype)
+{
+ int ret_code;
+ ret_code=PMPI_Type_struct(count, array_of_blocklengths, array_of_displacements, array_of_types, newtype);
+ printf("PMPI_Type_struct ret_code=%d, new_type=%d\n",
+ ret_code, *newtype);
+ return (ret_code);
+}
+
+#ifdef HAVE_MPI2
+int MPI_Type_create_resized(MPI_Datatype oldtype, MPI_Aint lb, MPI_Aint extent, MPI_Datatype *newtype)
+{
+ int ret_code;
+ ret_code=PMPI_Type_create_resized(oldtype, lb, extent, newtype);
+ printf("PMPI_Type_create_resized ret_code=%d, lb=%d, extent=%d, old_type=%d, new_type=%d\n",
+ ret_code, lb, extent, oldtype, *newtype);
+ return (ret_code);
+}
+#endif
+
+#endif
+
+
/*
* Show command usage
@@ -89,8 +150,9 @@ void
usage(void)
{
printf("Usage: testphdf5 [-r] [-w] [-v] [-f <prefix>] [-d <dim0> <dim1>]\n");
- printf("\t-r\t\tno read\n");
- printf("\t-w\t\tno write\n");
+ printf("\t-r\t\tno read test\n");
+ printf("\t-w\t\tno write test\n");
+ printf("\t-m\t\tno multiple dataset test\n");
printf("\t-v\t\tverbose on\n");
printf("\t-f <prefix>\tfilename prefix\n");
printf("\t-d <dim0> <dim1>\tdataset dimensions\n");
@@ -125,6 +187,8 @@ parse_options(int argc, char **argv)
break;
case 'w': dowrite = 0;
break;
+ case 'm': domdset = 0;
+ break;
case 'v': verbose = 1;
break;
case 'f': if (--argc < 1) {
@@ -238,36 +302,46 @@ main(int argc, char **argv)
}
if (dowrite){
- MPI_BANNER("testing MPIO independent overlapping writes...");
+ MPI_BANNER("MPIO independent overlapping writes...");
test_mpio_overlap_writes(filenames[0]);
- MPI_BANNER("testing dataset using split communicators...");
+ MPI_BANNER("dataset using split communicators...");
test_split_comm_access(filenames[0]);
- MPI_BANNER("testing dataset independent write...");
+ MPI_BANNER("dataset independent write...");
dataset_writeInd(filenames[0]);
- MPI_BANNER("testing dataset collective write...");
+ MPI_BANNER("dataset collective write...");
dataset_writeAll(filenames[1]);
- MPI_BANNER("testing extendible dataset independent write...");
+ MPI_BANNER("extendible dataset independent write...");
extend_writeInd(filenames[2]);
- MPI_BANNER("testing multiple datasets write ...");
- multiple_dset_write(filenames[3]);
-
+ if (domdset){
+ MPI_BANNER("multiple datasets write ...");
+ multiple_dset_write(filenames[3]);
+ }
+ else{
+ MPI_BANNER("Multiple datasets test skipped");
+ }
+ }
+ else{
+ MPI_BANNER("write tests skipped");
}
if (doread){
- MPI_BANNER("testing dataset independent read...");
+ MPI_BANNER("dataset independent read...");
dataset_readInd(filenames[0]);
- MPI_BANNER("testing dataset collective read...");
+ MPI_BANNER("dataset collective read...");
dataset_readAll(filenames[1]);
- MPI_BANNER("testing extendible dataset independent read...");
+ MPI_BANNER("extendible dataset independent read...");
extend_readInd(filenames[2]);
}
+ else{
+ MPI_BANNER("read tests skipped");
+ }
if (!(dowrite || doread)){
usage();
diff --git a/testpar/testphdf5.h b/testpar/testphdf5.h
index 939cf19..9c89408 100644
--- a/testpar/testphdf5.h
+++ b/testpar/testphdf5.h
@@ -27,8 +27,8 @@
H5Eprint (stdout); \
fflush(stdout); \
if (!verbose){ \
- MPI_Finalize(); \
- exit(nerrors); \
+ printf("aborting MPI process\n"); \
+ MPI_Abort(MPI_COMM_WORLD, nerrors); \
} \
} \
H5Eclear(); \
@@ -56,6 +56,8 @@
/* hyperslab layout styles */
#define BYROW 1 /* divide into slabs of rows */
#define BYCOL 2 /* divide into blocks of columns */
+#define ZROW 3 /* same as BYCOL except process 0 gets 0 rows */
+#define ZCOL 4 /* same as BYCOL except process 0 gets 0 columns */
/* dataset data type. Int's can be easily octo dumped. */