Все ли процессоры, которые поддерживают AVX2, также поддерживают SSE4.2 и AVX? - PullRequest
0 голосов
/ 23 ноября 2018

Я планирую реализовать обнаружение SIMD-расширений во время выполнения.Это так, что если я узнаю, что процессор поддерживает AVX2, он также гарантированно поддерживает SSE4.2 и AVX?

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018

В принципе, CPU может просто поддерживать AVX2 без поддержки каких-либо инструкций SSE4 (что не так глупо, как кажется!).Однако на практике, если он поддерживает AVX2, он также поддерживает SSE4.

0 голосов
/ 28 ноября 2018

Поддержка более нового расширения Intel SIMD ISA подразумевает поддержку предыдущих SIMD.

AVX2 определенно подразумевает AVX1.

Я думаю, что AVX1 подразумевает все SSE/SSE2/SSE3/SSSE3/SSE4.1/SSE4.2 функциональные биты также должны быть установлены в CPUID.

Обратите внимание, что popcnt имеет свой собственный функциональный бит, поэтому теоретически вы можете использовать ЦП с AVX2и SSE4.2, но не popcnt.


Теоретически вы могли бы создать ЦП (или виртуальную машину) с AVX, но не принимающие кодирование инструкций SSE4.2 без VEX.как pcmpistri, но я думаю, что вы нарушаете гарантии Intel относительно того, что подразумевает функция AVX.Не уверен, если это формально записано в руководстве, но большинство программ предполагает, что.

Но AVX1 действительно подразумевает поддержку кодирования VEX all SSE4.2и более ранние инструкции SIMD, например, vpcmpistri или vminss

gcc -mavx2 определенно подразумевают AVX1 и предыдущие расширения, но будут генерировать только код, который использует VEXкодирование.Однако он определит макрос __SSE4_2__ и т. Д., Поэтому gcc рассматривает AVX2 как подразумевающий более ранние расширения SSE и popcnt, но не AES или PCLMUL.Это отдельные функции даже для GCC.

(Обратите внимание, что MSVC не имеет столько макросов обнаружения ISA SIMD; он имеет один для AVX, но не для всех более ранних расширений SSE *.)


Обратите внимание, что AVX512 отчасти нарушает традиции.AVX512F подразумевает поддержку AVX2 и всего, что было до него, но, кроме этого, AVX512DQ, например, не «до» или «после» AVX512ER.Вы можете (теоретически) иметь либо оба, либо ни одного.(На практике Skylake-X / Cannonlake / etc. Имеет только небольшое совпадение с Xeon Phi (Knight's Landing / Knight's Mill), за пределами AVX512F. https://en.wikipedia.org/wiki/AVX-512#CPUs_with_AVX-512

0 голосов
/ 23 ноября 2018

Если мы установим опцию компилятора -mavx2, то GCC не выдаст ошибку при использовании встроенных функций AVX или SSE.Таким образом, GCC предполагает, что наличие флага AVX2 достаточно для запуска кода AVX и SSE.Конечно, это не гарантирует, что кто-то не будет создавать CPU с AVX2 и без SSE.

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