digitalmars.D.learn - initialize float4 (core.simd)
- Bogdan (28/28) Sep 21 2019 I'm trying to understand how to use the `core.simd`
 - Bogdan (19/19) Sep 21 2019 Here's a cleaned up version:
 - Bogdan (2/12) Sep 21 2019 Not sure if it's correct though.
 - Stefan Koch (7/19) Sep 21 2019 float4 x;
 - Bogdan (5/26) Oct 06 2019 Thank you! That also seems to be working.
 - NaN (3/31) Oct 06 2019 You should probably have a look at this...
 - Bogdan (4/6) Oct 06 2019 Thanks, that looks quite useful.
 
I'm trying to understand how to use the `core.simd` 
functionality, and I'm having trouble initializing a float4 
vector.
Here's my example code:
```
import std.stdio;
import core.simd;
void main()
{
   float[4] values = [1.0f, 2.0f, 3.0f, 4.0f];
   float delta = 15.0f;
   writeln(doSimd(values, delta));
}
float[4] doSimd(float[4] values, float delta)
{
   float4 v_delta = delta;
   float4 v_values = values;
   // ... do SIMD ...
   return [v_delta[0], v_delta[0],v_delta[0],v_delta[0]];
}
```
Compilation is failing with the following error:
```
source/app.d(16,21): Error: cannot implicitly convert expression 
values of type float[4] to __vector(float[4])
dmd failed with exit code 1.
```
How do you initialize a float4 with some useful data?
 Sep 21 2019
Here's a cleaned up version:
```
import std.stdio;
import core.simd;
void main()
{
   float[4] values = [1.0f, 2.0f, 3.0f, 4.0f];
   float delta = 15.0f;
   writeln(doSimd(values, delta));
}
float[4] doSimd(float[4] values, float delta)
{
   float4 v_delta = delta;
   float4 v_values = values;
   v_values = __simd(XMM.ADDPS, v_values, v_delta);
   return [v_values[0], v_values[1],v_values[2],v_values[3]];
}
```
The problem is with initializing v_values.
 Sep 21 2019
Well, this seems to be working:
 float[4] doSimd(float[4] values, float delta)
 {
   float4 v_delta = delta;
 
   float4 v_values = __simd(XMM.ADDPS,
                            __simd(XMM.LODAPS, values[0]),
                            v_delta);
 
   return [v_values[0], v_values[1],v_values[2],v_values[3]];
 }
Not sure if it's correct though.
 Sep 21 2019
On Saturday, 21 September 2019 at 13:42:09 UTC, Bogdan wrote:Well, this seems to be working:float4 x; float x1, x2, x3, x4; x[0] = x1; x[1] = x2; x[2] = x3; x[3] = x4;float[4] doSimd(float[4] values, float delta) { float4 v_delta = delta; float4 v_values = __simd(XMM.ADDPS, __simd(XMM.LODAPS, values[0]), v_delta); return [v_values[0], v_values[1],v_values[2],v_values[3]]; }Not sure if it's correct though.
 Sep 21 2019
On Saturday, 21 September 2019 at 14:31:15 UTC, Stefan Koch wrote:On Saturday, 21 September 2019 at 13:42:09 UTC, Bogdan wrote:Thank you! That also seems to be working. Turns out that using this method for drawing a rectangle is about twice as slow than a naive implementation, so I'm almost certainly doing something silly/wrong. :)Well, this seems to be working:float4 x; float x1, x2, x3, x4; x[0] = x1; x[1] = x2; x[2] = x3; x[3] = x4;float[4] doSimd(float[4] values, float delta) { float4 v_delta = delta; float4 v_values = __simd(XMM.ADDPS, __simd(XMM.LODAPS, values[0]), v_delta); return [v_values[0], v_values[1],v_values[2],v_values[3]]; }Not sure if it's correct though.
 Oct 06 2019
On Saturday, 21 September 2019 at 12:50:46 UTC, Bogdan wrote:
 I'm trying to understand how to use the `core.simd` 
 functionality, and I'm having trouble initializing a float4 
 vector.
 Here's my example code:
 ```
 import std.stdio;
 import core.simd;
 void main()
 {
   float[4] values = [1.0f, 2.0f, 3.0f, 4.0f];
   float delta = 15.0f;
   writeln(doSimd(values, delta));
 }
 float[4] doSimd(float[4] values, float delta)
 {
   float4 v_delta = delta;
   float4 v_values = values;
   // ... do SIMD ...
   return [v_delta[0], v_delta[0],v_delta[0],v_delta[0]];
 }
 ```
 Compilation is failing with the following error:
 ```
 source/app.d(16,21): Error: cannot implicitly convert 
 expression values of type float[4] to __vector(float[4])
 dmd failed with exit code 1.
 ```
 How do you initialize a float4 with some useful data?
You should probably have a look at this...
https://github.com/AuburnSounds/intel-intrinsics
 Oct 06 2019
On Sunday, 6 October 2019 at 11:53:29 UTC, NaN wrote:You should probably have a look at this... https://github.com/AuburnSounds/intel-intrinsicsThanks, that looks quite useful. Also, it seems that I need to use either LDC or GDC instead of DMD. :)
 Oct 06 2019








 
 
 
 Bogdan <olar.bogdan.dev gmail.com> 