stringtranslate.com

Extensiones de vectores avanzadas

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 expande 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:

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.

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 , 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.

CPU con AVX

Las cuestiones relativas a la compatibilidad entre los futuros procesadores Intel y AMD se analizan en el conjunto de instrucciones XOP .

Compatibilidad con compiladores y ensambladores

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:

Extensiones de vectores 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:

A veces, la extensión FMA3 ( multiplicación-acumulación fusionada de tres operandos ) se considera parte de AVX2, ya que Intel la introdujo en la misma microarquitectura de procesador. Se trata de una extensión independiente 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 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:

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 se implementan 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 instrucciones de la CPU AVX512

[28]

^Nota 1  : AVX-512 está deshabilitado de forma predeterminada en los procesadores Alder Lake . En algunas placas base con algunas versiones de BIOS y microcódigo de CPU, AVX-512 se puede habilitar en la BIOS, pero esto requiere deshabilitar los núcleos E. [29] Sin embargo, Intel comenzó a deshabilitar AVX-512 en los procesadores Alder Lake producidos a principios de 2022 y posteriores. [30]

Compiladores compatibles con AVX-512

Ensambladores compatibles con AVX-512

AVX-VNNI, AVX-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.

CPU con AVX-VNNI

CPU con AVX-IFMA

AVX10

AVX10, anunciado en julio de 2023, [36] es un nuevo conjunto de instrucciones AVX "convergente". Aborda varios problemas de AVX-512, en particular que está dividido en demasiadas partes [37] (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). [38] 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 la segunda versión de AVX10 con un ancho de vector máximo de 256 bits. [39]

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. [39]

AVX10.1/512 estará disponible en Granite Rapids . [39]

APX

APX es una nueva extensión. No se centra en el cálculo vectorial, sino que proporciona extensiones similares a RISC para 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. [40] [41]

Aplicaciones

Software

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: [63] [64]

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. [63]

En el Lago de Hielo sólo persisten dos niveles: [65]

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. [65] 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. [66]

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í. [67]

