Dudas sobre Hazard de control

Dudas sobre Hazard de control

de Maria Valentina Da Silva De Souza -
Número de respuestas: 0
Hola en las diapositivas del teorico se muestra un ejemplo de un Hazard de control:

Ejemplos de etapas de pipeline:
*Fetch de Instrucciones (FI)
*Decodificar instruccion (DI)
*Calcular operandos (CO)
*Fetch de operandos (FO)
*Ejecutar instrucciones y escribir registro(EI)
*Escribir operando en memoria (WO)


            | 1   |  2   |  3   |  4   |  5  |  6   | 7    | 8   | 9 | 10 | 11 | 12 | 13 | 14    
Inst1       FI       DI     CO    FO    EI    WO
Inst2                FI      DI     CO    FO   EI     WO
Inst3                         FI     DI     CO   FO    EI     WO
Inst4                                FI      DI    CO    FO
Inst5                                        FI     DI     CO
Inst6                                               FI      DI
Inst7                                                       FI
Inst15                                                             FI      DI  CO  FO    EI    WO


Dice que la instrucción I3 es una bifurcación condicional a I15, y si se toma el salto hay que vaciar el pipeline.
Mi primera pregunta es en este ejemplo además hay un hazard estructural entre Inst3 y Inst15, porque las instrucciones WO y FI acceden a memoria, por lo tanto si se toma el salto la instrucción 15 deberia  empezar corrida un lugar, es decir  donde empieza el casillero numero 9 no?


Despues en el taller12 que es sobre PIPELINE, dice lo siguiente:
Considere un procesador MIPS con pipeline de 5 etapas, las que son:
1-Inst. Fetch (F)
2-Instr. Decode and Reg. Fetch(D)
3-Exec and Addr.Calculation(E)
4-Memory Access(M)
5- Write Back(W)

En cuales de las etapas de este pipeline me doy cuenta que debo realizar un salto?
Por ejemplo, si la instrucción 1 fuera una bifurcación condicional a la instrucción 4 y se toma el salto, esta bien esto:

Inst1        |F |D |E |M |W |
Inst4                                | F |D |E |M |W |

Entre inst1 y inst4 no tengo un hazard estructural porque WriteBack escribe en registro, pero el Fetch de Inst4 empieza despues de la etapa WriteBack porque hay que esperar que se escriba el resultado de la operación. Esta bien esto que estoy diciendo?

Porque me surgio la duda si no podia darse asi:

Inst1        |F |D |E |M |W |
Inst4                     | F |D |E |M |W |

(Supongo que Inst1 no accede a memoria)
Porque una vez que ejecuto la etapa 3(Exec and Addr.calculation) ya se si tengo que realizar el salto, entonces una vez terminada esta etapa ya puedo empezar a hacer el Fetch de Inst4?

Nose cual de los dos razonamientos es correcto.

Agradezco si me pueden responder la duda sobre las diapositivas del teorico, y del taller. Tambien me gustaria saber si es aceptable el ejemplo dado en la diapositiva del teorico como un ejemplo de hazard de control en caso de preguntarse en el examen.

Saludos y desde ya muchas gracias.