Old problem with performance
Weed
resume755 at mail.ru
Sat Feb 7 23:26:37 PST 2009
(Has started here:
http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=81359)
To me still does not give rest performance of classes (in comparison
with C++ or with D structs)
I still think that it is a serious problem.
Colleagues from our national D forum have asked to show it and I have
written simple examples on D. I want to share with you too them.
On my computer the code with structure (i.e. object by value) runs in 6
times faster than a code with a class:
$ time ./struct
real 0m8.515s
user 0m7.796s
sys 0m0.016s
$ time ./class
real 0m52.185s
user 0m40.543s
sys 0m0.076s
The code on C++ is also approximately in 6 times faster a code with
classes on D. (I do not give an example on C++ because classes on C++
work just as structures in D.)
I think with it it is necessary to do something.
Examples code:
//========================
struct C {
int i;
real[5] unused; // to prevent returning this object in registers
C opAdd( C src ) {
C ret;
ret.i = i + src.i;
return ret;
}
}
int main() {
C c1;
C c2;
// initialise i by "random" value to prevent compile-time calculation
c1.i = cast(int)&c1;
c2.i = 0;
for(int i = 0; i < 50_000_000; ++i)
c2 = c1 + c1 + c1;
return c2.i;
}
//========================
class C {
int i;
real[5] unused; // to prevent returning this object in registers
C opAdd( C src ) {
auto ret = new C;
ret.i = i + src.i;
return ret;
}
}
int main() {
auto c1 = new C;
auto c2 = new C;
// initialise i by "random" value to prevent compile-time calculation
c1.i = cast(int)&c1;
c2.i = 0;
for(int i = 0; i < 50_000_000; ++i)
c2 = c1 + c1 + c1;
return c2.i;
}
//========================
More information about the Digitalmars-d
mailing list