diff --git a/KIV POT/16. Architektury počítačů.md b/KIV POT/16. Architektury počítačů.md new file mode 100644 index 0000000..e1ca713 --- /dev/null +++ b/KIV POT/16. Architektury počítačů.md @@ -0,0 +1,128 @@ +# Architektury počítačů + +**Hierarchie paměťového systému** +- s rychlostí paměti roste její cena (rychlá paměť nemůže být velká) +- od nejrychlejších po nejpomalejší + - registry + - cache + - hlavní paměť + - virtuální paměť + - externí (disková) paměť + - archívní pásky + +**Cache** (plně asociativní) +- koncepce vychází z časové a prostorové lokality výpočtu + - referovaná adresa v paměti bude pravděpodobně použita opakovaně + - pravděpodobně bude použito i blízké okolí referované adresy +- cache obsahuje kopie naposled použitých slov paměti a okolních adres + - u každé položky v cache je i adresa hlavní paměti, odkud byla kopírována + +**Cache na principu rychlé SRAM** +- obvykle rozdělena na několik částí (cest) + - Tag, Index, Slovo + - část adresy z CPU (index) vybere řádku ve všech cestách současně + - zbytek adresy (tag) se porovná komparátory s adresou u dané řádky + - není-li shoda v žádném komparátoru, nahradí se celý blok ve zvolené cestě novými daty +- příklad uložení dat v jednocestné cache + - čtení z adresy `A1231C80` přepíše původní blok z adresy `50001C80` na indexu `1C8` + - dvoucestná cache by mohla mít `A1231C80` v jedné cestě a `50001C80` ve druhé +- příklad: situace cache hit + - cesta má na indexu `1C6` stejný tag jako je v adrese vystavené procesorem +- příklad: situace cache miss + - elektronika cache vybere některou z cest a nahradí data na indexu `1C6` daty z adresy `033E1C65` + +**Zápis do cache** +- Write Back + - data se zapisují jen do cache + - do RAM se zapíší až při výměně bloku za jiný +- Write Through + - data se zapisují do cache i do RAM + +**Problémy koherence** +- oba procesory mohou mít v cache kopii stejné adresy +- při změně obsahu jedním z nich je potřeba další kopie zneplatnit + - alternativa: neukládat sdílenou oblast paměti do cache + +**Paralelní výpočty** +- klasické rozdělené výpočtů podle způsobu provádění + - SISD (Single Instruction, Single Data) + - výpočet provádí jeden procesor jednoduchou operační jednotkou + - SIMD (Single Instruction, Multiple Data) + - výpočet provádí jeden procesor, několik stejných operačních jednotek provádí tutéž instrukci s různými daty + - MIMD (Multiple Instruction, Multiple Data) + - výpočet provádí několik procesorů, každý podle svého programu se svými daty + - Data Flow + - instrukce nejsou v programu zapsány sekvenčně, ale je dána množina požadovaných operací, které se provádí, jsou-li k dispozici požadovaná data + +**Proudové zpracování** (pipeline) +- každá instrukce postupně zpracovávána v několika stupních +- kompletní zpracování instrukce vyžaduje několik taktů CLK +- v procesoru je současně v různých fázích zpracováváno několik instrukcí +- v každém taktu procesor dokončí jednu instrukci +- problémy + - přístup k datům v paměti vyžaduje větší počet taktů + - instrukce skoku a podmíněných skoků naušují pipeline + +**Superskalární procesor** +- procesor provádí několik instrukcí současně + - má je ve frontě a rozpozná možnost paralelního provedení +- problémy s různě dlouhými instrukcemi +- instrukce mohou pracovat s nezávislými operandy +- vhodným pořadím instrukcí v programu (optimalizujícím překladačem) lze podpořit jejich paralelní provádění + +**Paralelismus na bázi mikrooperací** +- provádění mikrooperací v přeházeném pořadí (out of order) + - několik instrukcí paralelně rozloženo + - několik operačních jednotek (EU) provádí nezávislé mikrooperace v libovolném pořadí, pokud jsou k dispozici potřebné operandy + +**Podpora více vláken** +- každé vlákno provádí procesor s vlastní sadou registrů +- paralelně prováděné části programu (vlákna/procesy) určí programátor resp. operační systém + - vlákna (thread) - společné adresní prostory + - procesy (process) - oddělené adresní prostory + +**SMT** (Simultaneous MultiThreading) +- dvě nebo více vláken sdílí společné Execution Units (EU) + - výhoda: větší pravděpodobnost nezávislých mikrooperací +- každé vlákno pracuje se svým nezávislým logickým procesorem +- skutečné pracovní registry jsou součástí fytického procesoru + +**SMT: HyperThreading** (Intel) +- každé jádro schopno provádět 2 vlákna +- oba procesory maj společenou EU (Execution Unit) + - paralelní běh T1 || T2 je jiný než T1 || T3 + +### Charakteristiky procesorů Core i7 + +- obsahují několik jader +- každé vlákno může paralelně provádět 2 vlákna +- jádra mají společnou L3 cache +- na čipu trojnásobný kanál pro připojení DRAM +- pro komunikaci s dalšími procesory nebo vzdálenými DRAM slouží kanály (sběrnice) QPI (Quick Path Interconnect) + +**Stupně instrukcí v jádře** +- pořadí dané programem + - čtení instrukcí a řazení do fronty + - dekódování instrukcí + - současné ukládání 2 vláken do fronty +- pořadí out of order + - několik instrukcí paralelně rozloženo na mikrooperace + - několik operačních jednotek (EU) provádí nezávislé mikrooperace v libovolném pořadí, pokud jsou k dispozici příslušné operandy + +**Predikce skoků** +- maximální výkon architektury i7 je dosažen při plynulém čtení instrukcí z paměti +- podmíněné skoky mohou podle výsledku testu vést k nutnosti zrušit část obsahu fronty instrukcí atd. +- predikce skoků se snaží podle adresy a cíle skokové instrukce a podle historie predikovat, zda se skok provede nebo ne + +**Detekce krátkých cyklů** +- krátké cykly jsou detekovány na úrovni mikrooperací +- instrukce v cyklu nejsou znovu čteny a dekódovány + +**Instrukce SIMD** +- stejná instrukce se provádí s více daty +- vhodné pro vektorové a maticové operace, grafické aplikace, ... + +**Cache paměti** +- L1 cache: oddělená datová a kódová cache, samostatná pro každé jádro +- L2 cache: společná pro kód a data, samostatná pro každé jádro +- L3 cache: společná pro kód a data, společná pro všechna jádra \ No newline at end of file