¿Cuáles son las instrucciones AVX (extensiones vectoriales avanzadas) y para qué se utilizan en una computadora?

Historial de referencia de la CPU

Este gráfico dice que Pentium-100 sin mmx completa un trabajo en 15 segundos, mientras que Pentium-166 con mmx completa el mismo trabajo en menos de 7 segundos, lo que significa más del 100% de aceleración. También http://www.cpu-world.com/Compare… dice que el rendimiento multimedia es 8x con solo un 66% más de frecuencia central.

Las instrucciones AVX son una versión actualizada de SSE y SSE es el siguiente paso de MMX. MMX es un grupo de instrucciones del acelerador de transmisión de datos multimedia y comenzó con la serie MMX de Intel. Las instrucciones MMX pueden realizar dos operaciones de punto flotante de 32 bits con una sola instrucción. SSE puede hacer 4, AVX puede ejecutar 8 operaciones de FP de 32 bits en una sola instrucción.

Menos instrucciones por operación deja más ancho de banda para los datos que provienen del mismo chip de memoria donde se obtienen las instrucciones.

Hacer 8 operaciones con 1 instrucción vs 8 instrucciones tiene algunas ventajas:

  • Más espacio en la tubería para seguir las instrucciones conduce a un mayor paralelismo de nivel de instrucción (que usa más área / transistores de CPU a la vez)
  • Se logran más operaciones por segundo con solo usar el hardware SIMD
  • El acceso a la memoria alineado implícitamente da un buen impulso al rendimiento de la transmisión de datos (como ver videos, calcular la física) ya que los controladores de memoria se usan de manera más eficiente.
  • el almacenamiento en chip mucho más temporal también lo hace rápido

Hay demasiadas instrucciones para saber en esta categoría y para superar eso, los compiladores y algunas API convierten automáticamente los códigos de desarrollador a versiones AVX, lo que ahorra mucho tiempo de desarrollo y ofrece una optimización decente para programar antes de lanzarlo.

Por ejemplo, si usa OpenCL, genera automáticamente códigos AVX para la CPU, ya sea AMD o INTEL.

No sé el estado actual, pero en el pasado Windows solo podía usar la mitad de esos registros compatibles con AVX en la CPU, mientras que Linux los usaba todos, lo que es bueno para algunos códigos críticos de rendimiento.

El cálculo de a = b + c resultó en una ejecución 30 veces más rápida con AVX en comparación con el código que no es AVX para mi PC con FX8150. Esto ayuda más cuando el tipo de datos es más pequeño como un solo byte. La instrucción AVX simple puede procesar valores de 32 bytes que deben ser más que suficientes para codificar-decodificar video de 1080p a 30 fps, incluso con un solo núcleo de una CPU de 3–4 GHz.

Los dispositivos de cómputo de factor de forma pci-e de la serie xeon-phi de Intel pueden usar versiones de 512 bits de instrucciones AVX que pueden funcionar en 16 variables a la vez.

Una CPU funciona en registros, de solo 32 o 64 bits. Contienen variables para calcular y también algunos punteros dedicados para programar el contador, apilar el puntero, algo en la memoria, …

La CPU opera en estos registros utilizando comandos de ensamblaje, instrucciones muy básicas como agregar, multiplicar, bifurcar (si / de lo contrario), cargar / almacenar algo en la memoria, … Cada una de estas instrucciones se procesa en varios pasos, definidos por la arquitectura. En MIPS, hay 5 pasos: búsqueda de instrucciones, decodificación de instrucciones (registros de acceso), ejecución, acceso a memoria, reescritura.

Cuando se realiza un trabajo de cálculo, con muchas instrucciones de sumar o multiplicar una tras otra, estos pasos son en su mayoría idénticos para cada instrucción. Por lo tanto, se crearon registros vectoriales y extensiones multimedia (como AVX). Estos registros modificados contienen múltiples valores, y se puede usar una sola instrucción (ligeramente modificada) para agregar / multiplicar todos los valores. Esto significa que solo duplica el paso de ejecución efectivo y solo necesita recuperar, decodificar y almacenar los datos de la instrucción una vez.