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.
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:
- Računlane financije
- Modeliranje klime, vremena i oceana
- Data science i analitika
- Deep learning i machine learning
- CAD i CAE - uključujući računsku dinamiku fluida, računsku strukturnu mehaniku, dizajn i vizualizaciju te automatizaciju elektroničkog dizajna)
- Mediji i zabava - uključujući animaciju, modeliranje i renderiranje; korekciju boja i kompozitiranje; završnu obradu i efekte; uređivanje; kodiranje i digitalnu distribuciju; grafiku u eteru; alate za snimanje, pregled i stereo; vremenska grafika
- Medicinsko snimanja
Nvidia mikroarhitekture tokom vremena
- 2007. - Tesla
- 2010. - Fermi
- 2012. Kepler
- 2014. - Maxwell
- 2016. - Pascal
- 2017. - Volta
- 2018. – Turing
- 2018. – Turing
- 2020. - Ampere
CPU vs GPU arhitekture
- 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
- Geforce gtx 980 cuda cores 2048
- Geforce gtx 1080 cuda cores 2560
- Geforce gtx 2080 cuda cores 4352
- Geforce rtx 3080 cuda cores 8704
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.
- Grid - ukupan broj zadataka u jednoj jedinici rada na GPU
- Blok - element koji se izvodi na jednoj jezgri ili multiprocesoru
- Dretva - jedinica paralilizma unutar bloka koja dijeli kontekst s drugim dretvama
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