Las instrucciones vectoriales son un tipo de http://en.wikipedia.org/wiki/Ins…. Cuando se utiliza el paralelismo a nivel de instrucción, el hardware intenta obtener paralelismo explotando algunas características de la arquitectura como la tubería de instrucciones, las instrucciones MIMD y SIMD, los dos últimos permiten cálculos vectoriales y el primero permite paralelismo adicional realizando diferentes instrucciones al mismo tiempo y ocultando la latencia .
Hoy en día, la forma más común de explotar MIMD (datos múltiples de entrada múltiple) es utilizando un procesador de múltiples núcleos o procesamiento de flujo (principalmente gpu).
En el paradigma SIMD (Single Instruction Multiple Data), la unidad de procesamiento utiliza una instrucción para realizar la misma operación en muchos elementos. Las instrucciones comunes que explotan los conceptos incluyen Extensiones SIMD de transmisión (SSE), Extensiones vectoriales avanzadas (AVX) y arquitectura ARM (NEON).
Estos conjuntos de instrucciones normalmente proporcionan instrucciones para cargar / almacenar datos desde la memoria principal a la caché (informática) (captación previa de instrucciones) o directamente a algún registro especial del procesador y otro conjunto de instrucciones para realizar operaciones como operaciones aritméticas, comparación, conversión de datos o alguna combinación de operaciones, como Fused Multiply Add (conjunto de instrucciones FMA).
- ¿Cuál es la intuición detrás del pseudo inverso de una matriz?
- ¿Cuál es una explicación intuitiva de la relación entre el determinante de una matriz y el producto cruzado de vectores?
- Álgebra lineal: ¿Por qué es importante la diagonalización de la matriz y para qué se utiliza?
- Cálculos matriciales: ¿optimización convexa con restricciones positivas definidas utilizando el método cuasi newton?
- ¿Cuál es el significado de la matriz de Hesse?
El tipo de cálculo y el desequilibrio entre los procesadores y el rendimiento de la memoria pueden ser críticos para darse cuenta de la posible aceleración obtenida del uso de instrucciones vectoriales.
A diferencia del procesador Vector más antiguo, la mayoría de los procesadores comunes de hoy en día no tienen instrucciones especiales, por ejemplo, para el acceso no unitario a la memoria (Stride of a array) o, en general, las operaciones de dispersión / recopilación (las CPU de Intel más nuevas que admiten instrucciones AVX tienen una forma de operación de recolección). Para aliviar este tipo de problemas es necesario usar mejor la caché disponible en la CPU / GPU y usar patrones de manera eficiente cuando sea necesario para acceder a la memoria como la fusión de memoria (Cómo acceder a la memoria global de manera eficiente en los núcleos CUDA C / C ++). Estos requisitos originaron una gran cantidad de técnicas para la optimización de bucle, optimización de nido de bucle, análisis de dependencia de bucle, modelo Polytope) para mejorar la utilización de la memoria caché y el patrón de acceso a la memoria.
El problema a resolver puede ser de gran ayuda para el uso de instrucciones vectoriales como álgebra lineal densa (subprogramas de álgebra lineal básica) o dificultar la aplicación de estas técnicas como álgebra lineal dispersa o bucles con dependencias complicadas.