Superskalarinis procesorius: apibrėžimas, architektūra ir veikimas

Superskalarinis procesorius: apibrėžimas, architektūra ir veikimas — kaip instrukcijų lygiagretinimas ir funkcinių blokų dubliavimas ženkliai didina CPU našumą.

Autorius: Leandro Alegsa

Superskalarinio procesoriaus konstrukcija leidžia viename procesoriuje taikyti lygiagrečiųjų skaičiavimų formą, vadinamą instrukcijų lygmens lygiagretinimu, todėl tuo pačiu taktiniu dažniu galima atlikti daugiau darbų. Tai reiškia, kad CPU per taktinį ciklą vykdo daugiau nei vieną instrukciją, vykdydamas kelias instrukcijas vienu metu (vadinama instrukcijų siuntimu) dubliuojamuose funkciniuose blokuose. Kiekvienas funkcinis blokas yra procesoriaus branduolio viduje esantis vykdymo resursas, pavyzdžiui aritmetinis loginis blokas (ALU), slankiojo kablelio blokas (FPU), bitų keitiklis arba daugiklis.

Dauguma superskalarinių procesorių taip pat yra su vamzdeliu (pipeline), tačiau gali būti ir superskalarinių procesorių be vamzdelio arba su vamzdeliu ne superskalarinių procesorių. Vamzdelio mechanizmas padeda padalinti instrukcijos vykdymą į etapus (pvz., nuskaitymas, dekodavimas, vykdymas, rezultatų rašymas), o superskalarumas leidžia atlikti kelis tokio tipo etapus lygiagrečiai skirtingoms instrukcijoms.

Kaip veikia superskalarus procesorius

Superskalarinį metodą palaiko kelios procesoriaus branduolio savybės:

  1. Instrukcijos pateikiamos iš užsakto instrukcijų sąrašo (fetch) ir dekoduojamos.
  2. Procesoriaus techninė įranga gali nustatyti, kurios instrukcijos turi kokią duomenų priklausomybę ir ar jas galima vykdyti lygiagrečiai.
  3. Per vieną taktinį ciklą gali būti perskaityta ir pateikta kelioms vykdymo grandims daugiau nei viena instrukcija (issue).

Kiekviena skaliarinio procesoriaus vykdoma instrukcija vienu metu keičia vieną ar du duomenų elementus, o kiekviena vektorinio procesoriaus vykdoma instrukcija vienu metu keičia daug duomenų elementų. Superskalarinis procesorius yra šių dviejų požiūrių mišinys:

  1. Kiekviena instrukcija apdoroja vieną duomenų elementą.
  2. Kiekviename procesoriaus branduolyje yra keli dubliuojantys funkciniai vienetai, todėl kelios instrukcijos vienu metu apdoroja nepriklausomus duomenų elementus.

Superskalariniame procesoriuje instrukcijų dispečeris nuskaito instrukcijas iš atminties, analizuoja jų priklausomybes ir nusprendžia, kurias iš jų galima vykdyti lygiagrečiai. Dispečeris išsiunčia tas instrukcijas į daugybę dubliuojančių funkcinių blokų, esančių procesoriaus viduje, taip bandydamas maksimizuoti užimtumą ir momentinį našumą (IPC — instrukcijų per ciklą skaičius).

Vykdymo etapai ir technikos

Svarbiausi etapai ir technikos, leidžiančios efektyviai išnaudoti superskalarumą:

  • Fetch / Decode: nuskaitymas ir dekodavimas kelių instrukcijų vienu metu.
  • Issue: dispečeris sprendžia, kurios instrukcijos gali būti išsiųstos į laisvus funkcinio vienetus.
  • Register renaming: registrų pervadinimas pašalina tariamas (false) priklausomybes (WAR, WAW), leidžiant vykdyti daugiau instrukcijų lygiagrečiai.
  • Reservation stations / Tomasulo algoritmas: rezervacijos stotys ir dinamines vykdymo planavimo schemos leidžia vykdyti instrukcijas iš eilės (out-of-order), kai tik yra reikalingi operandai.
  • Reorder Buffer (ROB): užtikrina, kad rezultatų įrašymas atmintyje arba registruose įvyktų teisinga tvarka (commit), išlaikant programos matomą seką.
  • Branch prediction: šakų spėjimas sumažina kontrolinius vėlavimus, leidžia palaikyti pilną vykdymo grandinę net prie šakų.

Priklausomybės ir konfliktai (hazardai)

