Přidání poznámek z POT k architekturám počítačů

This commit is contained in:
Filip Znachor 2023-06-12 01:02:22 +02:00
parent 64c6ab374e
commit 5c4cfc644b

View file

@ -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