__restrict, architecture intrinsics vs asm, consoles, and other stuff

Peter Alexander peter.alexander.au at gmail.com
Thu Sep 22 10:55:13 PDT 2011


On 22/09/11 1:38 AM, Walter Bright wrote:
> D doesn't have __restrict. I'm going to argue that it is unnecessary.
> AFAIK, __restrict is most used in writing vector operations. D, on the
> other hand, has a dedicated vector operation syntax:
>
> a[] += b[] * c;
>
> where a[] and b[] are required to not be overlapping, hence enabling
> parallelization of the operation.

It's used for vector stuff, but I wouldn't say mostly. Just about any 
performance intensive piece of code involving pointers can benefit from 
__restrict. I use it in a VM for example.


>> As an extension from that, why is there no hardware vector support
>> in the language? Surely a primitive vector4 type would be a sensible
>> thing to have?
>
> The language supports it now (see the aforementioned vector syntax),
> it's just that the vector code gen isn't done (currently it is just
> implemented using loops).

I don't see how this would be possible without intrinsics, or at least 
some form of language extension.

Would DMD just *always* put float[4] in XMM registers (assuming they are 
available)?

That doesn't seem like a good idea if you don't want to use it as a vector.


BTW, if you want to get a good idea of how game programmers use vector 
intrinsics on current hardware, there is a good blog post about it here: 
http://altdevblogaday.com/2011/01/31/vectiquette/


More information about the Digitalmars-d mailing list