[15 p] Riippuvuudet.
Oletetaan, että RISC-arkkitehtuurin
konekielen ALU-käskyissä on kaksi operandia ja että tulos
menee aina ensiksi mainittuun (vasemmanpuoliseen) rekisteriin.
Arkkitehtuuri on toteutettu 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.
-
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ää?
- 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 ongelmatyypistä aiheutuvaa
ongelmia voidaan välttää tai niiden aiheuttamia
suorituskykyä heikentäviä vaikutuksia vähentää?
Tee tarvittavat lisäoletukset ja kirjaa ne näkyviin.