GPU

Uvod v programiranje GPU

Uvod v programiranje GPU

Računalništvo za splošne namene na GPU (grafična procesna enota), bolj znano kot programiranje GPU, je uporaba GPU skupaj s CPU (centralna procesorska enota) za pospešitev računanja v aplikacijah, ki jih tradicionalno obdeluje samo CPU.Čeprav je programiranje GPU praktično izvedljivo šele v zadnjih dveh desetletjih, njegove aplikacije zdaj vključujejo tako rekoč vse panoge. Na primer, GPU programiranje se med številnimi drugimi področji uporablja za pospeševanje obdelave videa, digitalne slike in zvočnega signala, statistične fizike, znanstvenega računalništva, medicinskega slikanja, računalniškega vida, nevronskih mrež in globokega učenja, kriptografije in celo odkrivanja vdorov.

Ta članek služi kot teoretični uvod, namenjen tistim, ki bi se radi naučili pisati GPU-pospešene programe, in tistim, ki jih ta fascinantna tema zanima zgolj na splošno.

Razlika med GPU in CPU

Dolgo časa, preden je 3D-grafika z visoko ločljivostjo postala resnična, večina računalnikov ni imela grafičnega procesorja. Namesto tega je CPU izvedel vsa navodila računalniških programov z izvajanjem osnovnih aritmetičnih, logičnih, nadzornih in vhodno / izhodnih (I / O) operacij, določenih v navodilih. Zaradi tega CPU pogosto opisujejo kot možgane računalnika.

Toda v zadnjih letih GPU, ki je zasnovan za pospešitev ustvarjanja slik za izhod na prikazovalno napravo, CPU pogosto pomaga pri reševanju težav na področjih, ki jih je prej obravnaval izključno CPU.

Proizvajalec grafičnih kartic Nvidia ponuja preprost način, kako razumeti temeljno razliko med GPU in CPU: »CPU je sestavljen iz nekaj jeder, optimiziranih za zaporedno zaporedno obdelavo, medtem ko ima GPU močno vzporedno arhitekturo, sestavljeno iz tisoč manjših in učinkovitejših jedra, namenjena za istočasno obdelavo več nalog."

Zaradi zmožnosti obdelave več nalog hkrati so grafični procesorji zelo primerni za nekatere naloge, na primer iskanje besede v dokumentu, medtem ko druge naloge, na primer izračun Fibonaccijevega zaporedja, nimajo koristi od vzporedne obdelave.

Vendar pa je med nalogami, ki jim vzporedna obdelava bistveno koristi, globoko učenje, eno najbolj iskanih tehnoloških veščin danes. Algoritmi globokega učenja posnemajo aktivnost v plasteh nevronov v neokorteksu in omogočajo strojem, da se naučijo razumeti jezik, prepoznati vzorce ali sestaviti glasbo.

Kot rezultat naraščajočega pomena umetne inteligence narašča povpraševanje po razvijalcih, ki razumejo splošno uporabo računalništva na GPU.

CUDA Versus OpenCL Versus OpenACC

Ker grafični procesorji računske težave razumejo v smislu grafičnih primitivov, so zgodnja prizadevanja za uporabo grafičnih procesorjev kot splošnih procesorjev zahtevala preoblikovanje računskih težav v jeziku grafičnih kartic.

Na srečo je zdaj veliko lažje izvajati GPU-pospešeno računalništvo zahvaljujoč vzporednim računalniškim platformam, kot so Nvidijine CUDA, OpenCL ali OpenACC. Te platforme omogočajo razvijalcem, da prezrejo jezikovno oviro, ki obstaja med CPU in GPU, in se namesto tega osredotočijo na računalniške koncepte na višji ravni.

CUDA

CUDA (Compute Unified Device Architecture), ki jo je prvotno izdala Nvidia leta 2007, je danes prevladujoč lastniški okvir. "S CUDA lahko razvijalci dramatično pospešijo računalniške aplikacije z izkoriščanjem moči grafičnih procesorjev," opisuje okvir Nvidia.

Razvijalci lahko CUDA pokličejo iz programskih jezikov, kot so C, C ++, Fortran ali Python, brez kakršnega koli znanja pri programiranju grafike. Še več, zbirka orodij CUDA iz Nvidie vsebuje vse, kar morajo razvijalci začeti ustvarjati GPU-pospešene aplikacije, ki močno presegajo svoje kolege, vezane na CPU.

