Kas yra Superskalaris?

Superskaliarinis procesorius gali savarankiškai vykdyti kelias komandas vienu metu per vieną laikrodžio ciklą. Tai apima perteklinius vykdymo išteklius, tokius kaip keli slankiojo kablelio vienetai, aritmetiniai loginiai vienetai ir sveikųjų skaičių perjungikliai. Šio tipo procesoriai yra skirti lygiagrečiam skaičiavimui ir spekuliaciniam vykdymui, nereikalaujant specialios programinės įrangos. Jis gali pagerinti daugelio daug procesorių reikalaujančių programų vykdymo greitį manipuliuodamas ir pertvarkydamas kodą. Jis dažnai naudojamas keliose kompiuterių klasėse, įskaitant serverius, stalinius ir net nešiojamuosius kompiuterius.

Nors kai kurie architektūros aspektai procesoriuose buvo naudojami nuo septintojo dešimtmečio, tikri superskaliniai procesoriai buvo išleisti tik daug vėliau. Kai kurie sumažintų instrukcijų rinkinio skaičiavimo (RISC) procesoriai, parduoti devintojo dešimtmečio pabaigoje ir dešimtojo dešimtmečio pradžioje, buvo superskalariniai. Dėl paprastų branduolių ir fiksuoto ilgio instrukcijų lygiagrečių instrukcijų siuntimas ir planavimas buvo gana lengvas. Daugelis ne RISC procesorių, gaminamų nuo dešimtojo dešimtmečio pabaigos, taip pat turi superskaliarinę architektūrą. Įterptieji, mažos galios ir kiti specialūs procesoriai dažnai yra išimtys, kurie optimizuoja kitus savo dizaino aspektus, o ne lygiagretų vykdymą.

Kai kurie procesoriai gali bendrinti vieną konvejerį su instrukcijomis iš kelių vykdymo gijų, vadinamų supersriegiais. Kai funkcinis vienetas yra neaktyvus, nes laukia šiuo metu vykdomoje gijoje, jis gali vykdyti komandą iš kitos gijos. Ši technika padeda visiškai išnaudoti procesorių, tačiau nėra tokia efektyvi kaip vienalaikis kelių sriegių apdorojimas (SMT). Vienas superskaliarinis procesorius gali vykdyti kelias komandas iš kelių gijų tuo pačiu metu naudodamas SMT. Tačiau vienu metu vykdomos gijos gali konkuruoti dėl sistemos ir procesoriaus išteklių, o tai gali sulėtinti sistemą.

Procesoriai su kelių pakopų konvejeriais gali vykdyti kelias komandas vienu metu, jei jos yra skirtinguose vykdymo etapuose. Priešingai, kelios instrukcijos gali būti vykdomos toje pačioje stadijoje tuo pačiu metu superskaliariniame procesoriuje. Nors šio tipo procesorius ir kelių branduolių procesorius turi daug panašumų, jie nėra vienodi. Kelių branduolių procesoriuje viename įrenginyje yra keli pilni procesoriai, vadinami branduoliais. Kiekviena kelių branduolių procesoriaus šerdis paprastai yra superskaliarinė ir gali apimti kelis lygiagrečius vamzdynus.

Pagrindinis superskaliarinio procesoriaus bruožas yra jo gebėjimas vykdyti programos kodą netvarkingai siekiant efektyvumo. Kad tai padarytų, ji turi žinoti apie bet kokios instrukcijos priklausomybę nuo kitų. Jei instrukcija turi įtakos kitos komandos rezultatams arba naudoja jos išteklius, labai tikėtina, kad jos neturi būti vykdomos lygiagrečiai. Yra būdų, kaip pašalinti kai kurių tipų priklausomybes, tačiau kiti turi atidėti apdorojimą, kol bus prieinami ištekliai.

Netvarkingas vykdymas taip pat turi užtikrinti tinkamą registrų, vėliavėlių ir kitų išteklių turinį, jei įvyktų sistemos pertraukimas. Tokiu atveju sistemos būsena turi atrodyti taip pat, tarsi kodas būtų vykdomas nuosekliai, kaip numatyta. Kitas aspektas yra tai, kiek instrukcijų procesorius turi išnagrinėti, kad rastų lygiagretaus vykdymo galimybes. Kuo didesnis skaičius, tuo efektyvesnis gali būti vykdymas. Tai taip pat apima spekuliatyvų instrukcijų vykdymą kitoje kiekvienos tiriamo kodo šakos pusėje.