Проблемы с вычислениями AVX: можно ли запускать коды avx2?

Я использую инструкции Intel SSE с хорошим приростом производительности, и недавно я попытался использовать инструкции AVX.

Проблема в том, что я могу скомпилировать свои инструкции avx, но не могу их запустить. Инструкции:

__m256i* avx1 = (__m256i*)vct1;
__m256i* avx2 = (__m256i*)vct2;
__m256i* avx3 = (__m256i*)vct3;

__m256i va0, va1, va2;

va2 = _mm256_and_si256(va0, va1);

Единственный способ собрать эти инструкции — использовать флаг -mavx2. Без этого флага я не могу скомпилировать код, и я получил эту ошибку:

"sseAND.cpp:124:33: error: ‘_mm256_and_si256’ was not declared in this scope
va2 = _mm256_and_si256(va0, va1);
"

Хорошо, после компиляции с -mavx2 и выполнения кода я получил следующее сообщение об ошибке:

"Illegal Instruction».

Бег /proc/cpuinfoЯ видел, что мой процессор Sandy Bridge поддерживает только инструкции AVX, а не AVX2.

Вопрос: что-то не так с моим кодом или с моими флагами gcc?

Могу ли я запустить инструкции AVX, которые я положил ниже в моем Sandybridge?

Спасибо за вашу помощь.

-1

Решение

Sandy Bridge поддерживает только AVX. Вам не повезет, если вы не купите процессор Haswell.

Bochs поддерживает эмуляцию AVX2 с v2.5, но это будет намного медленнее, вы можете только проверить правильность своего кода.

4

Другие решения

Других решений пока нет …