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