Las extensiones de instrucciones de la ISA son frecuentes en multitud de arquitecturas. En el caso de los mejores y últimos microprocesadores de la familia x86, tenemos extensiones muy variadas, como las AVX-512 de 512-bit para la longitud de datos. Es decir, en vez de operar en 64-bit como el resto de partes de la CPU, para estas instrucciones se agrupan una serie de registros y se tratan en una FPU especial.
Gracias a esto, se pueden realizar varias operaciones en una sola sentada, con una sola instrucción, en vez de tener que operar de forma escalar, es decir, dato a dato. Con las extensiones AVX se trabaja con vectores de datos a los que se aplica una misma operación a todos ellos. Es decir, se podrían hacer sobre 8 datos de 64-bit a la vez, o sobre 16 de 32-bit, etc. Sin embargo, pese a que pueden acelerar muchas cargas de trabajo, como las científicas, no todo son ventajas en estas AVX…
Quizás también te puede interesar:
¿Qué es AVX-512?
Además de la propia ISA principal, con las instrucciones básicas de la arquitectura AMD64 o EM64T o x86-64, como la quieras llamar, también existen otras muchas extensiones, es decir, conjuntos o sets de instrucciones adicionales que se agregan para completar la ISA y acelerar ciertas cargas de trabajo, por ejemplo, las bibliotecas de TensorFlow las pueden aprovechar. Entre ellas tenemos el conjunto de instrucciones AVX-512.
Es la segunda iteración de AVX o AVX2. Este conjunto de instrucciones llegó a los procesadores Intel en 2013. Y son las siglas de Advanced Vector Extensions. Este repertorio sería incorporado por primera vez en los Intel Xeon Phi (Knights Landing), y más tarde también pasaría a los servidores con los Intel Xeon (Skylake-X).
Pero Intel tomó una decisión algo comprometida y criticada, y es que el conjunto de instrucciones AVX-512 también llegaría a los consumidores, es decir, a los clientes. Esto fue en la microarquitectura Intel Cannon Lake. Más tarde también sería heredada por Ice Lake, Tiger Lake, etc. Algo incomprensible para muchos, ya que esto implica mayor consumo, mayor tamaño del silicio ocupado por unidades funcionales de ejecución grandes (y registros de mayor longitud), y no aporta prácticamente valor, ya que existe muy poco software para clientes que puedan beneficiarse de estas instrucciones.
El objetivo principal de este conjunto de instrucciones era acelerar las tareas relacionadas con la compresión de datos, el procesamiento de imágenes y los cálculos criptográficos. Al ofrecer el doble de potencia de cálculo en comparación con AVX-256, el conjunto de instrucciones AVX-512 ofrecía mejoras notables del rendimiento, pero pese a que agregaba el doble de complejidad, no aportaba el duplicó el rendimiento.
Por todo esto tuvo muchas críticas, entre ellos Linus Torvalds las criticó duramente:
Espero que el AVX-512 tenga una muerte dolorosa, y que Intel empiece a arreglar los problemas reales en vez de intentar crear instrucciones mágicas para luego crear benchmarks en los que se puedan ver bien.
Espero que Intel vuelva a lo básico: que haga funcionar de nuevo su litografía, y se concentre más en el código regular que no sea HPC (computación de alto rendimiento) o algún otro caso especial sin sentido.
Ya lo he dicho antes, y lo diré de nuevo: en el apogeo de la arquitectura x86, cuando Intel se reía hasta el final del banco y mataba a toda su competencia, absolutamente todos los demás lo hacían mejor que Intel en las cargas de trabajo FP. El rendimiento en FP de Intel era una mierda (relativamente hablando), y no importa ni un ápice.
Porque absolutamente a nadie le importa fuera de los benchmarks.
Lo mismo ocurre con el AVX-512 ahora y en el futuro. Sí, puedes encontrar cosas en las que el AVX-512 importa. No, esas cosas no venden equipos en el panorama general.
Y el AVX-512 tiene verdaderos inconvenientes. Preferiría ver ese presupuesto de transistores usado en otras cosas que son mucho más relevantes. Incluso si sigue siendo matemáticas de FP (en la GPU, en lugar de AVX-512). O simplemente dame más núcleos (con un buen rendimiento de un solo hilo, pero sin la basura como el AVX-512) como hizo AMD.
Quiero que mis límites de potencia se alcancen con código entero regular de enteros, no con algún virus de potencia AVX-512 que me quite la frecuencia máxima (¡porque la gente terminó usándolo para memcpy!) y quita núcleos (porque esas inútiles unidades de basura ocupan espacio).
Sí, sí, soy parcial. Detesto absolutamente los benchmarks de FP, y me doy cuenta de que a otras personas les importa mucho. Sólo creo que el AVX-512 es exactamente lo que no se debe hacer. Es una molestia para mí. Es un buen ejemplo de algo que Intel ha hecho mal, en parte porque ha aumentado la fragmentación del mercado.
Deja la basura de los casos especiales, y haz que todas las cosas comunes que a todo el mundo le importa funcionen tan bien como humanamente puedas. Luego haz una FPU que apenas sea lo suficientemente buena por el lateral, y la gente estará feliz. AVX2 es mucho más que suficiente.
Sí, estoy de mal humor.
Linus
Después de esto, el famoso programador y creador de Linux tendría un equipo AMD Threadripper por primera vez para compilar, ya que estaba algo disgustado con los Intel que siempre había empleado para sus equipos…
¿Fin de AVX-512? No, solo el comienzo de un culebrón…
AVX-512 fue una buena y mala idea a la vez. Intel se adelantó, ya que no había software como para justificar su implantación en el lado del cliente, aunque sí para HPC. AMD fue más inteligente en este sentido y optó por no adoptar las AVX-512 hasta que no hubiese más software que las pudiera aprovechar, y ese momento llegó en Zen 4, para las Ryzen 7000 Series actuales.
Intel por su parte parece ahora algo perdida, ya que fue la impulsora de AVX-512 y ahora las ha bloqueado para sus Alder Lake en adelante. Bien es cierto que los primeros Alder Lake permitían procesar AVX-512 en los P-cores basados en Golden Cove, pero no era así en los E-cores basados en Gracemont. Esto era algo complejo para el planificador de instrucciones, por lo que Intel optó por desactivarlas, aunque físicamente los núcleos podían usarlas.
Veamos los movimientos tan torpes y extraños que hizo Intel para las AVX-512:
- Intel se dirige a la prensa para decir que AVX-512 no sería compatible con los procesadores híbridos con núcleos P y E, tal vez por la mala fama y las críticas recibidas.
- Antes de su lanzamiento apareció una guía de optimización de la propia Intel donde se mostraba el uso de AVX-512 para los Alder Lake, lo cual desconcertó mucho tras el mensaje anterior.
- Por eso Intel tuvo que salir al paso nuevamente ante la prensa, volviendo a negar que estuvieran admitidas las AVX-512 y eliminó las referencias de la guía.
- Llega el momento de lanzar Alder Lake, y los primeros usuarios en probarlo descubren que algunas placas base tienen un firmware que permiten trabajar con AVX-512, algo que los fabricantes de placas base hicieron en contra de la voluntad de Intel.
- Intel se mantuvo en silencio para la prensa mundial, aunque ante los medios taiwaneses aseguró que el soporte AVX-512 seguía presente en los Alder Lake, aunque no estaba activado por defecto. Solo era una posibilidad que tenía el usuario de habilitarlo o no.
- Después de esto, Intel da la noticia de que desactiva las AVX-512 con una nueva actualización del firmware o microcódigo. De este modo pretende poner fin a la polémica, aunque no lo consiguió…
- La misma semana en la que se anuncia la actualización aparecen parches para el BIOS/UEFI que deshabilitaban AVX-512.
- Algunos fabricantes de placas base, como MSI, encuentran la forma de eludir el bloqueo de Intel y permiten activar la función desde el BIOS/UEFI de sus placas base, como un reclamo para los posibles compradores.
- Intel ve que el fantasma se vuelve a resucitar y finalmente decidiría desactivar esta función por hardware. Es decir, en los primeros Alder Lake estaba disponible físicamente y en los Alder Lake lanzados posteriormente no lo está. Por tanto, si quieres AVX-512 habilitado, entonces tienes que comprar los Intel Xeon, que por supuesto son más caros. ¿Marketing o error? Juzga tú mismo…
Mientras tanto, AMD toma otra dirección diferente:
- Mientras Intel adoptó las AVX-512 también para los procesadores para cliente, por lo que fue criticado, AMD se mantuvo concentrada en implementar más núcleos de procesamiento, en vez de hacer los ya existentes más complejos.
- Llegado el momento de diseñar Zen 4, AMD decide que es buena hora para implementar estas instrucciones en sus AMD Ryzen 7000 Series y EPYC. No obstante, no soportan todo el set de Intel, ya que prescinden de instrucciones como AVX512ER, AVX512PF (Knights Landing), AVX512 4VNNIW, 4FMAPS (Knights Mill) y VP2INTERSECT (Tiger Lake). Además, parece que AMD ha simplificado sus unidades de ejecución con respecto a Intel.
Te recomendamos la lectura de los mejores procesadores del mercado. ¿Qué opinas? ¿A favor o en contra de AVX-512?