Задача - перемножить 2 массива float'ов с помощью SSE.
В каждом массиве 4 элемента.
Код:
//перемножить a на b, xyz - исходные данные
float xyz[] = {0.1, 0.3 ,0.5};
alignas(16) float a[] = {116.0,500.0,200.0,1.0};
alignas(16) float b[] = {Y(xyz),(X(xyz)-Y(xyz)),Y(xyz)-Z(xyz),1};
__m128* a_simd = reinterpret_cast<__m128*>(a);
__m128* b_simd = reinterpret_cast<__m128*>(b);
size_t size = sizeof(float);
void *ptr = aligned_alloc(32,N * size);
float* c = reinterpret_cast<float*>(ptr);
size_t i = 0;
while (i<N/2){
_mm_store_ps(c, _mm_mul_ps(*a_simd, *b_simd));
i++;
a_simd++;
b_simd++;
c += 4;
}
Если вывести значения c, то они будут некорректными.