Release D 2.077.0

Dmitry Olshansky dmitry.olsh at gmail.com
Fri Nov 3 20:20:13 UTC 2017


On Friday, 3 November 2017 at 19:46:58 UTC, Walter Bright wrote:
> On 11/3/2017 3:02 AM, Mike Parker wrote:
>> For clarity, where the changeling says that GDC & LDC use 
>> auto-vectorization, that's actually happening with the array 
>> operations and core.simd is not required, correct?
>
> I think that GDC and LDC do do auto-vectorization, but I 
> haven't verified it myself.
>
> Auto-vectorization is a fundamentally bizarre feature. It takes 
> low level code and reverse-engineers it back into a higher 
> level construct, and then proceeds to generate code for that 
> higher level construct.
>
> Everything else a compiler does is start from a high level 
> construct and then generate low level code.
>
> The trouble with AV is whether it succeeds or not depends on 
> peculiarities (and I mean peculiarities) of the particular 
> vector instruction set target. It can decided to not vectorize 
> based on seemingly trivial and innocuous changes to the loop.

I’ll share an anecdotal experience from a time I worked in 
reasearch lab of a well known tech giant. 2 senior researchers 
spent literally 2 weeks trying to coerce compiler into 
vectorizing an inner loop of a non-trivial matrix algorithm.

The only diagnostic from compiler was “loop form is not correct”. 
Thankfully it did tell them it failed, else they’d have to 
disassemble it each time.

I think eventually they either rewritten it to fit heuristic or 
just carried on with explicit intrinsics.


> What's needed is a language feature that is straightforwardly 
> vectorizable. That would be D's array operations.

Sadly array ops would be insufficient for said problem. It wasn’t 
a direct element wise expression.




More information about the Digitalmars-d-announce mailing list