pregunta de canalización RISC clásica

1
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

    
pregunta John Takiyama

2 respuestas

2

En la primera parte de la pregunta, está en lo correcto de que las únicas dependencias de datos son desde la primera instrucción hasta la tercera instrucción y desde la segunda instrucción hasta la tercera instrucción. También está en lo cierto al afirmar que no hay dependencia de datos entre la primera y la segunda instrucción.

De manera similar, en la segunda parte está en lo correcto de que hay una dependencia de datos desde la primera instrucción a la segunda y de la segunda a la tercera.

El reenvío de datos no tiene nada que ver con las instrucciones que tienen dependencias de datos. Siempre hay una dependencia de datos de una instrucción que produce un valor a cualquier otra instrucción que consuma ese valor.

Dado que existen dependencias de datos, la presencia (o falta de) reenvío afecta el rendimiento. Pero no puedo decirle cuánto necesitaría porque no conozco las latencias de su canalización. El reenvío generalmente reduce la cantidad de demora requerida.

    
respondido por el Wandering Logic
0

En la página de la tubería de RISC clásica de la Wikipedia, se describen dos soluciones para el problema de dependencia: la omisión y el interbloqueo de la tubería.

El desvío puede reenviar la salida de la segunda instrucción y ponerla a disposición de la tercera, sin penalización. Naturalmente, se cubre la dependencia más distante a la primera instrucción.

El interbloqueo de la tubería requerirá un bloqueo de un ciclo para la dependencia de segundo a tercero, ya que se desvía de la etapa MEM posterior, pero no debería haber ningún bloqueo para la dependencia de primera a tercera, lo cual es un ciclo adicional por delante.

    
respondido por el Kaz

Lea otras preguntas en las etiquetas