Gradivo

Dekodiranje ukazov v CPE

Centralna procesna enota (CPE) izvaja program v neprekinjeni zanki: fetch → decode → execute. To gradivo podrobno razlaga fazo dekodiranja, kaj pomeni, kje se dogaja in zakaj je ključna za delovanje procesorja.

1. Uvod v dekodiranje ukazov

CPE (centralna procesna enota, ang. CPU) izvaja program tako, da neprestano ponavlja cikel ukaza:fetch (pridobi) → decode (dekodira) → execute (izvede)(pogosto še write-back oziroma zapis rezultata).

Pri tem je dekodiranje ukazov ključna faza, ker CPE v tej fazi ugotovi:

  • kaj ukaz pomeni,
  • katere podatke potrebuje,
  • katere enote v procesorju morajo sodelovati pri izvedbi.

2. Kaj pomeni "dekodirati ukaz"?

Ukaz v strojni kodi je zapisan kot bitni vzorec (npr. 32-bitni ali spremenljive dolžine pri x86). Dekodiranje pomeni, da procesor iz tega bitnega vzorca prebere:

Opcode (operacijska koda)
Določa, katero operacijo želimo — ADD, SUB, LOAD, JUMP …
Operandi
Kateri registri ali podatki v pomnilniku sodelujejo pri operaciji.
Način naslavljanja (addressing mode)
Kako priti do podatkov — npr. neposredno iz registra ali prek izračunanega pomnilniškega naslova.
Dodatne informacije
Takojšnja konstanta (immediate), velikost podatkov, pogoji pri skokih ipd.

Rezultat dekodiranja je „načrt", ki pove krmilni logiki, katere signale mora poslati registrski datoteki, ALU-ju, enoti za dostop do pomnilnika itd.

3. Kje v CPE se dogaja dekodiranje?

Dekodiranje je tesno povezano s štirimi komponentami procesorja:

IR (Instruction Register)

Sem se po fazi fetch naloži trenutni ukaz, ki čaka na dekodiranje.

Krmilna enota (Control Unit)

Je "dirigent" procesorja. Iz dekodiranega ukaza izdela kontrolne signale in časovno zaporedje mikro-korakov.

Dekoderji ukazov

Posebna logika, ki iz bitnega vzorca ukaza izdela interni opis ukaza ali mikrooperacije.

Registrska datoteka

V fazi decode se pogosto že berejo registri, ki bodo operandi. Odvisno je od zasnove procesorja oziroma pipeline-a.

4. Kaj se zgodi v fazi Decode?

V tipični zasnovi (npr. RISC pipeline) faza decode vključuje štiri korake:

  1. 1

    Razčlenitev ukaza

    Procesor loči opcode, polja registrov, immediate vrednosti itd. iz bitnega vzorca.

  2. 2

    Branje operandov iz registrov

    Če ukaz uporablja registre, jih procesor prebere (npr. R1 in R2).

  3. 3

    Priprava na dostop do pomnilnika

    Pri LOAD/STORE ukazih se izračuna osnovni naslov ali se pripravijo komponente za kasnejši izračun.

  4. 4

    Priprava kontrolnih signalov

    Procesor določi, katera funkcionalna enota bo uporabljena (ALU, enota za skoke, enota za pomnilnik) ter kakšen bo naslednji korak v cevovodu.

5. Mikrooperacije, mikroprogramiranje in Microcode

Pri nekaterih procesorjih, posebej pri kompleksnejših naborih ukazov kot je x86, en strojni ukaz pogosto ne pomeni ene same preproste operacije. Namesto tega ga procesor v fazi dekodiranja pretvori v mikrooperacije (μops): bolj enostavne interne korake, ki jih jedro lažje izvaja.

Preprosti ukazi

Se lahko pretvorijo v samo nekaj μops takoj v dekoderjih, hitro in brez posebne obdelave.

Kompleksni ukazi

Se izvedejo prek mikrokode (microcode ROM), ki deluje kot interni recept mikrooperacij za zapletene primere.

To omogoča, da procesor podpira širok in zgodovinsko združljiv nabor ukazov, hkrati pa notranje deluje bolj RISC-ovsko z mikrooperacijami.

6. Dekodiranje in cevovod (Pipeline)

V cevovodnem procesorju se več ukazov obdeluje hkrati, vsak v svoji fazi: eden se pridobiva, drugi se dekodira, tretji izvaja. Dekodiranje mora biti zato posebej prilagojeno.

Hitro

Dekodiranje ne sme biti ozko grlo, ki upočasni celoten cevovod.

Upoštevanje skokov

Napačna napoved skoka (branch) zahteva izpraznitev dela cevovoda (stall/flush), kar je drago.

Odvisnosti podatkov

Če ukaz potrebuje rezultat prejšnjega ukaza, mora cevovod počakati ali pa uporabiti posredovanje (forwarding).

V modernih x86 procesorjih obstajajo tudi predpomnilniki za že dekodirane μops (npr. »micro-op cache / op cache«), kar zmanjša potrebo po ponovnem dekodiranju v zanki in poveča učinkovitost.

7. Kratek primer

Poglejmo, kako faza decode deluje v praksi pri dveh različnih arhitekturah.

RISC (poenostavljeno)
ADD R3, R1, R2
opcodeADD
operandiR1 in R2
ciljR3

V decode fazi procesor prebere R1 in R2 ter pripravi ALU na seštevanje.

x86 (konceptualno)
ADD EAX, [RBX+4]
opcodeADD
operand 1register EAX
operand 2pomnilnik @ RBX+4
μopsnaslov + branje + ADD

Procesor mora dekodirati način naslavljanja in ukaz razdeliti v več μops.

8. Zaključek

Dekodiranje ukazov je faza, kjer CPE „razume" strojni ukaz in ga pretvori v notranje korake ter kontrolne signale.

Pri enostavnih procesorjih je to relativno neposredno. Pri modernih procesorjih pa pogosto vključuje:

  • prevajanje v mikrooperacije,
  • delo z mikro-kodo,
  • optimizacije kot je μop cache.

Hitro in učinkovito dekodiranje je ključno, ker vpliva na hitrost celotnega cevovoda in posledično na zmogljivost procesorja.

DomovKonec gradiva