Extensiones a la arquitectura del conjunto de instrucciones x86 para microprocesadores de Intel y AMD
Las extensiones vectoriales avanzadas ( AVX , también conocidas como Gesher New Instrucciones y luego Sandy Bridge New Instrucciones ) son extensiones SIMD de la arquitectura del conjunto de instrucciones x86 para microprocesadores de Intel y Advanced Micro Devices (AMD). Fueron propuestos por Intel en marzo de 2008 y fueron respaldados por primera vez por Intel con el procesador Sandy Bridge [1] enviado en el primer trimestre de 2011 y posteriormente por AMD con el procesador Bulldozer [2] enviado en el tercer trimestre de 2011. AVX proporciona nuevas funciones, nuevas instrucciones y un nuevo esquema de codificación.
AVX2 (también conocido como Haswell New Instrucciones ) expande la mayoría de los comandos de números enteros a 256 bits e introduce nuevas instrucciones. Intel los admitió por primera vez con el procesador Haswell , que se envió en 2013.
AVX-512 amplía el soporte de AVX a 512 bits utilizando una nueva codificación de prefijo EVEX propuesta por Intel en julio de 2013 y admitida por primera vez por Intel con el coprocesador Knights Landing , que se envió en 2016. [3] [4] En los procesadores convencionales, AVX-512 se introdujo con el servidor Skylake y los procesadores HEDT en 2017.
Extensiones vectoriales avanzadas
AVX utiliza dieciséis registros YMM para realizar una única instrucción en varios datos (consulte SIMD ). Cada registro YMM puede contener y realizar operaciones simultáneas (matemáticas) en:
- ocho números de coma flotante de precisión simple de 32 bits o
- cuatro números de coma flotante de doble precisión de 64 bits.
El ancho de los registros SIMD aumenta de 128 bits a 256 bits y se le cambia el nombre de XMM0–XMM7 a YMM0–YMM7 (en modo x86-64 , de XMM0–XMM15 a YMM0–YMM15). Las instrucciones SSE heredadas aún se pueden utilizar a través del prefijo VEX para operar en los 128 bits inferiores de los registros YMM.
AVX introduce un formato de instrucción SIMD de tres operandos llamado esquema de codificación VEX , donde el registro de destino es distinto de los dos operandos de origen. Por ejemplo, una instrucción SSE que utiliza la forma convencional de dos operandos a ← a + b ahora puede utilizar una forma no destructiva de tres operandos c ← a + b , preservando ambos operandos fuente. Originalmente, el formato de tres operandos de AVX se limitaba a instrucciones con operandos SIMD (YMM) y no incluía instrucciones con registros de propósito general (por ejemplo, EAX). Posteriormente se utilizó para codificar nuevas instrucciones en registros de propósito general en extensiones posteriores, como BMI . La codificación VEX también se utiliza para instrucciones que operan en los registros de máscara k0-k7 que se introdujeron con AVX-512 .
Se relaja el requisito de alineación de los operandos de memoria SIMD. [5] A diferencia de sus contrapartes no codificadas con VEX, la mayoría de las instrucciones vectoriales codificadas con VEX ya no requieren que sus operandos de memoria estén alineados con el tamaño del vector. En particular, la VMOVDQA
instrucción aún requiere que su operando de memoria esté alineado.
El nuevo esquema de codificación VEX introduce un nuevo conjunto de prefijos de código que amplía el espacio del código de operación , permite que las instrucciones tengan más de dos operandos y permite que los registros vectoriales SIMD tengan más de 128 bits. El prefijo VEX también se puede usar en las instrucciones SSE heredadas, dándoles una forma de tres operandos y haciéndolas interactuar de manera más eficiente con las instrucciones AVX sin la necesidad de VZEROUPPER
y VZEROALL
.
Las instrucciones AVX admiten SIMD de 128 y 256 bits. Las versiones de 128 bits pueden ser útiles para mejorar el código antiguo sin necesidad de ampliar la vectorización y evitar la penalización de pasar de SSE a AVX; también son más rápidas en algunas de las primeras implementaciones de AVX de AMD. Este modo a veces se conoce como AVX-128. [6]
Nuevas instrucciones
Estas instrucciones AVX se suman a las que son extensiones de 256 bits de las instrucciones SSE heredadas de 128 bits; la mayoría se pueden utilizar en operandos de 128 y 256 bits.
CPU con AVX
- Intel
- Procesadores Sandy Bridge , primer trimestre de 2011 [9]
- Procesadores Sandy Bridge E , cuarto trimestre de 2011 [10]
- Procesadores Ivy Bridge , primer trimestre de 2012
- Procesadores Ivy Bridge E , tercer trimestre de 2013
- Procesadores Haswell , segundo trimestre de 2013
- Procesadores Haswell E , tercer trimestre de 2014
- Procesadores Broadwell , cuarto trimestre de 2014
- Procesadores Skylake , tercer trimestre de 2015
- Procesadores Broadwell E , segundo trimestre de 2016
- Procesadores Kaby Lake , tercer trimestre de 2016 (ULV móvil)/primer trimestre de 2017 (escritorio/móvil)
- Procesadores Skylake-X , segundo trimestre de 2017
- Procesadores Coffee Lake , cuarto trimestre de 2017
- Procesadores Cannon Lake , segundo trimestre de 2018
- Procesadores Whiskey Lake , tercer trimestre de 2018
- Procesadores Cascade Lake , cuarto trimestre de 2018
- Procesadores Ice Lake , tercer trimestre de 2019
- Procesadores Comet Lake (solo marcas Core y Xeon), tercer trimestre de 2019
- Procesadores Tiger Lake (Core, Pentium y Celeron [11] ), tercer trimestre de 2020
- Procesadores Rocket Lake , primer trimestre de 2021
- Procesadores Alder Lake (marcas Core, Pentium y Celeron), cuarto trimestre de 2021. Compatible tanto con núcleos P Golden Cove como con núcleos E Gracemont .
- Procesadores Raptor Lake , cuarto trimestre de 2022
- Procesadores Sapphire Rapids , primer trimestre de 2023
- Procesadores Meteor Lake
- Procesadores Arrow Lake
- Procesadores del lago lunar
No todas las CPU de las familias enumeradas son compatibles con AVX. Generalmente, las CPU con denominación comercial Core i3/i5/i7/i9 los soportan, mientras que las CPU Pentium y Celeron anteriores a Tiger Lake [12] no.
Los problemas relacionados con la compatibilidad entre los futuros procesadores Intel y AMD se analizan en el conjunto de instrucciones XOP .
- A TRAVÉS DE :
- Nano cuatro núcleos
- Edén X4
- Zhaoxin :
- Procesadores basados en WuDaoKou (KX-5000 y KH-20000)
Soporte para compiladores y ensambladores
- Absoft admite con el indicador -mavx.
- El compilador Free Pascal admite AVX y AVX2 con los modificadores -CfAVX y -CfAVX2 desde la versión 2.7.1.
- RAD studio (v11.0 Alexandria) admite AVX2 y AVX512. [15]
- Las funciones de ensamblaje en línea de GNU Assembler (GAS) admiten estas instrucciones (accesibles a través de GCC), al igual que las primitivas de Intel y el ensamblador en línea de Intel (estrechamente compatible con GAS, aunque más general en su manejo de referencias locales dentro del código en línea).
- GCC a partir de la versión 4.6 (aunque había una rama 4.3 con cierto soporte) y Intel Compiler Suite a partir de la versión 11.1 admiten AVX.
- La versión 4.5.1 del compilador Open64 admite AVX con el indicador -mavx.
- PathScale admite a través del indicador -mavx.
- El compilador Vector Pascal admite AVX a través del indicador -cpuAVX32.
- El compilador de Visual Studio 2010/2012 admite AVX mediante el conmutador intrínseco y /arch:AVX.
- Otros ensambladores como MASM versión VS2010, YASM, [16] FASM , NASM y JWASM .
Soporte del sistema operativo
AVX agrega un nuevo estado de registro a través del archivo de registro YMM de 256 bits de ancho, por lo que se requiere soporte explícito del sistema operativo para guardar y restaurar adecuadamente los registros expandidos de AVX entre cambios de contexto . Las siguientes versiones del sistema operativo admiten AVX:
- DragonFly BSD : soporte agregado a principios de 2013.
- FreeBSD : soporte agregado en un parche enviado el 21 de enero de 2012, [17] que se incluyó en la versión estable 9.1 [18]
- Linux : compatible desde la versión del kernel 2.6.30, [19] lanzada el 9 de junio de 2009. [20]
- macOS : soporte agregado en la actualización 10.6.8 ( Snow Leopard ) [21] [¿ fuente no confiable? ] lanzado el 23 de junio de 2011. De hecho, macOS Ventura no admite procesadores sin el conjunto de instrucciones AVX2. [22]
- OpenBSD : soporte agregado el 21 de marzo de 2015. [23]
- Solaris : compatible con Solaris 10 Update 10 y Solaris 11
- Windows : compatible con Windows 7 SP1, Windows Server 2008 R2 SP1, [24] Windows 8 , Windows 10
- Windows Server 2008 R2 SP1 con Hyper-V requiere una revisión para admitir procesadores AMD AVX (Opteron series 6200 y 4200), KB2568088
Extensiones vectoriales avanzadas 2
Advanced Vector Extensions 2 (AVX2), también conocido como Haswell New Instrucciones , [25] es una expansión del conjunto de instrucciones AVX introducido en la microarquitectura Haswell de Intel . AVX2 hace las siguientes adiciones:
- expansión de la mayoría de las instrucciones SSE y AVX de enteros vectoriales a 256 bits
- Reúna soporte, lo que permite cargar elementos vectoriales desde ubicaciones de memoria no contiguas
- Permutaciones cualquiera a cualquiera con granularidad DWORD y QWORD
- desplazamientos vectoriales.
A veces, la extensión de acumulación múltiple fusionada (FMA3) de tres operandos se considera parte de AVX2, ya que Intel la introdujo en la misma microarquitectura del procesador. Esta es una extensión separada que utiliza su propio indicador CPUID y se describe en su propia página y no a continuación.
Nuevas instrucciones
CPU con AVX2
- Intel
- Procesadores Haswell (solo marcas Core y Xeon), segundo trimestre de 2013
- Procesadores Haswell E , tercer trimestre de 2014
- Procesadores Broadwell , cuarto trimestre de 2014
- Procesadores Broadwell E , tercer trimestre de 2016
- Procesadores Skylake , tercer trimestre de 2015
- Procesadores Kaby Lake , tercer trimestre de 2016 (ULV móvil)/primer trimestre de 2017 (escritorio/móvil)
- Procesadores Skylake-X , segundo trimestre de 2017
- Procesadores Coffee Lake , cuarto trimestre de 2017
- Procesadores Cannon Lake , segundo trimestre de 2018
- Procesadores Whiskey Lake , tercer trimestre de 2018
- Procesadores Cascade Lake , segundo trimestre de 2019
- Procesadores Ice Lake , tercer trimestre de 2019
- Procesadores Comet Lake , tercer trimestre de 2019
- Procesadores Tiger Lake (Core, Pentium y Celeron [11] ), tercer trimestre de 2020
- Procesadores Rocket Lake , primer trimestre de 2021
- Procesadores Alder Lake (marcas Xeon, Core, Pentium y Celeron [11] ), cuarto trimestre de 2021. Compatible tanto con núcleos P Golden Cove como con núcleos E Gracemont .
- Procesadores Raptor Lake , cuarto trimestre de 2022
- Procesadores Sapphire Rapids , primer trimestre de 2023
- Procesadores Meteor Lake
- Procesadores Arrow Lake
- Procesadores del lago lunar
- AMD
- A TRAVÉS DE :
- Nano cuatro núcleos
- Edén X4
AVX-512
AVX-512 son extensiones de 512 bits de las instrucciones SIMD de extensiones vectoriales avanzadas de 256 bits para la arquitectura del conjunto de instrucciones x86 propuestas por Intel en julio de 2013 y son compatibles con el procesador Knights Landing de Intel . [3]
Las instrucciones AVX-512 están codificadas con el nuevo prefijo EVEX . Permite 4 operandos, 8 nuevos registros de máscara de operación de 64 bits , modo de memoria escalar con transmisión automática, control de redondeo explícito y modo de direccionamiento de memoria de desplazamiento comprimido . El ancho del archivo de registro aumenta a 512 bits y el recuento total de registros aumenta a 32 (registros ZMM0-ZMM31) en modo x86-64.
AVX-512 consta de múltiples subconjuntos de instrucciones, no todos los cuales deben ser compatibles con todos los procesadores que los implementan. El conjunto de instrucciones consta de lo siguiente:
- AVX-512 Foundation (F): agrega varias instrucciones nuevas y amplía la mayoría de las instrucciones de punto flotante SSE-SSE4.1 y AVX/AVX2 de 32 y 64 bits con el esquema de codificación EVEX para admitir registros de 512 bits, máscaras de operación y parámetros. radiodifusión y redondeo integrado y control de excepciones
- AVX-512 Instrucciones de detección de conflictos (CD): detección eficiente de conflictos para permitir la vectorización de más bucles, compatible con Knights Landing [3]
- AVX-512 Instrucciones exponenciales y recíprocas (ER): operaciones exponenciales y recíprocas diseñadas para ayudar a implementar operaciones trascendentales, respaldadas por Knights Landing [3]
- Instrucciones de captación previa (PF) AVX-512: nuevas capacidades de captación previa, compatibles con Knights Landing [3]
- Extensiones de longitud vectorial (VL) AVX-512: amplía la mayoría de las operaciones de AVX-512 para operar también en registros XMM (128 bits) e YMM (256 bits) (incluidos XMM16-XMM31 e YMM16-YMM31 en modo x86-64) [ 26]
- AVX-512 Instrucciones de bytes y palabras (BW): extiende AVX-512 para cubrir operaciones enteras de 8 y 16 bits [26]
- Instrucciones AVX-512 de palabra doble y palabra cuádruple (DQ): operaciones enteras mejoradas de 32 y 64 bits [26]
- AVX-512 Suma multiplicada fusionada de enteros (IFMA): suma multiplicada fusionada para enteros de 512 bits. [27] : 746
- Las instrucciones de manipulación de bytes vectoriales (VBMI) de AVX-512 agregan instrucciones de permutación de bytes vectoriales que no están presentes en AVX-512BW.
- Instrucciones de red neuronal vectorial AVX-512 Precisión variable de palabras (4VNNIW): instrucciones vectoriales para aprendizaje profundo.
- AVX-512 Precisión simple empaquetada de acumulación multiplicada fusionada (4FMAPS): instrucciones vectoriales para aprendizaje profundo.
- VPOPCNTDQ – recuento de bits establecido en 1. [28]
- VPCLMULQDQ: multiplicación de palabras cuádruples sin acarreo. [28]
- Instrucciones de red neuronal vectorial (VNNI) AVX-512: instrucciones vectoriales para aprendizaje profundo. [28]
- AVX-512 Nuevas instrucciones del campo Galois (GFNI): instrucciones vectoriales para calcular el campo Galois . [28]
- AVX-512 Instrucciones vectoriales AES (VAES): instrucciones vectoriales para codificación AES . [28]
- AVX-512 Instrucciones de manipulación de bytes vectoriales 2 (VBMI2): carga, almacenamiento y concatenación de bytes/palabras con desplazamiento. [28]
- Algoritmos de bits AVX-512 (BITALG): instrucciones de manipulación de bits de bytes/palabras que expanden VPOPCNTDQ. [28]
- Instrucciones de punto flotante AVX-512 Bfloat16 (BF16): instrucciones vectoriales para aceleración de IA.
- Instrucciones de punto flotante de media precisión AVX-512 (FP16): instrucciones vectoriales para operar con números complejos y de punto flotante con precisión reducida.
Todas las implementaciones solo requieren la extensión central AVX-512F (AVX-512 Foundation), aunque todos los procesadores actuales también admiten CD (detección de conflictos); Los coprocesadores informáticos admitirán adicionalmente ER, PF, 4VNNIW, 4FMAPS y VPOPCNTDQ, mientras que los procesadores centrales admitirán VL, DQ, BW, IFMA, VBMI, VPOPCNTDQ, VPCLMULQDQ, etc.
Las instrucciones SSE/AVX actualizadas en AVX-512F utilizan los mismos mnemotécnicos que las versiones AVX; pueden operar en registros ZMM de 512 bits y también admitirán registros XMM/YMM de 128/256 bits (con AVX-512VL) y operandos enteros de bytes, palabras, palabras dobles y cuatro palabras (con AVX-512BW/DQ y VBMI). [27] : 23
CPU con AVX-512
[29]
^Nota 1 : AVX-512 está deshabilitado de forma predeterminada en los procesadores Alder Lake . En algunas placas base con algunas versiones de BIOS, AVX-512 se puede habilitar en el BIOS, pero esto requiere deshabilitar los E-cores. [30] Sin embargo, Intel ha comenzado a fusionar AVX-512 en los procesadores Alder Lake más nuevos. [31]
Compiladores que soportan AVX-512
- GCC 4.9 y posteriores [32]
- Clang 3.9 y más reciente [33]
- ICC 15.0.1 y posteriores [34]
- Compilador C++ de Microsoft Visual Studio 2017 [35]
AVX-VNNI, AVX-IFMA
AVX-VNNI es una variante codificada por VEX de la extensión del conjunto de instrucciones AVX512-VNNI . De manera similar, AVX-IFMA es una variante codificada por VEX de AVX512-IFMA . Estas extensiones proporcionan los mismos conjuntos de operaciones que sus contrapartes AVX-512, pero están limitadas a vectores de 256 bits y no admiten funciones adicionales de codificación EVEX , como transmisión, registros de máscara de operaciones o acceso a más de 16 registros vectoriales. Estas extensiones permiten admitir operaciones VNNI e IFMA incluso cuando no se implementa compatibilidad total con AVX-512 en el procesador.
CPU con AVX-VNNI
CPU con AVX-IFMA
AVX10
AVX10, anunciado en agosto de 2023, es un nuevo conjunto de instrucciones AVX "convergentes". Aborda varios problemas de AVX-512, en particular que está dividido en demasiadas partes [36] (20 indicadores de características) y que hace que el soporte de vectores de 512 bits sea obligatorio. AVX10 presenta una interfaz CPUID simplificada para probar la compatibilidad con instrucciones, que consta del número de versión de AVX10 (que indica el conjunto de instrucciones admitidas, siendo las versiones posteriores siempre un superconjunto de una anterior) y la longitud máxima del vector disponible (256 o 512 bits). . [37] Se utiliza una notación combinada para indicar la versión y la longitud del vector: por ejemplo, AVX10.2/256 indica que una CPU es capaz de ejecutar la segunda versión de AVX10 con un ancho de vector máximo de 256 bits. [38]
La primera y "anterior" versión de AVX10, denominada AVX10.1, no introducirá ninguna instrucción ni función de codificación más allá de lo que ya está en AVX-512 (F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, BITALG, VNNI, GFNI, VPOPCNTDQ, VPCLMULQDQ, VAES, BF16, FP16). La segunda versión, "con todas las funciones", AVX10.2, introduce nuevas funciones como el redondeo integrado YMM y Suprimir todas las excepciones. Para las CPU que admiten AVX10 y vectores de 512 bits, todos los indicadores de funciones AVX-512 heredados permanecerán configurados para facilitar que las aplicaciones que admiten AVX-512 continúen usando las instrucciones AVX-512. [38]
AVX10.1/512 estará disponible en Granite Rapids. [38]
APX
APX es una nueva extensión. No se centra en el cálculo de vectores, pero proporciona extensiones similares a RISC a la arquitectura x86-64 al duplicar el número de registros de propósito general a 32 e introducir formatos de instrucciones de tres operandos. AVX sólo se ve afectado tangencialmente ya que APX introduce operandos extendidos. [39] [40]
Aplicaciones
- Adecuado para cálculos intensivos de coma flotante en aplicaciones multimedia, científicas y financieras (AVX2 agrega soporte para operaciones con números enteros ).
- Aumenta el paralelismo y el rendimiento en cálculos SIMD de punto flotante .
- Reduce la carga de registro debido a las instrucciones no destructivas.
- Mejora el rendimiento del software RAID de Linux (se requiere AVX2, AVX no es suficiente) [41]
Software
- Blender usa AVX, AVX2 y AVX-512 en el motor de renderizado Cycles. [42]
- Bloombase utiliza AVX, AVX2 y AVX-512 en su módulo criptográfico Bloombase (BCM).
- Botan usa AVX y AVX2 cuando están disponibles para acelerar algunos algoritmos, como ChaCha.
- Los kits de herramientas BSAFE C utilizan AVX y AVX2 cuando corresponde para acelerar varios algoritmos criptográficos. [43]
- Crypto++ usa AVX y AVX2 cuando están disponibles para acelerar algunos algoritmos, como Salsa y ChaCha.
- Esri ArcGIS Data Store utiliza AVX2 para el almacenamiento de gráficos. [44]
- OpenSSL utiliza funciones criptográficas optimizadas para AVX y AVX2 desde la versión 1.0.2. [45] Se agregó soporte para AVX-512 en la versión 3.0.0. [46] Algunas de estas optimizaciones también están presentes en varios clones y bifurcaciones, como LibreSSL.
- Prime95 /MPrime, el software utilizado para GIMPS , comenzó a utilizar las instrucciones AVX desde la versión 27.1, AVX2 desde la 28.6 y AVX-512 desde la 29.1. [47]
- El decodificador dav1d AV1 puede usar AVX2 y AVX-512 en CPU compatibles. [48] [49]
- El codificador SVT-AV1 AV1 puede usar AVX2 y AVX-512 para acelerar la codificación de video. [50]
- dnetc , el software utilizado por distribuido.net , tiene un núcleo AVX2 disponible para su proyecto RC5 y pronto lanzará uno para su proyecto OGR-28.
- Einstein@Home utiliza AVX en algunas de sus aplicaciones distribuidas que buscan ondas gravitacionales . [51]
- Folding@home utiliza AVX en núcleos de cálculo implementados con la biblioteca GROMACS .
- Helios utiliza aceleración de hardware AVX y AVX2 en hardware x86 de 64 bits. [52]
- Horizon: Zero Dawn utiliza AVX en su motor de juego Decima.
- PCSX2 y RPCS3 , son emuladores de PS2 y PS3 de código abierto respectivamente que utilizan instrucciones AVX2 y AVX-512 para emular juegos.
- Network Device Interface , un protocolo de audio/vídeo IP desarrollado por NewTek para la producción de transmisiones en vivo, utiliza AVX y AVX2 para un mayor rendimiento.
- TensorFlow desde la versión 1.6 y las versiones anteriores de tensorflow requieren una CPU que admita al menos AVX. [53]
- Los codificadores de video x264 , x265 y VTM pueden usar AVX2 o AVX-512 para acelerar la codificación.
- Varios mineros de criptomonedas basados en CPU (como el cpuminer de pooler para Bitcoin y Litecoin ) utilizan AVX y AVX2 para diversas rutinas relacionadas con la criptografía, incluidas SHA-256 y scrypt .
- libsodium utiliza AVX en la implementación de la multiplicación escalar para los algoritmos Curve25519 y Ed25519 , AVX2 para BLAKE2b , Salsa20 , ChaCha20 y AVX2 y AVX-512 en la implementación del algoritmo Argon2 .
- Implementación de referencia de código abierto libvpx del codificador/decodificador VP8/VP9, utiliza AVX2 o AVX-512 cuando esté disponible.
- libjpeg-turbo utiliza AVX2 para acelerar el procesamiento de imágenes.
- FFTW puede utilizar AVX, AVX2 y AVX-512 cuando estén disponibles.
- LLVMpipe, un renderizador de software OpenGL en Mesa que utiliza infraestructura Gallium y LLVM , utiliza AVX2 cuando está disponible.
- glibc utiliza AVX2 (con FMA ) y AVX-512 para la implementación optimizada de varias funciones matemáticas (es decir ,,,,
expf
) y de cadenas ( ,, etc.) sinf
en libc .powf
atanf
atan2f
memmove
memcpy
- El kernel de Linux puede utilizar AVX o AVX2, junto con AES-NI como implementación optimizada del algoritmo criptográfico AES-GCM .
- El kernel de Linux usa AVX o AVX2 cuando está disponible, en una implementación optimizada de muchos otros cifrados criptográficos: Camellia , CAST5 , CAST6 , Serpent , Twofish , MORUS-1280 y otras primitivas: Poly1305 , SHA-1 , SHA-256 , SHA-512 , ChaCha20 .
- POCL, un lenguaje informático portátil, que proporciona implementación de OpenCL , utiliza AVX, AVX2 y AVX-512 cuando es posible.
- .NET y .NET Framework pueden utilizar AVX, AVX2 a través del espacio de nombres genérico
System.Numerics.Vectors
. - .NET Core , a partir de la versión 2.1 y más ampliamente después de la versión 3.0, puede usar directamente todos los intrínsecos de AVX y AVX2 a través del
System.Runtime.Intrinsics.X86
espacio de nombres. - EmEditor 19.0 y superiores utilizan AVX2 para acelerar el procesamiento. [54]
- El sintetizador de software Massive X de Native Instruments requiere AVX. [55]
- Microsoft Teams utiliza instrucciones AVX2 para crear un fondo borroso o personalizado detrás de los participantes del chat de video [56] y para suprimir el ruido de fondo. [57]
- Las compilaciones personalizadas de Windows de Pale Moon aumentan considerablemente la velocidad de navegación debido al uso de AVX2.
- simdjson, una biblioteca de análisis JSON , utiliza AVX2 y AVX-512 para lograr una velocidad de decodificación mejorada. [58] [59]
- x86-simd-sort, una biblioteca con algoritmos de clasificación para tipos de datos numéricos de 16, 32 y 64 bits, utiliza AVX2 y AVX-512. La biblioteca se utiliza en NumPy y OpenJDK para acelerar los algoritmos de clasificación. [60]
- zlib-ng, una versión optimizada de zlib , contiene versiones AVX2 y AVX-512 de algunos algoritmos de compresión de datos.
- El motor Tesseract OCR utiliza AVX, AVX2 y AVX-512 para acelerar el reconocimiento de caracteres. [61]
desaceleración
Dado que las instrucciones AVX son más amplias y generan más calor, algunos procesadores Intel tienen disposiciones para reducir el límite de frecuencia Turbo Boost cuando se ejecutan dichas instrucciones. En Skylake y sus derivados, la limitación se divide en tres niveles: [62] [63]
- L0 (100%): el límite de impulso turbo normal.
- L1 (~85%): El límite de "impulso AVX". Activado suavemente por instrucciones "pesadas" de 256 bits (unidad de punto flotante: matemáticas FP y multiplicación de enteros). Activado mediante instrucciones "ligeras" (todas las demás) de 512 bits.
- L2 (~60%): [ dudoso – discutir ] El límite de "impulso AVX-512". Activado suavemente mediante instrucciones pesadas de 512 bits.
La transición de frecuencia puede ser suave o dura. La transición dura significa que la frecuencia se reduce tan pronto como se detecta dicha instrucción; La transición suave significa que la frecuencia se reduce solo después de alcanzar un número umbral de instrucciones coincidentes. El límite es por subproceso. [62]
En Ice Lake , sólo persisten dos niveles: [64]
- L0 (100%): el límite de impulso turbo normal.
- L1 (~97%): Activado por cualquier instrucción de 512 bits, pero solo cuando el impulso de un solo núcleo está activo; no se activa cuando se cargan varios núcleos.
Los procesadores Rocket Lake no activan la reducción de frecuencia al ejecutar ningún tipo de instrucciones vectoriales, independientemente del tamaño del vector. [64] Sin embargo, la desaceleración aún puede ocurrir debido a otras razones, como alcanzar límites térmicos y de potencia.
La reducción de velocidad significa que el uso de AVX en una carga de trabajo mixta con un procesador Intel puede generar una penalización de frecuencia. Evitar el uso de instrucciones amplias y pesadas ayuda a minimizar el impacto en estos casos. AVX-512VL permite utilizar operandos de 256 o 128 bits en AVX-512, lo que lo convierte en un valor predeterminado sensato para cargas mixtas. [sesenta y cinco]
En las variantes compatibles y desbloqueadas de procesadores que reducen la frecuencia de reloj, las proporciones son ajustables y se pueden desactivar (establecer en 0x) por completo a través de la utilidad Overclocking/Tuning de Intel o en BIOS si es compatible allí. [66]
Ver también
Referencias
- ^ Kanter, David (25 de septiembre de 2010). "Microarquitectura Sandy Bridge de Intel". www.realworldtech.com . Consultado el 17 de febrero de 2018 .
- ^ Hruska, Joel (24 de octubre de 2011). "Analizando Bulldozer: Por qué el chip de AMD es tan decepcionante - Página 4 de 5 - ExtremeTech". Tecnología extrema . Consultado el 17 de febrero de 2018 .
- ^ abcde James Reinders (23 de julio de 2013), Instrucciones AVX-512, Intel , consultado el 20 de agosto de 2013
- ^ "Especificaciones del producto del procesador Intel Xeon Phi 7210 (16 GB, 1,30 GHz, 64 núcleos)". Intel ARK (especificaciones del producto) . Consultado el 16 de marzo de 2018 .
- ^ "14,9". Manual del desarrollador de software de arquitecturas Intel 64 e IA-32 Volumen 1: Arquitectura básica (PDF) (-051US ed.). Corporación Intel. pag. 349 . Consultado el 23 de agosto de 2014 .
Los argumentos de memoria para la mayoría de las instrucciones con prefijo VEX funcionan normalmente sin causar #GP(0) en ninguna alineación de granularidad de bytes (a diferencia de las instrucciones SSE heredadas).
- ^ "Opciones i386 y x86-64: uso de la colección de compiladores GNU (GCC)" . Consultado el 9 de febrero de 2014 .
- ^ "La microarquitectura de las CPU Intel, AMD y VIA: una guía de optimización para programadores de ensamblaje y fabricantes de compiladores" (PDF) . Consultado el 17 de octubre de 2016 .
- ^ "Programación de ajedrez AVX2". Archivado desde el original el 10 de julio de 2017 . Consultado el 17 de octubre de 2016 .
- ^ "Intel ofrece un vistazo a Nehalem y Larrabee". Tecnología extrema. 17 de marzo de 2008.
- ^ "Procesador Intel Core i7-3960X Extreme Edition" . Consultado el 17 de enero de 2012 .
- ^ abc "Especificaciones del producto del procesador Intel® Celeron® 6305 (caché de 4 M, 1,80 GHz, con IPU)". ark.intel.com . Consultado el 10 de noviembre de 2020 .
- ^ "¿Un procesador con AVX2 o AVX-512 admite instrucciones AVX?". ark.intel.com . Consultado el 27 de abril de 2022 .
- ^ Dave Christie (7 de mayo de 2009), Lograr un equilibrio, blogs de desarrolladores de AMD, archivado desde el original el 9 de noviembre de 2013 , recuperado 17 de enero 2012
- ^ Nuevas instrucciones "Bulldozer" y "Piledriver" (PDF) , AMD, octubre de 2012
- ^ "Novedades: RAD Studio". docwiki.embarcadero.com . Consultado el 17 de septiembre de 2021 .
- ^ "Notas de la versión de YASM 0.7.0". yasm.tortall.net .
- ^ Agregue soporte para los estados FPU extendidos en amd64, tanto para ABI nativas de 64 bits como de 32 bits, svnweb.freebsd.org, 21 de enero de 2012 , consultado el 22 de enero de 2012
- ^ "Anuncio de lanzamiento de FreeBSD 9.1" . Consultado el 20 de mayo de 2013 .
- ^ x86: agregue soporte del kernel de Linux para el estado YMM , consultado el 13 de julio de 2009
- ^ Linux 2.6.30: novatos en el kernel de Linux , consultado el 13 de julio de 2009
- ^ Gorjeo , consultado el 23 de junio de 2010
- ^ "Los desarrolladores están avanzando para que macOS Ventura se ejecute en Mac no compatibles con una década de antigüedad". 23 de agosto de 2022.
- ^ Agregue soporte para guardar/restaurar el estado de FPU usando XSAVE/XRSTOR. , consultado el 25 de marzo de 2015
- ^ Compatibilidad con punto flotante para controladores de 64 bits , consultado el 6 de diciembre de 2009
- ^ Las nuevas descripciones de instrucciones de Haswell ya están disponibles, Software.intel.com , consultado el 17 de enero de 2012
- ^ abc James Reinders (17 de julio de 2014). "Instrucciones adicionales de AVX-512". Intel . Consultado el 3 de agosto de 2014 .
- ^ ab "Referencia de programación de extensiones del conjunto de instrucciones de arquitectura Intel" (PDF) . Intel . Consultado el 29 de enero de 2014 .
- ^ abcdefg "Referencia de programación de funciones futuras y extensiones del conjunto de instrucciones de la arquitectura Intel®". Intel . Consultado el 16 de octubre de 2017 .
- ^ "Emulador de desarrollo de software Intel® | Software Intel®". software.intel.com . Consultado el 11 de junio de 2016 .
- ^ Cortadora, Ian; Frumusanu, Andrei. "Revisión de Intel 12.ª generación Core i9-12900K: el rendimiento híbrido aporta complejidad híbrida". AnandTech . Consultado el 5 de noviembre de 2021 .
- ^ Alcorn, Paul (2 de marzo de 2022). "El soporte AVX-512 de Intel Nukes Alder Lake, ahora lo fusiona en silicio". Hardware de Tom . Consultado el 3 de octubre de 2022 .
- ^ "Serie de lanzamientos de GCC 4.9: cambios, nuevas funciones y correcciones - Proyecto GNU - Free Software Foundation (FSF)". gcc.gnu.org . Consultado el 3 de abril de 2017 .
- ^ "Notas de la versión de LLVM 3.9: documentación de LLVM 3.9". lanzamientos.llvm.org . Consultado el 3 de abril de 2017 .
- ^ "Notas de la versión de Intel® Parallel Studio XE 2015 Composer Edition C++ | Software Intel®". software.intel.com . Consultado el 3 de abril de 2017 .
- ^ "Microsoft Visual Studio 2017 es compatible con Intel® AVX-512". 11 de julio de 2017.
- ^ Mann, Tobias (15 de agosto de 2023). "El AVX10 de Intel promete los beneficios del AVX-512 sin equipaje". www.theregister.com . Consultado el 20 de agosto de 2023 .
- ^ "El vector convergente ISA: documento técnico Intel® Advanced Vector Extensions 10". Intel .
- ^ abc "Especificación de arquitectura Intel® Advanced Vector Extensions 10 (Intel® AVX10)". Intel .
- ^ "Especificación de arquitectura Intel® Advanced Performance Extensions (Intel® APX)". Intel.
- ^ Robinson, Dan (26 de julio de 2023). "Intel revela instrucciones vectoriales y x86 para chips futuros". www.theregister.com . Consultado el 20 de agosto de 2023 .
- ^ "RAID de Linux". LWN. 17 de febrero de 2013. Archivado desde el original el 15 de abril de 2013.
- ^ Jaroš, Milán; Strakoš, Petr; Říha, Lubomír (28 de mayo de 2022). "Renderizado en Blender usando vectorización AVX-512" (PDF) . Grupo de usuarios de Intel eXtreme Performance . Universidad Técnica de Ostrava . Consultado el 28 de octubre de 2022 .
- ^ "Comparación de implementaciones de bibliotecas criptográficas BSAFE". 25 de julio de 2023.
- ^ "Requisitos del sistema ArcGIS Data Store 11.2". Empresa ArcGIS . Consultado el 24 de enero de 2024 .
- ^ "Mejora del rendimiento de OpenSSL". 26 de mayo de 2015 . Consultado el 28 de febrero de 2017 .
- ^ "Notas de la versión de OpenSSL 3.0.0". GitHub . 7 de septiembre de 2021.
- ^ "Notas de la versión de Prime95" . Consultado el 10 de julio de 2022 .
- ^ "dav1d: rendimiento y finalización de la primera versión". 21 de noviembre de 2018 . Consultado el 22 de noviembre de 2018 .
- ^ "notas de la versión de dav1d 0.6.0". 6 de marzo de 2020.
- ^ "Notas de la versión de SVT-AV1 0.7.0". 26 de septiembre de 2019.
- ^ "Aplicaciones Einstein@Home".
- ^ "Preguntas frecuentes, Helios". Helios . Consultado el 5 de julio de 2021 .
- ^ "Tensorflow 1.6". GitHub .
- ^ Nuevo en la versión 19.0: EmEditor (editor de texto)
- ^ "MASSIVE X requiere un procesador compatible con AVX". Instrumentos nativos . Consultado el 29 de noviembre de 2019 .
- ^ "Requisitos de hardware para Microsoft Teams". Microsoft . Consultado el 17 de abril de 2020 .
- ^ "Reducir el ruido de fondo en las reuniones de Teams". Soporte de Microsoft . Consultado el 5 de enero de 2021 .
- ^ Langdale, Geoff; Lemire, Daniel (2019). "Análisis de gigabytes de JSON por segundo". La revista VLDB . 28 (6): 941–960. arXiv : 1902.08318 . doi :10.1007/s00778-019-00578-5. S2CID 67856679.
- ^ "notas de la versión de simdjson 2.1.0". GitHub . 30 de junio de 2022.
- ^ Larabel, Michael (6 de octubre de 2023). "OpenJDK fusiona x86-simd-sort de Intel para acelerar la clasificación de datos entre 7 y 15 veces". Forónix .
- ^ Larabel, Michael (7 de julio de 2022). "El motor Tesseract OCR 5.2 logra el éxito con AVX-512F". Forónix .
- ^ ab Lemire, Daniel (7 de septiembre de 2018). "AVX-512: cuándo y cómo utilizar estas nuevas instrucciones". El blog de Daniel Lemire .
- ^ Abeja en cuerda. "Instrucciones SIMD que reducen la frecuencia de la CPU". Desbordamiento de pila .
- ^ ab Downs, Travis (19 de agosto de 2020). "Desbloqueo de Ice Lake AVX-512". Blog "El rendimiento importa" .
- ^ "x86: rendimiento de AVX 512 frente a AVX2 para bucles de procesamiento de matrices simples". Desbordamiento de pila .
- ^ "Guía de overclocking de Intel® Extreme Tuning Utility (Intel® XTU): ajuste avanzado". Intel . Consultado el 18 de julio de 2021 .
Vea la imagen en la sección vinculada, donde la relación AVX2 se ha establecido en 0.
enlaces externos
- Guía de elementos intrínsecos de Intel
- Manual de referencia del lenguaje ensamblador x86