У меня проблема с выравниванием при использовании регистров ymm с некоторыми фрагментами кода, которые мне кажутся прекрасными. Вот минимальный рабочий пример:
#include <iostream> 
#include <immintrin.h>
inline void ones(float *a)
{
     __m256 out_aligned = _mm256_set1_ps(1.0f);
     _mm256_store_ps(a,out_aligned);
}
int main()
{
     size_t ss = 8;
     float *a = new float[ss];
     ones(a);
     delete [] a;
     std::cout << "All Good!" << std::endl;
     return 0;
}
Конечно, sizeof(float) есть 4 в моей архитектуре (Intel (R) Xeon (R) CPU E5-2650 v2 @2.60 ГГц), и я компилирую с помощью gcc с использованием флагов -O3 -march=native. Конечно, ошибка уходит с непринятым доступом к памяти, то есть указывая _mm256_storeu_ps. У меня также нет этой проблемы на регистрах xmm, т.е.
inline void ones_sse(float *a)
{
     __m128 out_aligned = _mm_set1_ps(1.0f);
     _mm_store_ps(a,out_aligned);
}
Я делаю что-нибудь глупое? для чего это необходимо?
