Proudové zpracování informace
Při zpracování dat či informací je vykonávána posloupnost velmi jednoduchých úkonů seřazených tak, že na sebe navazují a doplňují se. Jeden každý operand pak prochází řadou operací, ale každá operace se vykonává až poté, co jsou všechny předchozí operace ukončeny. Při průchodu operandu přes x různých bloků je však každý blok po dobu (x-1) časových úseků nevyužit. Příkladně operand přechází přes 4 bloky, takže je každý blok po dobu 3 časových úseků nevyužit. Časy průchodu přes jednotlivé bloky se sčítají, takže doba zpracování jednoho konkrétního operandu trvá : t = t1 + t2 + t3 + t4
Zpracovávání operandu ve 4 blocích
Zpracování operandu proudovou metodou Při vhodné konstrukci lze okamžitě po zpracování dat z prvého bloku předat tato zpracovávaná data do druhého bloku a začít zpracovávat v prvém bloku nová data atd.
Z toho vyplývá, že v každém časovém okamžiku se v každém bloku zpracovává jiný operand, který se po zpracování bude předávat do jiného bloku. Je to však možné jen za té podmínky, že rychlosti ve všech blocích budou stejné (synchronní zpracování) a čas bude odpovídat nejpomalejšímu bloku! Pak se tomuto zpracování informací říká proudové zpracování (pipelining). Bloky budeme dále pracovně nazývat sekce. Do těchto sekcí vstupují operandy a v daném bloku je v daný okamžik zpracovávána jedna úloha.
Platí sice i nadále, že průchod každého úkolu trvá dobu danou součtem jednotlivých časových úseků v tomto případě : t = t1 + t2 + t3 + t4 ale výsledná doba zpracování jedné instrukce se bude jevit podstatně kratší, takže i na 1 hodinový takt může být ukončeno zpracování 1 instrukce.
Prvé proudové zpracování se objevilo již v 50. letech u počítače UNIVAC. Poté se objevily počítače používající proudové zpracování na úrovni programu. Princip spočíval v tom, že se instrukce prováděly v několika vzájemně se překrývajících fázích. Počátkem 70. let se u sériově vyráběných počítačů používalo proudové zpracování na úrovni jednotlivých instrukcí. Proto byly vyvinuty proudové aritmetické jednotky provádějící značný počet stejných operací jdoucích jedna po druhé. Z tohoto důvodu se začaly používat speciální procesory pro zpracování vektorů a matic.
U procesorů řady Intel začalo nejjednodušší proudové zpracování procesorem 8086, který byl rozdělen na 2 samostatné, ale spolupracující části. Předvýběr tam zajišťuje část BIU (viz kapitolu Mikroprocesory řady 80x86). Díky tomuto kroku se výkon procesoru zvýšil cca o 35 % a díky 6 B frontě instrukcí o dalších 15 %. To z toho důvodu, že procesor nemusí čekat na předání instrukce, ale odebere si ji sám z fronty instrukcí maximální možnou rychlostí.
Rozklad strojových instrukcí Každou instrukci je možno rozložit na řadu kroků, které se realizují nezávisle na sobě. Příklad takovéhoto rozložení třeba pro aritmetickou instrukci, kde je třeba 2 operandů : · načtení instrukce z paměti (prefetch) - PR · dekódování instrukce (dekode) - DI · výpočet reálné adresy - VA · výběr 1. operandu - V1 · výběr 2. operandu - V2 · provedení operace (execute) - EX · zápis výsledku operace (write back) - WB · zvětšení obsahu registru adresy instrukce - A+1
Pokud počítač nepracuje proudově, začne počítač zpracovávat další instrukci až vykoná právě načtenou instrukci a to krok po kroku. V případě, že počítač pracuje proudově a jeho činnost je možno rozčlenit na 8 částí (sekcí), začnou se provádět operace ve sledu uvedeném na obrázku na další straně. Výsledkem je, že během 8 hodinových taktů se vykoná 1 instrukce, ale současně je na každý takt vykonána 1 instrukce. Takovéto maximální využití omezí například podmíněné skoky u nichž není předem znám výsledek. Přijde-li podmíněný skok a musí dojít ke skoku, pak se musí obsah všech bloků vymazat a nahrát nová data, která jsou dále proudově zpracovávána. To ale způsobuje zpomalení počítače.
Proudové zpracování v 8 sekcích
V praxi je tato problematika řešena pro ilustraci následovně V praxi je tato problematika řešena pro ilustraci následovně. Prakticky bez zásahu do struktury procesoru lze načítat dopředu instrukce a provádět tak překrytí. Tomu se pak říká předvýběr instrukce. Jednotka řídící předvýběr instrukce se nazývá instrukční jednotka a část, kde provádí vlastní operace se nazývá prováděcí jednotka (execution unit). Mezi tyto jednotky se vkládá fronta instrukcí, která vyrovnává rozdílné rychlosti zpracování jednotlivých instrukcí v obou jednotkách (viz následující obrázek).
Rozčlenění procesoru do dvou částí
Takováto fronta instrukcí je aplikována v procesoru 8086 Takováto fronta instrukcí je aplikována v procesoru 8086. Na obrázku je členění zpracování instrukce v procesoru 8086
Další členění je například u procesoru 80286, kde se dále instrukční jednotka člení na frontu instrukcí, dekodér a frontu dekódovaných instrukcí (mikroinstrukcí). Činnost je rozdělena tak, že se provádí předvýběr instrukcí, jejich zápis do fronty instrukcí, dekódování instrukcí a jejich zápis coby mikroinstrukcí do nové fronty připravené ke zpracování (následující obrázek). Tímto větším rozčlenění je vlastně umožněno rychlejší proudové zpracování, protože každá část má jednodušší úkol, který pak zpracuje mnohem rychleji a předá ho následující části.
Rozčlenění procesoru do tří částí
V případě podmíněných skoků se ve velmi výkonných počítačích používají 2 fronty instrukcí. Jedna hlavní a jedna vedlejší. Do hlavní fronty se vkládají instrukce bez větvení (včetně nepodmíněných skoků, které nejsou problémové), to je pro případ kdy není podmínka podmíněného skoku splněna. Do druhé vedlejší fronty se vkládají instrukce následující za podmíněným skokem, to je pro případ, kdy je podmínka podmíněného skoku splněna.
Platí, že jsou vybírány instrukce z té které fronty instrukcí podle splněné podmínky skoku. Pro ilustraci. Je-li podmínka splněna, začnou se instrukce vybírat z druhé fronty a hlavní fronta je vynulována a plněna obsahem druhé, vedlejší fronty atd. Tento systém má též některé prodlevy, ale ty jsou již podstatně menší než kdyby procesor čekal na natažení nových instrukcí z paměti.
Obecné principy proudového zpracování Aby mělo proudové zpracování v jednotlivých částech smysl (např. proudová sčítačka nebo násobička), musí být splněno několik podmínek : · velké množství opakovaně prováděných stejných operací · velké množství po sobě následujících operandů · neustálý odběr výsledků Proudové zpracování o kterém se doposud hovořilo je jednoduché a nazývá se též lineární. Dílčí výsledky se předávají v pevném pořadí jedním směrem (vždy do pevně dané sekce).
Proudové zpracování lze použít i v obecných úlohách, které mají tu vlastnost, že se jednotlivé operace provádí na základě určité podmínky. To umožňuje též xnásobné provádění určité operace. Opět jako příklad může sloužit proudově pracující jednotka s obecnou (variabilní) strukturou.
Tato jednotka je složena ze 3 sekcí, které jsou zavazbeny jak dopřednými, tak i zpětnými vazbami. Proto, aby každá sekce mohla přijímat operandy z různých míst má předřazen multiplexor, který je řízen řadičem jednotky. Podle toho jaké vazby jsou použity, lze pak takovouto proudově pracující jednotku s obecnou strukturou použít k provádění potřebných úloh.
Vektorové procesory Jak bylo již dříve řečeno proudové zpracování se uplatní jen v případě, že se provádí mnohonásobně stejná operace s různými operandy. Tento stav je běžný při zpracování vektorů. Jedná se o operace typu : for x := 1 to n do c(x) := a(x) + b(x) Může se však jednat o libovolné aritmetické či logické operace. Běžný univerzální počítač obsahuje mimo vlastní operace velké množství pomocných činností, které však zabírají většinu času. Proto jsou tyto úlohy i pro velmi rychlé počítače řešitelné jen v omezeném rozsahu. Z tohoto důvodu se používají speciální vektorové procesory a to buď sériové nebo paralelní.
Architektura má mimo aritmetické jednotky též skalární jednotky pro pevnou a pohyblivou řádovou čárku. Jednotky jsou připojeny na systém registrů, které zajišťují požadovanou rychlostí přísun dat a odběr výsledků. Existuje několik cest vývoje vektorových počítačů : · zdokonalování vnitřní struktury procesoru (hodinová frekvence, struktura atd.) · použitím několika procesorů, které řeší společnou úlohu · použitím vektorového koprocesoru v kombinaci se střediskovým univerzálním počítačem
Z výše uvedených možností se ukazuje cenově nejdostupnější vzhledem k výkonu poslední varianta - kombinace vhodného univerzálního počítače s vektorovým koprocesorem. V tomto případě koprocesor řeší úlohy vysokou rychlostí a obslužnou činnost to je řízení, skalární operace a styk s periferními zařízeními obstarává vhodný univerzální počítač.