diff options
author | Pedro Vicente Nunes <pvn@hdfgroup.org> | 2006-04-06 18:29:53 (GMT) |
---|---|---|
committer | Pedro Vicente Nunes <pvn@hdfgroup.org> | 2006-04-06 18:29:53 (GMT) |
commit | 9d01b26a9302bdff93e20f1a6e55cb473a79d174 (patch) | |
tree | 369846ca1de752d4f48de3f21f16c2cf0b0fd174 /tools/h5repack | |
parent | 8b2932bf607dc758221bc1041b4946a01fbf6413 (diff) | |
download | hdf5-9d01b26a9302bdff93e20f1a6e55cb473a79d174.zip hdf5-9d01b26a9302bdff93e20f1a6e55cb473a79d174.tar.gz hdf5-9d01b26a9302bdff93e20f1a6e55cb473a79d174.tar.bz2 |
[svn-r12205] Purpose:
new feature
Description:
added the printout of the compression ratio for filters in h5repack, after the filter name, obtained with H5Dget_storage_size, before and after applying the filter
Solution:
Platforms tested:
linux
solaris
AIX
Misc. update:
Diffstat (limited to 'tools/h5repack')
-rw-r--r-- | tools/h5repack/h5repack_copy.c | 150 | ||||
-rw-r--r-- | tools/h5repack/h5repack_filters.c | 23 | ||||
-rw-r--r-- | tools/h5repack/h5repack_list.c | 2 | ||||
-rw-r--r-- | tools/h5repack/h5repack_refs.c | 28 | ||||
-rw-r--r-- | tools/h5repack/testh5repack_main.c | 3 |
5 files changed, 113 insertions, 93 deletions
diff --git a/tools/h5repack/h5repack_copy.c b/tools/h5repack/h5repack_copy.c index 436012a..a385fa2 100644 --- a/tools/h5repack/h5repack_copy.c +++ b/tools/h5repack/h5repack_copy.c @@ -19,20 +19,25 @@ #include "H5private.h" #include "h5repack.h" -#if 0 -#define PRINT_DEBUG -#endif +#define PER(A,B) { per = 0; \ + if (A!=0) \ + per = (float)fabs(1-( (float)B / (float)A )); \ + } + +#define FORMAT_OBJ " %-21s %s\n" /* obj type, name */ /*------------------------------------------------------------------------- - * Function: print_obj + * Function: print_dataset_info * - * Purpose: print name and filters of an object + * Purpose: print name, filters, percentage compression of a dataset * *------------------------------------------------------------------------- */ -static void print_obj(hid_t dcpl_id, char *name) +static void print_dataset_info(hid_t dcpl_id, + char *objname, + float per) { - char str[255]; + char strfilter[255]; #if defined (PRINT_DEBUG ) char temp[255]; #endif @@ -41,10 +46,10 @@ static void print_obj(hid_t dcpl_id, char *name) H5Z_filter_t filtn; /* filter identification number */ unsigned cd_values[20]; /* filter client data values */ size_t cd_nelmts; /* filter client number of values */ - char f_name[256]; /* filter name */ + char f_objname[256]; /* filter objname */ int i; - strcpy(str,"\0"); + strcpy(strfilter,"\0"); /* get information about input filters */ if ((nfilters = H5Pget_nfilters(dcpl_id))<0) @@ -60,16 +65,16 @@ static void print_obj(hid_t dcpl_id, char *name) &filt_flags, &cd_nelmts, cd_values, - sizeof(f_name), - f_name); + sizeof(f_objname), + f_objname); #else filtn = H5Pget_filter(dcpl_id, (unsigned)i, &filt_flags, &cd_nelmts, cd_values, - sizeof(f_name), - f_name, + sizeof(f_objname), + f_objname, NULL); #endif /* H5_WANT_H5_V1_6_COMPAT */ @@ -79,52 +84,64 @@ static void print_obj(hid_t dcpl_id, char *name) default: break; case H5Z_FILTER_DEFLATE: - strcat(str,"GZIP "); + strcat(strfilter,"GZIP "); #if defined (PRINT_DEBUG) { unsigned level=cd_values[0]; sprintf(temp,"(%d)",level); - strcat(str,temp); + strcat(strfilter,temp); } #endif break; case H5Z_FILTER_SZIP: - strcat(str,"SZIP "); + strcat(strfilter,"SZIP "); #if defined (PRINT_DEBUG) { unsigned options_mask=cd_values[0]; /* from dcpl, not filt*/ unsigned ppb=cd_values[1]; sprintf(temp,"(%d,",ppb); - strcat(str,temp); + strcat(strfilter,temp); if (options_mask & H5_SZIP_EC_OPTION_MASK) strcpy(temp,"EC) "); else if (options_mask & H5_SZIP_NN_OPTION_MASK) strcpy(temp,"NN) "); } - strcat(str,temp); + strcat(strfilter,temp); #endif break; case H5Z_FILTER_SHUFFLE: - strcat(str,"SHUF "); + strcat(strfilter,"SHUF "); break; case H5Z_FILTER_FLETCHER32: - strcat(str,"FLET "); + strcat(strfilter,"FLET "); break; case H5Z_FILTER_NBIT: - strcat(str,"NBIT "); + strcat(strfilter,"NBIT "); break; case H5Z_FILTER_SCALEOFFSET: - strcat(str,"SCALEOFFSET "); + strcat(strfilter,"SCALEOFFSET "); break; } /* switch */ }/*i*/ - printf(" %-10s %s %s\n", "dataset",str,name ); + if (strcmp(strfilter,"\0")==0) + printf(FORMAT_OBJ,"dset",objname ); + else + { + char str[255], temp[20]; + strcpy(str,"dset "); + strcat(str,strfilter); + sprintf(temp,"(%.2f%%)",per); + strcat(str,temp); + printf(FORMAT_OBJ,str,objname); + } + + } @@ -150,7 +167,7 @@ int copy_objects(const char* fnamein, const char *argv[]) { hid_t fidin; - hid_t fidout=(-1); + hid_t fidout; trav_table_t *travt=NULL; /*------------------------------------------------------------------------- @@ -244,31 +261,39 @@ int do_copy_objects(hid_t fidin, trav_table_t *travt, pack_opt_t *options) /* repack options */ { - hid_t grp_in=(-1); /* group ID */ - hid_t grp_out=(-1); /* group ID */ - hid_t dset_in=(-1); /* read dataset ID */ - hid_t dset_out=(-1); /* write dataset ID */ - hid_t type_in=(-1); /* named type ID */ - hid_t type_out=(-1); /* named type ID */ - hid_t dcpl_id=(-1); /* dataset creation property list ID */ - hid_t dcpl_out=(-1); /* dataset creation property list ID */ - hid_t space_id=(-1); /* space ID */ - hid_t ftype_id=(-1); /* file data type ID */ - hid_t mtype_id=(-1); /* memory data type ID */ + hid_t grp_in; /* group ID */ + hid_t grp_out; /* group ID */ + hid_t dset_in; /* read dataset ID */ + hid_t dset_out; /* write dataset ID */ + hid_t type_in; /* named type ID */ + hid_t type_out; /* named type ID */ + hid_t dcpl_id; /* dataset creation property list ID */ + hid_t dcpl_out; /* dataset creation property list ID */ + hid_t space_id; /* space ID */ + hid_t ftype_id; /* file data type ID */ + hid_t mtype_id; /* memory data type ID */ size_t msize; /* memory size of memory type */ void *buf=NULL; /* data buffer */ hsize_t nelmts; /* number of elements in dataset */ int rank; /* rank of dataset */ hsize_t dims[H5S_MAX_RANK];/* dimensions of dataset */ hsize_t dsize_in; /* input dataset size before filter */ + hsize_t dsize_out; /* output dataset size after filter */ int next; /* external files */ int i, j; + int apply; /*------------------------------------------------------------------------- * copy the suppplied object list *------------------------------------------------------------------------- */ + if (options->verbose) { + printf("-----------------------------------------\n"); + printf(" Type Filter (Ratio) Name\n"); + printf("-----------------------------------------\n"); + } + for ( i = 0; i < travt->nobjs; i++) { @@ -281,7 +306,7 @@ int do_copy_objects(hid_t fidin, */ case H5G_GROUP: if (options->verbose) - printf(" %-10s %s\n", "group",travt->objs[i].name ); + printf(FORMAT_OBJ,"group",travt->objs[i].name ); if ((grp_out=H5Gcreate(fidout,travt->objs[i].name, 0))<0) goto error; @@ -329,10 +354,7 @@ int do_copy_objects(hid_t fidin, for (j=0; j<rank; j++) nelmts*=dims[j]; - if (options->verbose) - print_obj(dcpl_id,travt->objs[i].name ); - - if ((mtype_id=h5tools_get_native_type(ftype_id))<0) + if ((mtype_id=h5tools_get_native_type(ftype_id))<0) goto error; if ((msize=H5Tget_size(mtype_id))==0) @@ -345,9 +367,9 @@ int do_copy_objects(hid_t fidin, if ((next=H5Pget_external_count (dcpl_id))<0) goto error; - if (next) { - fprintf(stderr,"Warning: <%s> has external files, ignoring read...\n",travt->objs[i].name ); - } + if (next) + fprintf(stderr,"warning: <%s> has external files, ignoring read...\n", + travt->objs[i].name ); /*------------------------------------------------------------------------- * check if the dataset creation property list has filters that @@ -367,12 +389,11 @@ int do_copy_objects(hid_t fidin, */ if ( (H5T_REFERENCE!=H5Tget_class(mtype_id))) { - /* get the storage size of the input dataset */ dsize_in=H5Dget_storage_size(dset_in); /*------------------------------------------------------------------------- - * read to memory + * read *------------------------------------------------------------------------- */ if (nelmts) @@ -385,12 +406,22 @@ int do_copy_objects(hid_t fidin, if (H5Dread(dset_in,mtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0) goto error; + /*------------------------------------------------------------------------- + * check for datasets too small + *------------------------------------------------------------------------- + */ + apply=1; + if (nelmts*msize < options->threshold ) + apply=0; + /*------------------------------------------------------------------------- * apply the filter *------------------------------------------------------------------------- */ - if (apply_filters(travt->objs[i].name,rank,dims,dcpl_out,mtype_id,options)<0) - goto error; + if (apply){ + if (apply_filters(travt->objs[i].name,rank,dims,dcpl_out,mtype_id,options)<0) + goto error; + } }/*nelmts*/ @@ -411,7 +442,7 @@ int do_copy_objects(hid_t fidin, goto error; if (options->verbose) - printf("Warning: Could not apply the filter to <%s>\n", travt->objs[i].name); + printf("warning: could not apply the filter to <%s>\n", travt->objs[i].name); } /*------------------------------------------------------------------------- @@ -423,6 +454,23 @@ int do_copy_objects(hid_t fidin, if (H5Dwrite(dset_out,mtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0) goto error; } + + /*------------------------------------------------------------------------- + * amount of compression used + *------------------------------------------------------------------------- + */ + if (options->verbose) { + float per; /* percent utilization of storage */ + /* get the storage size of the input dataset */ + dsize_out=H5Dget_storage_size(dset_out); + PER((hssize_t)dsize_in,(hssize_t)dsize_out); + print_dataset_info(dcpl_out,travt->objs[i].name,per*(float)100.0); + } + + if (apply==0 && options->verbose) + printf("warning: filter not applied to <%s>. dataset smaller than <%d> bytes\n", + travt->objs[i].name,(int)options->threshold); + /*------------------------------------------------------------------------- * copy attrs *------------------------------------------------------------------------- @@ -488,7 +536,7 @@ int do_copy_objects(hid_t fidin, goto error; if (options->verbose) - printf(" %-10s %s\n","datatype",travt->objs[i].name ); + printf(FORMAT_OBJ,"type",travt->objs[i].name ); break; @@ -521,14 +569,12 @@ int do_copy_objects(hid_t fidin, free(targbuf); if (options->verbose) - printf(" %-10s %s\n","link",travt->objs[i].name ); + printf(FORMAT_OBJ,"link",travt->objs[i].name ); } break; default: - if (options->verbose) - printf(" %-10s %s\n","User defined object",travt->objs[i].name); goto error; } } diff --git a/tools/h5repack/h5repack_filters.c b/tools/h5repack/h5repack_filters.c index a96d5be..1cd6955 100644 --- a/tools/h5repack/h5repack_filters.c +++ b/tools/h5repack/h5repack_filters.c @@ -194,16 +194,11 @@ int apply_filters(const char* name, /* object name from traverse list */ pack_opt_t *options) /* repack options */ { int nfilters; /* number of filters in DCPL */ - hsize_t nelmts; /* number of elements in dataset */ - size_t size; /* size of datatype in bytes */ hsize_t chsize[64]; /* chunk size in elements */ H5D_layout_t layout; int i; pack_info_t obj; - if (rank==0) - goto out; - /*------------------------------------------------------------------------- * initialize the assigment object *------------------------------------------------------------------------- @@ -220,20 +215,6 @@ int apply_filters(const char* name, /* object name from traverse list */ /* get information about input filters */ if ((nfilters = H5Pget_nfilters(dcpl_id))<0) return -1; - - /* check for datasets too small */ - if ((size=H5Tget_size(type_id))==0) - return 0; - nelmts=1; - for (i=0; i<rank; i++) - nelmts*=dims[i]; - if (nelmts*size < options->threshold ) - { - if (nfilters && options->verbose) - printf("Warning: Filter not applied to <%s>. Dataset smaller than <%d> bytes\n", - name,(int)options->threshold); - return 0; - } /*------------------------------------------------------------------------- * check if we have filters in the pipeline @@ -420,10 +401,6 @@ int apply_filters(const char* name, /* object name from traverse list */ return 0; -out: - if (options->verbose) - printf("Warning: Filter could not be applied to <%s>\n",name); - return 0; } diff --git a/tools/h5repack/h5repack_list.c b/tools/h5repack/h5repack_list.c index b98af5c..7831380 100644 --- a/tools/h5repack/h5repack_list.c +++ b/tools/h5repack/h5repack_list.c @@ -133,7 +133,7 @@ int check_objects(const char* fname, if (csize < ppb ) { - printf("Warning: SZIP settins, chunk size is smaller than pixels per block...Exiting\n"); + printf("warning: SZIP settins, chunk size is smaller than pixels per block...Exiting\n"); goto out; } diff --git a/tools/h5repack/h5repack_refs.c b/tools/h5repack/h5repack_refs.c index 4b075d5..83b1c13 100644 --- a/tools/h5repack/h5repack_refs.c +++ b/tools/h5repack/h5repack_refs.c @@ -52,15 +52,15 @@ int do_copy_refobjs(hid_t fidin, trav_table_t *travt, pack_opt_t *options) /* repack options */ { - hid_t grp_in=(-1); /* read group ID */ - hid_t grp_out=(-1); /* write group ID */ - hid_t dset_in=(-1); /* read dataset ID */ - hid_t dset_out=(-1); /* write dataset ID */ - hid_t type_in=(-1); /* named type ID */ - hid_t dcpl_id=(-1); /* dataset creation property list ID */ - hid_t space_id=(-1); /* space ID */ - hid_t ftype_id=(-1); /* file data type ID */ - hid_t mtype_id=(-1); /* memory data type ID */ + hid_t grp_in; /* read group ID */ + hid_t grp_out; /* write group ID */ + hid_t dset_in; /* read dataset ID */ + hid_t dset_out; /* write dataset ID */ + hid_t type_in; /* named type ID */ + hid_t dcpl_id; /* dataset creation property list ID */ + hid_t space_id; /* space ID */ + hid_t ftype_id; /* file data type ID */ + hid_t mtype_id; /* memory data type ID */ size_t msize; /* memory size of memory type */ hsize_t nelmts; /* number of elements in dataset */ int rank; /* rank of dataset */ @@ -466,11 +466,11 @@ static int copy_refs_attr(hid_t loc_in, hid_t fidout /* for saving references */ ) { - hid_t attr_id=-1; /* attr ID */ - hid_t attr_out=-1; /* attr ID */ - hid_t space_id=-1; /* space ID */ - hid_t ftype_id=-1; /* file data type ID */ - hid_t mtype_id=-1; /* memory data type ID */ + hid_t attr_id; /* attr ID */ + hid_t attr_out; /* attr ID */ + hid_t space_id; /* space ID */ + hid_t ftype_id; /* file data type ID */ + hid_t mtype_id; /* memory data type ID */ size_t msize; /* memory size of type */ hsize_t nelmts; /* number of elements in dataset */ int rank; /* rank of dataset */ diff --git a/tools/h5repack/testh5repack_main.c b/tools/h5repack/testh5repack_main.c index 19dc956..58a7c2a 100644 --- a/tools/h5repack/testh5repack_main.c +++ b/tools/h5repack/testh5repack_main.c @@ -18,9 +18,6 @@ #include "testh5repack.h" #include "h5diff.h" -#if 0 -#define PACK_DEBUG -#endif /*------------------------------------------------------------------------- * Function: main |