Вероятно, ваш ЦП вообще не поддерживает AVX512.
Только ЦП этого и более новых поколений support AVX-512:
- Сервер / рабочая станция: Skylake-SP (Xeon Scalable Performance) и более поздних версий,
Skylake-X настольный компьютер / рабочая станция высокого класса.
- Клиент: Ice Lake и более поздние версии, например i5-1035G4 и Rocket Lake, например i5-11600.
(Также очень ограниченный выпуск чип для ноутбука Cannon Lake)
У этих версий Celeron / Pentium есть AVX2, но нет AVX-512 1.
- Вычислительные карты Xeon Phi, 2-го поколения и новее (Knight's Landing).
Параметры компилятора
Используйте clang или g++ -O3 -march=native
, чтобы включить все, что поддерживает ваш процессор.
Если вы получаете ошибки компиляции (например, необъявленную функцию _mm512_loadu_ps
), ваш ЦП не поддерживает AVX512, поэтому g ++ не поддерживает его, поэтому immintrin.h
не будет определять эту встроенную функцию.
(Или другая возможная ошибка - это ошибка при встраивании встроенной функции, которую не допускают целевые параметры.)
Используйте отдельные параметры -mavx512f
и -mtune=
только в том случае, если вы хотите создать двоичный файл для других процессоров, а не только для машины, на которой вы компилируете.
По теме: Как проверить инструкции AVX-512 с o поддерживаемое оборудование?
MSVC и ICC do позволяют использовать встроенные функции, не сообщая компилятору, что цель поддерживает их, поэтому этот метод проверки вашего кода на соответствие ЦП не работает с этими компиляторами. Они с радостью позволят вам скомпилировать код, который не будет работать на текущем процессоре. (Поскольку MSVC предполагает, что вы собираетесь выполнять обнаружение и диспетчеризацию ЦП во время выполнения, а не распространять исходный код для всех, чтобы оптимизировать его для своей собственной машины.)
Подробнее о процессорах без AVX-512
название процессора / значение номера Intel
AMD еще не выпустила процессоров AVX-512 (слухи указывают на Zen4), да и в более старых версиях Intel он также отсутствует.
Skylake-client не имеет AVX-512, только Skylake-server .
Гибридные (big.LITTLE) процессоры Intel Alder Lake не будет AVX-512, только AVX2, даже на больших ядрах.
ЦП с низким энергопотреблением, такие как Silvermont / Tremont, даже не имеют AVX1.
Также обратите внимание, что есть несколько расширений для AVX-512, например AVX-512VPOPCNTDQ, который вводит инструкции SIMD для подсчета установленных битов в каждом элементе SIMD. Проверьте таблицу Википедии ЦП с AVX-512 strong > чтобы узнать, какой процессор что имеет. AVX-512F - это основа, а AVX-512VL позволяет использовать новые крутые инструкции для 128- и 256-битных векторов.
Сноска 1: Pentium / Celeron версии старых процессоров Intel даже не имеют AVX, только SSE4.2. (Также отсутствует BMI1 / 2, потому что они отключили декодирование префиксов VEX).
person
Peter Cordes
schedule
16.06.2019
g++ -march=native
, чтобы включить все, что поддерживает ваш ЦП. Если вы получаете ошибки компиляции, ваш процессор не поддерживает AVX512. - person Peter Cordes   schedule 16.06.2019