Cevovodne nevarnosti

Iz E-študij, proste zakladnice študentskega znanja

Skoči na: navigacija, iskanje

Poznamo tri vrste cevovodnih nevarnosti (ang. hazard):

Strukturne nevarnosti

Pojavi se kadar dva ali več ukazov v urini periodi potrebuje isto enoto. Izognemo se jim tako, da kasnjši ukaz počaka, da se enota sprosti.

Primer: 1. stopnja cevovoda potrebuje pomnilnik za branje operanda, 4. stopnja pa za shranitev operanda

Podatkovne ali operandne nevarnosti

Kadar ukaz kot rezultat daje podatek, ki ga potrebuje naslednji ukaz. Rezultat se shranjuje v zadnji stopnji, naslednji ukaz pa potrebuje razultat v tretji stopnji (od petih). Tako nevarnost lahko preprečimo z zaklepanjem cevovoda, ali pa z premoščanjem, kar pomeni, da rezultat iz stopnje EX peljemo v stopnjo ID. V tem primeru zaklenitev cevovoda ni potrebna.

Ločimo 3 vrste podatkovnih nevarnosti:

read after write (RAW) - ukaz 2 bere iz registra, preden ukaz 1 tja shrani rezultat
write after read (WAR) - ukaz 2 prepiše register, preden ga ukaz 1 prebere
write after write (WAW) - ukaz 2 zapiše rezultat pred ukazom 1 (nato ga ukaz 1 prepiše)

Če gre za ukaz, ki rezultata ne dobi v stopnji EX (tak ukaz je recimo LOAD), potem tako premoščanje ni mogoče. Premoščanje pri LOAD ukazu ne izniči zaklepanja, ki je še vedno potrebno.

Primer: imamo program, ki ima 20% load ukazov. Za koliko se poveča CPI (zaradi zaklepanja cevovoda), če je v idealnem primeru CPI enak 1?

CPIi = 1
CPIr = 0.8 * 1 +0,2 * 2 = 1,2

Kontrolne nevarnosti

Do njih pride pri izvajanju kontrolnih(skočnih) ukazov (to so tisti, ki spreminjajo PC drugače, kot po pravilu PC = PC + 1). Naslov, kamor naj program skoči, se ponavadi izračuna šele v stopnji EX, v tem času pa je cevovod prevzel že naslednje ukaze. Vsak skočni ukaz zaklene cevovod za dve urini periodi(oz. dokler ni znan naslov skoka, vendar se vedno čaka), vendar pa ni nujno, da se skok izvede (če ni brezpogojni, se morda ne izvede).

Kontrolne nevarnosti odpravlja:

Statična predikcija - prevajalnik skuša v naprej napovedati, ali bo pogoj izpolnjen in skok s tem izveden (če pogoj ne bo izpolnjen, ne bo skoka, zato ni potrebno čakati na rezultat (naslov skoka)). Statična predikcija se imenuje tako zato, ker prevajalnik napove skoke že pred izvajanjem programa, ne med samim izvajanjem.
Skočna reža ali zakasnjeni skok - ukazi, ki so v programu takoj za skočnimi ukazi pravimo, da so v skočni reži. Skočna reža je enaka številu stopenj cevovoda, ki so pred stopnjo, ki ugotavlja izid. V skočno režo vstavimo ukaze, ki bi se izvršili neglede na izid skoka. Če takih ukazov ni lahko tja vstavimo ukaz NOP.
Dinamična predikcija - prav tako gre za napovedovanje skokov, vendar se ta napoved prilagaja delovanju programa.
Enobitna prediktorska tabela - v njej se za vse skoke v programu hrani rezultat prejšnjega skoka. Če se je skok prej izvedel, se predvideva, da se bo izvedel tudi sedaj, oz. obratno. Lahko pride do napak, vendar so te redke.
Dvobitna prediktorska tabela - namesto enega bita imamo sedaj dva bita in lahko zapišemo vrednosti 0..3. Če se je skok izvedel vrednost povečamo, sicer jo zmanjšamo. Pogoj se bo izvedel, če je vrednost tabele 2 ali 3.
Korelacijski prediktor - prediktor (m,n) hrani globalno zgodovino zadnjih m skokov in na podlagi tega izbira med n prediktorskimi tabelami.
Turnirski prediktor - včasih se korelacijski prediktor obnaša slabše kot prediktorska tabela, zato vgradimo oba in si zapomnimo, kateri ima večkrat prav.
Skočni predpomnilnik - pri ostalih prediktorjih je vseeno treba počakati eno urino periodo, ker se skočnega naslova ne da izračunati v prvi stopnji cevovoda. To popravimo s predpomnilnikom, ki hrani zadnjih nekaj skočnih naslovov. Tu lahko pride do dveh vrst napak - napačna predikcija in napačen naslov v predpomnilniku.
Osebna orodja
Imenski prostori
Različice
Dejanja
navigacija

Tiskanje/izvoz
orodja