Articulo de referencia

caché de rastreo

Funcionamiento de una caché de rastreo En arquitectura de computadoras , una caché de trazas o caché de trazas de ejecución es una caché de instrucciones especializada que almac...

Funcionamiento de una caché de rastreo

En arquitectura de computadoras , una caché de trazas o caché de trazas de ejecución es una caché de instrucciones especializada que almacena el flujo dinámico de instrucciones conocido como traza . Ayuda a aumentar el ancho de banda de búsqueda de instrucciones y a disminuir el consumo de energía (en el caso del Intel Pentium 4 ) al almacenar trazas de instrucciones que ya han sido buscadas y decodificadas. [ 1 ] Un procesador de trazas [ 2 ] es una arquitectura diseñada en torno a la caché de trazas y procesa las instrucciones con granularidad a nivel de traza. La teoría matemática formal de las trazas se describe mediante monoides de trazas .

Fondo

La primera publicación académica sobre caché de trazas fue "Caché de trazas: un enfoque de baja latencia para la obtención de instrucciones de alto 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 sobre 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 en torno a segmentos de traza independientes de la línea de dirección virtual", una continuación de una solicitud presentada en 1992, posteriormente abandonada.

Necesidad

Los procesadores superescalares más amplios requieren que se busquen múltiples instrucciones en un solo ciclo para un mayor rendimiento. Las instrucciones que se deben 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 lógica y soporte de hardware adicionales para buscar y alinear dichas instrucciones desde bloques básicos no contiguos. Si se predice que varias bifurcaciones no se tomarán , los procesadores pueden buscar instrucciones de múltiples bloques básicos contiguos en un solo ciclo. Sin embargo, si se predice que alguna de las bifurcaciones se tomará , el procesador debe buscar instrucciones de la ruta tomada en ese mismo ciclo. Esto limita la capacidad de búsqueda de un procesador.

Bloques básicos de un bucle if-else simple

Consideremos estos cuatro bloques básicos ( A, B, C, D) como se muestra en la figura que corresponden a un bucle if-else simple . Estos bloques se almacenarán contiguos en ABCDla memoria. Si Dse predice que la rama no se tomará, la unidad de búsqueda puede obtener los bloques básicos A, B, Cque están colocados contiguos. Sin embargo, si Dse predice que se tomará , la unidad de búsqueda tiene que obtener A, B, Dque están colocados de forma no contigua. Por lo tanto, obtener estos bloques que están colocados de forma no contigua en un solo ciclo será muy difícil. Así que, en situaciones como estas, la caché de trazas ayuda al procesador.

Una vez recuperadas, la caché de trazas almacena las instrucciones en su secuencia dinámica. Cuando se encuentran de nuevo estas instrucciones, la caché de trazas permite que la unidad de búsqueda de instrucciones del procesador obtenga varios bloques básicos sin tener que preocuparse por las bifurcaciones en el flujo de ejecución. Las instrucciones se almacenan en la caché de trazas después de ser decodificadas o al ser retiradas. Sin embargo, la secuencia de instrucciones es especulativa si se almacenan justo después de la etapa de decodificación.

Estructura de traza

Una traza, también llamada secuencia de instrucciones dinámica, es una entrada en la caché de trazas. Se caracteriza por el número máximo de instrucciones y el número máximo de bloques básicos . Las trazas pueden comenzar en cualquier instrucción dinámica. Varias trazas pueden tener la misma instrucción inicial, es decir, el mismo contador de programa (PC) inicial, e instrucciones de diferentes bloques básicos según los resultados de las bifurcaciones. En la figura anterior, ABC y ABD son trazas válidas. Ambas comienzan en el mismo PC (dirección de A) y tienen diferentes bloques básicos según la predicción de D.

Los rastreos suelen finalizar cuando ocurre alguna de las siguientes situaciones:

  1. El rastreo se llenó con el número máximo permitido de instrucciones.
  2. Trace tiene un máximo permitido de bloques básicos
  3. Instrucciones de devolución
  4. Ramas indirectas
  5. llamadas al sistema

Información de control de trazabilidad

Un único rastro contendrá la siguiente información:

  • PC de inicio: PC de la primera instrucción en el rastro
  • Indicador de bifurcación - ( máximo de bloques básicos -1 ) predicciones de bifurcación
  • Máscara de ramificación: número de ramificaciones en el rastro y si el rastro termina en una ramificación o no.
  • Seguimiento de caída: siguiente PC si la última instrucción no es una bifurcación o no es una bifurcación.
  • Objetivo de rastreo: dirección del objetivo tomado en la última rama.

