Számítási csővezeték

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2022. június 18-án felülvizsgált verziótól ; az ellenőrzéshez 1 szerkesztés szükséges .

Pipeline  - a számítások rendszerezési módszere, amelyet a modern processzorokban és vezérlőkben használnak a teljesítményük növelése érdekében (az időegységenként végrehajtott utasítások számának növelése - a párhuzamosság művelete az utasítások szintjén ), számítógépek és egyéb fejlesztésekben használt technológia. digitális elektronikus eszközök.

Leírás

Az ötlet több processzor utasítás párhuzamos végrehajtása. Az összetett processzorutasítások egyszerűbb lépések sorozataként jelennek meg. Ahelyett, hogy az utasításokat szekvenciálisan hajtanánk végre (megvárjuk az egyik utasítás végét, és továbblépünk a következőre), a következő utasítás az első utasítás végrehajtásának több szakaszán keresztül is végrehajtható. Ez lehetővé teszi, hogy a processzor vezérlőláncai a feldolgozás leglassabb szakaszának sebességével kapjanak utasításokat, ugyanakkor sokkal gyorsabban, mint az egyes utasítások exkluzív teljes feldolgozása az elejétől a végéig.

Példa

A jobb oldali ábra egy egyszerű ötszintű folyamatot mutat be RISC processzorokban . Itt:

A függőleges tengely szekvenciális független utasítások, a vízszintes tengely az idő. A zöld oszlop a processzor egy adott időpontban fennálló állapotát írja le, ebben a legkorábbi, felső utasítás már a regiszterbe írás állapotában van, a legújabb, alsó utasítás pedig csak olvasási folyamatban van.

Terminológia

Történelem

Maga a "szállítószalag" kifejezés is a hasonló működési elvet alkalmazó iparból származik - az anyagot a szállítószalagon  automatikusan a dolgozóhoz húzzák , aki elvégzi vele a szükséges műveleteket, az őt követő munkás pedig a kapott anyagon látja el feladatait. munkadarab, a következő valami mást csinál. Így a csővezeték végére a dolgozók lánca elvégzi az összes rábízott feladatot, fenntartva a magas termelési rátát. Például, ha a leglassabb művelet egy percet vesz igénybe, akkor minden alkatrész egy percen belül elhagyja a futószalagot. A processzorokban a dolgozók szerepét a processzor részét képező funkcionális modulok látják el.

Az időben átfedő utasítás-végrehajtás legegyszerűbb formáját Konrad Zuse valósította meg a Z3 - as gépben 1941-ben [2] .

A kis ETSVM " Ural " ( 1957 , Szovjetunió ) cső kétlépcsős szállítószalaggal rendelkezett. [3]

A modern nézetben többlépcsős szállítószalagokat Anatolij Ivanovics Kitov M -100-as gépében (1959, Szovjetunió) [ pontosít ] [4] , UNIVAC LARC (1960, USA), IBM Stretch (1961, USA) [5] valósították meg. , Atlas (1962, Nagy-Britannia) és BESM-6 (1967, Szovjetunió). Az IBM Stretch projektben a „fetch” ( eng.  Fetch ), a „dekódolás” ( eng.  Decode ) és a „execution” ( eng.  Execute ) kifejezéseket javasolták, amelyek aztán általánosan használtak lettek.

A folyamat bonyolultsága és a processzor órajele közötti kapcsolat

Sok modern processzort órajelgenerátor vezérel. A belső processzor logikai elemekből és memóriacellákból – flip- flopokból – áll . Amikor megérkezik az órajelgenerátor jele, a flip-flopok felveszik új értéküket, és a „logikának” némi időbe telik, míg dekódolja az új értékeket. Aztán jön a következő jel az óragenerátortól, a flip-flopok új értékeket vesznek fel, és így tovább. Azáltal, hogy a logikai elemek sorozatait rövidebb sorozatokra bontjuk, és e rövid sorozatok közé flip-flopokat helyezünk el, csökken a logikának a jelek feldolgozásához szükséges idő. Ebben az esetben egy processzorciklus időtartama ennek megfelelően csökkenthető.

