[mpich-discuss] ROMIO: ADIOI_Calc_my_off_len (patch proposed for adio/comm/ad_read_coll.c)

Rob Ross rross at mcs.anl.gov
Tue Jul 27 09:20:18 CDT 2010


Hi Pascal,

The code is purposefully skipping blocks of length zero because there  
is no data in them. Until we hit a block with data in it, we have not  
found an offset.

Perhaps I don't understand. Can you provide an example code that would  
exhibit a problem with the code as it exists now?

Thanks,

Rob

On Jul 27, 2010, at 7:47 AM, Pascal Deveze wrote:

> At line 379 of adio/common/ad_read_coll.c, if flat_file- 
> >blocklens[i] is null, the code continue.
> But in the case where i is null (first loop), the first calculated  
> offset is false.
>
> 369          if (file_ptr_type == ADIO_INDIVIDUAL) {
>  370             /* Wei-keng reworked type processing to be a bit  
> more efficient */
>  371              offset       = fd->fp_ind - disp;
>  372              n_filetypes  = (offset - flat_file->indices[0]) /  
> filetype_extent;
>  373               offset     -= (ADIO_Offset)n_filetypes *  
> filetype_extent;
>  374                  /* now offset is local to this extent */
>  375
>  376              /* find the block where offset is located, skip  
> blocklens[i]==0 */
>  377              for (i=0; i<flat_file->count; i++) {
>  378                  ADIO_Offset dist;
>  379                  if (flat_file->blocklens[i] == 0) continue;
>  380                  dist = flat_file->indices[i] + flat_file- 
> >blocklens[i] - offset;
>  381                  /* frd_size is from offset to the end of block  
> i */
>  382                  if (dist == 0) {
>  383                          i++;
>  384                          offset   = flat_file->indices[i];
>  385                          frd_size = flat_file->blocklens[i];
>  386                          break;
>  387                  }
>  388                  if (dist > 0) {
>  389                      frd_size = dist;
>  390                      break;
>  391                  }
>  392              }
>  393              st_index = i;  /* starting index in flat_file- 
> >indices[] */
>  394              offset += disp +  
> (ADIO_Offset)n_filetypes*filetype_extent;
>  395          }
>
> I propose not to skip blocklens[i]==0
> diff -u ad_read_coll.c.old ad_read_coll.c
> --- ad_read_coll.c.old  2008-11-13 17:54:08.000000000 +0100
> +++ ad_read_coll.c      2010-07-27 14:45:11.000000000 +0200
> @@ -373,10 +373,9 @@
>             offset     -= (ADIO_Offset)n_filetypes * filetype_extent;
>               /* now offset is local to this extent */
> -            /* find the block where offset is located, skip  
> blocklens[i]==0 */
> +            /* find the block where offset is located */
>            for (i=0; i<flat_file->count; i++) {
>                ADIO_Offset dist;
> -                if (flat_file->blocklens[i] == 0) continue;
>                dist = flat_file->indices[i] + flat_file- 
> >blocklens[i] - offset;
>                /* frd_size is from offset to the end of block i */
>               if (dist == 0) {
>
>
> _______________________________________________
> mpich-discuss mailing list
> mpich-discuss at mcs.anl.gov
> https://lists.mcs.anl.gov/mailman/listinfo/mpich-discuss



More information about the mpich-discuss mailing list