GPGPU alapok GPGPU alapok Grafikus kártyák evolúciója GPU programozás sajátosságai Szenasi.sandor@nik.uni-obuda.hu
GPGPU alapok GPGPU alapok Grafikus kártyák evolúciója GPU programozás sajátosságai Szenasi.sandor@nik.uni-obuda.hu
Grafikus Feldolgozó Egységek GPU Graphics Processing Unit Alapvető feladata a képernyőn megjelenítendő tartalom kezelésével kapcsolatos feladatok átvétele a CPU-tól A modern GPU-k meglehetősen nagy teljesítményű 3D grafikai feldolgozásra alkalmasak, ezek a funkciók általában valamilyen szabványos API-n keresztül érhetők el, pl.: OpenGL (www.opengl.org) Direct3D (www.microsoft.com) Shaderek A 3D grafikai feldolgozást az úgynevezett shaderek hajtják végre, ezek fő típusai az alábbiak: Vertex shader feladata a 3D térben lévő koordináták leképezése a képernyő síkjára Pixel shader feladata a megjelenítendő alakzatok egyes pontjainak a színének a kiszámítása (textúra, világítás, árnyékolás stb.) Geometry shader feladata az alakzatok geometriájának változtatása verzió 2010.07.20. Szenasi.sandor@nik.uni-obuda.hu 3
Unified Shader Model Terhelés eloszlásának problémái verzió A kezdeti megvalósításokban a különféle shader egységek különböző hardver elemeket jelentettek Ezek számának megtervezése azonban nehézségekbe ütközik, ugyanis különféle feladatokhoz ezek különböző arányára lenne szükség 1. feladat: a geometria meglehetősen egyszerű a pixelek színezése sok erőforrást igényel 2. feladat: a geometria leképezése erőforrásigényes a pontok színezése egyszerű Unified Shader A GPUk fejlődése során a különböző shaderek megvalósítása egyre közelebb került egymáshoz (lásd különböző shader modellek) Végül a gyártók megvalósították, hogy a GPU már csak egyféle, minden feladatot végrehajtani képes shadereket tartalmaz, így ezek tetszőlegesen csoportosíthatók a különféle feladatokra 2010.07.20. Szenasi.sandor@nik.uni-obuda.hu 4 Ábra 1.1 [2]
GPGPU fogalom megjelenése Közvetlenül programozható egységek Az egységes shader modell tulajdonképpen egyszerű, kevés utasítással rendelkező általános célú végrehajtóegységeket hozott magával Ez az egyszerűség elősegíti a végrehajtóegységek számának növelését, így a manapság elérhető GPU-k már több száz ilyen egységet tartalmaznak Ennek köszönhetően a GPU-k hatalmas számítási teljesítménnyel rendelkeznek, amit célszerű lehet a grafikai megjelenítésen túl is kiaknázni: GPGPU: General-Purpose Computing on Graphics Processor Units Fejlesztői környezetek megjelenése Kezdetben ezen eszközök programozása meglehetősen nehézkes volt, mivel a grafikus kártyákat továbbra is csak a megszokott módokon lehetett elérni, ezeken keresztül kellett valahogy a saját programkódokat lefuttatni Hamarosan a gyártók is felismerték az új piaci szegmensben rejlő lehetőségeket, emiatt kiadtak saját programozási környezeteket: Nvidia CUDA ATI Stream OpenCL verzió 2010.07.20. Szenasi.sandor@nik.uni-obuda.hu 5
GPGPU alapok GPGPU alapok Grafikus kártyák evolúciója GPU programozás sajátosságai Szenasi.sandor@nik.uni-obuda.hu
GPGPU helye és szerepe GPU előnyei Hagyományos eszközökhöz képest kiemelkedő csúcsteljesítmény Nagyon jó ár/teljesítmény arány Jól skálázható, a piacon sokféle grafikus kártya kapható, és ezekből akár több is elhelyezhető egy megfelelő alaplapban Dinamikus fejlődés, ami a jövőben is biztosítottnak tűnik a fizetőképes keresletnek köszönhetően (játékipar) GPU hátrányai A végrehajtóegységek egymástól kevésbé függetlenek, mint a CPU magok a csúcsteljesítmény csak speciális (tipikusan adatpárhuzamos) feladatok végrehajtása során érhető el, csak ilyenkor célszerű használni GPU-t A grafikus kártyák általában saját memóriaterületen dolgoznak, ezért a tényleges feldolgozást mindig memória mozgatások előzik meg/követik optimalizálni kell ezen mozgatások számát, de még így is előfordulhat, hogy az egész GPU alapú megvalósítást el kell vetni emiatt Új terület lévén az ismeretek és az eszközök még kevésbé kiforrottak, emiatt a fejlesztés költségesebb verzió 2010.07.20. Szenasi.sandor@nik.uni-obuda.hu 7
Memória késleltetés kiküszöbölése Gyorsítótár párhuzamosság Az ábrán látható, hogy a CPU esetében az eszköz felületének nagy részét a gyorsítótár foglalja el, míg a GPU esetében ez szinte teljesen hiányzik, helyette a végrehajtó egységek foglalnak el nagy helyet Működés közben a memória olvasással kapcsolatos várakozásokat a CPU a gyorsítótárral próbálja csökkenteni, a GPU pedig a gyors kontextusváltás segítségével éri el ugyanezt (ha egy szál futása közben várni kell a memóriára, akkor a GPU átütemezi a végrehajtóegységeket más szálakhoz) szálak száma legyen jóval nagyobb, mint a végrehajtóegységek száma Ábra 1.2 [3] verzió 2010.07.20. Szenasi.sandor@nik.uni-obuda.hu 8
Memória szerkezete Összetett memória hierarchia CPU-k esetében általában csak a központi memóriát és a regisztereket különböztetjük meg CPU-k esetében általában nem a programozó feladata a gyorsítótár kezelése, ezt a CPU-ra bízhatjuk GPU-k esetében ennél jóval összetettebb memória felépítéssel találkozhatunk, amelyek kezelése a programozó feladata célszerű a gyakran szükséges adatokat betölteni a gyorsabb memóriaterületekre ( kézzel elvégezni a gyorsítótár kezelést) Figure 4.2.1 (Nvidia CUDA Programming Guide v2.0) Ábra 1.3 [3] verzió 2010.07.20. Szenasi.sandor@nik.uni-obuda.hu 9
SIMT végrehajtás SIMD SIMT végrehajtás közötti különbségek SIMD utasítások során a programozó biztosítja, hogy az operandusok a megfelelő helyen és formában legyenek, a SIMT utasítások során az egyes végrehajtóegységek különböző címtartományokban dolgoznak SIMT utasítások során van lehetőség feltételes végrehajtásra is, egy elágazás ágai azonban szekvenciálisan, egymás után hajtódnak végre: Ábra 1.4 [4] GPU programokban lehetőleg kerülni kell az elágazásokat, ciklusokat verzió 2010.07.20. Szenasi.sandor@nik.uni-obuda.hu 10
Irodalomjegyzék [1] David B. Kirk, Wen-mei W. Hwu: Programming Massively Parallel Processors Elsevier 978-0-12-381472-2 http://www.elsevierdirect.com/morgan_kaufmann/kirk/ Angol 258 o. [2] Exploiting the Shader Model 4.0 Architecture Rövid összefoglaló a shaderek fejlődéséről http://researchweb.iiit.ac.in/~shiben/docs/sm4_skp-shiben-jag- PJN_draft.pdf [3] NVIDIA CUDA Programming Guide 3.0 CUDA környezet teljes leírása (referencia, mintapéldák) http://developer.download.nvidia.com/compute/cuda/3_0/toolkit/docs/n VIDIA_CUDA_ProgrammingGuide.pdf [4] From Shader Code to a Teraflop: How Shader Cores Work Rövid leírás a shaderek működéséről http://s08.idav.ucdavis.edu/fatahalian-gpu-architecture.pdf szerző, intézmény, évszám verzió dátum/idő em@il 11