diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2008-04-24 15:03:41 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2008-04-24 15:03:41 (GMT) |
commit | 495ca9c7bb19553d2c87ce68013f1de2dff3d54b (patch) | |
tree | 792e1a9ecc8aa314dfa3d0538464e4f87ad55cf5 /src/H5S.c | |
parent | 16d4cae5b16ffb91298d8d232214afeb5112da6d (diff) | |
download | hdf5-495ca9c7bb19553d2c87ce68013f1de2dff3d54b.zip hdf5-495ca9c7bb19553d2c87ce68013f1de2dff3d54b.tar.gz hdf5-495ca9c7bb19553d2c87ce68013f1de2dff3d54b.tar.bz2 |
[svn-r14860] Description:
Omnibus raw data I/O revisions, with wide-ranging changes and
refactoring, in order to prepare for implementing "fast append" feature.
These changes remove the majority of the code duplication for raw data
I/O which has crept in over the last ten years and introduces a more object-
oriented design for operating on different types of dataset storage.
Chunked storage no longer has it's own I/O routines, it is now handled
as either contiguous (if chunk is not pulled into the cache) or compact (if the
chunk is cached in memory).
No bug or feature changes, at least intentionally... :-)
Tested on:
FreeBSD/32 6.2 (duty) in debug mode
FreeBSD/64 6.2 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/default API=1.6.x, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Mac OS X/32 10.5.2 (amazon) in debug mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
Diffstat (limited to 'src/H5S.c')
-rw-r--r-- | src/H5S.c | 273 |
1 files changed, 16 insertions, 257 deletions
@@ -45,18 +45,6 @@ static herr_t H5S_encode(H5S_t *obj, unsigned char *buf, size_t *nalloc); static H5S_t *H5S_decode(const unsigned char *buf); static htri_t H5S_extent_equal(const H5S_t *ds1, const H5S_t *ds2); -#ifdef H5S_DEBUG -/* Names of the selection names, for debugging */ -static const char *H5S_sel_names[]={ - "none", "point", "hyperslab", "all" -}; - -/* The path table, variable length */ -static H5S_iostats_t **H5S_iostats_g = NULL; -static size_t H5S_aiostats_g = 0; /*entries allocated*/ -static size_t H5S_niostats_g = 0; /*entries used*/ -#endif /* H5S_DEBUG */ - #ifdef H5_HAVE_PARALLEL /* Global vars whose value can be set from environment variable also */ hbool_t H5S_mpi_opt_types_g = TRUE; @@ -87,9 +75,9 @@ DESCRIPTION static herr_t H5S_init_interface(void) { - herr_t ret_value=SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT(H5S_init_interface); + FUNC_ENTER_NOAPI_NOINIT(H5S_init_interface) /* Initialize the atom group for the file IDs */ if(H5I_register_type(H5I_DATASPACE, (size_t)H5I_DATASPACEID_HASHSIZE, H5S_RESERVED_ATOMS, (H5I_free_t)H5S_close) < 0) @@ -105,8 +93,8 @@ H5S_init_interface(void) #endif /* H5_HAVE_PARALLEL */ done: - FUNC_LEAVE_NOAPI(ret_value); -} + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5S_init_interface() */ /*-------------------------------------------------------------------------- @@ -129,156 +117,26 @@ done: int H5S_term_interface(void) { - int n=0; -#ifdef H5S_DEBUG - size_t i; - int j, nprints=0; - H5S_iostats_t *path=NULL; - char buf[256]; -#endif /* H5S_DEBUG */ - - FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_term_interface); - - if (H5_interface_initialize_g) { - if ((n=H5I_nmembers(H5I_DATASPACE))) { - H5I_clear_type(H5I_DATASPACE, FALSE); - } else { -#ifdef H5S_DEBUG - /* - * Print statistics about each conversion path. - */ - if (H5DEBUG(S)) { - for (i=0; i<H5S_niostats_g; i++) { - path = H5S_iostats_g[i]; - for (j=0; j<2; j++) { - if (0==path->stats[j].gath_ncalls && - 0==path->stats[j].scat_ncalls && - 0==path->stats[j].bkg_ncalls && - 0==path->stats[j].read_ncalls && - 0==path->stats[j].write_ncalls) { - continue; - } - if (0==nprints++) { - fprintf(H5DEBUG(S), "H5S: data space conversion " - "statistics:\n"); - fprintf(H5DEBUG(S), - " %-16s %10s %10s %8s %8s %8s %10s\n", - "Memory <> File", "Bytes", "Calls", - "User", "System", "Elapsed", "Bandwidth"); - fprintf(H5DEBUG(S), - " %-16s %10s %10s %8s %8s %8s %10s\n", - "--------------", "-----", "-----", - "----", "------", "-------", "---------"); - } - - /* Summary */ - sprintf(buf, "%s %c %s", - H5S_sel_names[path->mtype], 0==j?'>':'<', H5S_sel_names[path->ftype]); - fprintf(H5DEBUG(S), " %-16s\n", buf); - - /* Gather */ - if (path->stats[j].gath_ncalls) { - H5_bandwidth(buf, - (double)(path->stats[j].gath_nbytes), - path->stats[j].gath_timer.etime); - HDfprintf(H5DEBUG(S), - " %16s %10Hu %10Hu %8.2f %8.2f %8.2f " - "%10s\n", "gather", - path->stats[j].gath_nbytes, - path->stats[j].gath_ncalls, - path->stats[j].gath_timer.utime, - path->stats[j].gath_timer.stime, - path->stats[j].gath_timer.etime, - buf); - } - - /* Scatter */ - if (path->stats[j].scat_ncalls) { - H5_bandwidth(buf, - (double)(path->stats[j].scat_nbytes), - path->stats[j].scat_timer.etime); - HDfprintf(H5DEBUG(S), - " %16s %10Hu %10Hu %8.2f %8.2f %8.2f " - "%10s\n", "scatter", - path->stats[j].scat_nbytes, - path->stats[j].scat_ncalls, - path->stats[j].scat_timer.utime, - path->stats[j].scat_timer.stime, - path->stats[j].scat_timer.etime, - buf); - } - - /* Background */ - if (path->stats[j].bkg_ncalls) { - H5_bandwidth(buf, - (double)(path->stats[j].bkg_nbytes), - path->stats[j].bkg_timer.etime); - HDfprintf(H5DEBUG(S), - " %16s %10Hu %10Hu %8.2f %8.2f %8.2f " - "%10s\n", "background", - path->stats[j].bkg_nbytes, - path->stats[j].bkg_ncalls, - path->stats[j].bkg_timer.utime, - path->stats[j].bkg_timer.stime, - path->stats[j].bkg_timer.etime, - buf); - } - - /* Read */ - if (path->stats[j].read_ncalls) { - H5_bandwidth(buf, - (double)(path->stats[j].read_nbytes), - path->stats[j].read_timer.etime); - HDfprintf(H5DEBUG(S), - " %16s %10Hu %10Hu %8.2f %8.2f %8.2f " - "%10s\n", "read", - path->stats[j].read_nbytes, - path->stats[j].read_ncalls, - path->stats[j].read_timer.utime, - path->stats[j].read_timer.stime, - path->stats[j].read_timer.etime, - buf); - } - - /* Write */ - if (path->stats[j].write_ncalls) { - H5_bandwidth(buf, - (double)(path->stats[j].write_nbytes), - path->stats[j].write_timer.etime); - HDfprintf(H5DEBUG(S), - " %16s %10Hu %10Hu %8.2f %8.2f %8.2f " - "%10s\n", "write", - path->stats[j].write_nbytes, - path->stats[j].write_ncalls, - path->stats[j].write_timer.utime, - path->stats[j].write_timer.stime, - path->stats[j].write_timer.etime, - buf); - } - } - } - } -#endif /* H5S_DEBUG */ + int n = 0; + + FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_term_interface) + if(H5_interface_initialize_g) { + if((n = H5I_nmembers(H5I_DATASPACE))) { + H5I_clear_type(H5I_DATASPACE, FALSE); + } /* end if */ + else { /* Free data types */ H5I_dec_type_ref(H5I_DATASPACE); -#ifdef H5S_DEBUG - /* Clear/free conversion table */ - for (i=0; i<H5S_niostats_g; i++) - H5MM_xfree(H5S_iostats_g[i]); - H5S_iostats_g = H5MM_xfree(H5S_iostats_g); - H5S_niostats_g = H5S_aiostats_g = 0; -#endif /* H5S_DEBUG */ - /* Shut down interface */ H5_interface_initialize_g = 0; n = 1; /*H5I*/ - } - } + } /* end else */ + } /* end if */ - FUNC_LEAVE_NOAPI(n); -} + FUNC_LEAVE_NOAPI(n) +} /* end H5S_term_interface() */ /*-------------------------------------------------------------------------- @@ -1384,105 +1242,6 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* H5S_set_extent_simple() */ -#ifdef H5S_DEBUG - -/*------------------------------------------------------------------------- - * Function: H5S_find - * - * Purpose: Given two data spaces (MEM_SPACE and FILE_SPACE) this - * function returns a pointer to the conversion path information, - * creating a new conversion path entry if necessary. - * - * Return: Success: Ptr to a conversion path entry - * - * Failure: NULL - * - * Programmer: Robb Matzke - * Wednesday, January 21, 1998 - * - * Modifications: - * - * Quincey Koziol - * Instead of returning a point into the data space conversion table we - * copy all the information into a user-supplied CONV buffer and return - * non-negative on success or negative on failure. - * - * Robb Matzke, 11 Aug 1998 - * Returns a pointer into the conversion path table. A path entry - * contains pointers to the memory and file half of the conversion (the - * pointers registered in the H5S_fconv_g[] and H5S_mconv_g[] tables) - * along with other data whose scope is the conversion path (like path - * statistics). - * - * John Mainzer, 8/30/04 - * Modified code to check with all other processes that have the - * file open before OKing collective I/O. - * - *------------------------------------------------------------------------- - */ -H5S_iostats_t * -H5S_find (const H5S_t *mem_space, const H5S_t *file_space) -{ - H5S_iostats_t *path=NULL; /* Space conversion path */ - size_t u; /* Index variable */ - H5S_iostats_t *ret_value; /* Return value */ - - FUNC_ENTER_NOAPI(H5S_find, NULL); - - /* Check args */ - assert (mem_space && (H5S_SIMPLE==H5S_GET_EXTENT_TYPE(mem_space) || - H5S_NULL==H5S_GET_EXTENT_TYPE(mem_space) || - H5S_SCALAR==H5S_GET_EXTENT_TYPE(mem_space))); - assert (file_space && (H5S_SIMPLE==H5S_GET_EXTENT_TYPE(file_space) || - H5S_NULL==H5S_GET_EXTENT_TYPE(file_space) || - H5S_SCALAR==H5S_GET_EXTENT_TYPE(file_space))); - - /* - * Is this path already present in the data space conversion path table? - * If so then return a pointer to that entry. - */ - for (u=0; u<H5S_niostats_g; u++) - if (H5S_iostats_g[u]->ftype==H5S_GET_SELECT_TYPE(file_space) && - H5S_iostats_g[u]->mtype==H5S_GET_SELECT_TYPE(mem_space)) - HGOTO_DONE(H5S_iostats_g[u]); - - /* - * The path wasn't found. Create a new path. - */ - if (NULL==(path = H5MM_calloc(sizeof(*path)))) - HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for data space conversion path") - - /* Initialize file & memory conversion functions */ - path->ftype = H5S_GET_SELECT_TYPE(file_space); - path->mtype = H5S_GET_SELECT_TYPE(mem_space); - - /* - * Add the new path to the table. - */ - if (H5S_niostats_g>=H5S_aiostats_g) { - size_t n = MAX(10, 2*H5S_aiostats_g); - H5S_iostats_t **p = H5MM_realloc(H5S_iostats_g, n*sizeof(H5S_iostats_g[0])); - - if (NULL==p) - HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for data space conversion path table") - H5S_aiostats_g = n; - H5S_iostats_g = p; - } /* end if */ - H5S_iostats_g[H5S_niostats_g++] = path; - - /* Set the return value */ - ret_value=path; - -done: - if(ret_value==NULL) { - if(path!=NULL) - H5MM_xfree(path); - } /* end if */ - - FUNC_LEAVE_NOAPI(ret_value); -} /* end H5S_find() */ -#endif /* H5S_DEBUG */ - /*------------------------------------------------------------------------- * Function: H5Screate_simple |