GPU programozás és párhuzamos rendszerek

Kategória: 
Választható

A jelenlegi grafikus kártyák (GPU) nagy teljesítményű párhuzamos rendszerek (sok száz processzor és 1 teraflopnál nagyobb teljesítmény), amelyeket nem csupán a képszintézisben, hanem általános célú számításigényes feladatokban is fel lehet használni (lásd gpgpu.org). A GPU processzortömbjét C-szerű programozási nyelveken lehet programozni (Cg, HLSL, CUDA, OpenCL, stb.), de a hatékony alkalmazáshoz a párhuzamos programozás és a nagy teljesítményű számítási algoritmusok (HPC) elveit is el kell sajátítani.

A tárgy keretében a GPU-t mint általános célú párhuzamos programozási eszközt mutatjuk be különböző programozási környezetek (API-k) felhasználásával, és a hallgatók konkrét példákon keresztül tanulhatják meg ezen eszközök programozási módszereit. Az órákat laborban tartjuk, hogy a tanultakat rögtön alkalmazzuk is. 

A tárgyra regisztrált hallgatók számára elektronikusan hozzáférhető jegyzetek:

Szirmay-Kalos, Szécsi: GPGPU: General Purpose Computing on Graphics Processing Units. (in Algorithms of Informatics), mondAt Kiadó, 2011.

Szirmay-Kalos, Szécsi: GPU-Based Techniques for Global Illumination Effects, Morgan and Claypool Publishers, 2008.

Tematika:

1. A GPU története, fejlődési lépései. Fix-funkciójú csővezeték, képszintézis API-k programozható csúcspont, geometria és  pixel árnyalóval. A beépített elemek funkciói (raszterizáció, mélység teszt, alfa összemosás).

Labor: Ismerkedés a fejlesztő eszközzel, egyszerű grafikus programok készítése.

2. A GPU mint vektorprocesszor és mint stream-processzor.  OpenGL/GLSL API felépítése és használata.

Labor: Képfeldolgozási műveletek, szűrés, éldetektálás, mélységélesség párhuzamos megvalósítása. Mandelbrot halmaz rajzolás.

3. GPU programozás a vektorprocesszor modellen túl. SIMD és MIMD párhuzamos programozás. Iteratív algoritmusok hatékony megvalósítása.

Labor: Konvolúció szeparábilis függvényekkel. Fizikai szimuláció, a hullámegyenlet megoldása.

4. Szórás és gyűjtés típusú algoritmusok. Összetett képfeldologzási műveletek hatékony megvalósítása.

Labor: Hisztogram generálás és transzformációk. Tone-mapping.

5. Sugárkövetés a GPU-n. A klasszikus rekurzív sugárkövetés jól párhuzamosítható probléma, azonban a GPU-n történő implementációhoz figyelembe kell venni az architektúrából fakadó korlátokat. Az előadás keretében áttekintjük a rekurzív sugárkövetés algoritmusát és a GPU-n történő implementáció kulcskérdéseit.

Labor: Egyszerű sugárkövető program megvalósítása.

6. Rekurzív algoritmusok. A grafikus hardver működéséből adódóan a rekurzió megoldása körültekintést igényel. Az előadás keretében bemutatjuk a rekurzív algoritmusok implementálásának két módszerét. Egyik lehetséges megoldás a textúrák esetén alkalmazott MipMap módszer használata a rekurzióra. Másik lehetőségünk a grafikus csővezeték geometria árnyalójának a használata.

Labor: Labirintus generálás és bejárás.

7. Beveztés az OpenCL általános célú GPGPU programozási környezetbe. Az előadás keretében bemutatjuk az OpenCL szabvány alapvető koncepcióit, a masszívan práhuzamos architektúra működtetéséhez szükséges infrastruktúrát.

Labor: Tőzsdei opcióárazás, statisztikai műveletek GPU-n.

8. Az OpenCL keretrendszer használata. Egy mintaprogramon keresztül áttekintjük egy egyszerű OpenCL program felépítését és a párhuzamos környezet használatát.

Labor: Ismerkedés az OpenCL-el. Párhuzamos modellek, függvény kiértékelés.

9. Lineáris egyenletrendszerek megoldása. Gauss-Jordan elimináció, Jakobi iterációs megoldás. A mátrix vektor szorzás optmalizálása párhuzamos architektúrára.

Labor: Lineáris egyenletrendszer megoldó program.

10. Monte Carlo módszerek a GPU-n. Az előadás keretében áttekintjük a Monte Carlo módszerek elméleti hátterét néhény egyszerű példán keresztül. Egyszerű véletlenszám generátorok felépítése és minőség vizsgálata.

Labor: Véletlenszám generálás, Monte Carlo integrálás.

11. Monte Carlo szimuláció a GPU-n. Többszörös szóródás szimulációja inhomogén közegben, a szimuláció eredményének megjelenítése térfogat vizualizációs módszerrel.

Labor: Monte Carlo szimulációs program, térfogat vizualizáció.

12. Tomográfiás rekonstrukció. A gyógyászati gyakorlatban alkalmazott nem invazív képalkotó eljárások nagyon nagy méretű adatokon végzett nagy számításigényű algoritmusok használatát követelik meg. A rekonstrukció során a lehető legnagyobb pontosság mellett az idő tényező is kritikus, ezért a masszívan párhuzamos architektúrán futtatható algoritmusok napjainkban is elsődleges kutatási terület.

Labor: Egyszerű maximum expectation iterációs sémán alapuló rekonstrukciós program.

13. Folyadék szimuláció. A fizikai alapú szimuláció tipikusan nagy számításigényű probléma. Sok esetben az alkalmazott szimulációs algoritmus jól párhuzamosítható, ezért a grafikus hardver alkalmazása gyorsabb szimulációt vagy nagyobb problématér kezelését teszi lehetővé.

Labor: 2D áramlás szimuláció.

14. Az OpenCL környezet további lehetőségei. Szabványos bővítmény rendszer. Összehasonlítás egy másik elterjedt GPGPU környezettel a CUDA-val.

15. Házi feladatok bemutatása és beszámolók. 

Képek: