Prosessori

Staattinen haarautumisen ennustus
 haarautumishasardi ratkaistaan olettamalla
haarautumispäätöksen tulos ilman, että odotetaan oikean
haarautumisehdon laskennan tulosta
① Predict not taken – ennustetaan aina, että haarautumista ei
tehdä: jatka käskynhakua sekventiaalisesta käskyvirrasta,
jolloin liukuhihna pysäytetään ainoastaan silloin, kun
haarautuminen tehdään (virheellinen ennustus)

Jos haaraudutaan, tyhjennä haarautumiskäskyn jälkeiset käskyt
(liukuhihnan alussa olevat käskyt):




#96
IF-, ID- ja EX-tasoilta, jos haarautumislogiikka MEM-tasossa: 3 stall-jaksoa
IF- ja ID-tasoilta, jos haarautumislogiikka EX-tasossa: 2 stall-jaksoa
IF-tasolta, jos haarautumislogiikka on ID-tasossa: 1 stall-jakso
Varmista, että poistetut käskyt eivät ole muuttaneet koneen tilaa –
MIPS-liukuhihnassa automaattinen, koska koneen tilan vaihtavat
operaatiot ovat liukuhihnan lopussa: MemWrite (MEM) tai RegWrite
(WB)
 Käynnistä liukuhihna uudelleen haarautumisen kohteesta
Liukuhihnan tyhjennys ennustuksen
epäonnistuessa
IM
Reg
ALU
4 beq $1,$2,2
I
IM
Reg
DM
Reg
n
t
DM
Reg
ALU
8 sub
flush$4,$1,$5
ALU
s
IM
Reg
r.
16 and $6,$1,$7
IM
Reg
DM
Reg
O
20 or r8,$1,$9
d
ALU
r
DM
e
r
 IF-tasolla olevan käskyn poistamiseksi, aseta IF/ID-
liukuhihnarekisterin käskykenttä IF.Flush
nollaksi(käskystä tulee noop)
#98
Reg
Haarautumisrakenteet
 Ennustus, että haarautumista ei tehdä, toimii hyvin “top of the
loop” -haarautumisrakenteessa
Loop: beq $1,$2,Out
1nd loop instr

Mutta tällaisissa silmukoissa on
hyppyjä silmukan lopusta alkuun –
joka aiheuttaa stall-jakson hypyn
ansiosta
.
.
.
last loop instr
j
Out:

Loop
fall out instr
Ennustus, että haarautumista ei tehdä, ei toimi “bottom of the
loop” -haarautumisrakenteen yhteydessä Loop: 1 loop instr
st
2nd loop instr
.
.
.
last loop instr
bne $1,$2,Loop
#99
fall out instr
Staattinen haarautumisen ennustus, …
 Ratkaistaan haarautumishasardi olettamalla
haarautumispäätöksen tulos ja jatkamalla suoritusta
②
Predict taken – Ennusta, että haarautuminen tullaan aina
tekemään


Kun haarautumisen kustannus kasvaa (pidemmissä
liukuhihnoissa), yksinkertainen staattinen
ennustusmenetelmä voi heikentää suorituskykyä

③
#100
Predict taken tuottaa aina yhden stall -jakson (jos
haarautumislogiikka on siirretty ID-tasoon)
Laitteistoa lisäämällä on mahdollista yrittää ennustaa
haarautumiskäyttäytymistä dynaamisesti ohjelman
suorituksen aikana
Dynaaminen haarautumisen ennustus – ennusta
haarautuminen ajoaikana käyttäen ajoaikaisia tietoja
Dynaaminen haarautumisen ennustus
 IF-tasolla sijaitseva haarautumishistoriapuskuri (branch history
table (BHT)), jota osoittaa PC:n alimmat bitit, sisältää bittejä
IF/ID-liukuhihnarekisteristä ID-tasolle vietyjä bittejä, jotka
kertovat onko haarautuminen suoritettu edellisellä
suorituskerralla
 Ennustusbitti voi ennustaa väärin (väärä ennustus haarautumiseen
tällä iteraatiokierroksella tai kyseessä voi olla toinen haarautuminen,
jonka käskyosoitteessa on samat vähiten merkitsevät bitit), mutta
virheellisellä ennustuksella ei ole vaikutusta laskennan
lopputulokseen, ainoastaan suorituskykyyn

