Utasítás-Pipelining

Az utasítás-pipelining a modern mikroprocesszorok, mikrokontrollerek és CPU-k tervezésénél alkalmazott technika, amelynek célja az utasításátviteli teljesítmény (az egy időegység alatt végrehajtható utasítások száma) növelése.

Az alapötlet az, hogy a CPU utasítás feldolgozását, ahogyan azt az utasítás mikrokódja meghatározza, mikroműveletek (más néven "mikroutasítások", "mikro-op" vagy "µop") független lépéseinek sorozatára osztják (úgynevezett "split"), az egyes lépések végén tárolással. Ez lehetővé teszi a CPU vezérlő logikája számára, hogy az utasításokat a leglassabb lépés feldolgozási sebességével kezelje, ami sokkal gyorsabb, mint az utasítás egyetlen lépésként történő feldolgozásához szükséges idő.

A csővezeték kifejezés arra utal, hogy minden lépés egyetlen mikroutasítást hordoz (mint egy vízcsepp), és minden lépés egy másik lépéshez kapcsolódik (analógia; hasonló a vízvezetékhez).

A legtöbb modern CPU-t órajel vezérli. A CPU belsőleg logikából és memóriából (flip flopok) áll. Amikor az órajel megérkezik, a flip flopok tárolják az új értéket, majd a logikának időre van szüksége ahhoz, hogy dekódolja a flip flopok új értékeit. Ezután megérkezik a következő órajel, és a flip flopok újabb értékeket tárolnak, és így tovább. A logika kisebb darabokra bontásával és a flip flopok logikai darabok közötti beillesztésével a logika által igényelt idő (az értékek dekódolásához az ezen értékektől függő érvényes kimenetek létrehozásáig) csökken. Ily módon az óraperiódus csökkenthető.
Például a RISC-csővezeték öt szakaszra van bontva, az egyes szakaszok között pedig flip flopok vannak a következőképpen:

  1. Utasítás lehívása
  2. Utasításdekódolás és regiszterbehívás
  3. Végrehajtás
  4. Memória-hozzáférés
  5. Visszaírás a regiszterbe

A pipelininggel ellátott processzorok belsőleg olyan szakaszokból (modulokból) állnak, amelyek félig függetlenül képesek külön mikroutasításokon dolgozni. Minden egyes fokozat flip flopok segítségével kapcsolódik a következő fokozathoz (mint egy "lánc"), így a fokozat kimenete egy másik fokozat bemenete, amíg az utasítások feldolgozása be nem fejeződik. A processzor belső moduljainak ilyen szervezése csökkenti az utasítás teljes feldolgozási idejét.

A nem-csatornás architektúra nem olyan hatékony, mivel néhány CPU-modul üresjáratban van, míg egy másik modul aktív az utasítási ciklus alatt. A csővezetékes CPU-ban a pipelining nem szünteti meg teljesen az üresjárati időt, de a CPU-modulok párhuzamos működése növeli az utasítás-átbocsátási teljesítményt.

Egy utasításcsővezeték akkor tekinthető teljesen csővezetékesnek, ha minden órajelciklusban képes új utasítást fogadni. A nem teljesen csővezetékes pipeline várakozási ciklusokkal rendelkezik, amelyek késleltetik a pipeline előrehaladását.

Alapvető ötlépcsős pipeline egy RISC-gépben (IF = Instruction Fetch, ID = Instruction Decode, EX = Execute, MEM = Memory access, WB = Register write back). A függőleges tengely az egymást követő utasítások, a vízszintes tengely az idő. Tehát a zöld oszlopban a legkorábbi utasítás a WB szakaszban van, és a legkésőbbi utasítás az utasításbehíváson megy keresztül.Zoom
Alapvető ötlépcsős pipeline egy RISC-gépben (IF = Instruction Fetch, ID = Instruction Decode, EX = Execute, MEM = Memory access, WB = Register write back). A függőleges tengely az egymást követő utasítások, a vízszintes tengely az idő. Tehát a zöld oszlopban a legkorábbi utasítás a WB szakaszban van, és a legkésőbbi utasítás az utasításbehíváson megy keresztül.

A pipelining előnyei és hátrányai

