Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
statnice:bakalar:b0b35apo [2025/06/09 18:01] – [Dynamické prediktory] zapleka3statnice:bakalar:b0b35apo [2025/06/09 21:41] (current) zapleka3
Line 1: Line 1:
-==== Architektura počítače; CPU, paměti, subsystémy ====+====== Architektura počítače; CPU, paměti, subsystémy ======
  
 [[https://fel.cvut.cz/cz/education/bk/predmety/50/99/p5099306.html|B0B35APO]] [[https://cw.fel.cvut.cz/wiki/courses/b35apo/lectures/start|Webové stránky předmětu]] [[https://comparch.edu.cvut.cz|CompArch]] [[https://eval.comparch.edu.cvut.cz|WebEval]] [[https://fel.cvut.cz/cz/education/bk/predmety/50/99/p5099306.html|B0B35APO]] [[https://cw.fel.cvut.cz/wiki/courses/b35apo/lectures/start|Webové stránky předmětu]] [[https://comparch.edu.cvut.cz|CompArch]] [[https://eval.comparch.edu.cvut.cz|WebEval]]
Line 422: Line 422:
   * Binární reprezentace má své specifické chování, včetně přetečení, podtečení a zaokrouhlovacích chyb.   * Binární reprezentace má své specifické chování, včetně přetečení, podtečení a zaokrouhlovacích chyb.
   * Na rovnost dvou desetinných čísel nelze spoléhat — i malá aritmetická chyba způsobí rozdíl.   * Na rovnost dvou desetinných čísel nelze spoléhat — i malá aritmetická chyba způsobí rozdíl.
- 
-===== 2. CPU ===== 
-RISC/CISC architektura, registry, formát RISC CPU instrukcí, porovnání jednocyklového procesoru a zřetězeného zpracování instrukcí. Jaké problémy přináší zřetězené zpracování instrukcí a jak je lze řešit – stall/forwarding. 
- 
-** RISC/CISC ** 
- 
-Reduced Instruction Set Computing vs. Complex Instruction Set Computing referuje o přístupu k návrhu procesorů. Jak název napovídá první z přístupů disponuje tzv. redukovanou instrukční sadou a druhý komplexní instrukční sadou. V redukované sadě mají standardně všechny instrukce stejnou délku a jejich sada není příliš početná. V komplexní nemusí mít instrukce konstantní délku, a jejich množství je větší. Redukovaná sada představuje většinou více práce pro programátora, kdežto komplexní sada často umožňuje provedení několika operací zavoláním jedné instrukce.  
- 
-** Registry ** 
- 
-|Registr | Popis| 
-|PC | Program counter - dresa právě prováděné (nebo následující) instrukce| 
-|IR | Instruction register - obsahje kód prováděné instrukce načtený zpaměti | 
-|GPR | General purpose registers – obecné uživatelské registry, mohou se dělit na data a adresy do paměti, nebo být univerzální| 
-|SP | Stack Pointer - kazuje na vrchol zásobníku, slouží k organizaci lokálních dat funkcí| 
-|PSW | Program Status Word – definuje v jakém stavu je procesor | 
-|IM | Interrupt Mask – kontrola přerušení | 
-|FPR | Floating point registers – rozšíření procesoru pro práci s reálnými čísly, případně i vektorové/multimediální registry | 
- 
-** Formát RISC CPU instrukcí ** 
- 
-Obecně – instrukce mají 32bit, kde bity 0-7 (LSb, little endian -> "zprava doleva") definují operaci, následně zbytek obsahuje registry cíle a zdrojů, případně konstant, či další specifikaci operace. 
- 
-** Porovnání jednocyklového procesoru a zřetězeného zpracování instrukcí ** 
- 
-Jednocyklový procesor funguje asi takto 
- 
-  - Počáteční nastavení – inicializace PC a PSW 
-  - Načtení instrukce z paněti z adresy PC (nastav PC -> Přečti obsah do IR -> uprav PC dle délky instrukce) 
-  - Dekóduj instrukci 
-  - Proveď instrukci 
-  - Kontrola přerušení nebo výjimky 
-  - Opakuj od kroku 2 
- 
- 
-Zřetězení přináší rozdělení vykonání jednotlivých úkonů instrukce. Tj. mezitím co dochází k faktickému vykonání instrukce, již se připravuje vykonání další, či dalších několika. 
-Tomuto procesu se také jinak říká pipelining.  
- 
-{{:statnice:bakalar:pasted:20250529-123852.png|400}} 
- 
- Jednotlivé fáze pro pětistupňovou pipeline jsou - 
-  - Instruction Fetch - přivedení PC na adreosvý vstup paměti, načtení instrukce 
-  - Instruction Decode - dokódování opcode (bity 0-7), přímého operandu a načtení registrů 
-  - EXecution - provedení požadované operace v ALU 
-  - MEMory - zápis/čtení z paměti 
-  - Write Back - zpětný zápis výsledků do pole registrů pro meziregistrové instrukce a paměti 
- 
-** Jaké problémy přináší zřetězené zpracování instrukcí a jak je lze řešit – stall/forwarding ** 
- 
-Za předpokladu, že výsledek předchozí instrukce potřebujeme využít v další instrukci, došlo by bez ošetření k "datovému hazardu". Ten lze vyřešit pomocí zpoždění vykonání následující operace (stall), či doplněním procesoru o tzv. forwarding, při kterém jsou nově vypočítané hodnoty přímo předány instrukci následující. 
- 
-Další možné hazardy, které mohou vzniknout, jsou tzv. "control hazardy" (tj. řídící). Ty nastávají v případě, kdy je vyhodnocován skok. Pokud dojde ke skoku, může tak dojít na stav, kdy instrukce nejsou předpočítané a dochází tak k významnému zpomalení. Toto lze omezit efektivní predikcí skoků, či přesunutím rozhodování o skocích do kroku ID (jako například u architektury MIPS).  
  
  
Line 689: Line 637:
 Statická predikce je jednoduchá a nezatěžuje hardware, ale neposkytuje dostatečnou flexibilitu při složitějším chování programů. Statická predikce je jednoduchá a nezatěžuje hardware, ale neposkytuje dostatečnou flexibilitu při složitějším chování programů.
  
-===== Dynamické prediktory =====+==== Dynamické prediktory ====
 Dynamické prediktory se snaží zjistit, zda se skoková instrukce provede, a to na základě jejího předchozího chování. Jinými slovy, sledují minulost konkrétní skokové instrukce a podle toho se snaží odhadnout, zda se tentokrát skočí nebo ne. Dynamické prediktory se snaží zjistit, zda se skoková instrukce provede, a to na základě jejího předchozího chování. Jinými slovy, sledují minulost konkrétní skokové instrukce a podle toho se snaží odhadnout, zda se tentokrát skočí nebo ne.
  
Line 872: Line 820:
 ==== Hiearchie ==== ==== Hiearchie ====
 Každý moderní počítač má několik úrovní paměti, které se liší svou velikostí, rychlostí, latencí a funkcí. Hiearchie pamětí se může trochu lišit napříč architekturami a konkrétními sestavami. Každý moderní počítač má několik úrovní paměti, které se liší svou velikostí, rychlostí, latencí a funkcí. Hiearchie pamětí se může trochu lišit napříč architekturami a konkrétními sestavami.
 +
 +  * Paměť v počítači si můžeme představit jako vrstvy – od těch nejrychlejších a nejdražších, které jsou přímo v procesoru, až po nejpomalejší a nejlevnější, které slouží k dlouhodobému uložení dat. 
 +  * Tento systém je založen na tzv. **paměťové hierarchii**, kde platí, že čím je paměť blíže procesoru, tím je rychlejší, ale menší a dražší.
 +  * Základním principem, proč hierarchie funguje efektivně, je **časová a prostorová lokalita přístupu** – programy totiž zpravidla pracují jen s malou částí dat najednou, a často s těmi samými nebo sousedními položkami.
 +  * Paměť je technicky implementovaná jako pole adresovaných buněk (většinou o velikosti jednoho bytu). Každá buňka má přiřazenou **adresu** a obsahuje **hodnotu** – data uložená v paměti.
 +  * Velikost dostupné paměti je omezena šířkou adresy – například 16bitový adresní prostor pojme 64 KiB, zatímco 32bitový až 4 GiB.
 +
 +  * Mezi základní parametry, které paměť charakterizují, patří:
 +    * **Vybavovací doba** – čas od vzniku požadavku po nalezení dat.
 +    * **Doba přístupu** – vybavovací doba + čas nutný k obnovení obsahu nebo zadání dalšího požadavku.
 +    * **Propustnost** – kolik dat zvládne paměť obsloužit za jednotku času.
 +
 +  * Paměti dělíme také podle možnosti zápisu:
 +    * **ROM** – Read Only Memory, nelze přepisovat za běhu.
 +    * **RAM** – Random Access Memory, lze číst i zapisovat v libovolném pořadí.
 +      * **SRAM** – statická RAM, rychlá, ale drahá a s větší spotřebou.
 +      * **DRAM** – dynamická RAM, levnější, ale pomalejší, nutno pravidelně obnovovat.
 +
 +  * Podle uchování dat po odpojení napájení rozlišujeme:
 +    * **Permanentní paměti** – data zůstávají zachována i po výpadku proudu.
 +    * **Volatilní paměti** – data jsou ztracena při vypnutí systému.
 +
 +{{:statnice:bakalar:pasted:20250609-182543.png}}
 +
 +{{/mnt/data/1609b61d-74e8-4463-a3f1-dd677d0047e0.png}}
 +
 +  * Diagram ukazuje klasickou **paměťovou hierarchii** od nejrychlejších registrů po nejpomalejší diskové úložiště.
 +  * Čím blíže k procesoru, tím je paměť rychlejší, menší a dražší.
 +  * Porovnání parametrů různých typů pamětí:
 +    * **L1 SRAM** – 32 kB, velmi rychlá (0.2–2 ns), drahá (10 Kč/kB).
 +    * **Sync SRAM** – 1 MB, rychlá (0.5–8 ns/word), velmi drahá (300 Kč/MB).
 +    * **DDR3 (DRAM)** – 16 GB, střední propustnost (15 GB/s), běžná RAM (123 Kč/GB).
 +    * **HDD** – 3 TB, velmi pomalé (100 MB/s), levné (1 Kč/GB).
 +  * Některá data mohou existovat ve více kopiích (např. L1, L2, RAM).
 +  * Aby nedocházelo k nesrovnalostem, musí být zajištěna **koherence cache** a **konzistence dat** – např. při vícejádrovém zpracování (SMP).
 +
  
 === Registers === === Registers ===
-Nejrychlejší paměť s nejnižší latancí, která je přímo v jádrech procesoru. +  * Nejrychlejší paměť s nejnižší latancí, která je přímo v jádrech procesoru. 
-Obsahuje data běžícího programu, ale nikoliv instrukce programu. +  Obsahuje data běžícího programu, ale nikoliv instrukce programu. 
-Procesor provádí většinu operací nad registery (např. sčítání, odčítání atd.). +  Procesor provádí většinu operací nad registery (např. sčítání, odčítání atd.). 
-Konkrétní počet registerů závisí na konkrétní architektuře (x86, extensions atd.), většinou v řádu desítek registerů, sčítající na stovky bytů.+  Konkrétní počet registerů závisí na konkrétní architektuře (x86, extensions atd.), většinou v řádu desítek registerů, sčítající na stovky bytů
 +  * Registry jsou extrémně rychlé, protože jsou fyzicky integrovány přímo v procesorovém jádru. Přístup do nich trvá jen několik málo taktů. 
 +  * Protože jsou velmi omezené kapacitou, používají se pouze pro nejčastěji potřebná data – např. meziproměnné, čítače, ukazatele atd.
  
-=== Cache ===+=== RAM === 
 +  * Velká volatilní paměť, která fyzicky není v procesoru. 
 +  * Technologie DDR, DDR2, DDR3, DDR4. 
 +  * Celkový bandwidth záleží na frekvenci pamětí a počtu kanálů. 
 +  * Běžné procesory většinou podporují kanály pouze 2, serverové až 12, díky čemuž dosahují velké propustnosti - stovky GB/s. 
 +  * Největší problém je spíše latence, která je většinou přes 75ns. 
 +  * Někteří výrobci se proto snaží dát paměť co fyzicky nejblíže k procesoru, aby se minimalizovala latence. 
 +   
 +  * **RAM** (Random Access Memory) umožňuje přístup ke kterékoli buňce ve stejném čase – tedy **náhodný přístup**. To ji odlišuje například od sekvenčních úložišť jako pásky. 
 +  * I když má RAM vysokou propustnost, její latence je výrazně vyšší než u registrů nebo cache. To je důvodem, proč se mezi RAM a procesorem často vkládají cache paměti. 
 +  * Systémy s více paměťovými kanály (dual-channel, quad-channel atd.) umožňují zvýšit šířku přenosového pásma mezi RAM a procesorem. 
 + 
 +=== Disk === 
 +  * Velmi pomalé, nevolatilní úložiště. 
 +  * Slouží k dlouhodobému ukládání dat. 
 +  * Data se z něj načítají do paměti. 
 +  * Při nedostatku paměti je možné jej využít jako virtuální paměť - pagefile - může vézt k problémům s výkonem. 
 +    * **HDD** - levné, ale pomalejší úložiště (stovky MB/s). 
 +    * **SSD** - drahé, ale mnohem rychlejší úložiště (až desítky GB/s). 
 + 
 +  * Disky tvoří spodní vrstvu paměťové hierarchie. Jsou nejpomalejší, ale nejlevnější na jednotku velikosti, a mají neomezeně dlouhou dobu uchování dat. 
 +  * Pokud dojde RAM, může operační systém část obsahu paměti „odložit“ na disk – to se nazývá **swapování** nebo použití **virtuální paměti**. Tento mechanismus je funkční, ale výrazně zpomaluje běh programů. 
 +  * SSD disky jsou v současnosti mnohem rychlejší než HDD, protože nemají pohyblivé mechanické části – data se čtou elektronicky, nikoli fyzickým pohybem hlavice jako u HDD. 
 + 
 +==== Cache ====
 Cache je rychlá volatilní paměť přímo v procesoru, která se snaží snížit dopad relativně velmi pomalých pamětí RAM. Cache je rychlá volatilní paměť přímo v procesoru, která se snaží snížit dopad relativně velmi pomalých pamětí RAM.
 Historicky rostl výpočetní výkon procesorů mnohem rychleji než rychlost pamětí RAM a proto je cache stále více a více důležitý, aby nebyl procesor omezován (bottleneck). Historicky rostl výpočetní výkon procesorů mnohem rychleji než rychlost pamětí RAM a proto je cache stále více a více důležitý, aby nebyl procesor omezován (bottleneck).
 Moderní procesory mají několik úrovní cache pro optimální výkon: Moderní procesory mají několik úrovní cache pro optimální výkon:
-  * **L1** + 
 +  * **L1**
     * Nejrychlejší cache s nejnižší latencí. Rychlost přes 2000 GB/s, latence pod 1ns.     * Nejrychlejší cache s nejnižší latencí. Rychlost přes 2000 GB/s, latence pod 1ns.
     * Každé jádro má svůj vlastní L1 cache. U x86 je rozdělen na **L1i** (pro instrukce) a **L1d** (pro data), u ARM záleží na konkrétní architektuře.     * Každé jádro má svůj vlastní L1 cache. U x86 je rozdělen na **L1i** (pro instrukce) a **L1d** (pro data), u ARM záleží na konkrétní architektuře.
     * Velmi malý, velikost kolem 40KB na jádro.     * Velmi malý, velikost kolem 40KB na jádro.
   * **L2**   * **L2**
-    * Větší ale pomalejší než L2. Rychlost kolem 1000GB/s, latence kolem 2.5ns. +    * Větší ale pomalejší než L1. Rychlost kolem 1000GB/s, latence kolem 2.5ns. 
-    * U x86 většinou samostatný pro každé jádro, na arm většinou sdílený napříč jádry (unified).+    * U x86 většinou samostatný pro každé jádro, na ARM většinou sdílený napříč jádry (unified).
     * Velikost v řádu MB na jádro.     * Velikost v řádu MB na jádro.
   * **L3**   * **L3**
     * Zdaleka největší a taky nejpomalejší. Rychlost kolem 500GB/s, latence kolem 10ns.     * Zdaleka největší a taky nejpomalejší. Rychlost kolem 500GB/s, latence kolem 10ns.
     * Většinou pouze u x86.     * Většinou pouze u x86.
-    * Sdílený napříč jádry nebo bloky jáder (např amd epyc).+    * Sdílený napříč jádry nebo bloky jáder (např. AMD Epyc).
     * Velikost v řádu desítek až stovek MB.     * Velikost v řádu desítek až stovek MB.
-Toto rozložení samozřejmě neni univerzální, ale je typické. 
-Intel např. dříve experimentoval s velkým L4 cache a nové intel procesory obsahují L0 cache (což je jen debilně pojmenovaný L1 cache - každé jádro má zde vlastní L0d, L0i, L1, L2 a sdílený L3). 
  
-Optimalizace datových struktur programu tak, aby se vešla dobře do cache, může vést k masivnímu nárustu výkonu.+  * Toto rozložení samozřejmě není univerzální, ale je typické. 
 +  * Intel např. dříve experimentoval s velkým L4 cache a nové Intel procesory obsahují L0 cache (což je jen jinak pojmenovaný L1 cache – každé jádro má zde vlastní L0d, L0i, L1, L2 a sdílený L3). 
 + 
 +  * **Cache** slouží jako vyrovnávací paměť mezi procesorem a RAM, urychluje přístup k často používaným datům, a tím snižuje latenci a zvyšuje výkon. 
 +  * Optimalizace datových struktur programu tak, aby se vešla dobře do cache, může vést k masivnímu nárůstu výkonu. 
 === Organizace Cache === === Organizace Cache ===
-  * **Word size (WS)** velikost slova je podle architektury systému 32bit $\rightarrow$ 32bitová slova, 64bit $\rightarrow$ 64bitová slova, má většinou velikost $2^i$, kde i je počet bitů potřeba na adresaci bytů uvnitř slova.  +  * **Word size (WS)** – velikost slova je podle architektury systému 32bit → 32bitová slova, 64bit → 64bitová slova, má většinou velikost $2^i$, kde $ije počet bitů potřeba na adresaci bytů uvnitř slova. 
-  * **Capacity** (C) kapacita cache v bytech nebo ve slovech +  * **Capacity (C)** – kapacita cache v bytech nebo ve slovech. 
-  * **Block size (BS)** velikost prostoru pro data v jednom řádku cache, měří se ve slovech, bývá o velikosti $2^b$, kde b je počet bitů kterými jde adresovat jeden řádek (např, pokud má řádek 128bitů, tak jde adresovat 7 bity $\arrowright$ $2^7$, kde b=7).  +  * **Block size (BS)** – velikost prostoru pro data v jednom řádku cache, měří se ve slovech, bývá o velikosti $2^b$, kde $bje počet bitůkterými lze adresovat jeden řádek. 
-  * **Number of sets (SN)** počet řádek v jedné cachovací tabulce, většinou musí být množství $2^n$ +  * **Number of sets (SN)** – počet řádek v jedné cachovací tabulce, většinou o velikosti $2^n$. 
-  * **Index** do řádku cache, odpovída počtu řádků (SN) cache která většinou musí být $2^n$, Index má poté $n$ bitů. Většinou se bere do Indexu nejnižích $b+i \rightarrow n+b+i$  bitů adresy z paměti (prvních $b$ bitů, adresuje obsah jednoho řádku)+  * **Index** – do řádku cache, odpovídá počtu řádků cachevětšinou musí být $2^n$; používá se $n$ bitů z adresy, obvykle nejnižších $b+i \rightarrow n+b+i$ bitů. 
-  * **TAG** - Obsahuje zbytek adresy kromě toho co už vyjadřuje index, takže je to rozsah $b+n+i \rightarrow \text{délka adresy}$ +  * **TAG** – obsahuje zbytek adresy kromě bitů použitých pro index a offsettedy $b+n+i \rightarrowdélka adresy. 
-  * **Validity bit** bit platnosti, indikuje zda jsou data na řádku platná.  +  * **Validity bit** – bit platnosti, indikujezda jsou data na řádku platná. 
-  * **Dirty bit** - rošiřující pole v obsahu paměti. Indikuje že v cache je jiná hodnotanež v paměti hlavní +  * **Dirty bit** – rozšiřující pole v obsahu paměti. Indikuježe v cache je jiná hodnota než v hlavní paměti. 
-  * **Degree of associativity (N)** - Počet tabulek +  * **Degree of associativity (N)** – počet tabulek. 
-  * **Number of blocks (BN)** počet řádků přes všechny tabulky, je roven $\text{Degree of associativity} * \text{Number of sets}$ +  * **Number of blocks (BN)** – počet řádků přes všechny tabulky, je roven $\times \text{Number of sets}$. 
-  * **Cache hit** (zásah) - pojmenování situace, kdy požadovaná hodnota v cache je+  * **Cache hit** – situace, kdy se požadovaná data nachází v cache. 
-  * **Cache miss** - výpadek, data v cache ješte nejsou +  * **Cache miss** – situacekdy data v cache nejsou a musí se načíst z pomalejší paměti. 
-  * **Cache line nebo Cache block** základní kopírovatelná jednotka mezi hierarchickými ůrovněmi (typicky, $8B$, do $1KB$+  * **Cache line nebo Cache block** – základní kopírovatelná jednotka mezi hierarchickými úrovněmi (typicky 8B až 1KB). 
-  * **Hit rate** počet paměťových přístupů obsloužených danou úrovní cache dělený všemi ístupy +  * **Hit rate** – počet paměťových přístupů obsloužených danou úrovní cache dělený celkovým počtem ístupů. 
-  * **Miss rate** 1 - Hit rate +  * **Miss rate** – $1 - \text{Hit rate}$. 
-  * Average Memory Access Time (AMAT) $AMAT = \text{HitTime} + \text{MissRate} \text{MissPenalty}$ +  * **Average Memory Access Time (AMAT)** – průměrná doba přístupu k paměti: $AMAT = \text{HitTime} + \text{MissRate} \times \text{MissPenalty}$. 
-  AMAT pro více urovňovou cache lze spočítat rekurzivní použitím výše uvedeného vztahu +    Pro vícestupňové cache se AMAT počítá rekurzivně podle stejného vztahu. 
-  * **Cache replacement policy** pravidla pro výběr položky vyřazení z cache, když potřebujeme nahrát novou hodnotu do cache +  * **Cache replacement policy** – pravidla pro výběr, která položka bude z cache odstraněna: 
-    * Random - vybraná položka je náhodná +    * **Random** – náhodná volba. 
-    * LRU (least recently usednejdéle nepoužitá položka +    * **LRU (Least Recently Used)** – odstraní nejdéle nepoužitou položku. 
-    * LFU (least frequently used- sleduje jak často se k položkám přistupuje +    * **LFU (Least Frequently Used)** – odstraní položku s nejmenší četností použití. 
-    * ARC (Adaptive replacement cache- kombinace LRU a LFU +    * **ARC (Adaptive Replacement Cache)** – adaptivní algoritmus kombinující LRU a LFU. 
-  * **Write through (zápis, propsání skrz) cache** - Při každém zápisu se data hned propíšou i do hlavní paměti, takže cache má vždy čistou kopii, ale každý zápis stojí čas+  * **Write through (propsání skrz)** – při každém zápisu se data uloží do cache i hlavní paměti. 
-  * **Write back** - Data se uloží jen do cache a blok se označí jako dirty“; do hlavní paměti se pošlou až při vytlačení bloku, čímž šetříš počet zápisů, ale musíš hlídat dirty bity.+  * **Write back** – data se uloží pouze do cachea označí se jako "dirty". Do hlavní paměti se zapíší až při odstranění z cache. 
 == Plně asociativní cache == == Plně asociativní cache ==
-Znamená že $\text{Degree of associativity} = text{Number of blocks}$, pro každý řádek tímpádem existuje tabulkato znamená že index má $0bitů (tedy neexistuje) tag má velikost $\text{TAG} = $\text{délka adresy} - b+i$, kde b je počet bitů potřeba na adresaci jednoho slova v bloku a i je počet bitů na adresaci bytů ve slově. +Znamenáže $\text{Degree of associativity} = \text{Number of blocks}$. Každý řádek má svou vlastní tabulkucož znamenáže **index má 0 bitů** **celá adresa kromě offsetu se ukládá do tagu**.
  
-**vlastnosti:** +  V plně asociativní cache neexistuje pevné přiřazení adresy do konkrétního řádkuJakýkoli blok z paměti může být uložen kamkoli do cache. To zajišťuje maximální flexibilitu
-  * Nemusíme nahrazovat záznamy v cache do té doby než nám kompletně dojde. +  * Díky absenci indexu není třeba řešit kolize způsobené stejnými indexy – všechny bloky soutěží o všechna místa. 
-  * Je velmi drahá na implementaci, takže musí být malá +  * Tag musí obsahovat téměř celou adresu (kromě offsetu), protože není jiný způsob, jak určit, které slovo je právě v cache.
-  * Používá se v aplikacích kde je potřeba extrémní rychlost, takžtřeba TLB (translation lookaside buffer, pro překlad virtulní na fyzickou paměť), potřebuje být velmi malá. +
-{{:statnice:bakalar:pasted:20250602-114623.png?300}}+
  
 +  * **Vlastnosti:**
 +    * Nemusíme nahrazovat záznamy v cache, dokud není plně zaplněna.
 +      * To znamená, že cache dokáže efektivněji využít svou kapacitu a zvyšuje se pravděpodobnost cache hitu.
 +    * Je velmi drahá na implementaci, proto se používá pouze pro malé paměti.
 +      * Nutnost porovnávat všechny tagy najednou při každém přístupu zvyšuje komplexitu a spotřebu.
 +    * Používá se např. v **TLB (Translation Lookaside Buffer)**, kde je potřeba extrémní rychlost a malá velikost.
 +      * TLB je specializovaná cache pro překlad virtuálních adres na fyzické – zde má každá mikrosekunda význam, a malý rozsah přístupů odpovídá malému počtu záznamů.
 +
 +{{:statnice:bakalar:pasted:20250602-114623.png?300}}
  
 == Přímo mapovaná cache == == Přímo mapovaná cache ==
-  * 1 cestná cache $\rightarrow$ stupeň asociace = 1, tedy má jednu tabulku +  * 1-cestná cache → stupeň asociace = 1, tedy pouze jedna tabulka. 
-  * $\text{number of sets} = \text{number of blocks}$ +  * $\text{Number of sets} = \text{Number of blocks}$. 
-  * má index o délce bitů $log(\text{number of sets})$+  * Index má délku $log_2(\text{Number of sets})$ bitů.
  
-**Schéma**:+  V přímo mapované cache je každý blok z paměti jednoznačně přiřazen právě k jednomu místu (setu) v cache – tedy žádná flexibilita. 
 +  Pokud dva různé bloky z hlavní paměti spadnou na stejné místo, musí si navzájem přepisovat obsah cache – to může vést ke zvýšenému počtu missů. 
 +  Tag je kratší, protože část adresy je vyjádřena indexem. 
 + 
 +  **Schéma:**
  
 {{:statnice:bakalar:pasted:20250602-152014.png?750}} {{:statnice:bakalar:pasted:20250602-152014.png?750}}
  
-**Příklad s většími bloky:**+  * **Příklad s většími bloky:**
  
 {{:statnice:bakalar:pasted:20250602-153331.png?750}} {{:statnice:bakalar:pasted:20250602-153331.png?750}}
  
-**Vlastnosti:** +  * **Vlastnosti:** 
-  * Hlavní cache u mikrokontrolerů a levných procesorů +    * Hlavní typ cache u mikrokontrolerů a levných procesorů. 
-  * Má velkou pravděpodobnost kolizí $\rightarrow$ budeme muset vyřadit záznam z cache bez toho aniž bychom celou cache zaplnili +      * Důvodem je jednoduchá a levná implementace, která nevyžaduje složité vyhledávání a porovnávání tagů. 
-  Každou adresu můžeme zařadit pouze do jednoho místa v tabulce cache +    * Má vysokou pravděpodobnost kolizí – může dojít k vyřazení záznamu, i když cache není plná. 
 +      To je způsobeno tím, že více různých adres může sdílet stejný index. 
 +    * Každou adresu lze zařadit pouze do jednoho místa v cache tabulce
 +      * Výsledkem je nižší hit rate oproti flexibilnějším typům cache
 == N-asociativní cache == == N-asociativní cache ==
-  * **Obecnější model cache** - $\text{stupeň asociace} = n$+  * **Obecnější model cache**, kde je stupeň asociace $n$ – tzn. že každý set obsahuje $n$ bloků. 
 + 
 +  * Tento typ cache kombinuje výhody předchozích dvou přístupů: 
 +    * Každá paměťová adresa směřuje do konkrétního setu (jako u přímo mapované), ale v rámci tohoto setu může být uložena v libovolném z $n$ bloků. 
 +    * Tím se snižuje pravděpodobnost kolizí, protože více položek může sdílet jeden set bez vzájemného přepisování. 
 +    * Implementace je jednodušší než u plně asociativní cache, protože se porovnávají tagy jen v rámci jednoho setu, ne celé cache.
  
 {{:statnice:bakalar:pasted:20250602-153444.png?750}} {{:statnice:bakalar:pasted:20250602-153444.png?750}}
  
-=== RAM === +  * Tento typ organizace nabízí kompromis mezi plně asociativní a přímo mapovanou cache: 
- +    * **+** Lepší využití paměti a vyšší **hit rate** než přímo mapovaná
-Velká volatilní paměť, která fyzicky není v procesoru. +    * **+** Nižší složitost a režie než plně asociativní
- +    * **** Může docházet ke konfliktům, ale méně často než u přímého mapování.
-Technologie DDR, DDR2, DDR3, DDR4. +
- +
-Celkový bandwidth záleží na frekvenci pamětí počtu kanálů. +
-Běžné procesory většinou podporují kanály pouze 2, serverové až 12, díky čemuž dosahují velké propustnosti - stovky GB/s. +
- +
-Největší problém je spíše latence, která je většinou es 75ns. +
-Někteří výrobci se proto snaží dát paměť co fyzicky nejblíže k procesoru, aby se minimalizovala latence. +
- +
-=== Disk === +
- +
-Velmi pomalé, nevolatilní úložiště. +
-Slouží k dlouhodobému ukládání dat. +
-Data se z něj načítají do paměti. +
-Při nedostatku paměti je možné jej využít jako virtuální paměť - pagefile - může vézt k problémům s výkonem+
-  * **HDD** - levné, ale pomalejší úložiště (stovky MB/s)+
-  * **SSD** - drahé, ale mnohem rychlejší úložiště (až desítky GB/s).+
  
  
Line 983: Line 1002:
 periferie mapované do paměti, sériový port, sběrnice – sériová/paralelní, half-duplex/full-duplex, sběrnice PCI. periferie mapované do paměti, sériový port, sběrnice – sériová/paralelní, half-duplex/full-duplex, sběrnice PCI.
  
-RISC-V nemá speciální instrukce pro komunikaci s periferiemi, místo toho se zapisuje do určené oblasti pamětito vede k zápisu / čtení z periferií+==== Periferie mapované do paměti ==== 
 +  * RISC-V nemá speciální instrukce pro komunikaci s periferiemi
 +  * Místo toho se čtení a zápis do periferií provádí zápisem do vyhrazené oblasti paměťovém prostoru. 
 +  * Periferie při inicializaci získají svůj vlastní **paměťový rozsah**, přes který komunikují s CPU. 
 +  * **Address Decoder** rozhoduje, ke které periferii daný paměťový přístup patří. 
 +    * **Asynchroní sběrnice**: USB, SATA 
 +    * **Synchroní sběrnice**: PCI, PCIe 
 +  * Tento způsob je jednoduchý na implementacipřehledný a často používaný v embedded systémech. 
 +  * Komunikace přes paměťovou mapu je vhodná pro zařízení, která nepotřebují složité řízení přenosu.
  
-velmi jednoduchá konfigurace - periferie i inicializaci získají paměťový rozsahten slouží esunu dat mezi CPU periferiemi+==== Sériová vs paralelní sběrnice ==== 
 +  * **Paralelní sběrnice** enáší více bitů najednoukaždým vodičem jeden bit. 
 +    * Vyšší propustnost, ale více vodičů = vyšší nároky na prostor a synchronizaci. 
 +  * **Sériová sběrnice** enáší data bit po bitu jedním vodičem. 
 +    * Nižší náklady menší fyzické rozměry – dnes preferovaná varianta i pro vysokorychlostní přenosy. 
 +  * Paralelní sběrnice se používaly u starších zařízení (např. ATA), sériové dnes dominují (např. USB, PCIe).
  
-Adress Decoder rozhoduje kam se data přesměrují+=== Sériový port (UART) === 
 +  * Jeden z nejstarších a nejjednodušších způsobů komunikace. 
 +  * **Asynchronní přenos** bez hodin – vysílač a přijímač musejí být nastaveny na stejnou přenosovou rychlost (**baud rate**). 
 +    * Např. 9600 Bd, 115200 Bd, nově až 921600 Bd (Bd = 1 bit/s). 
 +  * **UART (Universal Asynchronous Receiver/Transmitter)** – obvod pro obousměrný sériový přenos: 
 +    * Využívá dvě linky: **TX** (transmit) a **RX** (receive). 
 +   
 +  * **Paměťově mapované registry UARTu**: 
 +    * **RX_ST** – stav přijímání dat 
 +      * bit 0: **ready** – byla přijata data 
 +    * **RX_DATA** – čtení přijatých dat 
 +      * čtením z této adresy se data přečtou a příznak ready se smaže 
 +    * **TX_ST** – stav vysílání 
 +      * bit 0: **ready** – UART je připraven k odeslání 
 +    * **TX_DATA** – zápis dat k odeslání 
 +      * zápis do registru rovnou spouští odeslání po TX
  
-**Asynchroní sběrnice** +=== Half-duplex vs Full-duplex === 
-  USB +  * **Half-duplex** – data mohou proudit **pouze jedním směrem v daný čas**. 
-  * SATA+    Např. klasický PCI – nelze současně odesílat i přijímat. 
 +  * **Full-duplex** – data mohou proudit **oběma směry současně**. 
 +    * Např. PCIe – vyšší efektivita přenosu.
  
-**Synchroní sběrnice** +=== Asynchronní sběrnice === 
-  * PCI +  * Data nejsou přenášena podle společného hodinového signálu. 
-  * PCIe+  * Používají se tam, kde nelze garantovat přesnou synchronizaci nebo to není potřeba. 
 +    * **USB** – univerzální rozhraní pro připojení periferií. 
 +    * **SATA** – rozhraní pro připojení disků.
  
-=== Sériová vs paralelní sběrnice === +=== Synchronní sběrnice === 
-Sériová sběrnice přenáší data po jedné datové lince, paralelní sběrnice přenáší data po více datových linkách současně +  * Přenos je řízen společným hodinovým signálem, všechna zařízení se musí synchronizovat. 
- +    * **PCI** 
-Sériová linka +    * **PCIe**
- +
-jeden z nejstarších způsobů komunikace, asynchronní přenos bez hodin +
-obě strany jsou nastaveny na stejnou rychlost která definuje délku vysílání jednoho bitu (baud rate, dříve např 9600 - 115200 Bd, nově až 921600 Bd, Bd = 1bit/s) +
- +
-=== UART === +
-Universal Asychronous Receiver Transmitter +
- +
-speciální zařízení které přijímá a vysílá byty po sériové lince (dva dráty RX a TX) +
- +
-RX_ST - stav přijímání dat +
-   bit 0 ready - byla přijata data +
-RX_DATA - přijatá data +
-  Čtení z adresy RX_DATA současně odstraní čtená data z UARTu a vymaže příznak ready (pokud nejsou další data) +
-TX_ST - stav odesílání dat +
-  bit 0 ready - můžeme zadávat data k odeslání +
-TX_DATA - data k odeslání +
-  Zápis do TX_DATA vede rovnou k odesílání data+
  
 === PCI === === PCI ===
-sběrnice PCI je řízena hodinamipro správnou činnost je nutná co nejpřesnější synchronizace hodin +  * **Paralelní synchronní sběrnice**half-duplex. 
- +  * Počáteční přenos vyžaduje řízení ístupu pomocí arbitra. 
-  přenos začíná tím, že iniciátor pořádá arbitra o idělení sběrnice +  * Iniciátor nastaví adresu a příznak **FRAME** – tím začíná rámec přenosu. 
-  - iniciátor začne vysílání nastavením adresy cílové periferie na AD sběrnici nastavením íznaku FRAME rámec přenosu a bitů cmd +  * Cílové zařízení (**Target**odpoví signálem **DEVSEL**že rozpoznalo svou adresu
-  - periférie, která rozpozná svoji adresu nastaví DevSel na 1 +  * Data se enášejíkdyž jsou oba signály **TRDY** (Target Ready) a **IRDY** (Initiator Ready) aktivní. 
-  - pokud je cílová periferie (Target) připravena přijmout datanastaví TRDY na 1+  * Přenos končí shozením **FRAME** na 0. 
-  - pokud je iniciátor ipraven vyslat datanastaví IRDY na 1 +  * Po přenosu všechny signály přejdou zpět na 0 a sběrnice je opět volná
-  - pyslání posledních dat je indikováno shozením příznaku FRAME na 0. +   
-  - po ukončení přenosu se signály IRDY, TRDY a DEVSEL vrátí na 0 a sběrnice se uvolní pro další přenos+  * **Nevýhody:** 
- +    * Half-duplex – nelze komunikovat oběma směry současně
-PCI je half-duplexnelze současně posílat data oběma směry. +    * Sdílená sběrnice – pomalá periferie brzdí všechny ostatní
- +    * Omezená přenosová rychlost – 33 nebo 66 MHz: 
-Více zařízení na sběrnici - pomalá periférie brzdí rychlé periférie, zvyšuje latency ech ostatních periférií+      32bit: 132 MB/s nebo 264 MB/
- +      64bit: 264 MB/s nebo 528 MB/s
-PCI sběrnice umožňuje pouze hodiny s 33 MHz, nebo 66 MHz. +
-  To odpovídá 132MB/s nebo 264 MB/s pro 32 bitovou variantu +
-  To odpovídá 264MB/s nebo 528 MB/s pro 64 bitovou variantu+
  
 === PCIe === === PCIe ===
-i malé nepřesnosti v délce vodičů, kvalitě spojů vedou k rozdílným rychlostem šíření signálů +  * **Sériová sběrnice**, point-to-point (peer-to-peer). 
-to je problém pro vysoké frekvence přenosů +  * **Full-duplex** – data mohou proudit současně v obou směrech. 
- +  * Každé spojení je realizováno jako samostatný link – nedochází ke sdílení přenosového pásma. 
-PCIe te peer-to-peer sběrnicedata se posílají jen mezi dvěma zařízeními+  * Velmi vysoké rychlostiale vyžaduje kvalitní spoje – i drobné rozdíly v délce vodičů nebo kvalitě mohou narušit komunikaci. 
 +  * Nahrazuje klasické PCI u moderních zařízení (grafické karty, SSD, síťové adaptéry apod.).
  
-je full-duplex, tedy data mohou být posílána oběma směry současně 
Navigation

Playground

QR Code
QR Code statnice:bakalar:b0b35apo (generated for current page)