Un caché de víctima es un caché pequeño, generalmente completamente asociativo, que se coloca en la ruta de recarga de un caché de la CPU que almacena todos los bloques desalojados de ese nivel de caché, propuesto originalmente en 1990. En las arquitecturas modernas, esta función generalmente la realiza el Nivel 3 o Cachés de nivel 4.
Descripción general
El almacenamiento en caché de víctimas es una técnica de hardware para mejorar el rendimiento de los cachés propuesta por Norman Jouppi . Como se menciona en su artículo: [1]
El almacenamiento en caché de errores coloca una caché totalmente asociativa entre la caché y su ruta de relleno. Los fallos en el caché que aciertan en el caché de fallos tienen una penalización de un ciclo, a diferencia de una penalización por fallos de muchos ciclos sin el caché de fallos. El almacenamiento en caché de víctimas es una mejora del almacenamiento en caché con errores que carga el caché pequeño completamente asociativo con la víctima de un error y no con la línea de caché solicitada. [1]
Un caché de víctima es un caché de hardware diseñado para disminuir los errores de conflicto y mejorar la latencia de aciertos para los cachés mapeados directamente. Se emplea en la ruta de recarga de una caché de nivel 1, de modo que cualquier línea de caché que se expulse de la caché se almacena en la caché de la víctima. Por lo tanto, la memoria caché de la víctima se llena solo cuando los datos se eliminan de la memoria caché de nivel 1. En caso de un error en el Nivel 1, la entrada perdida se busca en la memoria caché de la víctima. Si el acceso resultante es un acierto, el contenido de la línea de caché de nivel 1 y la línea de caché de la víctima correspondiente se intercambian.
Aunque fue propuesto inicialmente por Jouppi para mejorar el rendimiento de la caché de un caché mapeado directamente Nivel 1, los microprocesadores de hoy en día con jerarquía de caché multinivel emplean caché de Nivel 3 o Nivel 4 para actuar como caché víctima para el caché que se encuentra por encima de él en la jerarquía de memoria. Crystal Well de Intel [2] de sus procesadores Haswell introdujo una caché de nivel 4 en el paquete que sirve como caché víctima para la caché de nivel 3 del procesador. [3] Se utiliza una caché de nivel 3 de 4 a 12 MB como caché de víctima en los microprocesadores POWER5 (IBM).
Fondo
A medida que avanzó la arquitectura y la tecnología de hardware, el rendimiento y la frecuencia del procesador crecieron mucho más rápido que los tiempos de ciclo de la memoria, lo que generó una gran brecha en el rendimiento. El problema de aumentar la latencia de la memoria, en relación con la velocidad del procesador, se ha abordado agregando memoria caché de alta velocidad.
Los cachés asignados directamente tienen un tiempo de acceso más rápido que los cachés asociativos de conjuntos . Sin embargo; cuando varios bloques de caché en la memoria se asignan a la misma línea de caché en un caché de asignación directa, terminan desalojándose entre sí cuando se accede a cualquiera de ellos. Esto se conoce como problema de conflicto de caché. Este problema se resuelve aumentando la asociatividad de la caché. Pero existe un límite al cual se puede incrementar la asociatividad debido a la complejidad en su implementación. Por tanto, para resolver el problema del conflicto de caché para un caché con asociatividad limitada, se emplea el caché víctima.
Implementación
El comportamiento de un caché de víctima en su respectiva interacción con el caché de nivel correspondiente se da a continuación:
Acierto de caché: Sin acción
Cache Miss, Victim Hit: el bloque está en el caché de la víctima y el que está en el caché se reemplaza entre sí. Esta nueva entrada en la memoria caché de la víctima se convierte en el bloque utilizado más recientemente.
Cache Miss, Victim Miss: el bloque se lleva al caché desde el siguiente nivel. El bloque expulsado del caché se almacena en el caché de víctimas.
Ejemplo:
Suponga una caché L1 mapeada directamente con bloques A, B apuntando al mismo conjunto. Está vinculado a un caché de víctimas totalmente asociativo de 2 entradas con bloques C, D en él.
El rastro a seguir: A, B, A, B…
En el diagrama, podemos ver que, en caso de un acierto en la caché de la víctima (VC), los bloques A y B se intercambian. El bloque de VC utilizado menos recientemente permanece como está. Por lo tanto, da una ilusión de asociatividad a la caché L1 mapeada directamente, lo que a su vez reduce los errores de conflicto.
En el caso de dos cachés, L1 y L2 con política de caché exclusiva (L2 no almacena en caché las mismas ubicaciones de memoria que L1), L2 actúa como caché víctima para L1.
Implicación de desempeño
Al medir la mejora del rendimiento mediante el uso de la memoria caché de víctimas, Jouppi [1] asumió una memoria caché de mapa directo de Nivel 1 aumentada con una memoria caché totalmente asociativa. Para el conjunto de pruebas utilizado por él, en promedio, el 39% de las fallas de caché de datos de Nivel 1 resultan ser fallas de conflicto, mientras que en promedio el 29% de las fallas de instrucción de Nivel 1 resultan fallas de conflicto. [1] Dado que los errores de conflicto representan un gran porcentaje del total de errores, por lo tanto, proporcionar asociatividad adicional al aumentar el caché de Nivel 1 con un caché de víctimas está destinado a mejorar significativamente la tasa total de errores .
[4] Los resultados experimentales se deducen considerando un caché de 32 Kb de asignación directa, bidireccional y totalmente asociativo aumentado con un caché de víctima de 256 bloques (8 KB) y ejecutándose en él 8 puntos de referencia SPEC 95seleccionados al azar. Si bien los resultados no se pueden generalizar para todos los puntos de referencia, agregar un caché de víctima proporciona una reducción de la tasa de errores que varía del 10% al 100% para toda la configuración del caché. Aunque los retornos parecen estabilizarse más allá del tamaño de la memoria caché de la víctima de 50 bloques, lo que demuestra laobservación deJouppi [1] de que los beneficios de la memoria caché de la víctima alcanzan una meseta después de los primeros bloques de la víctima.
Se encontró que la reducción de la tasa de errores para un tamaño de caché de 64 KB es significativamente menor, lo que demuestra que el almacenamiento en caché de víctimas no es indefinidamente escalable. [4]
Al comparar varias configuraciones de caché, se encontró que, en ciertos casos, agregar una pequeña caché de víctima puede brindar un beneficio de rendimiento equivalente al observado al multiplicar el tamaño de la caché por 2. [4]
Referencias
- ↑ a b c d e Jouppi, NP (1 de mayo de 1990). Mejora del rendimiento de la caché de asignación directa mediante la adición de una pequeña caché totalmente asociativa y búferes de captación previa . 17º Simposio Internacional Anual sobre Arquitectura de Computadoras, 1990. Actas. págs. 364–373. doi : 10.1109 / ISCA.1990.134547 . ISBN 0-8186-2047-1.
- ^ "Productos (antes Crystal Well)" . Intel® ARK (especificaciones del producto) . Consultado el 16 de noviembre de 2016 .
- ^ Shimpi, Anand Lal. "Revisión de gráficos Intel Iris Pro 5200: Core i7-4950HQ probado" . Consultado el 16 de noviembre de 2016 .
- ^ a b c "Almacenamiento en caché de víctimas para grandes cachés y cargas de trabajo modernas". CiteSeerX 10.1.1.27.9810 . Cite journal requiere
|journal=
( ayuda )