A pipelining előnyei:

  1. A processzor ciklusideje csökken; nő az utasítások átviteli sebessége. A csővezetés nem csökkenti az egy utasítás befejezéséhez szükséges időt; ehelyett növeli az egyidejűleg ("egyszerre") feldolgozható utasítások számát, és csökkenti a befejezett utasítások közötti késleltetést (az úgynevezett "átbocsátási teljesítményt").
    Minél több pipeline-szakasza van egy processzornak, annál több utasítást tud "egyszerre" feldolgozni, és annál kisebb a késleltetés a befejezett utasítások között. Minden ma gyártott
    általános célú mikroprocesszor legalább 2, de akár 30 vagy 40 fokozatú pipeline-t használ.
  2. Pipelining használata esetén a CPU aritmetikai logikai egysége gyorsabban tervezhető, de összetettebb lesz.
  3. A csővezetés elméletileg a szakaszok számának a szorzatával növeli a teljesítményt a csővezeték nélküli maghoz képest (feltételezve, hogy az órajelfrekvencia is ugyanennyivel nő), és a kód ideális a csővezetékes végrehajtáshoz.
  4. A csővezetékes CPU-k általában magasabb órajelen dolgoznak, mint a RAM órajel frekvenciája (a 2008-as technológiáktól kezdve a RAM-ok a CPU-k frekvenciájához képest alacsony frekvencián dolgoznak), ami növeli a számítógépek általános teljesítményét.

A pipelining hátrányai:

A pipeliningnek számos hátránya van, bár a CPU-k és a fordítóprogramok tervezői számos technikát alkalmaznak a legtöbbjük leküzdésére; az alábbiakban felsoroljuk a leggyakoribb hátrányokat:

  1. A nem-pipelines processzorok kialakítása egyszerűbb és olcsóbb a gyártásuk, a nem-pipelines processzor egyszerre csak egyetlen utasítást hajt végre. Ez megakadályozza az elágazási késedelmeket (a pipeliningben minden elágazás késik), valamint az egyidejűleg végrehajtott soros utasításoknál fellépő problémákat.
  2. A pipelines processzorban a flip flopok modulok közötti beillesztése növeli az utasítás késleltetését a nem pipelines processzorhoz képest.
  3. Egy nem pipeline-olt processzornak meghatározott utasítás-teljesítménye van. Egy pipelines processzor teljesítményét sokkal nehezebb megjósolni, és a különböző programok esetében nagymértékben eltérhet.
  4. Sok terv tartalmaz 7, 10, 20, 31 és még több fokozatú csővezetéket; a hosszú csővezeték hátránya, hogy amikor egy program elágazik, a teljes csővezetéket ki kell üríteni (törölni). A csővezetékek nagyobb áteresztőképessége elmarad, ha a végrehajtott kód sok elágazást tartalmaz: a processzor nem tudhatja előre, hogy honnan olvassa be a következő utasítást, és meg kell várnia, amíg az elágazási utasítás befejeződik, így a mögötte lévő csővezeték üresen marad. Ez a hátrány csökkenthető azzal, hogy a korábbi tevékenység alapján megjósolható, hogy a feltételes elágazási utasítás el fog-e ágazni. Az elágazás megoldása után a következő utasításnak végig kell haladnia a csővezetéken, mielőtt annak eredménye elérhetővé válik, és a processzor ismét "dolgozik". Ilyen szélsőséges esetekben a csővezetékes processzor teljesítménye rosszabb lehet, mint a nem csővezetékes processzoré.
  5. Sajnos nem minden utasítás független. Egy egyszerű csővezetékben egy utasítás befejezése 5 lépést is igényelhet. A teljes teljesítményű működéshez ennek a csővezetéknek 4 egymást követő független utasítást kell lefuttatnia, miközben az első befejeződik. E 4 utasítás bármelyike függhet az első utasítás kimenetétől, ami a csővezeték vezérlő logikájának várakozását és egy időhúzást vagy egy elvesztegetett órajelciklust okozhat a csővezetékben, amíg a függőséget fel nem oldják. Szerencsére az olyan technikák, mint a továbbítás, jelentősen csökkenthetik az olyan eseteket, amikor az időhúzásra szükség van.
  6. Az önmódosító programok nem feltétlenül hajtódnak végre megfelelően egy csővezetékes architektúrán, ha a módosítandó utasítások a végrehajtandó utasítások közelében vannak. Ennek oka lehet, hogy az utasítások már a Prefetch Input Queue-ben vannak, így a módosítás nem biztos, hogy a következő utasításvégrehajtásnál érvényesül. Az utasítás gyorsítótárak tovább rontják a problémát.
  7. Veszélyek: Amikor a programozó (vagy a fordító) assembly kódot ír, általában feltételezi, hogy minden utasítás a következő utasítás végrehajtása előtt végrehajtásra kerül. Ha ezt a feltételezést nem igazolja a pipelining, akkor a program helytelenül viselkedik, ezt a helyzetet nevezzük veszélynek. A veszélyek megoldására vagy áthidalására
    különböző
    technikák léteznek, mint például a továbbítás és a késleltetés (egy időhúzás vagy egy elvesztegetett órajelciklus beiktatásával).