Haarautumispäätös tehdään ID-tasolla sen jälkeen kun on haettu käsky
on tulkittu ja havaittu haarautumiskäskyksi ja BHT:stä on tarkastettu
ennustusbitit)
 Jos ennustus on väärä, väärät käskyt poistetaan liukuhihnasta (flush),
liukuhihna käynnistetään uudelleen oikeilla käskyillä ja ennustusbitit
invertoidaan

#101
4096-bittinen BHT: väärinennustus vaihtelee 1% (nasa7, tomcatv) - 18%
(eqntott)
Haarautumiskohdepuskuri
 BHT ennustaa milloin haarautuminen tulisi tehdä, mutta ei
kerro minne!
 IF-tasolla oleva haarautumiskohdepuskuri (branch target buffer, BTB)
tallettaa haarautumisen kohdeosoitteet, mutta myös seuraava
sekventiaalinen osoite on haettava.
 IF/ID-tason ennustusbitti valitsee kumpi “seuraava” käsky ladataan
IF/ID seuraavalla kellon nousevalla reunalla
 Käskymuistiin tarvitaan kaksi lukuporttia
Tai: BTB tallettaa myös
haarautumiskohteen käskyn, samaan
aikaan kuin käskymuistista haetaan
seuraavaa sekventiaalista käskyä
BTB
Instruction
Memory
PC

Read
0
Address

Jos ennustus on oikein, liukuhihnaa ei tarvitse pysäyttää
haarautumiskäskyn takia (paitsi ensimmäisellä kerralla, jolloin
BTB on tyhjä)
#102
1-bittisen ennustuksen tarkkuus
 1-bittinen ennustaja on väärässä kahdesti, jos ei haarauduta

Oletetaan, että alussa predict_bit = 0 (indikoi
haarautumista ei tapahtunut) ja silmukan
Loop: 1st loop instr
ohjaus on silmukkakoodin lopussa

1:llä kerralla ennustetaan väärin, koska
haarautuminen tapahtuu takaisin silmukan
alkuun; invertoidaan ennustusbitti (predict_bit
= 1)



#103
Niin kauan kuin haarautuminen tapahtuu
(iterointi), ennustus on oikein
Silmukasta poistuttaessa ennustetaan taas
väärin, koska nyt haarautumista ei tapahdu;
invertoidaan ennustusbitti (predict_bit = 0)
2nd loop instr
.
.
.
last loop instr
bne $1,$2,Loop
fall out instr
Esim. suoritettaessa silmukka 10 kertaa, saadaan 80%
ennustustarkkuus haarautumiselle, joka tapahtuu 90%
tapauksista
2-bittinen ennustaja
 2-bittisellä ennustajalla voidaan saavuttaa 90% tarkkuus,
koska ennusteen pitää olla väärin kahdesti ennen kuin
ennustebitin tila vaihdetaan
Loop: 1st loop
oikein 9 kertaa
2nd loop
Väärin silmukasta
.
Taken
poistuttaessa
Not taken
.
Predict 1
Predict
1
11
Taken
Taken
0 Predict 01
Not Taken
#105
10
Taken
Taken
Oikein 1:llä
iteraatiolla
Not taken
Taken
last loop instr
bne $1,$2,Loop
fall out instr
00
Not taken
instr
.
Not taken
Predict 0
Not Taken
instr

BHT tallettaa
myös tilakoneen
alkutilan
Poikkeuksien hallinta
 Poikkeukset (exception) tai keskeytykset (interrupt) ovat yksi
kontrollihasardin muoto
 Poikkeuksen syy voi olla
 R-tyypin aritmetiikkaoperaation ylivuoto
 Yritys suorittaa laiton käsky
 I/O-laitteen palvelupyyntö
 OS palvelupyyntö
 Laitteiston virhetoiminto
 Liukuhihna on lopetettava uhkaavan käskyn suoritus: aiemmat käskyt
suoritetaan loppuun, seuraavat käskyt tyhjennetään liukuhihnasta,
asetetaan poikkeuksen syy rekisteriin, talletetaan uhkaavan käskyn osoite
ja hypätään ennelta määrättyyn osoitteeseen (poikkeuksen käsittelijän
osoite)
 ohjelmisto (OS) tarkastaa poikkeuksen syyn ja suorittaa tarvittavat
