¿Qué sucede en una falla de caché?

0

En los procesadores actuales, más de un nivel de memoria está presente para intentar la realización de un sistema de memoria ideal y para hacer más trabajo para el ciclo del reloj, más de una instrucción está en la línea de ejecución al explotar el ILP (Instrucción Paralelismo de nivel).

Mi pregunta es, en un caso de falta de caché, ¿qué sucede? es decir, si las instrucciones anteriores a y las instrucciones posteriores a la que causó la falta de memoria caché están bloqueadas o solo las instrucciones posteriores a la falta de memoria caché están detenidas?

Sé que los casos pueden surgir dependiendo de si el procesador tiene ejecución especulativa y fuera de orden y si el procesador también tiene la capacidad de explotar el MLP (paralelismo de nivel de memoria).

Quiero saber sobre los casos en que el procesador tiene MLP y no lo tiene

No he podido encontrar información útil.

    

2 respuestas

2

Las instrucciones antes (en el orden del programa) de la falta de memoria caché de datos fluirán por la tubería de forma normal. (Una excepción inusual sería una canalización basada en empuje, tal como la utilizan algunos VLIW anteriores. Tales operaciones subsiguientes requerían que las operaciones anteriores se redujeran por las tuberías).

Para una falta de memoria caché en una tienda, el valor almacenado se puede colocar en un búfer que permite que la tienda se complete a pesar de la falta de memoria caché. (Esto es posible porque el búfer no requiere ningún dato de la memoria, que generalmente se logra al tener un bit válido para cada unidad almacenable [típicamente byte].)

Muchos procesadores que utilizan la ejecución en orden permiten a las instrucciones después de una carga para ejecutar y completar, incluso otra carga, si las siguientes instrucciones no son datos dependientes de la carga ( o, por supuesto, después de una instrucción que depende de los datos). Esto se puede lograr mediante el uso de un marcador que marque la disponibilidad de cada registro.

Para un procesador fuera de orden, las instrucciones después de una instrucción que depende de la instrucción de carga que falta en la memoria caché se pueden ejecutar completamente y los resultados se pueden almacenar en registros de cambio de nombre (o en una cola de almacenamiento para almacenar en memoria), pero no se pueden confirmar. / p>

Las instrucciones de flujo de control, como las ramas y los saltos indirectos, son especiales ya que las siguientes instrucciones dependen del resultado, pero a menudo la predicción se puede usar para ocultar esta dependencia. Aunque se ha estudiado la predicción del valor de los errores de carga, el beneficio es relativamente limitado dado el costo.

En teoría a veces también sería posible ejecutar de manera especulativa parcialmente instrucciones dependientes. Por ejemplo:

  lw r3, [r5]; // load word
  add r3, r3, #50; // r3 = r3 + 50
  slt r6, r3, #1000; // (r3<1000)?r6=1:r6=0
  bez r6 LABEL; // if r6=0 goto LABEL
  addi r3, r3, #10; // r3 = r3 + 10
LABEL:

En teoría, el hardware podría especular que la rama no se toma y agregar 50 y 10 para que 60 se agregue al valor cuando esté disponible. Este tipo de optimización se ha propuesto para cachés de rastreo (instrucciones).

Algunas instrucciones también pueden dividirse en operaciones de componentes que no dependen del valor aún no disponible para permitir la ejecución parcial de la instrucción. Por ejemplo, la división que utiliza un mecanismo de Newton-Raphson puede generar el recíproco mientras el dividendo no está disponible.

    
respondido por el Paul A. Clayton
1

He visto varias soluciones dependiendo del procesador y la arquitectura de la memoria. A veces hay un bloqueo simple mientras se accede a la memoria principal, siendo más lento que el caché. A veces, se vacia una tubería y se trae una página completa de la MMU a la memoria caché. En sistemas más complicados se emplean múltiples estrategias. ¿Estás mirando una arquitectura particular?

Recuerdo una discusión acerca de la mitad de la memoria caché que se puede bloquear en algunos procesadores ARM y puede cargar esa sección con un código de kernel de tiempo crítico o un código de un ciclo importante que necesita la velocidad, y luego bloquear la memoria caché. Esto podría significar la diferencia entre obtener código de 100 MHz RAM en lugar de ejecutarse siempre a 400 o 600 MHZ o incluso a 1.5 GHz. No lo he probado y no conozco el límite superior de la velocidad de la memoria caché. Lo necesitaré un día y tendré que averiguar si es verdad.

    
respondido por el C. Towne Springer

Lea otras preguntas en las etiquetas