Instruction pipelining

Instruction pipelining je technika používaná pri návrhu moderných mikroprocesorov, mikrokontrolérov a CPU na zvýšenie ich inštrukčnej priepustnosti (počet inštrukcií, ktoré možno vykonať za jednotku času).

Hlavnou myšlienkou je rozdeliť (tzv. "rozdeliť") spracovanie inštrukcie procesora, ako je definované v mikrokóde inštrukcie, na sériu nezávislých krokov mikrooperácií (nazývaných aj "mikroinštrukcie", "mikrooperácie" alebo "µop") s uložením na konci každého kroku. To umožňuje riadiacej logike CPU spracovať inštrukcie rýchlosťou spracovania najpomalšieho kroku, ktorý je oveľa rýchlejší ako čas potrebný na spracovanie inštrukcie ako jedného kroku.

Termín pipeline odkazuje na skutočnosť, že každý krok nesie jednu mikroinštrukciu (ako kvapka vody) a každý krok je prepojený s iným krokom (analógia; podobne ako vodovodné potrubie).

Väčšina moderných procesorov je riadená taktom. CPU sa vnútorne skladá z logiky a pamäte (flip flopov). Keď príde hodinový signál, flip flopy uložia svoju novú hodnotu, potom logika potrebuje určitý čas na dekódovanie nových hodnôt flip flopov. Potom príde ďalší hodinový impulz a flip flopy uložia ďalšie hodnoty atď. Rozdelením logiky na menšie časti a vložením flip flopov medzi časti logiky sa skráti čas, ktorý logika potrebuje (na dekódovanie hodnôt až po generovanie platných výstupov v závislosti od týchto hodnôt). Týmto spôsobom možno skrátiť taktovaciu periódu.
Napríklad, RISC pipeline je rozdelená na päť stupňov so sadou flip flopov medzi každým stupňom takto:

  1. Získavanie pokynov
  2. Dekódovanie inštrukcií a načítanie registrov
  3. Vykonajte
  4. Prístup do pamäte
  5. Registrácia odpísať

Procesory s pipeliningom sa vnútorne skladajú zo stupňov (modulov), ktoré môžu čiastočne nezávisle pracovať na samostatných mikroinštrukciách. Každý stupeň je prepojený flip flopmi s ďalším stupňom (ako "reťaz"), takže výstup stupňa je vstupom pre ďalší stupeň, kým sa neskončí práca na spracovaní inštrukcií. Takáto organizácia vnútorných modulov procesora skracuje celkový čas spracovania inštrukcie.

Nepotrubná architektúra nie je taká efektívna, pretože niektoré moduly CPU sú nečinné, zatiaľ čo iný modul je aktívny počas inštrukčného cyklu. Pipelining úplne neodstraňuje čas nečinnosti v pipeliningovom CPU, ale paralelná práca modulov CPU zvyšuje priepustnosť inštrukcií.

O inštrukčnej pipeline sa hovorí, že je plne pipelined, ak môže prijať novú inštrukciu každý takt. Potrubie, ktoré nie je plne pipelined, má čakacie cykly, ktoré oneskorujú postup potrubia.

Základná päťstupňová pipeline v stroji RISC (IF = Instruction Fetch, ID = Instruction Decode, EX = Execute, MEM = Memory access, WB = Register write back). Vertikálna os sú po sebe idúce inštrukcie, horizontálna os je čas. Takže v zelenom stĺpci je najskoršia inštrukcia vo fáze WB a posledná inštrukcia prechádza načítaním inštrukcie.Zoom
Základná päťstupňová pipeline v stroji RISC (IF = Instruction Fetch, ID = Instruction Decode, EX = Execute, MEM = Memory access, WB = Register write back). Vertikálna os sú po sebe idúce inštrukcie, horizontálna os je čas. Takže v zelenom stĺpci je najskoršia inštrukcia vo fáze WB a posledná inštrukcia prechádza načítaním inštrukcie.

Výhody a nevýhody pipeliningu

