GPU

GPU programmeerimise sissejuhatus

GPU programmeerimise sissejuhatus

GPU (graafikaprotsessori üksus) üldotstarbeline arvutamine, paremini tuntud kui GPU programmeerimine, on GPU kasutamine koos keskprotsessoriga (CPU) arvutuste kiirendamiseks rakendustes, mida traditsiooniliselt haldab ainult protsessor.Kuigi GPU-de programmeerimine on olnud praktiliselt elujõuline ainult viimase kahe aastakümne jooksul, hõlmavad selle rakendused nüüd praktiliselt kõiki tööstusharusid. Näiteks on GPU programmeerimist kasutatud video, digitaalse pildi ja helisignaali töötlemise, statistilise füüsika, teadusliku arvutamise, meditsiinilise pildistamise, arvutinägemise, närvivõrkude ja sügava õppimise, krüptograafia ja isegi sissetungide tuvastamise kiirendamiseks paljude muude valdkondade hulgas.

See artikkel on teoreetiline sissejuhatus, mis on suunatud neile, kes sooviksid õppida GPU-ga kiirendatud programme kirjutama, ja ka neile, kellel on selle põneva teema vastu lihtsalt üldine huvi.

GPU ja protsessori erinevus

Pikka aega enne kõrge eraldusvõimega ülitäpset 3D-graafika muutumist normiks ei olnud enamikul arvutitel GPU-d. Selle asemel viis CPU läbi kõik arvutiprogrammide juhised, sooritades juhistes määratud põhilised aritmeetilised, loogilised, juhtimis- ja sisend / väljund (I / O) toimingud. Sel põhjusel kirjeldatakse protsessorit sageli kui arvuti aju.

Kuid viimastel aastatel on graafikaprotsessor, mis on mõeldud kuvaseadmesse väljastamiseks piltide loomise kiirendamiseks, sageli protsessoril aidanud lahendada probleeme piirkondades, mida varem käsitles ainult protsessor.

Graafikakaartide tootja Nvidia pakub lihtsat viisi, kuidas mõista GPU ja protsessori vahelist põhimõttelist erinevust: „Protsessor koosneb paarist järjestikuseks seeriatöötluseks optimeeritud südamikust, samal ajal kui GPU-l on massiliselt paralleelne arhitektuur, mis koosneb tuhandetest väiksematest, tõhusamatest südamikud, mis on mõeldud mitme ülesande üheaegseks käsitsemiseks.”

Võimalus korraga mitut ülesannet käsitseda muudab GPU-d mõne ülesande jaoks väga sobivaks, näiteks dokumendist sõna otsimiseks, samas kui muudele ülesannetele, näiteks Fibonacci järjestuse arvutamine, pole paralleelsest töötlemisest üldse kasu.

Paralleelsest töötlemisest olulist kasu saavate ülesannete hulgas on aga sügav õppimine, mis on tänapäeval üks kõige nõutumaid oskusi tehnikas. Sügava õppimise algoritmid jäljendavad tegevust neokorteksi neuronikihtides, võimaldades masinatel õppida keelt mõistma, mustreid ära tundma või muusikat komponeerima.

Tehisintellekti kasvava tähtsuse tõttu on nõudlus GPU-l üldotstarbelist arvutust mõistvate arendajate järele kasvanud.

CUDA versus OpenCL versus OpenACC

Kuna graafikaprotsessorid mõistavad arvutusprobleeme graafika primitiivide osas, nõudsid varased jõupingutused GPU-de kasutamiseks üldotstarbeliste protsessoritena arvutusprobleemide ümbertöötlemist graafikakaartide keeles.

Õnneks on nüüd palju lihtsam teha GPU-kiirendatud arvutust tänu paralleelsetele arvutusplatvormidele nagu Nvidia CUDA, OpenCL või OpenACC. Need platvormid võimaldavad arendajatel ignoreerida protsessori ja GPU vahel esinevat keelebarjääri ning selle asemel keskenduda kõrgema taseme arvutuskontseptsioonidele.

CUDA

Algselt Nvidia poolt 2007. aastal välja antud CUDA (Compute Unified Device Architecture) on tänapäeval domineeriv varaline raamistik. "CUDA abil saavad arendajad kiirendada arvutirakenduste kasutamist, kasutades GPU-de jõudu," kirjeldab Nvidia raamistikku.

Arendajad saavad helistada CUDA-le programmeerimiskeeltest, näiteks C, C ++, Fortran või Python, ilma graafika programmeerimise oskusteta. Veelgi enam, Nvidia CUDA tööriistakomplekt sisaldab kõike, mida arendajad vajavad GPU-ga kiirendatud rakenduste loomiseks, mis ületavad oluliselt nende protsessoriga seotud kolleege.

CUDA SDK on saadaval Microsoft Windowsile, Linuxile ja macOS-ile. CUDA platvorm toetab ka muid arvutusliideseid, sealhulgas OpenCL, Microsofti DirectCompute, OpenGL Compute Shaders ja C ++ AMP.

OpenCL

Algselt Khronose kontserni poolt 2009. aastal välja antud OpenCL on populaarseim platvormidevahelise ja paralleelse programmeerimise avatud ja kasutustasuta standard. Khronose rühma sõnul: „OpenCL parandab suuresti paljude rakenduste kiirust ja reageerimisvõimet paljudes turukategooriates, sealhulgas mängu- ja meelelahutuspealkirjad, teadus- ja meditsiinitarkvara, professionaalsed loomingulised tööriistad, nägemise töötlemine ning närvivõrkude koolitamine ja järeldamine.”

Seni on OpenCL-i rakendanud Altera, AMD, Apple, ARM, Creative, IBM, Imagination, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx ja ZiiLABS ning see toetab kõiki populaarseid operatsioonisüsteeme kõigil peamistel platvormidel, muutes selle äärmiselt mitmekülgne. OpenCL määratleb programmide kirjutamiseks C-laadse keele, kuid teiste programmeerimiskeelte ja -platvormide jaoks, nagu Python või Java, on olemas kolmanda osapoole API-d.

OpenACC

OpenACC on selles artiklis kirjeldatud noorim paralleelarvutuste programmeerimisstandard. Algselt andis selle välja 2015. aastal Cray, CAPS, Nvidia ja PGI (Portland Group) koosnev ettevõtete grupp, et lihtsustada heterogeensete protsessori / GPU süsteemide paralleelset programmeerimist.

„OpenACC on kasutajapõhine direktiivipõhine jõudlusega kaasaskantav paralleelprogrammeerimismudel, mis on mõeldud teadlastele ja inseneridele, kes on huvitatud oma koodide teisaldamisest paljudele erinevatele heterogeensetele HPC riistvaraplatvormidele ja arhitektuuridele. mudel.,”Märgib OpenACC oma ametlikul veebisaidil.

OpenACC-st huvitatud arendajad saavad märkida C, C ++ ja Fortrani lähtekoodi, et öelda GPU-le, milliseid piirkondi tuleks kiirendada. Eesmärk on pakkuda kiirendi programmeerimise mudel, mis on kaasaskantav opsüsteemides ning erinevat tüüpi hostprotsessorites ja kiirendites.

Kumba ma peaksin kasutama?

Valik nende kolme paralleelse arvutiplatvormi vahel sõltub teie eesmärkidest ja keskkonnast, kus töötate. Näiteks CUDA-d kasutatakse laialdaselt akadeemilises ringkonnas ja seda peetakse ka kõige lihtsamaks õppimiseks. OpenCL on ülekaalukalt kõige kaasaskantav paralleelarvutusplatvorm, kuigi OpenCL-is kirjutatud programmid tuleb siiski iga sihtplatvormi jaoks eraldi optimeerida.

Õppige LinuxHinti GPU-kodeerimist.com

GPU programmeerimine Pythoniga

GPU programmeerimine C-ga++

Lisalugemist

CUDA-ga tutvumiseks soovitame teil järgida CUDA kiirjuhendi juhiseid, mis selgitavad, kuidas CUDA-d Linuxi, Windowsi ja MacOS-i käivitada. AMD OpenCL-i programmeerimisjuhend pakub fantastilist ja põhjalikku ülevaadet OpenCL-ist, kuid eeldab, et lugeja tunneb OpenCL-i spetsifikatsiooni kolme esimest peatükki. OpenACC pakub kolmeastmelist sissejuhatavat õpetust, mis on mõeldud GPU programmeerimise eeliste näitamiseks. Lisateavet leiate OpenACC spetsifikatsioonist.

Lahing Wesnothi õpetuse eest
Battle for Wesnoth on üks populaarsemaid avatud lähtekoodiga strateegiamänge, mida saate praegu mängida. See mäng pole mitte ainult olnud väga pikka a...
0 A.D. Õpetus
Paljudest strateegiamängudest on 0 A.D. suudab silma paista põhjaliku tiitli ja väga sügava taktikalise mänguna, hoolimata sellest, et see on avatud l...
Unity3D õpetus
Sissejuhatus Unity 3D-sse Unity 3D on võimas mängude arendamise mootor. See on platvormidevaheline, mis võimaldab teil luua mänge mobiilseadmetele, ve...