How to use Vector Extensions in an opBinary

HuskyNator HuskyNator at protonmail.ch
Sun Apr 17 11:16:25 UTC 2022


I recently found out there is [support for vector 
extensions](https://dlang.org/spec/simd.html)
But I have found I don't really understand how to use it, not 
even mentioning the more complex stuff. I couldn't find any good 
examples either.

I'm trying to figure out how to implement the following opBinary 
using vector extensions.
```dlang
alias MatType = typeof(this);

union{
   T[rows*columns] vec;
   T[rows][columns] mat;
}

MatType opBinary(string op, T)(const T right) const {
   MatType result = this;
   mixin("result.vec[] = this.vec[] " ~ op ~ " right;");
   return result;
}
```
Or alternatively, as I'm not sure which is more efficient/faster:
```dlang
MatType opBinary(string op, T)(const T right) const {
   MatType result;
   static foreach(i; 0..rows*columns)
     mixin("result.vec[i] = this.vec[i] " ~ op ~ " right;");
   return result;
}
```

But going off the documentation, I have no idea how to use vector 
extensions to achieve something like this.

As a small disclaimer; I don't know to what extent the compiler 
already automates these kind of operations, and mostly want to 
use this as a learning experience.

Kind regards, HN


More information about the Digitalmars-d-learn mailing list