GPU

Uvod u GPU programiranje

Uvod u GPU programiranje

Računanje opće namjene na GPU-u (grafička procesna jedinica), poznatije kao GPU programiranje, uporaba je GPU-a zajedno s CPU-om (središnja procesorska jedinica) za ubrzanje računanja u aplikacijama kojima tradicionalno rukuje samo CPU.Iako je GPU programiranje praktično održivo samo u posljednja dva desetljeća, njegove aplikacije sada uključuju gotovo svaku industriju. Primjerice, GPU programiranje koristi se za ubrzavanje obrade video zapisa, digitalnih slika i audio signala, statističke fizike, znanstvenog računarstva, medicinske slike, računalnog vida, neuronskih mreža i dubokog učenja, kriptografije, pa čak i otkrivanja upada, uz mnoga druga područja.

Ovaj članak služi kao teorijski uvod namijenjen onima koji bi željeli naučiti pisati GPU-ubrzane programe, kao i onima koje samo općenito zanima ova fascinantna tema.

Razlika između GPU-a i CPU-a

Dugo vremena prije nego što je 3D grafika visoke razlučivosti postala standard, većina računala nije imala GPU. Umjesto toga, CPU je izvršio sve upute računalnih programa izvršavajući osnovne aritmetičke, logičke, kontrolne i ulazno / izlazne (I / O) operacije navedene u uputama. Iz tog se razloga CPU često opisuje kao mozak računala.

No, posljednjih godina GPU, koji je dizajniran da ubrza stvaranje slika za izlaz na uređaj za prikaz, često pomaže CPU u rješavanju problema u područjima kojima je prethodno rukovao samo CPU.

Proizvođač grafičkih kartica Nvidia pruža jednostavan način kako razumjeti temeljnu razliku između GPU-a i CPU-a: „CPU se sastoji od nekoliko jezgri optimiziranih za sekvencijalnu serijsku obradu, dok GPU ima masovno paralelnu arhitekturu koja se sastoji od tisuća manjih i učinkovitijih jezgre dizajnirane za istovremeno rješavanje više zadataka."

Sposobnost rukovanja s više zadataka istovremeno čini GPU-ove vrlo pogodnim za neke zadatke, poput pretraživanja riječi u dokumentu, dok drugi zadaci, poput izračunavanja Fibonaccijeve sekvence, uopće nemaju koristi od paralelne obrade.

Međutim, među zadacima koji od paralelne obrade značajno profitiraju je duboko učenje, jedno od najtraženijih vještina u tehnologiji danas. Algoritmi dubokog učenja oponašaju aktivnost u slojevima neurona u neokorteksu, omogućujući strojevima da nauče kako razumjeti jezik, prepoznati obrasce ili sastaviti glazbu.

Kao rezultat sve veće važnosti umjetne inteligencije, potražnja za programerima koji razumiju opće namjene računanja na GPU-u raste.

CUDA naspram OpenCL nasuprot OpenACC

Budući da GPU računske probleme razumiju u smislu grafičkih primitiva, rani napori da se GPU koriste kao općeniti procesori zahtijevali su preoblikovanje računskih problema u jezik grafičkih kartica.

Srećom, sada je puno lakše raditi GPU-ubrzano računanje zahvaljujući paralelnim računalnim platformama poput Nvidijine CUDA, OpenCL ili OpenACC. Te platforme omogućavaju programerima da ignoriraju jezičnu barijeru koja postoji između CPU-a i GPU-a i umjesto toga usredotoče se na računalne koncepte više razine.

CUDA

Prvobitno objavljena od strane Nvidia 2007. godine, CUDA (Compute Unified Device Architecture) je danas dominantni vlasnički okvir. "S CUDA-om programeri mogu dramatično ubrzati računalne programe iskorištavanjem snage GPU-a", opisuje okvir Nvidia.

Programeri mogu nazvati CUDA iz programskih jezika kao što su C, C ++, Fortran ili Python, bez ikakvih vještina u grafičkom programiranju. Štoviše, CUDA Toolkit iz Nvidije sadrži sve što je programerima potrebno za početak stvaranja aplikacija ubrzanih GPU-om koje uvelike nadmašuju svoje kolege vezane uz CPU.

