Saltar al contenido

¿Todas las CPU que admiten AVX2 también admiten SSE4.2 y AVX?

Ya no tienes que indagar más por todo internet porque llegaste al sitio exacto, contamos con la solución que deseas y sin problemas.

Solución:

La compatibilidad con una extensión Intel SIMD ISA más reciente implica la compatibilidad con las SIMD anteriores.

AVX2 definitivamente implica AVX1.

Creo que AVX1 implica que todos los bits de función SSE/SSE2/SSE3/SSSE3/SSE4.1/SSE4.2 también deben configurarse en CPUID. Si no está formalmente garantizado, muchos las cosas hacen esta suposición y una CPU que la violó probablemente no sería comercialmente viable para uso general.

Tenga en cuenta que popcnt tiene su propio bit de característica, por lo que en teoría podría tener una CPU con AVX2 y SSE4.2, pero no popcntpero muchas cosas tratan SSE4.2 como implicando popcnt. Por lo tanto, es más como si pudiera anunciar soporte para popcnt sin SSE4.2.


En teoría, podría hacer una CPU (o máquina virtual) con AVX pero que no aceptara la codificación SSE heredada no VEX de instrucciones SSE4.2 como pcmpistri, pero creo que estaría violando las garantías de Intel sobre lo que implica el bit de función AVX. No estoy seguro de si eso está escrito formalmente en un manual, pero la mayoría del software lo asumirá.

Pero AVX1 lo hace implica soporte para la codificación VEX de todos SSE4.2 e instrucciones SIMD anteriores, por ejemplo vpcmpistri o vminss

gcc -mavx2 definitivamente implica AVX1 y extensiones anteriores, pero solo emitirá código que use la codificación VEX. Definirá la __SSE4_2__ macro y así sucesivamente, por lo que gcc trata a AVX2 como si implicara extensiones SSE y popcnt anteriores, pero no FMA, AES-NI o ​​PCLMUL. Esas son características separadas incluso para GCC.

(En la práctica, debe utilizar gcc -march=native o gcc -march=znver1 o lo que sea para habilitar todas las funciones que tiene su CPU, y establecer opciones de ajuste para ello. No solo -mavx2 -mfmaeso deja la configuración de ajuste en valores predeterminados incorrectos, como dividir cada carga/almacenamiento de 256 bits posiblemente desalineada en mitades de 128 bits).

(Tenga en cuenta que MSVC no tiene tantas macros de detección SIMD ISA; tiene una para AVX pero no para todas las extensiones SSE* anteriores. El modelo de MSVC está diseñado asumiendo que los programas realizarán la detección de CPU en tiempo de ejecución en lugar de compilarse para la máquina local. Aunque MSVC ahora tiene opciones AVX y AVX2 para usarlas como líneas de base).


Tenga en cuenta que AVX512 rompe las tradiciones. AVX512F implica soporte para AVX2 y todo lo anterior, pero más allá de eso, AVX512DQ no viene “antes” o “después” de AVX512ER, por ejemplo. Puede (en teoría) tener cualquiera, ambos o ninguno. (En la práctica, Skylake-X/Cannonlake/etc. tiene solo un poco de superposición con Xeon Phi (Knight’s Landing/Knight’s Mill), más allá de AVX512F. https://en.wikipedia.org/wiki/AVX-512#CPUs_with_AVX- 512

Si configuramos la opción del compilador -mavx2 que GCC no da un error cuando usamos intrínsecos AVX o SSE. Entonces, GCC supone que la existencia de la bandera AVX2 es suficiente para ejecutar el código AVX y SSE. Por supuesto, no garantiza que alguien no cree CPU con AVX2 y sin SSE.

Aquí puedes ver las reseñas y valoraciones de los usuarios

Ten en cuenta dar difusión a este escrito si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *