Нашел на stackoverflow:
https://stackoverflow.com/questions/26494785/timin...
Вместо стандартного ключевого слова alignas в С до 11 версии и старом С++ можно использовать
__attribute__((aligned(16)))
в GCC, а в MSVC аналогичный decltype.
Решение (перемножение массивов a и b и сохранение результат в c):
float a[n];
float b[n];
alignas(16) float с[n] ; // массив хранения результата
__m128 x,y,result; // тип данных для хранения SSE регистра
result = _mm_setzero_ps(); // обнуляем регистр
for(int k = 0; k <= (n-4); k += 4) {
x = _mm_load_ps(&a[k]); // Загружаем 4 float'а
y = _mm_load_ps(&b[k]);
result = _mm_mul_ps(x,y); // умножаем
_mm_store_ps(&c[k],result); // сохраняем результат в c
}
int extra = n%4; // Если размер не кратен 4, то домножаем остаток
if(extra!=0) {
for(i = (n-extra); i < n; i++) {
c[i] = a[i] * b[i];
}
}