Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Překladače 7. Optimalizace

Podobné prezentace


Prezentace na téma: "Překladače 7. Optimalizace"— Transkript prezentace:

1 Překladače 7. Optimalizace
Obsah: typy optimalizací optimalizace toku dat, cyklů zřetězení, superskalarita víceprocesorové systémy CISC, RISC © Milan Keršláger

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 (ovladač zřízení) aby zůstala záměrná forma kódu ladění pomocí debuggeru

3 Co je optimalizace modifikace programu (typicky strojová)
beze změny funkce programu cílem vyšší efektivita, např: rychlost výpočtu rychlejší start méně systémových prostředků menší kód ...

4 Kdy se optimalizace provádí
provádění při: při návrhu programu volba algoritmu úloha člověka (programátor) jako součást kompilace ručně (úprava algoritmu či jeho zápisu) automaticky (strojová úprava kódu) za běhu programu speciální JIT kompilátory (Just In Time) profilování (sledování a analýza běhu programu)

5 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

6 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

7 Optimalizace toku dat 1 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ů identifikace stejných dat

8 Optimalizace toku dat 2 sdružování úklidových operací
hromadné rušení obsahu zásobníku např. mnohanásobné návraty z funkcí obsahuje lokální proměnné, parametry eliminace nepotřebných výrazů výpočet, který není dále použit odstraňování nedosažitelného kódu jak pro smyčky, tak pro podmínky

9 Optimalizace cyklů 1 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

10 Optimalizace cyklů 2 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

11 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 sponzorování vývoje GCC apod. 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ě

12 Schéma procesoru Registry ALU Řadič paměti Prováděcí jednotka Řídící
Dekodér instrukcí

13 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

14 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

15 Superskalarita zpracování více instrukcí najednou
zvýšení výkonu procesoru (není ale více procesorů) CPU typově MIMD (Multiple Instruction, Multiple Data) výpočet je stále prováděn v jednom vlákně v jednom taktu může být dokončeno více strojových instrukcí některé vnitřní části CPU jsou duplikované aritmeticko-logická jednotka (ALU) celočíselná násobička, jednotka pro bitové posuny jednotka pro zpracování čísel s plovoucí čárkou (FPU) problém závislosti instrukce na výsledku předchozí problém atomicity → musí se emulovat

16 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

17 SMP 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) problém návrhu jádra OS v době návrhu existovaly jen v PC jen UP (1 CPU) zamykáním (souběhem) se nikdo nezabýval pak to bylo potřeba do jádra „došít“ BIGLOCK (BKL) → jeden velký zámek nejjednodušší řešení, ale blokuje všechny ostatní CPU jeho odstranění: Windows 7 (skoro), Linux (plně )

18 ASMP asymetrický multiprocesing
máme více CPU, ale jádro OS jen pro UP řešení dovolíme jádru běžet jen na CPU#0 zavolá-li proces jádro z CPU#1, musí syscall čekat na přidělení prvního jádra procesoru (CPU#0) → problém zamykání řešíme serializací provádění kódu jádra → tím pádem nejsou potřeba zámky je to nejsnadnější přizpůsobení UP jádra pro (A)SMP ale spoustu času pročekáme na jádro CPU#0 příklad ASMP OS: Novell Netware 4.x byl to fileserver (sdílení disků v LAN), pomohlo to je možné, že některé činnosti jádra i na jiných CPU

19 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 umístění cache: na procesoru (L1) mezi procesorem a pamětí (L2, L3) v RAM (při čtení z disku)

20 Cache na procesoru typicky označována jako L1 instrukční cache
snaha, aby se instrukce (ve smyčce) vešly do cache cache pro data strategické rozmístění dat v RAM analýza využití cache simulátor procesoru (poskytuje výrobce) statistická data od procesoru za běhu procesoru

21 Cache pro RAM nastavení v setupu BIOSu
BIOS při startu nastavuje chipset dvě možnosti: writeback → zápis do RAM až později vznik nekonzistencí, nucený zápis při vylití cache při zápisu cache okamžitě data přijme minimalizace doby trvání zápisu z CPU do RAM pass-through → zachycení dat při zápisu procesor čeká, až se data zapíší do RAM během zápisu cache procházející data zachytí

22 Zarovnání paměti RAM připojena k CPU sběrnicí FSB tzv. Front-side bus
v současnosti typicky 64 bitů (Intel, AMD) paměť na stejné frekvenci, jako FSB procesor běží rychleji (podle zvoleného násobku) RAM do matice podle šířky FSB čtení sousedních bajtů musí být někdy nadvakrát data umisťována tak, aby stačilo jedno čtení tj. při ukládání dat se nevyplatí „šetřit“

23 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)

24 Endianita způsob ukládání větších čísel (pořadí bajtů) big endian
Motorola 68000, SPARC pomůcka: „big end first“ číslo 0x1234 v paměti postupně po bajtech: 12, 34 little endian Intel, DEC VAX pomůcka: „little end first“ číslo 0x1234 v paměti postupně po bajtech: 34, 12 problém při komunikaci mezi systémy musí být určen např. zápis portu, IP adresy, ...

25 Koprocesor doplňující procesor v počítači (coprocesor)
pro operace v plovoucí řádové čárce → FPU Floating Point Unit (od součást CPU) pro grafiku → GPU Graphical Processor Unit tzv. offloading (delegování výpočtu na GPU) šifrovací procesory rychlé provádění transformací dat signálové procesory Digital Signal Processing (DSP) Analog signal processing (filtry, mixér, zpoždění...) Discrete signal processing

26 Optimalizace cílového kódu 1
alokace registrů rozhodnutí, jaké proměnné a kdy v registrech registrů je málo používají se grafy, barvení grafů výběr instrukcí lepší varianta (varianty u CISC, rozšíření MMX...) využití koprocesoru maximalizace využití zřetězení překrývání zpracování strojových instrukcí vhodné přerovnání instrukcí beze změny smyslu

27 Optimalizace cílového kódu 2
maximalizace využití superskalarity paralelní zpracování strojových instrukcí opět vhodné přerovnání instrukcí optimalizace cache v CPU jak pro data, tak pro instrukce rozložení kódu v binárním souboru (cache v RAM) zarovnání paměti eliminace dvojího čtení z paměti


Stáhnout ppt "Překladače 7. Optimalizace"

Podobné prezentace


Reklamy Google