otázka zní, kdo a do jaké míry SSE a třeba i AVX využije. Třeba Gočko vůbec SIMD neumí, i když Go používá skalární SSE instrukce. Dtto většina interpetrů. A céčko snad jen přes intrinsiky. (Rust netuším, ale tam věřím, že nějak SIMD dokážou utilizovat)
Takže co nám zbývá? Asi Fortran, možná Julia? Nebo specializované knihovny jako Numpy.
FYI rychlý test:
typedef struct vector4d { float v[4]; } vector4d;
void vectorAdd(vector4d *out, vector4d *s1, vector4d *s2)
{
for (int i = 0; i < 4; ++i) {
out->v[i] = s1->v[i] + s2->v[i];
}
}
x86_64:
vectorAdd(vector4d*, vector4d*, vector4d*):
movups xmm0, XMMWORD PTR [rsi]
movups xmm1, XMMWORD PTR [rdx]
addps xmm0, xmm1
movups XMMWORD PTR [rdi], xmm0
ret
aarch64:
vectorAdd(vector4d*, vector4d*, vector4d*):
ldr q31, [x1]
ldr q30, [x2]
fadd v30.4s, v31.4s, v30.4s
str q30, [x0]
ret
A moderní (už dlouho) kompilátory zvládají i maticové násobení docela slušně.