Véase 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". ExtremeTech . 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) (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).
  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 creadores 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 adelanto de Nehalem y Larrabee". ExtremeTech. 17 de marzo de 2008.
  10. ^ 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 .
  11. ^ 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.
  12. ^ "Novedades - RAD Studio". docwiki.embarcadero.com . Consultado el 17 de septiembre de 2021 .
  13. ^ "Cambios en el GAS". sourceware.org . Consultado el 3 de mayo de 2024 .
  14. ^ ab "NASM - El ensamblador de red, Apéndice C: Historial de versiones de NASM". nasm.us . Consultado el 3 de mayo de 2024 .
  15. ^ "Notas de la versión de YASM 0.7.0". yasm.tortall.net .
  16. ^ 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
  17. ^ "Anuncio de lanzamiento de FreeBSD 9.1" . Consultado el 20 de mayo de 2013 .
  18. ^ x86: agrega compatibilidad del kernel de Linux para el estado YMM , consultado el 13 de julio de 2009
  19. ^ Linux 2.6.30 - Linux Kernel Newbies , consultado el 13 de julio de 2009
  20. ^ Twitter , consultado el 23 de junio de 2010
  21. ^ "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.
  22. ^ Agregar soporte para guardar/restaurar el estado de la FPU usando XSAVE/XRSTOR. , recuperado el 25 de marzo de 2015
  23. ^ Compatibilidad de punto flotante para controladores de 64 bits , consultado el 6 de diciembre de 2009
  24. ^ Nuevas descripciones de instrucciones de Haswell ya disponibles, Software.intel.com , consultado el 17 de enero de 2012
  25. ^ abc James Reinders (17 de julio de 2014). «Instrucciones adicionales de AVX-512». Intel . Consultado el 3 de agosto de 2014 .
  26. ^ ab "Referencia de programación de extensiones del conjunto de instrucciones de la arquitectura Intel" (PDF) . Intel . Consultado el 29 de enero de 2014 .
  27. ^ 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 .
  28. ^ "Emulador de desarrollo de software Intel® | Software Intel®". software.intel.com . Consultado el 11 de junio de 2016 .
  29. ^ Cutress, Ian; Frumusanu, Andrei. "Revisión del procesador Intel Core i9-12900K de 12.ª generación: el rendimiento híbrido aporta complejidad híbrida". AnandTech . Consultado el 5 de noviembre de 2021 .
  30. ^ 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 3 de octubre de 2022 .
  31. ^ "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 .
  32. ^ "Serie de lanzamientos de 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 .
  33. ^ "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 .
  34. ^ "Microsoft Visual Studio 2017 es compatible con Intel® AVX-512". 11 de julio de 2017.
  35. ^ "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 .
  36. ^ 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 .
  37. ^ 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 .
  38. ^ "El ISA vectorial convergente: documento técnico sobre las extensiones vectoriales avanzadas de Intel® 10". Intel .
  39. ^ abc "Especificación de arquitectura Intel® Advanced Vector Extensions 10 (Intel® AVX10)". Intel .
  40. ^ "Especificación de la arquitectura Intel® Advanced Performance Extensions (Intel® APX)". Intel.
  41. ^ 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 .
  42. ^ "Linux RAID". LWN. 17 de febrero de 2013. Archivado desde el original el 15 de abril de 2013.
  43. ^ "Comparación de las implementaciones de la biblioteca criptográfica BSAFE". 25 de julio de 2023.
  44. ^ "Mejora del rendimiento de OpenSSL". 26 de mayo de 2015. Consultado el 28 de febrero de 2017 .
  45. ^ "Notas de la versión 3.0.0 de OpenSSL". GitHub . 7 de septiembre de 2021.
  46. ^ 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 .
  47. ^ "MASSIVE X requiere un procesador compatible con AVX". Native Instruments . Consultado el 29 de noviembre de 2019 .
  48. ^ "dav1d: rendimiento y finalización del primer lanzamiento". 21 de noviembre de 2018. Consultado el 22 de noviembre de 2018 .
  49. ^ "Notas de la versión 0.6.0 de dav1d". 6 de marzo de 2020.
  50. ^ "Notas de la versión 0.7.0 de SVT-AV1". 26 de septiembre de 2019.
  51. ^ "Requisitos del sistema de ArcGIS Data Store 11.2". ArcGIS Enterprise . Consultado el 24 de enero de 2024 .
  52. ^ "Notas de la versión de Prime95" . Consultado el 10 de julio de 2022 .
  53. ^ "Aplicaciones de Einstein@Home".
  54. ^ "Preguntas frecuentes, Helios". Helios . Consultado el 5 de julio de 2021 .
  55. ^ "Tensorflow 1.6". GitHub .
  56. ^ Novedades de la versión 19.0: EmEditor (editor de texto)
  57. ^ "Requisitos de hardware para Microsoft Teams". Microsoft . Consultado el 17 de abril de 2020 .
  58. ^ "Reducir el ruido de fondo en las reuniones de Teams". Soporte técnico de Microsoft . Consultado el 5 de enero de 2021 .
  59. ^ 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.
  60. ^ "Notas de la versión de simdjson 2.1.0". GitHub . 30 de junio de 2022.
  61. ^ 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 .
  62. ^ Larabel, Michael (7 de julio de 2022). "El motor Tesseract OCR 5.2 logra el éxito con AVX-512F". Phoronix .
  63. ^ ab Lemire, Daniel (7 de septiembre de 2018). "AVX-512: cuándo y cómo utilizar estas nuevas instrucciones". Blog de Daniel Lemire .
  64. ^ BeeOnRope. "Instrucciones SIMD que reducen la frecuencia de la CPU". Desbordamiento de pila .
  65. ^ ab Downs, Travis (19 de agosto de 2020). "Reducción de frecuencia del Ice Lake AVX-512". Blog Performance Matters .
  66. ^ "x86 - Rendimiento de AVX 512 frente a AVX2 para bucles de procesamiento de matrices simples". Desbordamiento de pila .
  67. ^ "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.

Enlaces externos