Wikilibros tiene un libro sobre el tema: X86 Assembly/AVX, AVX2, FMA3, FMA4
Extensiones de la arquitectura del conjunto de instrucciones x86 para microprocesadores de Intel y AMD
Las Extensiones Avanzadas de Vectores ( AVX , también conocidas como Nuevas Instrucciones Gesher y luego Nuevas Instrucciones Sandy Bridge ) son extensiones SIMD para la arquitectura del conjunto de instrucciones x86 para microprocesadores de Intel y Advanced Micro Devices (AMD). Fueron propuestas por Intel en marzo de 2008 y fueron respaldadas por primera vez por Intel con la microarquitectura Sandy Bridge [1] que se lanzó en el primer trimestre de 2011 y luego por AMD con la microarquitectura Bulldozer [2] que se lanzó en el cuarto trimestre de 2011. AVX proporciona nuevas funciones, nuevas instrucciones y un nuevo esquema de codificación.
AVX2 (también conocido como Haswell New Instructions ) amplía la mayoría de los comandos de números enteros a 256 bits e introduce nuevas instrucciones. Intel las admitió por primera vez con la microarquitectura Haswell , que se lanzó 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 de vectores avanzadas
AVX utiliza dieciséis registros YMM para ejecutar 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 punto flotante de precisión simple de 32 bits o
cuatro números de punto flotante de doble precisión de 64 bits.
El ancho de los registros SIMD se ha incrementado de 128 bits a 256 bits y se les ha cambiado el nombre de XMM0–XMM7 a YMM0–YMM7 (en el modo x86-64 , de XMM0–XMM15 a YMM0–YMM15). Las instrucciones SSE heredadas todavía se pueden utilizar a través del prefijo VEX para operar en los 128 bits inferiores de los registros YMM.
Esquema de registro AVX-512 como extensión de los registros AVX (YMM0-YMM15) y SSE (XMM0-XMM15)
511256
255128
1270
ZMM0
YMM0
XMM0
ZMM1
YMM1
XMM1
ZMM2
YMM2
XMM2
ZMM3
YMM3
XMM3
ZMM4
YMM4
XMM4
ZMM5
YMM5
XMM5
ZMM6
YMM6
XMM6
ZMM7
YMM7
XMM7
ZMM8
YMM8
XMM8
ZMM9
YMM9
XMM9
ZMM10
YMM10
XMM10
ZMM11
YMM11
XMM11
ZMM12
YMM12
XMM12
ZMM13
YMM13
XMM13
ZMM14
YMM14
XMM14
ZMM15
YMM15
XMM15
ZMM16
YMM16
XMM16
ZMM17
YMM17
XMM17
ZMM18
YMM18
XMM18
ZMM19
YMM19
XMM19
ZMM20
YMM20
XMM20
ZMM21
YMM21
XMM21
ZMM22
YMM22
XMM22
ZMM23
YMM23
XMM23
ZMM24
YMM24
XMM24
ZMM25
YMM25
XMM25
ZMM26
YMM26
XMM26
ZMM27
YMM27
XMM27
ZMM28
YMM28
XMM28
ZMM29
YMM29
XMM29
ZMM30
YMM30
XMM30
ZMM31
YMM31
XMM31
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 , conservando ambos operandos de origen. Originalmente, el formato de tres operandos de AVX se limitaba a las instrucciones con operandos SIMD (YMM), y no incluía instrucciones con registros de propósito general (por ejemplo, EAX). Más tarde 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 .
El requisito de alineación de los operandos de memoria SIMD se ha relajado. [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. Cabe destacar que la VMOVDQAinstrucció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 de código de operación , permite que las instrucciones tengan más de dos operandos y permite que los registros de vector SIMD tengan más de 128 bits. El prefijo VEX también se puede utilizar en las instrucciones SSE heredadas, lo que les da una forma de tres operandos y hace que interactúen de manera más eficiente con las instrucciones AVX sin la necesidad de VZEROUPPERy VZEROALL.
Las instrucciones AVX admiten SIMD de 128 y 256 bits. Las versiones de 128 bits pueden ser útiles para mejorar código antiguo sin necesidad de ampliar la vectorización y evitar la penalización de pasar de SSE a AVX. Además, 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 bits y de 256 bits.
Instrucción
Descripción
VBROADCASTSS, VBROADCASTSD,VBROADCASTF128
Copiar un operando de memoria de 32 bits, 64 bits o 128 bits a todos los elementos de un registro vectorial XMM o YMM.
VINSERTF128
Reemplaza la mitad inferior o la mitad superior de un registro YMM de 256 bits con el valor de un operando de origen de 128 bits. La otra mitad del destino permanece inalterada.
VEXTRACTF128
Extrae la mitad inferior o la mitad superior de un registro YMM de 256 bits y copia el valor a un operando de destino de 128 bits.
VMASKMOVPS,VMASKMOVPD
Lee condicionalmente cualquier número de elementos de un operando de memoria vectorial SIMD en un registro de destino, dejando los elementos vectoriales restantes sin leer y estableciendo los elementos correspondientes en el registro de destino a cero. Alternativamente, escribe condicionalmente cualquier número de elementos de un operando de registro vectorial SIMD en un operando de memoria vectorial, dejando los elementos restantes del operando de memoria sin cambios. En la arquitectura del procesador AMD Jaguar, esta instrucción con un operando de origen de memoria tarda más de 300 ciclos de reloj cuando la máscara es cero, en cuyo caso la instrucción no debería hacer nada. Esto parece ser un fallo de diseño. [7]
VPERMILPS,VPERMILPD
Permutar en el carril. Mezclar los elementos vectoriales de 32 o 64 bits de un operando de entrada. Estas son instrucciones de 256 bits en el carril, lo que significa que operan en los 256 bits con dos mezclas separadas de 128 bits, por lo que no pueden mezclar en los carriles de 128 bits. [8]
VPERM2F128
Mezcle los cuatro elementos vectoriales de 128 bits de dos operandos de origen de 256 bits en un operando de destino de 256 bits, con una constante inmediata como selector.
VTESTPS,VTESTPD
Prueba de bits empaquetados de los bits de signo de punto flotante de precisión simple o doble, estableciendo o borrando el indicador ZF basado en AND y el indicador CF basado en ANDN.
VZEROALL
Establezca todos los registros YMM en cero y etiquételos como no utilizados. Se utiliza al cambiar entre el uso de 128 bits y el uso de 256 bits.
VZEROUPPER
Establece la mitad superior de todos los registros YMM en cero. Se utiliza para cambiar entre el uso de 128 bits y el de 256 bits.
El compilador Free Pascal admite AVX y AVX2 con los modificadores -CfAVX y -CfAVX2 a partir de la versión 2.7.1.
RAD Studio (v11.0 Alexandria) admite AVX2 y AVX512. [12]
Las funciones de ensamblaje en línea del 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 (muy compatible con GAS, aunque más general en su manejo de referencias locales dentro del código en línea). GAS admite AVX a partir de la versión 2.19 de binutils. [13]
GCC a partir de la versión 4.6 (aunque hubo 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.
El compilador Vector Pascal admite AVX a través del indicador -cpuAVX32.
El compilador de Visual Studio 2010/2012 admite AVX a través de la configuración intrínseca y el modificador /arch:AVX.
NASM a partir de la versión 2.03 y posteriores. Se corrigieron numerosos errores y se realizaron actualizaciones relacionadas con AVX en la versión 2.04. [14]
Otros ensambladores como MASM versión VS2010, YASM, [15] FASM y JWASM .
Compatibilidad con sistemas operativos
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 correctamente los registros expandidos de AVX entre cambios de contexto . Las siguientes versiones de sistemas operativos admiten AVX:
DragonFly BSD : soporte agregado a principios de 2013.
FreeBSD : se agregó soporte en un parche enviado el 21 de enero de 2012, [16] que se incluyó en la versión estable 9.1. [17]
Linux : compatible desde la versión del kernel 2.6.30, [18] lanzada el 9 de junio de 2009. [19]
macOS : soporte añadido en la actualización 10.6.8 ( Snow Leopard ) [20] [¿ fuente no confiable? ] publicada el 23 de junio de 2011. De hecho, macOS Ventura no admite procesadores x86 sin el conjunto de instrucciones AVX2. [21]
OpenBSD : soporte añadido el 21 de marzo de 2015. [22]
Solaris : compatible con Solaris 10 Update 10 y Solaris 11.
Windows Server 2008 R2 SP1 con Hyper-V requiere una revisión para admitir procesadores AMD AVX (series Opteron 6200 y 4200), KB2568088
Windows XP y Windows Server 2003 no admiten AVX tanto en los controladores del kernel como en las aplicaciones de usuario.
Extensiones vectoriales avanzadas 2
Advanced Vector Extensions 2 (AVX2), también conocida como Haswell New Instructions , [24] es una expansión del conjunto de instrucciones AVX introducido en la microarquitectura Haswell de Intel . AVX2 incluye las siguientes incorporaciones:
Expansión de la mayoría de las instrucciones SSE y AVX de vectores enteros a 256 bits
Recopilar soporte, lo que permite cargar elementos vectoriales desde ubicaciones de memoria no contiguas
Copiar un operando de registro de 32 o 64 bits a todos los elementos de un registro vectorial XMM o YMM. Estas son versiones de registro de las mismas instrucciones en AVX1. Sin embargo, no existe una versión de 128 bits, pero se puede lograr el mismo efecto simplemente utilizando VINSERTF128.
Copiar un registro entero o un operando de memoria de 8, 16, 32 o 64 bits a todos los elementos de un registro vectorial XMM o YMM.
VBROADCASTI128
Copiar un operando de memoria de 128 bits a todos los elementos de un registro vectorial YMM.
VINSERTI128
Reemplaza la mitad inferior o la mitad superior de un registro YMM de 256 bits con el valor de un operando de origen de 128 bits. La otra mitad del destino permanece inalterada.
VEXTRACTI128
Extrae la mitad inferior o la mitad superior de un registro YMM de 256 bits y copia el valor a un operando de destino de 128 bits.
VGATHERDPD, VGATHERQPD, VGATHERDPS,VGATHERQPS
Recopila valores de punto flotante de precisión simple o doble utilizando índices y escalas de 32 o 64 bits.
VPGATHERDD, VPGATHERDQ, VPGATHERQD,VPGATHERQQ
Recopila valores enteros de 32 o 64 bits utilizando índices y escalas de 32 o 64 bits.
VPMASKMOVD,VPMASKMOVQ
Lee condicionalmente cualquier cantidad de elementos de un operando de memoria vectorial SIMD en un registro de destino, dejando los elementos vectoriales restantes sin leer y poniendo a cero los elementos correspondientes en el registro de destino. Alternativamente, escribe condicionalmente cualquier cantidad de elementos de un operando de registro vectorial SIMD en un operando de memoria vectorial, dejando los elementos restantes del operando de memoria sin cambios.
VPERMPS,VPERMD
Mezcle los ocho elementos vectoriales de 32 bits de un operando de origen de 256 bits en un operando de destino de 256 bits, con un registro o operando de memoria como selector.
VPERMPD,VPERMQ
Mezcle los cuatro elementos vectoriales de 64 bits de un operando de origen de 256 bits en un operando de destino de 256 bits, con un registro o operando de memoria como selector.
VPERM2I128
Mezcle (dos de) los cuatro elementos vectoriales de 128 bits de dos operandos de origen de 256 bits en un operando de destino de 256 bits, con una constante inmediata como selector.
VPBLENDD
Versión inmediata de doble palabra de las instrucciones PBLEND de SSE4 .
VPSLLVD,VPSLLVQ
Desplazamiento lógico a la izquierda. Permite desplazamientos variables en los que cada elemento se desplaza según la entrada empaquetada.
VPSRLVD,VPSRLVQ
Desplazamiento lógico a la derecha. Permite desplazamientos variables en los que cada elemento se desplaza según la entrada empaquetada.
VPSRAVD
Desplazamiento aritmético a la derecha. Permite desplazamientos variables en los que cada elemento se desplaza según la entrada empaquetada.
AVX-512 son extensiones de 512 bits para las instrucciones SIMD de Extensiones de Vector Avanzadas de 256 bits para la arquitectura del conjunto de instrucciones x86 propuestas por Intel en julio de 2013. [3]
Las instrucciones AVX-512 están codificadas con el nuevo prefijo EVEX . Permite 4 operandos, 8 nuevos registros de máscara de operaciones 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 registros se incrementa a 512 bits y el recuento total de registros se incrementa a 32 (registros ZMM0-ZMM31) en modo x86-64.
AVX-512 consta de varios subconjuntos de instrucciones, no todos los cuales están pensados para 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 expande la mayoría de las instrucciones de punto flotante SSE-SSE4.1 y AVX/AVX2 de 32 bits y 64 bits con el esquema de codificación EVEX para admitir registros de 512 bits, máscaras de operación, transmisión de parámetros y control de excepciones y redondeo integrados
Instrucciones de detección de conflictos AVX-512 (CD): detección de conflictos eficiente que permite vectorizar más bucles, con el apoyo de Knights Landing [3]
Instrucciones exponenciales y recíprocas (ER) AVX-512: operaciones exponenciales y recíprocas diseñadas para ayudar a implementar operaciones trascendentales, respaldadas por Knights Landing [3]
Instrucciones de precarga (PF) AVX-512: nuevas capacidades de precarga, compatibles con Knights Landing [3]
Extensiones de longitud vectorial (VL) AVX-512: extiende la mayoría de las operaciones AVX-512 para que también funcionen en registros XMM (128 bits) y YMM (256 bits) (incluidos XMM16-XMM31 y YMM16-YMM31 en modo x86-64) [25]
Instrucciones de bytes y palabras (BW) de AVX-512: amplía el AVX-512 para cubrir operaciones con números enteros de 8 y 16 bits [25]
Instrucciones de doble palabra y de cuatro palabras (DQ) AVX-512: operaciones con números enteros de 32 y 64 bits mejoradas [25]
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 palabra (4VNNIW): instrucciones vectoriales para aprendizaje profundo.
AVX-512 Instrucciones vectoriales de precisión simple empaquetadas con acumulación multiplicadora fusionada (4FMAPS) para aprendizaje profundo.
VPOPCNTDQ: recuento de bits establecido en 1. [27]
VPCLMULQDQ – multiplicación sin acarreo de palabras cuádruples. [27]
Instrucciones de red neuronal vectorial (VNNI) AVX-512: instrucciones vectoriales para aprendizaje profundo. [27]
Instrucciones nuevas del campo de Galois (GFNI) del AVX-512: instrucciones vectoriales para calcular el campo de Galois . [27]
Todas las implementaciones solo requieren la extensión de núcleo AVX-512F (AVX-512 Foundation), aunque todas las implementaciones actuales también admiten CD (detección de conflictos). Todos los procesadores centrales con AVX-512 también admiten VL, DQ y BW. Las extensiones de conjunto de instrucciones ER, PF, 4VNNIW y 4FMAPS actualmente solo están implementadas en coprocesadores informáticos Intel.
Las instrucciones SSE/AVX actualizadas en AVX-512F utilizan los mismos mnemónicos 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 byte, palabra, palabra doble y palabra cuádruple (con AVX-512BW/DQ y VBMI). [26] : 23
Tabla de compatibilidad de CPU AVX-512
Subconjunto
F
CD
ES
PF
4FMAPAS
4VNNIW
VPOPCNTDQ
VL
DQ
Blanco y negro
Asociación Internacional de Fabricantes de Maquinaria Agrícolas (IFMA)
AVX-VNNI es una variante con codificación VEX de la extensión del conjunto de instrucciones AVX512-VNNI . De manera similar, AVX-IFMA es una variante con codificación 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 ninguna característica adicional de la codificación EVEX , como difusión, registros de máscara de operaciones o acceso a más de 16 registros vectoriales. Estas extensiones permiten la compatibilidad con operaciones VNNI e IFMA incluso cuando no se implementa la compatibilidad total con AVX-512 en el procesador.
AVX10, anunciado en julio de 2023, [38] es un nuevo conjunto de instrucciones AVX "convergente". Aborda varios problemas de AVX-512, en particular que está dividido en demasiadas partes [39] (20 indicadores de características) y que hace que sea obligatorio admitir vectores de 512 bits. AVX10 presenta una interfaz CPUID simplificada para probar la compatibilidad de instrucciones, que consiste en el 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 de vector disponible (256 o 512 bits). [40] Se utiliza una notación combinada para indicar la versión y la longitud de 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. [41]
La primera y "temprana" versión de AVX10, denominada AVX10.1, no introducirá ninguna instrucción o característica de codificación más allá de lo que ya está en AVX-512 (específicamente, en Intel Sapphire Rapids : AVX-512F, CD, VL, DQ, BW, IFMA, VBMI, VBMI2, BITALG, VNNI, GFNI, VPOPCNTDQ, VPCLMULQDQ, VAES, BF16, FP16). La segunda versión y "completamente funcional", AVX10.2, introduce nuevas características como el redondeo integrado de YMM y la supresión de todas las excepciones. Para las CPU que admiten AVX10 y vectores de 512 bits, todos los indicadores de características heredados de AVX-512 permanecerán configurados para facilitar que las aplicaciones que admiten AVX-512 continúen utilizando las instrucciones de AVX-512. [41]
AVX10.1/512 se lanzó por primera vez en Intel Granite Rapids [41] (tercer trimestre de 2024) y AVX10.2/512 estará disponible en Diamond Rapids. [42]
APX
APX es una nueva extensión. No se centra en el cálculo vectorial, sino que 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. [43] [44]
Aplicaciones
Adecuado para cálculos intensivos de punto flotante en aplicaciones multimedia, científicas y financieras (AVX2 agrega soporte para operaciones con números enteros ).
Aumenta el paralelismo y el rendimiento en los 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 (requiere AVX2, AVX no es suficiente) [45]
Software
Criptografía
Bloombase utiliza AVX, AVX2 y AVX-512 en su módulo criptográfico Bloombase (BCM).
Botan utiliza AVX y AVX2 cuando están disponibles para acelerar algunos algoritmos, como ChaCha.
Los kits de herramientas BSAFE C utilizan AVX y AVX2 cuando es apropiado para acelerar varios algoritmos criptográficos. [46]
Crypto++ utiliza AVX y AVX2 cuando están disponibles para acelerar algunos algoritmos, como Salsa y ChaCha.
OpenSSL utiliza funciones criptográficas optimizadas para AVX y AVX2 desde la versión 1.0.2. [47] Se agregó soporte para AVX-512 en la versión 3.0.0. [48] Algunas de estas optimizaciones también están presentes en varios clones y bifurcaciones, como LibreSSL.
El kernel de Linux puede utilizar AVX o AVX2, junto con AES-NI como implementación optimizada del algoritmo criptográfico AES-GCM .
libjpeg-turbo utiliza AVX2 para acelerar el procesamiento de imágenes.
Ciencia, ingeniería y otros
Esri ArcGIS Data Store utiliza AVX2 para el almacenamiento de gráficos. [54]
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. [55]
dnetc , el software utilizado por distributed.net , tiene un núcleo AVX2 disponible para su proyecto RC5 y pronto lanzará uno para su proyecto OGR-28.
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/video 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 versiones superiores requiere una CPU que admita al menos AVX. [58]
FFTW puede utilizar AVX, AVX2 y AVX-512 cuando estén disponibles.
LLVMpipe, un renderizador de software OpenGL en Mesa que utiliza Gallium y la infraestructura 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, sinf, powf, atanf, atan2f) y de cadena ( memmove, memcpy, etc.) en libc .
POCL, un lenguaje informático portátil que proporciona la 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 System.Numerics.Vectorsespacio de nombres genérico.
.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 AVX, AVX2 a través del System.Runtime.Intrinsics.X86espacio de nombres.
EmEditor 19.0 y versiones superiores utilizan AVX2 para acelerar el procesamiento. [59]
Microsoft Teams utiliza instrucciones AVX2 para crear un fondo borroso o personalizado detrás de los participantes del chat de video, [60] y para la supresión del ruido de fondo. [61]
simdjson, una biblioteca de análisis JSON , utiliza AVX2 y AVX-512 para lograr una velocidad de decodificación mejorada. [62] [63]
x86-simd-sort, una biblioteca con algoritmos de ordenamiento 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 ordenamiento. [64]
zlib-ng, una versión optimizada de zlib , contiene versiones AVX2 y AVX-512 de algunos algoritmos de compresión de datos.
El motor OCR Tesseract utiliza AVX, AVX2 y AVX-512 para acelerar el reconocimiento de caracteres. [65]
Reducción de velocidad
Como las instrucciones AVX son más anchas, consumen más energía y generan más calor. La ejecución de instrucciones AVX pesadas a altas frecuencias de reloj de la CPU puede afectar la estabilidad de la CPU debido a una caída excesiva de voltaje durante los transitorios de carga. Algunos procesadores Intel tienen disposiciones para reducir el límite de frecuencia de Turbo Boost cuando se ejecutan dichas instrucciones. Esta reducción ocurre incluso si la CPU no ha alcanzado sus límites térmicos y de consumo de energía. En Skylake y sus derivados, la limitación se divide en tres niveles: [66] [67]
L0 (100%): El límite normal de potencia del turbo.
L1 (~85 %): límite de "aumento de AVX". Activación suave mediante instrucciones "pesadas" de 256 bits (unidad de punto flotante: matemáticas de coma flotante y multiplicación de enteros). Activación dura mediante instrucciones "livianas" (todas las demás) de 512 bits.
L2 (~60%): [ dudoso – discutir ] El límite de "aumento de AVX-512". Activado de forma suave por 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 una instrucción de este tipo; 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. [66]
L0 (100%): El límite normal de potencia del turbo.
L1 (~97%): se activa con 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 cualquier tipo de instrucción vectorial, independientemente del tamaño del vector. [68] Sin embargo, la reducción de la frecuencia aún puede ocurrir debido a otras razones, como alcanzar los límites térmicos y de potencia.
La reducción de la frecuencia de reloj 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 el uso de operandos de 256 o 128 bits en las instrucciones AVX-512, lo que lo convierte en una opción predeterminada sensata para cargas mixtas. [69]
En las variantes compatibles y desbloqueadas de procesadores que reducen la frecuencia del reloj, las compensaciones de reducción de la relación de reloj (normalmente llamadas compensaciones AVX y AVX-512) son ajustables y se pueden desactivar por completo (establecer en 0x) a través de la utilidad de Overclocking/Tuning de Intel o en el BIOS si es compatible allí. [70]
^ 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". ExtremeTech . 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) (edición -051US). Intel Corporation. pág. 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 creadores 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 adelanto de Nehalem y Larrabee". ExtremeTech. 17 de marzo de 2008.
^ ab "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 .
^ Butler, Michael; Barnes, Leslie; Das Sarma, Debjit; Gelinas, Bob (marzo-abril de 2011). "Bulldozer: un enfoque para el rendimiento informático multiproceso" (PDF) . IEEE Micro . 31 (2): 6–15. doi :10.1109/MM.2011.23. S2CID 28236214. Archivado desde el original (PDF) el 19 de mayo de 2024.
^ "Novedades - RAD Studio". docwiki.embarcadero.com . Consultado el 17 de septiembre de 2021 .
^ "Cambios en el GAS". sourceware.org . Consultado el 3 de mayo de 2024 .
^ ab "NASM - El ensamblador de red, Apéndice C: Historial de versiones de NASM". nasm.us . Consultado el 3 de mayo de 2024 .
^ "Notas de la versión de YASM 0.7.0". yasm.tortall.net .
^ Añadir compatibilidad con estados FPU extendidos en amd64, tanto para ABIs 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: agrega compatibilidad del kernel de Linux con el estado YMM , consultado el 13 de julio de 2009
^ Linux 2.6.30 - Linux Kernel Newbies , consultado el 13 de julio de 2009
^ Twitter , consultado el 23 de junio de 2010
^ "Los desarrolladores están logrando avances para que macOS Ventura funcione en Macs de hace una década que no cuentan con soporte". 23 de agosto de 2022.
^ Agregar soporte para guardar/restaurar el estado de la FPU usando XSAVE/XRSTOR. , recuperado el 25 de marzo de 2015
^ Compatibilidad de punto flotante para controladores de 64 bits , consultado el 6 de diciembre de 2009
^ Nuevas descripciones de instrucciones de Haswell ya 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 la arquitectura Intel" (PDF) . Intel . Consultado el 29 de enero de 2014 .
^ abcdefg "Referencia de programación de extensiones y características futuras 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 .
^ Alcorn, Paul (2 de marzo de 2022). "Intel acaba con el soporte AVX-512 de Alder Lake y ahora lo fusiona en silicio". Tom's Hardware . Consultado el 7 de marzo de 2022 .
^ Cutress, Ian; Frumusanu, Andrei (19 de agosto de 2021). "Día de la arquitectura de Intel 2021: Alder Lake, Golden Cove y Gracemont detallados". AnandTech . Consultado el 25 de agosto de 2021 .
^ Alcorn, Paul (19 de agosto de 2021). «Día de la arquitectura de Intel 2021: chips Alder Lake, núcleos Golden Cove y Gracemont». Tom's Hardware . Consultado el 21 de agosto de 2021 .
^ Cutress, Ian; Frumusanu, Andrei. "Análisis del procesador Intel Core i9-12900K de 12.ª generación: el rendimiento híbrido aporta complejidad híbrida". www.anandtech.com . Consultado el 5 de noviembre de 2021 .
^ "Notas de la versión de LLVM 3.9 — Documentación de LLVM 3.9". releases.llvm.org . Consultado el 3 de abril de 2017 .
^ "Serie de versiones GCC 4.9: cambios, nuevas características y correcciones - Proyecto GNU - Free Software Foundation (FSF)". gcc.gnu.org . Consultado el 3 de abril de 2017 .
^ "Notas de la versión de Intel® Parallel Studio XE 2015 Composer Edition C++ | Intel® Software". 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.
^ "Se publicó el soporte del compilador AMD Zen 5 para GCC: confirma nuevas funciones de AVX y más". www.phoronix.com . Consultado el 10 de febrero de 2024 .
^ Bonshor, Gavin (25 de julio de 2023). "Intel presenta los conjuntos de instrucciones AVX10 y APX: unificación de AVX-512 para arquitecturas híbridas". AnandTech . Consultado el 21 de agosto de 2024 .
^ Mann, Tobias (15 de agosto de 2023). "El AVX10 de Intel promete los beneficios del AVX-512 sin complicaciones". www.theregister.com . Consultado el 20 de agosto de 2023 .
^ "El ISA vectorial convergente: documento técnico sobre las extensiones vectoriales avanzadas de Intel® 10". Intel .
^ Larabel, Michael (23 de octubre de 2024). "Intel prepara el compilador GCC para las nuevas características de AMX e ISA antes de Diamond Rapids". Phoronix . Consultado el 23 de octubre de 2024 .
^ "Especificación de la arquitectura Intel® Advanced Performance Extensions (Intel® APX)". Intel.
^ Robinson, Dan (26 de julio de 2023). «Intel revela instrucciones x86 y vectoriales para chips futuros». www.theregister.com . Consultado el 20 de agosto de 2023 .
^ "Linux RAID". LWN. 17 de febrero de 2013. Archivado desde el original el 15 de abril de 2013.
^ "Comparación de las implementaciones de la biblioteca criptográfica BSAFE". 25 de julio de 2023.
^ "Mejora del rendimiento de OpenSSL". 26 de mayo de 2015. Consultado el 28 de febrero de 2017 .
^ "Notas de la versión 3.0.0 de OpenSSL". GitHub . 7 de septiembre de 2021.
^ 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 .
^ "MASSIVE X requiere un procesador compatible con AVX". Native Instruments . Consultado el 29 de noviembre de 2019 .
^ "dav1d: rendimiento y finalización del primer lanzamiento". 21 de noviembre de 2018. Consultado el 22 de noviembre de 2018 .
^ "Notas de la versión 0.6.0 de dav1d". 6 de marzo de 2020.
^ "Notas de la versión 0.7.0 de SVT-AV1". 26 de septiembre de 2019.
^ "Requisitos del sistema de ArcGIS Data Store 11.2". ArcGIS Enterprise . Consultado el 24 de enero de 2024 .
^ "Notas de la versión de Prime95" . Consultado el 10 de julio de 2022 .
^ "Aplicaciones de Einstein@Home".
^ "Preguntas frecuentes, Helios". Helios . Consultado el 5 de julio de 2021 .
^ Novedades de la versión 19.0: EmEditor (editor de texto)
^ "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 técnico de Microsoft . Consultado el 5 de enero de 2021 .
^ Langdale, Geoff; Lemire, Daniel (2019). "Análisis de gigabytes de JSON por segundo". The VLDB Journal . 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". Phoronix .
^ Larabel, Michael (7 de julio de 2022). "El motor Tesseract OCR 5.2 logra el éxito con AVX-512F". Phoronix .
^ ab Lemire, Daniel (7 de septiembre de 2018). "AVX-512: cuándo y cómo utilizar estas nuevas instrucciones". Blog de Daniel Lemire .
^ BeeOnRope. "Instrucciones SIMD que reducen la frecuencia de la CPU". Desbordamiento de pila .
^ ab Downs, Travis (19 de agosto de 2020). "Reducción de frecuencia del Ice Lake AVX-512". Blog Performance Matters .
^ "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 . Consulte la imagen en la sección vinculada, donde la relación AVX2 se ha establecido en 0.