Mikroarchitektúra
A számítástechnikában a mikroarchitektúra (néha rövidítve µarch vagy uarch) egy számítógép, központi feldolgozó egység vagy digitális jelfeldolgozó processzor elektromos áramkörének olyan leírása, amely elegendő a hardver működésének teljes leírásához.
A tudósok a "számítógép-szervezés" kifejezést használják, míg a számítógépiparban dolgozók gyakrabban használják a "mikroarchitektúra" kifejezést. A mikroarchitektúra és az utasításkészlet-architektúra (ISA) együttesen alkotják a számítógép-architektúra területét.
A kifejezés eredete
A számítógépek már az 1950-es évek óta használják a vezérlési logika mikroprogramozását. A CPU dekódolja az utasításokat, és tranzisztoros kapcsolók segítségével jeleket küld a megfelelő útvonalakon. A mikroprogramszavakban lévő bitek az elektromos jelek szintjén vezérelték a processzort.
A mikroarchitektúra kifejezést a mikroprogram szavak által vezérelt egységek leírására használták, ellentétben a mikroarchitektúra kifejezéssel: "architektúra", amely a programozók számára látható és dokumentált volt. Míg az architektúrának általában kompatibilisnek kellett lennie a hardvergenerációk között, addig az alapul szolgáló mikroarchitektúra könnyen megváltoztatható volt.
Kapcsolat az utasításkészlet-architektúrával
A mikroarchitektúra kapcsolódik az utasításkészlet-architektúrához, de nem azonos azzal. Az utasításkészlet-architektúra közel áll a processzor programozási modelljéhez, ahogyan azt egy assembly nyelven programozó vagy fordítóprogramozó látja, amely magában foglalja a végrehajtási modellt, a processzor regisztereit, a memóriacímzési módokat, a cím- és adatformátumokat stb. A mikroarchitektúra (vagy számítógép-szervezés) főként alacsonyabb szintű struktúra, és ezért számos olyan részletet kezel, amelyek a programozási modellben rejtve maradnak. Leírja a processzor belső részeit, és azt, hogy ezek hogyan működnek együtt az architektúra specifikáció megvalósítása érdekében.
A mikroarchitektúra elemei lehetnek az egyes logikai kapuktól kezdve a regisztereken, keresőtáblákon, multiplexereken, számlálókon stb. át a teljes ALU-kig, FPU-kig és még nagyobb elemekig. Az elektronikus áramkörök szintje viszont felosztható tranzisztorszintű részletekre, például arra, hogy milyen alapvető kapuépítési struktúrákat használnak, és milyen logikai megvalósítási típusokat (statikus/dinamikus, fázisok száma stb.) választanak, a ténylegesen használt logikai tervezés mellett építették fel őket.
Néhány fontos pont:
- Egyetlen mikroarchitektúra, különösen ha mikrokódot tartalmaz, a vezérlőtároló megváltoztatásával számos különböző utasításkészlet megvalósítására használható. Ez azonban meglehetősen bonyolult lehet, még akkor is, ha a mikrokód és/vagy a ROM-ok vagy PLA-k táblázati struktúrái egyszerűsítik.
- Két gép rendelkezhet ugyanazzal a mikroarchitektúrával, tehát ugyanazzal a blokkdiagrammal, de teljesen eltérő hardveres megvalósítással. Ez mind az elektronikus áramkörök szintjét, mind pedig a gyártás fizikai szintjét (mind az IC-k és/vagy a diszkrét alkatrészek szintjét) kezeli.
- A különböző mikroarchitektúrájú gépek azonos utasításkészlet-architektúrával rendelkezhetnek, és így mindkettő képes ugyanazokat a programokat végrehajtani. Az új mikroarchitektúrák és/vagy áramköri megoldások, valamint a félvezetőgyártásban elért fejlődés teszi lehetővé, hogy a processzorok újabb generációi nagyobb teljesítményt érjenek el.
Egyszerűsített leírások
Egy nagyon leegyszerűsített, magas szintű leírás - amely a marketingben gyakori - csak meglehetősen alapvető jellemzőket mutathat, mint például a buszszélesség, a különböző típusú végrehajtó egységek és más nagy rendszerek, mint például az elágazás-előrejelzés és a gyorsítótár-memóriák, egyszerű blokkokként ábrázolva - esetleg néhány fontos attribútum vagy jellemző megjelölésével. Néha a csővezeték szerkezetére vonatkozó néhány részletet (mint például a lekérdezés, dekódolás, hozzárendelés, végrehajtás, visszaírás) is tartalmazhat.
A mikroarchitektúra szempontjai
A csővezetékes adatútvonal a mikroarchitektúrában ma leggyakrabban használt adatútvonal-tervezés. Ezt a technikát a legtöbb modern mikroprocesszorban, mikrokontrollerben és DSP-ben használják. A pipelined architektúra lehetővé teszi, hogy több utasítás végrehajtása átfedje egymást, hasonlóan a futószalaghoz. A csővezeték több különböző szakaszt tartalmaz, amelyek alapvető fontosságúak a mikroarchitektúra-tervezésben. E szakaszok közé tartozik az utasításbehívás, az utasításdekódolás, a végrehajtás és a visszaírás. Egyes architektúrák más szakaszokat is tartalmaznak, mint például a memória-hozzáférés. A pipeline-ok tervezése az egyik központi mikroarchitektúra-fejlesztési feladat.
A mikroarchitektúra szempontjából a végrehajtóegységek szintén alapvető fontosságúak. A végrehajtó egységek közé tartoznak az aritmetikai logikai egységek (ALU), a lebegőpontos egységek (FPU), a betöltő/tároló egységek és az elágazás-előrejelzés. Ezek az egységek végzik a processzor műveleteit vagy számításait. A végrehajtó egységek számának, késleltetési idejének és átviteli teljesítményének megválasztása fontos mikroarchitektúra-tervezési feladat. A rendszeren belüli memóriák mérete, késleltetése, áteresztőképessége és összekapcsolhatósága szintén mikroarchitektúrális döntések.
Az olyan rendszerszintű tervezési döntések, mint például a perifériák, például a memóriavezérlők beépítése, a mikroarchitektúra tervezési folyamat részének tekinthetők. Ez magában foglalja a perifériák teljesítményszintjére és csatlakoztathatóságára vonatkozó döntéseket is.
Ellentétben az architekturális tervezéssel, ahol egy adott teljesítményszint a fő cél, a mikroarchitekturális tervezés nagyobb figyelmet fordít más korlátozásokra. Figyelmet kell fordítani olyan kérdésekre, mint például:
- Chip terület/költség.
- Energiafogyasztás.
- Logikai komplexitás.
- Könnyű csatlakoztathatóság.
- Gyárthatóság.
- Könnyű hibakeresés.
- Vizsgálhatóság.
Mikro-architektúra koncepciók
Általánosságban elmondható, hogy minden CPU, egychipes mikroprocesszor vagy többchipes megvalósítás a következő lépések végrehajtásával futtatja a programokat:
- Olvasson el egy utasítást és dekódolja azt.
- Keressen meg minden olyan kapcsolódó adatot, amely az utasítás feldolgozásához szükséges.
- Az utasítás feldolgozása.
- Írja ki az eredményeket.
Ezt az egyszerűnek tűnő lépéssorozatot bonyolítja az a tény, hogy a memóriahierarchia, amely magában foglalja a gyorsítótárazást, a főmemóriát és a nem-illékony tárolókat, mint például a merevlemezeket (ahol a programutasítások és az adatok vannak), mindig is lassabb volt, mint maga a processzor. A (2) lépés gyakran késedelmet okoz (a CPU kifejezéssel élve gyakran "elakadásnak" nevezik), amíg az adatok megérkeznek a számítógép buszán. Nagy mennyiségű kutatást fektettek olyan tervezésekbe, amelyek a lehető legnagyobb mértékben elkerülik ezeket a késleltetéseket. Az évek során az egyik központi tervezési cél az volt, hogy több utasítást párhuzamosan hajtsanak végre, így növelve a program tényleges végrehajtási sebességét. Ezek az erőfeszítések bonyolult logikai és áramköri struktúrákat vezettek be. A múltban az ilyen technikákat csak drága nagyszámítógépeken vagy szuperszámítógépeken lehetett megvalósítani az ehhez szükséges áramkörök mennyisége miatt. A félvezetőgyártás fejlődésével egyre több ilyen technikát lehetett egyetlen félvezető chipen megvalósítani.
A következőkben áttekintjük a modern CPU-kban elterjedt mikro-architekturális technikákat.
Az utasításkészlet kiválasztása
A nagy teljesítményű eszközök megvalósításának összetettségét nagyban befolyásolja annak kiválasztása, hogy milyen utasításkészlet-architektúrát használjunk. Az évek során a számítógéptervezők mindent megtettek az utasításkészletek egyszerűsítése érdekében, hogy lehetővé tegyék a nagyobb teljesítményű megvalósításokat, mivel a tervezők erőfeszítéseit és idejét a teljesítményt javító funkciókra, nem pedig az utasításkészlet összetettségére pazarolták.
Az utasításkészlet-tervezés a CISC, RISC, VLIW, EPIC típusoktól kezdve fejlődött. Az adatpárhuzamossággal foglalkozó architektúrák közé tartozik a SIMD és a vektorok.
Utasítás pipelining
Az egyik első és leghatékonyabb teljesítménynövelő technika az utasításcsővezeték használata. A korai processzortervek a fenti lépések mindegyikét elvégezték egy utasításon, mielőtt a következőre léptek volna. A processzor áramkörének nagy részei egy-egy lépésnél üresen maradtak; például az utasításdekódoló áramkör üresen maradt a végrehajtás alatt, és így tovább.
A pipeline-ok javítják a teljesítményt, mivel lehetővé teszik, hogy számos utasítás egyszerre haladjon végig a processzoron. Ugyanebben az alapvető példában a processzor egy új utasítás dekódolásába (1. lépés) kezdene, miközben az előző utasítás eredményére vár. Ez lehetővé tenné, hogy egyszerre akár négy utasítás is "repüljön", így a processzor négyszer gyorsabbnak tűnne. Bár bármelyik utasítás ugyanolyan sokáig tart (még mindig négy lépés van), a CPU egésze sokkal gyorsabban "visszavonja" az utasításokat, és sokkal magasabb órajelen futhat.
Cache
A chipgyártás fejlődése lehetővé tette, hogy több áramkört helyezzenek el ugyanazon a chipen, és a tervezők elkezdték keresni a felhasználási módokat. Az egyik leggyakoribb módszer az volt, hogy egyre nagyobb mennyiségű gyorsítótárat építettek be a chipbe. A gyorsítótár egy nagyon gyors memória, olyan memória, amelyhez néhány ciklus alatt lehet hozzáférni, szemben azzal, ami a főmemóriával való beszélgetéshez szükséges. A CPU tartalmaz egy gyorsítótár-vezérlőt, amely automatizálja a gyorsítótárból való olvasást és írást, ha az adat már a gyorsítótárban van, akkor egyszerűen "megjelenik", míg ha nincs, akkor a processzor "leáll", amíg a gyorsítótár-vezérlő beolvassa.
A RISC-tervek az 1980-as évek közepén-végén kezdtek gyorsítótárat beépíteni, gyakran csak 4 KB-ot. Ez a szám idővel nőtt, és a tipikus CPU-k ma már körülbelül 512 KB-nyi, míg a nagyobb teljesítményű CPU-k 1 vagy 2, sőt 4, 6, 8 vagy 12 MB-os memóriahierarchiával rendelkeznek, többszintű memóriahierarchiába szervezve. Általánosságban elmondható, hogy a több gyorsítótár nagyobb sebességet jelent.
A gyorsítótárak és a csővezetékek tökéletesen illeszkedtek egymáshoz. Korábban nem sok értelme volt olyan csővezetéket építeni, amely gyorsabban tudott futni, mint a chipen kívüli készpénzmemória hozzáférési késleltetése. A lapkán belüli gyorsítótár-memória használata ehelyett azt jelentette, hogy egy csővezeték a gyorsítótár-hozzáférési késleltetés sebességével, sokkal kisebb időtartamban futhatott. Ez lehetővé tette, hogy a processzorok működési frekvenciája sokkal gyorsabban növekedjen, mint a chipen kívüli memóriaé.
Elágazás-előrejelzés és spekulatív végrehajtás
A csővezeték leállása és az elágazások miatti elhalasztások a két fő dolog, ami megakadályozza a nagyobb teljesítmény elérését az utasításszintű párhuzamosság révén. Attól az időponttól kezdve, hogy a processzor utasításdekódolója megállapította, hogy feltételes elágazási utasítással találkozott, addig az időpontig, amikor a döntő ugró regiszterérték kiolvasható, a csővezeték több cikluson keresztül is elakadhat. Átlagosan minden ötödik végrehajtott utasítás elágazás, tehát ez igen nagy mennyiségű időhúzás. Ha az elágazás megtörténik, akkor még rosszabb a helyzet, mivel ekkor a csővezetékben lévő összes további utasítást ki kell üríteni.
Az elágazási büntetések csökkentésére olyan technikákat használnak, mint az elágazás-előrejelzés és a spekulatív végrehajtás. Az elágazás-előrejelzés során a hardver megalapozott becsléseket tesz arra vonatkozóan, hogy egy adott elágazás végrehajtásra kerül-e. A találgatás lehetővé teszi a hardver számára, hogy a regiszterolvasásra való várakozás nélkül előhívja az utasításokat. A spekulatív végrehajtás egy további fejlesztés, amelynek során a kódot a megjósolt útvonal mentén hajtják végre, mielőtt kiderülne, hogy az elágazást meg kell-e tenni vagy sem.
Sorrenden kívüli végrehajtás
A gyorsítótárak hozzáadása csökkenti a főmemória-hierarchiából való adatlekérdezésre való várakozás miatti leállások gyakoriságát vagy időtartamát, de nem szünteti meg teljesen ezeket a leállásokat. A korai tervekben a gyorsítótár kihagyása arra kényszerítette a gyorsítótár-vezérlőt, hogy leállítsa a processzort és várakozzon. Természetesen lehet, hogy a programban van más olyan utasítás, amelynek adatai a gyorsítótárban elérhetőek az adott pillanatban. A sorrenden kívüli végrehajtás lehetővé teszi a kész utasítás feldolgozását, míg egy régebbi utasítás a gyorsítótárban várakozik, majd újrarendezi az eredményeket, hogy úgy tűnjön, minden a programozott sorrendben történt.
Szuperskalár
Még a fent vázolt koncepciók támogatásához szükséges bonyolultabb és bonyolultabb kapuk ellenére is, a félvezetőgyártás fejlődése hamarosan még több logikai kapu használatát tette lehetővé.
A fenti vázlatban a processzor egyszerre egyetlen utasítás egyes részeit dolgozza fel. A számítógépes programokat gyorsabban lehetne végrehajtani, ha egyszerre több utasítást dolgoznának fel. Ezt a szuperskalár processzorok a funkcionális egységek, például az ALU-k megismétlésével érik el. A funkcionális egységek megismétlése csak akkor vált lehetővé, amikor az egyutas processzor integrált áramkörének (néha "die"-nek nevezett) területe már nem feszegette a megbízhatóan gyártható egységek határait. Az 1980-as évek végére kezdtek megjelenni a piacon a szuperskalár konstrukciók.
A modern konstrukciókban általában két betöltőegység, egy tárolóegység (sok utasításnak nincs tárolandó eredménye), két vagy több egész számítási egység, két vagy több lebegőpontos egység és gyakran valamilyen SIMD egység található. Az utasításkiadási logika azzal válik egyre bonyolultabbá, hogy az utasítások hatalmas listáját olvassa be a memóriából, és átadja azokat az éppen üresjáratban lévő különböző végrehajtó egységeknek. Az eredményeket aztán a végén összegyűjtik és újrarendezik.
Regiszter átnevezése
A regiszterek átnevezése egy olyan technikára utal, amelyet a programutasítások szükségtelen soros végrehajtásának elkerülésére használnak, mivel ezek az utasítások ugyanazokat a regisztereket használják újra. Tegyük fel, hogy olyan utasításcsoportok vannak, amelyek ugyanazt a regisztert használják, az egyik utasításkészletet hajtjuk végre először, hogy a regisztert a másik készletnek hagyjuk, de ha a másik készlet egy másik hasonló regiszterhez van rendelve, mindkét utasításkészlet párhuzamosan végrehajtható.
Többszálú feldolgozás és többszálú feldolgozás
A CPU működési frekvenciája és a DRAM-hozzáférési idő közötti egyre növekvő különbség miatt az utasításszintű párhuzamosságot (ILP) egy programon belül fokozó technikák egyike sem tudta leküzdeni a hosszú leállásokat (késleltetéseket), amelyek akkor jelentkeztek, amikor az adatokat a főmemóriából kellett lehívni. Ráadásul a fejlettebb ILP-technikákhoz szükséges nagy tranzisztorszám és magas működési frekvenciák olyan teljesítményleadási szinteket igényeltek, amelyeket már nem lehetett olcsón hűteni. Ezen okok miatt a számítógépek újabb generációi elkezdték használni a párhuzamosság magasabb szintjeit, amelyek egy programon vagy programszálon kívül léteznek.
Ezt a tendenciát néha "átviteli számításnak" is nevezik. Ez az elképzelés a mainframe-piacról származik, ahol az online tranzakciófeldolgozás nem csupán egy tranzakció végrehajtási sebességét, hanem a nagyszámú tranzakció egyidejű feldolgozásának képességét is hangsúlyozta. A tranzakcióalapú alkalmazások, például a hálózati útválasztás és a weboldalak kiszolgálása az elmúlt évtizedben nagymértékben megnőtt, ezért a számítógépipar ismét hangsúlyt fektetett a kapacitás és az áteresztőképesség kérdésére.
A párhuzamosság egyik technikája a többprocesszoros rendszerek, azaz a több CPU-val rendelkező számítógépes rendszerek. A múltban ez a nagy teljesítményű nagyszámítógépek számára volt fenntartva, de mostanra a kis méretű (2-8) többprocesszoros szerverek általánossá váltak a kisvállalati piacon. A nagyvállalatok számára a nagyméretű (16-256) többprocesszoros szerverek a jellemzőek. Az 1990-es évektől kezdve még a több CPU-val rendelkező személyi számítógépek is megjelentek.
A félvezető technológia fejlődése csökkentette a tranzisztorok méretét; megjelentek a többmagos CPU-k, ahol több CPU-t valósítanak meg ugyanazon a szilíciumchipen. Kezdetben a beágyazott piacokat célzó chipekben használták, ahol az egyszerűbb és kisebb CPU-k lehetővé tették, hogy több példányban is elférjenek egy szilíciumdarabon. 2005-re a félvezető technológia lehetővé tette, hogy a kettős, csúcskategóriás asztali CPU-k CMP-chipek sorozatban gyárthatók legyenek. Egyes tervek, mint például az UltraSPARC T1, egyszerűbb (skalár, in-order) terveket használtak annak érdekében, hogy több processzor férjen el egy darab szilíciumon.
Az utóbbi időben egy másik technika, amely egyre népszerűbbé vált, a többszálúság. A többszálú feldolgozás során, amikor a processzornak adatokat kell lekérnie a lassú rendszermemóriából, ahelyett, hogy várakozna az adatok megérkezésére, a processzor átvált egy másik programra vagy programszálra, amely már készen áll a végrehajtásra. Ez ugyan nem gyorsítja fel az adott programot/szálat, de növeli a rendszer általános teljesítményét, mivel csökkenti a CPU üresjárati idejét.
Fogalmilag a többszálú futás az operációs rendszer szintjén a kontextusváltással egyenértékű. A különbség az, hogy egy többszálú CPU egy szálváltást egyetlen CPU-ciklus alatt tud végrehajtani, ahelyett, hogy a kontextusváltáshoz általában több száz vagy ezer CPU-ciklusra lenne szükség. Ezt úgy érjük el, hogy minden egyes aktív szál számára megismételjük az állapothardvert (például a regiszterfájlt és a programszámlálót).
További fejlesztés az egyidejű többszálú futás. Ez a technika lehetővé teszi a szuperskalár CPU-k számára, hogy különböző programok/szálak utasításait egyidejűleg, ugyanabban a ciklusban hajtsák végre.
Kapcsolódó oldalak
- Mikroprocesszor
- Mikrokontroller
- Többmagos processzor
- Digitális jelfeldolgozó processzor
- CPU tervezés
- Datapath
- utasításszintű párhuzamosság (ILP)
Kérdések és válaszok
K: Mi az a mikroarchitektúra?
V: A mikroarchitektúra egy számítógép, központi feldolgozó egység vagy digitális jelfeldolgozó processzor elektromos áramkörének olyan leírása, amely elegendő a hardver működésének teljes körű leírásához.
K: Hogyan hivatkoznak a tudósok erre a fogalomra?
V: A tudósok a "számítógép-szervezés" kifejezést használják, amikor a mikroarchitektúrára utalnak.
K: Hogyan hivatkoznak erre a fogalomra a számítógépiparban dolgozók?
V: A számítógépiparban dolgozók gyakrabban használják a "mikroarchitektúra" kifejezést, amikor erre a fogalomra utalnak.
K: Melyik két terület alkotja a számítógép-architektúrát?
V: A mikroarchitektúra és az utasításkészlet-architektúra (ISA) együttesen alkotják a számítógép-architektúra területét.
K: Mit jelent az ISA?
V: Az ISA az utasításkészlet-architektúra rövidítése.
K: Mit jelent a µarch? V: A µArch a mikroarchitektúra rövidítése.