math.log() benchmark of first 1 billion int using std.parallelism
    Daniel Kozak via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Tue Dec 23 05:26:24 PST 2014
    
    
  
On Tuesday, 23 December 2014 at 12:31:47 UTC, Iov Gherman wrote:
>
>> Btw. I just noticed small issue with D vs. java, you start 
>> messure in D before allocation, but in case of Java after 
>> allocation
>
> Here is the java result for parallel processing after moving 
> the start time as the first line in main. Still best result:
>
> 4 secs, 50 ms average
Java:
Exec time: 6 secs, 421 ms
LDC (-O3 -release -mcpu=native -singleobj -inline 
-boundscheck=off)
time: 5 secs, 321 ms, 877 μs, and 2 hnsecs
GDC(-O3 -frelease -march=native -finline -fno-bounds-check)
time: 5 secs, 237 ms, 453 μs, and 7 hnsecs
DMD(-O -release -inline -noboundscheck)
time: 5 secs, 107 ms, 931 μs, and 3 hnsecs
So all d compilers beat Java in my case:
but I have made some change in D version:
import std.parallelism, std.math, std.stdio, std.datetime;
import core.memory;
enum XMS = 3*1024*1024*1024; //3GB
version(GNU)
{
	real mylog(double x) pure nothrow
	{
		double result;
		double y = LN2;
		asm
		{
			"fldl   %2\n"
			"fldl   %1\n"
			"fyl2x\n"
			: "=t" (result) : "m" (x), "m" (y);
		}
		
		return result;
	}
}
else
{
	real mylog(double x) pure nothrow
	{
		return yl2x(x, LN2);
	}
}
void main() {
	GC.reserve(XMS);
	auto t1 = Clock.currTime();
	auto logs = new double[1_000_000_000];	
	foreach(i, ref elem; taskPool.parallel(logs, 200)) {
		elem = mylog(i + 1.0);
	}
	auto t2 = Clock.currTime();
	writeln("time: ", (t2 - t1));	
}
    
    
More information about the Digitalmars-d-learn
mailing list