toimenpiteet poikkeuksesta toipumiseksi
#106
Kaksi poikkeustyyppiä
 keskeytys – asynkroninen ohjelman suorituksen suhteen
 aiheutuvat ulkoisista tapahtumista
 Voidaan käsitellä käskyjen välissä, joten liukuhihnassa olevat
aktiiviset käskyt voidaan suorittaa loppuun ennen kontrollin
siirtämistä OS:n keskeytyskäsittelijälle
 simply suspend and resume user program
 Ansa – ohjelman suorituksen suhteen synkroninen
 Aiheutuvat sisäisistä tapahtumista
 Ansan käsittelijän on korjattava tilanne: uhkaava käsky on
pysäytettävä liukuhihnan keskellä ja annettava kontrolli OS:n
ansan käsittelijälle
 Uhkaava käsky voidaan yrittää suorittaa uudestaan ja jatkaa
suoritusta tai ohjelman suoritus lopetetaan
#107
Missä poikkeus ilmenee liukuhihnassa?
Reg
ALU
IM
DM
Reg
liukuhihnataso(t)?
synkroninen?
 Aritmetiikan ylivuoto
EX
kyllä
 Laiton käsky
ID
kyllä
 I/O-palvelupyyntö
mikä tahansa
ei
 Laitteistovika
mikä tahansa
ei

#109
Yhdellä kellojaksolla voi tapahtua useampia
poikkeuksia
Useampi samanaikainen poikkeus
IM
Reg
ALU
Inst 0
I
DM
Reg
n
D$ page fault
Inst 1
t
IM
Reg
ALU
s
DM
Reg
arithmetic overflow
r.
IM
Reg
ALU
Inst 2
DM
Reg
O
undefined instruction
Inst 3
d
IM
Reg
ALU
r
IM
Reg
DM
Reg
e
Inst 4

#111
I$ page fault
ALU
r
DM
Reg
Laitteisto lajittelee poikkeukset siten, että aikaisin käsky
keskeytetään ensimmäiseksi
Lisäyksiä MIPS:iin poikkeuksien
käsittelyyn (Fig 6.42)
 “Cause” -rekisteri (tallettaa poikkeukset) – laitteisto
poikkeuksen syyn tallentamiseen ja signalointi rekisterin
kirjoitusta varten (CauseWrite)
 EPC -rekisteri (tallettaa uhkaavien käskyjen osoitteet) –
laitteisto uhkaavien käskyjen osoitteiden tallentamiseen EPCrekisteriin ja signalointi kirjoitusta varten (EPCWrite)
 Poikkeuksen käsittelyohjelmiston pitää vastata poikkeuksen käskyä
 Tarvitaan menetelmä käsittelijän alkuosoitteen lataamiseksi
ohjelmalaskuriin
 Laajennetaan ohjelmalaskurin sisääntulo-mux langoitetulla
poikkeuksenkäsittelijän osoitteella - (esim. 8000 0180hex aritmetiikan
ylivuoto)
 Tarvitaan menetelmä tyhjentää uhkaavat käskyt ja sitä
seuraavat käskyt liukuhihnasta
#112
Datapolku: tuki poikkeuksille
PCSrc
Branch
EX.Flush
8000 0180hex
Hazard ID.Flush
Unit
PC
Read
Address
Add
Read Addr 1
Compare
IF.Flush
Instruction
Memory
Shift
left 2
EX/MEM
0
Control
Cause
Add
4
0
1
0
IF/ID
ID/EX
0
MEM/WB
EPC
Data
Memory
RegFile
0
Read Addr 2
Read Data 1
Write Addr
ReadData 2
Write Data
16
Sign
Extend 32
ALU
Write Data
ALU
cntrl
Forward
Unit
Forward
Unit
#113
Read Data
Address
Vielä lisää suorituskykyä
 Liukuhihnan syvyyden lisääminen kasvattaa kellotaajuutta
– superpipelining
 Mitä enemmän liukuhihnatasoja, sitä enemmän forwarding/hasardi-
laitteistoa tarvitaan ja liukuhihnan hallinta vie yhä suuremman osan
kellojakson ajasta (latch-time)
 Haetaan (ja suoritetaan) useampi kuin 1 käsky kerralla
(laajenna jokainen liukuhihnataso tukemaan useampia
käskyjä)
– multiple-issue
 Käskynsuoritustaajuus CPI < 1, joten käytetään IPC: instructions per
clock cycle
#114

