# 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