Символ препроцессора AVX512 и MSVC

По этой ссылке нет предопределенных символов препроцессора для AVX512 ( MSVC 2017)

Я пытаюсь собрать thundersvm, который использует собственную библиотеку на (как вы уже догадались) окнах. И Eigen, и thundersvm используют cmake и depinding для символов препроцессора компилятора, Eigen компилирует с инструкциями avx512 или нет.

Кажется, что с помощью /arch:AVX512 не вызывает никаких ошибок в MSVC, но не определяет __AVX512F__ символ, который нужен Эйген. Я также пытался включить -D__AVX512F__=ON в аргументах cmake, но все равно не повезло.

Поскольку для AVX512 нет предопределенного символа препроцессора, есть ли способ заставить Eigen скомпилироваться с avx512?


Обновить

Согласно комментарию chtz, я проверил ветку Eigen по умолчанию и перекомпилировал thundersvm с arch:AVX512 с этими аргументами cmake (возможно, не все нужны):

-DUSE_CUDA=OFF -DUSE_EIGEN=ON -DBUILD_SHARED_LIBS=OFF -DEIGEN_ENABLE_AVX512=ON -D__AVX512F__=ON -DEIGEN_VECTORIZE_AVX512=ON -DEIGEN_VECTORIZE_AVX2=ON -DEIGEN_VECTORIZE_AVX=ON -DEIGEN_VECTORIZE_FMA=ON

Сравнение набора команд от Intel SDE -mix инструмент до и после патча, я ясно вижу, что используются инструкции AVX (SDE жалуется, что не распознает инструкцию vbroadcastss zmm0, xmm0 когда работает для SKL CPU, но отлично работает для SKX). Проблема в том, что MSVC использует скалярную версию AVX, и улучшения во время выполнения не происходит (также общее количество команд одинаково), что похоже на этот пост

Есть ли другие флаги, которые мне нужно определить, чтобы MSVC генерировал нескалярные инструкции? (Думаю, я тоже попробую gcc)

0 ответов

MSVC плохо поддерживает AVX-512 и не имеет различий между разными подмножествами. Не существует безопасного способа создания кода AVX512F на MSVC без выполнения инструкций AVX512DQ.

Лучшие компиляторы для AVX-512 - это gcc и clang. Для Visual Studio есть плагин Clang, который вы можете использовать, если вам нравится IDE. Компиляторы gcc и clang имеют символы препроцессора, например __AVX512F__, __AVX512VL__, и т.д.

Другие вопросы по тегам