Предположительно, компилятор решил не использовать какие-либо инструкции AVX512 при автоматической векторизации. Или только в функциях, которые не вызываются в ваших тестовых примерах.
Включение AVX512 означаеткомпилятор может выбрать для использования инструкций AVX512, но это точно не так. Если это не так, то у него нет никаких инструкций, которые будут давать сбой на процессорах без AVX512.
Я не знаю, каковы параметры настройки по умолчанию для MSVC, но использование 512-битных векторов неЭто не всегда выгодно, особенно для программ, которые проводят большую часть своего времени в скалярном коде. (Запуск 512-битного UOP уменьшает максимальное турбо в течение следующих нескольких миллисекунд на текущих процессорах Skylake-X, которые do поддерживают AVX512.)
Для 256-битных векторов иногда полезно использоватьинструкция AVX512VL (кодирование EVEX), например, объединение нескольких логических операций с vpternlogd
или один из новых тасов, например vpermt2d
. Или EVEX-кодирование инструкции, доступной в AVX2 или более ранней версии, просто для использования большего количества регистров (ymm16..31) или для маскированных операций.
Или, возможно, ни один из ваших циклов не был автоматически векторизован, или, возможно, вы этого не сделалииспользуйте достаточно высокий уровень оптимизации, чтобы даже попытаться автоматически векторизовать.