[12 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
Mul R3, R2, R5
Jnzer R2, Loop
Add R3, R2, R5
Useat seikat edellämainitussa koodisegmentissä voivat hidastaa suorittimen
toimintaa maksiminopeudesta.
- [6 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ää?
- [3 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ää?
- [3 p] Oletetaan nyt, että kyseiselle arkkitehtuurille on toteutettu
funktionaalisesti oikein toimiva emulaattori. Emulaattori on toteutettu
tavanomaisen von Neumann -arkkitehtuurin mukaisesti, joten siinä
suoritetaan annettua konekielistä koodia yksi konekäsky kerrallaan.
Mitkä kohtien (a) ja (b) käskyjen välisistä riippuvuuksista tulee
emuloinnissa ottaa huomioon ja millä tavoin? Perustele vastauksesi.
Tee tarvittavat lisäoletukset ja kirjaa ne näkyviin.