Я использую инструкции 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?
Спасибо за вашу помощь.
Sandy Bridge поддерживает только AVX. Вам не повезет, если вы не купите процессор Haswell.
Bochs поддерживает эмуляцию AVX2 с v2.5, но это будет намного медленнее, вы можете только проверить правильность своего кода.
Других решений пока нет …