D performance in Julia microbenchmarks
Carl Vogel via Digitalmars-d
digitalmars-d at puremagic.com
Wed May 18 12:00:06 PDT 2016
Hi -- first-time poster, long-time lurker...
On its homepage, the Julia langauge (http://julialang.org)
advertises some microbenchmark results to show how competitive it
is with C, along with a number of other languages (go, python,
JS, R, etc.). These should of course be taken with a big grain of
salt, for the usual reasons (the implementations differ across
languages, even at the algorithmic level, whether these are
representative of real-life perf, not really rigorously timed,
etc.)
I implemented these in D and found it did really well across all
of them (no great surprise, but good to see). The results are at
the bottom, in absolute time and time relative to C. (note the
infinite relative times are b/c the cc -O3 basically optimized
the computation away)
The github code is here: https://github.com/carljv/julia-perf
I think it'd be good advertising to make a PR with these to the
Julia repo and see if they'll put them on the site. A lot of
people we drawn to Julia because it was making promises similar
to D -- C-like performance in an easy-to-use language (in
Julia's case, dynamic) with good metaprogramming (in Julia's
case, AST macros).
But I'd be thrilled if anyone---esp. those with D
science/numerics knowledge---would be willing to take a look.
E.g., I'm rolling my own matrix operations wrapping blas
functions because I couldn't easily find the functionality in
scid, mir, etc., but feel like I'm missing something. And I think
while showing easy C ffi is great, showing that you can do this
easily with a library would be good too.
I'm also a bit of a D novice, so may be leaving some performance
on the table. (Note though that I am trying to keep the code
roughly inline with the Julia implementation and not using, like
ASM or uglier perf hacks. It'd be nice to show off how D gives
you high-level constructs with speed, not just writing the C
implementation in D.)
If you want to replicate these, the README on the repo should be
relatively complete/correct about setting up and running.
Please let me know if you're interested in this and have any
questions or issues.
FIB:
dlang/ldc2 0.01ms infx
go 0.05ms infx
julia 0.06ms infx
python 3.56ms infx
MANDEL:
dlang/ldc2 0.13ms 1.22x
go 0.19ms 1.84x
julia 0.20ms 1.88x
python 3.97ms 38.19x
PARSE_INT:
go 0.15ms 1.06x
julia 0.18ms 1.23x
dlang/ldc2 0.18ms 1.25x
python 2.68ms 18.75x
PI_SUM:
dlang/ldc2 2.91ms 0.40x
julia 7.27ms 0.99x
go 8.40ms 1.14x
python 819.50ms 111.10x
QUICKSORT:
dlang/ldc2 0.21ms 0.55x
julia 0.37ms 0.96x
go 0.48ms 1.25x
python 14.53ms 37.73x
RAND_MAT_MUL:
dlang/ldc2 29.65ms 0.71x
julia 49.88ms 1.19x
go 68.84ms 1.65x
python 71.95ms 1.72x
RAND_MAT_STAT:
dlang/ldc2 8.11ms 1.26x
julia 21.99ms 3.40x
go 22.00ms 3.40x
python 118.10ms 18.27x
More information about the Digitalmars-d
mailing list