core.simd woes
jerro
a at a.com
Tue Oct 2 13:52:41 PDT 2012
On Tuesday, 2 October 2012 at 13:36:37 UTC, Manu wrote:
> On 2 October 2012 13:49, jerro <a at a.com> wrote:
>
>>
>> I don't think it is possible to think of all usages of this,
>> but for every
>> simd instruction there are valid usages. At least for writing
>> pfft, I found
>> shuffling two vectors very useful. For, example, I needed a
>> function that
>> takes a small, square, power of two number of elements stored
>> in vectors
>> and bit-reverses them - it rearanges them so that you can
>> calculate the new
>> index of each element by reversing bits of the old index (for
>> 16 elements
>> using 4 element vectors this can actually be done using
>> std.simd.transpose,
>> but for AVX it was more efficient to make this function work
>> on 64
>> elements). There are other places in pfft where I need to
>> select elements
>> from two vectors (for example, here
>> https://github.com/jerro/pfft/**
>> blob/sine-transform/pfft/avx_**float.d#L141<https://github.com/jerro/pfft/blob/sine-transform/pfft/avx_float.d#L141>is
>> the platform specific code for AVX).
>>
>> I don't think this are the kind of things that should be
>> implemented in
>> std.simd. If you wanted to implement all such operations (for
>> example bit
>> reversing a small array) that somebody may find useful at some
>> time,
>> std.simd would need to be huge, and most of it would never be
>> used.
>
>
> I was referring purely to your 2-vector swizzle idea (or useful
> high-level
> ideas in general). Not to hyper-context-specific functions :P
My point was that those context specific functions can be
implemented using a 2 vector swizzle. LLVM, for example, actually
provides access to most vector shuffling instruction through
"shufflevector", which is basically a 2 vector swizzle.
More information about the Digitalmars-d
mailing list