CUDA SDK je na voljo za Microsoft Windows, Linux in macOS. platforma CUDA podpira tudi druge računske vmesnike, vključno z OpenCL, Microsoftovim DirectCompute, OpenGL Compute Shaderji in C ++ AMP.

OpenCL

OpenCL, ki ga je skupina Khronos prvotno izdala leta 2009, je najbolj priljubljen odprt, brezplačen standard za večplastno vzporedno programiranje. Po mnenju skupine Khronos Group „OpenCL močno izboljša hitrost in odzivnost širokega spektra aplikacij v številnih tržnih kategorijah, vključno z igralnimi in zabavnimi naslovi, znanstveno in medicinsko programsko opremo, profesionalnimi kreativnimi orodji, obdelavo vida ter usposabljanjem in vključevanjem nevronskih mrež."

OpenCL so doslej izvajali Altera, AMD, Apple, ARM, Creative, IBM, Imagination, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx in ZiiLABS, podpira pa vse priljubljene operacijske sisteme na vseh večjih platformah, zaradi česar je izjemno vsestranski. OpenCL opredeljuje jezik, podoben C, za pisanje programov, vendar API-ji tretjih oseb obstajajo za druge programske jezike in platforme, kot sta Python ali Java.

OpenACC

OpenACC je najmlajši programski standard za vzporedno računalništvo, opisan v tem članku. Prvotno ga je leta 2015 izdala skupina podjetij, ki so jo sestavljali Cray, CAPS, Nvidia in PGI (skupina Portland), da bi poenostavila vzporedno programiranje heterogenih CPU / GPU sistemov.

“OpenACC je uporabniško usmerjen prenosni vzporedni programerski model, ki temelji na uspešnosti in je zasnovan za znanstvenike in inženirje, ki jih zanima prenos svojih kod na najrazličnejše heterogene HPC-jeve strojne platforme in arhitekture z bistveno manj napora pri programiranju, kot je potrebno pri nizki ravni. model.,”Piše OpenACC na svoji uradni spletni strani.

Razvijalci, ki jih zanima OpenACC, lahko označijo izvorno kodo C, C ++ in Fortran, da GPU sporočijo, katera področja je treba pospešiti. Cilj je zagotoviti model za programiranje pospeševalnika, ki je prenosljiv v operacijskih sistemih in različnih vrstah gostiteljskih procesorjev in pospeševalnikov.

Katero naj uporabim?

Izbira med temi tremi vzporednimi računalniškimi platformami je odvisna od vaših ciljev in okolja, v katerem delate. Na primer, CUDA se pogosto uporablja v akademskih krogih in velja tudi za najlažjega za učenje. OpenCL je daleč najbolj prenosna vzporedna računalniška platforma, čeprav je treba programe, napisane v OpenCL, še vedno posebej optimizirati za vsako ciljno platformo.

Naučite se kodiranja GPU na LinuxHint.com

GPU programiranje s Pythonom

GPU programiranje s C++

Nadaljnje branje

Če se želite seznaniti s CUDA, priporočamo, da sledite navodilom v priročniku za hitri začetek CUDA, ki pojasnjuje, kako CUDA zagnati in zagnati v Linuxu, Windows in macOS. AMD-jev vodnik za programiranje OpenCL ponuja fantastičen, poglobljen pregled OpenCL-a, vendar predpostavlja, da je bralec seznanjen s prvimi tremi poglavji specifikacije OpenCL. OpenACC ponuja uvodno vadnico v treh korakih, ki prikazuje, kako izkoristiti prednosti programiranja GPU, več informacij pa najdete v specifikaciji OpenACC.

WinMouse vam omogoča prilagajanje in izboljšanje premikanja kazalca miške v računalniku z operacijskim sistemom Windows
Če želite izboljšati privzete funkcije kazalca miške, uporabite brezplačno programsko opremo WinMouse. Dodaja več funkcij, s pomočjo katerih boste kar...
Levi gumb miške ne deluje v sistemu Windows 10
Če s prenosnikom ali namiznim računalnikom uporabljate namensko miško, vendar gumb miške z levim klikom ne deluje v operacijskem sistemu Windows 10/8/...
Kazalec skoči ali se naključno premika med tipkanjem v sistemu Windows 10
Če ugotovite, da kazalec miške med tipkanjem v prenosnem računalniku ali računalniku Windows samodejno, naključno preskakuje ali se premika sam, vam l...