CUDA SDK dostupan je za Microsoft Windows, Linux i macOS. platforma CUDA također podržava druga računalna sučelja, uključujući OpenCL, Microsoftov DirectCompute, OpenGL Compute Shaders i C ++ AMP.

OpenCL

Prvobitno objavljen od strane Khronos Group 2009. godine, OpenCL je najpopularniji otvoreni standard bez naknade za paralelno programiranje na više platformi. Prema Khronos Group, „OpenCL uvelike poboljšava brzinu i odziv širokog spektra aplikacija u brojnim tržišnim kategorijama, uključujući igre i zabavne naslove, znanstveni i medicinski softver, profesionalni kreativni alati, obradu vida i obuku i inferenciju neuronskih mreža."

OpenCL su do sada implementirali Altera, AMD, Apple, ARM, Creative, IBM, Imagination, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx i ZiiLABS, a podržava sve popularne operativne sustave na svim glavnim platformama, što ga čini izuzetno svestran. OpenCL definira jezik sličan C-u za pisanje programa, ali API-ji treće strane postoje za druge programske jezike i platforme kao što su Python ili Java.

OpenACC

OpenACC je najmlađi programski standard za paralelno računanje opisan u ovom članku. Prvobitno ga je 2015. godine objavila grupa tvrtki koja se sastoji od Cray, CAPS, Nvidia i PGI (Portland Group) radi pojednostavljenja paralelnog programiranja heterogenih CPU / GPU sustava.

„OpenACC je model paralelnog programiranja koji se temelji na izvedbi, a temelji se na direktivama, dizajniran za znanstvenike i inženjere zainteresirane za prijenos svojih kodova na širok spektar heterogenih HPC hardverskih platformi i arhitektura sa znatno manjim programskim naporom nego što je potrebno s niskom razinom model.,”Navodi OpenACC na svojoj službenoj web stranici.

Programeri zainteresirani za OpenACC mogu dodavati izvorne kodove C, C ++ i Fortran kako bi GPU-u rekli koja područja koja treba ubrzati. Cilj je pružiti model za programiranje akceleratora koji je prenosiv u operativnim sustavima i raznim vrstama host procesora i akceleratora.

Koji bih trebao koristiti?

Izbor između ove tri paralelne računalne platforme ovisi o vašim ciljevima i okruženju u kojem radite. Na primjer, CUDA se široko koristi u akademskoj zajednici, a smatra se i najlakšim za učenje. OpenCL je daleko najprenosivija paralelna računalna platforma, iako programe napisane u OpenCL-u još uvijek treba pojedinačno optimizirati za svaku ciljnu platformu.

Naučite GPU kodiranje na LinuxHintu.com

GPU programiranje s Pythonom

GPU programiranje s C++

Daljnje čitanje

Da biste se upoznali s CUDA-om, preporučujemo da slijedite upute u Vodiču za brzi početak CUDA-e, koji objašnjava kako pokrenuti i pokrenuti CUDA na Linuxu, Windowsu i macOS-u. AMD-ov Vodič za programiranje OpenCL-a pruža fantastičan, detaljni pregled OpenCL-a, ali pretpostavlja da je čitatelj upoznat s prva tri poglavlja OpenCL specifikacije. OpenACC nudi uvodni vodič u tri koraka osmišljen kako bi pokazao kako iskoristiti prednosti GPU programiranja, a više informacija možete pronaći u specifikaciji OpenACC.

Vodič za Shadow of the Tomb Raider za Linux
Shadow of the Tomb Raider dvanaesti je dodatak seriji Tomb Raider - franšizi u akcijsko-avanturističkoj igri koju je stvorio Eidos Montreal. I kritiča...
Kako pojačati FPS u Linuxu?
FPS je kratica Okviri u sekundi. Zadatak FPS-a je mjerenje broja sličica u reprodukcijama video zapisa ili igranim izvedbama. Jednostavnim riječima, b...
Najpopularnije laboratorijske igre Oculus App
Ako ste vlasnik slušalica Oculus, tada morate biti sigurni u bočno učitavanje. Bočno učitavanje postupak je instaliranja nehranjenog sadržaja na vaše ...