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:

  1. On-chip memóriatartomány (multiprocesszoron belüli memóriatartomány)
  2. Off-chip memóriatartomány (GPU saját memóriája, pl. 12GB)
On-chip memóriatartományOff-chip memóriatartomány
  1. Regiszterek
  2. Lokális memória*
  3. Shared memória
  1. Globális memória
  2. Konstans memória
  3. Textúra memória
  4. Rögzített memória
  5. Zero-copy memória

* valójában off-chip, de ide soroljuk

Fizikai felépítésA programozó szemszögéből
CUDA fizikai felépítéseCUDA felépítés a programozó szemszögéből

Off-chip tartomány

Részei:

  1. globális memória
  2. konstans memória
  3. textúra memória
  4. rögzített memória
  5. 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.