Символ препроцессора AVX512 и MSVC - PullRequest
0 голосов
/ 14 февраля 2019

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

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

Кажется, что использование /arch:AVX512 не вызывает никаких ошибок в MSVC, но не определяет __AVX512F__ символ, который нужен Eigen.Я также попытался включить -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, и улучшения во время выполнения не происходит (также общее количество инструкций одинаково), что аналогично этому post

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...