Esim, 6 GHz 4-tie prosessori voi suorittaa max. 24 milj. käskyä / sec.,
CPI: 0.25 tai parhaassa tapauksessa IPC on 4

Jos datapolussa 5 tasoa, kuinka monta käskyä liukuhihnassa on aktiivisena
kullakin ajan hetkellä?
Rinnakkaisuuden tasoja
 Ohjelman käskytason rinnakkaisuus (instruction-level
parallelism, ILP) mittaa ohjelman keskimääräistä ohjelman
käskyjen määrää, jotka prosessori voisi suorittaa
samanaikaisesti
 Määräytyy pääasiassa käskyn todellisten (data) riippuvuuksien ja
menettelytapa (kontrolli) riippuvuuksien perusteella suhteessa muihin
käskyihin
 Datatason rinnakkaisuus, data-level parallelism (DLP)
DO
I = 1
TO
100
A[I] = A[I] + 1
CONTINUE
 Prosessorin konetason rinnakkaisuus, machine parallelism –
mittaa prosessorin kykyä hyödyntää ohjelman ILP:tä
 Käskyjen lukumäärä, joita voidaan hakea ja suorittaa samanaikaisesti
 Suorituskyvyn kasvattamiseksi tarvitaan molempia, sekä ILP
#115
että konerinnakkaisuus
Multiple-Issue -prosessorit
① Staattinen multiple-issue prosessori (very long instruction word machine,
VLIW)
 Päätös siitä, mitkä käskyt suoritetaan samanaikaisesti, tehdään staattisesti
(käännösaikana kääntäjän toimesta))
 Esim., Intel Itanium ja Itanium 2 : IA-64 ISA
– EPIC (Explicit Parallel Instruction Computer)

128-bittiset “kimput” sisältävät 3 käskyä, jokainen 41 bittiä + 5-bittinen mallinekenttä (joka määrittää mitä toiminnallista yksikköä kukin käsky tarvitsee)

5 toiminnallista yksikköä (IntALU, Mmedia, Dmem, FPALU, Branch)

Laaja tuki spekuloinnille ja ennustukselle
 Dynaaminen multiple-issue prosessori (superscalar)
 Päätös siitä, mitkä käskyt suoritetaan samanaikaisesti (luokkaa 2 - 8),
tehdään dynaamisesti (ajoaikana erillisen laitteiston toimesta)
 Esim. IBM Power series, Pentium 4, MIPS R10K, AMD Barcelona
#116
Multiple-Issue Prosessorit
Pipelined
Superscalar
IF0 IF1 IF2 IF3
ID0 ID1 ID2 ID3
OF0 OF1 OF2 OF3
EX0 EX1 EX2 EX3
aika
VLIW
IF0 IF2
IF1 IF3
ID0 ID2
ID1 ID3
OF0 OF2
OF1 OF3
EX0 EX2
EX1 EX3
aika
IF0 IF1
ID0 ID1
OF0 OF4
OF1 OF5
OF2 OF6
OF3 OF7
EX0 EX4
EX1 EX5
EX2 EX6
EX3 EX7
aika
#117
Multiple-Issue -datapolku
 Käsiteltävä seuraavat rajoitteet
 Kuinka monta käskyä otetaan suoritukseen yhdellä kellojaksolla – issue
slots
 Tallennus- (data-) riippuvuudet – data hasardit

SS/VLIW –prosessorissa suuremmat rajoitteet vähäisestä ILP:stä johtuen
 Proseduuririippuvuudet – kontrollihasardit


Kuten edellä, mutta vakavampia rajoitteita
Käytetään dynaamista haarautumisen ennustusta ILP-rajoitteen
kiertämiseksi
 Resurssikonfliktit – rakennehasardit



#118
SS/VLIW –prosessorissa on suurempi todennäköisyys resurssikonfliktiin
Toiminnalliset yksiköt voivat joutua kilpailemaan tulosväylien tai
rekisteritiedoston kirjoitus-porttien käytöstä
Resurssikonfliktit voidaan eliminoida kahdentamalla tai liukuhihnoittamalla
resurssi
Spekulointi
 Spekulaatiota käytetään sallimaan tulevan käskyn suoritus,
jolla voi olla riippuva spekuloidusta käskystä
 Spekuloi ehdollisen haarautumisen (branch prediction)
 Spekuloidaan, että tallennus (kohdeosoitetta ei vielä tiedetä), joka
