stringtranslate.com

Extensiones vectoriales avanzadas

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:

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 aa + b ahora puede utilizar una forma no destructiva de tres operandos ca + 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 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 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 VZEROUPPERy 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

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 .

Soporte para compiladores y ensambladores

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:

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:

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

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:

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

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

Software

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]

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]

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

  1. ^ Kanter, David (25 de septiembre de 2010). "Microarquitectura Sandy Bridge de Intel". www.realworldtech.com . Consultado el 17 de febrero de 2018 .
  2. ^ 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 .
  3. ^ abcde James Reinders (23 de julio de 2013), Instrucciones AVX-512, Intel , consultado el 20 de agosto de 2013
  4. ^ "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 .
  5. ^ "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).
  6. ^ "Opciones i386 y x86-64: uso de la colección de compiladores GNU (GCC)" . Consultado el 9 de febrero de 2014 .
  7. ^ "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 .
  8. ^ "Programación de ajedrez AVX2". Archivado desde el original el 10 de julio de 2017 . Consultado el 17 de octubre de 2016 .
  9. ^ "Intel ofrece un vistazo a Nehalem y Larrabee". Tecnología extrema. 17 de marzo de 2008.
  10. ^ "Procesador Intel Core i7-3960X Extreme Edition" . Consultado el 17 de enero de 2012 .
  11. ^ 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 .
  12. ^ "¿Un procesador con AVX2 o AVX-512 admite instrucciones AVX?". ark.intel.com . Consultado el 27 de abril de 2022 .
  13. ^ 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
  14. ^ Nuevas instrucciones "Bulldozer" y "Piledriver" (PDF) , AMD, octubre de 2012
  15. ^ "Novedades: RAD Studio". docwiki.embarcadero.com . Consultado el 17 de septiembre de 2021 .
  16. ^ "Notas de la versión de YASM 0.7.0". yasm.tortall.net .
  17. ^ 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
  18. ^ "Anuncio de lanzamiento de FreeBSD 9.1" . Consultado el 20 de mayo de 2013 .
  19. ^ x86: agregue soporte del kernel de Linux para el estado YMM , consultado el 13 de julio de 2009
  20. ^ Linux 2.6.30: novatos en el kernel de Linux , consultado el 13 de julio de 2009
  21. ^ Gorjeo , consultado el 23 de junio de 2010
  22. ^ "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.
  23. ^ Agregue soporte para guardar/restaurar el estado de FPU usando XSAVE/XRSTOR. , consultado el 25 de marzo de 2015
  24. ^ Compatibilidad con punto flotante para controladores de 64 bits , consultado el 6 de diciembre de 2009
  25. ^ Las nuevas descripciones de instrucciones de Haswell ya están disponibles, Software.intel.com , consultado el 17 de enero de 2012
  26. ^ abc James Reinders (17 de julio de 2014). "Instrucciones adicionales de AVX-512". Intel . Consultado el 3 de agosto de 2014 .
  27. ^ ab "Referencia de programación de extensiones del conjunto de instrucciones de arquitectura Intel" (PDF) . Intel . Consultado el 29 de enero de 2014 .
  28. ^ 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 .
  29. ^ "Emulador de desarrollo de software Intel® | Software Intel®". software.intel.com . Consultado el 11 de junio de 2016 .
  30. ^ 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 .
  31. ^ 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 .
  32. ^ "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 .
  33. ^ "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 .
  34. ^ "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 .
  35. ^ "Microsoft Visual Studio 2017 es compatible con Intel® AVX-512". 11 de julio de 2017.
  36. ^ 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 .
  37. ^ "El vector convergente ISA: documento técnico Intel® Advanced Vector Extensions 10". Intel .
  38. ^ abc "Especificación de arquitectura Intel® Advanced Vector Extensions 10 (Intel® AVX10)". Intel .
  39. ^ "Especificación de arquitectura Intel® Advanced Performance Extensions (Intel® APX)". Intel.
  40. ^ 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 .
  41. ^ "RAID de Linux". LWN. 17 de febrero de 2013. Archivado desde el original el 15 de abril de 2013.
  42. ^ 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 .
  43. ^ "Comparación de implementaciones de bibliotecas criptográficas BSAFE". 25 de julio de 2023.
  44. ^ "Requisitos del sistema ArcGIS Data Store 11.2". Empresa ArcGIS . Consultado el 24 de enero de 2024 .
  45. ^ "Mejora del rendimiento de OpenSSL". 26 de mayo de 2015 . Consultado el 28 de febrero de 2017 .
  46. ^ "Notas de la versión de OpenSSL 3.0.0". GitHub . 7 de septiembre de 2021.
  47. ^ "Notas de la versión de Prime95" . Consultado el 10 de julio de 2022 .
  48. ^ "dav1d: rendimiento y finalización de la primera versión". 21 de noviembre de 2018 . Consultado el 22 de noviembre de 2018 .
  49. ^ "notas de la versión de dav1d 0.6.0". 6 de marzo de 2020.
  50. ^ "Notas de la versión de SVT-AV1 0.7.0". 26 de septiembre de 2019.
  51. ^ "Aplicaciones Einstein@Home".
  52. ^ "Preguntas frecuentes, Helios". Helios . Consultado el 5 de julio de 2021 .
  53. ^ "Tensorflow 1.6". GitHub .
  54. ^ Nuevo en la versión 19.0: EmEditor (editor de texto)
  55. ^ "MASSIVE X requiere un procesador compatible con AVX". Instrumentos nativos . Consultado el 29 de noviembre de 2019 .
  56. ^ "Requisitos de hardware para Microsoft Teams". Microsoft . Consultado el 17 de abril de 2020 .
  57. ^ "Reducir el ruido de fondo en las reuniones de Teams". Soporte de Microsoft . Consultado el 5 de enero de 2021 .
  58. ^ 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.
  59. ^ "notas de la versión de simdjson 2.1.0". GitHub . 30 de junio de 2022.
  60. ^ 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 .
  61. ^ Larabel, Michael (7 de julio de 2022). "El motor Tesseract OCR 5.2 logra el éxito con AVX-512F". Forónix .
  62. ^ ab Lemire, Daniel (7 de septiembre de 2018). "AVX-512: cuándo y cómo utilizar estas nuevas instrucciones". El blog de Daniel Lemire .
  63. ^ Abeja en cuerda. "Instrucciones SIMD que reducen la frecuencia de la CPU". Desbordamiento de pila .
  64. ^ ab Downs, Travis (19 de agosto de 2020). "Desbloqueo de Ice Lake AVX-512". Blog "El rendimiento importa" .
  65. ^ "x86: rendimiento de AVX 512 frente a AVX2 para bucles de procesamiento de matrices simples". Desbordamiento de pila .
  66. ^ "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