Pokyn potrubí - Instruction pipelining

Základní pětistupňový plynovod
Hodinový cyklus
Instr. Ne.
1 2 3 4 5 6 7
1 LI ID EX MEM WB
2 LI ID EX MEM WB
3 LI ID EX MEM WB
4 LI ID EX MEM
5 LI ID EX
(IF = Instruction Fetch, ID = Instruction Decode, EX = Execute, MEM = Access access, WB = Register write back).

Ve čtvrtém hodinovém cyklu (zelený sloupec) je nejstarší instrukce ve fázi MEM a nejnovější instrukce ještě nevstoupila do kanálu.

Ve vědě o počítačích , instrukční zřetězení je technika pro provádění na úrovni instrukcí paralelismus v rámci jednoho procesoru. Pipelining se pokouší udržet každou část procesoru zaneprázdněnou nějakou instrukcí rozdělením příchozích instrukcí do řady po sobě jdoucích kroků (titulní „ pipeline “) prováděných různými procesorovými jednotkami s různými částmi instrukcí zpracovávaných paralelně.

Koncept a motivace

V zřetězeném počítači instrukce procházejí centrální procesorovou jednotkou (CPU) ve fázích. Může mít například jednu fázi pro každý krok cyklu von Neumanna : Načtěte instrukci, načtěte operandy, proveďte instrukci, zapište výsledky. Zřetězený počítač má po každé fázi obvykle „registry potrubí“. Ukládají informace z instrukcí a výpočtů, aby logické brány další fáze mohly udělat další krok.

Toto uspořádání umožňuje CPU dokončit instrukci o každém taktu. Je běžné, že stupně se sudým číslem pracují na jednom okraji hodin s obdélníkovými vlnami, zatímco stupně s lichým číslem pracují na druhém okraji. To umožňuje větší propustnost procesoru než vícejádrový počítač při dané frekvenci hodin , ale může to zvýšit latenci kvůli přidané režii samotného procesu pipeline. I když má elektronická logika pevnou maximální rychlost, lze zřetězený počítač zrychlit nebo zpomalit změnou počtu stupňů v potrubí. S více fázemi dělá každá fáze méně práce, a tak má fáze méně zpoždění od logických bran a mohla by běžet s vyšší rychlostí hodin.

Pipeline model počítače je často nejekonomičtější, když se cena měří jako logické brány na instrukci za sekundu. V každém okamžiku je instrukce pouze v jedné fázi pipeline a v průměru je fáze pipeline méně nákladná než vícekruhový počítač. Je-li vše dobře zpracováno, většina logiky počítačového kanálu se většinu času používá. Naproti tomu mimo provoz počítače obvykle mají v daném okamžiku velké množství logiky nečinnosti. Podobné výpočty obvykle ukazují, že zřetězený počítač používá méně energie na jednu instrukci.

Zřetězený počítač je však obvykle složitější a nákladnější než srovnatelný vícekolový počítač. Obvykle má více logických bran, registrů a složitější řídicí jednotku. Podobným způsobem může využívat více celkové energie a zároveň méně energie na jednu instrukci. Mimo pořadí mohou CPU obvykle provádět více instrukcí za sekundu, protože mohou provádět několik instrukcí najednou.

V zřetězeném počítači řídicí jednotka zařídí, aby tok začal, pokračoval a zastavil se jako programové příkazy. Data instrukce se obvykle předávají v registrech potrubí z jedné fáze do druhé, s poněkud oddělenou částí řídicí logiky pro každou fázi. Řídicí jednotka také zajišťuje, že instrukce v každé fázi nepoškodí činnost instrukcí v jiných fázích. Například pokud dvě fáze musí používat stejnou část dat, řídicí logika zajišťuje, že se použití provádí ve správném pořadí.

Při efektivním provozu bude mít zřetězený počítač instrukce v každé fázi. Poté pracuje na všech těchto pokynech současně. Může dokončit přibližně jednu instrukci pro každý cyklus svých hodin. Ale když program přepne na jinou posloupnost pokynů, potrubí někdy musí zahodit data v procesu a restartovat. Tomu se říká „stání“.

Velká část konstrukce zřetězeného počítače zabraňuje rušení mezi fázemi a omezuje stánky.

Počet kroků

