Hi Philippe, I was trying to get away with an unnamed macro, so that it could access the TFile f opened by the user at the command line. I can work around that. Rene, I'll send a URL with root file and actual macro. Thanks much, Peter On Mon, 9 Feb 2004, Philippe Canal wrote: > Hi Peter, > > I assume that you experience this performance variation in CINT. > If this the case, you can improve (and stabilize performance) by > compiling your code instead. This can trivially be done but > just using ACLiC. Instead of doing: > root [] .L mymacro.C > do > root [] .L mymacro.C+ > > Cheers, > Philippe > > PS. CINT's optimization mechanism has several limits which depend > (among other things) on the size of the code, the number of loops, > the usage (or not) of special interpreter feature (like support for > gPad). > > -----Original Message----- > From: owner-roottalk@pcroot.cern.ch > [mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Peter Shanahan > Sent: Sunday, February 08, 2004 2:30 PM > To: roottalk@pcroot.cern.ch > Subject: [ROOT] speed problem for unexecuted statements > > > Dear Rooters, > > I have a strange speed problem with an unnamed macro. I am > looping over the bins in a TH2C, getting the contents, and doing > various things based on them, mainly plotting other histograms. I find > that the execution is very slow, even for cases where each of the "if > (stat&...) shown below are false. (I've verified this with print > statements, watching how long it takes to get to the next bin in the > histogram.) > > I've removed the actual code inside the if{} blocks below for sake of > brevity, but I find that just removing a reference to gPad > (SetLogx(0 or 1)) within each of the if blocks speeds up the execution by > factors of 10. I need the gPad reference to set log/non-log depending on > the case. > > Does someone know: > > 1) why does the performance speed depend on the presence or absence > of statements that don't get executed because they are inside > false if statements? Is it some interpreter optimization that > tries to determine whether the state of gPad has changed? > > 2) is there something I can do about it? Many thanks, > > Peter Shanahan > > > { > > TH2C* ChanStatus=(TH2C*)f.Get("ChanStatus"); > > TCanvas* myCanvas=new TCanvas(); > gPad->SetLogx(0); > Bool_t doRandoms=false; > Bool_t doBadRes=true; > Bool_t doBadRms=true; > Bool_t doBadPed=true; > > for (Int_t ix=40; ix<=140; ix++) > { > Int_t jx=ix-1; > for (Int_t iy=1; iy<=40; iy++) > { > > Int_t jy=iy-1; > Char_t stat=ChanStatus->GetBinContent(ix,iy); > Int_t crate=jx/48+(jy/32)*4; > Int_t module=(jx%48)/4; > Int_t masterch=7-(jy%32)/4; > Int_t minderch=jx%4+(jy%4)*4; > cout << ix <<" "<<iy<<" "<<(Int_t) stat<<endl; > > if (stat&1 && doRandoms) > { > cout << "stat 1"<<endl; > } // if Random > > if (stat&2 && doBadRes) > { > cout << "stat 2"<<endl; > } // if badres > > if (stat&4 && doBadRms) > { > cout << "stat 4"<<endl; > } // if Rms > > if (stat&8 && doBadPed) > { > cout << "stat 8"<<endl; > } // if badped > > } // iy > > } // ix > > > delete myCanvas; > myCanvas=0; > > > } > > > ======================================================================= > Fermilab MS-220 Phone: (+1) 630 840 8378 > P.O. Box 500 Fax: (+1) 630 840 6039 > Batavia, IL 60510 USA >
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:05 MET