edeltää latauskäskyä, ei viittaa samaan osoitteeseen, mikä
mahdollistaa latauksen vuoronnettavan ennen tallennusta (load
speculation)
 Tarvitaan seuraava mekanismit (laitteisto ja/tai ohjelmisto)
 Tarkastus, oliko arvaus oikein
 Toipumismekanismi niiden spekuloitujen käskyjen osalta, jotka on
arvattu väärin, käskyn aiheuttamien vaikutusten korjaamiseen
 Jätä huomiotta ja/tai puskuroi poikkeukset, jotka on generoinut
spekulatiivisesti suoritettu käsky, kunnes on selvää, että
poikkeus on todellakin suoritettava
#119
Staattiset Multiple Issue -koneet
(VLIW)
 Staattisen multiple-issue -prosessorin (VLIW) yhteydessä
kääntäjä päättää staattisesti (käännösaikana) mitkä käskyt
haetaan ja suoritetaan samanaikaisesti
 Issue packet – joukko käskyjä, jotka on niputettu yhteen ja haetaan
samalla kellojaksolla – yksi pitkä käsky sisältäen useita operaatioita
 Käskyjoukko nipussa on tavallisesti rajoitettu – yksi “käsky” usealla
etukäteen määritellyillä kentillä
 Kääntäjä ennustaa haarautumisen ja koodin vuoronnuksen
staattisesti yrittäen vähentää (kontrolli) tai eliminoidakseen (data)
hasardeja
 VLIW sisältää
 Useita toiminnallisia yksiköitä
 Moniporttisia rekisteritiedostoja
 Leveän ohjelmaväylän
#120
Esimerkki: VLIW MIPS
 Oletetaan multiple-issue MIPS 2:n käskyn nipulla
64 bits
ALU Op (R format)
Load or Store (I format)
or
Branch (I format)
 käskyt haetaan, dekoodataan ja suoritetaan aina
pareittain
 Jos toista parin käskyistä ei voida käyttää, niin se
korvataan noop -käskyllä
 Tarvitaan 4 lukuporttia ja 2 kirjoitusporttia ja erillinen
osoitesummain
#121
MIPS VLIW (2-issue) datapolku

Add
Ei sisällä hasardilaitteistoa (joten “load use”
ei sallittu)
Add
ALU
4
PC
Instruction
Memory
Register
File
Data
Write Addr
Write Data
Sign
Extend Sign
Extend
#122
Add
Memory
MIPS VLIW (2-issue) datapolku
Add
Add
4
PC
Instruction
Memory
Register
File
Data
Write Addr
Write Data
Sign
Extend Sign
Extend
#123
Add
Memory
Koodinvuoronnusesimerkki
 Oletetaan seuraava silmukkakoodi
lp:

#124
lw
addu
sw
addi
bne
$t0,0($s1)
$t0,$t0,$s2
$t0,0($s1)
$s1,$s1,-4
$s1,$0,lp
#
#
#
#
#
$t0=array element
add scalar in $s2
store result
decrement pointer
branch if $s1 != 0
Käskyt on vuoronnettava välttäen liukuhihnan pysäyttämistä

Yhdessä nipussa olevien käskyjen on oltava toisistaan riippumattomia

“load use”-käskyt erotettava load-käskyistä vähintään yhdellä
kellojaksolla

2 ensimmäisellä käskyllä on load-riippuvuus, 2:lla seuraavalla ja 2:lla
viimeisellä datariippuvuus

Oletetaan, että laitteisto osaa ennustaa haarautumiset täydellisesti
Vuoronnettu koodi (Not Unrolled)
ALU or branch
lp:
lw
Data transfer
$t0,0($s1)
CC
1
addi
$s1,$s1,-4
2
addu
$t0,$t0,$s2
3
bne
$s1,$0,lp
sw
$t0,4($s1)
4
5
 4 kellojaksoa 5 käskyn suorittamiseen
 CPI: 0.8 (vs. parhaassa tapauksessa 0.5)
 IPC: 1.25 (vs. parhaassa tapauksessa 2.0)
 Noop-käskyjä ei lasketa suorituskykyä mitattaessa !!
#126
Silmukan iteraatioiden purkaminen
 Loop unrolling – silmukan rungosta tehdään useita