Pagrindinės kliūtys, mažinančios superskalarinio procesoriaus efektyvumą:

  • Duomenų priklausomybės: kai instrukcija laukia ankstesnės instrukcijos rezultato (RAW). Jas mažina registrų pervadinimas ir out-of-order vykdymas.
  • Struktūriniai konfliktai: kai kelioms instrukcijoms reikia to paties funkcinio bloko tuo pačiu metu.
  • Kontrolės (šakų) priklausomybės: šakų spėjimo klaidos verčia nutraukti ar išvalyti vamzdelius, kas kainuoja ciklus.

Superskalarumas vs kitos paradigmės

Superskalarumas skiriasi nuo kitų paralelizmo formų:

  • Skaliarinis vs vektoriniai procesoriai: skaliarinė instrukcija apdoroja vieną duomenų elementą, vektorinė — daug elementų vienu metu. Superskalarus procesorius leidžia vienu metu vykdyti kelias skaliarines instrukcijas, taigi jis yra tarsi tarpinis sprendimas.
  • VLIW (Very Long Instruction Word): VLIW perkelia sprendimą apie lygiagretinimą į kompiliatorių — instrukcijų paketas nurodo lygiagretumą statinėi, o ne dinamiškai dispečeriui. Superskalaras sprendžia daugumą klausimų dinamiškai aparatūros lygmenyje.
  • Multicore: daug branduolių (multicore) suteikia lygiagretinimą aukštesniu lygiu (mėgėjų / užduočių lygiu), o superskalarumas vyksta viduje atskiro branduolio (instrukcijų lygmens lygiagretinimas).

Našumas, įgyvendinimas ir ribotumai

Projektuojant superskalarinį procesorių siekiama padidinti instrukcijų dispečerio tikslumą ir užtikrinti, kad daugybė funkcinių blokų būtų nuolat užimti. Nuo 2008 m. visi bendrosios paskirties procesoriai praktikoje dažnai naudoja superskalarines technikas; tipiniame superskalariniame procesoriuje gali būti kelios ALU, FPU ir SIMD vienetai (pvz., iki 4 ALU, 2 FPU ir du SIMD vienetai, priklausomai nuo dizaino). Aukštesnės klasės šiuolaikiniai procesoriai gali turėti dar platesnį išsiuntimo plotį (issue width), daugiau vykdymo vienetų ir sudėtingesnę dispečerio logiką.

Tačiau didesnis superskalarumas reiškia:

  • didesnę aparatūros sudėtingumą (daugiau dispečerio logikos, didesnės rezervacijos struktūros, sudėtingesnis registrų pervadinimas);
  • didesnes energijos sąnaudas ir šiluminį krūvį;
  • mažėjančią grąžą — dėl priklausomybių ir šakų klaidų realus IPC dažnai labai toli nuo teorinio maksimumo;
  • didėjančius kaštus ir diegimo riziką projektavimo metu.

Istorija ir praktika

Superskalarumas pradėtas plačiau diegti ir tobulinti XX a. pabaigoje ir per pastaruosius dešimtmečius tapo įprasta daugelio x86, ARM ir kitų architektūrų savybe. Įvairios įmonės — Intel, AMD, ARM ir kt. — diegia skirtingus kompromisus tarp išsiuntimo pločio, rezervacijos vietų, registrų pervadinimo ir šakų spėjimo tikslumo, atsižvelgdamos į našumą, energijos suvartojimą ir kaštus.

Santrauka

Superskalarinis procesorius yra efektyvus būdas padidinti vieno branduolio našumą, leidžiantis vykdyti kelias instrukcijas vienu metu naudojant daug dubliuotų vykdymo vienetų ir sudėtingą dispečerio logiką. Norint gauti gerą realų pranašumą, dizaineriai naudoja įvairias technikas: register renaming, out-of-order vykdymą, rezervacijos stotis, reorder buffer ir pažangų šakų spėjimą. Tačiau didesnis superskalarumas kelia techninių ir energetinių iššūkių, todėl dizaino sprendimai visuomet yra kompromisas tarp našumo, sudėtingumo ir energijos vartojimo.

Projektuojant superskalarinį procesorių svarbu rasti pusiausvyrą tarp dispečerio sudėtingumo, funkcinio blokų skaičiaus ir energijos efektyvumo — tik tada daugelis funkcinių blokų išliks užimti ir bus pasiektas aukštas realus našumas.

