right|bélyegkép|320px|Intel 80286 mikroarchitektúra. right|bélyegkép|250px|Intel Core mikroarchitektúra. Az informatikában a mikroarchitektúrával teljesen leírható egy számítógép, központi egység, vagy digitális jelfeldolgozó elektromos áramkör kapcsolási sémája hardver-alapú működése. Tudományos körökben a számítógép-szervezet kifejezést használják, míg a számítógépiparban a mikroarchitektúra kifejezést használják gyakrabban. Mikroarchitektúra és utasításkészlet (ISA) együtt alkotják a számítógép-architektúra területét.
A kifejezés etimológiája
Az 1950-es évek óta sok számítógép használt mikroprogramot vezérlőlogikájuk megvalósítására, ami dekódolta a programutasításokat és végrehajtotta őket. A mikroprogram kódján belüli bitek irányították a processzort az elektromos jelek szintjén. A mikroarchitektúra kifejezést arra használták, hogy leírja azokat az egységeket, amiket a mikroprogram kódjai irányítottak, szemben az architektúrával ami látható volt és dokumentált a programozóknak. Bár az architektúráknak általában kompatibilisnek kell lenniük a különböző hardvernemzedékekkel, a mögöttes mikroarchitektúrát azonban könnyen meg lehet változtathatni.
Utasításkészlet-architektúrával való kapcsolata A mikroarchitektúra különbözik egy számítógép utasításkészletétől. Az utasításkészlet egy olyan számoló rendszernek az elvont képe, ami látható egy gépi kódot (vagy assembly nyelvet) programozó számára, beleértve az utasításkészletet, memóriacímmódokat, regisztereket, cím- és adatformátumokat. A mikroarchitektúra egy alacsonyabb szint, konkrétabban írja le a rendszert az ISA-nál. Ezen a szinten mutatkoznak meg a rendszer alkatrészei is, hogyan kapcsolódnak össze egymással, valamint miképp működnek együtt, hogy megvalósítsák az architektúra részletes leírását.
bélyegkép|Egysínes szervezésű mikroarchitektúra vázlata Különböző gépeknek lehet ugyanaz az utasításkészletük, ezáltal képesek ugyanazon programok futtatására, pedig különböző a mikroarchitektúrájuk. Ezek a különböző architektúrák (a félvezetőgyártás technológiájában való haladással egyetemben) azok, amik megengedik a processzorok újabb nemzedékeinek, hogy magasabb teljesítményt érjenek el az előző generációkkal összehasonlítva. Elméletben egyetlen mikroarchitektúrát (különösen ha ez mikrokódot tartalmaz) arra tudták használni, hogy megvalósítson 2 különböző utasításkészletet azáltal, hogy programoz 2 különböző vezérlő tárolót.
Egy gép mikroarchitektúrája általában egy olyan blokkdiagramnak tüntethető fel, ami leírja a regiszterek összekötéseit, buszokat, és a gép funkcionális blokkjait. Ez a leírás tartalmazza a végrehajtási egységek számát, a végrehajtási egység fajtáját (mint például lebegőpontos, egész szám, elágazás jövendölés, egyetlen utasítás, többszörös adatok (SIMD), a futószalag (pipeline) természete, ami tartalmazhat olyan fokozatokat, mint utasításhívás, -dekódolás, -kijelölés, -végrehajtás, -befejezés, mindezt egy nagyon egyszerű futószalagon), a gyorsítótár kialakítása (1., 2. szintű), és a perifériák támogatása.
A tényleges alapáramkör-alaprajz, hardverszerkezet, összecsomagoló, és más fizikai részleteket, a mikroarchitektúra implementációjának nevezik. Két gépnek lehet ugyanaz a mikroarchitektúrája, és ezáltal ugyanaz a blokkdiagramjuk, de különböző hardverimplementációt tartalmaznak.
A mikroachitektúra aspektusai left|bélyegkép|250px|Intel 80286 mikroarchitektúra
A futószalagos adatösvény a leggyakrabban használt tervezési mód a jelenlegi mikroarchitektúrákban. Ezt a technikát a legtöbb modern mikroprocesszorban, mikrovezérlőben és DSP-ben használják. A futószalagos architektúra lehetővé teszi, hogy több utasítás átfedje egymást végrehajtás közben, kb. úgy mint egy összeszerelő szalagon. A futószalag (feldolgozási állapotok egymásutánja) több különböző állomást is magába foglal, amelyek alapvetőek a mikroarchitekturális tervezésben. Néhány állomás tartalmaz olyan műveleteket is, mint az utasításhívás, utasításdekódolás, -végrehajtás és -visszaírás. Néhány architektúra olyan állomást is tartalmaz, mint például memóriahozzáférés. A futószalagok tervezése az egyik központi mikroarchitekturális feladat.
A végrehajtási egységek is alapvetőek a mikroarchitektúrához. A végrehajtási egységek tartalmazzák az aritmetikai logikai egységeket (ALU), lebegőpontos egységeket (FPU), a töltő/tároló egységeket, az elágazás-előrejelzéseket és SIMD-t. Ezek az egységek hajtják végre a műveleteket vagy a processzor kalkulációit. A végrehajtási egységek számának megválasztása, késleltetése (látenciája) és teljesítménye az egyik központi mikroachitekturális tervezési feladat. A memóriák mérete, látenciája, teljesítménye és összekapcsolhatóságuk a rendszeren belül is a mikroachitekturális döntések egyike.
A rendszerszintű tervezési döntések, mint például hogy legyenek vagy ne legyenek perifériák, értve itt memóriavezérlőket például, ugyancsak a mikroarchitekturális tervezési folyamat részének tekinthető. Ideértjük a teljesítményszintű döntéseket és ezeknek a perifériáknak az összekapcsolhatóságát.
Eltérően az architekturális tervezéstől, ahol egy bizonyos teljesítményszint elérése a fő cél, a mikroarchitekturális tervezés nagyobb figyelmet szentel az egyéb megszorításoknak. Minthogy a mikroarchitekturális tervezési döntések közvetlen befolyásolják, mi kerül a rendszerbe, a következő témáknak kell figyelmet szentelni:
csipterület / költség energiafogyasztás logikai összetettség kapcsolódás egyszerűsége gyárthatóság kérdése debuggolás egyszerűsége tesztelhetőség
Mikroarchitekturális fogalmak Utasítás-végrehajtási ciklus Általánosságban minden CPU, egymagos mikroprocesszor vagy többmagos megvalósítás a következő lépések végrehajtásával futtatja a programokat: beolvas egy utasítást és dekódolja megtalál minden kapcsolódó adatot, ami az utasítás végrehajtásához szükséges feldolgozza az utasítást kiírja az eredményt Az utasításciklus folytonosan ismétlődik, amíg a tápfeszültséget ki nem kapcsolják.
A végrehajtás sebessége Az egyszerűnek tűnő lépéssorozatot komplikálja az a tény, hogy a memóriahierarchia, amely magában foglalja a gyorsítótárat, a fő memóriát és a nemfelejtő tárolási egységeket, mint például a merevlemezeket (ahol a programutasítások és adatok vannak), mindig is lassabb volt, mint maga a processzor.
A (2) Lépés gyakran egy hosszas (CPU szempontból nézve) késést jelent, amíg az adat megérkezik a buszon keresztül. Jelentős mennyiségű kutatást fektettek olyan tervezésekbe, amelyek kikerülik ezeket a késéseket, amennyire csak lehetséges. Az évek alatt az egyik központi cél az volt, hogy minél több utasítást hajtsanak végre párhuzamosan, így növelve a program effektív végrehajtásának sebességét. Ezek a törekvések bevezették a komplikált logikai és áramköri struktúrákat. Kezdetben ezeket a technikákat csak drága mainframe-eken vagy szuperkomputereken lehetett kivitelezni, köszönhetően a technikához szükséges áramkörök mennyiségének.
Ahogy a félvezetőgyártás fejlődött mind több és több ilyen technika vált kivitelezhetővé az egymagos processzorokon.
Lásd a CPU cikket a műveleti alapok részletesebb leírásához. Lásd az általános célú CPU-k történelme cikket a CPU fejlesztések történelmének részletesebb leírásához. A következőkben azokat a mikroarchitekturális technikákat vizsgáljuk meg, amelyek közösek a mai modern CPU-kban.
Utasításkészlet-választás Annak megválasztása, hogy milyen utasításkészleti architektúrát alkalmazunk, jelentősen befolyásolja a magas teljesítményű eszközök kivitelezésének komplexitását.
Az évek alatt a számítógépmérnökök igyekeztek leegyszerűsíteni az utasításkészleteket, a tervezők inkább olyan szempontok fejlesztésére fordították az időt és energiát, amelyek a teljesítményt növelik, ahelyett hogy az utasításkészletekben rejlő komplexitásra törekedtek volna. Az utasításkészletben, tehát a hardverben realizált fejlesztések a felszínen az alkalmazások nagyobb teljesítményében jelentkeztek.
Az utasításkészletek tervezése több különböző elv szerint, a CISC, RISC, VLIW, EPIC típusokon keresztül fejlődött. Az adatok párhuzamosságával foglalkozó architektúrák tartalmazzák a SIMD-et és Vectorokat is.
Utasítás-futószalag (pipeline)
Az egyik legelső és legerősebb technika a teljesítmény javításában az utasítás-futószalagok alkalmazása. A kezdeti processzorterveknél a fent említett összes lépés végrehajtásra került minden egyes utasításnál, mielőtt az a következő utasításra lépett volna. Az áramkörök nagy része kihasználatlanul maradt bármely egyes lépésnél, például az utasításdekódoló áramkör tétlen maradt a végrehajtási fázis közben, és így tovább.
A futószalagok növelik a teljesítményt azáltal, hogy lehetővé teszik több utasítás párhuzamos végrehajtását a processzorban. Ugyanazt a fenti alappéldát nézve, a processzor elkezdené egy új utasítás dekódolását (1. lépés), míg az utolsó még az eredményre vár. Ez lehetővé teszi, hogy 4 utasítás legyen „repülés közben” ugyanabban az időben, ezáltal a processzor 4-szer olyan gyorsnak tűnik. Bár egy utasítás végrehajtása ugyanannyi időt vesz igénybe (még mindig 4 lépésből áll), a CPU egészét tekintve sokkal gyorsabban „fekteti el” az utasításokat és sokkal magasabb órajelen futtatható.
A RISC elv lerövidíti a futószalagokat, és megalkotásukat sokkal egyszerűbbé teszi azáltal, hogy egyértelműen különválasztja az utasítás-eljárások egyes fázisait, azok ugyanannyi időt igényelnek – egy ciklust. A processzor egészét nézve úgy működik, mintha egy szerelőszalag lenne, az utasítások bejönnek az egyik oldalról, és az eredmények távoznak a másik oldalon. A klasszikus RISC futószalag (pipeline) csökkentett komplexitása miatt, maga a futószalag és ráadásul az utasítás-gyorsítótár is ráfér ugyanarra a lapkára, amely egyébként csak magára a magra férne rá egy CISC tervezés esetében. Ez volt az igazi oka annak, hogy a RISC gyorsabb volt. A kezdeti tervezések, úgy mint a SPARC és MIPS gyakran 10× gyorsabban futottak, mint az Intel és Motorola CISC megoldásai, ugyanolyan órajelen és áron.
A futószalagok persze egyáltalában nem korlátozódnak a RISC tervezésekre. 1986-ra a csúcskategóriás VAX (a 8800-as) egy nagymértékben futószalagos kialakítás volt, időben kissé megelőzve az első kereskedelmi MIPS és SPARC kialakításokat. A legtöbb modern CPU (még a beágyazott CPU-k is) mára futószalagosak, és a futószalag nélküli mikrokódolt CPU-kat a terület korlátozottabb beágyazott processzoroknak tekintik. Nagy CISC gépek, a VAX 8800-astól a modern Pentium 4-ig és Athlonig, mind készülnek mikrokóddal és futószalagokkal. A futószalag és a gyorsítótári technikában történt fejlesztések a két legnagyobb mikroarchitekturális előrelépés, amely lehetővé tette, hogy a processzorteljesítmények lépést tartsanak az áramköri technológiákkal, amelyen alapszanak.
Gyorsítótár (cache)
Nem sok idő telt el, hogy a csipgyártásban történő fejlesztések lehetővé tették: még több áramkört helyezzenek el a lapkán, és a tervezők elkezdtek utánanézni annak, miképpen lehetne ezt hasznosítani. Az egyik legkézenfekvőbb, hogy mind nagyobb mennyiségű gyorsítótár (cache) memóriát adjanak a lapkához. A gyorsítótár egyszerűen egy nagyon gyors memória, amely néhány ciklus alatt hozzáférhető a fő memória hozzáféréséhez szükséges sok-sok ciklushoz képest. A CPU tartalmaz egy gyorsítótár-vezérlőt (cache-kontrollert), amely automatizálja a gyorsítótár olvasását és írását, ha az adat már a gyorsítótárban van, akkor egyszerűen „megjelenik”, ha nem, a processzor „leállításra” kerül, amíg a gyorsítótár-vezérlő beolvassa.
RISC tervezéseknél az 1980-as évek közepétől-végétől kezdtek gyorsítótárat alkalmazni, gyakran összesen csak 4 bájtnyit. Ez a szám folyamatosan növekedett az elmúlt idő alatt, ma egy tipikus CPU kb. 512 KiB gyorsítótárral rendelkezik, míg erősebb processzorok 1–2 vagy akár 4–8 MiB-nyi gyorsítótárral is rendelkeznek, amelyeket többszintű memóriahierarchiába szerveznek. Általánosságban nézve több gyorsítótár nagyobb teljesítményt jelent.