Hazard (počítačová architektura) - Hazard (computer architecture)

V oblasti centrální procesorovou jednotku (CPU) designu , rizika jsou problémy s návodem k plynovodu v CPU microarchitectures kdy lze další instrukce není provádějí v následujícím hodinovém cyklu, a může potenciálně vést k nesprávným výsledkům výpočtů. Tři běžné typy nebezpečí jsou rizika spojená s daty, strukturální rizika a rizika kontroly (větvení).

Existuje několik metod používaných zabývat riziky, včetně potrubní stánky / potrubí bublání, operandů spedice a v případě out-of-order provedení , na scoreboarding způsobu a algoritmu Tomasulo .

Pozadí

Pokyny v zřetězeném procesoru se provádějí v několika fázích, takže v daném okamžiku se zpracovává několik pokynů v různých fázích kanálu, jako je načtení a provedení. Existuje mnoho různých mikroarchitektur potrubí s instrukcemi a instrukce mohou být prováděny mimo pořadí . Nebezpečí nastane, když dojde ke konfliktu dvou nebo více těchto simultánních (možná nefunkčních) pokynů.

Typy

Datová rizika

K datovým rizikům dochází, když pokyny, které vykazují závislost na datech, upravují data v různých fázích kanálu. Ignorování potenciálních datových nebezpečí může mít za následek rasové podmínky (také nazývané rasová rizika). Existují tři situace, ve kterých může dojít k datovému riziku:

  1. čtení po zápisu (RAW), skutečná závislost
  2. zapisovat po přečtení (WAR), závislost
  3. write after write (WAW), an output dependency

Čtení za čtením (RAR) není případem nebezpečí.

Zvažte dva pokyny i1 a i2 , přičemž i1 se vyskytne před i2 v pořadí programu.

Číst po zápisu (RAW)

( i2 se pokusí přečíst zdroj dříve, než do něj i1 zapíše) Nebezpečí dat po zápisu (RAW) odkazuje na situaci, kdy instrukce odkazuje na výsledek, který ještě nebyl vypočítán nebo načten. K tomu může dojít, protože i když je instrukce provedena po předchozí instrukci, předchozí instrukce byla zpracována pouze částečně prostřednictvím kanálu.

Příklad

Například:

i1. R2 <- R5 + R3
i2. R4 <- R2 + R3

První instrukce vypočítává hodnotu, která se má uložit do registru R2 , a druhá použije tuto hodnotu k výpočtu výsledku pro registr R4 . Avšak v potrubí , když jsou operandy načteny pro 2. operaci, výsledky z první ještě nebyly uloženy, a proto dojde k datové závislosti.

Závislost na datech nastává u instrukce i2 , protože závisí na dokončení instrukce i1 .

Psát po přečtení (VÁLKA)

( i2 se pokusí zapsat cíl před tím, než jej přečte i1 ) Nebezpečí zápisu po čtení (WAR) představuje problém se současným spuštěním.

Příklad

Například:

i1. R4 <- R1 + R5
i2. R5 <- R1 + R2

V jakékoli situaci se šancí, že i2 může skončit před i1 (tj. Se současným spuštěním), musí být zajištěno, že výsledek registru R5 nebude uložen dříve, než bude mít i1 šanci načíst operandy.

Psát po zápisu (WAW)

( i2 se pokusí zapsat operand před tím, než jej zapíše i1 ) V prostředí souběžného spuštění může dojít k riziku dat při zápisu (WAW) .

Příklad

Například:

i1. R2 <- R4 + R7
i2. R2 <- R1 + R3

Zpětný zápis (WB) i2 musí být odložen, dokud i1 nedokončí provádění.

Strukturální rizika

Strukturální nebezpečí nastane, když dvě (nebo více) instrukcí, které jsou již připravovány, potřebují stejný zdroj. Výsledkem je, že instrukce musí být pro část kanálu provedena spíše v sérii než paralelně. Strukturální nebezpečí se někdy označují jako nebezpečí zdrojů.

Příklad: Situace, kdy je více instrukcí připraveno vstoupit do fáze provedení instrukce a existuje jedna ALU (aritmetická logická jednotka). Jedním z řešení tohoto nebezpečí zdrojů je zvýšit dostupné zdroje, například mít více portů do hlavní paměti a více jednotek ALU (aritmetická logická jednotka).

Nebezpečí kontroly (nebezpečí větví nebo pokyny)

Nebezpečí kontroly nastane, když kanál dělá nesprávná rozhodnutí o predikci větví, a proto přináší do kanálu pokyny, které musí být následně vyřazeny. Termín větvové nebezpečí také označuje kontrolní nebezpečí.

Eliminace nebezpečí

Obecný

Bublání potrubí