Paprastas superskalarinis vamzdynas. Imant ir siunčiant po dvi instrukcijas vienu metu, per ciklą galima atlikti ne daugiau kaip dvi instrukcijas.Zoom
Paprastas superskalarinis vamzdynas. Imant ir siunčiant po dvi instrukcijas vienu metu, per ciklą galima atlikti ne daugiau kaip dvi instrukcijas.

CRAY T3e lygiagrečiojo kompiuterio procesoriaus plokštė su keturiais superskalariniais Alpha procesoriaisZoom
CRAY T3e lygiagrečiojo kompiuterio procesoriaus plokštė su keturiais superskalariniais Alpha procesoriais

Apribojimai

Superscalar procesorių našumo didinimą riboja du dalykai:

  1. Instrukcijų sąraše integruoto lygiagretumo lygis
  2. Dispečerio ir duomenų priklausomybės tikrinimo sudėtingumas ir laiko sąnaudos.

Net jei įprastame superskalariniame procesoriuje priklausomybių tikrinimas būtų be galo spartus, jei pats instrukcijų sąrašas turi daug priklausomybių, tai taip pat apribotų galimą našumo padidėjimą, todėl dar vienas apribojimas yra kode integruoto lygiagretumo kiekis.

Nesvarbu, koks didelis būtų dispečerio greitis, yra praktinė riba, kiek instrukcijų galima išsiųsti vienu metu. Nors techninės įrangos pažanga leis sukurti daugiau funkcinių vienetų (pvz., ALU) viename procesoriaus branduolyje, instrukcijų priklausomybių tikrinimo problema padidėja tiek, kad pasiekiama superskalarinio dispečerinio dispečerio riba yra šiek tiek mažesnė. Tikėtina, kad vienu metu siunčiamos penkios-šešios instrukcijos.

Alternatyvos

Įvairūs alternatyvūs metodai nėra vienas kitam prieštaraujantys - jie gali būti (ir dažnai yra) derinami viename procesoriuje, todėl galima sukurti daugiabranduolį procesorių, kuriame kiekvienas branduolys yra nepriklausomas procesorius su keliais lygiagrečiais superskalariniais vamzdynais. Kai kuriuose daugiabranduoliniuose procesoriuose taip pat yra vektorių funkcija.

Susiję puslapiai

Klausimai ir atsakymai

K: Kas yra superskalarinė technologija?


A.: Superskalarinė technologija yra pagrindinių lygiagrečiųjų skaičiavimų forma, leidžianti per kiekvieną taktinį ciklą apdoroti daugiau nei vieną instrukciją, vienu metu naudojant kelis vykdymo vienetus.

K: Kaip veikia superskalarinė technologija?


A: Superskalarinė technologija apima instrukcijas, kurios į procesorių patenka eilės tvarka, ieškant duomenų priklausomybės, ir įkraunant daugiau nei vieną instrukciją per kiekvieną taktinį ciklą.

K: Kuo skiriasi skaliariniai ir vektoriniai procesoriai?


A.: Skalariniame procesoriuje instrukcijos paprastai vienu metu dirba su vienu ar dviem duomenų elementais, o vektoriniame procesoriuje instrukcijos paprastai vienu metu dirba su daugeliu duomenų elementų. Superskalarinis procesorius yra abiejų tipų mišinys, nes kiekviena instrukcija apdoroja vieną duomenų elementą, tačiau vienu metu vykdoma daugiau nei viena instrukcija, todėl procesorius vienu metu apdoroja daug duomenų elementų.

Klausimas: Kokį vaidmenį superskalariniame procesoriuje atlieka tikslus instrukcijų dispečeris?


A: Tikslus instrukcijų dispečeris yra labai svarbus superskalariniam procesoriui, nes užtikrina, kad vykdymo vienetai visada būtų užimti darbais, kurių greičiausiai prireiks. Jei instrukcijų dispečeris nėra tikslus, dalį darbo gali tekti išmesti, todėl procesorius nebus greitesnis už skaliarinį procesorių.

Klausimas: Kuriais metais visi įprasti procesoriai tapo superskalariniais?


A: 2008 m. visi įprasti procesoriai tapo superskaliniais.

K: Kiek ALU, FPU ir SIMD blokų gali būti įprastame procesoriuje?


A: Įprastame centriniame procesoriuje gali būti iki 4 ALU, 2 FPU ir 2 SIMD vienetai.


Ieškoti
AlegsaOnline.com - 2020 / 2025 - License CC3