www.wikidata.uk-ua.nina.az
CUDA angl Compute Unified Device Architecture programno aparatna arhitektura paralelnih obchislen yaka dozvolyaye istotno zbilshiti obchislyuvalnu produktivnist zavdyaki vikoristannyu grafichnih procesoriv firmi Nvidia CUDATip GPGPURozrobnik NVIDIA CorporationStabilnij vipusk 9 1 12 travnya 2017 Operacijna sistema Windows Vista Windows XP Windows Server 2008 Windows Server 2003 Linux Mac OS XLicenziya vlasnicke PZVebsajt Nvidia s CUDA CUDA u VikishovishiCUDA SDK nadaye mozhlivist vklyuchati v tekst program na S viklik pidprogram sho vikonuyutsya na grafichnih procesorah Nvidia Ce realizovano shlyahom komand yaki zapisuyutsya na osoblivomu dialekti C Arhitektura CUDA daye rozrobniku mozhlivist na svij rozsud organizovuvati dostup do naboru instrukcij grafichnogo priskoryuvacha j keruvati jogo pam yattyu Pervinna versiya CUDA SDK bula predstavlena 15 lyutogo 2007 roku U osnovi CUDA API lezhit rozshirena mova C Dlya uspishnoyi translyaciyi kodu ciyeyu movoyu do skladu CUDA SDK vhodit vlasnij C kompilyator komandnogo ryadka nvcc kompaniyi Nvidia Kompilyator nvcc stvorenij na osnovi vidkritogo kompilyatora Open64 Zmist 1 Programna arhitektura 2 Perevagi CUDA 3 Pidtrimuvani GPU j grafichni priskoryuvachi 4 Iyerarhichna model CUDA 5 Open64 6 Div takozh 7 Dzherela 8 PosilannyaProgramna arhitektura RedaguvatiPervinna versiya CUDA SDK bula predstavlena 15 lyutogo 2007 V osnovi interfejsu programuvannya dodatkiv CUDA lezhit mova S z deyakimi rozshirennyami Dlya uspishnoyi translyaciyi kodu ciyeyu movoyu do skladu CUDA SDK vhodit vlasnij S kompilyator komandnogo ryadka nvcc kompaniyi Nvidia Kompilyator nvcc stvorenij na osnovi vidkritogo kompilyatora Open64 i priznachenij dlya translyaciyi host kodu golovnogo keruyuchogo kodu i device kodu aparatnogo kodu fajliv z rozshirennyam cu v ob yektni fajli pridatni v procesi skladannya kincevoyi programi abo biblioteki u seredovishi programuvannya napriklad v NetBeans V arhitekturi CUDA vikoristovuyetsya model pam yati GRID klasterne modelyuvannya potokiv i SIMD instrukciyi Zastosovna ne tilki dlya visokoproduktivnih grafichnih obchislen ale i dlya riznih naukovih obchislen z vikoristannyam videokart nVidia Ucheni i doslidniki shiroko vikoristovuyut CUDA v riznih oblastyah vklyuchayuchi astrofiziku obchislyuvalnu biologiyu ta himiyu modelyuvannya dinamiki ridin elektromagnitnih vzayemodij komp yuternu tomografiyu sejsmichnij analiz i bagato inshogo U CUDA ye mozhlivist pidklyuchennya do dodatkiv sho vikoristovuyut OpenGL i Direct3D CUDA krosplatformlenist dlya takih operacijnih sistem yak Linux Mac OS X i Windows 22 bereznya 2010 nVidia vipustila CUDA Toolkit 3 0 yakij mistiv pidtrimku OpenCL Perevagi CUDA RedaguvatiU porivnyanni z tradicijnim pidhodom do organizaciyi obchislen zagalnogo priznachennya dopomogoyu mozhlivostej grafichnih API u arhitekturi CUDA vidznachayut nastupni perevagi v cij oblasti Interfejs programuvannya dodatkiv CUDA CUDA API zasnovanij na standartnij movi programuvannya Si z deyakimi obmezhennyami Na dumku rozrobnikiv ce povinno sprostiti i zgladiti proces vivchennya arhitekturi CUDA Kolektivna mizh potokami pam yat shared memory rozmirom v 16 Kb mozhe buti vikoristana pid organizovanij koristuvachem kesh z bilsh shirokoyu smugoyu propuskannya nizh pri vibirci zi zvichajnih tekstur Bilsh efektivni tranzakciyi mizh pam yattyu centralnogo procesora i videopam yattyu Povna aparatna pidtrimka cilochiselnih i pobitovih operacij Pidtrimka kompilyaciyi GPU kodu zasobami vidkritogo LLVM Pidtrimuvani GPU j grafichni priskoryuvachi RedaguvatiPerelik pristroyiv vid virobnika ustatkuvannya Nvidia iz zayavlenoyu povnoyu pidtrimkoyu tehnologiyi CUDA privedenij na oficijnomu sajti Nvidia CUDA Enabled GPU Products Faktichno zh v danij chas koli na rinku aparatnih zasobiv dlya PK pidtrimku tehnologiyi CUDA zabezpechuyut taki periferijni pristroyi Versiya specifikaciyi GPU Videokarta1 0 G80 G92 G92b G94 G94b GeForce 8800GTX Ultra Tesla C D S870 FX4 5600 360M GT 4201 1 G86 G84 G98 G96 G96b G94 G94b G92 G92b GeForce 8400GS GT 8600GT GTS 8800GT GTS 9400GT 9600 GSO 9600GT 9800GTX GX2 9800GT GTS 250 GT 120 30 40 FX 4 570 3 580 17 18 3700 4700x2 1xxM 32 370M 3 5 770M 16 17 27 28 36 37 3800M NVS420 501 2 GT218 GT216 GT215 GeForce 210 GT 220 40 FX380 LP 1800M 370 380M NVS 2 3100M1 3 GT200 GT200b GeForce GTX 260 GTX 275 GTX 280 GTX 285 GTX 295 Tesla C M1060 S1070 Quadro CX FX 3 4 58002 0 GF100 GF110 GeForce GF100 GTX 465 GTX 470 GTX 480 Tesla C2050 C2070 S M2050 70 Quadro Plex 7000 Quadro 4000 5000 6000 GeForce GF110 GTX 560 TI 448 GTX570 GTX580 GTX5902 1 GF104 GF114 GF116 GF108 GF106 GeForce 610M GT 430 GT 440 GT 640 GTS 450 GTX 460 GTX 550 Ti GTX 560 GTX 560 Ti 500M Quadro 600 20003 0 GK104 GK106 GK107 GeForce GTX 690 GTX 680 GTX 670 GTX 660 Ti GTX 660 GTX 650 Ti GTX 650 GeForce GTX 680MX GeForce GTX 680M GeForce GTX 675MX GeForce GTX 670MX GTX 660M GeForce GT 650M GeForce GT 645M GeForce GT 640M3 5 GK110 GK208 GeForce GTX TITAN GeForce GTX TITAN Black GeForce GTX 780 Ti GeForce GTX 780 GeForce GT 640 GDDR5 GeForce GT 630 v2 Quadro K6000 Tesla K40 Tesla K20x Tesla K205 0 GM107 GM108 GeForce GTX 750 Ti GeForce GTX 750 GeForce GTX 860M GeForce GTX 850M GeForce 840M GeForce 830MIyerarhichna model CUDA RedaguvatiKoncepciya CUDA vidvodit GPU rol masivno paralelnogo spivprocesora U literaturi pro CUDA osnovna sistema do yakoyi pidklyuchenij GPU korotko nazivayetsya terminom host host Analogichno sam GPU po vidnoshennyu do hostu chasto nazivayetsya prosto pristroyem device CUDA programa zadiyuye yak CPU tak i GPU Na CPU vikonuyetsya poslidovna chastina kodu i pidgotovchi stadiyi dlya GPU obchislen Paralelni dilyanki kodu mozhut buti pereneseni na GPU de odnochasno vikonuvatimutsya velikoyu kilkistyu nitok potokiv Vazhlivo vidznachiti ryad principovih vidminnostej mizh zvichajnimi potokami CPU i potokami GPU Potik thread GPU nadzvichajno legkij jogo kontekst minimalnij registri rozpodilenni zazdalegid Dlya efektivnogo vikoristannya resursiv GPU programi neobhidno zadiyati tisyachi okremih potokiv todi yak na bagatoyadernomu CPU maksimalna efektivnist zazvichaj dosyagayetsya pri chisli potokiv rivnomu abo v kilka raziv bilshomu kilkosti yader Robota potokiv na GPU vidpovidaye principu SIMD Prote ye suttyeva vidminnist Tilki potoki v mezhah odniyeyi grupi dlya GPU arhitekturi Fermi 32 potoki tak zvanogo varpu warp vikonuyutsya fizichno odnochasno Potoki riznih varpiv mozhut perebuvati na riznih stadiyah vikonannya programi Takij metod obrobki danih poznachayetsya terminom SIMT Single Instruction Multiple Theads Upravlinnya robotoyu varpiv vikonuyetsya na aparatnomu rivni Za deyakimi mozhlivostyami novih versij CUDA prostezhuyetsya tendenciya do postupovogo peretvorennya GPU v samodostatnij pristrij yakij povnistyu zaminyuye zvichajnij CPU za rahunok realizaciyi deyakih sistemnih viklikiv u terminologiyi GPU sistemnimi viklikami ye napriklad malloc i free realizovanih v CUDA 3 2 i dodavannya polegshenogo energoefektivnogo CPU yadra v GPU arhitektura Maxwell Vazhlivoyu perevagoyu CUDA ye vikoristannya dlya programuvannya GPU mov visokogo rivnya V danij chas koli isnuyut kompilyatori C i Fortran Ci movi rozshiryuyutsya nevelikoyu mnozhinoyu novih konstrukcij atributi funkcij i zminnih vbudovani zminni j tipi danih operator zapusku yadra Priklad CUDA programi sho vikoristovuye GPU dlya poelementnogo skladannya dvoh odnovimirnih masiviv int sum host float a float b float c int n int nb n sizeof float float aDev NULL bDev NULL cDev NULL Vidiliti pam yat na GPU cudaError t cuerr cudaMalloc void amp aDev nb if cuerr cudaSuccess fprintf stderr Cannot allocate GPU memory for aDev s n cudaGetErrorString cuerr return 1 cuerr cudaMalloc void amp bDev nb if cuerr cudaSuccess fprintf stderr Cannot allocate GPU memory for bDev s n cudaGetErrorString cuerr return 1 cuerr cudaMalloc void amp cDev nb if cuerr cudaSuccess fprintf stderr Cannot allocate GPU memory for cDev s n cudaGetErrorString cuerr return 1 Zavantazhiti konfiguraciyu zapuska n potokiv dim3 threads dim3 BL0CK SIZE 1 dim3 blocks dim3 n BLOCK SIZE 1 Skopiyuvati vhidni dani z pam yati CPU v pam yat GPU cuerr cudaMemcpy aDev a nb cudaMemcpyHostToDevice if cuerr cudaSuccess fprintf stderr Cannot copy data from a to aDev s n cudaGetErrorString cuerr return 1 cuerr cudaMemcpy bDev b nb cudaMemcpyHostToDevice if cuerr cudaSuccess fprintf stderr Cannot copy data from b to bDev s n cudaGetErrorString cuerr return 1 Viklikati yadro iz zadanoyu konfiguraciyeyu dlya obrobki danih sum kernel lt lt lt blocks threads gt gt gt aDev bDev cDev cuerr cudaGetLastError if cuerr cudaSuccess fprintf stderr Cannot launch CUDA kernel s n cudaGetErrorString cuerr return 1 Chekati zavershennya roboti yadra cuerr cudaDeviceSynchronize if cuerr cudaSuccess fprintf stderr Cannot synchronize CUDA kernel s n cudaGetErrorString cuerr return 1 Skopiyuvati rezultati v pam yat CPU cuerr cudaMemcpy s cDev nb cudaMemcpyDeviceToHost if cuerr cudaSuccess fprintf stderr Cannot copy data from cdev to c s n cudaGetErrorString cuerr return 1 Zvilniti vidilenu pam yat GPU cudaFree aDev cudaFree bDev cudaFree cDev return 0 gt Funkciya abo procedura u vipadku Fortran sum kernel ye yadrom atribut global abo global i vikonuvatimetsya na GPU po odnomu nezalezhnomu potoku dlya kozhnogo naboru elementiv a i b i i c i Zagalnim prijomom programuvannya dlya CUDA ye grupovannya bagatoh potokiv v bloki Na ce ye dvi prichini Po pershe daleko ne dlya kozhnogo paralelnogo algoritmu isnuye efektivna realizaciya na povnistyu nezalezhnih potokah rezultat odnogo potoku mozhe zalezhati vid rezultatu deyakih inshih vihidni dani potoku mozhut chastkovo zbigatisya z danimi susidnih Po druge rozmir odniyeyi vibirki danih z globalnoyi pam yati nabagato bilsha rozmiru drobovogo abo cilochiselnogo tipu tobto odna vibirka mozhe pokriti zapiti grupi z dekilkoh potokiv sho pracyuyut iz susidnimi elementami pam yati U rezultati grupuvannya potokiv vihidna zadacha rozpadayetsya na nezalezhni odna vid odnoyi pidzadachi bloki potokiv iz mozhlivistyu vzayemodiyi potokiv u mezhah odnogo bloku j ob yednannya zapitiv do pam yati v mezhah odnogo X 23 varpa ris 2 2 Rozbittya potokiv na varpi takozh vidbuvayetsya okremo dlya kozhnogo bloku Ob yednannya v bloki ye vdalim kompromisom mizh neobhidnistyu zabezpechiti vzayemodiyu potokiv mizh soboyu i mozhlivistyu zrobiti vidpovidnu aparatnu logiku efektivnoyu j deshevoyu Open64 RedaguvatiDokladnishe Open64Priznachenij dlya translyaciyi host kodu kodu kerivnoyi mashini ta device kodu aparatnogo kodu fajliv z rozshirennyam cu v ob yektni fajli pridatni v procesi zbirannya kincevoyi programi abo biblioteki v bud yakomu seredovishi programuvannya Div takozh RedaguvatiOpenCL vidkritij standart i API dlya aparatnogo priskorennya obchislennya na GPU ta inshih odnoridnih obchislyuvalnih sistemah OpenGL grafichne API sho pochinayuchi z versiyi 4 3 pidtrimuye obchislyuvalni shejderi Direct3D propriyetarne API DirectX sho pidtrimuye obchislyuvalni shejderi pochinayuchi z versiyi DirectX 10 BrookGPU odna z rannih sprob stvoriti movu programuvannya dlya zabezpechennya GPGPU Close to Metal rannij propriyetarnij nizkorivnevij API dlya obchislennya na GPU dlya grafichnih adapteriv ATI AMD Vektorizaciya GeForce Tesla V100 grafichnij priskoryuvach sho vikoristovuyetsya v navchanni nejronnih merezhDzherela RedaguvatiPosilannya RedaguvatiCUDA Zone NVIDIA Developer Arhiv originalu za 22 sichnya 2020 Procitovano 29 sichnya 2018 angl Otrimano z https uk wikipedia org w index php title CUDA amp oldid 38103403