Diseño de caché de rastreo

A continuación se detallan los factores que deben tenerse en cuenta al diseñar una caché de trazas.

  • 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 PC.
  • Asociatividad de ruta: las trazas con el mismo PC inicial pero con diferentes bloques básicos se pueden asignar a diferentes conjuntos.
  • Opciones de llenado de caché de rastreo -
    1. Después de la etapa de decodificación (especulativa)
    2. Tras la etapa de jubilación

Una caché de trazas no está en la ruta crítica de la obtención de instrucciones [ 4 ]

Lógica de acierto/error

Las líneas de rastreo se almacenan en la caché de rastreo en función del PC de la primera instrucción del rastreo y un conjunto de predicciones de bifurcación. Esto permite almacenar diferentes rutas de rastreo que comienzan en la misma dirección, cada una representando diferentes resultados de bifurcación. Este método de etiquetado ayuda a proporcionar asociatividad de ruta a la caché de rastreo. Otros métodos pueden incluir tener solo el PC inicial como etiqueta en la caché de rastreo. En la etapa de búsqueda de instrucciones de una tubería , el PC actual junto con un conjunto de predicciones de bifurcación se comprueba en la caché de rastreo para ver si hay una coincidencia . Si hay una coincidencia, se proporciona una línea de rastreo a la unidad de búsqueda, que no tiene que ir a una caché regular ni a la memoria para estas instrucciones. La caché de rastreo continúa alimentando la unidad de búsqueda hasta que la línea de rastreo termina o hasta que hay una predicción errónea en la tubería. Si hay un fallo, se comienza a construir un nuevo rastreo.

La caché de trazas de ejecución del Pentium 4 almacena las microoperaciones resultantes de la decodificación de instrucciones x86 , proporcionando además la funcionalidad de una caché de microoperaciones. Gracias a esto, la próxima vez que se necesite una instrucción, no será necesario decodificarla de nuevo en microoperaciones. [ 5 ]

Desventajas

Las desventajas de la caché de trazas son:

  1. Almacenamiento redundante de instrucciones entre la caché de trazas y la caché de instrucciones, y dentro de la propia caché de trazas. [ 6 ]
  2. 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 trazas de ejecución. [ 7 ] [ 8 ] Almacena microoperaciones decodificadas , de modo que al ejecutar una nueva instrucción, en lugar de recuperarla y decodificarla de nuevo, la CPU accede directamente a las microoperaciones decodificadas desde la caché de trazas, 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 recupera las instrucciones de la caché, estas ya están presentes en el orden de ejecución correcto. Posteriormente, Intel introdujo un concepto similar, pero más simple, con Sandy Bridge, denominado caché de microoperaciones (caché UOP).

Véase también

Referencias

  1. 1 2 Rotenberg, Eric; Bennett, Steve; Smith, James E.; Rotenberg, Eric (1996-01-01). "Trace Cache: un enfoque de baja latencia para la obtención de instrucciones de alto ancho de banda" . En Actas del 29º Simposio Internacional sobre Microarquitectura : 24–34 .
  2. Eric Rotenberg, Quinn Jacobson, Yiannakis Sazeides y James E. Smith. Procesadores de trazas . Actas del 30.º Simposio Internacional IEEE/ACM sobre Microarquitectura (MICRO-30) , págs. 138-148, diciembre de 1997.
  3. Peleg, Alexander; Weiser, Uri (10 de enero de 1995), Memoria caché de instrucciones de flujo dinámico organizada en torno a segmentos de traza independientes de la línea de dirección virtual , consultado el 18 de octubre de 2016.
  4. 1 2 León Gu; Dipti Motiani (octubre de 2003). "Seguimiento de caché" (PDF). Consultado el 6 de octubre de 2013.
  5. Agner Fog (19 de febrero de 2014). «La microarquitectura de las CPU de Intel, AMD y VIA: una guía de optimización para programadores de lenguaje ensamblador y creadores de compiladores» (PDF). agner.org . Consultado el 21 de marzo de 2014.
  6. Co, Michele. "Trace Cache" . www.cs.virginia.edu . Consultado el 21 de octubre de 2016 .
  7. Carmean, Doug (Primavera de 2002). "El procesador Intel® Pentium® 4" (PDF) . Archivado del original (PDF) el 19 de abril de 2018.
  8. "X-bit labs - Versión impresa" . www.xbitlabs.com . Archivado del original el 6 de marzo de 2016. Consultado el 12 de enero de 2022 .