[svn-r2710] Purpose:

Features, kind of.
Description:
    Separated the MPI features test into its own independent
    program so that it can be tested on its own without too
    much HDF5 stuff involved.
    Added automatic removal of temporary test files after
    the tests completed.
    Reduced the size of the dataset dimensions to avoid tripping
    the SGI MPI problems of running out of internal mpi type entries.
Platforms tested:
    O2K -64
This commit is contained in:
Albert Cheng 2000-10-20 01:19:21 -05:00
parent 114ac60d1b
commit b3e4cd6e97
4 changed files with 145 additions and 23 deletions

View File

@ -19,22 +19,28 @@ LIBH5TEST=../test/libh5test.la
RUNTEST=$(RUNPARALLEL)
## These are our main targets
TEST_PROGS=testphdf5
TEST_PROGS=t_mpi testphdf5
## Temporary files
MOSTLYCLEAN=ParaEg[123].h5f
DISTCLEAN=go
## Test source files
TEST_SRC=testphdf5.c t_dset.c t_file.c t_mpi.c t_mdset.c
TEST_PHDF5_SRC=testphdf5.c t_dset.c t_file.c t_mdset.c
TEST_PHDF5_OBJ=$(TEST_PHDF5_SRC:.c=.lo)
TEST_SRC=t_mpi.c $(TEST_PHDF5_SRC)
TEST_OBJ=$(TEST_SRC:.c=.lo)
TEST_HDR=testphdf5.h
## How to build the tests... They all depend on the hdf5 library
$(TEST_PROGS): $(LIBHDF5) $(LIBH5TEST)
testphdf5: $(TEST_OBJ)
@$(LT_LINK_EXE) $(CFLAGS) -o $@ $(TEST_OBJ) $(LIBH5TEST) $(LIBHDF5) $(LDFLAGS) $(LIBS)
$(TEST_OBJ): $(TEST_HDR)
t_mpi: t_mpi.lo
@$(LT_LINK_EXE) $(CFLAGS) -o $@ t_mpi.lo $(LIBH5TEST) $(LIBHDF5) $(LDFLAGS) $(LIBS)
testphdf5: $(TEST_PHDF5_OBJ)
@$(LT_LINK_EXE) $(CFLAGS) -o $@ $(TEST_PHDF5_OBJ) $(LIBH5TEST) $(LIBHDF5) $(LDFLAGS) $(LIBS)
@CONCLUDE@

View File

@ -14,6 +14,15 @@
#include <testphdf5.h>
/* FILENAME and filenames must have the same number of names */
const char *FILENAME[2]={
"MPItest",
NULL};
char filenames[2][200];
int nerrors;
int verbose;
hid_t fapl; /* file access property list */
#define MPIO_TEST_WRITE_SIZE 1024*1024 /* 1 MB */
void
@ -140,3 +149,115 @@ test_mpio_overlap_writes(char *filename)
VRFY((mrc==MPI_SUCCESS), "Sync before leaving test");
}
/*
* parse the command line options
*/
int
parse_options(int argc, char **argv)
{
while (--argc){
if (**(++argv) != '-'){
break;
}else{
switch(*(*argv+1)){
case 'v': verbose = 1;
break;
case 'f': if (--argc < 1) {
nerrors++;
return(1);
}
if (**(++argv) == '-') {
nerrors++;
return(1);
}
paraprefix = *argv;
break;
case 'h': /* print help message--return with nerrors set */
return(1);
default: nerrors++;
return(1);
}
}
} /*while*/
/* compose the test filenames */
{
int i, n;
hid_t plist;
plist = H5Pcreate (H5P_FILE_ACCESS);
H5Pset_fapl_mpio(plist, MPI_COMM_WORLD, MPI_INFO_NULL);
n = sizeof(FILENAME)/sizeof(FILENAME[0]) - 1; /* exclude the NULL */
for (i=0; i < n; i++)
if (h5_fixname(FILENAME[i],plist,filenames[i],sizeof(filenames[i]))
== NULL){
printf("h5_fixname failed\n");
nerrors++;
return(1);
}
H5Pclose(plist);
printf("Test filenames are:\n");
for (i=0; i < n; i++)
printf(" %s\n", filenames[i]);
}
return(0);
}
/*
* Show command usage
*/
void
usage(void)
{
printf("Usage: t_mpi [-v] [-f <prefix>]\n");
printf("\t-v\t\tverbose on\n");
printf("\t-f <prefix>\tfilename prefix\n");
printf("\n");
}
main(int argc, char **argv)
{
int mpi_size, mpi_rank; /* mpi variables */
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
if (MAINPROCESS){
printf("===================================\n");
printf("MPI functionality tests\n");
printf("===================================\n");
}
fapl = H5Pcreate (H5P_FILE_ACCESS);
H5Pset_fapl_mpio(fapl, MPI_COMM_WORLD, MPI_INFO_NULL);
if (parse_options(argc, argv) != 0){
if (MAINPROCESS)
usage();
goto finish;
}
MPI_BANNER("MPIO independent overlapping writes...");
test_mpio_overlap_writes(filenames[0]);
finish:
if (MAINPROCESS){ /* only process 0 reports */
printf("===================================\n");
if (nerrors){
printf("***MPI tests detected %d errors***\n", nerrors);
}
else{
printf("MPI tests finished with no errors\n");
}
printf("===================================\n");
}
MPI_Finalize();
h5_cleanup(FILENAME, fapl);
return(nerrors);
}

