GPU Lab. 1. fejezet. Bevezetés. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Hasonló dokumentumok
Kaposi Ambrus. University of Nottingham Functional Programming Lab. Hackerspace Budapest január 6.

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

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

Készítette: Trosztel Mátyás Konzulens: Hajós Gergely

Szenzorhálózatok programfejlesztési kérdései. Orosz György

Kaposi Ambrus. Informatikai Kar. Pannonhalmi Bencés Gimnázium november 24.

IK Algoritmusok és Alkalmazásaik Tsz, TTK Operációkutatás Tsz. A LEMON C++ gráf optimalizálási könyvtár használata

Programok értelmezése

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

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

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

egy szisztolikus példa

Matematikai logika és halmazelmélet

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

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

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?

Programozási nyelvek 6. előadás

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

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

Osztályozóvizsga és javítóvizsga témakörei Matematika 9. évfolyam

I. A DIGITÁLIS ÁRAMKÖRÖK ELMÉLETI ALAPJAI

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

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

Párhuzamos programozási platformok

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

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

Bevezetés. Többszálú, többmagos architektúrák és programozásuk Óbudai Egyetem, Neumann János Informatikai Kar

Nemlineáris optimalizálási problémák párhuzamos megoldása grafikus processzorok felhasználásával

C++ programozási nyelv Konstruktorok-destruktorok

4. Programozási nyelvek osztályozása. Amatőr és professzionális

GPGPU alapok. GPGPU alapok Grafikus kártyák evolúciója GPU programozás sajátosságai

Párhuzamos programozási platformok

Funkcionális Nyelvek 2 (MSc)

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

Digitális technika VIMIAA hét

Magas szintű optimalizálás

Programozás alapjai (ANSI C)

Számítógép architektúra

Algoritmusok Tervezése. 6. Előadás Algoritmusok 101 Dr. Bécsi Tamás

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

Digitális technika VIMIAA hét

Podoski Péter és Zabb László

OpenCL - The open standard for parallel programming of heterogeneous systems

MATEMATIK A 9. évfolyam. 2. modul: LOGIKA KÉSZÍTETTE: VIDRA GÁBOR

KOMPUTER-ALGEBRA RENDSZEREK VERIFIKÁCIÓJA

Bizonyítási módszerek ÉV ELEJI FELADATOK

Mintavételes szabályozás mikrovezérlő segítségével

BEÁGYAZOTT RENDSZEREK TERVEZÉSE Részletes Hardver- és Szoftvertervezés

Osztályozóvizsga követelményei

SULINOVA PROGRAMTANTERVÉHEZ ILLESZKEDŐ TANMENET 9. ÉVFOLYAM SZÁMÁRA

HELYI TANTERV MATEMATIKA (emelt szintű csoportoknak) Alapelvek, célok

EMMI kerettanterv 51/2012. (XII. 21.) EMMI rendelet 2. sz. melléklet Matematika az általános iskolák 5 8.

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

Egyenletek, egyenlőtlenségek X.

Flynn féle osztályozás Single Isntruction Multiple Instruction Single Data SISD SIMD Multiple Data MISD MIMD

Matematikai programok

Az Excel táblázatkezelő

Követelmény az 5. évfolyamon félévkor matematikából

ÖSSZEVONT ÓRÁK A MÁSIK CSOPORTTAL. tartósság, megerősítés, visszacsatolás, differenciálás, rendszerezés. SZÁMTANI ÉS MÉRTANI SOROZATOK (25 óra)

Programozási nyelvek Java

A matematika nyelvéről bevezetés

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

1. Logikailag ekvivalens

Összeállította Horváth László egyetemi tanár

erettsegizz.com Érettségi tételek

Grafikus csővezeték 1 / 44

IK Algoritmusok és Alkalmazásaik Tsz, TTK Operációkutatás Tsz. A LEMON C++ gráf optimalizálási könyvtár használata

Feldspar: Nyelv digitális jelfeldolgozáshoz

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

Adatbázis rendszerek. dr. Siki Zoltán

Programozási nyelvek (ADA)

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

Programozási Nyelvek: C++


Matematikai programok

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér

A TANTÁRGY ADATLAPJA

A matematika nyelvér l bevezetés

reális tájékozódást. Mindehhez elengedhetetlen egyszerű matematikai szövegek értelmezése, elemzése. A tanulóktól megkívánjuk a szaknyelv életkornak

Szoftver karbantartási lépések ellenőrzése

Matematikai alapok. Dr. Iványi Péter

