Использование инструкций процессора AVX: низкая производительность без «/ arch: AVX»

Мой код на C ++ использует SSE, и теперь я хочу улучшить его для поддержки AVX, когда он будет доступен. Поэтому я определяю, когда доступен AVX, и вызываю функцию, которая использует команды AVX. Я использую Win7 SP1 + VS2010 SP1 и процессор с AVX.

Чтобы использовать AVX, необходимо включить это:

#include "immintrin.h"

и тогда вы можете использовать встроенные функции AVX, такие как_mm256_mul_ps, _mm256_add_ps и т.д. Проблема в том, что по умолчанию VS2010 создает код, который работает очень медленно и отображает предупреждение:

предупреждение C4752: обнаружены расширенные векторные расширения Intel (R); рассмотрите возможность использования / arch: AVX

Кажется, VS2010 на самом деле не использует инструкции AVX, а эмулирует их. я добавил/arch:AVX к настройкам компилятора и получил хорошие результаты. Но эта опция говорит компилятору использовать команды AVX везде, где это возможно. Так что мой код может зависнуть на процессоре, который не поддерживает AVX!

Таким образом, вопрос заключается в том, как заставить компилятор VS2010 генерировать код AVX, но только когда я указываю встроенные функции AVX напрямую. Для SSE это работает, я просто использую встроенные функции SSE и создаю код SSE без каких-либо опций компилятора, таких как/arch:SSE, Но для AVX это не работает по некоторым причинам.

Ответы на вопрос(2)

Ваш ответ на вопрос