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

Pascal Deveze Pascal.Deveze at bull.net
Wed Jul 28 04:35:48 CDT 2010


Hi Rob,

I recompiled with original mpich2 and all run well. There was a "little" 
problem in my modifications.
Thanks for your answer.

Pascal

Rob Ross a écrit :
> 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
>
> _______________________________________________
> 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