[15 p] Riippuvuudet. Oletetaan, että RISC-arkkitehtuurin konekielen ALU-käskyissä
on kolme rekisterioperandia ja että tulos menee aina ensiksi mainittuun (vasemmanpuoliseen)
rekisteriin. Arkkitehtuuri on toteutettu (tavanomaisesti, ei superskalaarina)
liukuhihnoitettuna siten, että parhaimmassa tapauksessa joka syklillä (cycle)
saadaan yksi konekäsky valmiiksi.
Tarkastellaan seuraavaa kääntäjän generoimaa käskysarjaa:
Load R2, VarX ; Regs(R2) <- Mem(VarX)
Add R5, R5, R2 ; Regs(R5) <- Regs (R5) + Regs(R2)
Move R2, R6 ; Regs(R2) <- Regs (R6)
Add R3, R3, R2
Move R7, R3
Mul R3, R2, R5
Jnzer R2, Loop
Move R1, R3
Add R3, R2, R5
Useat seikat edellämainitussa koodisegmentissä voivat hidastaa suorittimen
toimintaa maksiminopeudesta.
- [10 p] Kuvaile täsmällisesti allamainitut ongelmatyypit ja merkitse
selkeällä tavalla kaikki kyseisen ongelmatyypin esiintymät em.
käskysarjassa:
- data-riippuvuudet (data dependencies)
- rakenteelliset riippuvuudet (structural dependencies)
- kontrolliriippuvuudet (control dependencies)
Miten kustakin ongelmatyypistä aiheutuvaa ongelmia voidaan välttää tai
niiden aiheuttamia suorituskykyä heikentäviä vaikutuksia vähentää?
- [5 p] Oletetaan nyt, että arkkitehtuuri toteutetaankin superskalaarina
(superscalar). Kuvaile täsmällisesti allamainitut uudet ongelmatyypit
ja merkitse selkeällä tavalla kaikki kyseisen ongelmatyypin
esiintymät em. käskysarjassa.
- kirjoitusriippuvuus (output dependencies)
- antiriippuvuus (antidependencies)
Miten kustakin uudesta ongelmatyypistä aiheutuvaa ongelmia voidaan välttää
tai niiden aiheuttamia suorituskykyä heikentäviä vaikutuksia vähentää?
Tee tarvittavat lisäoletukset ja kirjaa ne näkyviin.