gpgpu: nvidia cuda
TRANSCRIPT
![Page 1: GPGPU: NVIDIA CUDA](https://reader030.vdocuments.net/reader030/viewer/2022012512/618a848502485043e846394e/html5/thumbnails/1.jpg)
NVIDIA CUDA
Alen Novosel, 42561/13-R
Marin Rukavina, 42617/13-R
GPGPU:
![Page 2: GPGPU: NVIDIA CUDA](https://reader030.vdocuments.net/reader030/viewer/2022012512/618a848502485043e846394e/html5/thumbnails/2.jpg)
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++
![Page 3: GPGPU: NVIDIA CUDA](https://reader030.vdocuments.net/reader030/viewer/2022012512/618a848502485043e846394e/html5/thumbnails/3.jpg)
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
![Page 4: GPGPU: NVIDIA CUDA](https://reader030.vdocuments.net/reader030/viewer/2022012512/618a848502485043e846394e/html5/thumbnails/4.jpg)
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.
![Page 5: GPGPU: NVIDIA CUDA](https://reader030.vdocuments.net/reader030/viewer/2022012512/618a848502485043e846394e/html5/thumbnails/5.jpg)
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
![Page 6: GPGPU: NVIDIA CUDA](https://reader030.vdocuments.net/reader030/viewer/2022012512/618a848502485043e846394e/html5/thumbnails/6.jpg)
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)
![Page 7: GPGPU: NVIDIA CUDA](https://reader030.vdocuments.net/reader030/viewer/2022012512/618a848502485043e846394e/html5/thumbnails/7.jpg)
Fermi GPU arhitektura
![Page 8: GPGPU: NVIDIA CUDA](https://reader030.vdocuments.net/reader030/viewer/2022012512/618a848502485043e846394e/html5/thumbnails/8.jpg)
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.
![Page 9: GPGPU: NVIDIA CUDA](https://reader030.vdocuments.net/reader030/viewer/2022012512/618a848502485043e846394e/html5/thumbnails/9.jpg)
CPU vs GPU
![Page 10: GPGPU: NVIDIA CUDA](https://reader030.vdocuments.net/reader030/viewer/2022012512/618a848502485043e846394e/html5/thumbnails/10.jpg)
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$
![Page 11: GPGPU: NVIDIA CUDA](https://reader030.vdocuments.net/reader030/viewer/2022012512/618a848502485043e846394e/html5/thumbnails/11.jpg)
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
![Page 12: GPGPU: NVIDIA CUDA](https://reader030.vdocuments.net/reader030/viewer/2022012512/618a848502485043e846394e/html5/thumbnails/12.jpg)
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
![Page 13: GPGPU: NVIDIA CUDA](https://reader030.vdocuments.net/reader030/viewer/2022012512/618a848502485043e846394e/html5/thumbnails/13.jpg)
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;
}
}
![Page 14: GPGPU: NVIDIA CUDA](https://reader030.vdocuments.net/reader030/viewer/2022012512/618a848502485043e846394e/html5/thumbnails/14.jpg)
Primjer – množenje matrica
Logička jedinica paralelnog rada u množenju matrica je operacija sume umnoška jednog reda i stupca
![Page 15: GPGPU: NVIDIA CUDA](https://reader030.vdocuments.net/reader030/viewer/2022012512/618a848502485043e846394e/html5/thumbnails/15.jpg)
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
![Page 16: GPGPU: NVIDIA CUDA](https://reader030.vdocuments.net/reader030/viewer/2022012512/618a848502485043e846394e/html5/thumbnails/16.jpg)
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;
![Page 17: GPGPU: NVIDIA CUDA](https://reader030.vdocuments.net/reader030/viewer/2022012512/618a848502485043e846394e/html5/thumbnails/17.jpg)
Primjer – množenje matrica
• CUDA predočava grid kao dvodimenzionalno polje blokova, a blok kao polje dretvi.
• To može pojednostaviti model paralelizacije
![Page 18: GPGPU: NVIDIA CUDA](https://reader030.vdocuments.net/reader030/viewer/2022012512/618a848502485043e846394e/html5/thumbnails/18.jpg)
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
![Page 19: GPGPU: NVIDIA CUDA](https://reader030.vdocuments.net/reader030/viewer/2022012512/618a848502485043e846394e/html5/thumbnails/19.jpg)
Primjeri
• Množenje matrica
• Mandelbrot fraktal