Мне удалось преобразовать большую часть моего SIMD-кода в векторные расширения GCC. Однако я не нашел хорошего решения для проведения трансляции следующим образом
__m256 areg0 = _mm256_broadcast_ss(&a[i]);
я хочу сделать
__m256 argeg0 = a[i];
Если вы видите мой ответ на Умножение вектора на константу с использованием SSE Мне удалось заставить трансляции работать с другим регистром SIMD. Следующие работы:
__m256 x,y;
y = x + 3.14159f; // broadcast x + 3.14159
y = 3.14159f*x; // broadcast 3.14159*x
но это не сработает:
__m256 x;
x = 3.14159f; //should broadcast 3.14159 but does not work
Как я могу сделать это с помощью GCC?
typedef float float4 __attribute__((ext_vector_type(8)));
. Однако Clang не разрешает широковещательные передачи с регистром, использующим векторные расширения GCC, поэтому я не уверен, что он полностью совместим с GCC. - person Z boson   schedule 12.02.2014