A korai számítógépek teljesen szekvenciálisak voltak. A processzor által kapott minden utasítást maradéktalanul teljesíteni kellett, mielőtt a következőt elindíthatták. A legtöbb utasításnak öt szakasza van: Utasítás lekérése, Utasítás dekódolása, Végrehajtás, Memória hozzáférés és Visszaírás. Illetve ezek a szakaszok megkapják a végrehajtandó utasítást, különválasztják a műveletet az értékektől operált, hajtsa végre a műveletet, nyissa meg a regisztert, amelybe az eredményt írja, és írja be az eredményt a megnyitott Regisztráció.
Ezen szakaszok mindegyike egy ciklust vesz igénybe. Sajnos, ha az adatok nem szerepelnek egy regiszterben, akkor azt a CPU gyorsítótárából vagy a rendszer RAM-jából kell lekérni. Ez sokkal lassabb, és több tucat vagy több száz órajel-ciklussal jár. Addig is minden másnak várnia kell, mivel más adat vagy utasítás nem dolgozható fel. Az ilyen típusú processzortervezést szubskalárisnak nevezik, mivel órajelenként egy utasításnál kevesebbet futtat.
Csővezetékezés skalárra
A skaláris processzort rendszerfolyamat alkalmazásával lehet elérni. Az utasítás végrehajtásának öt szakasza mindegyike a tényleges processzormag különböző hardverbiteiben fut. Így, ha óvatos az egyes szakaszok hardverébe betáplált adatokkal, akkor mindegyiket minden ciklusban elfoglalhatja. Egy tökéletes világban ez ötszörös gyorsuláshoz vezethet, és a processzor tökéletesen skaláris lesz, ciklusonként egy teljes utasítást futtatva.
Valójában a programok összetettek és csökkentik az átviteli sebességet. Például, ha két összeadási utasítása van: „a = b + c” és „d = e + f”, ezek probléma nélkül futtathatók egy folyamatban. Ha azonban „a = b + c”, majd „d = a + e”, akkor probléma van. Feltételezve, hogy ez a két utasítás közvetlenül egymás után van, az „a” új értékének kiszámítási folyamata nem fejeződött be, nem beszélve arról, hogy visszaírjuk a memóriába, mielőtt a második utasítás beolvassa az „a” régi értékét, majd rossz választ adna „d”.
Ez a viselkedés ellensúlyozható egy diszpécser bevonásával, amely elemzi a közelgő utasításokat, és biztosítja, hogy egyetlen másiktól függő utasítás se futtasson túl szorosan egymás után. Valójában rossz sorrendben futtatja a programot, hogy ezt kijavítsa. Ez működik, mert sok utasítás nem feltétlenül az előző eredményére támaszkodik.
A csővezeték kiterjesztése szuperskalárra
A szuperskaláris processzor ciklusonként egynél több teljes utasítás futtatására képes. Ennek egyik módja a folyamat bővítése úgy, hogy két vagy több hardverbit legyen, amely képes kezelni az egyes szakaszokat. Így minden ciklusban két utasítás lehet a csővezeték minden szakaszában. Ez nyilvánvalóan megnövekedett tervezési bonyolultságot eredményez, mivel a hardver duplikálódik, azonban kiváló teljesítményskálázási lehetőségeket kínál.
A növekvő csővezetékekből származó teljesítménynövekedés azonban eddig csak hatékonyan skálázódik. A termikus és méretbeli korlátok bizonyos határokat szabnak. Jelentős ütemezési bonyodalmak is vannak. A hatékony diszpécser most még kritikusabb, mivel biztosítania kell, hogy a két utasításkészlet egyike se támaszkodjon a többi feldolgozás alatt álló utasítás eredményére.
Az elágazás előrejelző a diszpécser azon része, amely egyre kritikusabb, minél magasabb a szuperskaláris processzor. Egyes utasításoknak két lehetséges kimenetele lehet, amelyek mindegyike különböző következő utasításokhoz vezet. Egy egyszerű példa egy „if” utasítás. "Ha ez igaz, tedd ezt, ellenkező esetben tedd ezt a másik dolgot." Az elágazás-előrejelző megkísérli megjósolni egy elágazási művelet eredményét. Ezután előre ütemezi és végrehajtja az utasításokat, követve azt, amit valószínűnek vél.
A modern elágazás-előrejelzőkben sok összetett logika található, amelyek 98%-os nagyságrendű ág-előrejelzési sikerarányt eredményezhetnek. A helyes előrejelzés megtakarítja azt az időt, amit elvesztegethetett volna a tényleges eredményre várva, a hibás előrejelzés megköveteli, hogy a megjósolt az utasításokat és azok eredményeit el kell dobni, és a valódi utasításokat kell futtatni helyettük, ami enyhe büntetéssel jár, ha csak várt. Így a nagy előrejelzésű sikerarányok észrevehetően növelhetik a teljesítményt.
Következtetés
Egy számítógépes processzor akkor tekinthető szuperskalárisnak, ha órajelenként egynél több utasítást tud végrehajtani. A korai számítógépek teljesen szekvenciálisak voltak, és egyszerre csak egy utasítást futtattak. Ez azt jelentette, hogy minden utasítás végrehajtása egynél több ciklust vett igénybe, így ezek a processzorok szubskalárisak voltak. Egy alapfolyamat, amely lehetővé teszi a szakasz-specifikus hardver használatát az utasítások minden szakaszában, legfeljebb egy utasítást tud végrehajtani órajelenként, ezáltal skaláris.
Meg kell jegyezni, hogy egyetlen óraciklus alatt egyetlen egyedi utasítás sem kerül feldolgozásra. Még mindig legalább öt ciklust vesz igénybe. Egyszerre azonban több utasítás is készülhet. Ez ciklusonként egy vagy több befejezett utasítás átvitelét teszi lehetővé.
A Superscalar nem tévesztendő össze a hiperskálával, amely azokra a vállalatokra vonatkozik, amelyek hiperskálás számítási erőforrásokat kínálnak. A hiperskálás számítástechnika magában foglalja a hardvererőforrások, például a számítási, memória, hálózati sávszélesség és tárhely zökkenőmentes méretezését az igényeknek megfelelően. Ez jellemzően nagy adatközpontokban és felhőalapú számítástechnikai környezetekben fordul elő.