RE: [ROOT] speed problem for unexecuted statements

From: Peter Shanahan (shanahan@fnal.gov)
Date: Mon Feb 09 2004 - 22:45:29 MET


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