Bublání kanálu , také nazývané přerušení potrubí nebo zablokování potrubí , je metoda k vyloučení datových, strukturálních a větvových nebezpečí. Po načtení pokynů určuje logika řízení, zda by mohlo / mohlo dojít k nebezpečí. Pokud je to pravda, pak řídicí logika nevloží do kanálu žádné operace ( NOP s). Před provedením další instrukce (která by způsobila nebezpečí) bude tedy předchozí mít dostatek času na dokončení a prevenci nebezpečí. Pokud se počet NOP s rovná počtu stupňů v potrubí, procesor byl zbaven všech pokynů a může pokračovat bez nebezpečí. Všechny formy pozastavení zavádějí zpoždění, než procesor může pokračovat v provádění.

Proplachování kanálu nastane, když instrukce větve skočí na nové místo v paměti a zneplatní všechny předchozí fáze v kanálu. Tyto předchozí fáze jsou vymazány, což umožňuje potrubí pokračovat v nové instrukci označené větví.

Datová rizika

Existuje několik hlavních řešení a algoritmů používaných k řešení datových nebezpečí:

  • vložte pipeline bublinu, kdykoli narazíte na závislost čtení po zápisu (RAW), zaručeně zvýšíte latenci, nebo
  • použijte mimo pořadí provádění, abyste potenciálně zabránili potřebě bublin v potrubí
  • použijte předávání operandů k použití dat z pozdějších fází v potrubí

V případě provedení mimo pořadí může být použitým algoritmem:

Úkol odebrání závislostí dat lze delegovat na kompilátor, který může vyplnit vhodný počet instrukcí NOP mezi závislými instrukcemi, aby byla zajištěna správná funkce, nebo pokud je to možné, přeuspořádat pokyny.

Přesměrování operandů

Příklady

V následujících příkladech jsou vypočítané hodnoty tučně , zatímco čísla registrů nejsou.

Například zapsat hodnotu 3 do registru 1, (který již obsahuje 6), a pak přidat 7 do registru 1 a uložit výsledek do registru 2, tj .:

i0: R1 = 6
i1: R1 = 3
i2: R2 = R1 + 7 = 10

Po provedení by měl registr 2 obsahovat hodnotu 10 . Pokud však i1 (zápis 3 do registru 1) plně neopustí potrubí před spuštěním i2, znamená to, že R1 neobsahuje hodnotu 3, když i2 provede jeho přidání. V takovém případě i2 přidá 7 ke staré hodnotě registru 1 ( 6 ), takže registr 2 místo toho obsahuje 13 , tj .:

i0: R1 = 6
i2: R2 = R1 + 7 = 13
i1: R1 = 3

K této chybě dochází, protože i2 čte registr 1 předtím, než i1 potvrdí / uloží výsledek své operace zápisu do registru 1. Takže když i2 čte obsah registru 1, registr 1 stále obsahuje 6 , ne 3 .

Přeposílání (popsáno níže) pomáhá tyto chyby opravit podle toho, že výstup i1 (který je 3 ) lze použít následnými instrukcemi, než se hodnota 3 potvrdí / uloží do registru 1.

Přeposlání použité v příkladu znamená, že před zpřístupněním tohoto výstupu následující instrukci (v tomto případě i2) není čekání na potvrzení / uložení výstupu i1 v registru 1 (v tomto příkladu je výstup 3 ). Důsledkem je, že i2 používá správnou (novější) hodnotu registru 1: odevzdání / uložení bylo provedeno okamžitě a nepropojeno.

S povoleným předáváním má fáze Instruction Decode / Execution (ID / EX) kanálu dva vstupy: hodnota načtená ze zadaného registru (v tomto příkladu hodnota 6 z registru 1) a nová hodnota registru 1 (v tomto příkladu je tato hodnota 3 ), která je odeslána z další fáze Execute Execute / Memory Access (EX / MEM). Přidaná řídicí logika se používá k určení, který vstup se má použít.

Řízení nebezpečí (nebezpečí větví)

Mikroarchitektury se mohou vyhnout rizikům kontroly:

  • vložit plynovou bublinu (popsanou výše), která zaručeně zvýší latenci , nebo
  • použijte predikci větve a v zásadě proveďte poučné odhady, které pokyny vložit, v takovém případě bude bublina potrubí nutná pouze v případě nesprávné predikce

V případě, že větev způsobí bublinu potrubí poté, co do potrubí vstoupily nesprávné pokyny, je třeba dbát na to, aby jakékoli nesprávně načtené pokyny neměly žádný vliv na stav procesoru, s výjimkou jejich zbytečného zpracování, než byly objeveny nesprávně načteno.

Další techniky

Latence paměti je dalším faktorem, kterému se návrháři musí věnovat, protože zpoždění by mohlo snížit výkon. Různé typy paměti mají různou dobu přístupu do paměti. Tedy výběrem vhodného typu paměti mohou návrháři zlepšit výkon zřetězené datové cesty.

Viz také

Reference

Všeobecné

externí odkazy