Výrok „Počítač je pouze tak inteligentní jako jeho uživatel.“ (Radek Lochman, dnes)
O co jde? instrukce je rozdělena do několika stupňů každý je vykonáván v rozdílném hodinovém cyklu nejčastější je pětistupňová pipeline stupně 1) výběr instrukce (čtení operačního znaku) 2) dekódování 3) výběr operandů 4) vykonávání (provedení operace) 5) zápis výsledku některé pozdější procesory mají až desetistupňovou pipeline
Zpracování instrukce
Pipelining po pěti hodinových cyklech je instrukce č. 1 hotová, instrukce 2 má jeden cyklus do dokončení... instrukce 5 proběhla prvním stupněm takto je možné snadno vyřešit problém s nedostatečnou rychlostí elektronů a zvýšit tak frekvenci čipu výsledný výpočetní výkon je totiž stejný bez ohledu na to, kolik stupňů pipeline má - vždy v jednom cyklu dojde k dokončení jedné instrukce
Popis zkratek VI – výběr instrukce DI – dekódování instrukce VO – výběr operandu PO – provedení operace ZV – zápis výsledku
Rozdělení existují tři možnosti zpracování instrukce : 1) bez použití pipeline (klasicky sekvenčně) 2) s předvýběrem instrukce 3) s plným použitím pipeline
Bez pipeline každá instrukce začíná teprve až předchozí skončí malá efektivnost
S předvýběrem instrukce při dokončování předchozí instrukce se už vybírá ta následující stále ne příliš efektivní
Plný pipeline všech pět operací probíhá současně v pěti různých sekcích během každého taktu je vždy čtena následující instrukce a také vytvořen nový výsledek průměrná doba provedení jedné instrukce je 1 takt => efektivní!!!
Nevýhoda Pipelining má bohužel i stinné stránky : datové závislosti instrukcí –jedna instrukce potřebuje data, která jsou výsledkem instrukce předchozí. –to může při pipelingovém způsobu zpracování trvat několik cyklů => zdržení instrukce nezná adresu paměti, odkud má přečíst data –adresa je výsledkem předchozí instrukce instrukce podmíněného skoku –narušení přednačítaných instrukcí => neví, která instrukce bude následovat delší pipeline => víc takovýchto "příhod" vznikají prázdná místa ("bublinky") => snížení výkonu
Řešení nevýhod pipeline řešení datových závislostí mezi datově závislé instrukce vložíme jednu nebo několik datově nezávislých procesor bude stále využit => nedojde ke zdržení řešení podmíněných skoků musíme zajistit, aby se do fronty instrukcí zařazovaly ty instrukce, které se poté skutečně budou provádět a abychom nemuseli v případě špatného výběru frontu instrukcí mazat existují tři řešení : 1) bit predikce skoku 2) zpoždění instrukce skoku 3) použití paměti skoku
Řešení podmíněných skoků bit predikce skoku v každé skokové instrukci je rezervován jeden bit, který definuje, zda podmínka bude či nebude splněna. Tento bit se nastavuje buď předem (kompilátor či programátor vyhodnotí, co bude pravděpodobnější) a nebo během programu (při prvním provedení se nastaví podle toho, zda skok byl či nebyl proveden) vylepšením může být použití dvou bitů místo jednoho (odstraní jedno chybné rozpoznání) zpoždění instrukce skoku čtení instrukce z paměti je výrazně delší než z fronty instrukcí, proto se do fronty načte určitý počet instrukcí jak pro splněnou tak pro nesplněnou podmínku a teprve po vyhodnocení podmínky se provádí ta správná větev použití paměti skoků do této paměti se ukládají instrukce, na které v poslední době směřoval skok paměť je typu FIFO, tedy zaplňuje se cyklicky stále novými instrukcemi při každém skoku, který ještě v paměti nebyl