GPGPU alapok GPGPU alapok Grafikus kártyák evolúciója GPU programozás sajátosságai
© Szénási Sándor, Óbudai Egyetem, 2010
[email protected]
GPGPU alapok GPGPU alapok Grafikus kártyák evolúciója GPU programozás sajátosságai
© Szénási Sándor, Óbudai Egyetem, 2010
[email protected]
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.
© Szénási Sándor, Óbudai Egyetem, 2010
[email protected]
3
Unified Shader Model • Terhelés eloszlásának problémái – 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
Ábra 1.1 [2]
• 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 verzió
2010.07.20.
© Szénási Sándor, Óbudai Egyetem, 2010
[email protected]
4
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.
© Szénási Sándor, Óbudai Egyetem, 2010
[email protected]
5
GPGPU alapok GPGPU alapok Grafikus kártyák evolúciója GPU programozás sajátosságai
© Szénási Sándor, Óbudai Egyetem, 2010
[email protected]
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.
© Szénási Sándor, Óbudai Egyetem, 2010
[email protected]
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.
© Szénási Sándor, Óbudai Egyetem, 2010
[email protected]
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.
© Szénási Sándor, Óbudai Egyetem, 2010
[email protected]
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.
© Szénási Sándor, Óbudai Egyetem, 2010
[email protected]
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-JagPJN_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
verzió
dátum/idő
© szerző, intézmény, évszám em@il
11