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,: F
instrucción Fetch,: D
instrucción Decode,: X
eXecute,: M
acceso a memoria,: W
Write 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, INSTR1
ya INSTR2
se 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?
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.
Wouter van Ooijen
RajS