Adatszerkezetek 1. előadás

C++ referencia. Izsó Tamás február 17. A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák:

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

Matematika helyi tanterv 5 8. évfolyam számára Alapelvek, célok

Egyenletek, egyenlőtlenségek V.

A Szekszárdi I. Béla Gimnázium Helyi Tanterve

Utolsó módosítás:

tantárgy E GY E GY Matematikai alapok I. kötelező - kollokvium 30 3 Matematikai alapok I.

Matematika évfolyam. tantárgy 2013.

FUNKCIONÁLIS PROGRAMOZÁS

Szimuláció RICHARD M. KARP és AVI WIGDERSON. (Készítette: Domoszlai László)

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

Osztályozóvizsga követelményei

Matematika B/1. Tartalomjegyzék. 1. Célkit zések. 2. Általános követelmények. 3. Rövid leírás. 4. Oktatási módszer. Biró Zsolt. 1.

Osztályozóvizsga követelményei

FUNKCIONÁLIS PROGRAMOZÁS GYAKORLAT JEGYZET

Java programozási nyelv

Programozás. Bevezetés. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

5.26 Informatika a 6-8. évfolyam számára

Átírás:

1. fejezet Bevezetés Grafikus Processzorok Tudományos Célú Programozása

Bemutatkozás MTA Wigner Fizikai Kutatóközpont GPU labor: Párhuzamos és elosztott számítások Numerikus differenciálegyenlet megoldók Vizualizáció GPU Nap évente (gpuday.com), idén várhatóan Június 21-22. Modern Tudományos Programozás Előadássorozat http://gpu.wigner.mta.hu gpu (kukac) wigner.mta.hu

Az előadással kapcsolatos információk Weboldal, aktuális információk: http://gpu.wigner.mta.hu/hu/laboratory/teaching/sciencetargeted-programming-of-graphical-processors-1 gpu.wigner.mta.hu -> Labor -> Oktatás Github: https://github.com/wigner-gpu-lab/teaching Jegyszerzés: Programozási beadandó feladatok + szóbeli vizsga

Az előadással kapcsolatos információk Tematika: Modern hardverek működése, felépítése Assembly létminimum C++ példákon keresztül az alapoktól az új standardokig Párhuzamosítás C++-ban GPU API-k és használatuk Párhuzamos szimulációk és esettanulmányok Majd folytatás a 2. félévben: Funkcionális Programozás és még több GPU szimuláció

Bevezetés

Bevezetés Miről lesz szó? Hardverek alapvető működése Programozási nyelvek alapvető építőkövei Párhuzamosság elemei C++ (11, 14, 17, 20) OpenCL (1.2, 2.0) SYCL (1.2, 2.2) Hogyan írjunk a fentiek segítségével hatékony szimulációkat?

Bevezetés Miért pont ezekről akarunk előadást tartani? Kutatók (fizikusok, vegyészek, orvosok ): hatalmas kísérletek, bonyolult szimulációk, rengeteg adat Nem programozók, nem informatikusok! Eredmény: a hardver kihasználatlan Következmény: egyre gyakoribb, hogy pályázatokat dobnak emiatt vissza versenyhátrány a jobb kihasználókkal szemben

Bevezetés Miért pont ezekről akarunk előadást tartani? A tudományág: Szerteágazó (sok nyelv, API és platform) Gyorsan változik (új hw, új standardek, új verziók évente többször is) Az információ szétszórt (blogok, fórumbejegyzések, prezentációk, youtube előadások) nincs idő rendszerezni, leírni könyvbe az információkat

Bevezetés: Programozás

Bevezetés: Programozás Program: utasítások sorozata a gépnek (végső soron) Programozás: utasítások kiosztása

Bevezetés: Programozás Program: utasítások sorozata a gépnek (végső soron) Programozás: utasítások kiosztása nem egészen A tudományág neve: Programming Language Theory Programozási nyelv: logikai rendszer, amiben megfogalmazunk egy problémát Logikai rendszer?..ez inkább matematika és ez nem véletlen!

Bevezetés: Programozás Típusrendszer (type system): A programozási nyelvnek azon része, amely a nyelvi elemekhez (kifejezések, változók, függvények) tulajdonságokat (típus) rendel, és az elemek kombinációit ellenőrzi, hogy az előírt szabályoknak megfelelnek-e.

Bevezetés: Programozás Példa: nyelvtan Ez értelmes: Kati elment a boltba paradicsomért. Ez kevésbé: Bolt paradicsomot Katiért elmenne a a. A nyelvtani rendszer által lesznek a mondataink értelmesek.

