GPU

GPU programavimo įvadas

GPU programavimo įvadas

Bendros paskirties skaičiavimas GPU (grafikos procesoriaus bloke), geriau žinomas kaip GPU programavimas, yra GPU naudojimas kartu su centriniu procesoriumi (centriniu procesoriumi), siekiant pagreitinti skaičiavimą programose, kurias tradiciškai tvarko tik procesorius.Nors GPU programavimas praktiškai buvo perspektyvus tik pastaruosius du dešimtmečius, jo programos dabar apima praktiškai kiekvieną pramonę. Pavyzdžiui, GPU programavimas buvo naudojamas pagreitinti vaizdo, skaitmeninių vaizdų ir garso signalų apdorojimą, statistinę fiziką, mokslinį skaičiavimą, medicininį vaizdavimą, kompiuterio matymą, neuroninius tinklus ir gilųjį mokymąsi, kriptografiją ir net įsilaužimo aptikimą, be to, daugelyje kitų sričių.

Šis straipsnis yra teorinis įvadas, skirtas tiems, kurie norėtų išmokti rašyti GPU pagreitintas programas, taip pat tiems, kurie tiesiog domisi šia patrauklia tema.

Skirtumas tarp GPU ir procesoriaus

Ilgą laiką, kol didelės skiriamosios gebos, aukštos kokybės 3D grafika tapo norma, dauguma kompiuterių neturėjo GPU. Vietoj to, procesorius vykdė visas kompiuterio programų instrukcijas atlikdamas pagrindines aritmetines, logines, valdymo ir įvesties / išvesties (įvesties / išvesties) operacijas, nurodytas instrukcijose. Dėl šios priežasties procesorius dažnai apibūdinamas kaip kompiuterio smegenys.

Tačiau pastaraisiais metais grafinis procesorius, skirtas pagreitinti vaizdų, skirtų išvesties į rodymo įrenginį, kūrimą, dažnai padėjo procesoriui išspręsti problemas tose srityse, kurias anksčiau tvarkė tik procesorius.

Grafinių kortelių gamintojas „Nvidia“ pateikia paprastą būdą, kaip suprasti esminį skirtumą tarp GPU ir procesoriaus: „Centrinis procesorius susideda iš kelių branduolių, optimizuotų nuosekliam nuosekliam apdorojimui, o GPU turi masiškai paralelią architektūrą, susidedančią iš tūkstančių mažesnių, efektyvesnių branduoliai, skirti vienu metu atlikti kelias užduotis.“

Dėl galimybės vienu metu atlikti kelias užduotis GPU labai tinka kai kurioms užduotims atlikti, pvz., Ieškoti žodžio dokumente, o kitoms užduotims, pvz., „Fibonacci“ sekos apskaičiavimui, lygiagretus apdorojimas visiškai nenaudingas.

Tačiau tarp užduočių, kurioms labai naudingas lygiagretus apdorojimas, yra gilus mokymasis, kuris yra vienas iš labiausiai ieškomų įgūdžių šiandien. Gilaus mokymosi algoritmai imituoja neokortekso veiklą neuronų sluoksniuose, leidžiantys mašinoms išmokti suprasti kalbą, atpažinti modelius ar kurti muziką.

Dėl vis didėjančio dirbtinio intelekto svarbos kūrėjų, suprantančių bendrosios paskirties kompiuterį GPU, paklausa išaugo.

CUDA Versus OpenCL Versus OpenACC

Kadangi grafikos procesoriai supranta skaičiavimo problemas grafikos primityvumu, ankstyvos pastangos naudoti GPU kaip bendrosios paskirties procesorius reikalavo performuluoti skaičiavimo problemas grafikos plokščių kalba.

Laimei, dabar daug lengviau atlikti GPU pagreitintą skaičiavimą dėl lygiagrečių skaičiavimo platformų, tokių kaip „Nvidia“ CUDA, „OpenCL“ ar „OpenACC“. Šios platformos leidžia kūrėjams nepaisyti kalbos barjero, egzistuojančio tarp procesoriaus ir GPU, ir sutelkti dėmesį į aukštesnio lygio skaičiavimo koncepcijas.

CUDA

Iš pradžių „Nvidia“ išleista 2007 m., CUDA („Compute Unified Device Architecture“) yra dominuojanti nuosavybės sistema šiandien. „Naudodamiesi CUDA, kūrėjai gali smarkiai pagreitinti programų skaičiavimą, pasitelkdami GPU galią“, - apibūdina „Nvidia“ sistema.

Kūrėjai gali skambinti CUDA iš programavimo kalbų, tokių kaip C, C ++, Fortran ar Python, neturėdami grafikos programavimo įgūdžių. Negana to, „Nvidia“ CUDA įrankių rinkinyje yra viskas, ko reikia kūrėjams, norint pradėti kurti GPU pagreitintas programas, kurios gerokai pranoksta jų kolegomis, pririštais prie procesoriaus.

CUDA SDK galima „Microsoft Windows“, „Linux“ ir „macOS“. CUDA platforma taip pat palaiko kitas skaičiavimo sąsajas, įskaitant „OpenCL“, „Microsoft DirectCompute“, „OpenGL Compute Shaders“ ir C ++ AMP.

„OpenCL“

Iš pradžių „Khronos Group“ išleista 2009 m., „OpenCL“ yra populiariausias atviras, nemokamas standartas, reikalingas lygiagrečiam programavimui tarp platformų. Pasak „Khronos Group“, „OpenCL labai pagerina daugelio programų spektro greitį ir reagavimą įvairiose rinkos kategorijose, įskaitant žaidimų ir pramogų pavadinimus, mokslinę ir medicinos programinę įrangą, profesionalias kūrybines priemones, regos apdorojimą, neuroninių tinklų mokymą ir išvadas.“

„OpenCL“ iki šiol įgyvendino „Altera“, AMD, „Apple“, ARM, „Creative“, „IBM“, „Imagination“, „Intel“, „Nvidia“, „Qualcomm“, „Samsung“, „Vivante“, „Xilinx“ ir „ZiiLABS“, todėl ji palaiko visas populiarias operacines sistemas visose pagrindinėse platformose, todėl tai daro nepaprastai universalus. „OpenCL“ apibrėžia C tipo kalbą programoms rašyti, tačiau trečiųjų šalių API egzistuoja kitoms programavimo kalboms ir platformoms, tokioms kaip „Python“ ar „Java“.

„OpenACC“

„OpenACC“ yra jauniausias lygiagretaus skaičiavimo programavimo standartas, aprašytas šiame straipsnyje. Iš pradžių ją 2015 m. Išleido „Cray“, „CAPS“, „Nvidia“ ir PGI („Portland Group“) įmonių grupė, siekdama supaprastinti heterogeninių procesorių / GPU sistemų lygiagretų programavimą.

„OpenACC yra vartotojo sukurtas, direktyvomis pagrįstas našumo nešiojamas lygiagretus programavimo modelis, sukurtas mokslininkams ir inžinieriams, norintiems perkelti savo kodus į įvairiausias heterogenines HPC aparatinės įrangos platformas ir architektūras, o programavimo pastangos yra žymiai mažesnės, nei reikalaujama esant žemo lygio programoms. modelis.,“, - teigia„ OpenACC “savo oficialioje svetainėje.

„OpenACC“ besidomintys kūrėjai gali komentuoti C, C ++ ir „Fortran“ šaltinio kodus, kad GPU nurodytų, kurias sritis reikėtų pagreitinti. Tikslas yra pateikti greitintuvo programavimo modelį, kuris būtų nešiojamas visose operacinėse sistemose ir įvairių tipų pagrindiniuose procesoriuose ir greitintuvuose.

Kurį turėčiau naudoti?

Pasirinkimas tarp šių trijų lygiagrečių skaičiavimo platformų priklauso nuo jūsų tikslų ir aplinkos, kurioje dirbate. Pavyzdžiui, CUDA yra plačiai naudojama akademinėje aplinkoje, ji taip pat laikoma lengviausia išmokti. „OpenCL“ yra pati perkeliamiausia lygiagretaus skaičiavimo platforma, nors „OpenCL“ parašytas programas vis tiek reikia individualiai optimizuoti kiekvienai tikslinei platformai.

Sužinokite GPU kodavimą sistemoje „LinuxHint“.com

GPU programavimas su „Python“

GPU programavimas su C++

Papildoma literatūra

Norėdami susipažinti su CUDA, rekomenduojame vadovautis instrukcijomis, pateiktomis CUDA greitojo pradžios vadove, kuriame paaiškinta, kaip CUDA paleisti ir veikti „Linux“, „Windows“ ir „MacOS“. AMD „OpenCL“ programavimo vadove pateikiama fantastiška, išsami „OpenCL“ apžvalga, tačiau daroma prielaida, kad skaitytojas yra susipažinęs su pirmaisiais trimis „OpenCL“ specifikacijos skyriais. „OpenACC“ siūlo trijų pakopų įvadinę pamoką, skirtą parodyti, kaip pasinaudoti GPU programavimo pranašumais, o daugiau informacijos galite rasti „OpenACC“ specifikacijoje.

„Vulkan“, skirta „Linux“ vartotojams
Kiekvienos naujos kartos grafikos plokštės matome, kaip žaidimų kūrėjai peržengia grafinės ištikimybės ribas ir artėja prie fotorealizmo. Nepaisant vi...
„OpenTTD“ ir „Simutrans“
Sukurti savo transporto modeliavimą gali būti smagu, atpalaiduojanti ir be galo viliojanti. Štai kodėl jūs turite įsitikinti, kad išbandėte kuo daugia...
„OpenTTD“ pamoka
„OpenTTD“ yra vienas iš populiariausių verslo modeliavimo žaidimų. Šiame žaidime turite sukurti nuostabų transporto verslą. Tačiau pradėsite nuo mažda...