Példák

Általános csővezeték

A jobb oldalon egy általános csővezeték látható négy lépcsővel:

  1. Hozd le a
  2. Decode
  3. Végrehajtás
  4. Visszaírás

A felső szürke doboz a végrehajtásra váró utasítások listája; az alsó szürke doboz a már befejezett utasítások listája; a középső fehér doboz pedig a csővezeték.

A végrehajtás a következőképpen történik:

Idő

Végrehajtás

0

Négy utasítás vár végrehajtásra

1

  • a zöld utasítás a memóriából kerül előhívásra

2

  • a zöld utasítás dekódolásra kerül
  • a lila utasítás a memóriából kerül előhívásra

3

  • a zöld utasítás végrehajtásra kerül (a tényleges művelet végrehajtásra kerül)
  • a lila utasítás dekódolásra kerül
  • a kék utasítás lekérésre kerül

4

  • a zöld utasítás eredményei visszaíródnak a regiszterfájlba vagy a memóriába.
  • a lila utasítás végrehajtásra kerül
  • a kék utasítás dekódolásra kerül
  • a piros utasítás beérkezik

5

  • a zöld utasítás befejeződött
  • a lila utasítás visszaíródik
  • a kék utasítás végrehajtásra kerül
  • a piros utasítás dekódolásra kerül

6

  • A lila utasítás elkészült
  • a kék utasítás visszaíródik
  • a piros utasítás végrehajtásra kerül

7

  • a kék utasítás befejeződött
  • a piros utasítás visszaíródik

8

  • a piros utasítás befejeződött

9

Minden utasítás végrehajtásra kerül

Buborék

Ha a végrehajtásban "csuklás" (megszakítás) történik, a csővezetékben egy "buborék" keletkezik, amelyben semmi hasznos nem történik. A 2. ciklusban a lila utasítás lehívása késik, és a 3. ciklusban a dekódolási szakaszban már egy buborék van. Minden, ami a lila utasítás mögött van, szintén késik, de minden, ami a lila utasítás előtt van, folytatja a végrehajtást.

A fenti végrehajtással összehasonlítva a buborék 7 helyett 8 órajeles teljes végrehajtási időt eredményez.

A buborékok olyanok, mint a késleltetések (késleltetések), amelyekben semmi hasznos nem történik a lekérdezés, dekódolás, végrehajtás és visszaírás során. Ez olyan, mint egy NOP (No OPeration, azaz nincs művelet) kód.

Példa 1

Egy tipikus utasítás két szám összeadására lehet az ADD A, B, C, amely összeadja az A és B memóriahelyeken található értékeket, majd az eredményt a C memóriahelyre helyezi:

LOAD A, R1 LOAD B, R2 ADD R1, R2, R3 STORE R3, C LOAD következő utasítás

Az 'R1' és 'R2' helyek a CPU-ban lévő regiszterek. Az 'A' és 'B' feliratú memóriahelyeken tárolt értékeket betöltjük (másoljuk) ezekbe a regiszterekbe, majd összeadjuk, és az eredményt a 'C' feliratú memóriahelyen tároljuk.

Ebben a példában a csővezeték három szakaszból áll: hosszú betöltés, végrehajtás és tárolás. Az egyes lépéseket csővezetékszakaszoknak nevezzük.

Egy nem pipelined processzoron egyszerre csak egy szakasz dolgozhat, így a teljes utasításnak be kell fejeződnie, mielőtt a következő utasítás elkezdődhet. Pipelines processzoron az összes fokozat egyszerre dolgozhat különböző utasításokon. Tehát amikor ez az utasítás a végrehajtási szakaszban van, egy második utasítás a dekódolási szakaszban, egy harmadik utasítás pedig a lekérdezési szakaszban lesz.

