diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 1999-04-28 23:09:08 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 1999-04-28 23:09:08 (GMT) |
commit | 5e37f08253753985eb2dcc79c6a7acb30b2a3329 (patch) | |
tree | 4c863ba1669dfd60d98facd63482cc9ff78237ef /src/H5Shyper.c | |
parent | 81dc6e53f8f41c27d02fdb24380d51505910a483 (diff) | |
download | hdf5-5e37f08253753985eb2dcc79c6a7acb30b2a3329.zip hdf5-5e37f08253753985eb2dcc79c6a7acb30b2a3329.tar.gz hdf5-5e37f08253753985eb2dcc79c6a7acb30b2a3329.tar.bz2 |
[svn-r1232] Fixed some boundary conditions on hyperslab I/O that the parallel I/O T3E port
exposed. These are more changes that everyone should pick up.
Diffstat (limited to 'src/H5Shyper.c')
-rw-r--r-- | src/H5Shyper.c | 53 |
1 files changed, 28 insertions, 25 deletions
diff --git a/src/H5Shyper.c b/src/H5Shyper.c index f5ec498..202d720 100644 --- a/src/H5Shyper.c +++ b/src/H5Shyper.c @@ -234,8 +234,8 @@ H5S_hyper_get_regions (size_t *num_regions, intn dim, size_t bound_count, #ifdef QAK printf("%s: check 1.0, dim=%d\n",FUNC,dim); - for(i=0; i<2; i++) - printf("%s: %d - pos=%d\n",FUNC,i,(int)pos[i]); + for(i=0; i<3; i++) + printf("%s: %d - pos=%d, offset=%d\n",FUNC,i,(int)pos[i],offset!=NULL ? (int)offset[i] : 0); #endif /* QAK */ /* Check if we need to generate a list of regions for the 0th dim. */ @@ -244,6 +244,9 @@ H5S_hyper_get_regions (size_t *num_regions, intn dim, size_t bound_count, printf("%s: check 1.1, bound_count=%d\n",FUNC,bound_count); #endif /* QAK */ for(i=0; i<bound_count; i++) { +#ifdef QAK + printf("%s: check 1.2, lo_bounds[0][%d].bound=%d, hi_bounds[0][%d].bound=%d\n",FUNC,(int)i,(int)lo_bounds[0][i].bound,(int)i,(int)hi_bounds[0][i].bound); +#endif /* QAK */ /* Skip past already iterated regions */ if(pos[0]==(-1) || ((pos[0]+offset[0])>=lo_bounds[0][i].bound && (pos[0]+offset[0]) <= hi_bounds[0][i].bound)) { /* Check if we've allocated the array yet */ @@ -439,6 +442,7 @@ H5S_hyper_block_cache (H5S_hyper_node_t *node, assert(node); assert(fhyper_info); +printf("%s: check 1.0\n",FUNC); /* Allocate temporary buffer of proper size */ if((node->cinfo.block_id=H5TB_get_buf(node->cinfo.size*fhyper_info->elmt_size,1,(void **)&(node->cinfo.block)))<0) HRETURN_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, @@ -514,6 +518,7 @@ H5S_hyper_block_read (H5S_hyper_node_t *node, H5S_hyper_fhyper_info_t *fhyper_in node->cinfo.rleft-=region_size; /* If we've read in all the elements from the block, throw it away */ +printf("%s: rleft=%d, wleft=%d, size=%d\n",FUNC,(int)node->cinfo.rleft,(int)node->cinfo.wleft,(int)node->cinfo.size); if(node->cinfo.rleft==0 && (node->cinfo.wleft==0 || node->cinfo.wleft==node->cinfo.size)) { /* Release the temporary buffer */ H5TB_release_buf(node->cinfo.block_id); @@ -654,8 +659,9 @@ H5S_hyper_fread (intn dim, H5S_hyper_fhyper_info_t *fhyper_info) * dimension and should input those regions). */ #ifdef QAK - printf("%s: check 2.0, rank=%d\n", - FUNC,(int)fhyper_info->space->extent.u.simple.rank); + printf("%s: check 2.0, rank=%d, cache_hyper=%d\n", + FUNC,(int)fhyper_info->space->extent.u.simple.rank, + (int)fhyper_info->xfer_parms->cache_hyper); for(i=0; i<num_regions; i++) printf("%s: check 2.1, region #%d: start=%d, end=%d\n", FUNC,i,(int)regions[i].start,(int)regions[i].end); @@ -698,7 +704,7 @@ H5S_hyper_fread (intn dim, H5S_hyper_fhyper_info_t *fhyper_info) } /* end if */ #ifdef QAK - printf("%s: check 2.2, i=%d\n",FUNC,(int)i); + printf("%s: check 2.2, i=%d, region_size=%d\n",FUNC,(int)i,(int)region_size); #endif /* QAK */ /* Fill in the region specific parts of the I/O request */ hsize[fhyper_info->space->extent.u.simple.rank-1]=region_size; @@ -743,7 +749,9 @@ H5S_hyper_fread (intn dim, H5S_hyper_fhyper_info_t *fhyper_info) } /* end for */ } else { /* recurse on each region to next dimension down */ #ifdef QAK - printf("%s: check 3.0, num_regions=%d\n",FUNC,(int)num_regions); + printf("%s: check 3.0, num_regions=%d\n",FUNC,(int)num_regions); + for(i=0; i<num_regions; i++) + printf("%s: region %d={%d, %d}\n", FUNC,i,(int)regions[i].start,(int)regions[i].end); #endif /* QAK */ /* Increment the dimension we are working with */ @@ -754,22 +762,21 @@ H5S_hyper_fread (intn dim, H5S_hyper_fhyper_info_t *fhyper_info) /* Step through each location in each region */ for(j=regions[i].start; j<=regions[i].end && fhyper_info->nelmts>0; j++) { #ifdef QAK - printf("%s: check 4.0, dim=%d, location=%d\n",FUNC,dim,j); + printf("%s: check 4.0, dim=%d, location=%d\n",FUNC,dim,j); #endif /* QAK */ - /* - * If we are moving to a new position in this dim, reset - * the next lower dim. location. - */ - if(fhyper_info->iter->hyp.pos[dim]!=j) - fhyper_info->iter->hyp.pos[dim+1]=(-1); - /* Set the correct position we are working on */ fhyper_info->iter->hyp.pos[dim]=j; /* Go get the regions in the next lower dimension */ num_read+=H5S_hyper_fread(dim, fhyper_info); + + /* Advance to the next row if we got the whole region */ + if(fhyper_info->iter->hyp.pos[dim+1]==(-1)) + fhyper_info->iter->hyp.pos[dim]=j+1; } /* end for */ + if(j>regions[i].end && fhyper_info->iter->hyp.pos[dim+1]==(-1)) + fhyper_info->iter->hyp.pos[dim]=(-1); } /* end for */ } /* end else */ @@ -1021,23 +1028,19 @@ H5S_hyper_fwrite (intn dim, H5S_hyper_fhyper_info_t *fhyper_info) /* Step through each region in this dimension */ for(i=0; i<num_regions && fhyper_info->nelmts>0; i++) { /* Step through each location in each region */ - for(j=regions[i].start; - j<=regions[i].end && fhyper_info->nelmts>0; - j++) { - - /* - * If we are moving to a new position in this dim, reset - * the next lower dim. location. - */ - if(fhyper_info->iter->hyp.pos[dim]!=j) - fhyper_info->iter->hyp.pos[dim+1]=(-1); - + for(j=regions[i].start; j<=regions[i].end && fhyper_info->nelmts>0; j++) { /* Set the correct position we are working on */ fhyper_info->iter->hyp.pos[dim]=j; /* Go get the regions in the next lower dimension */ num_written+=H5S_hyper_fwrite(dim, fhyper_info); + + /* Advance to the next row if we got the whole region */ + if(fhyper_info->iter->hyp.pos[dim+1]==(-1)) + fhyper_info->iter->hyp.pos[dim]=j+1; } /* end for */ + if(j>regions[i].end && fhyper_info->iter->hyp.pos[dim+1]==(-1)) + fhyper_info->iter->hyp.pos[dim]=(-1); } /* end for */ } /* end else */ |