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));
}