21. tétel - Grafikus kártyák felépítése
Minek köszönhető az általánosan programozható grafikus kártyák léte? Miben különbözik a GPU és a CPU hardver programozói szemmel (cache, memory latency hiding, stb.)? Milyen specialitásokkal és korlátokkal bír a GPU hardver (SIMT végrehajtás, memória, stb.)? Milyen jellegű feladatoknál célszerű használni a GPU-t?
GPU-k fejlődése
A GPU-k megjelenését jelentősen befolyásolta a 3D grafika megjelenése.
- A 3D térből az objektumok leképezése a 2D síkra az objektumok háromszögekre való bontásával történik
- Ezek a pontok egymástól függetlenek → jól párhuzamosítható a GPU sok végrehajtó egységén
- Különféle 3D grafikák más-más workloaddal járnak → shaderek számát nehéz optimalizálni
- Probléma áthidalható Unified Shader-rel: egyfajta shader, teljesen általánosan használható végrehajtó egységekkel
- Ezzel a hardver rendelkezésre állt, megjelent a GPGPU (General Purpose Computing on GPUs)
- Kezdetben kódot írni nehézkes volt → azóta a GPU gyártók driverekkel, framework-ökkel segítenek.
CPU-GPU különbségek
| CPU | GPU |
|---|---|
| Nagy teljesítményű ALU-k | Energiahatékony ALU-k, de nagyon sok |
| Relatíve nagy cache, hogy ne kelljen mindig a memórához nyúlni | Relative kis cache |
| Bonyolult és hatékony vezérlés: branch prediction, data forwarding, stb. | Egyszerű vezérlés: nincs branch prediction vagy data forwarding |
| Gyors kontextusváltás: az adatok a szálakhoz vannak rendelve, nem kell őket másolgatni kontextusváltáskor |
Memory Latency Hiding
- A végrehajtó egységeknek sok adatra van szüksége
- A memóriasebességek lassabban nőnek, mint a számítási teljesítmény.
- Elkerülendő, hogy a feldolgozás adathiány miatt várakozzon.
| Hogyan oldja meg ezt a CPU? | Hogyan oldja meg a GPU? |
|---|---|
Bonyolult és hatékony utasítás- és elágazás-előrejelzéssel.
| Nincsenek ilyen kifinomult módszerek. Ha az egyik szál megakad, mert adat kell a memóriából:
Ehhez persze több szál kell, 1 szál esetén nem működik. |
Specialitások és korlátok
SIMT végrehajtás
A GPU-kban csak egy utasításértelmező/vezérlő tartozik a VE-khez → egyidőben minden VE csak ugyanazt az utasítást hajthatja végre (más adaton).
- A SIMT a SIMD-hez hasonló, egymás melletti szálak itt is azonos utasítást hajtanak végre
- azonban a SIMD-től eltérően nem csak egymás melletti adatokon tud dolgozni.
- De mi van akkor, ha egy kódban van elágazás?
- valamelyik szálnak az igaz, valamelyiknek a hamis ágat kell lefuttatni, de csak ugyanazt képesek egyszerre végrehajtani
- megoldás:
- míg bizonyos ágak az igaz ágat futtatják, a többi kikapcsol, majd fordítva
- eredmény: sokkal rosszabb teljesítmény
Memória
A GPU-nak külön memórája van.
- ide át kell másolni azokat az adatokat, amikkel a számítást kell végezni
- a másolás időigénye miatt sokszor értelmét veszti a GPU végrehajtás
Megoldás: úgy kell megírni a kódot, hogy minél jobban elkerüljük a költséges adatmásolásokat. Például a véletlen számokat a GPU-n hozzuk létre, nem a CPU-ról másoljuk.
Milyen jellegű feladatoknál célszerű használni a GPU-t?
- nagy számításigényű feladatoknál, ahol nagyon sok szálat kell indítani.
- olyan feladatoknál, amik jól párhuzamosíthatóak (pl. szálak között nincs függőség).
Előnyök
- magas csúcsteljesítmény
- jó ár-érték arány
- skálázható
- dinamikusan fejlődő (játékipar)
Hátrányok
- adatmásolások miatti korlátok
- GPGPU programozás eléggé új terület, így költségesebb vele foglalkozni