kopioita ja eri iteraatiosta olevia käskyjä
vuoronnetaan yhteen ILP:n kasvattamiseksi
 Puretaan iteraatiot (4 kertaa edellisessä
esimerkissä) ja tämän jälkeen vuoronnetaan
aikaansaatu koodi
 Eliminoidaan tarpeettomat silmukanohjauskäskyt
 Vuoronnetaan siten, että vältetään “load use” hasardeja
 Silmukoiden purkamisen yhteydessä kääntäjä
suorittaa rekisterien uudelleen nimeämisen (register
renaming)
 Eliminoidaan datariippuvuudet, jotka eivät ole todellisia
#127
datariippuvuuksia
Unrolled Code Example
lp:
#128
lw
lw
lw
lw
addu
addu
addu
addu
sw
sw
sw
sw
addi
bne
$t0,0($s1)
$t1,-4($s1)
$t2,-8($s1)
$t3,-12($s1)
$t0,$t0,$s2
$t1,$t1,$s2
$t2,$t2,$s2
$t3,$t3,$s2
$t0,0($s1)
$t1,-4($s1)
$t2,-8($s1)
$t3,-12($s1)
$s1,$s1,-16
$s1,$0,lp
#
#
#
#
#
#
#
#
#
#
#
#
#
#
$t0=array element
$t1=array element
$t2=array element
$t3=array element
add scalar in $s2
add scalar in $s2
add scalar in $s2
add scalar in $s2
store result
store result
store result
store result
decrement pointer
branch if $s1 != 0
Vuoronnettu koodi (Unrolled)
lp:
ALU / branch
addi $s1,$s1,-16
CC
lw
Datan siirto
$t0,0($s1)
lw
$t1,12($s1)
2
1
addu
$t0,$t0,$s2
lw
$t2,8($s1)
3
addu
$t1,$t1,$s2
lw
$t3,4($s1)
4
addu
$t2,$t2,$s2
sw
$t0,16($s1)
5
addu
$t3,$t3,$s2
sw
$t1,12($s1)
6
sw
$t2,8($s1)
7
sw
$t3,4($s1)
8
bne
$s1,$0,lp
 14 käskyn suoritukseen käytetään 8 kellojaksoa
 CPI: 0.57 (vs. parhaassa tapauksessa 0.5)
 IPC: 1.8 (vs. parhaassa tapauksessa 2.0)
#129
Predikointi
 Predikointia voidaan käyttää haarautumisten välttämiseen
 Käskyn suoritus tehdään riippuvaiseksi predikaatista. Esim.
if (p) {statement 1} else {statement 2}
normaalisti käännettäisiin kahta haaraa käyttäen, mutta
predikoinnilla:
(p) statement 1
(~p) statement 2
 Ehdon (condition)käyttäminen indikoi, että käsky
lähetetään suoritukseen ainoastaan kun condition on tosi
 Predikointia voidaan käyttää sekä spekulointiin että
haarautumisen välttämiseen
#130
VLIW -prosessorin kääntäjätuki
 Kääntäjä pakkaa joukon toisistaan riippumattomia käskyjä nipuksi
 Tehdään osana koodin uudelleenjärjestelyä (trace scheduling)
 Kääntäjä purkaa silmukoita ILP:n paljastamiseen
 Kääntäjä käyttää rekisterin uudelleen nimeämistä nimiriippuvuuksien
ratkomiseen ja “no load”-hasardien välttämiseen
 Superskalaarit käyttävät dynaamista ennustusta, mutta VLIW:ssä
pääasiassa luotetaan kääntäjän tekemiin haarautumisennustuksiin
 Loop unrolling vähentää ehdollisten haarautumisien määrää
 Predikointi eliminoi if-the-else –rakenteita korvaamalla niitä predikoiduilla
käskyillä
 Kääntäjä ennustaa muistipankkien viittaukset tavoitteena minimoida
muistikonfliktien määrä
#131
VLIW edut ja haitat
 Edut
 Yksinkertainen laitteisto (potentiaalia energiatehokkuuteen)
 Mahdollisesti paremmin skaalattavissa

Sallitaan enemmän käskyjä nipussa ja lisätään toiminnallisia yksiköitä
 Haitat
 Ohjelmoinnin / kääntäjän kompleksisuus ja pidemmät käännösajat

Syvät liukuhihna ja pitkät latenssit sekoittavat ohjelmoijaa (huippusuorituskyvyn
saavuttaminen voi olla vaikeaa)
 Täysin synkronoitu toiminta; hasardi pysäyttää kaikki käskynhaut, kunnes
