Skoči na vsebino

Ključne arhitekturne značilnosti

Uspešna implementacija ILP temelji na sofisticiranem prepletu strojnih funkcij, od katerih je vsaka zasnovana za reševanje specifičnih izzivov pri vzporednem izvajanju ukazov. Te funkcije so se razvijale skozi desetletja oblikovanja procesorjev, pri čemer vsaka gradi na prejšnjih inovacijah in uvaja nove zmogljivosti.

Cevovodno izvajanje (angl. Pipelining)

Cevovodno izvajanje je v središču sodobne arhitekture procesorjev, saj predstavlja temeljno tehniko, ki pretvori izvajanje ukazov iz zaporednega procesa v nekaj, kar je bolj podobno tekočemu traku. Tako kot avtomobilska tovarna postane učinkovitejša, ko različne postaje hkrati delajo na različnih vozilih, cevovodno izvajanje omogoča procesorju delo na več ukazih v različnih fazah zaključka.

Klasična cevovodna struktura RISC vključuje pet stopenj: pridobivanje (angl. fetch), dekodiranje (angl. decode), izvajanje (angl. execute), dostop do pomnilnika (angl. memory access) in zapis rezultatov (angl. write-back). Vsaka stopnja opravi specifičen del obdelave ukaza. Medtem ko ena stopnja pridobiva ukaz iz pomnilnika, druga dekodira ukaz, tretja izvaja izračun, četrta dostopa do pomnilnika, peta pa shranjuje rezultate.

Pipelining

Superskalarno izvajanje (angl. Superscalar Execution)

Superskalarno izvajanje dvigne vzporedno izvajanje ukazov na višjo raven z implementacijo več enot za izvajanje ukazov znotraj procesorja. Ta arhitektura omogoča procesorju, da hkrati izda in izvede več ukazov, kar bistveno poveča prepustnost.

Sodobni superskalarni procesorji lahko vključujejo več aritmetično-logičnih enot za celoštevilske operacije, več enot s plavajočo vejico za matematične izračune ter namensko opremo za pomnilniške operacije. Kljub prednostim superskalarnega izvajanja pa to prinaša dodatne zapletenosti pri razporejanju ukazov in dodeljevanju virov.

Superscalar Execution

Izvajanje izven vrstnega reda (angl. Out-of-Order Execution)

Izvajanje izven vrstnega reda je ena najbolj sofisticiranih funkcij v sodobnem oblikovanju procesorjev, saj omogoča izvajanje ukazov v drugačnem vrstnem redu, kot so zapisani v programu, če to ne krši podatkovnih odvisnosti.

Za podporo temu pristopu procesorji uporabljajo več kompleksnih mehanizmov:

  • Okno ukazov (angl. Instruction Window): Spremlja ukaze v obdelavi in njihove odvisnosti.
  • Rezervacijske postaje (angl. Reservation Stations): Hranijo ukaze, ki čakajo na razpoložljivost operandov.
  • Enota za potrjevanje (angl. Commit Unit): Zagotavlja, da so ukazi dokončani v pravilnem vrstnem redu.

Preimenovanje registrov (angl. Register Renaming)

Preimenovanje registrov je ključna inovacija, ki omogoča tako izvajanje izven vrstnega reda kot povečanje vzporednosti na ravni ukazov. Ta tehnika odpravlja lažne odvisnosti med ukazi, saj procesor uporablja več fizičnih registrov kot arhitekturnih in dinamično preslika med njimi.

Imejmo preprost primer:

ADD R1, R2, R3 // R1 = R2 + R3
MUL R1, R4, R5 // R1 = R4 * R5

Brez preimenovanja registra bi moral ukaz MUL počakati, da se zaključi ADD, ker oba pišeta v R1. S preimenovanjem registrov lahko procesor vsakemu rezultatu ukaza dodeli različne fizične registre, kar jim omogoči vzporedno izvajanje, če so njihovi vhodni operandi pripravljeni.

Napovedovanje vej (angl. Branch Prediction)

Napovedovanje vej je ključna funkcionalnost, ki obravnava odvisnosti od nadzora, saj bi te sicer lahko povzročile zastoje v cevovodih ukazov in zmanjšale splošno zmogljivost. Ko procesor naleti na ukaz veje, kot je pogojni stavek, mora določiti, katero pot bo sledil. Če bi procesor čakal na rešitev pogoja, preden nadaljuje, bi s tem izgubil dragocene cikle takta.

Da bi to omilili, sodobni procesorji uporabljajo tehnike napovedovanja vej, s katerimi poskušajo uganiti verjeten izid veje in nadaljujejo izvajanje po predvideni poti. Dve pogosti strategiji napovedovanja vej sta:

  • Statistično napovedovanje: Uporablja fiksna pravila, kot je vedno napovedovanje, da bodo nazaj usmerjene veje (pogosto povezane z zankami) izvedene.
  • Dinamično napovedovanje: Temelji na strojni opremi, ki se uči in prilagaja na podlagi preteklih izidov vej. Ena izmed priljubljenih tehnik je dvonivojski prilagodljivi napovedovalnik, ki uporablja zgodovino vzorcev za izboljšanje natančnosti.

Zelo natančno napovedovanje vej zmanjšuje pogostost zastojev v cevovodu in omogoča, da se ukazi pridobivajo in izvajajo špekulativno. Vendar napačne napovedi zahtevajo mehanizme za povrnitev, kar špekulativno izvajanje učinkovito obvladuje.

Branch prediction

Izvajanje na podlagi predvidevanja (angl. Speculative Execution)

Izvajanje na podlagi predvidevanja deluje v tandemu z napovedovanjem vej, da dodatno izkoristi ILP z izvajanjem ukazov vzdolž napovedane poti, še preden je izid veje znan. Ta tehnika omogoča procesorjem, da »predvidevajo« in izvajajo ukaze, ki morda bodo ali pa ne bodo potrebni, s čimer prikrijejo zakasnitve in izboljšajo prepustnost.

Če je napoved veje pravilna, se rezultati zapišejo v stanje procesorja, kar dejansko prinaša izboljšave zmogljivosti, saj je bilo delo opravljeno vnaprej. Če je napoved napačna, procesor zavrže predvidene rezultate in z natančnimi mehanizmi za povrnitev stanja obnovi pravilno programsko stanje.

Izvajanje na podlagi predvidevanja zahteva skrbno usklajevanje, da napačne napovedi ne pokvarijo stanja procesorja. Za učinkovito upravljanje tega procesa se uporabljajo strojni mehanizmi, kot so medpomnilniki za prerazporejanje (angl. reorder buffers) in shranjevanje stanja (angl. checkpointing).

Kombinacija napovedovanja vej in izvajanje na podlagi predvidevanja je pomembno prispevala k izboljšanju zmogljivosti sodobnih procesorjev, zlasti pri aplikacijah s pogostimi vejami in zapletenimi tokovi nadzora.

Sequential