Például a RISC processzorok legegyszerűbb folyamata öt szakaszban ábrázolható, a szakaszok közötti triggerkészletekkel:

  1. utasítások fogadása ( English  Instruction Fetch );
  2. utasítás dekódolás ( Instruction Decode )  és regiszterolvasás ( Register fetch ); 
  3. végrehajtás ( angol  Execute );
  4. memória hozzáférés ( eng.  Memory access );
  5. írj a regiszterbe ( eng.  Register write back ).

Szállítószalag ütközések

Az úgynevezett pipeline konfliktusok ( angol  hazards ) megakadályozzák a következő utasítás végrehajtását az utasításfolyamból a neki szánt ciklusban. Az ütközések csökkentik a csővezeték teljesítményének tényleges felgyorsulását, és a csővezeték leállását okozhatják . Az ütközésmegoldás megköveteli, hogy a folyamatban lévő egyes utasítások végrehajtása folytatódjon, míg mások késve.

A konfliktusoknak három osztálya van [6] .

Strukturális konfliktusok

Strukturális konfliktusok az erőforrás-ütközések miatt keletkeznek, amikor a hardver nem tudja támogatni az egyidejűleg végrehajtott utasítások összes lehetséges kombinációját [7] . Ha az utasítások valamelyik kombinációja nem támogatható, akkor a processzor szerkezeti ütközésben van . Strukturális konfliktusok leggyakrabban akkor fordulnak elő, ha egy funkcionális blokk nincs teljesen folyamatban. Például egyes processzorok egyetlen memória-folyamatban osztoznak az adatok és az utasítások számára. Ennek eredményeként, ha egy utasítás adatmemória-hozzáférést tartalmaz, az ütközik egy későbbi utasítással. Az adatmemória elérésekor az ütközés feloldásához a folyamat egy ciklusra szünetel.

Az ilyen szerkezeti konfliktusok alternatívájaként a fejlesztő külön utasítás-memória hozzáférést biztosíthat a gyorsítótár különálló utasítás-gyorsítótárra és adatgyorsítótárra való felosztásával, vagy több, utasításpuffernek nevezett puffer használatával az utasítások tárolására, azonban ez nem a sorrendben történik. hogy elkerüljük a blokk költségének növekedését [8] .

Adatütközések

Adatütközések akkor fordulnak elő, ha egy parancs függősége egy előző eredménytől jelenik meg, amikor a parancsokat egy folyamatban kombinálják. Ezek az ütközések akkor fordulnak elő, amikor a folyamat megváltoztatja az operandusok olvasási/írási hozzáférési sorrendjét, hogy az eltérjen a folyamatban lévő processzorban a szekvenciálisan végrehajtott utasítások sorrendjétől. Létezik egy adatkonfliktus-feloldási módszer: továbbítás ( angolul  register forwarding ) (néha bypassnak is nevezik ) [9] . Sajnos nem minden lehetséges adatütközést lehet kezelni bypass segítségével, ebben az esetben a folyamat felfüggesztésre kerül az ütközés feloldásáig.

Kezelési konfliktusok

Vezérlési ütközések akkor fordulnak elő feltételes átvitelek és egyéb utasítások végrehajtásakor, amelyek megváltoztatják a programszámláló értékét . A vezérlés átviteli késleltetése által okozott csővezeték -leállások kezelésére számos mód létezik , de a mély csővezetékek általában agresszív eszközöket [10] használnak , például a vezérlésátvitel előrejelzését .

Csővezeték nélküli architektúra

A csővezeték nélküli architektúra sokkal kevésbé hatékony a processzor funkcionális moduljainak kisebb terhelése miatt, miközben egy vagy kevés modul látja el funkcióját az utasításfeldolgozás során. A folyamat nem szünteti meg teljesen a processzorok moduljainak üresjárati idejét, és nem csökkenti az egyes utasítások végrehajtási idejét, hanem arra kényszeríti a processzormodulokat, hogy párhuzamosan dolgozzanak különböző utasításokon, ezáltal növelve az időegységenként végrehajtott utasítások számát. , és ezáltal a programok általános teljesítménye.

A processzorok belsejében csővezetékkel úgy vannak megtervezve, hogy az utasítások feldolgozása szakaszokra oszlik, feltételezve több utasítás egyidejű feldolgozását különböző szakaszokban. Az egyes szakaszok munkájának eredményei a memóriacellákon keresztül a következő szakaszba kerülnek, és így tovább az utasítás végrehajtásáig. A processzor ilyen felépítése, az egyes utasítások átlagos végrehajtási idejének enyhe növekedésével, ennek ellenére jelentős teljesítménynövekedést biztosít az utasítások végrehajtásának magas gyakorisága miatt.

Azonban nem minden utasítás független. A legegyszerűbb pipeline-ban, ahol az utasításfeldolgozást öt szakasz képviseli, a teljes betöltés biztosítása érdekében, miközben az első utasítás feldolgozása befejeződik, ideális esetben további négy egymást követő független utasítást kell párhuzamosan feldolgozni. Ha a szekvencia az éppen végrehajtott utasításoktól függő utasításokat tartalmaz, akkor a legegyszerűbb csővezeték vezérlési logikája felfüggeszti a folyamat több kezdeti szakaszát, ezáltal egy üres utasítást („buborékot”) helyez a folyamatba, néha ismételten, amíg a függőség fel nem oldódik. Számos trükk létezik, például a továbbítás, amelyek nagymértékben csökkentik a folyamat egy részének szüneteltetését ilyen esetekben. A processzor által egyidejűleg feldolgozott utasítások közötti függőség azonban nem teszi lehetővé a folyamatfolyamatok számának többszöröse teljesítménynövekedés elérését a csővezeték nélküli processzorokhoz képest.

Előnyök és hátrányok

A csővezeték nem minden esetben segít. Számos lehetséges hátránya van. Egy utasításfolyamat akkor nevezhető "teljesen csővezetékesnek", ha minden gépi ciklusban képes új utasítást fogadni . Ellenkező esetben késleltetéseket kell kényszeríteni a csővezetékbe, amelyek lelapítják a csővezetéket, miközben rontják a teljesítményét.

Előnyök:

  1. A processzor ciklusideje lecsökken, így a legtöbb esetben növeli az utasításfeldolgozási sebességet.
  2. Egyes kombinációs logikai elemek, például összeadók vagy szorzók, felgyorsíthatók a logikai elemek számának növelésével. A csővezeték használatával megelőzhető az elemek számának szükségtelen növekedése.

Hibák:

  1. A csővezeték nélküli processzor egyszerre csak egy utasítást hajt végre. Ez megakadályozza az utasításág késéseket (valójában minden ág késik), és a párhuzamosan végrehajtott szekvenciális utasításokkal kapcsolatos problémákat. Ezért egy ilyen processzor áramköre egyszerűbb, és olcsóbb a gyártás.
  2. Az utasítások késleltetési ideje egy folyamat nélküli processzorban valamivel alacsonyabb, mint egy csővezetékes megfelelőjében. Ennek az az oka, hogy további triggereket kell hozzáadni a folyamatban lévő processzorhoz .
  3. A csővezeték nélküli processzorok stabil utasításfeldolgozási sebességgel rendelkeznek. A csővezetékes processzorok teljesítményét sokkal nehezebb megjósolni, és nagyon eltérő lehet a programok között.

Példák

Általános csővezeték

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

  1. Hozd _  _ _
  2. Dekódolás _  _ _
  3. Végrehajtás _  _ _
  4. Az eredmény rögzítése ( eng.  Write-back )

A felső szürke terület a végrehajtandó utasítások listája. Az alsó szürke terület a már végrehajtott utasítások listája. A középső fehér terület pedig maga a csővezeték.

A végrehajtás így megy:

Ciklus Akciók
0 Négy utasítás végrehajtása vár
egy
  • A zöld utasítás a memóriából származik
2
  • A zöld utasítás dekódolásra kerül
  • A lila utasítás emlékezetből származik
