Performance
bearophile via Digitalmars-d
digitalmars-d at puremagic.com
Fri May 30 07:22:38 PDT 2014
On Friday, 30 May 2014 at 13:35:59 UTC, Thomas wrote:
> I made the following performance test, which adds 10^9 Double’s
> on Linux with the latest dmd compiler in the Eclipse IDE and
> with the Gdc-Compiler also on Linux. Then the same test was
> done with C++ on Linux and with Scala in the Java ecosystem on
> Linux. All the testing was done on the same PC.
> The results for one addition are:
>
> D-DMD: 3.1 nanoseconds
> D-GDC: 3.8 nanoseconds
> C++: 1.0 nanoseconds
> Scala: 1.0 nanoseconds
Your code written in a more idiomatic way (I have commented out
new language features):
import std.stdio, std.datetime;
double plus(in uint nSteps) pure nothrow @safe /*@nogc*/ {
enum double p0 = 0.0045;
enum double p1 = 1.00045452-p0;
double tot = 1.346346;
auto b = true;
foreach (immutable i; 0 .. nSteps) {
final switch (b) {
case true:
tot += p0;
break;
case false:
tot += p1;
break;
}
b = !b;
}
return tot;
}
void run(alias func, string funcName)(in uint nSteps) {
StopWatch sw;
sw.start;
immutable result = func(nSteps);
sw.stop;
writeln(funcName);
writefln("Last: %f", result);
//writeln("Time per op: ", sw.peek.nsecs / real(nSteps));
writeln("Time per op: ", sw.peek.nsecs / cast(real)nSteps);
}
void main() {
run!(plus, "plus")(1_000_000_000U);
}
(But there is also a benchmark helper around).
ldmd2 -O -release -inline -noboundscheck test.d
Using LDC2 compiler, on my system the output is:
plus
Last: 500227252.496398
Time per op: 9.41424
Bye,
bearophile
More information about the Digitalmars-d
mailing list