gpgpu: nvidia cuda
TRANSCRIPT
NVIDIA CUDA
Alen Novosel, 42561/13-R
Marin Rukavina, 42617/13-R
GPGPU:
Uvod
• CUDA (engl. Compute Unified DeviceArchitecture) – platforma i model za paralelno računarstvo razvijen od strane NVIDIA-e
• Omogućuje direktan pristup instrukcijama grafičkog procesora i memoriji
• Razvoj započeo oko 2006. godine
• NVIDIA distribuira CUDA toolkit s kompajlerom koji omogućuje programerima razvoj u C/C++
Uvod
• CUDA omogućuje uporabu sposobnosti grafičkih kartica za općenite zadatke (GPGPU), ne samo vezano uz računalnu grafiku
• Primjenu je pronašla u brojnim granama računarstva, ali ponajprije kao računarska potpora istraživačkim naporima
• Primjeri: hidrodinamika, molekularna dinamika, financije, seizmologija i brojni drugi
Uvod
• U principu, CUDA je korisna svuda gdje je postoji potreba za intenzivnom obradom
• Relativno jeftino rješenje za paralelnu obradu
• Arhitektura GPU-a stavlja naglasak na izvođenje velikog broja dretvi relativno sporo
• Može se reći da je protočnost grafičkih procesora razdijeljena u prostoru, a ne u vremenu kao kod procesora opće namjene.
OpenCL
• CUDA je samo jedno rješenje za paralelnu obradu, i to od jedne firme
• Ta jedna firma je trenutno jedini proizvođač CUDA hardvera
• OpenCL je višeplatformsko otvoreno rješenje za heterogeno računarstvo koje radi s grafičkim hardverom više proizvođača
• Nije ograničeno samo za GPU programiranje
CUDA hardver
• NVIDIA proizvodi više vrsta grafičkih kartica različitih moći. Trenutne mikroarhitekture koje se proizvode su:
– Tesla (1.0, 1.1, 1.2, 1.3)
– Fermi (2.0, 2.1)
– Kepler (3.0, 3.5, 3.7)
– Maxwell (5.0, 5.2)
Fermi GPU arhitektura
Organizacija memorije• Djeljiva memorija (shared memory) ubrzava pristup memoriji
iz pojedinih dretvi
• L1 i L2 pričuvne memorije doprinose uštedi vremena za dohvat iz memorije kao i u CPU-u
• Također, ova memorija se koristi za potrebe filtriranja podataka prema multiprocesorima u slučaju kada oni koriste iste podatke, te se na taj način smanjuje broj pristupa vanjskoj memoriji.
CPU vs GPU
Sadašnjost i budućnost
• Prije nešto više od pola godine NVIDIA je predstavila grafičku karticu NVIDIA Titan Z i namijenjena je onima koji žele uživati u besprijekornim 4K razlučivostima
• Tehničke karakteristike: sastoji se od 5760 CUDA jezgri i 12GB memorije s propusnošću od 7 GB/sec
• Cijena: 3000$
Organizacija zadataka
• Da bi se efektivno iskoristila moć grafičke kartice i paralelne obrade, potrebno je organizirati posao u paralelnom zadatku
• CUDA koristi koncept grida, blokova i dretvi
Grid, blok, dretva
• Grid je ukupan skup zadataka u jednoj jedinici rada na GPU
• Blok je element grida koji će se izvoditi na jednoj jezgri (multiprocesoru)
• Dretva je jedinica paralelizma unutar bloka koja dijeli kontekst s drugim dretvama
Primjer – množenje matrica
Množenje se odvija element po element, a unutarnje operacije su neovisne što znači da se zadatak može iznimno lako prilagoditi za paralelnu obradu
int redak, stupac, k, val = 0;
for (stupac = 0; stupac < WIDTH; stupac++) {
for (redak = 0; redak < HEIGHT; redak++) {
for (k = 0; k < WIDTH; ++k) {
val += a[redak][k] * b[k][stupac];
}
c[redak][stupac] = val;
}
}
Primjer – množenje matrica
Logička jedinica paralelnog rada u množenju matrica je operacija sume umnoška jednog reda i stupca
Primjer – množenje matrica
Jedna (ne idealna) mogućnost je da se gridsastoji od 12 paralelnih blokova, gdje svaki ima jednu dretvu koja računa element izlazne matrice
Primjer – množenje matrica
Sada redak i stupac računamo iz ID-a bloka u kojem se nalazimo, pa svaki blok računa točno jedan element u izlaznoj matrici – paralelno
int redak = blockId / WIDTH,
stupac = blockId % WIDTH;
int k, val = 0;
for (k = 0; k < WIDTH; ++k) {
val += a[redak][k] * b[k][stupac];
}
c[redak][stupac] = val;
Primjer – množenje matrica
• CUDA predočava grid kao dvodimenzionalno polje blokova, a blok kao polje dretvi.
• To može pojednostaviti model paralelizacije
Primjer – množenje matrica
• Svaki blok može imati X i Y koordinatu unutar grida• Svaka dretva može imati X i Y koordinatu unutar bloka
Primjeri
• Množenje matrica
• Mandelbrot fraktal