Bevezetés: Programozás Típusrendszer (type system): A típusrendszer garantálja, hogy a benne megfogalmazott program eleget tesz a nyelvi rendszer szabályainak. Következmény: kevesebb bug. A szabályok ellenőrzése: type checking A típus rendszerek elméletét vizsgáló tudományág: type theory

Bevezetés: Programozás Típusrendszer és Logika Curry-Howard korrespondencia (dióhéjban): Logika Bizonyítás Tétel Hipotézisek Program Program Típus Argumentumok

Bevezetés: Programozás Típusrendszer és Logika Curry-Howard korrespondencia (dióhéjban): Logika Program C++ Konjunkció Szorzat típus struct Diszjunkció Összeg típus union+enum 1 Implikáció Függvény típus R f( A ) Implikáció bevezetése Implikáció eliminálása Függvény definíció R f(a a, A b){ return a*b; } Függvényhívás f(a, b); 1 Az igazi összegtípus a tagged union lenne, ami nem létezik C++-ban.

Bevezetés: Programozás Az analógiák itt nem érnek véget: http://arxiv.org/abs/0903.0340

Bevezetés: Típusrendszerek A típusrendszer segít kiszűrni a bugokat. Jó típus rendszer: Minél több rossz programot képes kiszűrni, Minél kevesebb helyes programot tesz kifejezhetetlenné. Összes lehetséges program Helyes programok halmaza A típusrendszerben kifejezhető programok halmaza

Bevezetés: Programozási nyelvek A programozási nyelvek eszköztára és a bennük megvalósított típusrendszer szorosan összefügg. Egy fejlettebb, magasabb szintű nyelvtől az ember több biztosítékot, garanciát vár el, mint egy alacsonyabb szintűtől.

Bevezetés: Programozási nyelvek Gépi kód: azok az utasítások, amit a hardver végre tud hajtani. Ha hibás utasításkódot adunk meg, a hw megáll, halt állapotba kerül, stb. Semmilyen más ellenőrzés nincs.

Bevezetés: Programozási nyelvek Assembly: A gépi kódú utasításokat pár betűs rövidítések jelölik. Az utasítások argumentumainak számát és méretét ellenőrzi az assembler. De simán összeszorozhatunk egy karaktersorozatot és egy lebegőpontos számot úgy, mint két egész számot

Bevezetés: Programozási nyelvek C: A változók típusai ellenőrizve vannak a műveleteken keresztül, de: overflow-k, undefined behavior, A magasabb szintű absztrakciókat csak macro-k segítségével lehet megvalósítani, amiken nincs semmilyen típusellenőrzés

Bevezetés: Programozási nyelvek C++: C-ből sok rossz örökség (de javul) A class rendszer számos absztrakciót összemos A magasabb szintű absztrakciókat a templatek segítik. De nincs memória biztonság, magasabb szintű kvantifikáció, stb.

Bevezetés: Programozási nyelvek Haskell: Garantálja a memóriakezelés helyességét A típusrendszer letisztult, a fordító több, magasabb szintű ellenőrzést tud megtenni, erősebb invariánsokat lehet bevezetni és garantálni

Bevezetés: Programozási nyelvek Agda, Idris, Coq, Isabelle: Dependens típusok, azaz a futásidejű értékek is visszahathatnak a típusokra! Matematikai bizonyítások

Bevezetés: elkerülhető hibák A megfelelő nyelvekkel és típusrendszerekkel számos, esetenként katasztrofális hiba is megelőzhető lett volna.

Bevezetés: elkerülhető hibák Intel Pentium bug (1994): FDIV (lebegőpontos osztás) Néhány speciális esetben az osztáshoz tartozó look-up table nem tartalmazott értékeket. A presztízsveszteség 475M USD-be került az Intelnek Pl.: 4195835/3145727 Másik hasonló: Pentium F00F bug

Bevezetés: elkerülhető hibák ESA Ariane 5 (1996): 64-bit float -> 16-bit int conversion overflow 370M USD

Bevezetés: elkerülhető hibák NASA Mars Climate Orbiter (1999) metric-imperial eltérés, két szoftver rész között. 327M USD

Bevezetés: elkerülhető hibák Therac-25 sugárterápiás készülék (1986-87) race condition (bővebben itt, itt) legalább 6 esetben súlyos sugárterhelés a betegekre

