kategória | ||||||||||
| ||||||||||
| ||
|
||||||||||
Utasítás várakoztatás II. (utasítás várakoztató pufferek megvalósítási alternatívái, operandus lehívási politikák, értékelésük)
Utasítás várakoztató pufferek megvalósításai:
858g64i 858g64i Várakoztató pufferek megvalósítása
A várakoztató 858g64i A várakoztató 858g64i Ki és bemeneti
pufferek típusa pufferek kapacitása kapuk száma
858g64i Csak várakoztató állomás 858g64i Kombinált pufferek
858g64i 858g64i 858g64i 858g64i várakoztatásra utasítás átrendezésre és
858g64i 858g64i 858g64i 858g64i regiszter átnevezésre is szolgál
Egyedi VÁ Csoportos VÁ Központi VÁ
Várakozó állomás (Csak várakoztató pufferek):
Egyedi: minden egyes végrehajtó egységnek saját puffere van
Példa: AMD K5, PowerPC 620 (ábra - 7.102)
Ráfordítás: nagy
Teljesítmény: az egyik pufferböl a másikba nem lehet utasításokat áttenni
Kapacitás: 2-4 hely
Csoport: az azonos típusú (pl. FX) VE-ek egy közös pufferböl táplálkoznak. Ehhez nyilván nagyobb pufferre van szükség. Ez a tendencia.
Példa: Pentium 4, Athlon, Opteron,
R10000 (ábra - 7.100): két buszon keresztül történik az utasítások kiküldése. Az egyik a fixpontoshoz, a másik a FP és gyökvonáshoz. Az FP osztás 20-40 ciklusig tart. Ez egy buszról táplálva, nem hoz érdemi teljesítménycsökkenést, mivel a FP utasítások aránya 10% még a müszaki programokban is.
Teljesítmény: bármelyik VE-be kerülhetnek a várakozó utasítások
Kapacitás: 8-20
Központi: Minden VE egyetlen pufferböl táplálkozik, ezért nagy kapacitásúra van szükség.
Példa: Pentium Pro, P2, P3 (ábra 7.105)
Pentium Pro: egy 20 elemü központi állomás szolgálja ki mind a 10 VE-t. Egy buszon keresztül lassú egységeket látnak el: +/ FP/*.
Ráfordítás: a pufferméret csökkenthetö az egyedihez képest. Nagyobb ráfordítású, de nem gyorsabb, mint a csoport típusú.
Teljesítmény: az FP VE nem tudja végrehajtani az FX-et, és fordítva
Kapacitás: 20 fölött
Kombinált pufferek
A várakoztatáson kívül egyéb funkciókat is ellát:
Operandusz lehívási politikák:
Kibocsátáshoz kötött operandus lehívás:
Azt jelenti, hogy a processzor az operandusokat az utasítások kibocsátásakor hívja le, vagyis akkor, amikor azok a dekódolás után bekerülnek a várakoztató pufferekbe. Ilyenkor ezek a forrás operandusok értékeit tárolják elsösorban. A processzor a kibocsátás során a forrás operandusok regisztereinek azonosítóját a regisztertárba továbbítja a hivatkozott operandusok behívása céljából. A várakozó állomásba bekerül a dekódolt müveleti kód, a célregiszterek azonosítói, valamint a behívott operandus értékek. A behívás során a processzornak ellenöriznie kell, hogy a hivatkozott regiszter értékek rendelkezésre állnak-e. Ha nem, akkor az azt jelenti, hogy egy már végrehajtás alatt álló utasítás célregisztere a hivatkozott forrásregiszter, vagyis a két utasítás között RAW adatfüggöség van (ahogy már korábban említettem, regiszterátnevezés és spekulatív elágazás kezelés mellett a processzornak a várakoztató pufferekben csupán a RAW függöségeket kell vizsgálnia). Az operandusok rendelkezésre állásának eldöntéséhez érvényességi biteket alkalmaznak (scoreboarding). Ennek során a regisztertárban minden regiszterhez egy további bitet rendelünk, mely érvényességi bitként funkcionál (V bit - valid bit). Egy utasítás kibocsátása során annak célregiszterének érvényességi bitjét a processzor mindig 0-ba állítja mindaddig, amíg az utasítás végrehajtása be nem fejezödik és az eredmény vissza nem íródik a regisztertárba. A várakozó állomásokban is elhelyeznek a forrásoperandusok mellé egy-egy ilyen érvényességi bitet. Amikor a processzor lehívja a forrás operandusok értékeit, ellenörzi, hogy a hozzájuk tartozó érvényességi bit a regisztertárban be van-e állítva. Ha igen, akkor a kiolvasott értéket beteszi a pufferben a megfelelö helyre és 1-es ír az operandus mellé érvényességi bitnek. Amennyiben nincs beállítva ez a bit, akkor a hivatkozott forrásregiszter azonosítóját írja be a pufferbe és mellette 0-s érvényességi bittel jelzi, hogy az adott érték egy regiszter azonosító és nem az operandus értéke.
Miután a vezérlöegység elvégezte a rá bízott müveletet, az elöállított eredménnyel frissíteni kell mind a regisztertárat, mind a várakoztató puffereket. Ekkor a célregiszter azonosítóját, mint asszociatív címet felhasználva elöbb kikeresi a regisztertár megfelelö helyét, majd a várakoztató pufferekben is frissíti azon forrás regiszter értékeket, ahol az érvényességi bit 0 és mellette a regiszter azonosító a most elöállított eredmény célregiszter azonosítójával egyezik meg.
Itt fontos megjegyezni, hogy a várakoztató pufferek frissítése globális müvelet, vagyis minden olyan várakoztató pufferbe továbbítani kell az eredményt, amelyben a létrehozott eredményre várakozó utasítások lehetnek.
Kiküldéshez kötött operandus lehívás:
Azt
jelenti, hogy a processzor a várakoztató pufferekbe a kibocsátás során csak a
forrás regiszterek azonosítóit teszi be és a konkrét értékeket csak akkor hívja
le, amikor az utasításokat a vezérlöegység felé kiküldi. Kiküldés során
fordul tehát csak a regisztertárhoz, így csak a regisztertárban szükséges
érvényességi biteket eltárolni. Amennyiben mindkét forrás operandus
érvényességi bitje
Értékelésük:
- A kiküldéshez kötött kibocsátás elönyösebb az idökritikus dekódolás/kibocsátási fázis szempontjából, mivel nem tartalmaz regiszterolvasást
- A kiküldéshez kötött lehívás esetén a VP-ek sokkal kisebb méretüek lehetnek, mivel a regiszterazonosítók lényegesen kevesebb helyet igényelnek
- A hivatkozott forrásoperandusok rendelkezésre állásának ellenörzése tekintetében a kibocsátáshoz kötött elönyösebb, mivel a VP-ben lévö érvényességi bitek értékeinek ellenörzése sokkal egyszerübb feladat,
- A kimenö kapuk számát tekintve bonyolultabb az összehasonlítás, általában a kiküldéshez kötött operandus behívási politika igényel kevesebb olvasási kaput
Találat: 2273