Počet závislých kroků se liší podle architektury stroje. Například:

  • Projekt IBM Stretch z let 1956–61 navrhl termíny Fetch, Decode a Execute, které se staly běžnými.
  • Mezi klasické RISC potrubí obsahuje:
    1. Načtení instrukce
    2. Instrukce dekódujte a zaregistrujte načtení
    3. Vykonat
    4. Přístup do paměti
    5. Registrovat odepsat
  • Atmel AVR a PIC mikrokontrolér každý má dvoustupňový potrubí.
  • Mnoho návrhů zahrnuje potrubí až 7, 10 a dokonce 20 stupňů (jako u Intel Pentium 4 ).
  • Pozdější jádra „Prescott“ a „Cedar Mill“ Netburst od společnosti Intel, použitá v posledních modelech Pentium 4 a jejich derivátech Pentium D a Xeon , mají dlouhý 31stupňový plynovod.
  • Síťový procesor Xelerated X10q má potrubí dlouhé více než tisíc stupňů, i když v tomto případě 200 z těchto stupňů představuje nezávislé CPU s individuálně naprogramovanými pokyny. Zbývající fáze se používají ke koordinaci přístupů k paměti a funkčním jednotkám na čipu.

Protože je potrubí vytvořeno „hlouběji“ (s větším počtem závislých kroků), lze daný krok implementovat s jednoduššími obvody, které mohou nechat hodiny procesoru běžet rychleji. Takové potrubí lze nazvat superpipelíny.

Procesor je považován za plně pipeline, pokud dokáže načíst instrukci v každém cyklu. Pokud tedy některé instrukce nebo podmínky vyžadují zpoždění, které brání načítání nových instrukcí, procesor není plně pipeline.

Dějiny

Zásadní využití pipeline bylo v projektech ILLIAC II a IBM Stretch , ačkoli jednoduchá verze byla použita dříve v Z1 v roce 1939 a Z3 v roce 1941.

Pipelining začal vážně koncem sedmdesátých let v superpočítačích, jako jsou vektorové procesory a maticové procesory. Jedním z prvních superpočítačů byla řada Cyber ​​postavená společností Control Data Corporation. Jeho hlavní architekt, Seymour Cray , později vedl Cray Research. Cray vyvinul řadu superpočítačů XMP, využívající pipeline pro funkce multiplikace a add / subtract. Později společnost Star Technologies přidala paralelismus (několik zřetězených funkcí pracujících paralelně), vyvinutý Rogerem Chenem. V roce 1984 přidala společnost Star Technologies zřetězený dělící obvod vyvinutý Jamesem Bradleyem. V polovině 80. let minulého století potrubí používalo mnoho různých společností po celém světě.

Pipeline se neomezovala pouze na superpočítače. V roce 1976 měl sálový počítač pro všeobecné použití řady 470 společnosti Amdahl Corporation potrubí o 7 krocích a patentovaný obvod pro predikci větví.

Nebezpečí

Model postupného provádění předpokládá, že každá instrukce je dokončena před začátkem další; tento předpoklad není na zřetězeném procesoru pravdivý. Situace, kdy je očekávaný výsledek problematický, se označuje jako nebezpečí . Představte si následující dva pokyny k registraci hypotetickému procesoru:

1: add 1 to R5
2: copy R5 to R6

Pokud má procesor 5 kroků uvedených v úvodní ilustraci („základní pětistupňový kanál“ na začátku článku), instrukce 1 by byla načtena v čase t 1 a její provedení by bylo dokončeno v t 5 . Instrukce 2 by byla načtena v t 2 a byla by dokončena v t 6 . První instrukce by mohla uložit zvýšený počet do R5 jako svůj pátý krok (zápis zpětného zápisu) v t 5 . Ale druhá instrukce může dostat číslo z R5 (ke kopírování na R6) ve svém druhém kroku (dekódování instrukce a načtení registru) v čase t 3 . Zdá se, že první instrukce by do té doby nezvýšila hodnotu. Výše uvedený kód vyvolává nebezpečí.

Psaní počítačových programů v kompilovaném jazyce nemusí tyto obavy vzbudit, protože kompilátor může být navržen tak, aby generoval strojový kód, který se vyhne nebezpečím.

Řešení

