A few notes on choosing between Go and D for a quick project
via Digitalmars-d
digitalmars-d at puremagic.com
Sun Mar 22 01:27:07 PDT 2015
On Sunday, 22 March 2015 at 03:43:33 UTC, Walter Bright wrote:
> I.e. there isn't low level C code that effectively uses SIMD
> vector registers. You have to use the auto-vectorizer, which
> tries to reconstruct high level operations out of C low level
> code, then recompile.
I don't think low level hardware registers qualify as "high level
constructs" which is the term you used. Besides, all major C
compilers ship with builtin vector types and support for standard
hardware vendor SIMD intrinsics. But even if you dismiss that,
then even less sophisticated contemporary compiler is capable of
using SIMD for carefully manually unrolled expressions. Still,
even without explicit simd instructions the superscalar nature of
desktop CPUs require you to break dependencies to avoid bubbles
in the pipeline.
So in order to optimize the filling of an array with the
fibonacci sequence a plain high level library generator is
insufficient. You also need to utilize the closed formula for
fib(x) so that you can generate sequences in parallel, e.g.
compute the sequence fib(0),fib(1)… in parallel with fib(N),
fib(N+1) etc.
Without having the closed formula to obtain fib(N-2) and fib(N-1)
a regular optimizer will simply not be able to break the
dependencies as effectively as a handwritten low level loop.
More information about the Digitalmars-d
mailing list