GPU Lab. 5. fejezet. A C++ fordítási modellje. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Hasonló dokumentumok
1. fejezet. Programozási nyelvek C/C++ fordítási modell CMake Visual Studio Code. Haladó alkalmazott programozás ELTE, Budapest 2019.

C programozási nyelv

C++ programok fordítása

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

Bevezetés a Programozásba II 4. előadás. Adattípusok hordozhatósága

Dr. Schuster György október 14.

Clang Static Analyzer belülről

Vizuális, eseményvezérelt programozás XI.

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Programzás I gyakorlat

Bevezetés a Python programozási nyelvbe

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

Programozás C és C++ -ban

C programozás. 1 óra Bevezetés

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Bevezetés a programozásba Előadás: Fordítási egység

C++ Gyakorlat jegyzet 7. óra

3. Osztályok II. Programozás II

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

Mobil Informatikai Rendszerek

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

Programozási nyelvek (ADA)

Interfészek. PPT 2007/2008 tavasz.

OPENCV TELEPÍTÉSE SZÁMÍTÓGÉPES LÁTÁS ÉS KÉPFELDOLGOZÁS. Tanács Attila Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

Szoftver technológia. Build systems. Cserép Máté ELTE Informatikai Kar 2019.

Programozás I. gyakorlat

Mobil Informatikai Rendszerek

Szoftver labor III. Tematika. Gyakorlatok. Dr. Csébfalvi Balázs

A Code::Blocks fejlesztőkörnyezet

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?

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.

Bevezetés a programozásba I.

Verifikáció és validáció Általános bevezető

Bevezetés a programozásba Előadás: A const

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Elemi alkalmazások fejlesztése I.

Programozás alapjai Bevezetés

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

Programozás I. 1. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

PE/COFF fájl formátum

Interfészek. Programozás II. előadás. Szénási Sándor.

Programozási nyelvek Java

XCZ állományok ellenőrzése, átadása elektronikus beküldésre és közvetlen beküldése parancssori funkcióval az ÁNYK programban

Már megismert fogalmak áttekintése

15. Programok fordítása és végrehajtása

Programozási nyelvek JAVA EA+GY 1. gyakolat

Adatbázis és szoftverfejlesztés elmélet

Pénzügyi algoritmusok

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Kiszolgálók üzemeltetése. Iványi Péter

2017/01/27 08:59 1/6 Gettext Rendszer

KOMPUTER-ALGEBRA RENDSZEREK VERIFIKÁCIÓJA

Bevezetés a programozásba. 8. Előadás: Függvények 2.

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Előfeldolgozó rendszer Tömbök. Dr. Bécsi Tamás 4. Előadás

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Bevezetés. Dr. Iványi Péter

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

B I T M A N B I v: T M A N

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

Számítógépes Hálózatok. 7. gyakorlat

Dr. Schuster György október 30.

Bevezetés a programozásba. 9. Előadás: Rekordok

Java I. A Java programozási nyelv

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

Bevezetés a Python programozási nyelvbe

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

Programozási nyelvek (ADA)

Programozás alapjai 2.Gy: A C nyelv alapjai P R O

12. gyakorlat Enum; Tárolási osztályok Preprocesszor utasítások; Moduláris programozás

és az instanceof operátor

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ás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Függvények. Dr. Bécsi Tamás 6. Előadás

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

Podoski Péter és Zabb László

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

Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Digitális technika VIMIAA01 9. hét

Programozás alapjai 9.Gy: Struktúra 2.

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

Iman 3.0 szoftverdokumentáció

8. gyakorlat Pointerek, dinamikus memóriakezelés

C++ programozási nyelv

Bevezetés a C++ programozási nyelvbe

Programozási alapismeretek 1. előadás

Szoftver alapfogalmak

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

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

Programozási Nyelvek: C++

Programozási Nyelvek (C++) Gyakorlat

Átírás:

5. fejezet A C++ fordítási modellje Grafikus Processzorok Tudományos Célú Programozása

