[12 p] Riippuvuudet. Oletetaan, että RISC-arkkitehtuurin konekielen
ALU-käskyissä on kaksi 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, R2 ; Regs(R5) <- Regs (R5) + Regs(R2)
Load R2, VarY
Add R3, R2
Mul R3, R5
Jnzer R2, Loop
Add R4, R2
Useat seikat edellämainitussa koodisegmentissä voivat hidastaa suorittimen
toimintaa maksiminopeudesta.
- [8 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ää?
- [4 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.