Cuando hablamos de procesadores, es común encontrarnos con el término «instrucciones AVX«, hasta el punto de que en algunos casos son necesarias para que funcionen determinados programas o juegos, y podemos incluso encontrarnos en la tesitura de que un juego o programa no nos funciona si el procesador no cuenta con ellas. Pero, ¿qué son las instrucciones AVX y para qué las necesita el procesador? ¿Es tu procesador compatible con ellas? Vamos a verlo.
Antes de nada debes saber que, al final, un procesador se compone de transistores capaces de ejecutar unas u otras instrucciones, así que las capacidades del procesador, o qué es capaz de hacer más bien, dependen de las instrucciones para las que hayan sido programados. Unos procesadores tienen un conjunto de instrucciones y otros procesadores tienen otros, pero en general suelen ser bastante comunes ya que, en cualquier caso, dependen en gran medida de la programación del software que ejecutan y de si las aprovecha o no.
Hoy en día, tanto Intel como AMD utilizan prácticamente los mismos conjuntos de instrucciones, por lo que es importante señalar que independientemente de la marca de procesador que hayas elegido para tu PC, difícilmente te encontrarás en la tesitura de que algo no funciona porque la CPU no tiene cierto conjunto de instrucciones… a lo sumo es algo que podría sucederte si tienes una APU o algún modelo demasiado antiguo.
Qué son las instrucciones AVX
Las instrucciones AVX son un término que viene del inglés «Advanced Vector Extensions«, también conocidas como Sandy Bridge New Extensions dado que fueron propuestas por Intel en 2008 y fueron inicialmente implementadas en los procesadores Sandy Bridge de la marca.
Consisten en un conjunto específico de instrucciones para procesadores Intel y AMD que añadieron a la arquitectura x86 de sus procesadores, en el caso de Intel a partir de Sandy Bridge en 2011 y en el caso de AMD a partir de Bulldozer, también en 2011. AVX proporciona nuevas características y nuevas instrucciones que dictaminan cómo gestiona el procesador los datos.
Las instrucciones AVX tienen variantes, como AVX2 que amplió la mayoría de comandos del procesador a 256 bits e intrudijo operaciones fusionadas de acumulación múltiple (FMA). Por su parte, AVX-512 amplía la compatibilidad de AVX a 512 bits utilizando una nueva codificación de prefijo EVEX propuesta por Intel en 2013 e integrada por primera vez en los procesadores Knights Landing, en 2016.
Para qué usan los procesadores las instrucciones AVX
Estas instrucciones sirven para decirle al procesador cómo debe gestionar los datos que le llegan, dependiendo del tipo de dato. En otras palabras, le da al procesador una mayor capacidad de gestión, con autonomía para poder decidir qué método es el más eficiente para tener un mejor rendimiento. Estos son los tipos de instrucciones AVX que podemos encontrar en la actualidad (y también os hacemos un breve resumen indicando para qué sirve cada uno de ellos).
Instrucción | Descripción |
---|---|
VBROADCASTSS, VBROADCASTSD, VBROADCASTF128 | Copia un operando de la memoria de 32, 64 o 128 bit en un registro de vector XMM o YMM |
VINSERTF128 | Reemplaza la mitad inferior de la mitad superior de un registro YMM de 256 bits con un operando de 128 bits. La otra mitad del destino no se cambia. |
VEXTRACTF128 | Extrae la mitad inferior de la mitad superior de un registro YMM de 256 bit y copia el valor a un operando destino de 128 bit. |
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 configurando los elementos correspondientes en el registro de destino a cero. Alternativamente, escribe condicionalmente cualquier número de elementos desde un operando de registro de vector SIMD a un operando de memoria de vector, dejando los elementos restantes del operando de memoria sin cambios. En la arquitectura de 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 debe hacer nada. Esto parece ser un defecto de diseño. |
VPERMILPS, VPERMILPD | Permute en el carril. Mezcla los elementos vectoriales de 32 bits o 64 bits de un operando de entrada. Estas son instrucciones de 256 bits en el carril, lo que significa que operan en todos los 256 bits con dos datos aleatorios separados de 128 bits, por lo que no pueden generar aleatorios en los carriles de 128 bits. |
VPERM2F128 | Mezcla los cuatro elementos vectoriales de 128 bit de dos operandos de origen de 256 bits en un solo operando de destino de 256 bit, con una constante inmediata como selector. |
VZEROALL | Establece todos los registros YMM a cero y los marca como no utilizados. Se usa para cambiar entre 128 y 256 bits. |
VZEROUPPER | Establece la mitad superior de todos los registros YMM a cero. Se usa par cambiar entre 128 y 256 bits. |
Si esto te suena a chino, no te preocupes porque es así para la mayoría de los mortales. Sin embargo, con saber que existen diferentes tipos de instrucciones AVX y que es el procesador el que se encarga de ejecutarlas es más que suficiente para que te quedes con el concepto.
¿Tu procesador tiene estas instrucciones?
Hay ocasiones en las que, si tienes un procesador relativamente antiguo (anterior a Sandy Bridge o Bulldozer), algunas aplicaciones o juegos podrían no funcionar y no sabes el motivo. Muy probablemente sea porque ese software necesita utilizar alguna de las instrucciones AVX arriba expuestas para funcionar, y si tu procesador no la tiene, no podrá funcionar, así que en ocasiones es importante saber si el procesador que tienes es o no compatible con ciertas instrucciones.
Estos son los procesadores compatibles con AVX:
- Intel: Sandy Bridge (2011), Sandy Bridge-E (2011), Ivy Bridge (2012), Ivy Bridge-E (2013), Haswell (2013), Haswell-E (2014), Broadwell (2014), Broadwell-E (2016), Skylake (2015), Kaby Lake (2016-2017), Skylake-X (2017), Coffee Lake (2017), Cannon Lake (2018), Whiskey Lake (2018), Cascade Lake (2018), Ice Lake (2019), Comet Lake (solo los Core, 2019), Tiger Lake (2020) y todas las generaciones lanzadas a partir de ahí.
- AMD: Jaguar y más nuevos, Puma y más nuevos, Bulldozer (2011), Piledriver (2012), Steamroller (2014), Excavator (2015), Zen (2017), Zen+ (2018), Zen 2 (2019) y todas las generaciones de procesador AMD lanzados a partir de ahí.
Si tienes un procesador que no aparece en esta lista quiere decir que no es compatible con este tipo de instrucciones, pero como también verás estamos hablando de que prácticamente todos los procesadores que tienen 10 años o menos ya las incorporan, así que sería raro que conservaras una CPU tan sumamente antigua a día de hoy, ¿no?
Las instrucciones AVX-512
Las instrucciones AVX-512 son una variante de las instrucciones AVX que aparecieron en los procesadores Intel de décima generación, y su particularidad es que son instrucciones SIMD con 512 bits de longitud en los datos, lo que significa que pueden operar con 4 instrucciones de 128 bits, 8 de 64 bits o 16 de 32 bits, dotando al procesador de una versatilidad y un paralelismo a la hora de ejecutar instrucciones sin parangón.
Es bastante posible que, si eres un aficionado al hardware, hayas leído bastante sobre estas instrucciones en concreto en las últimas semanas, ya que son especialmente utilizadas para acelerar ciertos algoritmos de inteligencia artificial (el tema de moda, desde luego) pero no son tan eficientes como un procesador dedicado.
En todo caso, ahora que Intel y AMD las equipan por defecto en sus procesadores son muchos los desarrolladores de software que comenzarán a implementar su utilización para sacarles el máximo partido, especialmente en esta era en la que vivimos en la que la Inteligencia Artificial y el Machine Learning están cobrando tanta importancia.