Princip činnosti počítače

Počítač se skládá obvykle z:

pamětí

registrů: obecné užití, ukazatel na přistí instrukci atd.

řídicí logiky (instrukčního řadiče)

ALU (Aritmeticko-logická jednotka, výpočetní operace)

rozhraní (práce se sběrnicí)

další věci typu FPU atd.

Procesor instrukci zpracovává v několika krocích. Základní kroky jsou:

načtení instrukce z paměti podle instruction pointeru

dekódování instrukce (co to bude dělat)

načtení operandů

vykonání instrukce

uložení výsledků (např. do registrů)

Řetězené zpracování instrukcí

Pipeline (computing)

Mějme model, kdy počítač používá tři základní moduly při zpracování instrukce: fetch, decode, execute, tedy 3 moduly. Pokud bychom měli vykonat 4 takovéto cykly, zabralo by nám to 12 taktů.1) Pro zjednodušení uvažujme že co operace, to takt

F	D	E	F	D	E	F	D	E	F	D	E

Pokud se zamyslíme, uvědomíme si, že každý modul je 2 ze 3 taktů nevyužit. Pokud bychom tedy zpracovávali instrukce „paralelně“, namísto za sebou, určitě bychom dosáhli zrychlení.

F	D	E
F	D	E
F	D	E
F	D	E

A taky že ano, najednou nám vykonání 4 instrukcí zabralo jen 6 taktů.

Vzorec pro získání počtu potřebných kroků při použití paralelních pajplajn je x+n−1, kde x je počet instrukcí a n je počet kroků potřebných pro vykonání jedné instrukce. Zrychlení oproti nezřetězenému je jednoduše poměrem počtu před a po zrychlení. Vychází tedy zrychlení <m>{x n}/{x+n-1}</m>, tedy v tomto případě dvojnásobné zrychlení. Při velkém množství instrukcí se zrychluje až Nkrát (tady třikrát).

Zřetězené zpracování neurychlí zpracování jednotlivých instrukcí (ve skutečnosti tomu může být právě naopak, z důvodu většího množství elektroniky která zřetězení umožní), ale zvýší rychlost průtoku skupiny instrukcí. Problémem při zřetězeném zpracování jsou instrukce skoku. Ty způsobují, že je nutné obsah celého pipeline zahodit a načíst nové instrukce od adresy na kterou se skáče. K částečnému odstranění tohoto problému se využívá tzv. predikce skoku, co je jednoduché stavové řízení, které dekóduje instrukce nepodmíněného skoku již při jejich načtení do pipeline. Rovněž je problémem přerušení, které se často řeší tak, že se neobsluhuje okamžitě ale rovněž se zařadí do pipeline.

RISC

Reduced instruction set computing

Unifikovaný formát instrukcí – Vždy najdeme na stejných pozicích opcode a operand(y), což značně zjednodušuje dekódování instrukcí.

V jednom taktu se provádí jedna instrukce.

Identické registry, takže můžeme použít kterýkoliv z nich k čemukoliv chceme.

Jednoduché adresování – používá výhradně instrukcí LOAD a STORE.

Málo datových typů v hardwaru.

Novější koncepce procesorů. Vychází z rozvoje překladačů a vysokoúrovňových jazyků, které ale omezují využití pokročilejších instrukcí CISC procesorů (překládač nedokáže kód tak dobře optimalizovat). V základě jde o to, že RISC má méně a jednodušších instrukcí, ale zato se provádí rychleji (ideálně všechny v jednom taktu) a tím usnadňují vývoj software ve vysokoúrovňovém jazyce. Řadič instrukcí pak nemusí obsahovat mikroprogram, ale je řešen pevnou logikou, co umožňuje větší frekvence. Rovněž zlepšují možnosti návrhu zřetězeného zpracování a zjednodušují návrh paralelismu. Procesory RISC mají většinou méně tranzistorů, což umožňuje přidat více registrů.

RISC procesory mají nedestruktivní instrukce: výsledek operace se dává do jiného registru, než operandy. Používají se sady registrů např. k přepínání kontextu. Podprogram používá svoje registry, v původních tedy zůstavají data, která tam byla před skokem. Sady registrů jsou drahé.