Výhody pipeliningu:

  1. Skracuje sa čas cyklu procesora, čím sa zvyšuje priepustnosť inštrukcií. Pipelining neskracuje čas potrebný na dokončenie inštrukcie; namiesto toho zvyšuje počet inštrukcií, ktoré možno spracovať súčasne ("naraz"), a znižuje oneskorenie medzi dokončenými inštrukciami (tzv. "priepustnosť").
    Čím viac stupňov pipeline procesor má, tým viac inštrukcií môže spracovať "naraz" a tým menšie je oneskorenie medzi dokončenými inštrukciami. Každý dnes vyrábaný
    mikroprocesor na všeobecné účely používa aspoň 2 stupne pipeline až do 30 alebo 40 stupňov.
  2. Ak sa použije pipelining, aritmetická logická jednotka CPU môže byť navrhnutá rýchlejšie, ale bude zložitejšia.
  3. Pipelining teoreticky zvyšuje výkon oproti nepipeliningovému jadru o násobok počtu stupňov (za predpokladu, že sa rovnakým násobkom zvýši aj taktovacia frekvencia) a kód je ideálny na vykonávanie v pipeline.
  4. Pipelined CPU vo všeobecnosti pracujú s vyššou taktovacou frekvenciou ako taktovacia frekvencia RAM (od roku 2008 technológie RAM pracujú s nízkou frekvenciou v porovnaní s frekvenciou CPU), čo zvyšuje celkový výkon počítačov.

Nevýhody pipeliningu:

Pipelining má mnoho nevýhod, hoci existuje veľa techník, ktoré používajú návrhári procesorov a kompilátorov na prekonanie väčšiny z nich; nižšie je uvedený zoznam bežných nevýhod:

  1. Konštrukcia nepipelínového procesora je jednoduchšia a lacnejšia na výrobu, nepipelínový procesor vykonáva v danom čase len jednu inštrukciu. Tým sa zabráni oneskoreniu vetvenia (v pipeliningu sa každé vetvenie oneskorí), ako aj problémom pri súbežnom vykonávaní sériových inštrukcií.
  2. V pipeliningovom procesore vloženie flip flopov medzi moduly zvyšuje latenciu inštrukcií v porovnaní s nepipeliningovým procesorom.
  3. Procesor bez pipelínovania bude mať definovanú priepustnosť inštrukcií. Výkonnosť pipelínového procesora je oveľa ťažšie predpovedať a môže sa výrazne líšiť pre rôzne programy.
  4. Mnohé návrhy obsahujú pipeline dlhé 7, 10, 20, 31 a dokonca viac stupňov; nevýhodou dlhých pipeline je, že keď sa program vetví, musí sa celá pipeline prepláchnuť (vyčistiť). Vyššia priepustnosť pipelín sa nedosahuje, keď vykonávaný kód obsahuje veľa vetiev: procesor nemôže vopred vedieť, kde má prečítať ďalšiu inštrukciu, a musí čakať na dokončenie inštrukcie vetvenia, pričom pipeline za ňou zostáva prázdna. Túto nevýhodu možno znížiť predpovedaním, či sa podmienená vetviaca inštrukcia bude vetviť na základe predchádzajúcej činnosti. Po vyriešení vetvenia musí ďalšia inštrukcia prejsť celú cestu cez pipeline, kým sa jej výsledok stane dostupným a procesor opäť pokračuje v "práci". V takýchto extrémnych prípadoch môže byť výkonnosť pipelínového procesora horšia ako nepipelínového procesora.
  5. Bohužiaľ, nie všetky pokyny sú nezávislé. V jednoduchej pipeline môže dokončenie inštrukcie vyžadovať 5 etáp. Aby táto pipeline pracovala s plným výkonom, bude musieť počas dokončovania prvej inštrukcie spustiť 4 nasledujúce nezávislé inštrukcie. Ktorákoľvek z týchto 4 inštrukcií môže závisieť od výstupu prvej inštrukcie, čo spôsobí, že logika riadenia pipeline bude čakať a vloží do pipeline zdržanie alebo zbytočný takt, kým sa závislosť nevyrieši. Našťastie techniky, ako je forwarding, môžu výrazne znížiť počet prípadov, keď je potrebné zdržanie.
  6. Programy, ktoré sa samy modifikujú, sa na pipelínovej architektúre nemusia vykonávať správne, ak sa modifikované inštrukcie nachádzajú v blízkosti vykonávaných inštrukcií. Môže to byť spôsobené tým, že inštrukcie sa už môžu nachádzať vo vstupnej fronte Prefetch, takže modifikácia sa nemusí pre nadchádzajúce vykonávanie inštrukcií prejaviť. Inštrukčné vyrovnávacie pamäte tento problém ešte zhoršujú.
  7. Nebezpečenstvá: Keď programátor (alebo kompilátor) píše kód v assembleri, spravidla predpokladá, že každá inštrukcia sa vykoná skôr, ako sa vykoná ďalšia inštrukcia. Keď tento predpoklad nie je potvrdený pipeliningom, spôsobuje nesprávne správanie programu, situácia sa nazýva nebezpečenstvo. Existujú
    rôzne
    techniky na riešenie nebezpečenstiev alebo ich obchádzanie, ako napríklad presmerovanie a oneskorenie (vložením zdržania alebo premárneného hodinového cyklu).

