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 b
del problema 2
en 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 lw
las sw
instrucciones 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) = 576
en absoluto. Además, incluso si asumo el estancamiento entre lw
y 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 li
la instrucción y los 3 ciclos restantes para la última ejecución de bnez
significa 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 debnez
está pasando. para la última iteración, no ejecutaremos la rama, pero necesitamos 3 ciclos más para completar la bnez
instrucció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 :(
La razón para usar 63 en lugar de 64 en el cálculo es simple. La instrucción que se obtuvo después bnez
debe 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: