Superskalārā CPU konstrukcija nodrošina paralēlo skaitļošanu, ko sauc par instrukciju līmeņa paralēlismu vienā CPU, kas ļauj veikt vairāk darba ar to pašu taktātrumu. Tas nozīmē, ka CPU izpilda vairāk nekā vienu instrukciju takts cikla laikā, izpildot vairākas instrukcijas vienlaicīgi (ko sauc par instrukciju dispečerizāciju) dublētās funkcionālajās vienībās. Katra funkcionālā vienība ir izpildes resurss procesora kodolā, piemēram, aritmētiskā loģiskā vienība (ALU), svārstīgā komata vienība (FPU), bitu pārveidotājs vai reizinātājs.

Darbības princips

Superskalāra procesora galvenā ideja ir ļaut aparatūrai vienlaikus izpildīt vairākas neatkarīgas instrukcijas, izmantojot vairākas paralēlas izpildes vienības. Tam nepieciešamas vairākas atbalstošas funkcijas procesora kodolā:

  1. Instrukcijas jābūt pieejamām no sakārtota instrukciju saraksta (fetch/decode posmi).
  2. Procesora aparatūra spēj noteikt datu atkarības starp instrukcijām, lai nepieļautu nekorektu izpildi.
  3. Jāspēj nolasīt (fetch) un dekodēt vairākas instrukcijas vienā takts ciklā, lai aizpildītu izpildes vienības.

Parasti superskalārs procesors darbojas kopā ar konveijeru (pipeline): instrukcijas tiek lasītas, dekodētas, izsniegtas (issue) uz izpildes vienībām, izpildītas un, ja nepieciešams, reģistrēt rezultāti (retire) secīgi. Superskalārā pieeja paplašina šo plūsmu, ļaujot vairākām instrukcijām atrasties dažādos posmos vienlaikus un vairākām instrukcijām tikt izpildītām vienlaicīgi.

Galvenie tehniskie risinājumi un mehānismi

  • Datu atkarību noteikšana: aparatūra pārbauda, kuras instrukcijas izmanto vienādus reģistrus vai atmiņas adreses, lai nepieļautu konfliktus (RAW, WAR, WAW).
  • Out-of-order izpilde: instrukcijas var tikt izpildītas ne secībā, ja nav datu atkarību, lai labāk izmantotu izpildes vienības. Rezultātu sakārtošanai tiek izmantotas struktūras kā reorder buffer (ROB).
  • Register renaming: noņem mākslīgās atkarības (WAW, WAR), piešķirot fiziskus reģistrus loģisko reģistru vietā.
  • Gadījumu (hazard) vadība: aparatūra atpazīst un apstrādā atkarības, zaru prognozēšana (branch prediction) samazina plūsmas pārtraukumus.
  • Instrukciju dispečers (issue/dispatch unit): nolasa un sadala instrukcijas uz brīvām izpildes vienībām, mēģinot aizpildīt visu izpildes joslu (issue width).

Superskalārā vs vektoru un VLIW

Katra skalārā instrukcija apstrādā vienu vai dažus datu elementus, kamēr vektorprocesori (SIMD) apstrādā daudzus elementus ar vienu instrukciju. Superskalārais procesors apvieno skalāru instrukciju paralēlismu ar pieejamu vairākumu izpildes vienību, proti:

  1. Katra instrukcija apstrādā vienu datu elementu.
  2. Kodola iekšienē ir vairākas dublējošas funkcionālās vienības, tāpēc vairākas instrukcijas vienlaikus apstrādā neatkarīgus datu elementus.

Atšķirībā no VLIW (Very Long Instruction Word), kur kompilators atbild par paralelizācijas plānošanu, superskalāra aparatūra dinamiski atrod paralēlismu izpildes laikā.

Tipiskas arhitektūras īpašības un rādītāji

  • Issue width (izsniegšanas platums): cik instrukcijas var tikt izsniegtas vienā takts ciklā — parasti no 2 līdz 8, pat vairāk īpašos serveru dizainos.
  • IPC (instructions per cycle): reāls izpildīto instrukciju skaits uz vienu taktu; superskalārie dizaini mēģina palielināt IPC.
  • Tipisks galddatoru/mobilo kodolu konfigurācijas piemērs: līdz 4 ALU, 2 FPU un divas SIMD vienības, kā minēts iepriekš.

Priekšrocības un trūkumi

  • Priekšrocības: augstāks throughput, labāka resursu izmantošana, lielāks IPC bez nepieciešamības palielināt takts frekvenci.
  • Trūkumi: ievērojama aparatūras sarežģītība (dispečeru loģika, reģistru pārdalīšana, ROB), lielāka enerģijas patēriņa un dizaina izmaksas; ierobežojumi, ko nosaka programmas sekvencialitāte un datu atkarības.

Praktiski risinājumi datu atkarību problēmu mazināšanai

Lai superskalārais procesors efektīvi izmantotu paralēlismu, tiek pielietoti šādi paņēmieni:

  • Tomasulo algoritms un citi dinamiski plānošanas mehānismi — ļauj izpildīt instrukcijas atbilstoši resurss pieejamībai un atkarībām.
  • Branch prediction — lai samazinātu konvejera skaitīšanas pārtraukumus pie nosacījumu zariem.
  • Speculative execution — izpilde paredzētajās zara ceļos, rezultātu anulēšana, ja prognoze bija kļūdaina.

Konveijers un superskalārā attiecība

Lielākā daļa superskalāru procesoru ir arī konveijeru procesori — konveijers palielina takta frekvenci un iztukšo laika posmus, kamēr superskalārais izplata darbu starp vairākām vienībām. Tomēr iespējami arī superskalāri dizaini bez konveijera vai konveijeri bez superskalāra dispečera — tie funkcionē pēc līdzīga principa, bet atšķiras pēc tīmekļa un plūsmas organizācijas.

Piemēri un vēsture

No 2008. gada visi vispārējas nozīmes procesori prakses līmenī ir superskalāri. Vēsturiski nozīmīgi superskalāri piemēri ir Intel arhitektūras, piemēram, Pentium Pro (ieviests out-of-order un superskalāro elementu izmantošanu), arī vēlākas paaudzes kā Intel Core sērija. AMD arhitektūra (piem., Athlon, K8) arī izmanto superskalāras un out-of-order mehānismus. Mūsdienās daudzās mobilajās un iebūvētajās sistēmās esošās ARM bāzētās kodolu sērijas (piem., Cortex-A sērija) ir superskalāras, un arī daudzas Apple A sērijas sistēmas uz čipa (SoC) satur superskalārus elementus.

Dizaina apsvērumi

Superskalārā projektēšanā ir īpaši svarīgi uzlabot instrukciju dispečera precizitāti un nodrošināt, lai tas spētu aizņemt vairākas funkcionālās vienības ilgtspējīgi. Ja dispečers nespēj aizņemt visas vienības, procesora veiktspēja samazinās. Tāpēc liela daļa inženierijas tiek veltīta līdzekļiem, kas palielina instrukciju paralēlismu — labas zaru prognozes, efektīva register renaming, ROB un dinamiskā plānošana.

Kopsavilkums

Superskalārais procesors palielina skaitļošanas caurlaidību, izpildot vairākas instrukcijas vienlaicīgi, izmantojot dublētas izpildes vienības un sarežģītu dispečera loģiku. Tas bieži tiek kombinēts ar konveijeriem, out-of-order izpildi, reģistru pārdali un zaru prognozēšanu, lai maksimizētu IPC un samazinātu veiktspējas ierobežojumus, ko nosaka datu atkarības un zaru nosacījumi.