diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2003-05-31 16:26:19 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2003-05-31 16:26:19 (GMT) |
commit | f04d4aea61c6becc0f0299cc98b4e5b120ce20ab (patch) | |
tree | d0f5a2b7db8f4a2c0cac30e4bf5e41fd68ef5a6c /src/H5Fistore.c | |
parent | 862520b80e8e1b29f5b5a719b40506e348c2ee47 (diff) | |
download | hdf5-f04d4aea61c6becc0f0299cc98b4e5b120ce20ab.zip hdf5-f04d4aea61c6becc0f0299cc98b4e5b120ce20ab.tar.gz hdf5-f04d4aea61c6becc0f0299cc98b4e5b120ce20ab.tar.bz2 |
[svn-r6942] Purpose:
Performance improment
Description:
Speed up chunked dataset I/O. This breaks down into several areas:
- Compute chunk selections in the file by using hyperslab operations
instead of iterating over each element in the selection.
- If the file and memory selections are the same shape, use the file
chunk selections to compute the memory chunk selections.
This required several additional dataspace, dataspace selection and
hyperslab routines.
Platforms tested:
h5committestted (although Fortran tests failed for some reason)
Diffstat (limited to 'src/H5Fistore.c')
-rw-r--r-- | src/H5Fistore.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/H5Fistore.c b/src/H5Fistore.c index a5362cc..ffbc6de 100644 --- a/src/H5Fistore.c +++ b/src/H5Fistore.c @@ -1743,7 +1743,19 @@ H5F_istore_readvv(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, chunk_coords_in_elmts[u] = chunk_coords[u] * (hssize_t)(layout->dim[u]); /* Get the address of this chunk on disk */ +#ifdef QAK +HDfprintf(stderr,"%s: chunk_coords_in_elmts={",FUNC); +for(u=0; u<layout->ndims; u++) + HDfprintf(stderr,"%Hd%s",chunk_coords_in_elmts[u],(u<(layout->ndims-1) ? ", " : "}\n")); +#endif /* QAK */ chunk_addr=H5F_istore_get_addr(f, dxpl_id, layout, chunk_coords_in_elmts); +#ifdef QAK +HDfprintf(stderr,"%s: chunk_addr=%a, chunk_size=%Hu\n",FUNC,chunk_addr,chunk_size); +HDfprintf(stderr,"%s: chunk_len_arr[%Zu]=%Zu\n",FUNC,*chunk_curr_seq,chunk_len_arr[*chunk_curr_seq]); +HDfprintf(stderr,"%s: chunk_offset_arr[%Zu]=%Hu\n",FUNC,*chunk_curr_seq,chunk_offset_arr[*chunk_curr_seq]); +HDfprintf(stderr,"%s: mem_len_arr[%Zu]=%Zu\n",FUNC,*mem_curr_seq,mem_len_arr[*mem_curr_seq]); +HDfprintf(stderr,"%s: mem_offset_arr[%Zu]=%Hu\n",FUNC,*mem_curr_seq,mem_offset_arr[*mem_curr_seq]); +#endif /* QAK */ /* * If the chunk is too large to load into the cache and it has no @@ -1850,7 +1862,19 @@ H5F_istore_writevv(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, chunk_coords_in_elmts[u] = chunk_coords[u] * (hssize_t)(layout->dim[u]); /* Get the address of this chunk on disk */ +#ifdef QAK +HDfprintf(stderr,"%s: chunk_coords_in_elmts={",FUNC); +for(u=0; u<layout->ndims; u++) + HDfprintf(stderr,"%Hd%s",chunk_coords_in_elmts[u],(u<(layout->ndims-1) ? ", " : "}\n")); +#endif /* QAK */ chunk_addr=H5F_istore_get_addr(f, dxpl_id, layout, chunk_coords_in_elmts); +#ifdef QAK +HDfprintf(stderr,"%s: chunk_addr=%a, chunk_size=%Hu\n",FUNC,chunk_addr,chunk_size); +HDfprintf(stderr,"%s: chunk_len_arr[%Zu]=%Zu\n",FUNC,*chunk_curr_seq,chunk_len_arr[*chunk_curr_seq]); +HDfprintf(stderr,"%s: chunk_offset_arr[%Zu]=%Hu\n",FUNC,*chunk_curr_seq,chunk_offset_arr[*chunk_curr_seq]); +HDfprintf(stderr,"%s: mem_len_arr[%Zu]=%Zu\n",FUNC,*mem_curr_seq,mem_len_arr[*mem_curr_seq]); +HDfprintf(stderr,"%s: mem_offset_arr[%Zu]=%Hu\n",FUNC,*mem_curr_seq,mem_offset_arr[*mem_curr_seq]); +#endif /* QAK */ /* * If the chunk is too large to load into the cache and it has no |