Príklady

Všeobecné potrubie

Vpravo je generické potrubie so štyrmi stupňami:

  1. Získať
  2. Dekódovanie
  3. Vykonajte
  4. Spätný zápis

Horný sivý rámček je zoznam inštrukcií čakajúcich na vykonanie, dolný sivý rámček je zoznam inštrukcií, ktoré boli dokončené, a stredný biely rámček je pipeline.

Vykonávanie je nasledovné:

Čas

Vykonávanie

0

Na vykonanie čakajú štyri inštrukcie

1

  • zelená inštrukcia sa načíta z pamäte

2

  • zelená inštrukcia je dekódovaná
  • fialová inštrukcia sa načíta z pamäte

3

  • vykoná sa zelená inštrukcia (vykoná sa skutočná operácia)
  • fialová inštrukcia je dekódovaná
  • načíta sa modrá inštrukcia

4

  • výsledky zelenej inštrukcie sa zapíšu späť do súboru registrov alebo pamäte
  • vykoná sa fialová inštrukcia
  • modrá inštrukcia je dekódovaná
  • načíta sa červená inštrukcia

5

  • zelený pokyn je splnený
  • fialový pokyn sa zapíše späť
  • vykoná sa modrá inštrukcia
  • červený pokyn je dekódovaný

6

  • Fialová inštrukcia je dokončená
  • modrý pokyn sa zapíše späť
  • vykoná sa červená inštrukcia

7

  • modrý pokyn je dokončený
  • červený pokyn sa zapíše späť

8

  • červený pokyn je splnený

9

Vykonávajú sa všetky pokyny

Bublina

Keď dôjde k "zádrhnutiu" (prerušeniu) vykonávania, v potrubí sa vytvorí "bublina", v ktorej sa nič užitočné nedeje. V cykle 2 sa načítanie fialovej inštrukcie oneskorí a dekódovacia fáza v cykle 3 teraz obsahuje bublinu. Všetko za fialovou inštrukciou je tiež oneskorené, ale všetko pred fialovou inštrukciou pokračuje vo vykonávaní.

Je zrejmé, že v porovnaní s vyššie uvedeným vykonávaním bublina poskytuje celkový čas vykonávania 8 hodinových taktov namiesto 7.

Bubliny sú ako stall (oneskorenie), v ktorom sa pri načítaní, dekódovaní, vykonávaní a spätnom zápise nič užitočné nestane. Je to ako kód NOP (skratka pre No OPeration).

Príklad 1

Typickou inštrukciou na sčítanie dvoch čísel môže byť ADD A, B, C, ktorá sčíta hodnoty nachádzajúce sa v pamäťových miestach A a B a potom umiestni výsledok do pamäťového miesta C. V pipelínovom procesore by to pipeline kontrolér rozdelil na sériu úloh podobne ako:

LOAD A, R1 LOAD B, R2 ADD R1, R2, R3 STORE R3, C LOAD ďalšia inštrukcia

Miesta "R1" a "R2" sú registre v CPU. Hodnoty uložené v pamäťových miestach označených "A" a "B" sa načítajú (kopírujú) do týchto registrov, potom sa sčítajú a výsledok sa uloží do pamäťového miesta označeného "C".

V tomto príklade je pipeline trojstupňová - načítanie, vykonávanie a ukladanie. Každý z týchto krokov sa nazýva etapa pipeline.

V nepipelínových procesoroch môže naraz pracovať len jedna fáza, takže celá inštrukcia sa musí dokončiť skôr, ako sa začne ďalšia inštrukcia. V pipelined procesore môžu všetky fázy pracovať naraz na rôznych inštrukciách. Takže keď je táto inštrukcia vo fáze vykonávania, druhá inštrukcia bude vo fáze dekódovania a tretia inštrukcia bude vo fáze načítania.

