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