RE: [ROOT] need info on low level stuff

From: Philippe Canal (pcanal@fnal.gov)
Date: Mon Dec 09 2002 - 21:10:36 MET


Hi,

1.a  There is so small overhead involved in each 'basket' of data.  So the
exact number of data points in each basket is probably more like 3992.

1.b  Correct

1.c  There will be one I/O operation to load entries 3993 to 7984 (whatever
number you request between 3993 and 7984).

1.d  Correct if you requested the tree to be compressed (this can be
disabled).

2.a  In this case the whole array 'd' is saved into one 'basket'.  The
number of such array in each basket depends of the size of dim.  The basket
is filled with as many entry as can fit into the 32000K.  If one of the
array is too big (i.e dim>3992), the basket will be made bigger to fit the
data.

2.b  Not without changing your class implementation.

Cheers,
Philippe

-----Original Message-----
From: owner-roottalk@pcroot.cern.ch
[mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of HP Wei
Sent: Monday, December 09, 2002 1:29 PM
To: roottalk@pcroot.cern.ch
Subject: [ROOT] need info on low level stuff


Hi,
  In order to squeeze the last bit of speed out of
  using ROOT, I need to understand the following points.
  Could any ROOT guru give me some clues ?
  Thanks.

  (1) Suppose I have a branch br whose buffer size
      is N=32000.
      The data type in this branch is double.

      (a) when calling br.GetEvent(0)
          is it true that in the buffer,
          we have 4000 (double) data points?
          From that buffer with a pool of 4000 numbers,
          ROOT then delivers the requested one into
          the linked variable (set up by SetBranchAddress()).

      (b) After (a),
          when we call br.GetEvent(3000),
          ROOT will NOT do disk I/O.
          Is this correct??

      (c) After (a),
          if we do br.GetEvent(4015),
          a disk I/O is certanly invoked.
          Does the memory contain the entries
          from 4015 to 8014 ??

      (d) in (a) and (c),
          the disk I/O process will involve
          one data de-compression
          for that block of data, right?

   (2) Suppose we have two branches:
       br1 :  Int_t       dim
       br2 :  Double_t  d[dim]

       Suppose the buffer size is N=32000.

       We first allocate enough space, by knowing dim,
       for the desired entry .
       Then, for example,
          br.GetEvent(0)
       will extract the 'whole' array into the allocated space.

       (a) how exactly is the process done?
           I mean, does ROOT divide the task into small ones,
           each of which involves only 32000 bytes.
           ROOT does one disk i/o for 32000 bytes and puts the data
                into the buffer,
                does the data decompression,
                and puts the resulting data into linked variable.
       (b) is there any low level stuff so that I can
           choose which part of the data in d[dim] is to
           be extracted and decompressed ???

--hp



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:23 MET