Instead of relying on a compiler to figure out when an abstract series of operations exactly matches the single operation of a SIMD instruction, I'd rather the language support operations that closer match SIMD instructions.
Instead of recognizing a loop that acts on each memory location in an array, a language that supports performing an operation on an array can much more easily compile to SIMD instructions.
The problem is that compilers are really bad at automatically adding SIMD instructions. We need better, smarter compilers that abstract this out.
I am finding the approach to intrinsics in .NET to be compelling. For example, a Vector<T> type is specifically handled by the JIT:
https://github.com/dotnet/runtime/blob/main/src/coreclr/jit/...
https://learn.microsoft.com/en-us/dotnet/api/system.numerics...
Instead of relying on a compiler to figure out when an abstract series of operations exactly matches the single operation of a SIMD instruction, I'd rather the language support operations that closer match SIMD instructions.
Instead of recognizing a loop that acts on each memory location in an array, a language that supports performing an operation on an array can much more easily compile to SIMD instructions.