SIMD support...

Walter Bright newshound2 at digitalmars.com
Thu Jan 12 12:37:30 PST 2012


On 1/12/2012 12:13 PM, Norbert Nemec wrote:
> A type v128 would not provide the necessary information for the compiler to
> produce the correct mov statements.
>
> There definitely must be a float4 and a double2 type to express these semantics.
> For integers, I am not quite sure. I believe that integer SSE commands can be
> mixed more so a single 128bit type would be sufficient.
>
> Considering these hardware details of the SSE architecture alone, I fear that
> portable low-level support for SIMD is very hard to achieve. If you want to
> offer access to the raw power of each architecture, it might be simpler to have
> machine-specific language extensions for SIMD and leave the portability for a
> wrapper library with a common front-end and various back-ends for the different
> architectures.

That's what we're doing for D's SIMD support.

Although the syntax will support any vector type, the semantics will constrain 
it to what works for the target hardware. Manu has convinced me that to emulate 
vector types that don't have hardware support is a very bad idea, because then 
naive users will assume they'll be getting hardware performance, but in reality 
will have truly execrable performance.

Note that gcc does do the emulation for unsupported ops (like some of the 
multiplies). Take a gander at the code generated - instead of one instruction, 
it's a page of them. I think this will be an unwelcome surprise to the 
performance minded vector programmer.

Note that explicit emulation will be possible, using D's general purpose vector 
syntax:

     a[] = b[] + c[];


More information about the Digitalmars-d mailing list