Hazards de control

Hazards de control

de Maria Valentina Da Silva De Souza -
Número de respuestas: 3
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.

En respuesta a Maria Valentina Da Silva De Souza

Re: Hazards de control

de Gonzalo Tejera -
Hola. No todas las etapas del pipeline son aprovechadas por todas las instrucciones. En particular, es difícil que una instrucción de salto use la escritura a memoria.

En la etapa dos luego de decodificar y obtener el registro de banderas te das cuenta que debés realizar el salto.

Sí, hay que espera a que se actualice el registro con la próxima instrucción a traer de memoria.

En segundo caso en donde haces el F luego del E de la instrucción de salto sería si el procesador implementara forwarding.

Saludos, Gonzalo

En respuesta a Gonzalo Tejera

Re: Hazards de control

de Maria Valentina Da Silva De Souza -
Hola gracias por responder,

*No todas las etapas del pipeline son aprovechadas por todas las instrucciones. En particular, es difícil que una instrucción de salto use la escritura a memoria.

Osea que el ejemplo esta bien, siempre y cuando se asuma que la instrucción 3, no escribe en memoria.
         | 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



*En la etapa dos luego de decodificar y obtener el registro de banderas te das cuenta que debés realizar el salto.
*Sí, hay que espera a que se actualice el registro con la próxima instrucción a traer de memoria.

Osea que en mi ejemplo esta bien esto:
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 |

El fetch de la Inst 4 empieza luego del write de Inst1.


* Que es eso de forwarding? Me acuerdo que en uno de los practicos lo mencionaba y le pregunte a un profesor y dijo que no le dieramos bola a ese tema. Vi que tambien aparecia en las diapositivas. Si es importante te agradezco si me lo podes aclarar.

Saludos.
En respuesta a Maria Valentina Da Silva De Souza

Re: Hazards de control

de Gonzalo Tejera -
Sí, son correctos tus ejemplos.

Forwarding, se refiere, de una manera simple, a utilizar los datos si ya fueron calculados sin tener que esperar estríctamente a la etapa que la dejaría disponible.

Saludos, Gonzalo