Consider the following instruction sequence:
Add R3, R4, R5 (R4+R5->R3)
Or R2, R4, R5 (R4 OR R5->R2)
Add R1, R2, R3 (R2+R3->R1)
Suponiendo que no se reenvían datos, ¿cuáles son todas las dependencias de datos?
No es la única dependencia de datos de la tercera instrucción donde R2 y R3 aún no se han vuelto a escribir. Por lo tanto, para corregir esta dependencia se necesitaría un bloqueo de 3 ciclos antes de que la tercera instrucción pudiera decodificar los registros. Si se permitiera el reenvío de datos, los valores de registro podrían reenviarse y no se producirían bloqueos, ¿correcto? ¿Me estoy perdiendo de algo? ¿Existe una dependencia de datos entre las dos primeras instrucciones, ya que R4 y R5 se usan en ambas?
For the following instructions:
Load R2, 20(R5)
Add R4, R3, R2
Store R4, 20(R5)
¿Las dependencias de datos serían que para la instrucción 2, necesitaría detener 3 ciclos antes de que R2 estuviera disponible, y para la instrucción 3 necesitaría detener 6 ciclos antes de que R4 estuviera disponible? Si se permitiera el reenvío de datos, habría un bloqueo en la instrucción 2 para que la memoria de la primera instrucción se reenvíe a la parte de ejecución de la segunda instrucción. Esto llevaría a una parada para la tercera instrucción durante la fase de decodificación. ¿Esto también es correcto?
Gracias