¿Qué son las instrucciones AVX y para qué las necesita tu CPU?

¿Qué son las instrucciones AVX y para qué las necesita tu CPU?

Rodrigo Alonso

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.

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.

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.

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

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).
  • 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).