| 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: 3819