Haladó Fordítóprogramok

Hasonló dokumentumok
Fordító részei. Fordító részei. Kód visszafejtés. Izsó Tamás szeptember 29. Izsó Tamás Fordító részei / 1

Fordító Optimalizálás

GPU Lab. 4. fejezet. Fordítók felépítése. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Programozási nyelvek (ADA)

Fordító Optimalizálás

Számítógépek felépítése

Bisonc++ tutorial. Dévai Gergely. A szabály bal- és jobboldalát : választja el egymástól. A szabályalternatívák sorozatát ; zárja le.

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

Clang Static Analyzer belülről

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

Informatika szigorlat. A lexikális elemző feladatai közé tartozik a whitespace karakterek (a

Modellező eszközök, kódgenerálás

Fordítóelmélet bevezetés

Flex tutorial. Dévai Gergely

C++ programok fordítása

Teljes visszalépéses elemzés

Google Summer of Code OpenCL image support for the r600g driver

Fordítóprogramok. Aszalós László szeptember 7.

Alkalmazások architektúrája

Mentegetőzések. Hatékony CPU kód. írásához hasznos architekturális háttér, hogy miért is lassú a kódom. Valasek Gábor

Magas szintű optimalizálás

Számítógép-rendszerek fontos jellemzői (Hardver és Szoftver):

Számítógépek felépítése, alapfogalmak

Kifejezések. Kozsik Tamás. December 11, 2016

Programozás II. 2. Dr. Iványi Péter

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása

Írta: GYIMÓTHY TIBOR HAVASI FERENC KISS ÁKOS FORDÍTÓPROGRAMOK. Egyetemi tananyag

1. Alapok. Programozás II

Architektúra, megszakítási rendszerek

Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba

Tárgymutató. Typotex Kiadó. Csörnyei Zoltán. akonyv 2007/3/9 6:29 page 315 # , >, 205 <, 96, 108, 115 >, 96, 108, 115 =, 96, 108

2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1

ARM Cortex magú mikrovezérlők

C++ Standard Template Library (STL)

A TANTÁRGY ADATLAPJA

A szemantikus elemzés elmélete. Szemantikus elemzés (attribútum fordítási grammatikák) A szemantikus elemzés elmélete. A szemantikus elemzés elmélete

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

Bonyolultságelmélet. Monday 26 th September, 2016, 18:50

Grafikus csővezeték 1 / 44

Pénzügyi algoritmusok

ISA szimulátor objektum-orientált modell (C++)

Hatékony CPU kód. írásához hasznos architekturális háttér. Valasek Gábor

egy szisztolikus példa

C vagy C++? Programozási Nyelvek és Fordítóprogramok Tanszék. Pataki Norbert. Programozási Nyelvek I.

Programozási nyelvek Java

Formális nyelvek és gépek (definíciós és tétel lista - 09/10/2)

Feldspar: Nyelv digitális jelfeldolgozáshoz

Fordítóprogramok (A,C,T szakirány) Feladatgy jtemény

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

Hatékony memóriakezelési technikák. Smidla József Operációkutatási Laboratórium január 16.

Adatszerkezetek 7a. Dr. IványiPéter

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat

A kódgenerálás helye a fordítási folyamatban. Kódgenerálás I. (kifejezések és vezérlési szerkezetek) A kódgenerálás feladata. Ebben az előadásban...

Hardver Ismeretek IA32 -> IA64

Párhuzamos és Grid rendszerek

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Programozás alapjai. 10. előadás

Programozási nyelvek a közoktatásban alapfogalmak II. előadás

Jelszavak helyes megválasztása, szótáras törés. Pánczél Zoltán

A Számítógépek hardver elemei

A Számítástudomány alapjai

KOMPUTER-ALGEBRA RENDSZEREK VERIFIKÁCIÓJA

JavaScript bűvésztrükkök, avagy PDF olvasó és böngésző hackelés

Jelfeldolgozás a közlekedésben

Programozás I gyakorlat

Programozás alapjai. 2. előadás

Modellek végrehajtása, kódgenerálás

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

Programozási Nyelvek: C++

Fordítóprogramok. és formális nyelvek

Számítógépek felépítése, alapfogalmak

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

Számítógép Architektúrák

Assembly programozás levelező tagozat

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Szöveges domain- specifikus nyelvek. Budapes( Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

Fordítóprogramok felépítése, az egyes programok feladata. A következő jelölésmódot használjuk: program(bemenet)(kimenet)

Bevezetés a programozásba. 6. Előadás: C++ bevezető

FORDÍTÓPROGRAMOK. I. Előadás. Műszaki informatika szakos hallgatók számára Veszprémi Egyetem Számítástudomány Alkalmazása Tanszék 2002.

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Szerző Lővei Péter LOPSAAI.ELTE IP-08PAEG/25 Daiki Tennó

1. Az utasítás beolvasása a processzorba

Számítógép és programozás 2

Assembly. Iványi Péter

Ismerkedjünk tovább a számítógéppel. Alaplap és a processzeor

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Memóriakezelés, dinamikus memóriakezelés

A félév során előkerülő témakörök

Data Integrátorok a gyakorlatban Oracle DI vs. Pentaho DI Fekszi Csaba Ügyvezető Vinnai Péter Adattárház fejlesztő február 20.

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

Mesterséges intelligencia 2. laborgyakorlat

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Alprogramok, paraméterátadás

Tisztán funkcionális adatszerkezetek

Kereső algoritmusok a diszkrét optimalizálás problémájához

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

Fordítóprogramok szerkezete avagy Mi történik Pascalban mikor F9-et nyomunk?

Challenge Accepted:C++ Standard Template Library

Átírás:

Haladó Fordítóprogramok

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 vagy demo program Témák előadás közben További témák GCC Summit Proceedings, CGO, CC, PLDI, ECOOP LLVM Dev meetings http://c9x.me/compile/bib/ Open Book ZH Saját írott jegyzet használható

Tananyag + Cikkek + Konferencia előadások

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

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

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

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; }

DEMO int sum(int n) { int s = 0; for(int i = 0; i < n; ++i) s += i; return s; }

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

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ő

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

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

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 Refinement 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

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

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

Swift fordító, Swift Intermediate Language

Swift fordító, Swift Intermediate Language

Backend Instruction selection 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

Modern CPU

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

Pipeline

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

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

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

Engineering Ütemezéskor a loadokat 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

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

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 Szintaxis fa Asszociativitás, precedenciák Elemzés alulról felfelé, felülről lefelé Absztrakt szintaxisfa vs konkrét szintaxisfa

Szintaxis fa

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!?

Rekurzív leszállás (Recursive Descent) Akadémiai nyelvek Reguláris nyelvtan: lexelés Környezet független nyelvtan: elemzés C++ A nyelvtan egyértelmű Környezet függő nyelvtan a típusellenőrzés Lexelés se reguláris (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

Többértelmű nyelvtan P * t; // Pointer vagy szorzás? int(x), y, *const z; //decls int(x), y, new int; //exprs T(*a)[4] // hivas vagy decl?

GLR Parser LR elemzők kezelik a balrekurziót GLR kezeli a többértelműséget Forkoljunk, a rossz ágon ellentmondásra jutunk Lokális többértelműségeknél használható Típusellenőrzés nélkül szintaxisfa GitHub: Tree Sitter https://www.youtube.com/watch?v=a1rc79dhpmy Legtöbbször parser generátorral alkalmazva Érdekes error recovery opciók

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

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

Ö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