Példa 2

Hogy jobban megértsük a koncepciót, nézzünk meg egy elméleti 3 lépcsős csővezetéket:

Színpad

Leírás

Terhelés

Utasítás olvasása a memóriából

Végrehajtás

Utasítás végrehajtása

Áruház

Az eredmény tárolása a memóriában és/vagy a regiszterekben

és egy végrehajtandó pszeudokód assembly listát:

LOAD #40, A ; 40 betöltése A-ban MOVE A, B ; A másolása B-be ADD #20, B ; 20 hozzáadása B-hez STORE B, 0x300 ; B tárolása a 0x300-as memóriacellába.

Ezt így hajtanák végre:

Óra 1

Terhelés

Végrehajtás

Áruház

LOAD

 

 

A LOAD utasítás a memóriából kerül előhívásra.

Óra 2

Terhelés

Végrehajtás

Áruház

MOVE

LOAD

 

A LOAD utasítás végrehajtásra kerül, míg a MOVE utasítás a memóriából kerül előhívásra.

Óra 3

Terhelés

Végrehajtás

Áruház

ADD

MOVE

LOAD

A LOAD utasítás a Store fázisban van, ahol az eredmény (a 40-es szám) az A regiszterbe kerül. Eközben a MOVE utasítás végrehajtása folyamatban van. Mivel az A tartalmát B-be kell áthelyeznie, meg kell várnia a LOAD utasítás befejezését.

Óra 4

Terhelés

Végrehajtás

Áruház

STORE

ADD

MOVE

A STORE utasítás betöltődik, miközben a MOVE utasítás befejeződik, az ADD pedig számol.

És így tovább. Vegyük észre, hogy néha egy utasítás egy másik utasítás eredményétől függ (mint a MOVE példánkban). Ha egynél több utasítás hivatkozik egy operandus egy adott helyre, akár olvasva (bemenetként), akár írva (kimenetként), akkor ezen utasítások az eredeti program sorrendjétől eltérő sorrendben történő végrehajtása a (fent említett) veszélyhelyzethez vezethet.

Általános 4 lépcsős csővezeték; a színes dobozok egymástól független utasításokat jelölnekZoom
Általános 4 lépcsős csővezeték; a színes dobozok egymástól független utasításokat jelölnek

Egy buborék a 3. ciklusban késlelteti a végrehajtástZoom
Egy buborék a 3. ciklusban késlelteti a végrehajtást

Kapcsolódó oldalak

  • Csővezeték (számítástechnika)
  • Párhuzamos számítástechnika
  • Utasításszintű párhuzamosság

Kérdések és válaszok

K: Mi az az utasítás pipelining?


V: Az utasítás-pipelining a modern mikroprocesszorok, mikrokontrollerek és CPU-k tervezésénél alkalmazott technika, amely az utasítások átviteli sebességének növelésére szolgál azáltal, hogy a CPU-utasítás feldolgozását független lépések sorozatára osztja fel, minden lépés végén tárolással.

K: Hogyan működik a pipelining?


V: A pipelining úgy működik, hogy a logikát kisebb darabokra bontja, és a logikai darabok közé flip flopokat illeszt, ami csökkenti a logikának az értékek dekódolásához szükséges időt, amíg ezen értékek függvényében érvényes kimeneteket generál. Ez gyorsabb órajel-periódusokat tesz lehetővé.

K: Milyen példák vannak a csővezetékekre?


V: Egy példa a pipeline-ra a RISC pipeline, amely öt szakaszra van bontva, az egyes szakaszok között pedig flip flopok sorozata található.

K: Hogyan növeli a pipelining az utasítások áteresztőképességét?


V: A csővezetés növeli az utasítások áteresztőképességét azáltal, hogy lehetővé teszi a CPU-modulok párhuzamos működését, ami csökkenti az utasítási ciklus alatti üresjárati időt és növeli a teljes feldolgozási időt.

K: Minden csővezeték teljesen pipelines?


V: Nem, nem minden csővezeték teljesen csővezetékes; egyes csővezetékek várakozási ciklusokkal rendelkeznek, amelyek késleltetik a csővezetékben való haladást.

AlegsaOnline.com - 2020 / 2023 - License CC3