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> | ||
+ | |||
+ | 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 " | ||
+ | |||
+ | | 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 // | ||
+ | |||
+ | 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í, | ||
+ | |||
+ | ===== RISC ===== | ||
+ | [[wp> | ||
+ | |||
+ | * 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í '' | ||
+ | * 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 [[# | ||
+ | |||
+ | 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> | ||
+ | |||
+ | 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í, | ||
+ | |||
+ | ==== Mikroprogram ==== | ||
+ | Každá složitější instrukce v CISC architekturách je rozložena na posloupnost tzv. mikroinstrukcí mikroprogramu, | ||
+ | |||
+ | ===== 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í, | ||
+ | * zřetězené zpracování - souvislé využití všech modulů (např. načítání nové instrukce během dekódování aktuální), | ||
+ | * 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á, | ||
+ | |||
+ | ==== 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, | ||
+ | * 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žší |