Re: [ROOT] How to accelerate root output?

From: Rene Brun (Rene.Brun@cern.ch)
Date: Thu Nov 01 2001 - 08:29:50 MET


Hi Victor,

Could you send me evidence that using the option "+" introduces a factor two
penalty in I/O ? What we have seen in many applications is typically 5 to 15
per cent. The new system may even be faster than the old one if you have a good
class layout. I see so many cases where people mix ints with floats, doubles,
etc !

Rene Brun

Victor Perevoztchikov wrote:
> 
> Hi Thomas,
> 
> > > I'm writing data like in the following example (using root 3.01/06, with
> > > a '+' in the pragma statement for MyClass):
> 
> when you use a '+' you use not compiled code for the Streamer.
> By my tests, for complicated classes,  it is about twice as slower then compiled one.
> 
> But "+" provides you an automatic schema evolution.
> If you  very aware about the speed and not worry about schema evolution at all,
> you should not use "+". But then , if you will deside to change your class
> you will have a lot of problems.
> 
> This slowdown is a payment for the schema evolution. You should choose
> what is more important for your application.
> But I must say, that often user supposes that his application is temporary,
> but at the end it is used years and years.
> 
> Victor
> 
> Rene Brun wrote:
> >
> > Hi Thomas,
> >
> > Difficult to come with a dignostic without looking into your system.
> > I have no idea of what you mean by "rather slow".
> > >From your class description, I conclude that you have about 20 Kbytes per event.
> > One million entries will make a file of about 20 GBytes.
> > Could you send me:
> >   - the result of tree.Print() after filling your Tree.
> >   - if possible your class with a small test that is slow.
> >
> > Rene Brun
> >
> > Thomas Bretz wrote:
> > >
> > > Hello rooters,
> > >
> > > I'm writing data like in the following example (using root 3.01/06, with
> > > a '+' in the pragma statement for MyClass):
> > >
> > > {
> > > MyClass *cls = new MyClass;
> > >
> > > TFile file("name", "RECREATE", "title", 0);
> > > TTree tree("name, "title");
> > > tree.Branch("MyClass", "MyClass", &cls, 320000, 0);
> > >
> > > for (int i=0; i<1e6; i++)
> > > {
> > >    FillDataIntoMyClass(&cls);
> > >    tree.Fill();
> > > }
> > > file.Write();
> > > delete cls;
> > > }
> > >
> > > Because this is rather slow, I used gprof to find out where the time is
> > > spend and if I trust its output, only ~15% of all the time (CPU time,
> > > which should not include I/O) is spend in my part of the program. This
> > > means about 85% of the CPU-time is spent in root (I/O). In this example
> > > speed is really critical. Is there a way to accelerate the root output?
> > >
> > > I don't think that it is a question of hardware limitation because the
> > > machine and disks are really powerfull.
> > >
> > > Rem: MyClass contains four arrays. Two about 1kB, and two around 8kB.
> > > (around 18kB in total)
> > >
> > > Thanks in advance,
> > > Thomas.
> 
> --
> Victor M. Perevoztchikov   perev@bnl.gov  perev@vxcern.cern.ch
> Brookhaven National Laboratory MS 510A PO Box 5000 Upton NY 11973-5000
> tel office : 631-344-7894; fax 631-344-4206; home 631-345-2690



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:05 MET