RE: [ROOT] Optimizing performance in Windows

From: Ed Oltman (eoltman@imago.com)
Date: Mon Feb 25 2002 - 17:34:02 MET


Hi Valeri,

I replied to Rene's message first.  Here are replies to questions
I did not anser:


I don't know if my problem is windows.  I assumed that issues like how much
memory a process gets and how page faulting works was OS dependant..

The analysis class has member variables that are the
branches of the ntuple.  The following code snippets should
demonstrate how I spin through the data.  All of my user code
is compiled with /O2 optimization.

 TNtuple *fntRaw
 Float_t fX;
 Float_t fY;
    .
    .

 fntRaw = (TNtuple *)fInFile->Get("nt");
 fntRaw->SetBranchAddress("x",&fX);
 fntRaw->SetBranchAddress("y",&fY);
    .
    .
    .
 for(Int_t i = 0;i<fntRaw->GetEntries(); i++)
 {
     fntRaw->GetEntry(i);
         .
         .
         .
 }

My branches are 1 word each (Float_t)


Ed

> -----Original Message-----
> From: Valeri Fine [mailto:fine@bnl.gov]
> Sent: Friday, February 22, 2002 6:54 PM
> To: Ed Oltman
> Cc: Roottalk@Pcroot. Cern. Ch
> Subject: Re: [ROOT] Optimizing performance in Windows
>
>
> Hello Ed,
>
>  Are you sure your problem is related to Windows ?
>
> >   I would like to know if anybody has any advice on performance
> > optimizing on Win2K - I am using qtRoot "version 3.02/06 25 January
> > 2002".  My application analyzed a root file which consists of a TNtuple.
>
> Even though the QtRoot version is for evaluation and was compiled with
> all "optimization off"
> (Usually it slow down the application by factor 2)
> this may not explain your troubles. You may want to download the regular
> version to compare the figures (or try your application with UNIX
> machine).
>
> To advice you what do you do and how more precisely.
>
> The piece of the code will do the job.
> For example are you using TNTuple::Draw method each time to loop over,
> are you using MakeClass methods and pre-compiled code etc ?
>
>   And the main issue how slow is your "slow"
>
> > The analysis requires spinning though the TNtuple multiple times.  The
> > TNtuple has 8-10 branches and can contain up to 10's of millions of
> > entries.  Note: I have a gigabyte of physical memory.  I have 2
> > questions:
>
>   How large are your branches (average) 1 word, 10 words, 100 words
>   My guess your file is less then your memory < 1Gb.
>
> > 1. When I first spin through the ntuple, it takes a long time - I can
> > see that my root process is doing lots of I/O - fine.  when I do a .ls I
> > see the input ntuple "in memory" that is, it shows up on a line starting
> > w/ OBJ:.
>
>   What you see is the TTree class object, That is small. It contains some
>   general description of TNtuple, not the TNtuple data.
>
> >  However my process memory is about the same size as it was
> > before I read in the TNtuple.  When I spin through the TNtuple
> > subsequent times, it takes just as long - I my process once again logs
> > lots of I/O.  How can I read in the ntuple in such a way that it lives
> > in memory?
>
>   I think there is no way to keep the all events in the memory.
>
>   Anyway it is not the QtRoot Windows version omission rather ROOT-wide
>   feature.
>
>   I hope Rene can explain this matter better,
>
>   On other hand when my experiment needs to hold the entire event in the
>   memory it applies TTable  /  TDataSet OO model rather TTree.
>  (see: http://root.cern.ch/root/htmldoc/TDataSet.html
>    http://root.cern.ch/root/htmldoc/TTable.html
>    and http://www.usatlas.bnl.gov/computing/software/db/Chep2000.pdf
>
>   One has full control over the number of events resided in the memory
>   simulatenously.
>
>   It does read the entire event into the memory at once and then may
>   loop over it as many time as one needs. I can provide the
> further information.
>
>
> > 2.  At some point, I generate an output TNtuple.  When I do this, my
> > root process starts page faulting like crazy but eventually the process
> > memory size creeps up to the required size.  [Note: when I spin through
> > the TNtuple, its quite a bit faster!]  How can I configure root to use
> > start out with a larger allocated memory so that I don't need to page
> > fault.
>
>   Are you using the ROOT TFile compression ?
>   I'd like to call your attention the compression  is expansive.
>   To compress / uncompress one needs two buffers in memory.
>   for real buffer and for the compressed buffer to be allocated
>   reallocated.
>
>   Again I hope Rene / Foms can explain things better.
>
>   Best regards, Valeri
>
> >
> > Thanks..
> >
> > Ed Oltman
> >
> >
>
>
>
>



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