Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Haladó Fordítóprogramok

Hasonló előadás


Az előadások a következő témára: "Haladó Fordítóprogramok"— Előadás másolata:

1 Haladó Fordítóprogramok

2 Követelmények Horváth Gábor xazax.hun@gmail.com xazax.web.elte.hu
3-5 oldalas esszé, téma bemutatása, minimális előismeretet feltételezve Témák előadás közben További témák GCC Summit Proceedings LLVM Dev meetings Open Book ZH Egy A4-es lap segédlet használható

3 + Cikkek + Konferencia előadások
Tananyag + Cikkek + Konferencia előadások

4 Célkitűzések Gyakorlatias ismeretek
Mai vezető fordítókban használt algoritmusok, architektúrák GCC, Clang Rust Swift Intuíció arról, mire képes a fordító, mire nem Segítség hatékony kód írásához Könnyebb bekapcsolódás fordítók fejlesztésébe Hány fordító/interpreter van egy böngészőben? TensorFlow AXL, Apache Flink, Configs

5 Mit várunk el egy fordítótól?

6 DEMO #include <iostream> int main() { int i = 1; std::cout << ++i << ++i << std::endl; }

7 DEMO #include <iostream> int fact(int i) { if (i < 1) return 1; return i*fact(i-1); } int main() { std::cout << fact(5) << std::endl; }

8 Fordítók Egyik nyelvről a másikra fordítunk
Pl.: C++ → Haswell utasításkészlet Minél távolabbi a forrás és a cél nyelv annál komplexebb a fordító A számítástudomány minden területét igénybe veszik Mohó algoritmusok (regiszter allokáció) Heurisztikus keresés (ütemezés) Gráf algoritmusok (dead code elimination) Véges automaták (lexing, szintaktikus elemzés) Fix-pont algoritmusok (data-flow analysis) Kevés szoftverfajtában található egyszerre ennyi komplex feladat

9 Fordítók Számos elméleti eredmény találta meg a fordítókban a felhasználását Lattice theory (hálók) Számelmélet Mintaillesztés gráfokon, gráfredukció Számos megoldandó probléma NP teljes Hatékony közelítőmegoldásokat alkalmazunk Lehetséges jobb heurisztikákat kitalálni Rengeteg a trade-off Regiszter haszálat vs hatékony ütemezés Kódméret vs sebesség Optimalizálásra vs futásra szánt idő

10 Fordítók felépítése

11 Fordítók felépítése

12 Optimalizáció Valamely szempontból javít a kód minőségén
Futási idő, memória használat, kódméret, biztonság, … Megőrzi a kód jelentését Biztonságos egy transzformáció használata? Statikus analízis! Döntsük el futtatás nélkül! Tényleg javít a kódon? Költségmodellek Architektúra függő Profile guided optimization

13 Fordítók felépítése

14 Fordítók felépítése

15 Swift fordító, Swift Intermediate Language

16 Swift fordító, Swift Intermediate Language

17 Backend Instruction selection Regiszter allokáció
Ugyanazt a hatást több utasítással/utasítás sorozattal is el lehet érni adott architektúrán. Melyiket válasszuk? Regiszter allokáció Mely regiszterekbe mely értékeket tároljuk el? Mikor lehet lecserélni egy regiszter tartalmát? Instruction scheduling Az egyes utasítások végrehajtása eltérő időt vehet igénybe Ugyan az az utasítás végrehajtása eltérő időt vehet igénybe (cache locality) Instruction level parallelism Out of order execution

18 Modern CPU

19 Modern CPU Pipeline Stalls Cache hierarchy Prefetch
Instruction level parallelism Out of order execution Csak az utasítások bufferén belül Van értelme statikus ütemezésnek GPU, mobil processzoroknál néha nincs Branch prediction SIMD instructions

20 Pipeline

21 SIMD Kevesebb utasítás jut egységnyi operandusra Prefetch barát
Nem a hagyományos regisztereket terheli Természetes módon előfordul Grafika, fizika, matek

22 Instruction Scheduling
LoadAI, StoreAI 3 órajel Mult 2 órajel Többi 1

23 Instruction Scheduling
LoadAI, StoreAI 3 órajel Mult 2 órajel Többi 1

24 Engineering Ütemezéskor a load-okat távolabb helyezzük a betöltött érték felhasználásától Tovább maradnak az értékek a regiszterekben, nő a regiszter használat

25 Lexikális elemzés Reguláris nyelvtan Véges automaták
Karakterek számában lineáris futási idő Tokenek, tokenizálás Részletesen: Fordítóprogramok tárgy Néhány esetben parser része

26 Szintaktikus elemzés Környezet független nyelvek
Terminálisok, nem terminálisok, kezdőszimbólum, produkciós szabályok Tokeneken dolgozik Nyelvtan leírása (BNF) Balrekurzív szabály, jobbrekurzív szabály Többértelműség feloldása Asszociativitás, precedenciák Szintaxis fa Elemzés alulról felfelé, felülről lefelé Absztrakt szintaxisfa vs konkrét szintaxisfa

27 Szintaxis fa

28 Rekurzív leszállás (Recursive Descent)
Minden nem-terminálisnak megfeleltehető egy függvény Kézzel írt elemző Az adott függvény a hozzá tartozó nem-terminálist ismeri fel az input streamen A nyelvtan meghatározza mely függvények hívják egymást LL(k) nyelvtanokra jó, balrekurzív nyelvtanok nem működnek Balrekurzív szabály mindig eliminálható! Vigyázat, stack overflow! Legtöbb ipari fordító elemzője ez! Miért!?

29 Rekurzív leszállás (Recursive Descent)
Akadémiai nyelvek Reguláris nyelvtan: lexelés Környezet független nyelvtan: elemzés A nyelvtan egyértelmű Környezet függő nyelvtan a típusellenőrzés C++ Lexelés se reguláris, se nem környezet független (template >>, C++11) Nyelvtan nem egyértelmű, típusinformációk kellenek a feloldáshoz Nem szétválasztható a szemantikus és szintaktikus elemzés Error recovery

30 P * t; // Pointer vagy szorzás?
Többértelmű nyelvtan P * t; // Pointer vagy szorzás?

31 Balrekurzió eliminálása
Expr → Expr + Expr | Integer | String Expr → Integer Expr’ | String Expr’ Expr’ → + Expr Expr’ | Empty Miért van egyáltalán balrekurzív szabályunk? Asszicativitás!

32 Error recovery Csak mert a felhasználó lefelejtett egy pontos vesszőt, a többi függvényt még lehet elemezni, hogy egyszerre több hibaüzenettel szolgálhassunk Az elemző vissza kell tudjon állni egy stabil állapotba a hibás bemenet után és folytatni a munkát Minél jobb hibaüzenetekre van szükségünk Makróknál minden tokennek két pozíciója van: spelling location, expansion location

33 Összefoglalás Könyv első 180 oldala letudva
Architektúrális áttekintések, emlékeztető lexikális és szintaktikus elemzésről Modern CPU gyorstalpaló Továbbiakban optimalizáció, statikus analízis jóval részletesebben, lassabban Főleg táblás gyakorlatokra lehet számítani


Letölteni ppt "Haladó Fordítóprogramok"

Hasonló előadás


Google Hirdetések