mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-01-18 15:15:56 +08:00
[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:
parent
114ac60d1b
commit
b3e4cd6e97
@ -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@
|
||||
|
121
testpar/t_mpi.c
121
testpar/t_mpi.c
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user