Necesito ayuda para comprender la solución del manual de soluciones. La pregunta es del ejercicio 4.22.1 del capítulo 4 del libro Computer Organization and Design de Patterson y Hannessey (4ª edición). La pregunta es sobre la ramificación en la canalización de instrucciones.
La pregunta
Suponemos que el siguiente código MIPS se ejecuta en un procesador segmentado con una canalización de 5 etapas, reenvío completo y un predictor de bifurcación predecible. Considere la secuencia de instrucciones:
Label1: LW R2,0(R2)
BEQ R2,R0,Label ; Taken once, then not taken
OR R2,R2,R3
SW R2,0(R5)
dibuje el diagrama de ejecución de canalización para este código, asumiendo que no hay ranuras de retraso y que las ramas se ejecutan en la etapa EX.
La solución dada es la siguiente:
La duda
no entiendo porque en 4to ciclo LW
tengo ***
(azul subrayado). ¿No podemos ejecutar ID
en LW
el cuarto ciclo? ¿Es una regla no dicha que si la etapa de toma de decisiones de la rama (que está subrayada en rojo EX
) BEQ
se retrasa (aquí debido a la dependencia de los datos primero LW
para R2
), entonces retrase todas las siguientes etapas correspondientes en las siguientes instrucciones?
Por lo tanto, se insertan "burbujas" o paradas debido a las dependencias después de la decodificación de la instrucción con la dependencia (el BEQ). Parece que te sientes cómodo con esto. Sin embargo, como resultado, el resto de la tubería (que contiene el segundo LW) también se detiene.
Considéralo así: no es posible detener una instrucción y no detener las instrucciones que la siguen. Eso requeriría que dos instrucciones estuvieran en la misma etapa de canalización al mismo tiempo: si LW no se detuvo también, entonces EX de BEQ y EX de LW ocurrirían en el mismo ciclo de reloj: ¡no es posible!
mahesha999
LW
se obtiene inmediatamente después de la segunda instrucciónBEQ
. Pero ese no es el caso deOR
. Se obtiene mucho después cuando el anteriorBEQ
está enMEM
etapa. ¿Todavía se obtiene después de obtenerLW
2ndBEQ, before
OR OR`?, but because prediction went wrong it was abandoned and
Algo como esto: imagenuint128_t