hasardi on täysin ratkaistu (joten käytetään ennustusta)
 Objekti (binääri-) koodin yhteensopimattomuus
 Tarvitaan leveä käskymuisti
 koodin turpoaminen
#132

Noop-käskyt tuhlaavat käskymuistia

Loop unrolling käytössä ILP:n maksimoimiseksi, joka käyttää enemmän käskymuistia
Superskalaariprosessori (SS)
 Dynaamiset multiple-issue -prosessorit (SuperScalar)
hyödyntävät ajoaikaista laitteistoa dynaamisesti päättelemään
mitkä käskyt lasketaan liikkeelle ja suoritetaan samanaikaisesti
 Käskynhaku ja liikkeellelasku (instruction fetch and issue) –
hae käskyt, dekoodaa ja ohjaa ne toiminnalliselle yksikölle
odottamaan suoritusta
 Hae, dekoodaa ja ohjaa käskyjä, joka ovat paljon nykyistä käskyä
myöhempänä
 suoritus (instruction-execution) – heti, kun operandit ovat
saatavilla ja FU ovat vapaana, tulokset voidaan laskea
 käskynsuoritus käskyille, jotka ovat huomattavasti nykyistä käskyä
myöhempänä
 sitoutuminen (instruction commit) – tulokset kirjoitetaan
takaisin rekisteritiedostoon tai D$, kun tiedetään, että se on
turvallista (i.e., muutetaan koneen tilaa)
#133
Käskyjen järjestys (In-Order, Out-of-Order)
 Käskynhaku ja –dekoodausyksikköjen täytyy tuottaa käskyt
järjestyksessä, jotta riippuvuudet voidaan jäljittää
 Commit –yksikön täytyy kirjoittaa tulokset rekistereihin ja
muistiin samassa järjestyksessä kuin käskyt on haettu
 Poikkeuksen tapahtuessa ainoastaan ne rekisterit päivittyvät, joihin
kirjoittavat ennen poikkeuksen aiheuttavaa käskyä olevat käskyt
 Jos haarautuminen ennustetaan väärin, haarautumiskäskyn jälkeen
suoritetut käskyt eivät muuta koneen tilaa (Commit-yksikkö korjaa
väärät ennustukset)
 Vaikka liukuhihnan etuosa (fetch, decode, and issue) ja
takaosa (commit) käsittelevät käskyt järjestyksessä, FU:t
voivat aloittaa operaation suorituksen milloin tahansa kunhan
tarvittava data on saatavilla – out-of-(program) order
execution
 Suorituksen salliminen epäjärjestyksessä kasvattaa ILP:n määrää
#134
Dynaamisesti vuoronnettu CPU
Säilyttää
riippuvuudet
Säilyttää vireillä
olevat operandit
Tulokset lähetetään
kaikille odottaville
varausasemille
järjestää puskurin
uudelleen
rekisterikirjoituksia
varten
#135
Voi syöttääa
operandeja
aktiivisille käskyille
Suoritus epäjärjestyksessä
 Myöhempi käsky voidaan suorittaa ennen edellistä käskyä,
joten laitteiston tulee ratkoa sekä “read before write” ja “write
before write” data hasardit
lw
$t0,0($s1)
addu $t0,$t1,$s2
. . .
sub $t2, $t0, $s2
#136

Jos lw –käskyn kirjoitus rekisteriin $t0 tapahtuu addu
kirjoituksen jälkeen, niin sub –käsky saa väärän arvon
rekisteristä $t0

addu -käskyllä on ulostuloriippuvuus käskyyn lw – write
before write
Epäriippuvuudet
 Laitteiston on käsiteltävä myös epäriippuvuudet
(antidependencies) – kun (aiemmin suoritettava)
myöhempi käsky tuottaa data-arvon, joka hävittää
(myöhemmin suoritettavan) aiemman käskyn
käyttämän lähdeoperandin

Antidependency
R4 := R3 + 1
True data dependency
R3 := R5 + 1
Output dependency
Samanlainen rajoite kuin todellisilla datariippuvuuksilla, paitsi
käänteinen

