23. tétel - Grafikus kártya memória felépítése
Milyen memóriaterületek jelennek meg egy grafikus kártyán? Mikor és milyen módon célszerű ezeket használni? Mutasson konkrét példát a shared memória használatára (pl. tiled matrix)!
Memóriaterületek
A GPU-n belül több streaming multiprocesszor van. Ezeken belül több VE található.
Két nagy memória csoport:
- On-chip memóriatartomány (multiprocesszoron belüli memóriatartomány)
- Off-chip memóriatartomány (GPU saját memóriája, pl. 12GB)
| On-chip memóriatartomány | Off-chip memóriatartomány |
|---|---|
|
|
* valójában off-chip, de ide soroljuk
| Fizikai felépítés | A programozó szemszögéből |
|---|---|
![]() | ![]() |
Off-chip tartomány
Részei:
- globális memória
- konstans memória
- textúra memória
- rögzített memória
- zero-copy memória
Globális memória
- élettartam: program futása
- a blokkok, a szálak és a hoszt is hozzáfér
- nagy, de relatíve lassú
Konstans memória
- hasonló a globálishoz
- a szálak számára csak olvasható
- az adatok cachelve vannak, így gyorsabb tud lenni a globálisnál
- célszerű használni, ha az adat nem lesz módosítva (pl. szövegben való keresés)
Textúra memóra
- fizikailag a globális memóriával egyező tartomány
- lényeges különbség, hogy máshogyan van kezelve
- grafikához, textúrához alakított műveletek, stb.
Rögzített memória
- a hoszt oldalon foglalható
- garantálja, hogy az adat az operatív tárban marad, nem kerül a háttértárba
- ezáltal gyorsabb a másolás
- enélkül is lehet másolni, de a GPU mindenképpen létrehoz egy ilyet biztonsági okokból
- előbb ide másolódik át az adat, csak utána a GPU-ra
Zero-copy memória
- vannak olyan átfedett memória területek, amiket a CPU és GPU is lát és tud kezelni
- a zero-copy erre a területre foglal memóriát
- tipikusan gyengébb eszközöknél fordul elő, ahol a GPU-nak nincs saját memóriája
On-Chip memóriatartomány
Regiszterek
- élettartam: szűk élettartam
- csak az őt birtokló szál fér hozzá
- tényleges műveletvégzés itt történik
- nagyon gyors, de kevés van belőle
- 1 változó = 1 regiszter
Lokális memória
- valójában off chip, de a regiszterekhez nagyon hasonló (egy szálhoz tartoznak)
- ha elfogynak egy szál regiszterei, akkor ezek használhatóak
- fizikailag a globális memória része, innen kerül lefoglalásra
Shared memória
- sebessége kb. a regiszterekkel egyező, mérete relatíve kicsi (~48kB)
- blokkokhoz kapcsolódik, szálak közötti kommunikációra tökéletes
- hoszt oldalról nem elérhető
- célszerű cache-ként használni a sok szál által sűrűn használt adatokhoz
Shared memória használata: csempézett mátrix-szorzás
Ez részletesen le van írva ábrákkal itt.

