Hirdetés
HyperThreading működés


- Az utasítás felhozása a Level-1 cache-ből (más néven Execution Trace Cache, a továbbiakban TC). Mindkét LP-nak van hozzáférése a TC-hez, azonban ha egyszerre kérnek adatot, akkor felváltva az egyik órajelre az egyik, második órajelre a másikhoz fordul a cache vezérlő. Ugyanakkor ha az egyik szál valamilyen okból várakozni kényszerül, a másik a TC teljes kapacitását kihasználhatja. Ez akkor működik, ha bent van az L1-ben a megfelelő kód, ekkor egyből az UOP Queue-val jelölt részhez érünk. A következő 2 pontban foglaltak csak akkor hajtódnak végre, ha az L1 cache-ben nincs benne az UOP (mikrokód, a végrehajtó egység számára közvetlenül értelmezhető utasítás).
- A branch prediction logic, tehát a feltételes ugrásokat megbecsülő egység részben megosztott a két LP között, részben közös, a megosztott részek maguk a "gondolkodó" egységek, míg az ún. global history array, azaz a megelőző utasításokat tartalmazó rész közös, mivel ez egy nagyméretű tároló, aminek a megosztása jelentős tranzisztorszám-növekedéssel járt volna.
- Az utasítás-dekódernek az IA-32 utasításkészletével nincs egyszerű dolga, hiszen a CISC felépítésből adódóan változó hosszúságú utasítások fordulnak elő. Általánosságban ezt az egységet akkor használja a processzor, ha a TC hibázott, mivel az sikeres cache találat esetén megadja a mikrokódot. Viszont ha mégsem, akkor a két szál egyidejűleg is fordulhat a dekóderhez, ez esetben egy dekóderen osztozik a két LP, azonban annak tárolnia kell mindkét LP által kezdeményezett utasításdekódolás állapotait, mivel ezek szükségesek ahhoz, hogy LP-váltás esetén is helyesen működjön a dekóder egység.
- Az UOP queue, azaz a mikrokódokat tartalmazó sor (futószalagként lehet elképzelni, mindig a végére rakjuk a következő utasítást, a végén meg leveszi a CPU) két részre osztott, mivel nem sok tranzisztort igényel, de biztosítja a fent megjelölt célok utolsó két követelményét.
- A soronkívüli végrehajtó egység (OOOEU ? Out-Of-Order-Execution Unit), amely képes az utasításokat az eredeti sorrendjüktől eltérő módon, sebességre optimalizálva végrehajtani, limitálja az adott LP-nek adható erőforrásokat olyan módon, hogyha mindkettő használja az OOOEU-t, akkor túlzott igények esetén várakoztatja az adott LP-t, de ha csak az egyik LP használja, akkor az összes erőforrást biztosítja számára. Az OOOEU lelke, az ütemező szintén limitálja a maximálisan lefoglalható tárolók számát, amelyekből a végrehajtó egységek kapják az adatot, azaz egyik szál sem sajátíthatja ki úgy a mag erőforrásait, hogy közben a másik szál is jelen van, ellenben kizárólag egy szál esetén gond nélkül működik a teljes kapacitás kihasználása.
- A végrehajtó egység lényegében a Hyperthreadingtől függetlenül működik, hiszen gyakorlatilag ugyanúgy végre kell hajtania a megfelelő műveleteket a megfelelő adatokkal. Az eredmények visszaírásáról (write-back) a speciális retirement logic gondoskodik, ami azért speciális, mert az architecture state-eket figyelve a megfelelő LP-be írja vissza a megfelelő eredményt.
Processzoron kívüli műveletek, események Hyperthreadinggel.
A memóriakezelés ? mint ahogy mindezekből kiderül ? nem különösebben problémás, mivel az ütemezők a végrehajtóegységnek store (tárolás) és load (betöltés) parancsokat adnak ki, amiket az gond nélkül végrehajt, a szálak pedig külön-külön "tudják", hogy melyek is az ő adataik a memóriában. A cache már problémásabb, mivel egyrészt a közös adatokhoz való hozzáférés lassítja a feldolgozást ("lelassul a cache", gyakorlatilag felére), másrészt pont ez a közös adattárolás ad lehetőséget olyan megoldásokra, mint például az, amikor az egyik LP lekéri a másik processzor számára szükséges adatot a cache-be, eközben a másik dolgozik, majd amikor szükség lesz az adatra, akkor szintén az egyik kiolvas, míg a másik dolgozik.
Egy- és többtaszkos üzemmódok: a Hyperthreading-gel rendelkező processzorok esetében három állapot létezik, ST0,ST1 és MT. Az első kettő az egytaszkos üzemmódot jelöli, attól függően, hogy melyik LP aktív, MP pedig mindkét LP aktív állapotát jelző multitaszkos működés.

A processzor három állapota
A váltás úgy történik, hogy az IA-32 architektúrában egy HALT utasítással leállítjuk az egyik logikai processzort, mely ha MT állapotban van, értelemszerűen "átadja" a vezérlést a másik LP-nek. Ha bármelyik LP ST állapotban van, akkor az LP-re érkező megszakításkérés MP állapotba helyezi a CPU-t. Ennek kihasználásához természetesen szükség van az operációs rendszer erős támogatására is, mivel mit sem ér az architektúra egy olyan rendszeren, ami nem váltogatja ST és MT állapotok között a processzort, másrészt a tervezett többszálúságra is szükség van.
A cikk még nem ért véget, kérlek, lapozz!



