¿Qué es una caché de trazas?

Como ya sabemos de otras entradas, la memoria caché es el primer nivel de la jerarquía de memoria en el que el procesador de un sistema buscará las instrucciones y los datos que necesita. Normalmente, en el primer nivel de la jerarquía de memoria, existe una caché especializada en el almacenamiento de instrucciones y otra en el almacenamiento de datos.
fff
En una caché de trazas se almacenan las instrucciones en el orden en el que van a ejecutarse (esto incluye los saltos, las llamadas a procedimientos,…). Es decir, la caché de trazas almacena secuencias de instrucciones en el orden en el que van a buscarse, no en el orden en el que aparecen en el código. A menudo se almacenan diferentes secuencias para un mismo fragmento de código, mientras se van resolviendo las predicciones de los saltos, por lo que en estos casos se desaprovecha espacio almacenando instrucciones replicadas, pero el aumento de rendimiento que se obtiene a cambio compensa este pequeño problema.
sss
En lugar de recuperar una única instrucción como se hace en una caché de instrucciones tradicional, se recupera una traza completa de golpe: por eso se reduce el tiempo de acceso respecto de las cachés normales. Pero como además se aprovecha mejor la localidad, se reduce la tasa de fallos, ya que las instrucciones están almacenadas en el orden en el que el procesador las va a pedir.
sss
Además se aprovecha mejor el espacio en la caché: en un bloque con un salto que se toma las instrucciones que van detrás del salto no tienen que estar en la caché porque no van a ejecutarse. Con una caché normal, esto no se puede evitar. Pero con la caché de trazas sí.
dddd

No hay comentarios: