# Extensiones Vectoriales Avanzadas

Las extensiones vectoriales avanzadas, del inglés advanced vector extensions y abreviado AVX, es un conjunto de instrucciones de 256 bits desarrollado por Intel Corporation como una extensión al conjunto de instrucciones x86 utilizado en procesadores de Intel y AMD. Provee nuevas características, instrucciones y un nuevo esquema de codificación.

## Conjunto de instrucciones AVX
### Historia

Fue propuesto por Intel en marzo del año 2008 pero no fue soportado hasta el primer trimestre del año 2011 con el lanzamiento de su nueva generación de procesadores iX denominada Sandy Bridge y después por AMD con el procesador "Bulldozer" a partir del tercer trimestre del mismo año.

### Características

Es un vector de extensión SIMD de 256 bits para operaciones de punto flotante intensivo. Mejora el rendimiento en las nuevas aplicaciones, y algunas existentes, mediante el manejo de paquetes de datos vectoriales más grandes, y el uso de más hilos y núcleos del procesador.
El ancho del registro SIMD es incrementado de 128-bits a 256-bits, y renombrado de XMM0-XMM15 a YMM0-YMM15. En los procesadores que soportan AVX, el conjunto de instrucciones SSE (que anteriormente operaba en los registros XMM) pasa a operar en los primeros 128-bits de los registros YMM. Además, se espera la inclusión de vectores de 512 e incluso 1024 bits.
Son instrucciones no destructivas. AVX introduce un formato SIMD de 3 y 4 operandos, donde el operando de destino es diferente de los operandos fuente. Por ejemplo, una instrucción SSE convencional de 2 operandos a:=a+b puede usar un formato no destructivo de 3 operandos c:=a+b, preservando los operandos fuente. Este formato está limitado al conjunto de instrucciones con operandos SIMD (YMM) y no incluye los registros con propósitos generales (p.e. EAX), sin embargo, se espera el soporte en el futuro.
Debido al mayor poder de procesamiento, las aplicaciones que usen intesivamente estas instrucciones pueden realizar el trabajo más eficientemente, dando un rendimiento por watt más alto que con otro conjunto de instrucciones.
Flexibilidad en el entorno de programación, debido a que el requisito de alineación de los operandos de memoria SIMD es relajado.
Nuevo manejo de operaciones aritméticas y primitivas , incluyendo difusión, permutación, suma y multiplicación fusionado, entre otras.

### Procesadores con conjunto de instrucciones AVX

* Todos los procesadores basados en la arquitectura Sandy Bridge de Intel y posteriores.
* Los procesadores basados en Bulldozer de AMD.

## Conjunto de instrucciones AVX2

Continuando con la tendencia de añadir más funcionalidades vectoriales en sucesivas generaciones de procesadores, Intel ampliará el conjunto AVX con nuevas instrucciones que funcionarán también sobre números naturales, efectivamente ampliando casi la totalidad del conjunto SSE de 128 a 256 bits.
Además esta nueva ampliación permitirá realizar operaciones de recolección (gather), lo que significa que se podrá acceder a la vez a varias posiciones no contiguas en memoria, aumentando considerablemente las capacidades de procesado vectorial de la arquitectura x86-64. Sin embargo la posibilidad de distribución (scatter) no será implementada.
AVX2 se introducirá en la arquitectura inmediatamente posterior a Ivy Bridge, la Intel Haswell prevista para la primavera de 2013, un año después de la salida de los procesadores basados en Ivy Bridge. Por lo demás comparten todas las características de las AVX originales.

## Software compatible

Además de que las aplicaciones introduzcan el uso explícito de estas nuevas instrucciones, también ha de haber soporte por parte del sistema operativo ya que introducen nuevos registros de estado del procesador. Los sistemas operativos más comunes que permiten el uso de instrucciones AVX y AVX2 son:
* Apple Mac OS X 10.6.8 (lanzado en junio de 2011) y posteriores.
* GNU/Linux con núcleo Linux 2.6.30 (lanzado en junio de 2009) o posterior.
* Microsoft Windows 7 SP1 (lanzado en febrero de 2011), Windows Server 2008 R2 SP1 (también lanzado en febrero de 2011) y Windows 8.

## Aplicaciones

Estos conjuntos de instrucciones son útiles para cualquier operación que utilice operaciones de punto flotante de forma intensiva, y en el caso de AVX2 serán útiles también para operaciones con enteros:
* Procesado de imagen (AVX2)
* Tratamiento de vídeo (AVX2)
* Procesamiento de audio
* Modelado 3D
* Servicios de análisis financieros
* Software de ingeniería y manufactura
* Software de inteligencia artificial (como Tensorflow a partir de la versión 1.6)