summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2004-04-17 19:22:15 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2004-04-17 19:22:15 (GMT)
commitd08090ff29eaef0c315a1abce7df94bcc902c2fc (patch)
tree9ffd70351b4fa07a25da758b53721b1339b1f9e7
parentdd0480cd30a9f53583dec47f8139b4045f612868 (diff)
downloadhdf5-d08090ff29eaef0c315a1abce7df94bcc902c2fc.zip
hdf5-d08090ff29eaef0c315a1abce7df94bcc902c2fc.tar.gz
hdf5-d08090ff29eaef0c315a1abce7df94bcc902c2fc.tar.bz2
[svn-r8374] Purpose:
Code optimization Description: Instead of re-initializing the default stride & block arrays to have values of '1' in each position each time we perform a hyperslab selection, create static constant arrays with '1's in them. Platforms tested: Solaris 2.7 (arabica) FreeBSD 4.9 (sleipnir) too minor to require h5committest
-rw-r--r--src/H5Shyper.c100
1 files changed, 46 insertions, 54 deletions
diff --git a/src/H5Shyper.c b/src/H5Shyper.c
index dd097be..60d1269 100644
--- a/src/H5Shyper.c
+++ b/src/H5Shyper.c
@@ -56,6 +56,18 @@ static herr_t H5S_hyper_iter_next(H5S_sel_iter_t *sel_iter, size_t nelem);
static herr_t H5S_hyper_iter_next_block(H5S_sel_iter_t *sel_iter);
static herr_t H5S_hyper_iter_release(H5S_sel_iter_t *sel_iter);
+/* Static variables */
+static const hsize_t _stride[H5O_LAYOUT_NDIMS]={ /* Default stride array */
+ 1,1,1,1, 1,1,1,1,
+ 1,1,1,1, 1,1,1,1,
+ 1,1,1,1, 1,1,1,1,
+ 1,1,1,1, 1,1,1,1,1};
+static const hsize_t _block[H5O_LAYOUT_NDIMS]={ /* Default block size array */
+ 1,1,1,1, 1,1,1,1,
+ 1,1,1,1, 1,1,1,1,
+ 1,1,1,1, 1,1,1,1,
+ 1,1,1,1, 1,1,1,1,1};
+
/* Declare a free list to manage the H5S_hyper_span_t struct */
H5FL_DEFINE_STATIC(H5S_hyper_span_t);
@@ -5431,9 +5443,9 @@ done:
static herr_t
H5S_generate_hyperslab (H5S_t *space, H5S_seloper_t op,
const hssize_t start[],
- const hsize_t _stride[],
- const hsize_t _count[],
- const hsize_t _block[])
+ const hsize_t t_stride[],
+ const hsize_t t_count[],
+ const hsize_t t_block[])
{
hsize_t stride[H5O_LAYOUT_NDIMS]; /* Optimized stride information */
hsize_t count[H5O_LAYOUT_NDIMS]; /* Optimized count information */
@@ -5453,27 +5465,27 @@ H5S_generate_hyperslab (H5S_t *space, H5S_seloper_t op,
assert(space);
assert(op>H5S_SELECT_NOOP && op<H5S_SELECT_INVALID);
assert(start);
- assert(_stride);
- assert(_count);
- assert(_block);
+ assert(t_stride);
+ assert(t_count);
+ assert(t_block);
/* Optimize hyperslab selection to merge contiguous blocks */
for(u=0; u<space->extent.u.simple.rank; u++) {
/* contiguous hyperslabs have the block size equal to the stride */
- if(_stride[u]==_block[u]) {
+ if(t_stride[u]==t_block[u]) {
count[u]=1;
stride[u]=1;
- block[u]=_block[u]*_count[u];
+ block[u]=t_block[u]*t_count[u];
}
else {
- if(_count[u]==1)
+ if(t_count[u]==1)
stride[u]=1;
else {
- assert(_stride[u]>_block[u]);
- stride[u]=_stride[u];
+ assert(t_stride[u]>t_block[u]);
+ stride[u]=t_stride[u];
} /* end else */
- count[u]=_count[u];
- block[u]=_block[u];
+ count[u]=t_count[u];
+ block[u]=t_block[u];
} /* end if */
} /* end for */
@@ -5695,8 +5707,6 @@ H5S_select_hyperslab (H5S_t *space, H5S_seloper_t op,
const hsize_t count[],
const hsize_t *block)
{
- hsize_t _stride[H5O_LAYOUT_NDIMS]; /* Stride array */
- hsize_t _block[H5O_LAYOUT_NDIMS]; /* Block size array */
unsigned u; /* Counters */
H5S_hyper_dim_t *diminfo; /* per-dimension info for the selection */
herr_t ret_value=SUCCEED; /* Return value */
@@ -5709,21 +5719,13 @@ H5S_select_hyperslab (H5S_t *space, H5S_seloper_t op,
assert(count);
assert(op>H5S_SELECT_NOOP && op<H5S_SELECT_INVALID);
- /* Fill in the correct stride values */
- if(stride==NULL) {
- hsize_t fill=1;
-
- H5V_array_fill(_stride,&fill,sizeof(hssize_t),space->extent.u.simple.rank);
+ /* Point to the correct stride values */
+ if(stride==NULL)
stride = _stride;
- }
- /* Fill in the correct block values */
- if(block==NULL) {
- hsize_t fill=1;
-
- H5V_array_fill(_block,&fill,sizeof(hssize_t),space->extent.u.simple.rank);
+ /* Point to the correct block values */
+ if(block==NULL)
block = _block;
- }
/* Fixup operation for non-hyperslab selections */
switch(space->select.type) {
@@ -6221,9 +6223,9 @@ done:
static herr_t
H5S_generate_hyperslab (H5S_t *space, H5S_seloper_t op,
const hssize_t start[],
- const hsize_t _stride[],
- const hsize_t _count[],
- const hsize_t _block[])
+ const hsize_t t_stride[],
+ const hsize_t t_count[],
+ const hsize_t t_block[])
{
hsize_t stride[H5O_LAYOUT_NDIMS]; /* Optimized stride information */
hsize_t count[H5O_LAYOUT_NDIMS]; /* Optimized count information */
@@ -6240,27 +6242,27 @@ H5S_generate_hyperslab (H5S_t *space, H5S_seloper_t op,
assert(space);
assert(op>H5S_SELECT_NOOP && op<H5S_SELECT_INVALID);
assert(start);
- assert(_stride);
- assert(_count);
- assert(_block);
+ assert(t_stride);
+ assert(t_count);
+ assert(t_block);
/* Optimize hyperslab selection to merge contiguous blocks */
for(u=0; u<space->extent.u.simple.rank; u++) {
/* contiguous hyperslabs have the block size equal to the stride */
- if(_stride[u]==_block[u]) {
+ if(t_stride[u]==t_block[u]) {
count[u]=1;
stride[u]=1;
- block[u]=_block[u]*_count[u];
+ block[u]=t_block[u]*t_count[u];
}
else {
- if(_count[u]==1)
+ if(t_count[u]==1)
stride[u]=1;
else {
- assert(_stride[u]>_block[u]);
- stride[u]=_stride[u];
+ assert(t_stride[u]>t_block[u]);
+ stride[u]=t_stride[u];
} /* end else */
- count[u]=_count[u];
- block[u]=_block[u];
+ count[u]=t_count[u];
+ block[u]=t_block[u];
} /* end if */
} /* end for */
@@ -6311,8 +6313,6 @@ H5S_select_hyperslab (H5S_t *space, H5S_seloper_t op,
const hsize_t count[],
const hsize_t *block)
{
- hsize_t _stride[H5O_LAYOUT_NDIMS]; /* Stride array */
- hsize_t _block[H5O_LAYOUT_NDIMS]; /* Block size array */
unsigned u; /* Counters */
H5S_hyper_dim_t *diminfo; /* per-dimension info for the selection */
herr_t ret_value=SUCCEED; /* Return value */
@@ -6325,21 +6325,13 @@ H5S_select_hyperslab (H5S_t *space, H5S_seloper_t op,
assert(count);
assert(op>H5S_SELECT_NOOP && op<H5S_SELECT_INVALID);
- /* Fill in the correct stride values */
- if(stride==NULL) {
- hsize_t fill=1;
-
- H5V_array_fill(_stride,&fill,sizeof(hssize_t),space->extent.u.simple.rank);
+ /* Point to the correct stride values */
+ if(stride==NULL)
stride = _stride;
- } /* end if */
-
- /* Fill in the correct block values */
- if(block==NULL) {
- hsize_t fill=1;
- H5V_array_fill(_block,&fill,sizeof(hssize_t),space->extent.u.simple.rank);
+ /* Point to the correct block values */
+ if(block==NULL)
block = _block;
- } /* end if */
/* Fixup operation for non-hyperslab selections */
switch(space->select.type) {