Top Banner
NVIDIA CUDA Alen Novosel, 42561/13 - R Marin Rukavina, 42617/13 - R GPGPU:
19

GPGPU: NVIDIA CUDA

Nov 09, 2021

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: GPGPU: NVIDIA CUDA

NVIDIA CUDA

Alen Novosel, 42561/13-R

Marin Rukavina, 42617/13-R

GPGPU:

Page 2: GPGPU: NVIDIA CUDA

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

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

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

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

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

Fermi GPU arhitektura

Page 8: GPGPU: NVIDIA CUDA

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

CPU vs GPU

Page 10: GPGPU: NVIDIA CUDA

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

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

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

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

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

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

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

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

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

Primjeri

• Množenje matrica

• Mandelbrot fraktal