Articulo de referencia

caché de víctimas

Una caché de víctimas es una caché pequeña, generalmente totalmente asociativa, ubicada en la ruta de recarga de la caché de la CPU . Almacena todos los bloques expulsados ​​de ...

Una caché de víctimas es una caché pequeña, generalmente totalmente asociativa, ubicada en la ruta de recarga de la caché de la CPU . Almacena todos los bloques expulsados ​​de ese nivel de caché y fue propuesta originalmente en 1990. En las arquitecturas modernas, esta función la realizan normalmente las cachés de nivel 3 o nivel 4.

Descripción general

El almacenamiento en caché de víctimas es una técnica de hardware para mejorar el rendimiento de las cachés propuesta por Norman Jouppi . Como se menciona en su artículo: [ 1 ] 

El almacenamiento en caché de fallos coloca una caché totalmente asociativa entre la caché y su ruta de recarga. Los fallos en la caché que coinciden con los fallos en la caché de fallos tienen una penalización de un ciclo, en comparación con una penalización de varios ciclos sin la caché de fallos. El almacenamiento en caché de víctimas es una mejora del almacenamiento en caché de fallos que carga la pequeña caché totalmente asociativa con la víctima de un fallo y no con la línea de caché solicitada. [ 1 ] 

Una caché de víctimas es una caché de hardware diseñada para reducir los fallos de acceso por conflicto y mejorar la latencia de acceso en cachés de mapeo directo. Se utiliza en la ruta de recarga de una caché de nivel 1, donde cualquier línea de caché desalojada de la caché se almacena en la caché de víctimas. Como resultado, la caché de víctimas se llena solo cuando se desaloja información de la caché de nivel 1. Cuando se produce un fallo de acceso en la caché de nivel 1, se comprueba la entrada no encontrada en la caché de víctimas. Si el acceso resulta en un acierto, se intercambian el contenido de la línea de caché de nivel 1 y la línea correspondiente de la caché de víctimas.

Aunque inicialmente propuesto por Jouppi para mejorar el rendimiento de la caché de un nivel 1 de caché de mapeo directo, los microprocesadores modernos con jerarquía de caché multinivel emplean caché de nivel 3 o nivel 4 para actuar como caché víctima para la caché que se encuentra por encima en la jerarquía de memoria . El 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é víctima en los microprocesadores POWER5 (IBM).

Fondo

Con el avance de la arquitectura y la tecnología del hardware, el rendimiento y la frecuencia de los procesadores aumentaron a un ritmo mucho mayor que los tiempos de ciclo de la memoria, lo que generó una brecha de rendimiento significativa. El problema del aumento de la latencia de la memoria en comparación con la velocidad del procesador se ha abordado mediante la incorporación de memoria caché de alta velocidad.

Las cachés de mapeo directo ofrecen un tiempo de acceso más rápido que las cachés asociativas por conjuntos . Sin embargo, en las cachés de mapeo directo, cuando varios bloques de caché en memoria se asignan a la misma línea de caché, se desplazan entre sí cada vez que se accede a uno de ellos. Este problema, conocido como conflicto de caché, surge debido a la limitada asociatividad de la caché. Aumentar la asociatividad de la caché puede mitigar este problema, pero existen complejidades de implementación y limitaciones en cuanto a cuánto se puede aumentar la asociatividad. Para abordar el problema del conflicto de caché dentro de las restricciones de la asociatividad limitada de la caché, se suele emplear una caché de víctimas.

Implementación

A continuación se describe el comportamiento de una caché de víctima en su interacción respectiva con la caché de nivel correspondiente:

Acierto de caché: No se realizó ninguna acción.

Fallo de caché, acierto de la víctima: El bloque que se encuentra en la caché de la víctima se reemplaza por otro. Esta nueva entrada en la caché de la víctima se convierte en el bloque utilizado más recientemente.

Ejemplo de implementación

Fallo de caché, Fallo de víctima: El bloque se carga en la caché desde el siguiente nivel. El bloque expulsado de la caché se almacena en la caché de víctimas.

Ejemplo

Consideremos una caché L1 de mapeo directo con los bloques A y B apuntando al mismo conjunto. Está vinculada a una caché víctima totalmente asociativa de 2 entradas que contiene los bloques C y D.

El trazado a seguir: A, B, A, B...

En el diagrama, podemos observar que, en caso de que se produzca un acierto en la caché de víctimas (VC), los bloques A y B se intercambian. El bloque menos utilizado de la caché de víctimas permanece sin cambios. Esto genera una ilusión de asociatividad en la caché L1 de mapeo directo, lo que a su vez reduce los fallos por conflicto.

En el caso de dos cachés, L1 y L2, con una 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.

Implicaciones del desempeño

Al medir la mejora del rendimiento mediante el uso de la caché de víctimas, Jouppi [ 1 ] asumió una caché de mapeo directo de nivel 1 aumentada con una caché totalmente asociativa. Para el conjunto de pruebas que utilizó, en promedio, el 39 % de los fallos de la caché de datos de nivel 1 se encontraron como fallos de conflicto, mientras que en promedio el 29 % de los fallos de instrucción de nivel 1 se encontraron como fallos de conflicto. [ 1 ] Dado que los fallos de conflicto representan un gran porcentaje de los fallos totales, proporcionar asociatividad adicional al aumentar la caché de nivel 1 con una caché de víctimas seguramente mejorará significativamente la tasa total de fallos .

Los resultados experimentales se deducen considerando una caché de 32 Kb de mapeo directo, bidireccional y totalmente asociativa, aumentada con una  caché de víctimas de 256 bloques (8 KB) y ejecutando en ella 8 benchmarks SPEC 95 seleccionados aleatoriamente. [ 4 ] Si bien los resultados no se pueden generalizar para todos los benchmarks, agregar una caché de víctimas proporciona una reducción de la tasa de fallos que oscila entre el 10 % y el 100 % para todas las configuraciones de caché. [ 4 ] Los retornos, sin embargo, parecen estabilizarse más allá de un tamaño de caché de víctimas de 50 bloques, lo que demuestra la observación de Jouppi [ 1 ] de que los beneficios de la caché de víctimas alcanzan una meseta después de los primeros bloques de víctimas. [ 4 ]

Se ha descubierto que la reducción de la tasa de fallos 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 escalable indefinidamente. [ 4 ]

Al comparar varias configuraciones de caché, se encontró que en ciertos casos agregar una pequeña caché de víctimas puede brindar un beneficio de rendimiento equivalente al observado al multiplicar el tamaño de la caché por 2. [ 4 ]

Referencias

  1. 1 2 3 4 5 Jouppi, NP (1990-05-01). Mejora del rendimiento de la caché de mapeo directo mediante la adición de una pequeña caché totalmente asociativa y búferes de precarga . XVII Simposio Internacional Anual sobre Arquitectura de Computadoras, 1990. Actas. págs. 364–373 . doi : 10.1109/ISCA.1990.134547 . ISBN  0-8186-2047-1.
  2. "Productos (anteriormente Crystal Well)" . Intel® ARK (Especificaciones del producto) . Consultado el 16 de noviembre de 2016 .
  3. Shimpi, Anand Lal. "Análisis de la tarjeta gráfica Intel Iris Pro 5200: prueba con Core i7-4950HQ" . Archivado del original el 7 de junio de 2013. Consultado el 16 de noviembre de 2016 .
  4. 1 2 3 4 5 Wasserman, Hal (Primavera de 1996), "Almacenamiento en caché de víctimas para grandes cachés y cargas de trabajo modernas" , Proyecto de Ciencias de la Computación 252 , Universidad de California, Berkeley