Hello I made the simple experiments
1. Compile the code in question with Optimization
1.1. #define USE_ROOT
1.2. #undef USE_ROOT
2. Compile the code in question with NO Optimization
2.1. #define USE_ROOT
2.2. #undef USE_ROOT
3. Change the loop as follows:
for(long int i=0; i<100000000; i++) {
r += 0.5;
y = sin(r);
}
Compile the code in question with NO Optimization
3.1. #define USE_ROOT
3.2. #undef USE_ROOT
4. The code from the point 3 but with Optimization
4.1. #define USE_ROOT
4.2. #undef USE_ROOT
5. remove any ROOT call and replace it with
double y = sin(3.5);
for (int j=0; j < 10;j++) {
y = sin(y);
}
no optimization
------------------------------
Duration
1.1 340
1.2 340
2.1 921
2.2 2643 (!!!)
3.1 17265
3.2 19137
4.1 340
4.2 340
5.1 2673
5.2 2633
------------------------------
In other words
when "#define USE_ROOT" is ON the code is FASTER by factor 3 !!!
(see 2.1 and 2.2 )
At least my result does contradict YOUR observation.
I don't go further because the code in question is not good to jump
to any kind of the conclusions.
Have a fun.
Valeri
> -----Original Message-----
> From: owner-roottalk@pcroot.cern.ch
[mailto:owner-roottalk@pcroot.cern.ch]
> On Behalf Of Valeri Fine
> Sent: Thursday, August 14, 2003 12:03 AM
> To: 'Philippe Canal'; 'Thomas Nisius'; roottalk@pcroot.cern.ch
> Subject: RE: [ROOT] execution speed of compiled programs using ROOT
>
>
>
> 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