3
  • A zöld utasítás végrehajtásra kerül (azaz az általa kódolt művelet végrehajtásra kerül)
  • A lila utasítás dekódolásra kerül
  • A kék utasítás a memóriából származik
négy
  • A zöld utasítás végrehajtásának eredménye a regiszterekbe vagy a memóriába kerül
  • Lila utasítás folyamatban
  • A kék utasítás dekódolásra kerül
  • A piros utasítás a memóriából származik
5
  • Zöld oktatás véget ért
  • A lila utasítás végrehajtásának eredménye a regiszterekbe vagy a memóriába kerül
  • A kék utasítás végrehajtása folyamatban van
  • Piros utasítás dekódolása
6
  • A lila utasítás véget ért
  • A kék utasítás végrehajtásának eredménye a regiszterekbe vagy a memóriába kerül
  • Piros utasítás folyamatban
7
  • A kék oktatás véget ért
  • A piros utasítás végrehajtásának eredménye a regiszterekbe vagy a memóriába kerül
nyolc
  • A piros utasítás véget ért
9 Minden utasítást betartottak
Buborék

A folyamatban lévő ütközések megoldása érdekében a processzor kénytelen késleltetni az utasítás feldolgozását azáltal, hogy „buborékot” hoz létre a folyamatban. A buboréknak az aktuátorokon való áthaladását nem kíséri hasznos munka. A második ciklusban a lila utasítás feldolgozása késik, és a harmadik ciklusban most egy buborék van a dekódolási szakaszban. A lila utasítás „után” minden utasítás egy ciklussal késik, míg a lila utasítás „előtti” utasítások végrehajtása tovább folytatódik.

Nyilvánvaló, hogy egy buborék jelenléte a folyamatban 8 ciklus teljes végrehajtási időt ad a fent bemutatott végrehajtási diagramban látható 7 ciklus helyett.

Az aktuátoroknak minden ciklusban végre kell hajtaniuk valamilyen műveletet. A buborékok a folyamat leállítása nélkül késleltetik az utasítások feldolgozását. Végrehajtásukkor nem történik hasznos munka a lekérés, a dekódolás, a végrehajtás és az eredmény írása szakaszában. Ezeket a NOP [11] [12] [13] assembler utasítással fejezhetjük ki .

1. példa

Tegyük fel, hogy két szám összeadásának tipikus utasítása a СЛОЖИТЬ A, B, C. Ez az utasítás összeadja az értékeket az A és B memóriahelyeken, majd az eredményt a C memóriahelyre helyezi . Egy csővezetékes processzorban a vezérlő ezt a műveletet az űrlap szekvenciális feladataira bonthatja

LOAD A , R1 LOAD B , R2 ADD R1 , R2 , R3 ÍRJA R3 , C töltse be a következő utasítást

Az R1 , R2 és R3 cellák processzorregiszterek . _ A memóriahelyeken tárolt értékeket, amelyeket A-nak és B-nek nevezünk , ezekbe a regiszterekbe töltjük (vagyis másoljuk), majd összegezzük, és az eredményt a C memóriahelyre írjuk .

Ebben a példában a folyamat három szintből áll - betöltés, végrehajtás és írás. Ezeket a lépéseket nyilvánvalóan szinteknek vagy folyamatlépéseknek nevezzük .

Egy csővezeték nélküli processzorban egyszerre csak egy lépés futhat, így az utasításnak teljesen be kell fejeződnie, mielőtt a következő utasítás elkezdődhet. Egy csővezetékes processzorban ezek a lépések egyidejűleg is végrehajthatók különböző utasításokra. Tehát amikor az első utasítás a végrehajtási lépésben van, a második utasítás a dekódolási szakaszban, a harmadik pedig az olvasási szakaszban lesz.

A pipeline nem csökkenti az utasítás végrehajtásának idejét, viszont növeli az egyidejűleg végrehajtható utasítások mennyiségét (számát), és ezzel csökkenti a végrehajtott utasítások közötti késést - növelve az ún. áteresztőképesség . Minél több réteg van egy folyamatban, annál több utasítás hajtható végre egyszerre, és annál kisebb a késleltetés a befejezett utasítások között. Minden ma gyártott mikroprocesszor legalább kétszintű csővezetéket használ.