View File

@ -29,6 +29,7 @@ const char *FILENAME[5]={
"ParaMdset",
NULL};
char filenames[5][200];
hid_t fapl; /* file access property list */
@ -254,27 +255,19 @@ parse_options(int argc, char **argv)
/* compose the test filenames */
{
int i, n;
hid_t plist;
plist = H5Pcreate (H5P_FILE_ACCESS);
H5Pset_fapl_mpio(plist, MPI_COMM_WORLD, MPI_INFO_NULL);
n = sizeof(FILENAME)/sizeof(FILENAME[0]) - 1; /* exclude the NULL */
for (i=0; i < n; i++)
if (h5_fixname(FILENAME[i],plist,filenames[i],sizeof(filenames[i]))
if (h5_fixname(FILENAME[i],fapl,filenames[i],sizeof(filenames[i]))
== NULL){
printf("h5_fixname failed\n");
nerrors++;
H5Pclose(plist);
return(1);
}
H5Pclose(plist);
if (verbose){
int i;
printf("Test filenames are:\n");
for (i=0; i < n; i++)
printf(" %s\n", filenames[i]);
}
printf("Test filenames are:\n");
for (i=0; i < n; i++)
printf(" %s\n", filenames[i]);
}
return(0);
@ -294,6 +287,8 @@ main(int argc, char **argv)
printf("PHDF5 TESTS START\n");
printf("===================================\n");
}
fapl = H5Pcreate (H5P_FILE_ACCESS);
H5Pset_fapl_mpio(fapl, MPI_COMM_WORLD, MPI_INFO_NULL);
if (parse_options(argc, argv) != 0){
if (MAINPROCESS)
@ -302,9 +297,6 @@ main(int argc, char **argv)
}
if (dowrite){
MPI_BANNER("MPIO independent overlapping writes...");
test_mpio_overlap_writes(filenames[0]);
MPI_BANNER("dataset using split communicators...");
test_split_comm_access(filenames[0]);
@ -360,7 +352,10 @@ finish:
printf("===================================\n");
}
MPI_Finalize();
if (dowrite)
h5_cleanup(FILENAME, fapl);
else
H5Pclose(fapl);
return(nerrors);
}

View File

@ -47,8 +47,8 @@
/* End of Define some handy debugging shorthands, routines, ... */
/* Constants definitions */
#define DIM0 1024 /* Default dataset sizes. */
#define DIM1 1280 /* Values are from a monitor pixel sizes */
#define DIM0 600 /* Default dataset sizes. */
#define DIM1 800 /* Values are from a monitor pixel sizes */
#define RANK 2
#define DATASETNAME1 "Data1"
#define DATASETNAME2 "Data2"