OBSAH WEBU
ČTĚTE!
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
temata:07-princip_cinnosti_pocitace:main [2011/03/29 14:19] ofeig [Zdroje] |
temata:07-princip_cinnosti_pocitace:main [2013/02/20 13:35] (aktuální) marho [CISC architektura] |
||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
- | ===== Princip činnosti počítače ===== | + | ~~ODT~~ |
- | Obecně lze princip činnosti počítače může být dvojí: | + | |
- | * analogový počítač, který zpracovává analogová data (obvykle úzká specializace na jednu úlohu) | + | |
- | * **číslicový počítač**, který zpracovává digitální data | + | |
- | Číslicový počítač lze snadno zkonstruovat jako univerzální počítač. Č.p. s určitými minimálními schopnostmi umí provést totéž co libovolný jiný počítač, proto jsou dnes kontruovány především číslicové počítače, protože jsou rychlejší a přesnější. Zpracovávají logické a číselné hodnoty. Operace jsou prováděny v aritmetické jednotce jedna za druhou. Hodnoty i program jsou uloženy v operační paměti na část pro data a program (Hardvardská architektura). | + | |
- | Základní části počítače: | + | |
- | * aritmeticko-lofická jednotka (ALU) | + | |
- | * pamět | + | |
- | * řadič | + | |
- | * periferní zařízení | + | |
+ | ====== 07 - Princip činnosti počítače ====== | ||
+ | |||
+ | ===== Obecné informace ===== | ||
+ | |||
+ | * **počítač** | ||
+ | * vymyslel Turing - 30. léta | ||
+ | * 1. počítač - ENIAC (1946), 2. počítač - EDVAC (1952) | ||
+ | * __dnes:__ je v informatice elektronické zařízení, které zpracovává data pomocí **předem vytvořeného programu** | ||
+ | * data ovládají hardware => lze přeprogramovat pro jinou činnost | ||
+ | * **algoritmus** | ||
+ | * je přesně definovaná konečná posloupnost příkazů (které jsou vybírány z předem definované konečné množiny elementárních příkazů), jejichž prováděním pro každé přípustné vstupní hodnoty získáme po konečném počtu kroků odpovídající hodnoty výstupní | ||
+ | - aplikačně specifický číslicový obvod - optimalizovaný, výkonný pro jeden algoritmus ... dlouho se navrhuje, je drahý | ||
+ | - program pro procesor - univerzální pro více algoritmů, nízká cena ... výkonnost nemusí být dostačující | ||
+ | * **komponenty HW** | ||
+ | - __datové struktury__ - registry (proměnné) | ||
+ | - __řídící struktury__ | ||
+ | - //sekvence// - komponenty seřazeny za sebou | ||
+ | - //selekce// - multiplexor | ||
+ | - //iterace// - čítač a řídící automat | ||
+ | - //rekurze// - NEJDE vyřešit v HW | ||
+ | |||
+ | {{ :temata:07-princip_cinnosti_pocitace:ridici_struktury.jpeg?600 |Řídící striktury}} | ||
+ | |||
+ | * **procesor** | ||
+ | * obvodová realizace algoritmu, který dokáže vykonávat libovolné programy (algoritmy), sestavené z předem definovaných elementárních operací (instrukcí) | ||
+ | * vykoná **program**, který je uložen od zadané adresy v paměti | ||
+ | * program transformuje data, uložená na zadané adrese v paměti, na jiná data, jejichž nové umístění musí být rovněž specifikováno | ||
+ | * programy jsou uloženy v paměti jako posloupnosti instrukcí, vykonávají se sekvenčně | ||
+ | * [[temata:03-sekvencni_obvody:main|sekvenční]] (obvykle) synchronní číslicový obvod | ||
+ | * **hlavní komponenty procesoru** | ||
+ | - __programový čítač__ - PC | ||
+ | * určuje adresu, kde se nachází následující instrukce | ||
+ | * po //resetu// dochází k inicializaci procesoru a mj. je definován obsah PC (např. PC = 0003h) | ||
+ | - __instrukční registr__ - IR | ||
+ | * uchovává právě zpracovávanou instrukci | ||
+ | * //neviditelný registr//, v podstatě se jedná o aktuální stav konečného automatu | ||
+ | - __řadič__ | ||
+ | * řídí činnost procesoru - vykonává instrukce | ||
+ | * konečný automat - FSM (konečný stavový stroj) | ||
+ | - __aritmeticko-logická jednotka__ - ALU | ||
+ | * slouží k provádění matematických operací | ||
+ | * převádí vstup na výstup | ||
+ | - __I/O jednotka__ | ||
+ | * umožňuje vstup a výstup dat do/z procesoru (obvykle do jeho registrů) i jinak než pouze skrz paměť | ||
+ | * TODO | ||
+ | - __registry__ | ||
+ | * klopné obvody, které ochovávají informace po dobu napájení | ||
+ | * **Program a jeho uložení** | ||
+ | - __Harwardská koncepce procesoru__ | ||
+ | * paměť pro data a programy je oddělena | ||
+ | - __Von Neumannova (princetonská) koncepce procesoru__ | ||
+ | * společná paměť pro data a programy | ||
+ | |||
+ | <note> | ||
+ | **Ještě tu dodávám tuto poznámku:** | ||
+ | {{ :temata:07-princip_cinnosti_pocitace:usporadani_bytu.jpeg?600 |Uspořádání bytů}} | ||
+ | </note> | ||
+ | |||
+ | * **rozhraní procesoru** | ||
+ | - __RESET__ - definuje obsah PC a inicializuje procesor | ||
+ | - __CLK__ - hodinový signál (v INP jsme řešili pouze synchronní procesory a obvody) | ||
+ | - __adresová sběrnice__ - je připojena na paměť (procesor generuje adresy pro paměť) | ||
+ | - __datová sběrnice__ | ||
+ | - __řídící sběrnice__ | ||
+ | |||
+ | {{ :temata:07-princip_cinnosti_pocitace:procesor.jpeg?600 |Princip procesoru}} | ||
+ | |||
+ | * **vykonání instrukce** | ||
+ | * instrukce, která se vykoná je uložena v PC (programovém čítači) | ||
+ | * vykoná se obvykle v několika hodinových taktech | ||
+ | - __fetch - F__: načtení instrukce | ||
+ | - adresa určená obsahem PC je vystavena na adresovou sběrnici a je iniciováno čtení z paměti | ||
+ | - paměť dodá na datovou sběrnici kód instrukce, která se má vykonat | ||
+ | - instrukce je uložena do IR (instrukčního registru) | ||
+ | - __instruction decode - ID__: dekódování instrukce | ||
+ | - Instrukce je dekódována (tzn., že jsou nastaveny řídicí signály pro komponenty procesoru, které se podílí na vykonání instrukce – je např. vybrána operace sčítání a operandy ALU) | ||
+ | - __execute - E__: vykonání instrukce | ||
+ | - pokud instrukce vyžaduje pro své vykonání operand z paměti, musí být z příslušné adresy načten tento operand | ||
+ | - instrukce je vykonána (např. provede se sčítání), jsou nastaveny příznaky (např. přetečení) | ||
+ | - uloží se výsledek do registru, popř. se iniciuje zapsání výsledku do paměti | ||
+ | * pro další instrukci se určí nový obsah PC | ||
+ | * **obvodová realizace procesoru** | ||
+ | * při návrhu procesoru se vychází ze specifikace, která obsahuje požadavky na instrukční soubor, architekturu, šířku dat a adres, výkonnost, plochu na čipu, spotřebu atd. | ||
+ | * používali jsme (na příkladech, v projektu) tzv. __střádačovou architekturu__ - speciální registr střádač (acumulator) - do něj se ukládají výsledku z ALU (existuje i zásobníková, registrová a smíšená) | ||
+ | - __zásobníková__ - má zásobník a registr SP (Stack pointer) a používají se operace PUSH m_a, POP m_a, nejsou registry | ||
+ | - __registrová__ | ||
+ | * sada registrů - připojeny k ALU + sada FP (plovoucí řádová čárka) registrů - připojeny k FPU (operace v plovoucí řádové čárce) | ||
+ | * ADD R1, R2, R3 | ||
+ | |||
+ | |||
+ | {{ :temata:07-princip_cinnosti_pocitace:architektury.jpeg?600 |Architektury procesoru}} | ||
+ | |||
+ | <note tip> | ||
+ | **Mluvili jsme často o stavu vysoké impedance. Na INP to vysvětloval a na netu jsem našel obrázek:** | ||
+ | {{ :temata:07-princip_cinnosti_pocitace:princip_tristavoveho_budice.jpg?600 |Třístavový budič}} | ||
+ | **Vysokou impedanci značí první obrázek => zařízení je odpojeno. Pokud by byly zapojeny oba spínače, nastal by zkrat.** | ||
+ | |||
+ | **=> __Třístavový budič__ => používá se například u sběrnic, pamětí, ...** | ||
+ | </note> | ||
+ | |||
+ | * **nepřímé adresování** | ||
+ | * například ACC = M[M[123]] => do akumulátoru vlož obsah paměti s adresou, která je uložena v paměti na adrese 123 | ||
+ | * potřebujeme registr IAR, který nám zjistí a uschová přímou | ||
+ | * IAR proto má: | ||
+ | - výstup na adresovou sběrnici => pošle adresu do paměti (123) | ||
+ | - vstup z datové sběrnice => přijde mu obsah z paměti daný adresou 123 => adresa obsahu, který chceme nahrát do akumulátoru | ||
+ | |||
+ | {{ :temata:07-princip_cinnosti_pocitace:schema_procesoru.jpeg?600 |Schéma procesoru}} | ||
+ | |||
+ | * **klasifikace moderních procesorů** | ||
+ | * __parametr V__ - počet instrukcí, které se v jednom okamžiku vydají ke zpracování | ||
+ | * __parametr P__ - počet současně prováděných (rozpracovaných) instrukcí | ||
+ | - **subskalární procesory** - P = 1, V = 1 (286, 383) (bez zřetězeného zpracovaní) | ||
+ | - **skalární procesory** - P > 1, V = 1 - využívá řetězené zpracování (Pentium) (s zřetězeným zpracováním) | ||
+ | - **superskalární procesory** - P > 1, V > 1 (s zřetězeným zpracováním + multithreading/multicore) | ||
+ | * **Flynnova klasifikace procesorů** | ||
+ | * je založena na sledování počtu instrukčních a datových proudů v počítači | ||
+ | - jeden (single) instrukční resp. datový proud označujeme symboly SI resp. SD | ||
+ | - více než jeden proud (multiple) označujeme analogicky zkratkami MI resp. MD | ||
+ | * příklady: | ||
+ | * __SISD__ - von Neumannův počítač | ||
+ | * __SIMD__ - vektorový procesor - dva vektory (více čísel) sčítá jedna instrukce (např. grafická karta vykonává 1 instrukci na více datech[napr. pixelech]) | ||
+ | * __MISD__ - více počítačů zpracovává stejná data (řídicí počítač Space Shuttle) - stehný problém řeší více počítačů => bezpečnost (výsledek všech počítačů se porovnává a vybírá výsledná hodnota [např. většina počítačů musí mít stejný výsledek]) | ||
+ | * __MIMD__ - multiprocesorový systém (více instrukcí zpracovává více dat) | ||
+ | * **Současné kategorie procesorů** | ||
+ | * Univerzální (Intel, AMD, HP, IBM, ...) | ||
+ | * Grafické (Nvidia, ATI, Matrox, ...) | ||
+ | * Signálové (TI, Fujitsu, ...) | ||
+ | * Aplikační, např. pro mobilní telefony (Intel PXA250, ...) | ||
+ | * Multimediální (TI, Mpact, ...) | ||
+ | * Speciální (šifrovací, kompresní, např. pro MPEG-2, I/O, šachové, hrací, ...) | ||
+ | ===== Urychlování činnosti procesoru ===== | ||
* techniky urychlování výpočtu v HW | * techniky urychlování výpočtu v HW | ||
Řádek 57: | Řádek 180: | ||
* princip zřetězení se značně překrývá s principy procesorů RISC | * princip zřetězení se značně překrývá s principy procesorů RISC | ||
* základní myšlenka: | * základní myšlenka: | ||
- | <note>"V procesorech CIS používají složité strojové instrukce (CPI>>1) pouze špičkový programátoři, ale standartí rutiny kompilátoru je nepoužívají."</note> | + | <note>"V procesorech CISC používají složité strojové instrukce (CPI>>1) pouze špičkový programátoři, ale standartí rutiny kompilátoru je nepoužívají."</note> |
<note tip>**CPI** = průměrný počet taktů na jednu instrukci</note> | <note tip>**CPI** = průměrný počet taktů na jednu instrukci</note> | ||
* výhodnější by bylo implementovat pouze jednoduché, ale rychlé instrukce | * výhodnější by bylo implementovat pouze jednoduché, ale rychlé instrukce | ||
Řádek 93: | Řádek 216: | ||
* když jsou zapotřebí data z předcházející instrukce, která ještě není dokončena | * když jsou zapotřebí data z předcházející instrukce, která ještě není dokončena | ||
* {{:temata:07-princip_cinnosti_pocitace:datovy_konflikt.png|}} | * {{:temata:07-princip_cinnosti_pocitace:datovy_konflikt.png|}} | ||
- | * klasifikace | + | * klasifikace (nechť máme dve instrukce v pořadí (i, j)), Pozn. k významu (AAB: operace A se začne vykonávat před dokončením operace B) |
- | * //RAW// - Read After Write | + | * //RAW// - Read After Write (j se snaží o přečtení registru předtím, než do něj i zapíše, j pak dostává starou hodnotu) |
- | * //WAW// - Write After Write | + | * //WAW// - Write After Write (j se snaží zapsat do registru předtím, než do něj zapíše i, takže dojde k přepisu instrukcí i a instrukce j jakoby se nevykonala) |
- | * //WAR// - Write After Read | + | * //WAR// - Write After Read (j zapisuje do registru předtím, než ho i přečtě) |
* **Bypassing** | * **Bypassing** | ||
* poskytnutí mezivýsledku dřív než bude zapsán do registru | * poskytnutí mezivýsledku dřív než bude zapsán do registru | ||
Řádek 111: | Řádek 234: | ||
* experimenty bylo zjištěno, že četnost skoků v programech je značná - z toho se asi 83% povede | * experimenty bylo zjištěno, že četnost skoků v programech je značná - z toho se asi 83% povede | ||
* u skoků je třeba zrychlit zjištění cílové adresy (kam skočit), proto se používá malá cache pamět pro uložení cílových adres (//BTB// - Branch Target Buffer) | * u skoků je třeba zrychlit zjištění cílové adresy (kam skočit), proto se používá malá cache pamět pro uložení cílových adres (//BTB// - Branch Target Buffer) | ||
- | * u podmíněných skoků jsou navíc ještě vyhodnocovány podmínky, o jejich splnění je možné spelukovat **predikce skoků** - ta může být statická (kompilátor nastaví bit predikce) nebo dynamická (pomocí speciálního HW) | + | * u podmíněných skoků jsou navíc ještě vyhodnocovány podmínky, o jejich splnění je možné spekulovat **predikce skoků** - ta může být statická (kompilátor nastaví bit predikce) nebo dynamická (pomocí speciálního HW) |
* predikce (spekulace) probíhá podle předchozích směrů skoku (historii lze popsat binárním řetězcem několika bitů) | * predikce (spekulace) probíhá podle předchozích směrů skoku (historii lze popsat binárním řetězcem několika bitů) | ||
* nejjednodušší prediktor = **Jednobitový prediktor** | * nejjednodušší prediktor = **Jednobitový prediktor** | ||
* použí 1 bit z historie (tj. předchozí skok) a předpovídá následující | * použí 1 bit z historie (tj. předchozí skok) a předpovídá následující | ||
* {{:temata:07-princip_cinnosti_pocitace:jednobitovy_prediktor.png|}} | * {{:temata:07-princip_cinnosti_pocitace:jednobitovy_prediktor.png|}} | ||
- | * stav 0 = skok se minule neprovedl, předpověd je neskoč (-) | + | * stav 0 = skok se minule neprovedl, předpověď je neskoč (-) |
- | * stav 1 = skok se minile provedl => předpověd je skoč (+) | + | * stav 1 = skok se minile provedl => předpověď je skoč (+) |
* pokud je předpověd špatná musí být špatná větev programu ukončena a musí začít načítání instrukcí ze správné větve (je třeba aktualizovat BTB, to stojí několik taktů zřetězené linky) | * pokud je předpověd špatná musí být špatná větev programu ukončena a musí začít načítání instrukcí ze správné větve (je třeba aktualizovat BTB, to stojí několik taktů zřetězené linky) | ||
Zřetězené zpracování přináší urychlení výpočtu nejen v procesorech, ale i jiných číslicových obvodech (např. pro zpracování obrazu, bioinformatických dat apod.). | Zřetězené zpracování přináší urychlení výpočtu nejen v procesorech, ale i jiných číslicových obvodech (např. pro zpracování obrazu, bioinformatických dat apod.). | ||
- | Pokud použijeme zřetězené zpracování, musíme dodat řadu podpůrných oibvodů a řešit řadu nových problémů. | + | Pokud použijeme zřetězené zpracování, musíme dodat řadu podpůrných obvodů a řešit řadu nových problémů. |
Moderní procesory používají kromě zřetězení i další koncepty: | Moderní procesory používají kromě zřetězení i další koncepty: | ||
* superskalární architektury | * superskalární architektury | ||
- | * VLIW procesory | + | * VLIW procesory - má více ALU - tzn. může zároveň dělat více operací => k tomu slouží dlouhé instrukce |
* vektorové procesory | * vektorové procesory | ||
- | * multivlákonové procesory | + | * multivláknové procesory |
==== CISC architektura ==== | ==== CISC architektura ==== | ||
Řádek 134: | Řádek 257: | ||
* vysoká složitost instrukcí => nutný systematický návrh řadiče procesoru | * vysoká složitost instrukcí => nutný systematický návrh řadiče procesoru | ||
* vykonání strojové instrukce probíhá posloupností mikrooperací (předpepsána mikroinstrukcí v řídící paměti) | * vykonání strojové instrukce probíhá posloupností mikrooperací (předpepsána mikroinstrukcí v řídící paměti) | ||
- | * řidící paměti byly pevné (Read-Only Memory = ROM) a mnohem rychlejší než RAM | + | * řidící paměti byly pevné (Read-Only Memory = ROM) a mnohem rychlejší než RAM (je rychlejší načíst 1 složitou instrukci z RAM, která "obsahuje" 10 obyčených instrukcí, které se už načítají z napr. EEPROM než všech 10 instrukcí načítat z RAM) |
* díky vývoji mikrotechniky se řídící pamět přesuna na cache; to umožnilo držet krok s RISC architekturou | * díky vývoji mikrotechniky se řídící pamět přesuna na cache; to umožnilo držet krok s RISC architekturou | ||
* patří mezi nejvíce rozšířené (486, Pentium) | * patří mezi nejvíce rozšířené (486, Pentium) | ||
- | * ** !!! OBRAYEK procesor_cisc.gif ** | ||
* {{:temata:07-princip_cinnosti_pocitace:procesor_cisc.gif|}} | * {{:temata:07-princip_cinnosti_pocitace:procesor_cisc.gif|}} | ||
Řádek 146: | Řádek 268: | ||
CIS architektura (ilustrace z) http://www.wiki.sps-pi.com/index.php/CISC_architektura</note> | CIS architektura (ilustrace z) http://www.wiki.sps-pi.com/index.php/CISC_architektura</note> | ||
- | |||
<doodle single login|07> | <doodle single login|07> | ||
^ OK ^ !!! ^ | ^ OK ^ !!! ^ | ||
</doodle> | </doodle> | ||
+ | |||
+ | {{tag>ofeig george INP pocitac procesor}} | ||
~~DISCUSSION~~ | ~~DISCUSSION~~ |