Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Překladače Optimalizace © Milan Keršláger 27.9.2016 http://www.pslib.cz/ke/slajdy http://creativecommons.org/licenses/by-nc-nd/3.0/
2
Optimalizace ● první část zadní části překladače ● závislá na cílové platformě ● vstup i výstup: typicky intermediální kód ● vhodnější forma pro optimalizace ● chyby optimalizace ● někdy je nutné optimalizaci vyloučit – časově kritické operace – záměrná forma kódu
3
Co je optimalizace ● modifikace programu (typicky strojová) ● beze změny funkce programu ● cílem vyšší efektivita – rychlost výpočtu, rychlejší start, méně systémových prostředků, menší kód,... ● při návrhu programu – volba algoritmu ● jako součást kompilace – ručně, automaticky ● za běhu programu – JIT, profilování
4
Rozsah optimalizace ● lokální ● v rámci bloku programu ● typicky malé lineární části kódu ● nemusí znát kontext programu ● globální ● v rámci podprogramů – reorganizace kódu, zánik nepoužívaných částí,... ● v rámci celého programu – související kód blízko sebe
5
Typy optimalizací ● optimalizace toku dat ● způsob zpracování výrazů ● volba metody zpracování a vyhodnocení výrazu ● optimalizace cyklů ● reorganizace běhu programu ● hledání lepšího zápisu algoritmu ● optimalizace generování cílového kódu ● zaměření na použitou platformu, mikroprocesor ● závislé na hardware
6
Optimalizace toku dat ● eliminace společných podvýrazů ● (a+b)*(a+b) – zbytečný stejný výpočet ● výpočet konstantních podvýrazů ● (3+5)*x – výpočet již při kompilaci ● analýza ukazatelů ● identifikace společných ukazatelů, stejných dat
7
Optimalizace cyklů ● slučování cyklů ● stejný rozsah řídící proměnné ● rozdělování cyklů ● optimalizace zpracování dat (cache) ● zaměňování cyklů ● vnitřní a vnější → lepší využití cache ● konstantní výrazy ● výraz má při průchodech stále stejnou hodnotu
8
Optimalizace cyklů ● rozvinutí cyklu ● pro pevný počet opakování je kód duplikován ● ušetří se vyhodnocování, skoky (režie) ● unswitching ● vysunutí podmínky vně cyklu + duplikování cyklu ● indukční proměnné ● v každém cyklu se mění stejně (výpočet → součet) ● automatická paralelizace ● paralelizace nebo vektorizace výpočtu
9
Hardwarově závislé ● optimalizace cílená na platformu, procesor ● nejen CPU, ale i zbytek počítače (sběrnice, I/O) ● nutná detailní dokumentace ● zveřejňuje výrobce hardware ● Intel vlastní kompilátor, podílí se na optimalizacích – SETI@Home, sponzorování vývoje GCC apod. SETI@Home ● nástroje pro simulace chování procesoru ● hardware zveřejňuje interní údaje – využití cache (miss, hit, vylévání) – měření počtu tiků hodin a podobně
10
Schéma procesoru ALU Registry Řadič paměti Řídící jednotka Dekodér instrukcí Prováděcí jednotka
11
Popis částí procesoru ● řídící jednotka ● organizace činnosti částí procesoru, hodiny ● dekodér instrukcí ● načítání a dekódování následující instrukce ● řadič paměti (+ cache) ● stránkování, segmentace → získání fyzické adresy ● ALU, prováděcí jednotka ● vlastní vykonávání instrukcí ● registry → uchovávání dat
12
Zřetězení (pipelining) ● jednotlivé části procesoru pracují postupně ● dle pokynů řídící jednotky ● postup provedení instrukce ● načtení, dekódování, provedení, uložení výsledku ● nečinné části lze zaměstnat ● po dekódování instrukce lze dekódovat další ● v jednom okamžiku různě rozpracované instrukce ● potíže se skokem (podmíněným) ● nutno zahodit rozpracované instrukce
13
Superskalarita ● některé části procesoru duplikovány ● více ALU, FPU ● ale ne duplikace celého procesoru (viz multicore) ● paralelní zpracování instrukcí ● pouze pokud se navzájem neovlivňují ● v jednom taktu více instrukcí najednou ● Intel → hyperthreading ● dvě řídící jednotky, ale ne celá jádra ● někdy se musí čekat na uvolnění neduplik. části
14
Víceprocesorové systémy ● více procesorů sdílí stejnou operační paměť ● procesor musí žádat o přístup do paměti (zápis) ● → procesor čeká na uvolnění přístupu ● stejný problém s datovými strukturami ● → souběh → zamykání ● NUMA ● každý procesor „svůj region paměti“ ● omezení vzájemné blokace – žádost o přístup jen při přístupu do paměti jiného CPU
15
SMP vs. ASMP ● jde o systém využití více procesorů ● návrh jádra operačního systému ● symetrický multiprocesing → nejrozšířenější ● všechny procesory jsou si rovny ● datové struktury se důsledně zamykají ● při zamykání vzniká problém uváznutí (deadlock) ● asymetrický multiprocesing ● procesory pro různé činnosti (IRQ, I/O, jádro OS...) ● ASMP OS (Novell Netware) – jen jeden procesor vykonává kód jádra → jednoduché
16
Cache ● rychlá vyrovnávací paměť ● odděluje různě rychlé komponenty (CPU × RAM) ● ideálně obsahuje data, ke kterým se přistupuje – zrychlení opakovaného přístupu – naplnění širší sběrnicí (okolní obsah RAM) – problém vhodné strategie ● různé způsoby zápisu do RAM ● writeback → zápis do RAM až později – vznik nekonzistencí, nucený zápis při vylití cache ● pass-through → zachycení dat při zápisu
17
CISC vs. RISC ● RISC → ARM, MIPS, SPARC,... ● redukovaná instrukční sada – jednoduché, stejně dlouhé instrukce, provedení v 1 taktu ● jednodušší konstrukce procesoru – jednodušší logika, lze větší cache, menší spotřeba,... ● CISC → Intel x86 a kompatibilní ● rozšířená instrukční sada ● specializované instrukce (násobení) ● komplikuje návrh procesoru ● dnes již nemá význam (používáme překladače)
18
Optimalizace cílového kódu ● alokace registrů ● umístění proměnných do registrů → grafy, barvení ● výběr instrukcí ● lepší varianta (zejména u CISC procesorů) ● využití pipeline ● překrývání zpracování strojových instrukcí ● využití superskalarity ● paralelní zpracování strojových instrukcí ● optimalizace cache ● jak pro data, tak pro instrukce
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.