2. példa

Elméleti háromszintű csővezeték:

Lépés angol cím Leírás
Minta Fetch Olvassa el az utasításokat a memóriából
Végrehajtás Végrehajtás Végezze el az utasítást
Felvétel Írj vissza Írja be az eredményt a memóriába és/vagy a regiszterekbe

A végrehajtandó pszeudo-assembler listázás:

TERHELÉS 40, A ; 40-es számú betöltés A PÉLDA A , B ; másolat A-ból B -be ADD 20, B ; adjunk hozzá 20-at a B -hez WRITE B , 0x0300 ; írd a B-t a 0x0300 memóriahelyre

A végrehajtás módja:

Tapintat Minta Végrehajtás Felvétel Magyarázat
1. intézkedés LETÖLTÉS A LOAD utasítás a memóriából kerül kiolvasásra.
2. intézkedés MÁSOLAT LETÖLTÉS A LOAD utasítás végrehajtásra kerül, a COPY utasítás beolvasásra kerül a memóriából.
3. intézkedés FOLD MÁSOLAT LETÖLTÉS A LOAD utasítás az eredmény írási lépésében van, ahol az eredménye (vagyis a 40 szám) az A regiszterbe kerül . Ezzel egy időben a COPY utasítás végrehajtásra kerül. Mivel az A regiszter tartalmát be kell másolnia a B regiszterbe , meg kell várnia a LOAD utasítás végét.
4. intézkedés REKORD FOLD MÁSOLAT A WRITE utasítás betöltődik, míg a COPY utasítás elbúcsúzik tőlünk, és jelenleg az ADD utasítás számítása folyik.

Stb. Vegye figyelembe, hogy az utasítások néha más utasítások eredményétől függenek (például a MÁSOLÁS utasításunktól). Ha egynél több utasítás hivatkozik egy adott helyre, akár kiolvasással (vagyis bemeneti operandusként használva), akár írással (vagyis kimeneti operandusként használva), az utasítások végrehajtása nem az eredeti programban eredetileg tervezett sorrend. , csővezeték ütközést okozhat , (amint fentebb említettük). Számos bevált technika létezik a konfliktusok megelőzésére, vagy a konfliktusok kijavítására.

Nehézségek

Sok séma 7, 10 vagy akár 20 szintű csővezetékeket tartalmaz (mint például a Pentium 4 processzor ). A Prescott és Cedar Mill kódnevű késői Pentium 4 magok (és Pentium D származékaik) 31 szintű csővezetékkel rendelkeznek.

A Xelerator X10q processzor egy több mint ezer lépés hosszúságú csővezetékkel rendelkezik [14] . Az érme hátoldala ebben az esetben a teljes folyamat visszaállításának szükségessége abban az esetben, ha a programfolyamat megváltozik (például feltételes utasítással). Az elágazási előrejelzők megpróbálják megoldani ezt a problémát . Az elágazás előrejelzése önmagában csak ronthatja a helyzetet, ha az előrejelzés rosszul történik. Egyes alkalmazásokban, például a szuperszámítástechnikában , a programok kifejezetten úgy vannak megírva, hogy a lehető legkevesebb feltételes utasítást használjanak, így a nagyon hosszú folyamatok nagyon pozitív hatással lesznek a számítások általános sebességére, mivel a hosszú folyamatok célja a CPI ( ciklusok számának) csökkentése. az utasításhoz ).

Ha folyamatosan történik az elágazás, a gépi utasítások átrendezése jelentősen csökkenti a sebességveszteséget: a nagy valószínűséggel szükséges utasítások a csővezetékbe kerülnek. Ez a módszer hatékonyabb, mintha minden alkalommal teljesen vissza kellene állítania a csővezetéket. Az olyan programok, mint a gcov , felhasználhatók annak meghatározására, hogy az egyes ágak milyen gyakran futnak le a kódlefedettség - elemzés néven ismert technika segítségével .  Bár a gyakorlatban egy ilyen elemzés az utolsó intézkedés az optimalizálásban.