Dnes najdeme procesory RISC především v embeded zařízeních:

ARM – iPod, iPad, iPhone, Nintendo DS, smartphony (prakticky všechny od HTC s Androidem používající procesory od Qualcommu)

MIPS – Playstation 1, 2 a Portable, routery (WRT-based)

Power (IBM, Freescale) – Wii, Playstation 3, Xbox 360

SPARC

Alpha

Atmel AVR

CISC

Complex instruction set computing

Původní přístup k činnosti procesoru. Programy byly vytvářeny v assembleru ručně, co vedlo na vytváření komplikovaných a snadno použitelných instrukcií, různé adresové režimy, kombinované instrukce a pod. To dává velké možnosti optimalizace kódu a poskytuje obrovskou rýchlost pro výpočet. Nevýhodou je, že kromě rozsahu instrukčního souboru trvá provedení každé instrukce různou dobu, co vede při použití pipeline na velkou složitost řadiče. Ten je při CISC často tvořen dalším procesorem (mikrořadičem) obsahujícím vlastní mikroprogram (firmware). Při takto rozsáhlých instrukčních souborech je problém s překladem (překládač neumí využít všechny instrukce a adresové módy) což vedlo na zavedení architektury RISC. Aktuálně jsou dostupné procesory, které kombinují rysy obou přístupů (RISC i CISC).

Mikroprogram

Každá složitější instrukce v CISC architekturách je rozložena na posloupnost tzv. mikroinstrukcí mikroprogramu, které jsou pak provedeny. Pro každou instrukci byl dříve mikroprogram, dnes je v CISC architekturách trend jednoduché instrukce převádět také na logické obvody, jako je tomu v RISC (kvůli rychlosti). Složitější instrukce jsou ale stále řešeny přes mikroprogram, protože implementace každé takové instrukce přes logické obvody by byla drahá a CISC počítače (PC) jsou určeny pro levnější cenovou třídu. Mikroprogram je uložený v ROM paměti. Výhoda mikroprogramu je také to, že přidání dalších instrukcí procesoru (přechod na vyšší verzi) znamená přidání mikroprogramu pro tuto instrukci, netřeba měnit obvody.

Shrnutí (na co nezapomenout)

CPU - vykonává instrukce

registry - obecný instruction pointer

paměť - uchovává data

rozhraní a periferie

každá instrukce má několik kroků (různé moduly): načtení instrukce, dekódování, načtení operandů, vykonání instrukce, uložení výsledku

zřetězené zpracování - souvislé využití všech modulů (např. načítání nové instrukce během dekódování aktuální), problémem je instrukce skoku, protože nevíme kam pokračovat, řešení např. prediktor

CISC - orientovaný na vytváření programu v assembleru, komplikované instrukce, různé režimy, složité instrukce jsou mikroprogramy (rozloží se na posloupnost jednoduchých instrukcí)

RISC - novější koncepce, snadněji se na ni překládá, unifikovaný formát instrukcí (vykonání trvá vždy stejně dlouho, jednodušší zřetězené zpracování), všechny registry jsou identické (univerzální), jednoduché adresování pomocí instrukcí LOAD/STORE (jediné dvě instrukce, které můžou manipulovat s pamětí), sady registrů (snažší přepínání kontextu), používá se hlavně v embedded zařízeních (např. architektura ARM)

Co je třeba vědět kdyby se zeptali

vědět co je instruction pointer, jak funguje a pod.

xn/(x+n-1) - zrychlení při použití pipeliningu, x je počet instrukcí, n je počet kroků na jednu instrukci

prediktor - jednobitový nebo více bitový, informace o tom, zda se naposledy skákalo nebo ne, u dalšího skoku lze očekávat totéž, využívají to překladače

problém přerušení při pipeliningu - nepřeruší se po aktuální instrukci, ale zařadí se do pipeline

RISC mají nedestruktivní instrukce, tj. výsledek operace je v jiném registru než operandy

CISC má složitý pipelining kvůli různému trvání instrukcí

existují i cpu s prvkama CISC i RISC kvůli zrychlení

mikroprogram je pomalejší než log. obvody, které jsou dražší