Bevezetés: elkerülhető hibák 2003-as áramszünet az Észak USAban és Kanadában, 55 millió embert érintett A vezérlőközpont nem értesült időben a probléma mértékéről, mert egy race-condition miatt nem működött a riasztó rendszer

Bevezetés: elkerülhető hibák A fentiek elkerülhetőek ma már megfelelő nyelvek és típusrendszerek használatával. Pl. a hardvereket már automatikus proof-assistantokkal ellenőrzik, hogy bizonyítottan helyes és teljes legyen a működésük A mindennapi szimulációknak látszólag nincs szükségük ezekre.

Bevezetés: szimulációk Szimulációk: Kompromisszumok: fejlesztési idő vs. hibák rizikója vs. Teljesítmény (hardver kihasználtság) vs. karbantarthatóság (maintainability) Nem mindegy, hogy mennyit vesztünk a kompromisszumokkal. Sok múlik a nyelven / típusrendszeren.

Bevezetés: szimulációk Szimulációk: Absztrakció: ne írjuk meg ugyanazt újra, paraméterezzük a megoldásokat. (De deduplikáció, macro-k) Magasabb szint: több információ a problémáról, könnyebb optimalizálni. Bevezető példa itt.

Bevezetés: szimulációk Ne írjuk meg kétszer a hasonló dolgokat Lineáris algebra Numerikus Módszerek Különböző hardver (GPU/CPU) Különböző párhuzamomsítás Különböző API-k

Bevezetés: szimulációk Párhuzamosítás A megfelelő absztrakciókban gondolkozva egyszerűbb érvelni a párhuzamos feldolgozás helyessége mellett. Pl. rust concurrency 1. 2.

Bevezetés: Sapir Whorf hipotézis Másnéven: nyelvi relativitás A (beszélt/írott) nyelvi struktúrák befolyással vannak a világról alkotott képünkre. A nyelvi kategóriák limitálják, meghatározzák a kognitív (gondolati) kategóriákat. A beszámolók alapján ez a programozási nyelvekre is igaz

Bevezetés: blub paradoxon Paul Graham: the blub paradox Tegyük fel, hogy van egy számegyenese a programozási nyelveknek: A B C D F G H I J K L

Bevezetés: blub paradoxon Paul Graham: the blub paradox Ha egy tetszőleges nyelvet ismerő programozó lefelé néz, tudja, hogy azok kevésbé jó nyelvek, mert csomó dolgot nem tudnak, amit az övé tud! A B C D F G H I J K L

Bevezetés: blub paradoxon Paul Graham: the blub paradox Amikor azonban a programozónk felfelé néz a spektrumban, csak fura érthetetlen krix-kraxokat lát, és el sem tudja képzelni mire jók, hiszen ő mindent meg tud oldani a saját nyelvének eszközeivel is! A B C D F G H I J K L

Bevezetés: párhuzamosság Miért kell nekünk párhuzamosság?

Bevezetés: párhuzamosság Sources: 1., 2.

Bevezetés: párhuzamosság Sources: 1., 2.

Bevezetés: miért C++? Nyelvválasztás = kompromisszum Nem fizetünk azért a nyelvi szolgáltatásért, amit nem használunk Egyszerre kellően alacsonyszintű, hogy hatékony programokat lehessen benne írni, de Meglepően magasszintű absztrakciók is építhetőek benne Dinamikusan fejlődő, az egész ipar által támogatott nyelv

Bevezetés: miért OpenCL / SYCL? Bizonyítottan a fontos a hordozhatóság Számos esetben demonstrálódott, hogy az egyetlen megoldáshoz kötődés csapdahelyzetet teremthet Széles ipari összefogás áll ezeknek a fejlesztése mögött is (Khronos) Ezekben is le lehet menni kellően alacsony szintre, hogy maximálisan kihasználjuk a hardver nyújtotta képességeket

Az előadással kapcsolatos információk https://doodle.com/poll/ru7e7uqk9iymk8ga#table Hét Időpont Óra 2. Február 14. 1. Óra 3. Február 21. Elmarad 4. Február 28. 2. Óra 5. Március 7. 3. Óra 6. Március 14. 4. Óra 7. Március 21. 5. Óra 8. Március 28. Tavaszi szünet 9. Április 4. 6. Óra 10. Április 11. 7. Óra 11. Április 18. 8. Óra 12. Április 25. 9. Óra 13. Május 2. 10. Óra 14. Május 9. 11. Óra 15. Május 16. 12. Óra Tavaszi szünet: Március 28. Április 3., Eötvös-Pázmány nap: Május 10-11.