Articulo de referencia

Runahead

En informática y diseño de procesadores , la técnica de anticipación (runahead) permite que un procesador procese instrucciones de forma especulativa durante los ciclos de fallo...

En informática y diseño de procesadores , la técnica de anticipación (runahead) permite que un procesador procese instrucciones de forma especulativa durante los ciclos de fallos de caché . Estas instrucciones preprocesadas se utilizan para generar precargas de flujos de instrucciones y datos mediante la ejecución de instrucciones que provocan fallos de caché (generalmente denominadas cargas de latencia larga ) antes de que ocurran normalmente, ocultando así la latencia de la memoria . En la anticipación, el procesador utiliza los recursos de ejecución inactivos para calcular las direcciones de los flujos de instrucciones y datos utilizando la información disponible, independientemente del fallo de caché. Una vez resuelto el fallo de caché inicial, se descartan todos los resultados de la anticipación y el procesador reanuda la ejecución con normalidad. El principal caso de uso de esta técnica es mitigar los efectos del límite de memoria . También puede utilizarse para otros fines, como el cálculo previo de los resultados de las bifurcaciones para lograr una predicción de bifurcaciones de alta precisión . [ 1 ]

El principal coste de hardware reside en un sistema para guardar el estado del archivo de registros . Normalmente, los procesadores de ejecución anticipada también incluyen una pequeña caché adicional , que permite ejecutar operaciones de escritura anticipada sin modificar la memoria real. Algunas implementaciones también utilizan unidades de aceleración de hardware dedicadas para ejecutar segmentos específicos de instrucciones preprocesadas. [ 2 ] [ 3 ]

Runahead se investigó inicialmente en el contexto de un microprocesador de ejecución en orden; [ 4 ] sin embargo, esta técnica se ha extendido para su uso con microprocesadores de ejecución fuera de orden . [ 5 ]

Desencadenante

En principio, cualquier evento puede desencadenar un desbordamiento, aunque normalmente la condición de entrada es un fallo de caché de datos de último nivel que llega al inicio del búfer de reordenamiento . [ 5 ] En un procesador fuera de orden normal, tales instrucciones de carga de larga latencia bloquean la finalización de todas las instrucciones más jóvenes hasta que se atiende el fallo y se finaliza la carga.

Cuando un procesador entra en modo de ejecución anticipada, guarda todos los registros arquitectónicos y registra la dirección de la instrucción de carga que provocó la entrada en dicho modo. Todas las instrucciones en la tubería se marcan entonces como ejecución anticipada. Dado que el valor devuelto por un fallo de caché no se puede conocer de antemano, es posible que las instrucciones preprocesadas dependan de datos desconocidos o inválidos . Los registros que contienen dichos datos, o datos que dependen de ellos, se indican añadiendo un bit de "inválido" o INV a cada registro del banco de registros. Las instrucciones que utilizan o escriben dichos datos inválidos también se marcan con un bit INV. Si la instrucción que inició la ejecución anticipada fue una carga, se le emite un resultado falso y se marca como INV, lo que le permite marcar su registro de destino como INV y salir de la tubería.

Instrucciones de preprocesamiento

En el modo de ejecución anticipada, el procesador continúa ejecutando instrucciones después de la instrucción que inició dicha ejecución. Sin embargo, este modo se considera un estado especulativo en el que el procesador solo intenta generar datos adicionales y fallos en la caché de instrucciones, que en la práctica son precargas. El diseñador puede optar por permitir que la ejecución anticipada omita las instrucciones que no se encuentran en la caché de instrucciones, teniendo en cuenta que la calidad de las precargas generadas se verá reducida, ya que se desconoce el efecto de las instrucciones faltantes.

Los registros que son el destino de una instrucción que tiene uno o más registros fuente marcados como INV se marcan como INV. Esto permite al procesador saber qué valores de registro son (probablemente) fiables durante el modo de ejecución anticipada. Las instrucciones de salto que no se pueden resolver debido a los registros fuente INV se asumen simplemente como predichas correctamente. En caso de que la predicción del salto sea errónea, el procesador continúa ejecutando instrucciones de ruta incorrecta hasta que alcanza un punto independiente de salto, pudiendo ejecutar cargas de ruta incorrecta que contaminan la caché con entradas de datos inútiles. Los resultados válidos de las instrucciones de salto se pueden guardar para su uso posterior como predicciones de alta precisión durante el funcionamiento normal.

Dado que el estado de ejecución anticipada es especulativo, las instrucciones de almacenamiento no pueden modificar la memoria. Para comunicar los resultados de almacenamiento a las cargas dependientes, se puede utilizar una caché muy pequeña a la que solo acceden las cargas y fallos de ejecución anticipada, denominada caché de ejecución anticipada . [ 5 ] Esta caché es funcionalmente similar a una caché normal, pero contiene bits INV para rastrear qué datos son inválidos. Las escrituras INV establecen el bit INV de su línea de caché de destino correspondiente, mientras que las escrituras válidas restablecen el bit INV de la línea de caché. Cualquier instrucción de carga de ejecución anticipada debe comprobar tanto la caché real como la de ejecución anticipada. Si la carga encuentra un acierto en la caché de ejecución anticipada, descartará el resultado de la caché real y utilizará los datos de la caché de ejecución anticipada, pudiendo volverse inválida si la línea de caché estaba marcada con un bit INV. Debido a que la caché de ejecución anticipada está separada de la jerarquía de memoria , no hay un lugar al que expulsar los datos antiguos. Por lo tanto, en caso de conflicto de caché, los datos antiguos simplemente se eliminan de la caché. Tenga en cuenta que, debido al tamaño limitado de la caché de ejecución anticipada, no es posible realizar un seguimiento perfecto de los datos INV durante este modo (ya que los datos INV podrían sobrescribirse con datos válidos en caso de conflicto de caché ). En la práctica, esto no es crucial, puesto que todos los resultados calculados durante el modo de ejecución anticipada se descartan.

Saliendo

Al igual que al entrar en el modo de anticipación, cualquier evento puede, en principio, provocar su salida. Sin embargo, en el caso de un período de anticipación iniciado por un fallo de caché, normalmente se finaliza una vez que se ha solucionado dicho fallo.

Cuando el procesador sale del bucle de ejecución anticipada, todas las instrucciones posteriores a la que inició dicho bucle, incluida esta, se eliminan de la tubería de procesamiento. A continuación, se restaura el archivo de registros arquitectónicos desde el punto de control. Posteriormente, se copia una tabla de alias de registros (RAT) predeterminada tanto en la RAT de entrada como en la de salida. Finalmente, el procesador se redirige a la dirección de la instrucción que inició el bucle de ejecución anticipada. El procesador reanuda entonces la ejecución en modo normal.

Opciones de punto de control de archivo de registro

El método más sencillo para guardar el registro arquitectónico (ARF) consiste en realizar una copia completa del registro físico (PRF) (ya que el PRF es un superconjunto del ARF) a un registro de punto de control (CRF) cuando el procesador entra en modo de ejecución anticipada. Al salir de este modo, el procesador puede realizar una copia completa del CRF al PRF. Sin embargo, existen opciones más eficientes.

Una forma de eliminar las operaciones de copia es escribir tanto en el PRF como en el CRF durante el funcionamiento normal, pero solo en el PRF en modo de ejecución anticipada. Este enfoque puede eliminar la sobrecarga de puntos de control que se produciría al iniciar la ejecución anticipada si se escribe en paralelo en el CRF y el PRF, pero aún requiere que el procesador restaure el PRF cuando se salga de la ejecución anticipada.

Dado que los únicos registros que requieren puntos de control son los registros arquitectónicos, el CRF solo necesita contener tantos registros como registros arquitectónicos existan, según lo define la arquitectura del conjunto de instrucciones . Como los procesadores suelen contener muchos más registros físicos que arquitectónicos, esto reduce significativamente el tamaño del CRF.

Un enfoque aún más agresivo consiste en depender únicamente de las rutas de reenvío de operandos de la microarquitectura para proporcionar valores modificados durante el modo de ejecución anticipada. El archivo de registros se "bloquea" deshabilitando las escrituras en él durante dicho modo.

Optimizaciones

Si bien la ejecución anticipada (runahead) busca aumentar el rendimiento del procesador, el preprocesamiento de instrucciones cuando el procesador estaría inactivo reduce su eficiencia energética debido a un mayor consumo de energía dinámica . Además, entrar y salir de la ejecución anticipada genera una sobrecarga de rendimiento, ya que el registro de puntos de control y, en particular, el vaciado de la tubería pueden tardar muchos ciclos en completarse. Por lo tanto, no es recomendable iniciar la ejecución anticipada en cada oportunidad.

Algunas optimizaciones que mejoran la eficiencia energética del sistema de avance son:

  • Solo se activa el modo de ejecución anticipada si se prevé que el procesador ejecute cargas de latencia prolongada durante dicho modo, reduciendo así los períodos cortos e improductivos de ejecución anticipada. [ 6 ]
  • Limitar la duración de los períodos de ejecución anticipada para que solo se ejecuten durante el tiempo que se espera que generen resultados útiles. [ 7 ]
  • Solo instrucciones de preprocesamiento que eventualmente conducen a instrucciones de carga. [ 8 ]
  • Utilizar únicamente recursos libres del procesador para preprocesar las instrucciones. [ 9 ]
  • Almacenamiento en búfer de microoperaciones que fueron decodificadas durante la ejecución anticipada para su reutilización en modo normal. [ 9 ]

Efectos secundarios

Se ha observado que la anticipación de ejecución mejora las tasas de errores transitorios en los procesadores como efecto secundario. Mientras un procesador espera un fallo de caché, todo su estado es vulnerable a errores transitorios mientras el fallo de caché está pendiente. Al continuar la ejecución, la anticipación de ejecución reduce involuntariamente el tiempo durante el cual el estado del procesador es vulnerable a errores transitorios, reduciendo así las tasas de errores transitorios. [ 10 ]

Véase también

Referencias

  1. Pruett, Stephen; Patt, Yale (octubre de 2021). «Branch Runahead: una alternativa a la predicción de ramas para ramas imposibles de predecir» . MICRO-54: 54.º Simposio Internacional Anual IEEE/ACM sobre Microarquitectura . MICRO '21. Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 804–815 . doi : 10.1145/3466752.3480053 . ISBN  978-1-4503-8557-2. S2CID 239011545 . 
  2. Hashemi, Milad; Mutlu, Onur ; Patt, Yale N. (octubre de 2016). "Continuous runahead: aceleración de hardware transparente para cargas de trabajo intensivas en memoria". 49.º Simposio Internacional Anual IEEE/ACM sobre Microarquitectura (MICRO) de 2016. págs. 1-12 . doi : 10.1109/MICRO.2016.7783764 . ISBN  978-1-5090-3508-3. S2CID 439575 . 
  3. Pruett, Stephen; Patt, Yale (octubre de 2021). «Branch Runahead: una alternativa a la predicción de ramas para ramas imposibles de predecir» . MICRO-54: 54.º Simposio Internacional Anual IEEE/ACM sobre Microarquitectura . MICRO '21. Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 804–815 . doi : 10.1145/3466752.3480053 . ISBN  978-1-4503-8557-2. S2CID 239011545 . 
  4. Dundas, James D. y Mudge, Trevor N. (septiembre de 1996). " Uso de ciclos de espera para mejorar el rendimiento de los microprocesadores ". Informe técnico. Departamento de Ingeniería Eléctrica e Informática, Universidad de Michigan.
  5. 1 2 3 Mutlu, O.; Stark, J.; Wilkerson, C.; Patt, YN (febrero de 2003). "Ejecución anticipada: una alternativa a ventanas de instrucciones muy grandes para procesadores fuera de orden". Noveno Simposio Internacional sobre Arquitectura de Computadoras de Alto Rendimiento, 2003. HPCA-9 2003. Actas . págs. 129–140 . doi : 10.1109/HPCA.2003.1183532 . ISBN  0-7695-1871-0. S2CID 9016814 . 
  6. ^ Van Craeynest, Kenzo; Eyerman, Stijn; Eeckhout, Lieven (2009), Seznec, André; Emer, Joel; O'Boyle, Michael; Martonosi, Margaret (eds.), "Subprocesos Runahead compatibles con MLP en un procesador multiproceso simultáneo" , Compiladores y arquitecturas integradas de alto rendimiento , vol. 5409, Berlín, Heidelberg: Springer Berlin Heidelberg, págs. 110-124 , doi : 10.1007/978-3-540-92990-1_10 , ISBN   978-3-540-92989-5, consultado el 2 de junio de 2023{{citation}}: CS1 mantenimiento: parámetro de trabajo con ISBN ( enlace )
  7. ^ Van Craeynest, Kenzo; Eyerman, Stijn; Eeckhout, Lieven (2009). "Subprocesos Runahead compatibles con MLP en un procesador multiproceso simultáneo" . En Seznec, André; Emer, Joel; O'Boyle, Michael; Martonosi, Margarita; Ungerer, Theo (eds.). Compiladores y arquitecturas integradas de alto rendimiento . Apuntes de conferencias sobre informática. vol. 5409. Berlín, Heidelberg: Springer. págs. 110-124 . doi : 10.1007/978-3-540-92990-1_10 . ISBN   978-3-540-92990-1.
  8. Hashemi, Milad; Patt, Yale N. (5 de diciembre de 2015). "Ejecución anticipada filtrada con un búfer de anticipación" . Actas del 48.º Simposio Internacional sobre Microarquitectura . MICRO-48. Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 358–369 . doi : 10.1145/2830772.2830812 . ISBN  978-1-4503-4034-2. S2CID 2897777 . 
  9. 1 2 Naithani, Ajeya; Feliu, Josué; Adileh, Almutaz; Eeckhout, Lieven (febrero de 2020). "Ejecución precisa y anticipada". Simposio internacional IEEE 2020 sobre arquitectura informática de alto rendimiento (HPCA) . págs. 397– 410. doi : 10.1109/HPCA47549.2020.00040 . hdl : 1854/LU-8668193 . ISBN  978-1-7281-6149-5. S2CID 215817567 . 
  10. Naithani, Ajeya; Eeckhout, Lieven (abril de 2022). "Reliability-Aware Runahead". Simposio Internacional IEEE de Arquitectura de Computadoras de Alto Rendimiento (HPCA) de 2022. IEEE. págs. 772–785 . doi : 10.1109/HPCA53966.2022.00062 . ISBN  978-1-6654-2027-3. S2CID 248865294 . 
Obtenido de " https://en.wikipedia.org/w/index.php?title=Runahead&oldid=1359651369 "