[30 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
(käskyn numero vasemmalla):
1 Load R2, VarX ; Regs(2) <- Mem(VarX)
2 Add R5, R5, R2 ; Regs(5) <- Regs(5) + Regs(2)
3 Loop Move R2, R6 ; Regs(2) <- Regs(6)
4 Add R3, R3, R2
5 Add R2, R3, R5
6 Jnzer R3, Loop
7 Move R1, R2
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 (jos niitä siellä on):
- data-riippuvuudet (data dependencies)
- kontrolliriippuvuudet (control dependencies)
- [8 p] Miten data- ja kontrolliriippuvuuksista aiheutuvaa
ongelmia voidaan välttää tai niiden aiheuttamia suorituskykyä heikentäviä vaikutuksia
vähentää? Anna molempiin tapauksiin useampi ratkaisumalli
ja kuvaa lyhyesti, miten ne toimivat.
- [8 p] 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):
- kirjoitusriippuvuudet (output dependencies)
- antiriippuvuudet (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.