primitive vector types

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Thu Feb 19 19:22:40 PST 2009


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



More information about the Digitalmars-d mailing list