CUDA

CUDA (Compute Unified Device Architecture) je paralelna računalna platforma i sučelje za programiranje aplikacija (API) koje omogućuje softveru da koristi određene vrste grafičkih procesorskih jedinica (GPU) za obradu opće namjene. Takav pristup naziva se računalstvo opće namjene na GPU-ovima (GPGPU). CUDA je softverski sloj koji daje izravan pristup virtualnom skupu instrukcija GPU-a i paralelnim računalnim elementima.

CUDA je dizajnirana za rad s programskim jezicima kao što su C, C++, Fortran i Python. Ova pristupačnost olakšava stručnjacima za paralelno programiranje korištenje GPU resursa. GPU-ovi s CUDA-om također podržavaju programske okvire kao što su OpenMP, OpenACC i OpenCL. CUDA je kreirala Nvidia.

U GPU-intenzivnimm aplikacijama, sekvencijalni dio radnog opterećenja radi na CPU – koji je optimiziran za performanse s jednim thread-om, dok se računski intenzivan dio aplikacije izvodi na tisućama GPU jezgri paralelno. Kada koriste CUDA, programeri programiraju i izražavaju paralelizam kroz proširenja u obliku nekoliko osnovnih ključnih riječi.

nvidia logo
Slika 1: Nvidia logo

OpenCL i CUDA

CUDA konkurent OpenCL pokrenuli su Apple i Khronos Grupa 2009. godine, u pokušaju da se osigura standard za heterogeno računanje koji nije bio ograničen na Intel / AMD CPU s Nvidia GPU-ovima. Iako OpenCL zvuči privlačno zbog svoje općenitosti, nije se pokazao tako dobro kao CUDA na Nvidia GPU-ima, a mnogi okviri za duboko učenje ili ga ne podržavaju ili ga podržavaju samo kao naknadnu misao nakon što je njihova CUDA podrška objavljena. kombinacija CUDA i Nvidia GPU-a dominira u nekoliko područja primjene, uključujući duboko učenje, te je temelj za neke od najbrža računala na svijetu.

Nvidia CUDA ToolKit

CUDA Toolkit iz NVIDIA-e pruža sve što je potrebno za razvoj aplikacija koje ubrzavaju GPU. CUDA Toolkit uključuje biblioteke ubrzane GPU-om, kompajler, razvojne alate i CUDA runtime

Uz CUDA Toolkit moguće je razviti, optimizirati i implementirati aplikacije na ugrađenim sustavima ubrzanim GPU-om, stolnim radnim stanicama, poslovnim podatkovnim centrima, platformama temeljenim na oblaku i HPC superračunalima. Komplet alata uključuje GPU akceerirane biblioteke, alate za otklanjanje pogrešaka i optimizaciju, C/C++ kompajler i runtime biblioteku za izgradnju i implementaciju aplikacije na arhitekturama kao x86, Arm i POWER.

Domene primjene CUDA

CUDA i Nvidia GPU-ovi su usvojeni u mnogim područjima a opsežniji popis uključuje:

Nvidia mikroarhitekture tokom vremena

CPU vs GPU arhitekture

Slika 2:GPU vs CPU
  • Manje jezgri
  • Puno Cache memorije
  • Nekoliko Thread-ova
  • Samostalni procesi
  • Stotine jezgri
  • Puno Cache memorije
  • Tisuće Thread-ova
  • Single Process Execution

CUDA jezgre kroz generacije GPU-a

Organizacija zadataka i memorije

Kako bi se mogla efektivno iskoristiti moć grafičkih kartica, potrebno je organizirati razdjelu poslova u paralelnom zadatku. To se korsiti kroz koncept Grida, Bloka i Dretvi.

Dijeljiva memorija ubrzava pristup memoriji iz dretvi. L1 i L2 cache memorije štede vrijeme za dohvat iz memorije, slično kao i kod CPU-a. Ova memorija se isto tako koristi i za filtriranje podataka prema multiprocesorima u slučaju da koriste iste podatke. Na taj način smanjuje se broj pristupa vanjskoj memoriji.

Projekt

Projekt se može preuzeti ovdje.

Prezentacija se može preuzeti ovdje

Primjer

gif primjera projekta
Računanje Mandelbrotovog skupa u stvarnom vremenu