En la arquitectura informática , un caché de seguimiento o caché de seguimiento de ejecución es un caché de instrucciones especializado que almacena el flujo dinámico de instrucciones conocido como seguimiento . Ayuda a aumentar el ancho de banda de búsqueda de instrucciones y a disminuir el consumo de energía (en el caso de Intel Pentium 4 ) almacenando rastros de instrucciones que ya se han obtenido y descodificado. [1] Un procesador de rastreo [2] es una arquitectura diseñada alrededor de la caché de rastreo y procesa las instrucciones a nivel de granularidad de rastreo. La teoría matemática formal de las huellas se describe mediantetrazas de monoides .
Fondo
La primera publicación académica de la caché de seguimiento fue "Caché de seguimiento: un enfoque de baja latencia para la obtención de instrucciones de gran ancho de banda". [1] Este artículo ampliamente reconocido fue presentado por Eric Rotenberg, Steve Bennett y Jim Smith en la conferencia del Simposio Internacional de Microarquitectura (MICRO) de 1996 . Una publicación anterior es la patente estadounidense 5381533, [3] de Alex Peleg y Uri Weiser de Intel, "Memoria caché de instrucciones de flujo dinámico organizada alrededor de segmentos de seguimiento independientes de la línea de dirección virtual", una continuación de una solicitud presentada en 1992, luego abandonada.
Necesidad
Los procesadores superescalares más amplios exigen que se obtengan varias instrucciones en un solo ciclo para obtener un mayor rendimiento. Las instrucciones que se van a buscar no siempre se encuentran en ubicaciones de memoria contiguas ( bloques básicos ) debido a las instrucciones de salto y bifurcación . Por lo tanto, los procesadores necesitan soporte lógico y de hardware adicional para obtener y alinear dichas instrucciones de bloques básicos no contiguos. Si se predice que varias ramas no se han tomado , los procesadores pueden obtener instrucciones de varios bloques básicos contiguos en un solo ciclo. Sin embargo, si alguna de las ramas se predice como tomada , entonces el procesador debe buscar instrucciones de la ruta tomada en ese mismo ciclo. Esto limita la capacidad de recuperación de un procesador.
Considere estos cuatro bloques básicos ( A
, B
, C
, D
) como se muestra en la figura que corresponden a una simple else if- bucle. Estos bloques se almacenarán de forma contigua como ABCD
en la memoria. Si la rama D
se prevé no se toma-, la unidad puede costar ir a buscar los elementos básicos A
, B
, C
que se colocan de forma contigua. Sin embargo, si D
se predice tomado , la ha podido recuperar la unidad tiene a buscar A
, B
, D
que se colocan de forma no contigua. Por lo tanto, la búsqueda de estos bloques que no están colocados de forma contigua en un solo ciclo será muy difícil. Entonces, en situaciones como estas, la caché de seguimiento ayuda al procesador.
Una vez recuperadas, la caché de seguimiento almacena las instrucciones en su secuencia dinámica. Cuando se vuelven a encontrar estas instrucciones, la caché de seguimiento permite que la unidad de búsqueda de instrucciones de un procesador obtenga varios bloques básicos sin tener que preocuparse por las ramas en el flujo de ejecución. Las instrucciones se almacenarán en la caché de seguimiento después de que se hayan decodificado o cuando se retiren. Sin embargo, la secuencia de instrucciones es especulativa si se almacenan justo después de la etapa de decodificación.
Estructura de seguimiento
Una traza, también llamada secuencia de instrucción dinámica, es una entrada en la caché de trazas. Puede caracterizarse por un número máximo de instrucciones y un máximo de bloques básicos . Los seguimientos pueden comenzar en cualquier instrucción dinámica. Múltiples trazas pueden tener la misma instrucción de inicio, es decir, el mismo contador de programa de inicio (PC) e instrucciones de diferentes bloques básicos según los resultados de la rama. Para la figura anterior, ABC y ABD son trazas válidas. Ambos comienzan en la misma PC (dirección de A) y tienen diferentes bloques básicos según la predicción de D.
Los seguimientos generalmente terminan cuando ocurre una de las siguientes situaciones:
- El seguimiento se llenó con el número máximo permitido de instrucciones
- Trace tiene bloques básicos máximos permitidos
- Instrucciones de devolución
- Ramas indirectas
- Llamadas al sistema
Información de control de seguimiento
Un solo rastro tendrá la siguiente información:
- PC de inicio - PC de la primera instrucción en trace
- Bandera de rama - ( bloques básicos máximos -1 ) predicciones de rama
- Máscara de rama: número de ramas en la traza y si la traza termina en una rama o no
- Trace fall through - Próxima PC si la última instrucción no es una bifurcación o no es una bifurcación
- Objetivo de seguimiento: dirección del objetivo tomado de la última rama
Diseño de caché de seguimiento
A continuación se muestran los factores que deben tenerse en cuenta al diseñar una caché de seguimiento.
- Políticas de selección de trazas: número máximo de instrucciones y bloques básicos máximos en una traza
- Asociatividad : número de formas en que una caché puede tener
- Método de indexación de caché: concatenación o XOR con bits de PC
- Asociatividad de ruta: las trazas con la misma PC inicial pero con diferentes bloques básicos se pueden asignar a diferentes conjuntos
- Opciones de relleno de caché de seguimiento -
- Después de la etapa de decodificación (especulativa)
- Después de la etapa de retiro
Una caché de seguimiento no se encuentra en la ruta crítica de búsqueda de instrucciones [4]
Lógica de acertar / fallar
Las líneas de seguimiento se almacenan en la caché de seguimiento según la PC de la primera instrucción del seguimiento y un conjunto de predicciones de bifurcación. Esto permite almacenar diferentes rutas de seguimiento que comienzan en la misma dirección, cada una de las cuales representa diferentes resultados de rama. Este método de etiquetado ayuda a proporcionar asociatividad de ruta a la caché de seguimiento. Otro método puede incluir tener solo la PC de inicio como etiqueta en la caché de seguimiento. En la etapa de búsqueda de instrucciones de una canalización , la PC actual junto con un conjunto de predicciones de bifurcaciones se verifican en la caché de seguimiento en busca de un acierto . Si hay un acierto, se proporciona una línea de rastreo para recuperar la unidad que no tiene que ir a un caché normal ni a la memoria para estas instrucciones. La caché de seguimiento continúa alimentando la unidad de recuperación hasta que finaliza la línea de seguimiento o hasta que hay una predicción errónea en la canalización. Si hay una falla, se comienza a construir una nueva traza.
El caché de seguimiento de ejecución del Pentium 4 almacena microoperaciones resultantes de la decodificación de instrucciones x86 , proporcionando también la funcionalidad de un caché de microoperaciones. Con esto, la próxima vez que se necesite una instrucción, no es necesario volver a decodificarla en microoperaciones. [5]
Desventajas
Las desventajas de la caché de seguimiento son:
- Almacenamiento de instrucciones redundante entre la caché de seguimiento y la caché de instrucciones y dentro de la propia caché de seguimiento. [6]
- Ineficiencia energética y complejidad del hardware [4]
Caché de seguimiento de ejecución
Dentro de la caché L1 de las CPU NetBurst , Intel incorporó su caché de seguimiento de ejecución. [7] [8] Almacena microoperaciones decodificadas , de modo que al ejecutar una nueva instrucción, en lugar de recuperar y decodificar la instrucción nuevamente, la CPU accede directamente a las microoperaciones decodificadas desde la caché de seguimiento, ahorrando así un tiempo considerable. Además, las microoperaciones se almacenan en caché en su ruta de ejecución prevista, lo que significa que cuando la CPU extrae instrucciones de la caché, ya están presentes en el orden correcto de ejecución. Más tarde, Intel introdujo un concepto similar pero más simple con Sandy Bridge llamado caché de microoperaciones (caché UOP).
Ver también
Referencias
- ↑ a b Rotenberg, Eric; Bennett, Steve; Smith, James E .; Rotenberg, Eric (1 de enero de 1996). "Caché de seguimiento: un enfoque de baja latencia para la obtención de instrucciones de gran ancho de banda" . En Actas del 29º Simposio Internacional de Microarquitectura : 24–34.
- ^ Eric Rotenberg, Quinn Jacobson, Yiannakis Sazeides y James E. Smith. Procesadores de seguimiento . Actas del 30 ° Simposio Internacional IEEE / ACM sobre Microarquitectura (MICRO-30) , págs.138-148, diciembre de 1997
- ^ Peleg, Alexander; Weiser, Uri (10 de enero de 1995), memoria caché de instrucciones de flujo dinámico organizada alrededor de segmentos de seguimiento independientes de la línea de dirección virtual , recuperado el 18 de octubre de 2016
- ^ a b Leon Gu; Dipti Motiani (octubre de 2003). "Caché de seguimiento" (PDF). Consultado el 6 de octubre de 2013.
- ↑ Agner Fog (19 de febrero de 2014). "La microarquitectura de las CPU Intel, AMD y VIA: una guía de optimización para programadores de ensamblajes y fabricantes de compiladores" (PDF). agner.org . Consultado el 21 de marzo de 2014.
- ^ Co, Michele. "Trazar caché" . www.cs.virginia.edu . Consultado el 21 de octubre de 2016 .
- ^ [1]
- ^ https://web.archive.org/web/20160306140603/http://www.xbitlabs.com/articles/cpu/print/replay.html