Duda en el reenvío de tubería en MIPS

Soy bastante nuevo en la arquitectura de computadoras y tengo dificultades para resolver problemas basados ​​en tuberías. Estaba tratando de resolver un problema de este pdf que encontré en Google

Tengo una duda en parte bdel problema 2en el que se nos pregunta. How many cycles will it take to execute on the fully bypassed MIPS processor?Tengo dos preguntas: ¿Por qué es necesario un estancamiento entre lwlas swinstrucciones y, en segundo lugar, cómo se calcula la respuesta final de todos modos? No entiendo la parte 1 + 63 · (6 + 3) + 1 · (6 + 2) = 576en absoluto. Además, incluso si asumo el estancamiento entre lwy sw, entonces si la siguiente iteración del ciclo comienza en los ciclos 9,18... y así sucesivamente. Esto debería suceder 64 veces y el ciclo inicial desde lila instrucción y los 3 ciclos restantes para la última ejecución de bnezsignifica que el total de ciclos = 1 + 64*9 + 3 = 580, ¿verdad? Obtuve 9 ciclos como se muestra en el diagrama de tiempo, en el ID del noveno ciclo debnezestá pasando. para la última iteración, no ejecutaremos la rama, pero necesitamos 3 ciclos más para completar la bnezinstrucción.

EDITAR: después de verificar la solución a la siguiente parte del mismo problema, parece que la cantidad de ciclos en realidad se aproxima por alguna razón. Pensé que eso debería hacerse solo para una gran cantidad de instrucciones (millones o más). Pero no estoy seguro si estoy en lo correcto :(

Respuestas (1)

La razón para usar 63 en lugar de 64 en el cálculo es simple. La instrucción que se obtuvo después bnezdebe vaciarse cada vez, excepto en la última iteración.

Para la última iteración, esta instrucción no tiene que vaciarse y ahorra un ciclo de retraso (como se menciona en el pdf vinculado), por lo que tenemos el cálculo de retraso como (6+2) en lugar de (6+3) para la última iteración.


Cálculos:

Hay 6 instrucciones en el bucle. Los ciclos por instrucción (CPI) del procesador segmentado son 1. Hay 2 paradas y se requiere 1 ciclo para vaciar la instrucción después de bnez.

Recuento total de ciclos = (Número de instrucciones x CPI) + Número de paradas + Número de ciclos necesarios para vaciar la instrucción despuésbnez

= (6x1) + 2 + 1

Para la última iteración, no se requiere el vaciado. Entonces se convierte en 6+2.


Algunos cursos online gratuitos para aprender más sobre este tema:

  1. https://learn.saylor.org/course/view.php?id=71
  2. https://www.coursera.org/learn/comparch/