Performance

dennis luehring via Digitalmars-d digitalmars-d at puremagic.com
Fri May 30 22:32:21 PDT 2014


faulty benchmark

-do not benchmark "format"

-use a dummy-var - just add(overflow is not a problem) your plus() 
results to it and return that in your main - preventing dead code 
optimization in any way

-introduce some sort of random-value into your plus() code, for example
use an random-generator or the int-casted pointer to program args as 
startup value

-do not benchmark anything without millions of loops - use the average 
as the result

anything else does not makes sense

Am 30.05.2014 15:35, schrieb Thomas:
> 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
>
>
> D-Source:
>
> import std.stdio;
> import std.datetime;
> import std.string;
> import core.time;
>
>
> void main() {
>     run!(plus)( 1000*1000*1000 );
> }
>
> class C {
> }
>
> string plus( int steps  )  {
>     double sum = 1.346346;
>     immutable double p0 = 0.0045;
>     immutable double p1 = 1.00045452-p0;
>     auto b = true;
>     for( int i=0; i<steps; i++){
>     	switch( b ){
> 	case true :
> 	  sum += p0;
> 	  break;
> 	default:
> 	  sum += p1;
> 	  break;
> 	}
> 	b = !b;	
>     }
>     return (format("%s  %f","plus\nLast: ", sum) );
> //  return ("plus\nLast: ", sum );
> }
>
>
> void run( alias func )( int steps )
>     if( is(typeof(func(steps)) == string)) {
>     auto begin = Clock.currStdTime();
>     string output = func( steps );
>     auto end =  Clock.currStdTime();
>     double nanotime = toNanos(end-begin)/steps;
>     writeln( output );
>     writeln( "Time per op: " , nanotime );
>     writeln( );
> }
>
> double toNanos( long hns ) { return hns*100.0; }
>
>
> Compiler settings for D:
>
> dmd -c
> -of.dub/build/application-release-nobounds-linux.posix-x86-dmd-DF74188E055ED2E8ADD9C152107A632F/first.o
> -release -inline -noboundscheck -O -w -version=Have_first
> -Isource source/perf/testperf.d
>
> gdc ./source/perf/testperf.d -frelease -o testperf
>
> So what is the problem ? Are the compiler switches wrong ? Or is
> D on the used compilers so slow ? Can you help me.
>
>
> Thomas
>
>



More information about the Digitalmars-d mailing list