3. Futószalag architektúrák Flashcards
Futószalag (pipeline) végrehajtás
A futószalag (pipeline) végrehajtás lényege, hogy az utasítást több részre bontjuk (általában fetch, decode, execute, writeback), majd ezeket a részeket egymással párhuzamosan hajtjuk végre. Ez az időbeli párhuzamosság. Az utasítások n részre osztásával elméletileg a sebesség n-szeresére növekszik, ha minden rész azonos idő alatt hajtódik végre.
A végrehajtást gátolják a függőségek (adat, vezérlés, erőforrás), ezért a valóságban nem mindig arányos a fokozatok számának növelésével járó gyorsulás növekedés.
Maximális hatékonyság körülbelül 15-30 fokozatú futószalag esetén érhető el. Általános célú alkalmazásoknál efölött a függőségek miatt már csökken a teljesítmény. Speciális feladatok esetén, ahol kevés függőség van használható superpipeline CPU, ami akár 200 fokozatú is lehet.
Futószalag előfeltételei
2 fokozatú ideális futószalag esetén:
1. A számítógép 2 db egymástól teljesen független végrehajtó egységgel rendelkezik
2. Az egyik fokozat kimenete a másik fokozat bemenete kell legyen (időbeli párhuzamosság)
3. Mindkét fokozat végrehajtási ideje azonos
4. A fokozatok órajelre szinkronizáltak: órajelre kapják az inputot és egyetlen óraciklus alatt elvégzik a feladatukat
Ha ezek teljesülnek áll elő, hogy
t = T/2
ahol T a szekvenciális, t a futószalagos végrehajtási idő.
Függőségek kezelése
- Operandus előrehozással
- minden architektúránál használják
- Újrafeldolgozással
- leggyakrabban az Execute fokozat egymás utáni többszöri végrehajtását jelenti: például a szorzás összeadások sorozata, akkor ne töltsük be minden iterációban az eredményt, hanem használjuk újra fel
- a futószalag feldolgozást lassítja, de összességében jobb teljesítmény biztosít
Futószalag típusok
- Előlehívás (overlapping)
- Vektor CPU
- Teljes pipeline
(Futószalag típus)
Előlehívás
A visszaírással egyidőben történik a következő utasítás lehívása: (KÉP JEGYZETBEN)
Előnye:
- 1 óraciklust nyerünk -> 4 fokozat esetén 25%-kal nő a teljesítmény
- nincs függőség, mivel a forrás operandus beolvasásakor már megvan az előző utasítás eredménye
Hátrány:
- nem túl nagy gyorsítás
(Futószalag típus)
Vektor CPU
Csak az Execute fokozat működik futószalagszerűen, a végrehajtási fázisok kerültek átfedésbe.
(Futószalag típus)
Teljes pipeline
A futószalagos feldolgozás kiterjesztése a teljes folyamatra:
(KÉP JEGYZETBEN)
Logikai futószalagok
Az eltérő utasítások eltérő felépítésű futószalagokat igényelnek, ezért egy processzor több futószalagot is tartalmaz. A cél a funkcionális kialakítás. Példák különböző funkciókat ellátó futószalagokra:
- aritmetikai (FX, FP): fokozatai tipikusan F, DS/O, E, W/B
– egyszerű: +, -, léptetés
– összetett: *, /
- ugró (branch): fokozatai F, E
- LOAD/STORE
Az utasításokat két szinten értelmezhetjük:
Első szint: Fetch
Második szint: mikroutasítások szintjén
MAR -> PC – innen tudjuk honnan kell lehívni a következő utasítást
MDR -> [MAR] – MAR által mutatott címen lévő értéket töltjük be
IR -> MDR
PC -> PC+1
Fizikai megvalósítás
Alkalmazásuk alapján megkülönböztetünk:
- univerzális
- dedikált futószalagokat.
Az univerzális minden művelet elvégzésére alkalmas. De sok tranzisztorra van szükség hozzá, ezért a kialakítása bonyolult és drága, a végrehajtás lassú.
Dedikált futószalagokat szoktak a processzorokban alkalmazni. Egy dedikált futószalag egy adott műveletre specializált. Kevesebb logikai kaput igényelnek, így gyorsul a végrehajtás. Például Branch, LOAD/STORE, FX, FP futószalag.
A futószalag sebességét a leglassabb fokozat sebessége határozza meg, tehát tervezési cél a megközelítőleg azonos sebességű fokozatok létrehozása.
(Fizikai megvalósítás)
Fokozatok kialakítása
Minden fokozat előtt vannak elválasztó puffer regiszterek. Ezek a felhasználó számára nem látható regiszterek, az adat először ezekbe, majd innen a végrehajtó egységbe töltődik. Az utasítás elvégzése után a kimenet szintén puffer regiszterekbe kerül. Mivel a gyakorlatban egy fokozat nem mindig végez egy óraciklus alatt és addig nem töltődhet be adat míg nem végez a végrehajtó egység, ezért az adat ezekben a puffer regiszterekben tárolódik így orvosolva az eltérő végrehajtási időket.
(KÉP JEGYZETBEN)
Térbeli párhuzamosítás során, mikor egymás mellé több végrehajtó egységet helyeztek vezérlőjelek segítségével határozzák meg, hogy a puffer regiszterekből melyikbe töltődjön az adat:
(KÉP JEGYZETBEN)
RISC és CISC architektúrák
Az utasításkészlet (tervezési stratégia) alapján kétféle architektúrát különböztetünk meg:
- RISC (Reduced Instruction Set Computing): csökkentett utasításkészletű architektúra
– például ARM (Advanced RISC Machine) processzorok
- CISC (Complex Instruction Set Computing): bővített utasításkészletű architektúra
– például x86 processzorok
Napjainkban mindkettő használatban van.
RISC főbb tulajdonságai, előnye, hátránya
Főbb tulajdonságai:
* 50-150 utasítással rendelkezik
* Általában 3 operandusos utasítások -> az eredmény nem írja felül a bemeneti regisztert
* Minden utasítás hossza egyforma (pl 64 bit, 128 bit)
* Utasítás végrehajtás általában egy óraciklust vesz igénybe
* Nincs olyan utasítás, ami a LOAD/STORE-t aritmetikával kombinálja (nem lehet egyszerre betölteni az adatot és végrehajtani műveletet)
* Minden műveletvégző utasítás kizárólag regisztereket használ
* Memória és cache elérése csak LOAD/STORE utasításokkal történhet
* Nagyszámú regiszterkészlet
* Bonyolultabb compiler a kevés utasítás miatt
* Általában huzalozott az utasítás dekódolás
Előnye: CISC architektúrákhoz képest gyorsabb végrehajtás
Hátrány: bonyolultabb feladatokat instrukció szekvenciákkal kell megoldani. Ez növelheti a program méretét.
CISC tulajdonságai, előnye, hátránya
Például Intel 80386
Főbb tulajdonságai:
* Több száz utasítás -> nagy belső mikroprogramtárat igényel
* Két operandusos utasítások -> az első operandus felülíródik az eredménnyel. Az első operandus nem lehet memória vagy cache cím, mert ez nagyon lelassítaná a működést
* Változó méretű utasítások -> a dekódolónak azonosítani is kell az utasítás végét. Ez a utasítás határra illesztés, ami plusz hardvert és időt igényel
* Utasítások feldolgozása több ciklusidő lehet
* Egy utasítás több elemi műveletet is végre tud hajtani
* Sokféle címzési mód és utasítás
* Közvetlen memória elérés lehetséges -> a második operandus lehet memória vagy cache cím is
* Egyszerűbb a gépi kódú programozás a sokféle utasítás miatt (egyszerűbb fordítóprogramok)
* Mivel az utasítások folyamatosan bővültek, így a régebbi architektúrákra írt programok kompatibilisek maradtak
* Futószalag fokozatok közt sebesség különbség lehet -> feloldása Interlock funkcióval
* Általában +2 fokozat a RISC-hez képest: AG (címszámítás) és cache elérés
Előny: egyszerűbb compilerek és kompatibilitás
Hátrány: bonyolultabb, lassabb végrehajtás
Hibrid architektúrák
A CISC CPU-k az idő 80%-ában az utasítások körülbelül 20%-át használja. Ezért a feldolgozás gyorsítása érdekében kialakítottak a CISC architektúrán belül egy RISC magot. Ez a megoldás minden mai Core i architektúrában megjelenik. Például az x86-os architektúra ISA-t (Instruction Set Architecture) használ.
A mai ARM processzorok sem tisztán RISC architektúrák, hanem CISC jellegű utasításokkal vannak bővítve. Például az ARM Thumb, ami egy tömörített utasításkészlet.
Hibrid architektúrák következményei
- Jelentősen felgyorsult az utasítás lehívás és az operandus betöltés
- Sebességolló jelenség: amíg a processzorok feldolgozási sebessége nőtt, addig a memória sebessége kevésbé -> Cache bevezetése. Az óriási sebességkülönbséget próbálták kiküszöbölni a gyakran használt operandusok cache-be való töltésével.
- Maximális végrehajtási sebesség: 1 utasítás / ciklus. További növekedés kibocsátási párhuzamossággal vagy utasításon belüli párhuzamossággal (multimédia) lehetséges.
- A vezérlés átadási utasítások kifinomult feldolgozási technikája szükséges a függőségek miatt
- Az elágazások kezelése bonyolódik