Comprensión de la ranura de retraso de bifurcación y la captación previa de predicción de bifurcación en la canalización de instrucciones

Déjame definir:

  • Ranura de retardo de bifurcación: por lo general, los ensambladores reordenan las instrucciones para mover algunas instrucciones inmediatamente después de la instrucción de bifurcación, de modo que la instrucción movida siempre se ejecutará, independientemente de si se toma la bifurcación o no, sin dejar el sistema en un estado inconsistente.

  • Precarga de predicción de bifurcación: predecir cuál será el resultado de la condición de bifurcación y luego precargar las instrucciones desde la ubicación resultante, para que se ejecuten inmediatamente después de la instrucción de bifurcación.

Ahora, consideremos la siguiente secuencia de ejecución (a continuación,: Finstrucción Fetch,: Dinstrucción Decode,: XeXecute,: Macceso a memoria,: WWrite back):

BRANCH   F   D   X   M   W
INSTR1       F   D   X   M   W
INSTR2           F   D   X   M   W
INSTR3               F   D   X   M   W

Por lo general, la condición de bifurcación se evalúa y ejecuta en la etapa X. En esta etapa, INSTR1ya INSTR2se han iniciado y estas son las instrucciones que pueden verse afectadas por nuestra elección de utilizar intervalos de retardo de ramificación o captación previa de predicción de ramificación o ambos. No encontré ningún texto para discutir esto claramente. Así que traté de adivinarlo de la siguiente manera:

  • Cuando usamos ambos, la secuencia de instrucciones sería:

    BRANCH: branch-instruction
    INSTR1: branch-delay-slot
    INSTR2: branch-prediction-prefetch
    
  • Cuando usamos solo la predicción de bifurcación, la secuencia de instrucciones sería:

    BRANCH: branch-instruction
    INSTR1: branch-prediction-prefetch-1
    INSTR2: branch-prediction-prefetch-2
    
  • Cuando usamos solo ranuras de retardo de bifurcación, la secuencia de instrucciones sería:

    BRANCH: branch-instruction
    INSTR1: branch-delay-slot-1
    INSTR2: branch-delay-slot-2
    

¿Estoy en lo correcto con esto? ¿Es cómo sucede esto en realidad para diferentes casos? ¿O hay algunos detalles más?

No asimilo la secuencia "Cuando usamos solo una rama": ¿cómo puede tener ranuras de retardo de brach? Además, mostrar la pieza de ensamblador que parece tener en su encabezado sería una aclaración.
(1) "No entiendo la secuencia" Cuando usamos solo una rama ": ¿cómo puede tener ranuras de retardo de brach?" - Arreglé la oración, accidentalmente la dejé incompleta. Espero que tenga sentido ahora. (2) No entendí esto: "Además, mostrar la pieza de ensamblador que parece tener en su encabezado sería una aclaración". ¿Quiere decir que debería especificar el ensamblador con el que estoy trabajando? En caso afirmativo: estoy leyendo el capítulo de canalización del libro "Organización y diseño de computadoras" de Patterson. Así que lidiando con teoría pura y resolviendo problemas de ejercicios.

Respuestas (1)

Sí, eso podría ser lo que sucedería, aunque no recuerdo ninguna arquitectura que combinara ranuras de predicción y demora: si tiene predicción, puede ejecutarse (buscar en una memoria pequeña) en paralelo con el paso de ejecución, por lo que no hay ranuras de demora sería necesario.

gracias por confirmar, porque tales escenarios están cubiertos en los problemas de ejercicios del libro Arquitectura de Computadores de Patterson. Da soluciones directas sin dar ninguna explicación. Ni el contenido del capítulo discute esto.