AVX-512 son extensiones de 512 bits de las instrucciones SIMD de Extensiones de Vector Avanzadas de 256 bits para la arquitectura del conjunto de instrucciones (ISA) x86 propuestas por Intel en julio de 2013, e implementadas por primera vez en el Intel Xeon Phi x200 (Knights Landing) de 2016, [1] y luego en una serie de CPU AMD y otras CPU Intel (consulte la lista a continuación). AVX-512 consta de múltiples extensiones que se pueden implementar de forma independiente. [2] Esta política es una desviación del requisito histórico de implementar todo el bloque de instrucciones. Solo la extensión principal AVX-512F (AVX-512 Foundation) es requerida por todas las implementaciones de AVX-512.
Además de ampliar la mayoría de las instrucciones de 256 bits, las extensiones introducen varias operaciones nuevas, como nuevas conversiones de datos, operaciones de dispersión y permutaciones. [2] El número de registros AVX se incrementa de 16 a 32, y se agregan ocho nuevos "registros de máscara", que permiten la selección variable y la combinación de los resultados de las instrucciones. En las CPU con la extensión de longitud vectorial (VL), incluida en la mayoría de los procesadores compatibles con AVX-512 (consulte § CPU con AVX-512), estas instrucciones también se pueden usar en tamaños de vector de 128 y 256 bits.
AVX-512 no es el primer conjunto de instrucciones SIMD de 512 bits que Intel ha introducido en los procesadores: las instrucciones SIMD de 512 bits anteriores utilizadas en los coprocesadores Xeon Phi de primera generación , derivados del proyecto Larrabee de Intel , son similares pero no son compatibles a nivel binario y solo son parcialmente compatibles con el código fuente. [1]
El sucesor del AVX-512 es el AVX10 , anunciado en julio de 2023, [3] que funcionará en núcleos de rendimiento y eficiencia .
El conjunto de instrucciones del AVX-512 consta de varios conjuntos separados, cada uno con su propio bit de función CPUID exclusivo. Sin embargo, normalmente se agrupan por la generación del procesador que los implementa.
F, CD, ER, PF: se introdujeron con Xeon Phi x200 (Knights Landing) y Xeon Gold/Platinum ( Skylake SP "Purley"), y los dos últimos (ER y PF) son específicos de Knights Landing.
VL, DQ, BW: introducidos con Skylake X y Cannon Lake .
IFMA, VBMI: introducido con Cannon Lake . [5]
4VNNIW, 4FMAPS: introducido con Knights Mill . [6] [7]
VPOPCNTDQ: Instrucción de recuento de población de vectores . Introducida con Knights Mill y Ice Lake . [8]
VNNI, VBMI2, BITALG: introducidos con Ice Lake. [8]
VP2INTERSECT: introducido con Tiger Lake.
GFNI, VPCLMULQDQ, VAES: introducidos con Ice Lake. [8]
El prefijo VEX utilizado por AVX y AVX2, si bien era flexible, no dejaba suficiente espacio para las características que Intel quería agregar a AVX-512. Esto los llevó a definir un nuevo prefijo llamado EVEX .
En comparación con VEX, EVEX agrega los siguientes beneficios: [7]
Los registros extendidos, el bit de ancho SIMD y los registros de máscara de operación de AVX-512 son obligatorios y todos requieren soporte del sistema operativo.
Las instrucciones AVX-512 están diseñadas para combinarse con instrucciones AVX/AVX2 de 128/256 bits sin afectar el rendimiento. Sin embargo, las extensiones AVX-512VL permiten el uso de instrucciones AVX-512 en registros XMM/YMM de 128/256 bits, por lo que la mayoría de las instrucciones SSE y AVX/AVX2 tienen nuevas versiones AVX-512 codificadas con el prefijo EVEX que permiten el acceso a nuevas funciones como opmask y registros adicionales. A diferencia de AVX-256, las nuevas instrucciones no tienen nuevos mnemónicos, pero comparten espacio de nombres con AVX, lo que hace que la distinción entre las versiones codificadas VEX y EVEX de una instrucción sea ambigua en el código fuente. Dado que AVX-512F solo funciona en valores de 32 y 64 bits, las instrucciones SSE y AVX/AVX2 que operan en bytes o palabras solo están disponibles con la extensión AVX-512BW (soporte de bytes y palabras). [7]
El ancho del archivo de registros SIMD se incrementa de 256 bits a 512 bits, y se expande de 16 a un total de 32 registros ZMM0–ZMM31. Estos registros se pueden direccionar como registros YMM de 256 bits desde las extensiones AVX y registros XMM de 128 bits desde las extensiones Streaming SIMD , y las instrucciones AVX y SSE heredadas se pueden extender para operar en los 16 registros adicionales XMM16-XMM31 y YMM16-YMM31 cuando se usa el formato codificado EVEX.
Las instrucciones vectoriales AVX-512 pueden indicar un registro de máscara de operaciones para controlar qué valores se escriben en el destino; la codificación de instrucciones admite 0–7 para este campo; sin embargo, solo los registros de máscara de operaciones k1–k7 (de k0–k7) se pueden usar como la máscara correspondiente al valor 1–7, mientras que el valor 0 se reserva para indicar que no se usa ningún registro de máscara de operaciones, es decir, se usa una constante codificada (en lugar de 'k0') para indicar operaciones sin máscara. El registro de máscara de operaciones especial 'k0' sigue siendo un registro válido y funcional; se puede usar en instrucciones de manipulación de registros de máscara de operaciones o como registro de máscara de operaciones de destino. [9] Una bandera controla el comportamiento de la máscara de operaciones, que puede ser "cero", que pone a cero todo lo que no está seleccionado por la máscara, o "combinar", que deja todo lo que no está seleccionado intacto. El comportamiento de combinación es idéntico a las instrucciones de combinación.
Los registros de máscara de operación normalmente tienen 16 bits de ancho, pero pueden tener hasta 64 bits con la extensión AVX-512BW. [7] Sin embargo, la cantidad de bits que se utilizan realmente depende del tipo de vector de las instrucciones enmascaradas. Para las palabras dobles o de punto flotante simple de 32 bits, se utilizan 16 bits para enmascarar los 16 elementos en un registro de 512 bits. Para las palabras cuádruples y de punto flotante doble, se utilizan como máximo 8 bits de máscara.
El registro opmask es la razón por la que se agregaron varias instrucciones bit a bit que naturalmente no tienen anchos de elementos en AVX-512. Por ejemplo, las operaciones AND, OR o shuffle de 128 bits a nivel de bit ahora existen en variantes de palabras dobles y de palabras cuádruples, con la única diferencia en el enmascaramiento final.
Los registros opmask tienen una nueva mini extensión de instrucciones que operan directamente sobre ellos. A diferencia del resto de las instrucciones del AVX-512, estas instrucciones están todas codificadas en VEX. Las instrucciones opmask iniciales son todas versiones de 16 bits (Word). Con el AVX-512DQ se agregaron versiones de 8 bits (Byte) para satisfacer mejor las necesidades de enmascaramiento de 8 valores de 64 bits, y con el AVX-512BW se agregaron versiones de 32 bits (Double) y 64 bits (Quad) para que puedan enmascarar hasta 64 valores de 8 bits. Las instrucciones KORTEST y KTEST se pueden usar para configurar los indicadores x86 basados en registros de máscara, de modo que se puedan usar junto con instrucciones condicionales y de ramificación x86 que no sean SIMD.
Muchas de las instrucciones AVX-512 son simplemente versiones EVEX de las antiguas instrucciones SSE o AVX. Sin embargo, hay varias instrucciones nuevas e instrucciones antiguas que han sido reemplazadas por nuevas versiones AVX-512. Las instrucciones nuevas o modificadas en gran medida se enumeran a continuación. Estas instrucciones básicas también incluyen las extensiones de AVX-512VL y AVX-512BW, ya que esas extensiones simplemente agregan nuevas versiones de estas instrucciones en lugar de nuevas instrucciones.
No existen versiones con prefijo EVEX de las instrucciones de combinación de SSE4 ; en su lugar, AVX-512 tiene un nuevo conjunto de instrucciones de combinación que utilizan registros de máscara como selectores. Junto con las instrucciones generales de comparación en máscara que se indican a continuación, se pueden utilizar para implementar operaciones ternarias genéricas o cmov, similares a VPCMOV de XOP .
Dado que la combinación es una parte integral de la codificación EVEX, estas instrucciones también pueden considerarse instrucciones de movimiento básicas. Si se utiliza el modo de combinación de puesta a cero, también pueden utilizarse como instrucciones de enmascaramiento.
AVX-512F tiene cuatro nuevas instrucciones de comparación. Al igual que sus contrapartes XOP , utilizan el campo inmediato para seleccionar entre 8 comparaciones diferentes. Sin embargo, a diferencia de su inspiración XOP, guardan el resultado en un registro de máscara e inicialmente solo admiten comparaciones de palabras dobles y cuádruples. La extensión AVX-512BW proporciona las versiones de bytes y palabras. Tenga en cuenta que se pueden especificar dos registros de máscara para las instrucciones, uno para escribir y otro para declarar el enmascaramiento regular. [7]
La última forma de configurar máscaras es mediante el uso de Logical Set Mask. Estas instrucciones realizan AND o NAND y luego configuran la máscara de operación de destino en función de que los valores del resultado sean cero o distintos de cero. Tenga en cuenta que, al igual que las instrucciones de comparación, estas toman dos registros de máscara de operación, uno como destino y otro como máscara de operación normal.
Las instrucciones de compresión y expansión coinciden con las operaciones APL del mismo nombre. Utilizan la máscara de operaciones de una forma ligeramente diferente a otras instrucciones AVX-512. La compresión solo guarda los valores marcados en la máscara, pero los guarda compactados omitiendo y sin reservar espacio para los valores no marcados. La expansión funciona de forma opuesta, cargando tantos valores como se indica en la máscara y luego distribuyéndolos a las posiciones seleccionadas.
Se ha añadido un nuevo conjunto de instrucciones de permutación para permutaciones completas de dos entradas. Todas ellas toman tres argumentos, dos registros de origen y un índice; el resultado se obtiene sobrescribiendo el primer registro de origen o el registro de índice. AVX-512BW amplía las instrucciones para incluir también versiones de 16 bits (palabras), y la extensión AVX-512_VBMI define las versiones de bytes de las instrucciones.
Se han añadido dos nuevas instrucciones que pueden implementar de forma lógica todas las operaciones posibles a nivel de bits entre tres entradas. Estas instrucciones toman tres registros como entrada y un campo inmediato de 8 bits. Cada bit de la salida se genera mediante una búsqueda de los tres bits correspondientes en las entradas para seleccionar una de las 8 posiciones en el campo inmediato de 8 bits. Dado que solo son posibles 8 combinaciones utilizando tres bits, esto permite que se realicen todas las posibles operaciones a nivel de bits con 3 entradas. [7] Estas son las únicas instrucciones vectoriales a nivel de bits en AVX-512F; las versiones EVEX de las dos instrucciones vectoriales a nivel de bits de AVX y SSE de origen AND, ANDN, OR y XOR se añadieron en AVX-512DQ.
La diferencia entre las versiones de doble palabra y de cuatro palabras es solo la aplicación de la máscara de operación.
Se agregaron varias instrucciones de conversión o movimiento; éstas completan el conjunto de instrucciones de conversión disponibles en SSE2.
Entre las nuevas características exclusivas de AVX-512F se encuentran las instrucciones para descomponer valores de punto flotante y manejar valores de punto flotante especiales . Como estos métodos son completamente nuevos, también existen en versiones escalares.
Este es el segundo conjunto de nuevos métodos de punto flotante, que incluye un nuevo escalamiento y cálculo aproximado de recíprocos y de raíces cuadradas. Las instrucciones de recíprocos aproximados garantizan un error relativo de 2 −14 como máximo . [7]
Las instrucciones de detección de conflictos AVX-512 (AVX-512CD) están diseñadas para ayudar a calcular de manera eficiente subconjuntos de elementos libres de conflictos en bucles que normalmente no podrían vectorizarse de manera segura. [10]
Las instrucciones exponenciales y recíprocas AVX-512 (AVX-512ER) contienen instrucciones recíprocas aproximadas más precisas que las del modelo básico AVX-512; el error relativo es de 2 −28 como máximo. También contienen dos nuevas funciones exponenciales que tienen un error relativo de 2 −23 como máximo . [7]
Las instrucciones de precarga AVX-512 (AVX-512PF) contienen nuevas operaciones de precarga para la nueva funcionalidad de dispersión y recopilación introducida en AVX2 y AVX-512. T0
precarga significa precarga en caché de nivel 1 y T1
significa precarga en caché de nivel 2.
Los dos conjuntos de instrucciones realizan múltiples iteraciones de procesamiento. Por lo general, solo se encuentran en productos Xeon Phi.
AVX-512DQ agrega nuevas instrucciones de doble palabra y de cuatro palabras. AVX-512BW agrega versiones de bytes y palabras de las mismas instrucciones, y agrega versiones de bytes y palabras de instrucciones de doble palabra/cuatro palabras en AVX-512F. Algunas instrucciones que solo obtienen formas de palabra con AVX-512BW adquieren formas de bytes con la extensión AVX-512_VBMI ( VPERMB
, VPERMI2B
, VPERMT2B
, VPMULTISHIFTQB
).
Se añadieron dos nuevas instrucciones al conjunto de instrucciones de máscara: KADD
y KTEST
(formas B y W con AVX-512DQ, D y Q con AVX-512BW). El resto de instrucciones de máscara, que solo tenían formas de palabra, obtuvieron formas de byte con AVX-512DQ y formas de palabra doble/palabra cuádruple con AVX-512BW. KUNPCKBW
se amplió a KUNPCKWD
y KUNPCKDQ
por AVX-512BW.
Entre las instrucciones agregadas por AVX-512DQ hay varias instrucciones SSE y AVX que no obtuvieron versiones AVX-512 con AVX-512F, entre ellas están todas las instrucciones de dos bits de entrada y las instrucciones de extracción/inserción de enteros.
A continuación se describen instrucciones completamente nuevas.
Se introducen tres nuevas operaciones de punto flotante. Dado que no solo son nuevas en AVX-512, existen versiones empaquetadas/SIMD y escalares.
Las VFPCLASS
instrucciones prueban si el valor de punto flotante es uno de ocho valores de punto flotante especiales, cuál de los ocho valores activará un bit en el registro de máscara de salida que está controlado por el campo inmediato. Las VRANGE
instrucciones realizan operaciones mínimas o máximas dependiendo del valor del campo inmediato, que también puede controlar si la operación se realiza de forma absoluta o no y por separado cómo se maneja el signo. Las VREDUCE
instrucciones operan sobre una única fuente y restan de ella la parte entera del valor de la fuente más una cantidad de bits especificada en el campo inmediato de su fracción.
Amplíe VPCOMPRESS y VPEXPAND con variantes de bytes y palabras. Las instrucciones de desplazamiento son nuevas.
Instrucciones de red neuronal vectorial: [11] AVX512-VNNI agrega instrucciones con codificación EVEX que se describen a continuación. Con AVX-512F, estas instrucciones pueden funcionar con vectores de 512 bits y AVX-512VL agrega además compatibilidad con vectores de 128 y 256 bits.
Una extensión posterior de AVX-VNNI agrega codificaciones VEX de estas instrucciones que solo pueden funcionar en vectores de 128 o 256 bits. AVX-VNNI no forma parte de la suite AVX-512, no requiere AVX-512F y se puede implementar de forma independiente.
Instrucciones de multiplicación y suma fusionadas con números enteros. AVX512-IFMA agrega instrucciones con codificación EVEX que se describen a continuación.
Una extensión independiente del conjunto de instrucciones AVX-IFMA define la codificación VEX de estas instrucciones. Esta extensión no forma parte del conjunto AVX-512 y se puede implementar de forma independiente.
Las nuevas instrucciones del campo de Galois son útiles para la criptografía, [12] ya que se pueden utilizar para implementar cajas S de estilo Rijndael como las utilizadas en AES, Camellia y SM4 . [13] Estas instrucciones también se pueden utilizar para la manipulación de bits en redes y procesamiento de señales. [12]
GFNI es una extensión de conjunto de instrucciones independiente y se puede habilitar por separado de AVX o AVX-512. Según si la CPU indica compatibilidad con AVX y AVX-512F, la compatibilidad con GFNI permite instrucciones codificadas con (SSE), VEX o EVEX heredadas que funcionan en vectores de 128, 256 o 512 bits.
VPCLMULQDQ con AVX-512F agrega una versión de 512 bits codificada con EVEX de la instrucción PCLMULQDQ . Con AVX-512VL, agrega versiones de 256 y 128 bits codificadas con EVEX. VPCLMULQDQ solo (es decir, en CPU que no sean AVX512) agrega solo la versión de 256 bits codificada con VEX. (La disponibilidad de la versión de 128 bits codificada con VEX se indica mediante diferentes bits de CPUID: PCLMULQDQ y AVX). Las variaciones de la instrucción que superan los 128 bits realizan la misma operación en cada porción de 128 bits de los registros de entrada, pero no la extienden para seleccionar palabras cuádruples de diferentes campos de 128 bits (el significado del operando imm8 es el mismo: se selecciona la palabra cuádruple baja o alta del campo de 128 bits).
Instrucciones AES codificadas con VEX y EVEX . Las variantes de la instrucción con un ancho de banda superior a 128 bits realizan la misma operación en cada porción de 128 bits de los registros de entrada. Las versiones VEX se pueden utilizar sin compatibilidad con AVX-512.
Instrucciones de aceleración de IA que operan en los números Bfloat16 .
Una extensión del conjunto de instrucciones F16C anterior , que agrega soporte integral para los números de punto flotante binary16 (también conocidos como FP16, float16 o números de punto flotante de precisión media). Las nuevas instrucciones implementan la mayoría de las operaciones que estaban disponibles anteriormente para números de punto flotante de precisión simple y doble y también introducen nuevas instrucciones de números complejos e instrucciones de conversión. Se admiten operaciones escalares y empaquetadas.
A diferencia de las instrucciones de formato de precisión simple y doble, los operandos de precisión media no se ponen a cero de manera condicional ( FTZ ) ni se tratan como cero de manera condicional ( DAZ ) según MXCSR
los ajustes. Los valores subnormales se procesan a toda velocidad por hardware para facilitar el uso del rango dinámico completo de los números FP16. Las instrucciones que crean números FP32 y FP64 aún respetan el MXCSR.FTZ
bit. [14]
^Nota 1 : Intel no admite oficialmente la familia de instrucciones AVX-512 en losmicroprocesadores Alder Lake . A principios de 2022, Intel comenzó a deshabilitar AVX-512 en el silicio (desactivación) en los microprocesadores Alder Lake para evitar que los clientes lo habilitaran. [35] En las CPU de la familia Alder Lake más antiguas con algunas combinaciones heredadas de revisiones de BIOS y microcódigo, era posible ejecutar instrucciones de la familia AVX-512 al deshabilitar todos los núcleos de eficiencia que no contienen el silicio para AVX-512. [36] [37] [24]
Intel Vectorization Advisor (a partir de la versión 2017) admite el análisis nativo de calidad de código vectorial y rendimiento de AVX-512 (para procesadores "Core", Xeon e Intel Xeon Phi ). Junto con el perfil de puntos de acceso tradicional, las recomendaciones de Advisor y la integración "perfecta" de los diagnósticos de vectorización de Intel Compiler, el análisis de Advisor Survey también proporciona métricas ISA de AVX-512 y nuevos "rasgos" específicos de AVX-512, por ejemplo, dispersión, compresión/expansión, utilización de máscara. [38] [39]
En algunos procesadores (principalmente los Intel anteriores a Ice Lake ), las instrucciones AVX-512 pueden provocar una limitación de frecuencia incluso mayor que sus predecesores, lo que genera una penalización para cargas de trabajo mixtas. La reducción de frecuencia adicional se activa por el ancho de 512 bits de los vectores y depende de la naturaleza de las instrucciones que se ejecutan; el uso de la parte de 128 o 256 bits de AVX-512 (AVX-512VL) no la activa. Como resultado, gcc y clang prefieren usar los vectores de 256 bits para los objetivos Intel de forma predeterminada. [40] [41] [42]
Los compiladores de C/ C++ también manejan automáticamente el desenrollado de bucles y previenen bloqueos en la tubería para usar AVX-512 de manera más efectiva, lo que significa que un programador que usa intrínsecos del lenguaje para intentar forzar el uso de AVX-512 a veces puede resultar en un peor rendimiento en relación con el código generado por el compilador cuando encuentra bucles escritos claramente en el código fuente. [43] En otros casos, usar intrínsecos de AVX-512 en código C/C++ puede resultar en una mejora del rendimiento en relación con C/C++ escrito claramente. [44]
Hay muchos ejemplos de aplicaciones de AVX-512 , incluido el procesamiento de medios, la criptografía, los videojuegos , [45] redes neuronales , [46] e incluso OpenJDK , que emplea AVX-512 para clasificación . [47]
En una cita muy citada de 2020, Linus Torvalds dijo: "Espero que AVX-512 muera una muerte dolorosa y que Intel comience a solucionar problemas reales en lugar de intentar crear instrucciones mágicas para luego crear puntos de referencia en los que puedan verse bien", [48] afirmando que preferiría que el presupuesto de transistores se gastara en núcleos adicionales y rendimiento de números enteros, y que "detesta" los puntos de referencia de punto flotante . [49]
Numenta promociona su tecnología de red neuronal "altamente dispersa " [50] , que según ellos elimina la necesidad de GPU ya que sus algoritmos se ejecutan en CPU con AVX-512. [51] Afirman una aceleración diez veces mayor en relación con A100 en gran parte porque sus algoritmos reducen el tamaño de la red neuronal, al mismo tiempo que mantienen la precisión , mediante técnicas como el algoritmo Sparse Evolutionary Training (SET) [52] y Foresight Pruning. [53]
Los procesadores x86-64 más nuevos también admiten las nuevas instrucciones de campo Galois (GFNI), que permiten implementar Camellia s-box de una manera más sencilla y ofrecen un rendimiento aún mejor.
{{cite web}}
: CS1 maint: URL no apta ( enlace )