Téma prezentace: Optimalizace provádění instrukcí
Typ souboru: prezentace PPTX
Přidal(a): Patrik Lukáč
Popis materiálu:
Obsahem této prezentace jsou informace ohledně optimalizace provádění instrukcí u mikroprocesorů.
Osnova:
Optimalizace provádění instrukcí
Techniky zvýšení výkonu
Obsah
Techniky zvýšení výpočetního výkonu mikroprocesorů
Rozšíření bitové šířky zpracovávaných dat
Zvýšení počtu pracovních registrů
Hierarchické uspořádání paměti
Fronta instrukcí
Zřetězení zpracování instrukcí (pipelining)
Explicitní paralelní zpracování instrukcí (VLIW)
Spekulativní provádění instrukcí
Provádění instrukcí mimo pořadí
Masivně paralelní architektury
Superskalární architektura
Prediktory skoků
Architektura SIMD
Techniky zvýšení výkonu MCU
Rozšíření bitové šířky zpracovávaných dat
Nejsnazší metoda – rozšíření počtu bitů
4 bitové (stolní kalkulátory)
8 bitové (herní konzole, domácí PC)
16 bitové (mezistupeň k 32 a 64 bitovým)
32 a 64 bitové (dnešní moderní PC..)
Zvýšení počtu pracovních registrů
a hierarchické uspořádání paměti
Dříve se s pracovními registry šetřilo, kvůli výrobní ceně
Výtěžnost výroby
Dnes už je počet registrů velice rozsáhlý
Hierarchická struktura – paměť s pracovními registry, vyrovnávací paměť(cache), Level 1 cache, Level 2 cache (pomalejší, větší kapacita) a operační paměť
Fronta instrukcí
fronta s operačními kódy z operační paměti
Z druhé strany fronty si operační kódy vybírá řadič.
složitější instrukce (například násobení) => do fronty instrukcí se načítají další operační kódy a ve chvíli, kdy se provádí rychlé operace (součet dvou registrů, inkrementace, porovnávání, logické operace) se operační kódy mohou velmi rychle číst z fronty
Zřetězení zpracování instrukcí (pipelining)
Načtení instrukce z operační paměti (fetch)
Dekódování instrukce v řadiči (decode)
Přenos obsahů pracovních registrů (memory access)
Vlastní provedení instrukce (execute)
Uložení výsledku zpět do pracovního registru (write back)
Explicitní paralelní zpracování instrukcí (VLIW)
Spekulativní provádění instrukcí
Základní myšlenka – ve chvíli, kdy nám prediktor skoků „předpoví“, zda bude podmíněný skok proveden či nikoli, je možné začít do instrukční pipeline vkládat instrukce
= > podle výsledku prediktoru se předpoví zda se provede nebo neprovede
Provádění instrukcí mimo pořadí
je možné začít provádět nějakou jinou instrukci, u níž je zaručeno, že používá jiné pracovní registry a příznaky. Interně se řazení instrukcí provádí na základě jejich ukládání do instrukční fronty, ze které jsou instrukce vybírány ve chvíli, kdy jsou známy hodnoty jejich operandů.
pro nejlepší využití instrukční pipeline je důležité, aby co nejvíce instrukcí mohlo být prováděno současně či téměř současně (to zajistíme velkým množstvím pracovních registrů)
Masivně paralelní architektury
opuštění koncepce jediné centrální sběrnice a v mnoha případech také jediné operační paměti
Místo sběrnice je použita nějaká obecnější struktura, například v nejjednodušším případě mřížka, dále pak hyperkostka (kostka zobecněná do n dimenzí),„tlustý“ binární strom atd.
U všech těchto topologických struktur jsou hrany představovány datovými linkami a uzly mikroprocesory s vyrovnávací pamětí, směrovačem (router) a někdy také částí operační paměti
Superskalární architektura
Mikroprocesory postavené na superskalární architektuře dokážou v jednom taktu začít vykonávat více než jednu instrukci, přičemž současně vykonávané instrukce používají samostatné moduly na mikroprocesoru.
První mikroprocesor řady x86 – Intel Pentium
Prediktory skoků
dopředu odhadnou, zda se skok provede či nikoli a na základě toho začnou do instrukční pipeline vkládat instrukce, které se nachází ihned za skokem či naopak v cíli skoku.
jednobitový prediktor skoků pracuje tak, že si procesor u každého skoku v jednom bitu zapamatuje, zda byl skok proveden či nikoli. Když se v instrukční pipeline znovu skok objeví, tak se procesor na základě předešlého běhu programu rozhodne, které další instrukce se pravděpodobně budou zpracovávat.
dvoubitový prediktor pracuje velmi podobným způsobem, ovšem pamatuje si nejenom předchozí výsledek skoku (proveden, neproveden), ale i minulý stav predikce.
Architektura SIMD
architektura, ve které se pomocí jedné instrukce může zpracovat větší množství dat
např. u instrukční sady MMX je možné pomocí jediné instrukce provést součet dvou vektorů číselných hodnot
Předností je jak relativně kompaktní instrukční sada, tak i paralelní a tím i rychlý běh mnoha algoritmů, ovšem za cenu větších nároků na programátora
Většinu SIMD konstrukcí se zapisuje už pomocí hotových maker nebo specializovanými jazyky
Děkuji za pozornost