[20 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. Liukuhihnassa on viisi vaihetta (käskyn
nouto, käskyn purku, rekistereiden luku, ALU, write-back).
Tarkastellaan seuraavaa kääntäjän generoimaa käskysarjaa:
Load R2, VarX ; Regs(2) <- Mem(VarX)
Add R5, R5, R2 ; Regs(5) <- Regs(5) + Regs(2)
Loop Move R2, R6 ; Regs(2) <- Regs(6)
Add R3, R3, R2
Add R2, R3, R5
Jnzer R3, Loop
Move R1, 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 (jos niitä siellä on):
- [4 p] data-riippuvuudet (data dependencies)
- [2 p] kontrolliriippuvuudet (control dependencies)
- [6 p] Miten kohdan (a) kustakin ongelmatyypistä aiheutuvaa ongelmia
voidaan välttää tai niiden aiheuttamia suorituskykyä heikentäviä vaikutuksia
vähentää?
- Oletetaan nyt, että arkkitehtuuri on laajennettu superskalaariksi (superscalar)
arkkitehtuuriksi (noutopoliikka: nouda ja pura 3 käskyä kerrallaan,
issue-politiikka: out-of-order issue, out-of-order completion). Kuvaile
täsmällisesti allamainitut uudet ongelmatyypit ja merkitse selkeällä
tavalla kaikki kyseisen ongelmatyypin esiintymät em. käskysarjassa
(jos niitä siellä on):
- [2 p] kirjoitusriippuvuus (output dependencies)
- [2 p] antiriippuvuus (antidependencies)
- [4 p] Miten kohdan (c) 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.