stringtranslate.com

Instrucción de control de caché

En informática , una instrucción de control de caché es una pista incrustada en el flujo de instrucciones de un procesador destinada a mejorar el rendimiento de las cachés de hardware , utilizando el conocimiento previo del patrón de acceso a la memoria proporcionado por el programador o compilador . [1] Pueden reducir la contaminación de la caché , reducir el requisito de ancho de banda, evitar latencias, al proporcionar un mejor control sobre el conjunto de trabajo . La mayoría de las instrucciones de control de caché no afectan la semántica de un programa, aunque algunas pueden hacerlo.

Ejemplos

Varias de estas instrucciones, con variantes, son compatibles con varias arquitecturas de conjuntos de instrucciones de procesador , como ARM , MIPS , PowerPC y x86 .

Precarga

También denominado bloque de caché de datos touch , el efecto es solicitar la carga de la línea de caché asociada con una dirección dada. Esto lo realiza la PREFETCHinstrucción en el conjunto de instrucciones x86 . Algunas variantes omiten los niveles superiores de la jerarquía de caché , lo que resulta útil en un contexto de "transmisión" para datos que se recorren una vez, en lugar de mantenerse en el conjunto de trabajo. La precarga debe ocurrir con suficiente antelación en el tiempo para mitigar la latencia del acceso a la memoria, por ejemplo, en un bucle que recorra la memoria de forma lineal. La función intrínseca GNU Compiler Collection se puede utilizar para invocar esto en los lenguajes de programación C o C++ . __builtin_prefetch

Precarga de instrucciones

Una variante de prefetch para la caché de instrucciones.

Bloque de caché de datos con asignación cero

Esta sugerencia se utiliza para preparar las líneas de caché antes de sobrescribir el contenido por completo. En este ejemplo, la CPU no necesita cargar nada de la memoria principal . El efecto semántico es equivalente a un conjunto de memoria alineado a cero de un bloque del tamaño de una línea de caché, pero la operación es efectivamente gratuita.

Bloqueo de caché de datos invalidado

Esta sugerencia se utiliza para descartar líneas de caché sin enviar su contenido a la memoria principal. Se debe tener cuidado, ya que es posible que se obtengan resultados incorrectos. A diferencia de otras sugerencias de caché, la semántica del programa se modifica significativamente. Esto se utiliza junto con allocate zerola gestión de datos temporales. Esto ahorra ancho de banda innecesario de la memoria principal y contaminación de la caché.

Vaciado de bloque de caché de datos

Esta sugerencia solicita el desalojo inmediato de una línea de caché, lo que abre paso a futuras asignaciones. Se utiliza cuando se sabe que los datos ya no forman parte del conjunto de trabajo .

Otros consejos

Algunos procesadores admiten una variante de las instrucciones de carga y almacenamiento que también implican sugerencias de caché. Un ejemplo se encuentra load lasten el conjunto de instrucciones de PowerPC , que sugiere que los datos solo se utilizarán una vez, es decir, la línea de caché en cuestión puede colocarse al principio de la cola de desalojo, mientras se mantiene en uso si aún se necesita directamente.

Alternativas

Precarga automática

En los últimos tiempos, las instrucciones de control de caché se han vuelto menos populares a medida que los diseños de procesadores de aplicaciones cada vez más avanzados de Intel y ARM dedican más transistores a acelerar el código escrito en lenguajes tradicionales, por ejemplo, realizando una búsqueda previa automática, con hardware para detectar patrones de acceso lineal sobre la marcha. Sin embargo, las técnicas pueden seguir siendo válidas para procesadores orientados al rendimiento, que tienen un equilibrio diferente entre rendimiento y latencia, y pueden preferir dedicar más área a las unidades de ejecución.

Memoria de bloc de notas

Algunos procesadores admiten memoria de borrador en la que se pueden colocar datos temporales y acceso directo a memoria (DMA) para transferir datos hacia y desde la memoria principal cuando sea necesario. Este enfoque lo utilizan el procesador Cell y algunos sistemas integrados . Estos permiten un mayor control sobre el tráfico y la localidad de la memoria (ya que el conjunto de trabajo se administra mediante transferencias explícitas) y eliminan la necesidad de una costosa coherencia de caché en una máquina de varios núcleos .

La desventaja es que requiere técnicas de programación significativamente diferentes para su uso. Es muy difícil adaptar programas escritos en lenguajes tradicionales como C y C++ que presentan al programador una vista uniforme de un gran espacio de direcciones (que es una ilusión simulada por cachés). Un microprocesador tradicional puede ejecutar más fácilmente código heredado, que luego puede acelerarse mediante instrucciones de control de caché, mientras que una máquina basada en scratchpad requiere una codificación dedicada desde cero para poder funcionar. Las instrucciones de control de caché son específicas para un cierto tamaño de línea de caché, que en la práctica puede variar entre generaciones de procesadores en la misma familia arquitectónica. Los cachés también pueden ayudar a fusionar lecturas y escrituras a partir de patrones de acceso menos predecibles (por ejemplo, durante el mapeo de texturas ), mientras que el DMA de scratchpad requiere rehacer algoritmos para recorridos "lineales" más predecibles.

Como tales, los blocs de notas son generalmente más difíciles de usar con los modelos de programación tradicionales, aunque los modelos de flujo de datos (como TensorFlow ) pueden ser más adecuados.

Obtención de vectores

Los procesadores vectoriales (por ejemplo, las unidades de procesamiento gráfico (GPU) modernas y Xeon Phi ) utilizan un paralelismo masivo para lograr un alto rendimiento mientras trabajan con la latencia de la memoria (reduciendo la necesidad de precarga). Muchas operaciones de lectura se emiten en paralelo, para invocaciones posteriores de un núcleo de cómputo ; los cálculos pueden ponerse en espera de datos futuros, mientras que las unidades de ejecución se dedican a trabajar con datos de solicitudes pasadas que ya han aparecido. Esto es más fácil de aprovechar para los programadores junto con los modelos de programación adecuados ( núcleos de cómputo ), pero más difícil de aplicar a la programación de propósito general.

La desventaja es que se pueden mantener muchas copias de estados temporales en la memoria local de un elemento de procesamiento , a la espera de datos en tránsito.

Referencias

  1. ^ "Manual de Power PC, consulte 1.10.3 Instrucciones de control de caché" (PDF) . Archivado desde el original (PDF) el 2016-10-13 . Consultado el 2016-06-11 .