Kódtól a végrehajtásig Végrehajtás előtt valamikor létre kell jönnie az adott architektúrára jellemző bináris utasításoknak. Fortran, C, C++, stb. Kód + fordító bináris C++AMP, DirectX, Vulkan, stb. Kód + fordítók bináris + köztes bináris + köztes + meghajtó Java, C#, stb. Kód + fordító köztes köztes + értelmező/futásidejű fordító Python, PowerShell, MatLab, Mathematica, stb. Kód értelmező

Forrás fájl(ok) Fordítás Végrehajtható állomány

vector algorithm iostream RK4.hpp Interaction.hpp Application.cpp FileReader.cpp Particle.cpp Solver.cpp Header fájlok Függvény deklarációk Név és szignatúra func M, V V Típus deklarációk és definíciók Sablon (template) kód Forrás fájlok (sources) Függvény definíciók Név, szignatúra, megvalósítás Header fájlok Forrás fájlok

vector algorithm iostream RK4.hpp Interaction.hpp Header fájlok Application.cpp FileReader.cpp Particle.cpp Solver.cpp Forrás fájlok Minden forrás fájl egy külön fordítási egység A fordító mindent elfelejt két forrás között A források n headerre hivatkozhatnak (include-olják) A headerek egymásra is hivatkozhatnak C/C++: One Defintion Rule Ha többször hivatkozunk ugyanarra a headerre, akkor megszegjük az ODR-t Ezt megkerülendő: Include Guard Miért ilyen bonyolult a fordítás? Elválik a függvény a megvalósítástól Gyorsabb fordítás (lásd később) C++20-ban jobb lesz (Modulok)

vector algorithm iostream RK4.hpp Interaction.hpp Application.cpp FileReader.cpp Particle.cpp Solver.cpp Fordító Object fájlok (bináris) Application.o FileReader.o Particle.o Solver.o Object fájlokban dekorált binárisok Szimbólumok és a hozzájuk tartozó binárisok vannak bennük A szimbólum egy a függvény nevéből és szignatúrájából generált név, pl.: operator*(classmat,classvec)->classvec

vector Fordító Linker algorithm Application.cpp Application.o MyApp.exe iostream FileReader.cpp FileReader.o RK4.hpp Particle.cpp Particle.o MyLib.dll Interaction.hpp Solver.cpp Solver.o

Linkelési fázis: A linker megpróbálja az összes szükséges* függvény bináris reprezentációját előállítani/megtalálni. Ami nem szükséges, azt eldobja. *szükséges: futtatható esetén, ami a belépési pontból elérhető/kellő, könyvtár esetén, ami exportált függvény, vagy abból elérhető. Ha futtatható állományt fordítunk, akkor a linker keres még egy: main függvényt, ha parancssori alkalmazást fordítunk grafikus alkalmazásoknál esetleg spec névű fv-t (pl. WinMain )

A linker továbbá: Ha van külső könyvtár függőség, amihez linkelni kell, akkor az abban található szimbólumokat/binárist is átveszi A hiányzó szimbólumok hibát eredményeznek (unresolved external symbol hibák) Lehetnek függvények, amelyek többször lettek lefordítva Ha a binárisok megegyeznek, akkor egy kivételével az összeset eldobja Ha különböznek, a linker hibát jelez (tipikus hiba, amikor olyan dolgokat akarunk összelinkelni, amik: eltérő fordítóval más architektúrára (x86-x64) vagy más standard library-val készültek)

A forráskód header/source részekre bontásával minimalizáljuk annak az esélyét, hogy egy függvényt többször fordítsunk le Különben egy nagyobb projektnél sokáig tarthat a linkelés (is)

Könyvtárak linkelése Statikus könyvtárak A szimbólumokat egy az egyben átveszi a könyvtárból a futtathatóba Gyorsabb kódot eredményez Ha sok futtatható hivatkozik ugyanarra a szimbólumra, azok többször szerepelnek a lemezen/memóriában Kényelmesebb használni Dinamikus könyvtárak Csak egy hivatkozást illeszt a kódba a könyvtárban található szimbólumra Kisebb binárist eredményez Ha sok futtatható hivatkozik ugyanarra a szimbólumra, azok csak egyszer szerepelnek a lemezen/memóriában Futásidőben csak ez működik