Optimalizace provádění instrukcí – prezentace

Téma prezentace: Optimalizace provádění instrukcí

Typ souboru: prezentace PPTX

Přidal(a): Patrik Lukáč

 

 

Popis materiálu:

Obsahem mé 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