Po podatkih s spletne strani je kratek pregled razlik med CUDA in OpenCL. Prosimo, opozorite na morebitne napake.
Odmik: Simulacijski test v Sandia National Laboratory v Združenih državah je pokazal, da zaradi omejitev mehanizmov shranjevanja in pasovne širine pomnilnika procesorji s 16, 32 jedri ali celo 64 jedri ne morejo le izboljšati zmogljivosti superračunalnikov, temveč lahko celo povzročijo znatno zmanjšanje učinkovitosti.
Kaj je OpenCL?
Gre za odprt in brezplačen standard za vzporedno programiranje za splošne namene heterogenih sistemov, ki ga je začel Apple in ga je skupaj proizvajalo veliko znanih proizvajalcev v industriji, hkrati pa je tudi enotno programsko okolje. Za razvijalce programske opreme je priročna za pisanje učinkovite in lahkotne kode za strežnike z visoko zmogljivostjo, namizne računalniške sisteme in ročne naprave, široko pa se uporablja v večjedrnih procesorjih (CPU), grafičnih procesorskih enotah (GPU), arhitekturah tipa celic in drugih vzporednih procesorjih, kot so digitalni signalni procesorji (DSP), ter ima široke razvojne možnosti na različnih področjih, kot so igre, zabava, znanstvene raziskave in zdravstvena oskrba.
Kaj je CUDA?
CUDA je arhitektura, ki temelji na vzporednem računalništvu na Nvidia GPU-jih. CUDA vključuje predvsem dva vidika: prvi je arhitektura nabora ukazov ISA; drugi strojni računalniški pogon; Pravzaprav gre za strojno opremo in nabor ukazov. Z drugimi besedami, CUDA lahko razumemo kot arhitekturo, podobno X86 ali celici, vendar temelji na GPU-jih, ne na tradicionalnih CPU-jih.
Kaj pravzaprav je OpenCL?
OpenCL je pravzaprav povsem nov API za vzporedno programiranje heterogenih sistemov, OpenCL pa lahko uporablja GPU-je za izvajanje vzporednega računalniškega dela. OpenGL je za grafe, medtem ko je OpenCL za vzporedno računalništvo. V procesu razvoja OpenCL so tehnične platforme vse NVIDIA GPU-ji, v resnici pa je OpenCL razvit na osnovi NVIDIA GPU platform. Poleg tega je bila prva predstavitev OpenCL prav tako na NVIDIA grafičnih karticah. V bistvu je OpenCL tehnologija, enakovredna DirectX-u na platformi Windows. Ali bolje rečeno, gre za API vmesnik, ki povezuje strojno in programsko opremo. V tem pogledu je podoben OpenGL, vendar je OpenCL veliko obsežnejši od OpenGL in se ne uporablja le za 3D grafiko. Če to opišete v eni povedi, je vloga OpenCL, da sprosti potencial strojne opreme s klicanjem računalniških virov procesorja in GPU-ja, da program deluje hitreje in bolje.
Kaj pravzaprav je CUDA?
Arhitektura CUDA je izvorna, posebej zasnovana za računalniške vmesnike, ta strojna arhitektura, vključno z nabori ukazov, pa je popoln nabor arhitektur, zasnovanih za tovrstno vzporedno in heterogeno računalništvo. Arhitektura CUDA podpira API-je, vključno z OpenCL ali DirectX, CUDA pa podpira tudi C, C++, Fortran, Java, Python in druge jezike.
Kakšen je odnos med OpenCL in CUDA?
Odnos med CUDA in OpenCL ni konfliktni odnos, temveč vključujoč odnos. OpenCL je API, na prvi ravni je arhitektura CUDA višje ravni, ne glede na to, ali gre za OpenCL, DX11 ali jezik C, je mogoče podprti Fortran, DX11 računalništvo. Kot razvijalec programov običajno razumejo le te jezike ali API-je in lahko uporabljajo več jezikov za razvoj lastnih programov, ne glede na izbrani jezik, dokler želijo uporabiti računalniško moč GPU-ja, lahko uporabijo CUDA za programiranje na tej arhitekturi. Tehnične razlike med OpenCL in CUDA se predvsem odražajo v metodi implementacije. CUDA, ki temelji na jeziku C, je zapakirana v enostavno zapisljivo kodo, zato lahko tudi raziskovalci, ki niso seznanjeni s konstrukcijo čipov, uporabljajo orodja CUDA za pisanje praktičnih programov. Čeprav je OpenCL sintaktično blizu CUDA, bolj poudarja osnovne operacije, zato je težji, vendar zaradi tega lahko OpenCL teče na različnih platformah. CUDA je arhitektura vzporednega računalništva, ki vsebuje arhitekturo nabora ukazov in ustrezni strojni pogon. OpenCL je aplikacijski programski vmesnik (API) za vzporedno računalništvo, OpenCL pa je nova razvojna pot CUDA programa poleg C for CUDA na arhitekturi NVIDIA CUDA. Če želite pridobiti več nadzora nad strojno opremo, lahko za programiranje uporabite OpenCL API, in če o API-ju ne veste veliko, lahko programirate tudi v CUDA C, kar sta dva različna načina programiranja in imata svoje podobnosti in razlike. Vendar pa je pri razvoju jezikov OpenCL in CUDA C, v vzporednem računalništvu njuni koncepti podobni, ti programi imata velike podobnosti, zato je relativno enostavno prenesti programe med seboj.
Jezik CUDA C je drugače postavljen kot OpenCL, oziroma uporablja različne ljudi. CUDA C je visokonivojski jezik, ki ga lahko enostavno uporabljajo tudi neprofesionalci, ki ne poznajo veliko strojne opreme; OpenCL je strojno usmerjen vmesnik za razvoj aplikacij, ki programerjem omogoča večji nadzor nad strojno opremo, zato bo začetek in razvoj težji. Zelo pomembne so tudi navade uporabe programerjev; tisti, ki uporabljajo jezik C na CPU platformi X86, bodo zlahka sprejeli jezik C, ki temelji na platformi CUDA GPU; Ljudje, ki so vajeni uporabljati razvoj grafike v OpenGL, bodo bolj prijazni do OpenCL, poleg tega pa bo zelo enostavno razvijati računalniške programe, povezane z grafiko in videom na njegovi osnovi.
|