#137
R3 := R3 * R5
Sen sijaan, että myöhempi käsky käyttää aiemman käskyn (ei vielä)
tuottamaa arvoa (read before write), myöhempi käsky tuottaa arvon,
joka tuhoaa aiemman käskyn (ei vielä) käyttämän arvon (write before
read)
Riippuvuudet, yhteenveto
 Kaikki kolme riippuvuustyyppiä
 todellinen datariippuvuus (read before write)
 epäriippuvuus (write before read)
 ulostuloriippuvuus (write before write)
talletuskonflikti
ilmenevät rekisterien (tai muiden talletuspaikkojen)
käytössä
 Todelliset riippuvuudet johtuvat ohjelmasta ja ovat
nähtävillä ohjelman datavuokaaviossa
 Epä- ja ulostuloriippuvuudet johtuvat rekistereiden
rajallisesta määrästä
 ohjelmoija käyttää rekistereitä uudelleen laskennan eri
vaiheissa johtaen tallennuskonflikteihin
#138
Tallennuskonfliktit ja rekisterin
uudelleennimeäminen
 Tallennuskonflikteja voidaan vähentää (tai eliminoida)
lisäämällä ongelmalliseksi osoittautuvaa resurssia
 Otetaan käyttöön lisärekistereitä, joiden avulla muodostetaan uusi
yhteys rekisterin ja arvon välille

SS-prosessorissa laitteisto allokoi uudet rekisterit dynaamisesti
 Rekisterin uudelleen nimeäminen – prosessori nimeää
käskyssä olevan rekisterin tunnisteen uudelle rekisterille (joka
ei näy ohjelmoijalle)
 arkkitehtuurirekisterit vs. fyysiset rekisterit

#139
R3 := R3 * R5
R3b := R3a * R5a
R4 := R3 + 1
R4a := R3b + 1
R3 := R5 + 1
R3c := R5a + 1
Nimeämisen suorittava laitteisto valitsee “korvaavan” rekisterin
vapaiden rekisterien varastosta ja vapauttaa rekisterin takaisin
varastoon, kun sen arvo on korvattu ja ratkaisemattomia viittauksia
rekisteriin ei ole olemassa
Yhteenveto: Lisää suorituskykyä
 Suorituskyvyn kasvattamiseksi on hyödynnettävä sekä
konetason että käskytason (ILP) rinnakkaisuutta
 Superpipelining
 Staattinen “multiple-issue” (VLIW)
 Dynaaminen “multiple-issue “(superskalaari)
 Prosessorin käyttämät mekanismit käskyn liikkeelle laskuun ja
suoritukseen vaikuttavat käytettävissä olevaan ILP:een
 In-order fetch, issue, and commit ja out-of-order execution




Liukuhihnoitus luo todellisia riippuvuuksia (read before write)
Epäjärjestyksessä suoritus luo epäriippuvuuksia (write before read)
Epäjärjestyksessä suoritus luo ulostuloriippuvuuksia (write before write)
In-order commit sallii spekuloinnin (ILP:n kasvattamiseksi) ja tarvitaan
tarkkojen keskeytysten toteuttamiseksi
 Rekisterin uudelleen nimeäminen voi ratkoa talletuskonfliktit
#140
CISC vs RISC vs SS vs VLIW
CISC
RISC
Superscalar
VLIW
Instr size
variable size
fixed size
fixed size
fixed size (but
large)
Instr format
variable
format
fixed format
fixed format
fixed format
Registers
few, some
special
Many GP
GP and rename
(RUU)
many, many
GP
Many ports
Many ports
Limited # of
ports
Limited # of
ports
Memory
reference
embedded in
many instr’s
load/store
load/store
load/store
Key Issues
decode
complexity
data
forwarding,
hazards
hardware
dependency
resolution
(compiler)
code
scheduling
#141
Liukuhihnoitettujen SS prosessoreiden evoluutio
#142
Year
Clock
Frequency
#Pipeline Issue
Stages
Widt
h
Cores/
Chip
Power
Intel 486
1989
25 MHz
5
1
1
5W
Intel Pentium
1993
66 MHz
5
2
1
10 W
Intel Pentium
Pro
1997
200 MHz
10
3
1
29 W
Intel Pentium 4
Willamette
2001
2000 MHz
22
3
1
75 W
Intel Pentium 4
Prescott
2004
3600 MHz
31
3
1
103 W
Intel Core
2006
2930 MHz
14
4
2
75 W
Sun USPARC
III
2003
1950 MHz
14
4
1
90 W
Sun T1
(Niagara)
2005
1200 MHz
6
1
8
70 W