A folyamatok nagy áteresztőképessége a teljesítmény csökkenéséhez vezet, ha a végrehajtható kód sok feltételes ugrást tartalmaz: a processzor nem tudja, honnan olvassa ki a következő utasítást, ezért meg kell várnia a feltételes ugrás utasítás végét, így egy üres csővezeték mögötte. Miután bejártuk az ágat, és kiderül, hogy a processzornak hova kell tovább ugrani, a következő utasításnak végig kell mennie a folyamaton, mielőtt az eredmény elérhető lesz, és a processzor újra "működne". Szélsőséges esetben a csővezetékes processzor teljesítménye elméletileg lecsökkenhet a pipeline processzorokéra, vagy még rosszabb is lehet annak következtében, hogy a folyamatnak csak egy szintje van foglalt, és a szintek között van egy kis késés.

Ha a processzor fel van szerelve csővezetékkel, akkor a memóriából kiolvasott kód nem fut azonnal, hanem egy sorba kerül ( prefetch input queue ). Ha a memóriában lévő kód megváltozik, a folyamatsorban lévő kód ugyanaz marad. Ezenkívül az utasítások gyorsítótárában lévő utasítások nem változnak . Figyelembe kell venni, hogy ez a probléma csak az önmódosító programokra és a futtatható fájlok csomagolóira jellemző.

Lásd még

Jegyzetek

  1. Glaskowsky, Peter N. Prescott Pushes Pipelining Limits Archiválva : 2017. április 8., a Wayback Machine // Microprocessor Report, 2004. február 2. 
  2. Raul Rojas. Az első számítógépek: történelem és építészet . - MIT Press, 2002. - S. 249. - 472 p. — ISBN 0-262-68137-4 .
  3. Smolnikov N. Ya. Az Ural digitális gép programozásának alapjai . - Szovjet rádió, 1961. - S. 83. - 328 p.
  4. Revich Jurij Vsevolodovics, Malinovsky B. Információs technológiák a Szovjetunióban. A szovjet számítástechnika megalkotói . - BHV-Pétervár, 2014. - 336 p.
  5. Harvey G. Cragon. Memóriarendszerek és vezetékes processzorok . - Jones és Bartlett Learning, 1996. - S. 289. - 575 p. - ISBN 0-86720-474-5 .
  6. Morgan Kaufmann Publishers , Computer Organization and Design , David A. Patterson & John L. Hennessy , 3. kiadás, ISBN 1-55860-604-1 , 738. oldal
  7. Morgan Kaufmann Publishers , Computer Organization and Design , David A. Patterson & John L. Hennessy , 3. kiadás, ISBN 1-55860-604-1 , 740. oldal
  8. Morgan Kaufmann Publishers , Computer Organization and Design , David A. Patterson & John L. Hennessy , 3. kiadás, ISBN 1-55860-604-1 , 743. oldal
  9. Morgan Kaufmann Publishers , Computer Organization and Design , David A. Patterson & John L. Hennessy , 3. kiadás, ISBN 1-55860-604-1 , 745. oldal
  10. Morgan Kaufmann Publishers , Computer Organization and Design , David A. Patterson & John L. Hennessy , 3. kiadás, ISBN 1-55860-604-1 , 756. oldal
  11. "Az elakadás esetére egy buborékot (NOP utasítás) küld a folyamat a folyamat következő szakaszához, és az összes előző szakasz leáll egy időlépésre" // CPU – 32 bites RISC Archiválva : 2011. november 4. a Wayback Machine -nél
  12. "folyamatbuborékot vagy NOP-t kell beilleszteni" // Utasítási szintű párhuzamosság a VLIW processzorokban Archiválva 2008. szeptember 20. a Wayback Machine -nél
  13. "A buborékok NOP utasítások" // Pipelined Processor Design Archivált 2017. január 3. a Wayback Machine -nél
  14. The Linley Group – A legjobb extrém processzor: Xelerated X10q . Letöltve: 2012. november 17. Az eredetiből archiválva : 2013. december 15.

Irodalom

Linkek