Príklad 2

Aby sme lepšie pochopili tento koncept, môžeme sa pozrieť na teoretický trojstupňový plynovod:

Etapa

Popis

Zaťaženie

Čítanie inštrukcií z pamäte

Vykonajte

Vykonanie pokynu

Obchod

Uloženie výsledku do pamäte a/alebo registrov

a výpis pseudokódu zostavy, ktorý sa má vykonať:

LOAD #40, A ; načítanie 40 do A MOVE A, B ; kopírovanie A do B ADD #20, B ; pridanie 20 do B STORE B, 0x300 ; uloženie B do pamäťovej bunky 0x300

Takto by sa to vykonalo:

Hodiny 1

Zaťaženie

Vykonajte

Obchod

LOAD

 

 

Inštrukcia LOAD sa načíta z pamäte.

Hodiny 2

Zaťaženie

Vykonajte

Obchod

MOVE

LOAD

 

Vykoná sa inštrukcia LOAD, zatiaľ čo inštrukcia MOVE sa načíta z pamäte.

Hodiny 3

Zaťaženie

Vykonajte

Obchod

ADD

MOVE

LOAD

Inštrukcia LOAD je vo fáze Store, kde sa jej výsledok (číslo 40) uloží do registra A. Medzitým sa vykonáva inštrukcia MOVE. Keďže musí presunúť obsah A do B, musí počkať na ukončenie inštrukcie LOAD.

Hodiny 4

Zaťaženie

Vykonajte

Obchod

SKLAD

ADD

MOVE

Inštrukcia STORE sa načíta, zatiaľ čo inštrukcia MOVE sa dokončuje a inštrukcia ADD sa počíta.

A tak ďalej. Všimnite si, že niekedy bude inštrukcia závisieť od výsledku inej inštrukcie (ako napríklad náš príklad MOVE). Ak sa na určité miesto operandu odvoláva viac ako jedna inštrukcia, a to buď na čítanie (ako vstup), alebo na zápis (ako výstup), vykonanie týchto inštrukcií v inom poradí, ako je pôvodné poradie programu, môže viesť k nebezpečnej situácii (uvedenej vyššie).

Všeobecný 4-stupňový potrubný rad; farebné rámčeky predstavujú navzájom nezávislé inštrukcieZoom
Všeobecný 4-stupňový potrubný rad; farebné rámčeky predstavujú navzájom nezávislé inštrukcie

Bublina v cykle 3 oneskoruje vykonanieZoom
Bublina v cykle 3 oneskoruje vykonanie

Súvisiace stránky

  • Potrubie (výpočtová technika)
  • Paralelné výpočty
  • Paralelizmus na úrovni inštrukcií

Otázky a odpovede

Otázka: Čo je to pipelining inštrukcií?


Odpoveď: Instruction pipelining je technika používaná pri návrhu moderných mikroprocesorov, mikrokontrolérov a CPU na zvýšenie ich priepustnosti inštrukcií rozdelením spracovania inštrukcie CPU do série nezávislých krokov s ukladaním na konci každého kroku.

Otázka: Ako funguje pipelining?


Odpoveď: Pipelining funguje tak, že logika sa rozdelí na menšie časti a medzi časti logiky sa vložia flip flopy, čím sa skráti čas potrebný na dekódovanie hodnôt logikou až po generovanie platných výstupov v závislosti od týchto hodnôt. To umožňuje rýchlejšie taktovanie.

Otázka: Aké sú príklady pipelines?


Odpoveď: Príkladom pipeline je pipeline RISC, ktorá je rozdelená na päť stupňov so sadou flip flopov medzi každým stupňom.

Otázka: Ako pipelining zvyšuje priepustnosť inštrukcií?


Odpoveď: Pipelining zvyšuje priepustnosť inštrukcií tým, že umožňuje paralelnú prácu modulov procesora, čo skracuje čas nečinnosti počas cyklu inštrukcií a zvyšuje celkový čas spracovania.

Otázka: Je každá pipeline plne pipelínová?


Odpoveď: Nie, nie každá pipeline je plne pipelined; niektoré pipeline majú čakacie cykly, ktoré oneskorujú postup v pipeline.

AlegsaOnline.com - 2020 / 2023 - License CC3