Suponer una CPU superescalar con scheduling dinámico que tiene las
siguientes especificaciones de hardware:
Tipo de unidad funcional | Ciclos en EX | Número de unidades funcionales |
Entera | 1 | 1 |
Punto flotante | 15 | 1 |
- Número ilimitado de estaciones de reserva.
- El ROB (reorder buffer) es ilimitado.
- Las instrucciones de memoria usan la unidad funcional entera para
calcular su dirección efectiva. Los stores accesan la memoria
durante la etapa del compromiso (commit). Las cargas accesan la
memoria durante la etapa EX.
- Las cargas y los stores duran 1 ciclo en la etapa EX.
- Si una instrucción pasa a su etapa WB en el ciclo x,
entonces la instrucción que estaba esperando dicha unidad
funcional puede comenzar a ejecutarse en el ciclo x.
- Una instrucción que está esperando datos en el CDB (bus
de datos común), puede pasar pasar a su etapa EX al siguiente
ciclo después del broadcast del CDB.
- En un ciclo dado, sólo una instrucción puede escribir en
el CDB. Los brincos y los stores no usan el CDB.
- Cuando hay un conflicto por una unidad funcional o por el CDB, suponer
que la instrucción más antigua (en el orden del programa)
tiene la preferencia y que las demás se detienen.
- Los brincos ocupan la unidad funcional entera por un ciclo para
calcular su condición.
- La CPU tiene emisión doble (grado 2)
- La predicción no es perfecta. Por lo tanto, la siguiente
instrucción al brinco no se puede emitir en el mismo ciclo que
el brinco.
- En un ciclo dado, sólo dos instrucciones se pueden comprometer.
Llenar la siguiente tabla, mostrando en qué ciclo pasa cada
instrucción por cada etapa, suponiendo que se especuló que el
brinco se va a tomar y se emiten dos iteraciones.