Instr 1 VI DI VA PO ZV
Instr 2 VI . . . . DI VA PO ZV
Instr 3 VI DI VA PO ZV
Instr 4 VI DI VA PO ZVHTML · Slides · PDF | Přehled předmětu
Petr Jedlička, Cyril Klimeš, Tomáš Pitner tomas.pitner@mendelu.cz
Poznáme, co jsou hlavní parametry výkonnosti počítače
Jaké jsou možnosti zvýšení ať už na úrovni jádra tak více jader a celého systému
Zcela nové koncepty výpočetní techniky: kvantové počítače, neuronové počítače
Moderní architektury počítačů pro vysoké výkony, umělou inteligenci atd. Tato kapitola navazuje na kapitolu Procesory. Soustředí se hlavně na pokročilejší mikroarchitekturu, paralelismus a současné směry vývoje.
Co a jak ovlivňuje výkon programu?
(execution/response time)
jak dlouho počítač vykonává konkrétní úlohu
zajímavé pro konkrétního uživatele počítače
(throughput)
kolik práce počítač vykoná za jednotku času
zajímavé pro správce serveru nebo datového centra
pokud vyměníme procesor za rychlejší?
pokud přidáme do systému další procesory?
Výkon_počítače = 1/Odezva_počítače
maximalizace výkonu ⇔ minimalizace odezvy
N = výkonA / výkonB
Kolikrát je A rychlejší (výkonnější) než B…
pokud A provede program za 10 sekund a B stejný program za 15 sekund?
zahrnuje vše, včetně přístupu na disk a režie OS
co když je počítač sdílen více uživateli?
odráží výkonnost systému jako celku
čas, po který procesor program skutečně vykonával
nezahrnuje čekání na V/V zařízení a čas kdy neběžel
zahrnuje čas strávený uvnitř OS — režii OS
uživatelský a systémový procesorový čas
odráží výkonnost procesoru
všechny události řízeny hodinovým signálem
frekvence hodin (clock rate), např. 3 GHz
taktovací frekvence, frekvence hodinového signálu, …
délka hodinového cyklu (clock cycle), např. 250 ps
doba periody hodinového signálu
Jak může návrhář zlepšit výkon?
CPU execution time for a program = CPU clock cycles for a program × Clock cycle time
CPU execution time for a program = CPU clock cycles for a program / Clock rate
Jakou taktovací frekvenci potřebujeme, pokud …
program běží 10s na počítači A s hod. frekvencí 2 GHz
Cílem je navrhnout počítač B, kde program poběží 6s
technologie umožňuje výrazně zvýšit taktovací frekvenci…
… ale pro vykonání programu je potřeba o 20% více cyklů
CPU time A = CPU clock cycles A / Clock rate A
10 = CPU clock cycles A / 2×10⁹ [ s]
CPU clock cycles A = 10×2×10⁹=20×10⁹
CPU time B= 1.2×CPU clock cycles A / Clock rate B
6 = 1.2×20×10⁹ / Clock rate B [ s]
Clock rate B = 1.2×20×10⁹ /6 =0.2×20×10⁹=4×10⁹=4GHz
typická pracovní zátěž — sada spouštěných programů
porovnání počítačů ⇔ porovnání doby běhu programů
časově náročné, špatně se automatizuje
program specificky určený k měření výkonnosti
sada benchmarků ≈ typická pracovní zátěž procesoru
doufáme, že výsledky předpoví chování při aktuální zátěži
Standard Performance Evaluation Corporation
snaha výrobců o možnost jednoduše porovnat počítače
původně hlavně CPU, dnes i GPU, Java, mail, …
nejnovější SPEC CPU 2026, předchozí SPEC CPU 2017
Samotné jedno číslo nestačí:
důležité jsou jednovláknový výkon,
vícevláknový výkon,
paměťová propustnost, latence a
výkon na watt.
| Prakticky se často používají i veřejné přehledy typu CPU Mark, ale je nutné vědět, co přesně měří. |
| Jde jen o stručné připomenutí. Podrobnější výklad je už v kapitole 5. Procesory. |
1. počáteční nastavení čítače instrukcí
2. načtení instrukce do RI
ČI → adresa RAP
Načtení instrukce do RDP
RDP → RI
3. dekódování operačního kódu (OK) instrukce
4. provedení operace
5. ČI + 1 → ČI nebo adresa z instrukce → ČI
6. opakování od kroku 2
Zvyšování integrace, zmenšení rozměrů a tím zvyšování taktovací frekvence
Snižování napájecího napětí, tím snížení vyzařovaného tepla a tím další zvyšování taktovací frekvence
Rozšíření bitové šířky zpracovaných dat
Zvýšení počtu pracovních registrů
Hierarchické uspořádání paměti — na vrcholu Level 1 cache, pak Level 2 cache
Fronty instrukcí — mezi instrukčním registrem a pamětí
Zřetězené (proudové) zpracování instrukcí (pipelining) včetně vyřešení predikce skoků
Počítače s redukovaným souborem instrukcí - RISC
Explicitní paralelní zpracování instrukcí (VLIW)
Superskalární architektura
Vykonávání mimo pořadí (out-of-order execution)
Přejmenování registrů (register renaming)
Vícevláknové zpracování v jednom jádru (SMT)
Víceprocesorové systémy
Masivně paralelní architektury
Počítače s netradičním řízením
Předpoklad: n funkčních bloků
Každý z bloků je během n-1 časových úseků nevyužit a čeká na příchod dalšího operandu
Využití všech bloků současně
V určitém okamžiku je v každém bloku zpracován jiný operand
| VI | výběr instrukce |
| DI | dekódování instrukcí |
| PO | provedení operace |
| ZV | zápis výsledku do paměti |
Jednoduchý, leč neefektivní model bez "pipeline".
Bez pipeline se každá instrukce zpracuje až po dokončení předchozí.
Jednotlivé funkční bloky proto velkou část času čekají.
Pipeline rozděluje vykonání instrukce na více fází.
V jednom okamžiku tak mohou být různé instrukce v různých fázích zpracování.
Přínosem je hlavně vyšší propustnost, ne nutně kratší doba jedné konkrétní instrukce.
Pro ideální pipeline s n sekcemi a k úlohami je doba zpracování přibližně n + k - 1 taktů.
Bez pipeline by při stejném zjednodušení bylo potřeba přibližně n * k taktů.
Pro k >> n se výsledná propustnost blíží jedné dokončené úloze za takt.
| Skutečný přínos snižují strukturální, datové a řídicí konflikty. |
Čím je použit větší počet sekcí, tím více úloh může jednotka zpracovávat současně a tím může růst propustnost.
Každá sekce musí mít registr pro zaznamenání současně zpracovaných úloh — tím roste cena funkční jednotky a roste zpoždění, způsobené průchodem jednotlivými registry.
Zpoždění v jedné sekci bude T = P / n + R
Výkon = frekvence, s jakou je možno přivádět operandy V = 1 / T
Cena N=nL+C kde C je cena kombinačního obvodu a L je cena jednoho registru
Součinitel kvality Q = V / N
Q = 1/(PL + CR + nLR + PC/n)
Při lineárním programu postupné plnění fronty
Nepodmíněný skok
Podmíněný skok — metody řešení
obvodová struktura neumožňuje současné provedení určitých akcí, např. současné čtení dvou hodnot z paměti nebo současné provedení dvou sčítání, pokud má procesor jednu ALU
když jsou zapotřebí data z předcházející instrukce, která není dokončena.
když skoková instrukce mění obsah PC, nebo jiné.
| VI | Výběr instrukce z paměti |
| DI | Dekódování instrukce |
| VA | Výpočet reálné adresy |
| PO | Provedení operace |
| ZV | Zápis výsledku do paměti |
požadavek na současné čtení 5. instrukce a zápis operandu v 1. instrukci
rozdělit paměť na paměť instrukcí a paměť dat, obecné řešení:
přidání výpočetních jednotek
Sečti do R1, hodnoty R2, R3 (R1 ← R2 + R3)
Sečti do R4, hodnoty R5, R1 (R4 ← R5 + R1)
Nemohu začít sečítání R5 + R1 před vypočtením R1 ← R2 + R3.
Instr 1 VI DI VA PO ZV
Instr 2 VI . . . . DI VA PO ZV
Instr 3 VI DI VA PO ZV
Instr 4 VI DI VA PO ZVNevím, kam skočit! Adresa bude známa až po fázi PO na řádku BC.
Zpožděný skok, tedy vložit jiné, užitečné instrukce, což znamená přeskládat instrukce programu (out-of-order execution). Nelze-li takové užitečné instrukce najít, vložit NOP instrukce.
Predikce skoku, rozpracovat pouze predikovanou možnost (branch prediction).
Rozpracovat obě možnosti pokračování skokové instrukce (speculative execution).
Mezi instrukcemi, které za sebou těsně následují — rozdílná délka provádění instrukcí:
metoda vkládání cyklů až se dokončí předcházející instrukce
metoda vzájemného blokování zpoždění druhé instrukce, než je operand k dispozici
Procesor musí respektovat datové závislosti mezi instrukcemi.
ldr x0, [x1] // načtení hodnoty z paměti
add x2, x0, x3 // čeká na výsledek LDR
add x5, x6, x7 // nezávislá instrukceInstrukce add x2, x0, x3 nemůže být provedena, dokud není známa
hodnota registru x0.
Moderní procesor s out-of-order execution však může mezitím provést
nezávislou instrukci add x5, x6, x7.
Blokována není nutně celá pipeline. Procesor pozastaví především instrukce závislé na dosud nedostupných operandech a pokračuje ve vykonávání nezávislých instrukcí. |
Procesor se snaží určit cíl skoku ještě dříve, než je instrukce plně dekódována a vyhodnocena.
Aby mohl předvybrat instrukci.
loop:
...
cbnz x0, loop| uskutečnění skoku | zda bude skok proveden (taken / not taken) |
| cíl skoku | kam se má pokračovat, pokud bude skok proveden |
tabulka s cílovými adresami skoků uchovává přibližně vztah:
adresa instrukce skoku -> predikovaná cílová adresa
0x10001020 -> 0x10000FE0Díky tomu může fetch začít načítat instrukce z predikovaného cíle ještě před dokončením dekódování skoku.
U nepřímých skoků je predikce cíle ještě důležitější:
br x8Cílová adresa zde není přímo zakódována v instrukci a závisí na aktuální hodnotě registru x8. |
Řešení je pokračovat ve zpracování sekvenčním způsobem a pokud se skok neprovede, tak se rozpracovaná fronta instrukcí použije.
V opačném případě se rozpracované instrukce ignorují a fronta se začne plnit znovu.
U vysoce výkonných počítačů se implementují obě paralelní fronty.
Druhá fronta je obvykle kratší (podle počtu sekcí např. 4).
Prováděcí jednotka pak může začít vybírat alternativně připravené instrukce z druhé fronty.
O splnění podmínky je možné spekulovat - jde o tzv. predikci skoků.
Vychází se z předpokladu, že program nemůže modifikovat sám sebe a dále, že podmíněné skoky jsou vždy na pevně danou adresu.
Procesor se snaží předpovědět, zda bude podmíněný skok proveden:
| Taken | skok bude proveden |
| Not taken | pokračuje se následující instrukcí |
Predikce může být:
| statická | rozhodnutí nezávisí na historii běhu programu, |
| dynamická | procesor využívá informace získané během předchozího vykonávání programu. |
Moderní výkonné procesory používají především dynamickou predikci.
Prediktor může využívat historii předchozích výsledků skoků:
T T N T T N ...kde T znamená taken a N znamená not taken.
Historii lze reprezentovat několika bity a použít ji k predikci dalšího výsledku.
historie: 1 1 0 1
T T N T
|
+-- poslední výsledekJednoduché prediktory lze modelovat jako konečné automaty, například známým 2bitovým saturujícím čítačem.
Současné procesory, včetně Apple Silicon, používají mnohem složitější prediktory kombinující více druhů historie a dalších informací.
Přesná mikroarchitektura prediktoru Apple Silicon není veřejně dokumentována.
Prediktor je ve dvou stavech pozitivní, v dalších dvou negativní.
Ke změně predikce v saturovaném stavu (00 nebo 11) jsou zapotřebí alespoň dvě špatné predikce.
| Statická | příslušné bity predikce se vkládají do instrukce při kompilaci |
| Dynamická | zapisuje se při podmíněném skoku do instrukce (komplikované — kód programu je chráněn) |
| Paměť skoků | součást procesoru — ukládají se adresy posledních provedených skoků |
| Základní rozdíl RISC vs. CISC je už v kapitole 5. Procesory. Zde jde hlavně o důsledky pro pipeline a paralelismus. |
Podstatná část instrukcí se provádí během jednoho strojového cyklu.
Instrukce se provádějí v obvodovém řadiči (nepoužívá se mikroprogramování).
Celkový počet instrukcí a způsobů adresování je malý, ale instrukce umí pracovat s různými registry.
Pro spolupráci s hlavní pamětí jsou použity pouze typově dvě instrukce: čtení a zápis z/do paměti (load-store architektura).
Instrukce mají pevnou délku a pevný formát, který přesně vymezuje funkci jednotlivých bitů nebo skupin bitů.
V procesoru je použit velký počet registrů.
Složitost se z technického vybavení a ze souboru instrukcí částečně přesouvá do optimalizujícího kompilátoru.
Robustnost instrukcí
Provádění instrukcí je stejné
Proto možné překrývání instrukcí
Vkládání instrukce v každém cyklu hodin
Tím dosahování velkých rychlostí
Delší programy
Nutnost většího počtu registrů
V dnešních procesorech už nejde o čisté rozdělení na dva oddělené světy.
Moderní x86 procesory jsou z pohledu ISA stále CISC, ale interně používají techniky blízké RISC a rozkládají instrukce na jednodušší mikrooperace.
Moderní ARM procesory (např. Apple Silicon) jsou z pohledu ISA RISC, ale některé instrukce jsou složitější a mohou zahrnovat i poměrně komplexní operace nad registry a pamětí. == Příklad rozčlenění procesoru
Příklad rozčlenění procesoru do sekcí I (instrukční) a E (execution unit)
V případě podmíněného skoku musí jednotka I mít vypočtenou adresu, kterou počítá jednotka E
Jednotka I zastaví svou činnost a čeká na výpočet jednotky E
nebo pokračuje v plnění fronty, jako kdyby instrukce podmíněného skoku neexistovala, ale v případě že po vyhodnocení se skok uskuteční, je třeba zanedbat instrukce počínaje za instrukcí skoku
Efektivnost výběru metody závisí na procentu splněných podmínek skoku (zdá se být účelnější 2. Metoda)
Do hlavní fronty zapisuje jednotka I instrukce, které odpovídají provádění programu bez větvení (samozřejmě s uvažováním nepodmíněných skoků)
Vedlejší (kratší) fronta obsahuje instrukce, vybrané na základě splněné podmínky skoku
Jednotka E vybírá instrukce podle toho, zda je podmínka pro skok splněna nebo ne. Při splnění podmínky je obsah hlavní fronty neplatný a jednotka I ji neprodleně začne plnit instrukcemi, které následují za obsahem vedlejší fronty
VLIW architektura umožňuje paralelní zpracování (původních několika instrukcí) jednou novou instrukcí (typicky několik instrukcí 4-16).
Paralelně zpracovatelné instrukce jsou naplánovány předem při kompilaci.
VLIW je důležité hlavně jako specializovaný nebo historicky významný směr, ne jako převládající architektura běžných desktopových a serverových CPU.
Klasický VLIW nepodporuje hazard detection — předpokládá nezávislost „instrukcí“ uvnitř instrukce ⇒ jednodušší HW.
Pevný formát instrukce obsahuje kód několika operací, které se ale mohou provést paralelně.
HW vykonává všechny operace zakódované v instrukci nezávisle (jemnozrnný paralelizmus) paralelizmus na úrovni instrukcí (ILP)
Kompilátor je zodpovědný za rozvržení instrukcí a extrakci ILP z programu.
Instrukce zpracovávají paralelně.
Jsou sdruženy do instrukčního paketu a vznikne tím velmi dlouhé instrukční slovo, např. 256 bitů.
Paralelní umožňuje provádění několika různých operací současně: např. aritmetické operace, práce s pamětí atd.
Zároveň jednotlivé instrukce instrukčního paketu mohou být typu SIMD, takže mohou pracovat s více daty současně.
Taková architektura umožňuje vytvořit velmi efektivní program, ale většinou je potřeba "ruční" práce při optimalizaci.
Kompilátor ne vždy dokáže seřadit všechny instrukce efektivně do navazujících paketů.
Podmínkou je více stejných jednotek schopných paralelního vykonávání instrukcí.
Umožňuje počítači provádět několik pokynů najednou a nezávisle.
Operační kódy instrukcí jsou načteny z fronty instrukcí a teprve řadič rozhodne, zda a jak je možné instrukce zpracovávat paralelně.
Zásadní rozdíl spočívá v tom, že zatímco u VLIW je paralelní spouštění instrukcí založeno na instrukčním slovu, ve kterém se nachází jednotlivé operační kódy současně prováděných operací (explicitní instrukční paralelismus),
U superskalární architektury rozhoduje o paralelním provádění operací až řadič na základě toho, jak vyhodnotí obsazení pracovních registrů a strukturu programu. To převažuje dnes.
Architecture with Non-sequential Dynamic Execution Scheduling je vhodné chápat spíše jako historický příklad dynamického plánování instrukcí. Pro dnešní dobu je důležitější obecný princip out-of-order execution, nikoli konkrétní značka ANDES. |
Zpomalení způsobeno čekáním na data
Dynamický paralelismus
Vícenásobné fronty instrukcí
Celočíselná fronta pro celočíselné instrukce
Adresní fronta pro operace Load/Store
Fronta pohyblivé řádové čárky
Nezávislá pipeline pro každou frontu
instrukce vybrány podle připravenosti
není dodrženo pořadí instrukcí v programu
dokončení instrukce zajišťuje správné uspořádání
Spekulativní skoky:
výpočet pokračuje předpovězenou větví
nečeká na výsledek instrukce
neblokující Load/Store
Paralelní počítač se sdílenou pamětí
Paralelní počítač s distribuovanou pamětí
Paralelní počítač s distribuovanou sdílenou pamětí
Odvození složitosti vychází ze struktury jednoduchého paralelního systému — sečtení hodnot a — h — ve třech taktech
fs podíl délky části prováděné sériově (sekvenčně) k celkové délce výpočtu
fp podíl délky části prováděné paralelně k celkové délce výpočtu
fs + fp = 1
t doba sériového provádění výpočtu
p počet procesorů
Součinitel zrychlení S
S = t/(t.fs + t.fp/p)=1/((1 - fp) + fp/p)
Amdahlův zákon popisuje závislost součinitele zrychlení na podílu paralelizované části výpočtu.
V užším slova smyslu jsou to MIMD:
| Těsně vázané | vybaveny vlastní pamětí (může být velmi malá), malý stupeň autonomie (hlavní paměť a periferie jsou společné a využívají se střídavě) |
| Volně vázané | velká lokální paměť, vlastní periferie, značný stupeň autonomie (blíží se počítačové síti) |
Pro maticové operace
Architektura SIMD
Všechny procesory provádějí stejné operace
Buď s lokálními pamětmi
Nebo se sdílenou pamětí
Starší zjednodušení typu „nad 8 jader je systém neefektivní“ dnes už neplatí.
Skutečný problém je složitější: škálování omezuje paměťová propustnost, latence, koherence cache a propojovací síť.
Proto se ve větších systémech používají jiné topologie propojení a často i přístup NUMA.
V jednom pouzdře nebo na jednom čipu integruje více CPU
Spolupráce jader se obecně (v rámci mikropočítače) děje prostřednictvím operační paměti (RAM).
Přirozené zefektivnění spolupráce jader nastává v případě společně sdílené paměti cache, která umožňuje další zlepšení spolupráce příslušných jader.
Základní přehled vícejádrových CPU, SMT a akcelerátorů už je v kapitole 5. Procesory. Tady je důležité spíš to, že s rostoucím počtem jader roste význam koherence cache, interconnectu a paměťového subsystému. |
| L1 cache |
|
| L2 cache | ukládá kopie dat přečtených z adresy v operační paměti |
| Parametr | Původní von Neumann | Současný počítač |
|---|---|---|
Sběrnice a paměť | Jedna společná sběrnice pro data i instrukce | Modifikovaný Harvard, oddělené L1 cache, bodové spoje |
Zpracování instrukcí | Striktně sekvenční | Pipeline, out-of-order, superskalární jádra |
Počet výpočetních jednotek | Jedno hlavní CPU | Vícejádrové CPU a specializované akcelerátory |
Správa V/V | CPU přímo řídí přenosy | DMA, dedikované řadiče, rychlá I/O propojení |
Na úrovni hlavní paměti se stále používá společný adresní prostor.
Uvnitř jádra ale CPU často odděluje I-cache a D-cache.
Tím se zmírňuje von Neumannovo úzké hrdlo a zlepšuje se plynulost pipeline.
Jde o techniky, které zvyšují výkon uvnitř jednoho jádra.
Patří sem zejména pipeline, superskalárnost, out-of-order execution a register renaming.
CPU nečeká zbytečně na instrukce, které mohou běžet až později.
Místo toho hledá takové operace, které lze vykonat dříve bez porušení správnosti programu.
Přejmenování registrů pomáhá odstranit falešné závislosti a lépe využít výpočetní jednotky.
SMT (Simultaneous Multithreading) umožňuje jednomu fyzickému jádru obsluhovat více vláken.
Nejde o totéž jako další jádro, ale o lepší využití nečinných částí pipeline.
Typickým příkladem je Hyper-Threading u některých procesorů Intel.
Vedle ILP existuje i datový paralelismus.
Jedna instrukce může provádět tutéž operaci nad více prvky současně vektorové výpočty, SIMD instrukce, GPU, NPU.
To je důležité pro multimédia, šifrování, numerické výpočty i strojové učení.
Místo neustálého zvyšování frekvence jednoho jádra se výkon zvyšuje i přidáváním dalších jader.
Běžné je také delegování specializovaných úloh na GPU nebo NPU.
Moderní procesory a SoC (např. Apple Silicon nebo mobilní platformy Arm) integrují CPU, GPU, NPU a další řadiče do jednoho pouzdra či čipu.
Dnešní počítače jsou proto stále častěji heterogenní systémy.
Ve vícejádrovém systému je nutné hlídat, aby různá jádra viděla konzistentní data.
Tomu se věnuje koherence cache.
U větších serverů se navíc řeší NUMA (Non-Uniform Memory Access), kde není přístup do celé RAM stejně rychlý.
Tradiční sdílené sběrnice byly postupně nahrazeny rychlými point-to-point spoji.
Typickým příkladem je PCI Express.
DMA dovoluje periferiím přesouvat data do RAM bez toho, aby každý krok musel řídit procesor.
Dvojitá L1 cache
Hierarchie keší L1 → L2 → L3
Bodové propojení zařízení
DMA kanál
Heterogenní výpočet: CPU + GPU + NPU / maticové akcelerátory
Chipletové a dlaždicové návrhy místo jednoho velkého monolitického čipu
Pokročilé vektorové a maticové instrukce pro AI, HPC a multimédia
Stále důležitější výkon na watt a řízení spotřeby
Rychlé point-to-point propojení CPU, paměti a akcelerátorů
V serverech roste význam CXL a paměťové disaggregace
Klasické SIMD je doplňováno instrukcemi specializovanými na vektorové a maticové výpočty.
U Armv9 sem patří např. SVE2 a SME/SME2; cílem je vyšší propustnost u AI, multimédií a numerických úloh.
Podobný trend existuje i u x86 a u specializovaných GPU/NPU: více práce se provede nad blokem dat jednou instrukcí nebo jedním výpočetním příkazem.
Operační systém a runtime stále častěji plánují práci mezi různými typy výpočetních jednotek.
CPU je vhodné pro obecné a řídicí úlohy, GPU pro masivní datový paralelismus a NPU pro vybrané operace strojového učení.
Výkon systému proto nelze hodnotit jen počtem CPU jader nebo taktovací frekvencí.
Vyšší výkon přinášejí techniky jako predikce skoků a spekulativní vykonávání.
Tyto optimalizace ale ukázaly i bezpečnostní rizika.
Známým příkladem jsou zranitelnosti typu Spectre a Meltdown.
Maticové procesory se sdílenou pamětí někdy využívají asociativní výběr z paměti (podle obsahu) — hlavně CACHE paměti
Paralelní, sériové po bitech, sériové po slovech
Jde hlavně o specializované téma. Pro běžné procesory je dnes prakticky důležitější znalost asociativního vyhledávání v cache než představa samostatného „asociativního počítače“ jako hlavního směru vývoje CPU. |
Komentář k obrázku
K = Hledaný klíč
M = Maska 1111
P = paměťové pole
V = registr výsledku
Ti = pomocné registry mezivýsledku
R = vybraná informace
Hledání extrémů ( max, min, medián — mezi ostatními podle daného uspořádání)
Hledání ekvivalence (shoda s klíčem, neshoda s klíčem, podobnost s klíčem v toleranci)
Hledání sousednosti (nebližší nižší, vyšší)
Hledání podle prahu (menší než klíč, menší nebo rovný, větší než klíč, větší nebo rovný)
Hledání podle dvou a více prahů (interval)
Řazení (vzestupné, sestupné)
„Netradiční“ = jiné než principiálně navrhl John von Neumann
Počítače řízené tokem dat
Počítače řízené tokem požadavků
Systolické systémy
Neuronové počítače
Většina těchto architektur není dnes běžným základem osobních počítačů nebo serverových CPU. Jsou ale důležité historicky a některé principy se vracejí ve specializovaných akcelerátorech. |
Data flow computer
Instrukce se spouští ve chvíli, kdy jsou k dispozici všechny operandy potřebné pro její provedení
Počítače řízené tokem dat nemají čítač instrukcí
y=a*b+c*d Přesuň1 a a -> R1 ; (1)
Násob1 b R1*b -> R1
Přesuň2 c c -> R2
Násob2 d R2*d -> R2
Sečti12 R1+R2-> R1
Ulož1 y R1 -> y| 1 | "Přesuň1" znamená instrukci přesouvající hodnotu zadanou jako parametr do registru 1. |
Podobné analogovým počítačům
Př. Výpočtu kořenů kvadratické rovnice
a*x² + b*x + c = 0
X = (-b +/- SQRT(b² - 4*a*c))/(2*a)
| Statické | není schopen rozlišovat příslušnost operandů k různým úlohám nebo k různým cyklům v rámci jedné úlohy. Proto se musí zajistit rozlišení, aby se na vstupu operační jednotky nesetkaly operandy, které nemají být zpracovány v jedné operaci |
| Dynamické | každý operand je vybaven příznakem příslušnosti k určité úloze — tím umožněno paralelní zpracování |
Řešení úloh aritmetické povahy
Provádění podmíněných operací a operací závislých na povaze zpracovávaných dat
Nevhodné pro realizaci procedur
Nemožnost použití vyšších programovacích jazyků
Proto speciální jazyky se snadným překladem do strojového kódu
Počítače řízené tokem dat mnohdy vytvářejí výsledky „do zásoby“, bez ohledu na to, kdy budou skutečně použity
Každý mezivýsledek se vypočítá až tehdy, kdy je požadován pro další výpočet
Pevně propojená síť funkčních jednotek, určená pro řešení jedné úlohy nebo jedné třídy úzce příbuzných úloh
Její propojení je vlastně obvodová realizace algoritmu výpočtu (proto není řízen programem)
Myšlenka vznikla z redukce nároků na rychlost paměti
mřížkové struktury spec. procesních prvků,
zpracování dat ve více (nejčastěji 1-2) dimenzích
na rozdíl od řetězeného zpracování, strukturou proudí vstupní data i mezivýsledky
data mohou proudit několika směry a různými rychlostmi
buňky jsou jen jednoho nebo nejvýš několika málo typů
kombinace intenzivní lokální komunikace a výpočtů
provádění operací rytmickým, inkrementálním, buňkovým a opakovaným způsobem
mohou fungovat jako koprocesor (back-end) k hostiteli
vysoké požadavky na I/O paměťový subsystém mezi buňkami.
maticová aritmetika
zpracování signálů
zpracování obrazů
rozpoznávání řeči
operace s relačními databázemi
manipulace s datovými strukturami
manipulace s řetězy znaků
pevné, programovatelné, rekonfigurovatelné
Zadrátované systolické prvky ušité na míru specifické aplikaci. Desítky nebo stovky buněk se mohou vejít na jeden čip.
Mohou se adaptovat na řadu aplikací programováním nebo rekonfigurací.
Buď propojení polí nebo každá procesní jednotka je programovatelná.
Základní myšlenkou je síť propojených výpočetních prvků (umělých neuronů).
Historicky se často začínalo modelem prahového logického prvku.
Dnes se tyto principy uplatňují hlavně v neuronových sítích a ve specializovaných akcelerátorech typu GPU, TPU nebo NPU.
Učení: nastaví se na požadované chování (váhy, práh a struktura neuronů na základě přiřazení vzorku vstupů k požadované odezvě sítě)
Aktivní činnost sítě: podle naučeného chování
model se neučí klasickým sekvenčním programem, ale úpravou vah podle dat
dobrá schopnost aproximace složitých závislostí
schopnost zobecnění na podobná, ne zcela shodná data
výsledek silně závisí na datech, architektuře a způsobu učení
rozpoznávání obrazu, řeči a textu
klasifikace, odhad, predikce a detekce vzorů
zpracování dat tam, kde je ručně psaný algoritmus obtížný nebo křehký
Jde o výpočetní model založený na principech kvantové mechaniky.
Základní jednotkou dat je qubit.
Jeho základní stavy se zapisují jako |0> a |1>.
Qubit může být v superpozici těchto stavů; nejde jen o „libovolnou hodnotu mezi 0 a 1“ v běžném číselném smyslu.
Kvantový počítač není „rychlejší klasický procesor“. Je to specializovaný model vhodný jen pro některé typy úloh a dnes rozhodně nenahrazuje běžná CPU. |
| Superpozice | Qubit může být ve stavu |
| Propletení | Stav více qubitů nelze vždy rozdělit na nezávislé stavy jednotlivých částí. |
| Interference | Kvantové algoritmy využívají skládání amplitud tak, aby zvýraznily správné výsledky a potlačily jiné. |
Kvantový algoritmus připraví stav qubitů, provede posloupnost kvantových operací a nakonec systém změří.
Výhoda se neprojeví u každé úlohy; záleží na existenci vhodného kvantového algoritmu.
Často uváděné oblasti:
rozklad velkých čísel,
simulace molekul a materiálů,
některé optimalizační a vyhledávací úlohy.
Qubity jsou velmi citlivé na rušení z okolí.
Kvantové počítače často potřebují extrémně nízké teploty (blízko absolutní nuly).
Je těžké je škálovat, tedy vytvořit kvantový počítač s mnoha stabilními qubity.
Smyslem kvantového výpočtu není „zázračně vyřešit vše jedním krokem“.
Typický příklad z literatury je
Shorův algoritmus pro rozklad čísla nebo
Groverův algoritmus pro vyhledávání.
Pro výuku zde stačí chápat, že kvantová výhoda vzniká jen u některých úloh a za cenu velmi náročné fyzické realizace.
| Základní jednotka | Bit – může být 0 nebo 1 |
| Zpracování | Provádí operace nad bity pomocí logických bran (AND, OR, NOT…) |
| Architektura | Sekvenční – instrukce se vykonávají krok za krokem |
| Paměť | RAM, cache, registry – vše klasické |
| Použití | Všechny běžné počítače, mobily, servery |
| Základní jednotka | Qubit – může být 0, 1, nebo superpozice obou |
| Zpracování | Využívá kvantové jevy: superpozice, propletení, interference |
| Architektura | Speciální kvantový model, ne běžný sekvenční procesor |
| Paměť | Kvantová paměť – uchovává kvantové stavy (velmi citlivá) |
| Použití | Speciální úlohy: kryptografie, simulace molekul, optimalizace |
Klasické CPU zůstává univerzálním základem běžných počítačů.
Kvantové počítače jsou zatím experimentální a specializované.
Výkon CPU neurčuje jediná veličina; rozhodují frekvence, IPC, paměťová hierarchie, paralelismus i charakter úlohy.
Pipeline, superskalárnost, predikce, out-of-order execution a register renaming zvyšují ILP.
Vícejádrové CPU, SMT, SIMD, GPU a NPU přidávají další úrovně paralelismu.
Amdahlův zákon připomíná, že sekvenční část programu omezuje maximální zrychlení.
Moderní počítač je heterogenní systém s hierarchickou pamětí a rychlými point-to-point propojeními.
Netradiční architektury ukazují, že von Neumannův model není jediný možný způsob organizace výpočtu.
HTML · Slides · PDF | Přehled předmětu