Uživatelské nástroje

Nástroje pro tento web


pitel:isz:princip_cinnosti_pocitace

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.


pitel:isz:princip_cinnosti_pocitace [30. 12. 2022, 13.43:01] (aktuální) – vytvořeno - upraveno mimo DokuWiki 127.0.0.1
Řádek 1: Řádek 1:
 +====== 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í =====
 +[[wp>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ů.((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 =====
 +[[wp>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 =====
 +[[wp>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žší