stringtranslate.com

Instrucción de control de caché

En informática , una instrucción de control de caché es una sugerencia 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 los requisitos de ancho de banda y evitar las 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 sí 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 .

captación previa

También denominado toque de bloque de caché de datos , el efecto es solicitar la carga de la línea de caché asociada con una dirección determinada. Esto se realiza mediante la PREFETCHinstrucción del conjunto de instrucciones x86 . Algunas variantes omiten los niveles más altos de la jerarquía de caché , lo que resulta útil en un contexto de "transmisión" para datos que se atraviesan una vez, en lugar de mantenerse en el conjunto de trabajo. La captación previa debe ocurrir con suficiente anticipación en el tiempo para mitigar la latencia del acceso a la memoria, por ejemplo en un bucle que atraviesa la memoria linealmente. La función intrínseca de GNU Compiler Collection se puede utilizar para invocar esto en los lenguajes de programación C o C++ . __builtin_prefetch

Captación previa de instrucciones

Una variante de captación previa para el caché de instrucciones.

El bloque de caché de datos asigna cero

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

Bloqueo de caché de datos invalidado

Esta sugerencia se utiliza para descartar líneas de caché, sin guardar su contenido en la memoria principal. Es necesario 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 zeropara gestionar datos temporales. Esto ahorra ancho de banda de memoria principal innecesario y contaminación de caché.

Vaciado del bloque de caché de datos

Esta sugerencia solicita el desalojo inmediato de una línea de caché, dando 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 instrucciones de carga y almacenamiento que también implican sugerencias de caché. Un ejemplo está load lasten el conjunto de instrucciones de PowerPC , que sugiere que los datos sólo se usará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

Captación previa 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 captación 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 los procesadores orientados al rendimiento, que tienen una compensación diferente entre rendimiento y latencia, y pueden preferir dedicar más área a las unidades de ejecución.

Memoria del bloc de notas

Algunos procesadores admiten memoria temporal en la que se pueden colocar elementos temporales y acceso directo a la 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 gestiona mediante transferencias explícitas) y eliminan la necesidad de una costosa coherencia de caché en una máquina de muchos núcleos .

La desventaja es que su uso requiere técnicas de programación significativamente diferentes. Es muy difícil adaptar programas escritos en lenguajes tradicionales como C y C++ que presentan al programador una visión 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 codificación dedicada desde cero para funcionar uniformemente. Las instrucciones de control de caché son específicas de un determinado tamaño de línea de caché, que en la práctica puede variar entre generaciones de procesadores de la misma familia arquitectónica. Los cachés también pueden ayudar a fusionar lecturas y escrituras de patrones de acceso menos predecibles (por ejemplo, durante el mapeo de texturas ), mientras que el DMA del scratchpad requiere reelaborar algoritmos para recorridos "lineales" más predecibles.

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

Búsqueda de vectores

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

La desventaja es que muchas copias de estados temporales pueden mantenerse en la memoria local de un elemento de procesamiento , esperando 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 13 de octubre de 2016 . Consultado el 11 de junio de 2016 .