[svn-r25659] fix filename generation with prefix for perf test.

tested h5commitest, jam & platypus parallel.
This commit is contained in:
Mohamad Chaarawi 2014-10-02 10:56:09 -05:00
parent bd9c6d829a
commit 26400c392b
3 changed files with 89 additions and 46 deletions

View File

@ -46,10 +46,6 @@
# include <mpio.h>
#endif
#ifndef HDF5_PARAPREFIX
# define HDF5_PARAPREFIX ""
#endif /* !HDF5_PARAPREFIX */
/* Macro definitions */
/* Verify:
* if val is false (0), print mesg and if fatal is true (non-zero), die.
@ -67,6 +63,8 @@
} \
} while(0)
#define RANK 1
#define MAX_PATH 1024
hsize_t dims[RANK]; /* dataset dim sizes */
hsize_t block[RANK], stride[RANK], count[RANK];
hssize_t start[RANK];
@ -93,6 +91,11 @@ char opt_file[256] = "perftest.out";
char opt_pvfstab[256] = "notset";
int opt_pvfstab_set = 0;
const char *FILENAME[] = {
opt_file,
NULL
};
/* function prototypes */
static int parse_args(int argc, char **argv);
@ -117,8 +120,7 @@ int main(int argc, char **argv)
MPI_File fh;
MPI_Status status;
int nchars;
const char *prefix;
char *fullname=NULL;
char filename[MAX_PATH];
herr_t ret; /* Generic return value */
/* startup MPI and determine the rank of this process */
@ -131,21 +133,6 @@ int main(int argc, char **argv)
if (mynod == 0) printf("# Using hdf5-io calls.\n");
/* create filename with correct prefix using HDF5_PARAPREFIX */
prefix = HDgetenv("HDF5_PARAPREFIX");
#ifdef HDF5_PARAPREFIX
if (!prefix)
prefix = HDF5_PARAPREFIX;
#endif /* HDF5_PARAPREFIX */
fullname = (char*) malloc(strlen(prefix) + strlen(opt_file) + 2);
if (strlen(prefix) > 0)
{
strcpy(fullname, prefix);
strcat(fullname, "/");
}
strcat(fullname, opt_file);
/* kindof a weird hack- if the location of the pvfstab file was
* specified on the command line, then spit out this location into
* the appropriate environment variable: */
@ -217,8 +204,10 @@ int main(int argc, char **argv)
}
}
h5_fixname_no_suffix(FILENAME[0], acc_tpl, filename, sizeof filename);
/* create the parallel file */
fid = H5Fcreate(fullname, H5F_ACC_TRUNC, H5P_DEFAULT, acc_tpl);
fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, acc_tpl);
VRFY((fid >= 0), "H5Fcreate succeeded", H5FATAL);
/* define a contiquous dataset of opt_iter*nprocs*opt_block chars */
@ -280,7 +269,7 @@ int main(int argc, char **argv)
MPI_Barrier(MPI_COMM_WORLD);
/* reopen the file for reading */
fid=H5Fopen(fullname,H5F_ACC_RDONLY,acc_tpl);
fid=H5Fopen(filename,H5F_ACC_RDONLY,acc_tpl);
VRFY((fid >= 0), "", H5FATAL);
/* open the dataset */
@ -401,7 +390,6 @@ die_jar_jar_die:
free(tmp);
if (opt_correct) free(tmp2);
if(fullname) free(fullname);
MPI_Finalize();
@ -426,6 +414,7 @@ parse_args(int argc, char **argv)
break;
case 'f': /* filename */
strncpy(opt_file, optarg, 255);
FILENAME[0] = opt_file;
break;
case 'p': /* pvfstab file */
strncpy(opt_pvfstab, optarg, 255);

View File

@ -92,6 +92,8 @@ MPI_Info h5_io_info_g=MPI_INFO_NULL;/* MPI INFO object for IO */
static const char *multi_letters = "msbrglo";
static herr_t h5_errors(hid_t estack, void *client_data);
static char * h5_fixname_real(const char *base_name, hid_t fapl, const char *suffix,
char *fullname, size_t size);
/*-------------------------------------------------------------------------
@ -267,10 +269,60 @@ h5_reset(void)
*/
char *
h5_fixname(const char *base_name, hid_t fapl, char *fullname, size_t size)
{
return (h5_fixname_real(base_name, fapl, ".h5", fullname, size));
}
/*-------------------------------------------------------------------------
* Function: h5_fixname_no_suffix
*
* Purpose: Same as h5_fixname but with no suffix appended
*
* Return: Success: The FULLNAME pointer.
*
* Failure: NULL if BASENAME or FULLNAME is the null
* pointer or if FULLNAME isn't large enough for
* the result.
*
*-------------------------------------------------------------------------
*/
char *
h5_fixname_no_suffix(const char *base_name, hid_t fapl, char *fullname, size_t size)
{
return (h5_fixname_real(base_name, fapl, NULL, fullname, size));
}
/*-------------------------------------------------------------------------
* Function: h5_fixname_real
*
* Purpose: Create a file name from a file base name like `test' and
* return it through the FULLNAME (at most SIZE characters
* counting the null terminator). The full name is created by
* prepending the contents of HDF5_PREFIX (separated from the
* base name by a slash) and appending a file extension based on
* the driver supplied, resulting in something like
* `ufs:/u/matzke/test.h5'.
*
* Return: Success: The FULLNAME pointer.
*
* Failure: NULL if BASENAME or FULLNAME is the null
* pointer or if FULLNAME isn't large enough for
* the result.
*
* Programmer: Robb Matzke
* Thursday, November 19, 1998
*
*-------------------------------------------------------------------------
*/
static char *
h5_fixname_real(const char *base_name, hid_t fapl, const char *_suffix,
char *fullname, size_t size)
{
const char *prefix = NULL;
const char *suffix = ".h5"; /* suffix has default */
char *ptr, last = '\0';
const char *suffix = _suffix;
size_t i, j;
hid_t driver = -1;
int isppdriver = 0; /* if the driver is MPI parallel */
@ -285,11 +337,13 @@ h5_fixname(const char *base_name, hid_t fapl, char *fullname, size_t size)
if((driver = H5Pget_driver(fapl)) < 0)
return NULL;
if(suffix) {
if(H5FD_FAMILY == driver)
suffix = "%05d.h5";
else if (H5FD_MULTI == driver)
suffix = NULL;
}
}
/* Must first check fapl is not H5P_DEFAULT (-1) because H5FD_XXX
* could be of value -1 if it is not defined.

View File

@ -142,8 +142,8 @@ extern "C" {
/* Generally useful testing routines */
H5TEST_DLL int h5_cleanup(const char *base_name[], hid_t fapl);
H5TEST_DLL char *h5_fixname(const char *base_name, hid_t fapl, char *fullname,
size_t size);
H5TEST_DLL char *h5_fixname(const char *base_name, hid_t fapl, char *fullname, size_t size);
H5TEST_DLL char *h5_fixname_no_suffix(const char *base_name, hid_t fapl, char *fullname, size_t size);
H5TEST_DLL hid_t h5_fileaccess(void);
H5TEST_DLL void h5_no_hwconv(void);
H5TEST_DLL const char *h5_rmprefix(const char *filename);