RE: [ROOT] execution speed of compiled programs using ROOT

From: Valeri Fine (fine@bnl.gov)
Date: Thu Aug 14 2003 - 00:28:34 MEST


Ooo I didn't pay an attention it is win32gdk-brand. I have no idea how
GDK manages threads, and whether it is free of some sort of idle-loops.

I am sure neither win32 nor Qt-edition (http://root.bnl.gov) has any
sort of idle-loop to consume the time).

Anyway first check the simple cause. 
My first hypothesis remains the same it is optimization.

           Valeri

> 
> 
> Hello I don't think any second thread is involved here.
> I would have suspected some sort of the compile-time optimization
here.
> 
> I believe compiler may have figured out what is final value of "r"
with
> no real loop implementation in the binary code.
> 
>   for(long int i=0; i<100000000; i++) {
>      r += 0.5;
>    }
> 
> I mean the method above is not correct to measure the performance
> One should take care to break the possible optimization first.
> 
>      Valeri
> 
> >
> > Hi Thomas,
> >
> > I can indeed reproduce the same slowdown by a factor of 2.  I
suspect
> that
> > this is due to the multi-thread nature of the ROOT implementation on
> > Windows.  (I.e. the other thread are probably being run).  We will
> > check further.
> >
> > Cheers,
> > Philippe.
> >
> > -----Original Message-----
> > From: owner-roottalk@pcroot.cern.ch
> > [mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Thomas Nisius
> > Sent: Friday, August 08, 2003 7:28 AM
> > To: roottalk@pcroot.cern.ch
> > Subject: [ROOT] execution speed of compiled programs using ROOT
> >
> >
> > Hi,
> >
> > when I compile a program that include some root objects, execution
> speed
> > drops significantly.
> > please see the following example:
> >
> > #include <time.h>
> > #include <iostream>
> > using namespace std;
> >
> > #include <TH2D.h>
> > #define USE_ROOT
> >
> > int main(int argc, char* argv[]) {
> >
> > #ifdef USE_ROOT
> >   TH2D *h = new TH2D("test","test",64,0,1,64,0,1);
> >   h->FillRandom("gaus",1000);
> > #endif
> >
> >   double r=0;
> >   double time = clock(); // save the clock
> >   for(long int i=0; i<100000000; i++) {
> >     r += 0.5;
> >   }
> >   cout << r << endl;
> >   cout << "Duration: " << clock() - time << endl;
> >   return 0;
> > }
> >
> > if in this example 'USE_ROOT' is defined the duration is nearly
twice
> as
> > long as without it.
> > (note, that only the execution of the loop is taken into account,
not
> the
> > histo filling)
> >
> > I'm using Root 3.05/07 (win32gdk-version) on WinXP & Win2000
> > Compiler: MSVC++ 6
> > I link libCore.lib and libHist.lib to my Project
> >
> > Any suggestions?
> >
> > Kind Regards
> > Thomas Nisius
> >
>
________________________________________________________________________
> __
> > Die sicherste Form der Kommunikation: E-Mails verschluesseln,
> Spam-Filter,
> > Adressverifizierung, digitale Unterschrift: http://freemail.web.de



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:14 MET