V některých časných procesorech DSP a RISC dokumentace doporučuje programátorům, aby se těmto závislostem vyhýbali v sousedních a téměř sousedních instrukcích (nazývaných zpožďovací sloty ), nebo deklaruje, že druhá instrukce používá spíše starou hodnotu než požadovanou hodnotu (ve výše uvedeném příkladu procesor může intuitivně zkopírovat nezvýšenou hodnotu) nebo deklaruje, že hodnota, kterou používá, není definována. Programátor může mezitím mít nesouvisející práci, kterou může procesor dělat; nebo, aby byly zajištěny správné výsledky, může programátor vložit do kódu NOP , což částečně popírá výhody pipeline.

Řešení

Pipeline procesory běžně používají tři techniky k práci podle očekávání, když programátor předpokládá, že každá instrukce je dokončena před začátkem další:

  • Potrubí se může zastavit nebo zastavit plánování nových pokynů, dokud nebudou k dispozici požadované hodnoty. Výsledkem jsou prázdné sloty v potrubí nebo bubliny , ve kterých se neprovádí žádná práce.
  • Lze přidat další datovou cestu, která směruje vypočítanou hodnotu na budoucí instrukci jinde v potrubí, než bude instrukce, která ji vytvořila, plně vyřazena, proces zvaný předávání operandů .
  • Procesor dokáže vyhledat další instrukce, které nejsou závislé na aktuálních a které lze okamžitě provést bez nebezpečí, což je optimalizace známá jako provedení mimo pořadí .

Pobočky

Odbočka z normální posloupnosti instrukcí často zahrnuje nebezpečí. Pokud procesor nemůže provést větvi v jediném časovém cyklu, kanál bude pokračovat v načítání pokynů postupně. Nelze připustit, aby se tyto pokyny projevily, protože programátor přesměroval kontrolu na jinou část programu.

Podmíněná větev je ještě problematičtější. Procesor se může nebo nemusí větvit, v závislosti na výpočtu, který ještě nenastal. Různé procesory se mohou zastavit, mohou se pokusit předpovědět větev a mohou být schopny zahájit provádění dvou různých programových sekvencí ( dychtivé provedení ), přičemž každý předpokládá, že větev je nebo není přijata, a zahodí veškerou práci, která se týká nesprávného odhadu.

Procesor s implementací predikce větve, která obvykle dělá správné předpovědi, může minimalizovat výkonnostní trest z větvení. Pokud jsou však větve předpovídány špatně, může to pro procesor vytvořit více práce, například vyprázdnění z kanálu nesprávnou cestu kódu, která zahájila provádění, než obnoví provádění na správném místě.

Programy napsané pro zřetězený procesor se záměrně vyhýbají větvení, aby se minimalizovala možná ztráta rychlosti. Například programátor zvládne obvyklý případ se sekvenčním spuštěním a větví pouze při detekci neobvyklých případů. Použití programů, jako je gcov, k analýze pokrytí kódu umožňuje programátorovi měřit, jak často jsou konkrétní větve skutečně prováděny, a získat přehled o tom, jak optimalizovat kód. V některých případech programátor zvládne obvyklý i neobvyklý případ pomocí kódu bez větví .

Zvláštní situace

Samočinné úpravy programů
Technika samočinně se měnícího kódu může být na zřetězeném procesoru problematická. V této technice je jedním z účinků programu úprava vlastních nadcházejících pokynů. Pokud má procesor mezipaměť instrukcí , původní instrukce již mohla být zkopírována do vstupní fronty předběžného načtení a úprava se neprojeví. Některé procesory, jako je Zilog Z280, mohou konfigurovat své mezipaměti mezipaměti na čipu pouze pro načítání dat nebo jako součást svého běžného adresního prostoru paměti a těmto potížím se samy upravujícími pokyny vyhnou.
Nepřerušitelné pokyny
Instrukce může být nepřerušitelná, aby byla zajištěna její atomicita , například když zamění dvě položky. Sekvenční procesor umožňuje přerušení mezi instrukcemi, ale pipeline procesor překrývá instrukce, takže provedení nepřerušitelné instrukce způsobí nepřerušitelnost i částí běžných instrukcí. Cyrix koma chyba by viset jednojadrovým systému pomocí nekonečnou smyčku, ve které nepřerušitelný instrukce byla vždy v potrubí.

Úvahy o návrhu

