primitive vector types
Denis Koroskin
2korden at gmail.com
Thu Feb 19 21:55:16 PST 2009
On Fri, 20 Feb 2009 06:22:40 +0300, Andrei Alexandrescu <SeeWebsiteForEmail at erdani.org> wrote:
> Denis Koroskin wrote:
>> On Thu, 19 Feb 2009 23:05:34 +0300, Andrei Alexandrescu
>> <SeeWebsiteForEmail at erdani.org> wrote:
>>
>>> Denis Koroskin wrote:
>>>> On Thu, 19 Feb 2009 22:25:04 +0300, Mattias Holm
>>>> <hannibal.holm at gmail.com> wrote:
>>>>
>>>>> Since (SIMD) vectors are so common and every reasonabe system
>>>>> support them in one way or the other (and scalar emulation of this
>>>>> is rather simple), why not have support for this in D directly?
>>>>>
>>>>> Yes, the array operations are nice (and one of the main reasons for
>>>>> why I like D :) ), but have the problem that an array of floats must
>>>>> be aligned on float boundaries and not vector boundaries. In my mind
>>>>> vectors are a primitive data type that should be exposed by the
>>>>> programming language.
>>>>>
>>>>> Something OpenCL-like:
>>>>>
>>>>> float4 vec;
>>>>> vec.xyzw = {1.0,1.0, 1.0, 1.0}; // assignment
>>>>> vec.xyzw = vec.wyxz; // permutation
>>>>> vec[i] = 1.0; // indexing
>>>>>
>>>>> And then we can easily immagine some extra nice features to have
>>>>> with respect to operators:
>>>>>
>>>>> vec ^ vec2; // 3d cross product for float vectors, for int
>>>>> vectors xor
>>>>>
>>>>> Has this been discussed before?
>>>>>
>>>>> / Mattias
>>>>>
>>>> I don't see any reason why float4 can't be made a library type.
>>>
>>> Yah, I was thinking the same:
>>>
>>> struct float4
>>> {
>>> __align(16) float[4] data; // right syntax and value?
>>> alias data this;
>>> }
>>>
>>> This looks like something that should go into std.matrix pronto. It
>>> even has value semantics even though fixed arrays don't :o/.
>>>
>>>
>>> Andrei
>> That would be great. If float4 gets its way into D, I'll share our
>> blazing fast math code with community (most common operations on
>> vectors, matrices, quaternions etc). It is written entirely in SSE
>> (intrinsics, not asm; there is a problem with inlining asm in D, IIRC.
>> Can anyone elaborate on this?) and *very* fast. According to our
>> benchmarks, that's the best we get squeeze out of hardware.
>> I know LLVM have support for *very* wide range of intrinsics:
>> http://www.cs.ucla.edu/classes/spring08/cs259/llvm-2.2/include/llvm/Intrinsics.gen
>> Hopefully they will get into LDC (and DMD *hint* Walter *hint*) very
>> soon.
>>
>
> Put me down for that. What do I need to do?
>
> Andrei
Convince Walter to add float4 type and some intrinsics to DMD (I'll post a list of those we use later), LDC will follow, I believe.
There should be some type that would be treated specially. After all, intrinsics have function signatures and those should specify some concrete types.
More information about the Digitalmars-d
mailing list