[18 p] Riippuvuudet. Oletetaan, että RISC-arkkitehtuurin konekielen ALU-käskyissä on kolme rekisterioperandia ja että tulos menee aina ensiksi mainittuun (vasemmanpuoleiseen) 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.
- [6 p] Kuvaile täsmällisesti ongelmatyypit datariippuvuus (data dependency), kontrolliriippuvuus (control dependency)
ja rakenteellinen riippuvuus (structural dependency). Anna selkeällä tavalla kyseisen ongelmatyypin yksi esiintymä em. käskysarjassa (jos niitä siellä on).
- [4 p] Miten data-, kontrolli- ja rakenteellisista riippuvuuksista aiheutuvaa suorituskykyongelmia voidaan välttää tai vähentää? Anna kuhunkin riippuvuustyyppiin yksi (kontrolliriippuvuuteen 2 kpl) ratkaisumalli ja kuvaa lyhyesti, miten se toimii.
- [4 p] Oletetaan nyt, että arkkitehtuuri on laajennettu superskalaariksi (superscalar) noutopoliikalla nouda ja pura 3 käskyä kerrallaan ja issue-politiikalla out-of-order issue, out-of-order completion. Kuvaile täsmällisesti uudet ongelmatyypit (kirjoitusriippuvuus (output dependencies) ja antiriippuvuus (antidependencies)) sekä selkeällä tavalla kyseisen ongelmatyypin yksi esiintymä em. käskysarjassa (jos niitä siellä on).
- [4 p] Miten kohdan (c) kummastakin uudesta ongelmatyypistä aiheutuvia suorituskykyä heikentäviä ongelmia voidaan välttää tai vähentää?
Anna kumpaankin uuteen riippuvuustyyppiin yksi ratkaisumalli ja kuvaa lyhyesti, miten se toimii.