Rychlost
Pipelining udržuje všechny části procesoru obsazené a zvyšuje množství užitečné práce, kterou může procesor v daném čase vykonat. Pipelining obvykle snižuje dobu cyklu procesoru a zvyšuje propustnost instrukcí. Rychlostní výhoda je snížena do té míry, že provádění naráží na rizika, která vyžadují spuštění, aby se zpomalilo pod ideální rychlost. Nepipelovaný procesor provádí najednou pouze jednu instrukci. Začátek další instrukce se odkládá nikoli na základě nebezpečí, ale bezpodmínečně.
Potřeba zřetězeného procesoru organizovat veškerou svou práci do modulárních kroků může vyžadovat duplikaci registrů, což zvyšuje latenci některých pokynů.
Ekonomika
Díky zjednodušení každého závislého kroku může pipeline umožnit složitější operace ekonomičtěji než přidávat složité obvody, například pro numerické výpočty. Procesor, který odmítá usilovat o zvýšení rychlosti pomocí pipeline, však může být jednodušší a levnější na výrobu.
Předvídatelnost
Ve srovnání s prostředím, kde se programátor musí vyhnout nebezpečím nebo obejít rizika, může použití nepipeline procesoru usnadnit programování a školení programátorů. Nepipeline procesor také usnadňuje předpovědět přesné načasování dané posloupnosti instrukcí.

Ilustrovaný příklad

Napravo je obecný kanál se čtyřmi fázemi: načítání, dekódování, provádění a zpětný zápis. Horní šedé pole je seznam instrukcí čekajících na provedení, spodní šedé pole je seznam pokynů, u nichž bylo jejich provedení dokončeno, a střední bílé pole je kanál.

Provedení je následující:

Obecné 4stupňové potrubí; barevné rámečky představují pokyny nezávislé na sobě
Hodiny Provedení
0
  • Na provedení čekají čtyři pokyny
1
  • Zelená instrukce je načtena z paměti
2
  • Zelená instrukce je dekódována
  • Fialová instrukce je načtena z paměti
3
  • Zelená instrukce je provedena (je provedena skutečná operace)
  • Fialová instrukce je dekódována
  • Načte se modrá instrukce
4
  • Výsledky zelené instrukce se zapíší zpět do souboru registru nebo do paměti
  • Purpurová instrukce je provedena
  • Modrá instrukce je dekódována
  • Načte se červená instrukce
5
  • Dokončení zelené instrukce je dokončeno
  • Fialová instrukce je zapsána zpět
  • Modrá instrukce je provedena
  • Červená instrukce je dekódována
6
  • Provedení fialové instrukce je dokončeno
  • Modrá instrukce je zapsána zpět
  • Červená instrukce je provedena
7
  • Provedení modré instrukce je dokončeno
  • Červená instrukce je zapsána zpět
8
  • Provedení červené instrukce je dokončeno
9
  • Provedení všech čtyř pokynů je dokončeno

Potrubí bublina

Bublina v cyklu 3 zpožďuje provedení.

Zřetězený procesor se může vypořádat s riziky zastavením a vytvořením bubliny v potrubí, což má za následek jeden nebo více cyklů, ve kterých se nestane nic užitečného.

Na obrázku vpravo, v cyklu 3, procesor nemůže dekódovat fialovou instrukci, snad proto, že procesor určuje, že dekódování závisí na výsledcích produkovaných provedením zelené instrukce. Zelená instrukce může pokračovat do fáze Execute a poté do fáze Write-Back podle plánu, ale fialová instrukce je pozastavena pro jeden cyklus ve fázi Fetch. Modrá instrukce, která měla být načtena během cyklu 3, je pozastavena pro jeden cyklus, stejně jako červená instrukce po ní.

Kvůli bublině (modré ovály na obrázku) jsou obvody dekódování procesoru nečinné během cyklu 3. Obvody Execute jsou nečinné během cyklu 4 a obvody zpětného zápisu jsou nečinné během cyklu 5.

Když se bublina posune z potrubí (v cyklu 6), obnoví se normální provedení. Ale teď je všechno o jeden cyklus pozdě. Úplné provedení čtyř barevně zobrazených pokynů bude trvat 8 cyklů (cyklus 1 až 8) namísto 7.

Viz také

Poznámky

Reference

externí odkazy