Mapagkukunan ng kompyuter U SM. Kung saan humahantong ang cuda: praktikal na aplikasyon ng teknolohiyang gpgpu - ang pinakamahusay na kagamitan Mga aplikasyon na tumatakbo sa cuda

Sa loob ng mga dekada, ang Batas ni Moore ay may bisa, na nagsasaad na bawat dalawang taon ang bilang ng mga transistor sa isang chip ay doble. Gayunpaman, ito ay bumalik noong 1965, at sa nakalipas na 5 taon ang ideya ng mga pisikal na multi-core sa mga processor ng consumer-class ay nagsimulang mabilis na umunlad: noong 2005, ipinakilala ng Intel ang Pentium D, at ipinakilala ng AMD ang Athlon X2. Noon, ang mga application na gumagamit ng 2 core ay mabibilang sa mga daliri ng isang kamay. Gayunpaman, ang susunod na henerasyon ng mga processor ng Intel, na gumawa ng isang rebolusyon, ay may eksaktong 2 pisikal na core. Bukod dito, lumabas ang seryeng Quad noong Enero 2007, kung saan inamin mismo ni Moore na malapit nang tumigil sa paglalapat ang kanyang batas.

Ano ngayon? Dual-core processors kahit na sa budget office systems, at 4 physical cores ang naging karaniwan, at ito ay sa loob lamang ng 2-3 taon. Ang dalas ng mga processor ay hindi nadagdagan, ngunit ang arkitektura ay pinabuting, ang bilang ng mga pisikal at virtual na mga core ay nadagdagan. Gayunpaman, ang ideya ng paggamit ng mga video adapter na nilagyan ng sampu o kahit na daan-daang mga "unit" sa pag-compute ay matagal nang umiral.

At kahit na ang mga prospect para sa GPU computing ay napakalaki, ang pinakasikat na solusyon ay Nvidia CUDA, na libre, ay may maraming dokumentasyon at sa pangkalahatan ay napakadaling ipatupad, walang maraming mga application na gumagamit ng teknolohiyang ito. Karaniwan, ang mga ito ay lahat ng uri ng mga dalubhasang kalkulasyon, na hindi pinapahalagahan ng karaniwang gumagamit sa karamihan ng mga kaso. Ngunit mayroon ding mga programa na idinisenyo para sa mass user, at pag-uusapan natin ang mga ito sa artikulong ito.

Una, kaunti tungkol sa teknolohiya mismo at kung ano ang ginagamit nito. kasi Kapag nagsusulat ng isang artikulo, nakatuon ako sa isang malawak na hanay ng mga mambabasa, kaya susubukan kong ipaliwanag ito sa isang naa-access na wika nang walang kumplikadong mga termino at medyo maikli.

CUDA(Ingles: Compute Unified Device Architecture) ay isang software at hardware architecture na nagbibigay-daan sa iyong magsagawa ng mga kalkulasyon gamit ang NVIDIA graphics processors na sumusuporta sa teknolohiya ng GPGPU (random computing sa mga video card). Ang arkitektura ng CUDA ay unang lumitaw sa merkado sa paglabas ng ikawalong henerasyong NVIDIA chip - G80 at naroroon sa lahat ng kasunod na serye ng mga graphics chip na ginagamit sa mga pamilya ng GeForce, Quadro at Tesla accelerator. (c) Wikipedia.org

Ang mga papasok na stream ay pinoproseso nang hiwalay sa isa't isa, i.e. parallel.

Mayroong dibisyon sa 3 antas:

Grid- core. Naglalaman ng isa/dalawa/three-dimensional na hanay ng mga bloke.

I-block- naglalaman ng maraming mga thread. Ang mga thread ng iba't ibang mga bloke ay hindi maaaring makipag-ugnayan sa isa't isa. Bakit kailangang ipakilala ang mga bloke? Ang bawat bloke ay mahalagang responsable para sa sarili nitong subtask. Halimbawa, ang isang malaking imahe (na isang matrix) ay maaaring hatiin sa ilang mas maliliit na bahagi (matrices) at gumana sa bawat bahagi ng imahe nang magkatulad.

Thread– daloy. Ang mga thread sa loob ng isang bloke ay maaaring makipag-ugnayan alinman sa pamamagitan ng shared memory, na, sa pamamagitan ng paraan, ay mas mabilis kaysa sa pandaigdigang memorya, o sa pamamagitan ng thread synchronization tool.

Warp ay isang unyon ng mga thread na nakikipag-ugnayan sa isa't isa, para sa lahat ng modernong GPU ang laki ng Warp ay 32. Susunod ay half-warp, na kalahati ng warp, dahil Ang pag-access sa memorya ay karaniwang nangyayari nang hiwalay para sa una at ikalawang kalahati ng warp.

Tulad ng nakikita mo, ang arkitektura na ito ay mahusay para sa parallelizing na mga gawain. At kahit na ang programming ay isinasagawa sa wikang C na may ilang mga paghihigpit, sa katotohanan ay hindi lahat ay napakasimple, dahil... hindi lahat ng bagay ay pwedeng iparallelize. Wala ring mga karaniwang function para sa pagbuo ng mga random na numero (o pagsisimula); ang lahat ng ito ay kailangang ipatupad nang hiwalay. At kahit na maraming handa na mga pagpipilian, wala sa mga ito ang nagdudulot ng kagalakan. Ang kakayahang gumamit ng recursion ay lumitaw kamakailan.

Para sa kalinawan, isinulat ang isang maliit na console program (upang mabawasan ang code) na nagsasagawa ng mga operasyon na may dalawang array ng float type, i.e. na may mga non-integer na halaga. Para sa mga kadahilanang nakasaad sa itaas, ang pagsisimula (pagpuno sa array ng iba't ibang mga arbitrary na halaga) ay isinagawa ng CPU. Susunod, 25 iba't ibang mga operasyon ang isinagawa kasama ang mga kaukulang elemento mula sa bawat hanay, ang mga intermediate na resulta ay isinulat sa ikatlong hanay. Ang laki ng array ay nagbago, ang mga resulta ay ang mga sumusunod:

Isang kabuuan ng 4 na pagsubok ang isinagawa:

1024 elemento sa bawat array:

Malinaw na nakikita na sa napakaliit na bilang ng mga elemento, ang parallel computing ay hindi gaanong pakinabang, dahil Ang mga kalkulasyon mismo ay mas mabilis kaysa sa kanilang paghahanda.

4096 elemento sa bawat array:

At ngayon makikita mo na ang video card ay gumaganap ng mga operasyon sa mga array 3 beses na mas mabilis kaysa sa processor. Bukod dito, ang oras ng pagpapatupad ng pagsubok na ito sa video card ay hindi tumaas (isang bahagyang pagbaba sa oras ay maaaring maiugnay sa isang error).

Mayroon na ngayong 12288 na elemento sa bawat hanay:

Ang paghihiwalay ng video card ay tumaas ng 2 beses. Muli, nararapat na tandaan na ang oras ng pagpapatupad sa video card ay tumaas
hindi gaanong mahalaga, ngunit sa processor ng higit sa 3 beses, i.e. proporsyonal sa pagiging kumplikado ng gawain.

At ang huling pagsubok ay 36864 elemento sa bawat array:

Sa kasong ito, ang acceleration ay umabot sa mga kahanga-hangang halaga - halos 22 beses na mas mabilis sa isang video card. At muli, ang oras ng pagpapatupad sa video card ay tumaas nang bahagya, ngunit sa processor - ang kinakailangang 3 beses, na muling proporsyonal sa pagiging kumplikado ng gawain.

Kung patuloy mong gagawing kumplikado ang mga kalkulasyon, ang video card ay mananalo nang higit pa at higit pa. Kahit na ang halimbawa ay medyo pinalaki, ang pangkalahatang sitwasyon ay malinaw na nagpapakita. Ngunit tulad ng nabanggit sa itaas, hindi lahat ay maaaring parallelized. Halimbawa, ang pagkalkula ng Pi. May mga halimbawa lamang na nakasulat gamit ang pamamaraan ng Monte Carlo, ngunit ang katumpakan ng mga kalkulasyon ay 7 decimal na lugar, i.e. regular na float. Upang madagdagan ang katumpakan ng mga kalkulasyon, kinakailangan ang mahabang aritmetika, at dito lumitaw ang mga problema, dahil Ito ay napaka, napakahirap na ipatupad ito nang epektibo. Hindi ako makahanap ng mga halimbawa sa Internet na gumagamit ng CUDA at kinakalkula ang Pi sa 1 milyong decimal na lugar. Ang mga pagtatangka ay ginawa upang magsulat ng isang application, ngunit ang pinakasimpleng at pinaka mahusay na paraan para sa pagkalkula ng Pi ay ang Brent-Salamin algorithm o ang Gauss formula. Ang kilalang SuperPI na malamang (paghusga sa bilis ng operasyon at bilang ng mga pag-ulit) ay gumagamit ng Gaussian formula. At, sa paghusga sa pamamagitan ng
Dahil sa katotohanan na ang SuperPI ay single-threaded, ang kakulangan ng mga halimbawa sa ilalim ng CUDA at ang kabiguan ng aking mga pagtatangka, imposibleng epektibong maiparallelize ang pagbilang ng Pi.

Sa pamamagitan ng paraan, maaari mong mapansin kung paano tumataas ang pag-load sa GPU sa panahon ng mga kalkulasyon, at ang memorya ay inilalaan din.

Ngayon ay lumipat tayo sa mas praktikal na mga benepisyo ng CUDA, katulad ng kasalukuyang umiiral na mga programa na gumagamit ng teknolohiyang ito. Para sa karamihan, ito ay lahat ng uri ng audio/video converter at editor.

3 magkakaibang mga video file ang ginamit sa pagsubok:

      *Ang kasaysayan ng paggawa ng pelikulang Avatar - 1920x1080, MPEG4, h.264.
      *Serye na "Lie to me" - 1280x720, MPEG4, h.264.
      *Serye na "Palaging Maaraw sa Philadelphia" - 624x464, xvid.

Ang lalagyan at laki ng unang dalawang file ay .mkv at 1.55 GB, at ang huli ay .avi at 272 MB.

Magsimula tayo sa isang napakakahindik-hindik at sikat na produkto - Badaboom. Bersyon na ginamit - 1.2.1.74 . Ang halaga ng programa ay $29.90 .

Ang interface ng programa ay simple at madaling maunawaan - sa kaliwa ay pipiliin namin ang source file o disk, at sa kanan - ang kinakailangang aparato kung saan namin i-encode. Mayroon ding user mode kung saan manu-manong itinatakda ang mga parameter, na siyang ginamit namin.

Una, tingnan natin kung gaano kabilis at kahusay na na-encode ang video "sa sarili nito," i.e. parehong resolution at humigit-kumulang sa parehong laki. Susukatin namin ang bilis sa fps, at hindi sa lumipas na oras - sa paraang ito ay mas maginhawa upang ihambing at kalkulahin kung gaano karami ang isang video na may di-makatwirang haba na mai-compress. kasi Ngayon ay isinasaalang-alang namin ang teknolohiyang "berde", kung gayon ang mga graph ay magiging katumbas -)

Ang bilis ng pag-encode ay direktang nakasalalay sa kalidad, ito ay malinaw. Kapansin-pansin na ang light resolution (tawagin natin itong tradisyonal na SD) ay hindi problema para sa Badaboom - ang bilis ng pag-encode ay 5.5 beses na mas mataas kaysa sa orihinal na (24 fps) na video framerate. At kahit na mabigat na 1080p na video ay na-convert ng program sa real time. Kapansin-pansin na ang kalidad ng panghuling video ay napakalapit sa orihinal na materyal ng video, i.e. Ang Badaboom ay nag-encode nang napakahusay.

Ngunit kadalasan ay naglilipat sila ng video sa mas mababang resolution, tingnan natin kung paano ang mga bagay sa mode na ito. Habang bumababa ang resolution, bumaba rin ang bitrate ng video. Ito ay 9500 kbps para sa 1080p output file, 4100 kbps para sa 720p at 2400 kbps para sa 720x404. Ang pagpili ay ginawa batay sa isang makatwirang ratio ng laki/kalidad.

Walang mga komento na kailangan. Kung gagawa ka ng rip mula sa 720p patungo sa regular na kalidad ng SD, pagkatapos ay ang transcoding ng isang pelikula na tumatagal ng 2 oras ay aabot ng humigit-kumulang 30 minuto. At sa parehong oras, ang pag-load ng processor ay magiging hindi gaanong mahalaga, maaari mong gawin ang iyong negosyo nang hindi nakakaramdam ng kakulangan sa ginhawa.

Paano kung i-convert mo ang video sa isang format para sa isang mobile device? Upang gawin ito, piliin ang iPhone profile (bitrate 1 Mbit/s, 480x320) at tingnan ang bilis ng pag-encode:

May kailangan ba akong sabihin? Ang dalawang oras na pelikula sa normal na kalidad ng iPhone ay na-transcode nang wala pang 15 minuto. Sa kalidad ng HD ito ay mas mahirap, ngunit napakabilis pa rin. Ang pangunahing bagay ay ang kalidad ng output na video ay nananatili sa isang medyo mataas na antas kapag tiningnan sa isang display ng telepono.

Sa pangkalahatan, ang mga impression mula sa Badaboom ay positibo, ang bilis ng operasyon ay kasiya-siya, at ang interface ay simple at malinaw. Lahat ng uri ng mga bug sa mga naunang bersyon (ginamit ko ang beta noong 2008) ay naayos na. Maliban sa isang bagay - ang landas sa pinagmulang file, pati na rin sa folder kung saan nai-save ang natapos na video, ay hindi dapat maglaman ng mga titik na Ruso. Ngunit kumpara sa mga pakinabang ng programa, ang disbentaha na ito ay hindi gaanong mahalaga.

Next in line na tayo Super LoiLoScope. Para sa regular na bersyon na tinatanong nila 3,280 rubles, at para sa bersyon ng pagpindot, na sumusuporta sa kontrol ng pagpindot sa Windows 7, humihingi sila ng kasing dami 4,440 rubles. Subukan nating alamin kung bakit gusto ng developer ang ganoong uri ng pera at kung bakit kailangan ng editor ng video ang multitouch na suporta. Pinakabagong bersyon na ginamit - 1.8.3.3 .

Medyo mahirap ilarawan ang interface ng programa sa mga salita, kaya nagpasya akong gumawa ng maikling video. Sasabihin ko kaagad na, tulad ng lahat ng video converter para sa CUDA, sinusuportahan lang ang GPU acceleration para sa output ng video sa MPEG4 gamit ang h.264 codec.

Sa panahon ng pag-encode, ang pag-load ng processor ay 100%, ngunit hindi ito nagiging sanhi ng kakulangan sa ginhawa. Ang browser at iba pang magaan na application ay hindi bumabagal.

Ngayon ay lumipat tayo sa pagganap. Upang magsimula, ang lahat ay pareho sa Badaboom - transcoding ang video sa isang katulad na kalidad.

Ang mga resulta ay mas mahusay kaysa sa Badaboom. Ang kalidad ay mahusay din, ang pagkakaiba sa orihinal ay maaari lamang mapansin sa pamamagitan ng paghahambing ng mga frame sa mga pares sa ilalim ng magnifying glass.

Wow, narito, ang LoiloScope ay nalampasan ang Badaboom ng 2.5 beses. Kasabay nito, maaari mong madaling i-cut at i-encode ang isa pang video nang magkatulad, magbasa ng balita at manood ng mga pelikula, at kahit na ang FullHD ay nilalaro nang walang mga problema, kahit na ang pag-load ng processor ay maximum.

Ngayon subukan nating gumawa ng video para sa isang mobile device, tawagan natin ang profile na katulad ng pagtawag nito sa Badaboom - iPhone (480x320, 1 Mbit/s):

Walang mali. Ang lahat ay muling sinuri nang maraming beses, sa bawat oras na ang resulta ay pareho. Malamang, nangyayari ito sa simpleng dahilan na ang SD file ay naitala gamit ang ibang codec at sa ibang container. Kapag nag-transcode, ang video ay unang na-decode, nahahati sa mga matrice ng isang tiyak na laki, at naka-compress. Ang ASP decoder na ginamit sa kaso ng xvid ay mas mabagal kaysa sa AVC (para sa h.264) kapag nagde-decode nang magkatulad. Gayunpaman, ang 192 fps ay 8 beses na mas mabilis kaysa sa bilis ng orihinal na video; ang isang 23 minutong serye ay na-compress nang wala pang 4 na minuto. Naulit ang sitwasyon sa ibang mga file na na-compress sa xvid/DivX.

LoiloScope Nag-iwan lamang ako ng mga kaaya-ayang impression - ang interface, sa kabila ng hindi pangkaraniwan nito, ay maginhawa at gumagana, at ang bilis ng operasyon ay lampas sa papuri. Ang medyo mahinang pag-andar ay medyo nakakadismaya, ngunit kadalasan sa simpleng pag-install kailangan mo lamang na bahagyang ayusin ang mga kulay, gumawa ng maayos na mga transition, magdagdag ng teksto, at ang LoiloScope ay mahusay na gumagana dito. Ang presyo ay medyo nakakatakot din - higit sa $100 para sa regular na bersyon ay normal para sa mga banyagang bansa, ngunit ang mga naturang numero ay tila ligaw pa rin sa amin. Bagaman, aminado ako na kung ako, halimbawa, ay madalas na kinukunan at nag-e-edit ng mga home video, maaaring naisipan kong bilhin ito. Sa parehong oras, sa pamamagitan ng paraan, sinuri ko ang posibilidad ng pag-edit ng HD (o sa halip AVCHD) na nilalaman nang direkta mula sa isang video camera nang hindi muna nagko-convert sa ibang format; LoiloScope ay hindi nagpahayag ng anumang mga problema sa mga file tulad ng .mts.

Ang bagong teknolohiya ay parang isang bagong umusbong na evolutionary species. Isang kakaibang nilalang, hindi tulad ng maraming mga lumang-timer. Minsan awkward, minsan nakakatawa. At sa una ang kanyang mga bagong katangian ay tila hindi angkop para sa ayos at matatag na mundong ito.

Gayunpaman, lumipas ang kaunting oras, at lumalabas na ang baguhan ay tumatakbo nang mas mabilis, tumalon nang mas mataas at sa pangkalahatan ay mas malakas. At kumakain siya ng mas maraming langaw kaysa sa kanyang mga kapitbahay na nag-retrograde. At pagkatapos ay ang parehong mga kapitbahay ay nagsimulang maunawaan na walang punto sa pag-aaway sa clumsy dating na ito. Mas mahusay na makipagkaibigan sa kanya, at mas mahusay na mag-organisa ng isang symbiosis. Makikita mo na magkakaroon ng mas maraming langaw.

Ang teknolohiya ng GPGPU (General-Purpose Graphics Processing Units - general-purpose graphics processor) sa mahabang panahon ay umiral lamang sa mga teoretikal na kalkulasyon ng mga matalinong akademya. Paano pa? Upang ipanukala na radikal na baguhin ang proseso ng pag-compute na nabuo sa loob ng mga dekada sa pamamagitan ng pagtitiwala sa pagkalkula ng mga parallel na sangay nito sa isang video card - ang mga teorista lamang ang may kakayahang ito.

Ang logo ng teknolohiya ng CUDA ay nagpapaalala sa atin na ito ay lumago sa kalaliman ng
3D graphics.

Ngunit ang teknolohiya ng GPGPU ay hindi makakaipon ng alikabok nang matagal sa mga pahina ng mga journal sa unibersidad. Ang pagkakaroon ng fluffed up ang mga balahibo ng kanyang pinakamahusay na mga katangian, naakit niya ang atensyon ng mga tagagawa. Ito ay kung paano ipinanganak ang CUDA - isang pagpapatupad ng GPGPU sa mga processor ng GeForce graphics na ginawa ng nVidia.

Salamat sa CUDA, naging mainstream ang mga teknolohiya ng GPGPU. At ngayon lamang ang pinaka-maikli ang paningin at natatakpan ng isang makapal na layer ng katamaran na developer ng mga programming system ay hindi nagpahayag ng suporta para sa CUDA sa kanilang produkto. Itinuturing ng mga IT publication na isang karangalan na ipakita ang mga detalye ng teknolohiya sa maraming tanyag na artikulo sa agham, at ang mga kakumpitensya ay agad na umupo sa mga pattern at cross-compiler upang bumuo ng katulad na bagay.

Ang pagkilala sa publiko ay isang pangarap hindi lamang para sa mga naghahangad na mga starlet, kundi pati na rin para sa mga bagong silang na teknolohiya. At masuwerte si CUDA. Kilala siya, nag-uusap at nagsusulat sila tungkol sa kanya.

Nagsusulat lang sila na parang patuloy na tinatalakay ang GPGPU sa makakapal na scientific journal. Binobomba nila ang mambabasa ng isang grupo ng mga termino tulad ng "grid", "SIMD", "warp", "host", "texture at pare-pareho ang memorya". Ibinaon nila siya sa pinakatuktok sa mga diagram ng organisasyon ng mga nVidia GPU, inaakay siya sa mga paikot-ikot na landas ng mga parallel algorithm at (ang pinakamalakas na paglipat) ay nagpapakita ng mahabang listahan ng code sa wikang C. Bilang isang resulta, lumalabas na sa input ng artikulo mayroon kaming isang sariwang mambabasa na may nasusunog na pagnanais na maunawaan ang CUDA, at sa output mayroon kaming parehong mambabasa, ngunit may namamaga na ulo na puno ng gulo ng mga katotohanan, mga diagram , code, algorithm at termino.

Samantala, ang layunin ng anumang teknolohiya ay gawing mas madali ang ating buhay. At mahusay ang ginagawa ng CUDA dito. Ang mga resulta ng kanyang trabaho ay kung ano ang kumbinsihin ang sinumang may pag-aalinlangan na mas mahusay kaysa sa daan-daang mga scheme at algorithm.

Hindi sa lahat ng dako

Ang CUDA ay sinusuportahan ng mga supercomputer na may mataas na pagganap
nVidia Tesla.

Gayunpaman, bago tingnan ang mga resulta ng trabaho ng CUDA sa larangan ng pagpapadali sa buhay ng karaniwang gumagamit, ito ay nagkakahalaga ng pag-unawa sa lahat ng mga limitasyon nito. Tulad ng sa isang genie: anumang pagnanasa, ngunit isa. Ang CUDA ay mayroon ding Achilles heels. Ang isa sa mga ito ay ang mga limitasyon ng mga platform kung saan maaari itong gumana.

Ang listahan ng mga nVidia video card na sumusuporta sa CUDA ay ipinakita sa isang espesyal na listahan na tinatawag na CUDA Enabled Products. Ang listahan ay medyo kahanga-hanga, ngunit madaling uriin. Ang suporta ng CUDA ay hindi tinanggihan:

    nVidia GeForce 8th, 9th, 100th, 200th at 400th series na mga modelo na may minimum na 256 megabytes ng memorya ng video sa board. Ang suporta ay umaabot sa parehong desktop at mobile card.

    Ang karamihan sa mga desktop at mobile video card ay nVidia Quadro.

    Lahat ng mga solusyon mula sa nvidia ION netbook series.

    Ang mga high-performance na HPC (High Performance Computing) at nVidia Tesla supercomputer solution ay ginagamit para sa personal na computing at para sa pag-aayos ng mga scalable cluster system.

Samakatuwid, bago gamitin ang mga produkto ng software na nakabatay sa CUDA, sulit na suriin ang listahang ito ng mga paborito.

Bilang karagdagan sa mismong video card, kinakailangan ang isang naaangkop na driver upang suportahan ang CUDA. Ito ang link sa pagitan ng central at graphics processor, na kumikilos bilang isang uri ng software interface para sa pag-access ng program code at data sa multi-core treasure trove ng GPU. Upang matiyak na hindi ka magkakamali, inirerekomenda ng nVidia na bisitahin ang pahina ng mga driver at kunin ang pinakabagong bersyon.

...ngunit ang proseso mismo

Paano gumagana ang CUDA? Paano ipaliwanag ang kumplikadong proseso ng parallel computing sa isang espesyal na arkitektura ng hardware ng GPU nang hindi inilalagay ang mambabasa sa kailaliman ng mga tiyak na termino?

Maaari mong subukang gawin ito sa pamamagitan ng pag-iisip kung paano isinasagawa ng gitnang processor ang programa sa symbiosis kasama ang graphics processor.

Sa arkitektura, ang central processing unit (CPU) at ang graphics counterpart (GPU) nito ay naiiba ang disenyo. Kung gumuhit tayo ng isang pagkakatulad sa mundo ng industriya ng automotive, kung gayon ang CPU ay isang station wagon, isa sa mga tinatawag na "barn". Mukhang isang pampasaherong kotse, ngunit sa parehong oras (mula sa punto ng view ng mga developer) "ito ay isang Swiss, isang reaper, at isang player sa pipe." Gumaganap ng papel ng isang maliit na trak, bus at hypertrophied hatchback sa parehong oras. Station wagon, sa madaling salita. Mayroon itong kaunting mga cylinder core, ngunit pinangangasiwaan nila ang halos anumang gawain, at ang kahanga-hangang memorya ng cache ay may kakayahang mag-imbak ng isang bungkos ng data.

Ngunit ang GPU ay isang sports car. Mayroon lamang isang function: upang maihatid ang piloto sa linya ng pagtatapos sa lalong madaling panahon. Samakatuwid, walang malaking trunk memory, walang dagdag na upuan. Ngunit may daan-daang beses na mas maraming cylinder core kaysa sa CPU.

Salamat sa CUDA, ang mga developer ng programa ng GPGPU ay hindi kailangang suriin ang mga kumplikado ng programming
pag-unlad para sa mga graphics engine tulad ng DirectX at OpenGL

Hindi tulad ng gitnang processor, na may kakayahang lutasin ang anumang gawain, kabilang ang mga graphics, ngunit may average na pagganap, ang graphics processor ay iniangkop sa isang mataas na bilis na solusyon ng isang gawain: ginagawang isang grupo ng mga polygon sa input sa isang bungkos ng mga pixel sa ang output. Bukod dito, ang problemang ito ay maaaring malutas nang magkatulad gamit ang daan-daang medyo simpleng computing core sa GPU.

Kaya anong uri ng tandem ang maaaring mula sa isang station wagon at isang sports car? Ang CUDA ay gumagana ng isang bagay tulad nito: ang programa ay tumatakbo sa CPU hanggang sa mayroong isang seksyon ng code na maaaring isagawa nang magkatulad. Pagkatapos, sa halip na dahan-dahan itong isagawa sa dalawa (o kahit walong) core ng pinakaastig na CPU, inililipat ito sa daan-daang mga GPU core. Kasabay nito, ang oras ng pagpapatupad ng seksyong ito ay makabuluhang nabawasan, na nangangahulugang ang oras ng pagpapatupad ng buong programa ay nabawasan din.

Sa teknolohiya, walang nagbabago para sa programmer. Ang code ng mga programa ng CUDA ay nakasulat sa wikang C. Mas tiyak, sa espesyal na diyalekto nito na "C na may mga batis" (C na may mga batis). Binuo sa Stanford, ang extension na ito ng wikang C ay tinatawag na Brook. Ang interface na naglilipat ng Brook code sa GPU ay ang driver ng isang video card na sumusuporta sa CUDA. Inaayos nito ang buong proseso ng pagproseso ng seksyong ito ng programa upang para sa programmer ang GPU ay mukhang isang CPU coprocessor. Katulad ng paggamit ng isang math coprocessor sa mga unang araw ng personal na computing. Sa pagdating ng Brook, mga video card na may suporta sa CUDA at mga driver para sa kanila, ang sinumang programmer ay na-access ang GPU sa kanilang mga programa. Ngunit bago ang shamanism na ito ay pagmamay-ari ng isang makitid na bilog ng mga piling tao na gumugol ng maraming taon sa pag-honing ng mga diskarte sa programming para sa DirectX o OpenGL graphics engine.

Sa bariles ng mapagpanggap na pulot na ito - mga papuri ng CUDA - sulit na maglagay ng langaw sa pamahid, iyon ay, mga paghihigpit. Hindi lahat ng problema na kailangang i-program ay maaaring malutas gamit ang CUDA. Hindi posible na pabilisin ang solusyon ng mga nakagawiang gawain sa opisina, ngunit mapagkakatiwalaan mo ang CUDA na kalkulahin ang pag-uugali ng libu-libong kaparehong uri ng mga manlalaban sa World of Warcraft. Ngunit ito ay isang gawa-gawa na gawain. Tingnan natin ang mga halimbawa ng kung ano ang nalutas na ng CUDA nang napakabisa.

Mga matuwid na gawa

Ang CUDA ay isang napaka-prakmatikong teknolohiya. Nang maipatupad ang suporta nito sa mga video card nito, tama ang inaasahan ng nVidia na ang CUDA banner ay kukunin ng maraming mahilig sa kapaligiran ng unibersidad at sa komersyo. At nangyari nga. Ang mga proyektong nakabase sa CUDA ay nabubuhay at nagdudulot ng mga benepisyo.

NVIDIA PhysX

Kapag nag-a-advertise ng kanilang susunod na obra maestra sa paglalaro, madalas na binibigyang-diin ng mga tagagawa ang pagiging totoo nito sa 3D. Ngunit gaano man katotoo ang mundo ng 3D na laro, kung ang mga elementarya na batas ng pisika, gaya ng gravity, friction, at hydrodynamics, ay ipinatupad nang hindi tama, ang kasinungalingan ay agad na mararamdaman.

Ang isa sa mga kakayahan ng NVIDIA PhysX physics engine ay makatotohanang trabaho sa mga tisyu.

Ang pagpapatupad ng mga algorithm para sa computer simulation ng mga pangunahing pisikal na batas ay isang napakahirap na gawain. Ang pinakasikat na kumpanya sa larangang ito ay ang kumpanyang Irish na Havok kasama ang kanyang cross-platform na pisikal na Havok Physics at ang Californian Ageia - ang ninuno ng unang pisikal na processor sa mundo (PPU - Physics Processing Unit) at ang kaukulang PhysX physics engine. Ang una sa kanila, kahit na nakuha ng Intel, ngayon ay aktibong nagtatrabaho sa larangan ng pag-optimize ng Havok engine para sa mga ATI video card at AMD processors. Ngunit ang Ageia kasama ang PhysX engine nito ay naging bahagi ng nVidia. Kasabay nito, nalutas ng nVidia ang medyo mahirap na problema ng pag-angkop ng PhysX sa teknolohiya ng CUDA.

Naging posible ito salamat sa mga istatistika. Napatunayan na sa istatistika na gaano man kahirap ang pag-render ng isang GPU, idle pa rin ang ilan sa mga core nito. Nasa mga core na ito na tumatakbo ang PhysX engine.

Salamat sa CUDA, ang malaking bahagi ng mga kalkulasyon na nauugnay sa pisika ng mundo ng laro ay nagsimulang isagawa sa video card. Ang pinalaya na kapangyarihan ng gitnang processor ay ginamit upang malutas ang iba pang mga problema sa gameplay. Hindi nagtagal dumating ang resulta. Ayon sa mga eksperto, ang performance gain sa gameplay na may PhysX na tumatakbo sa CUDA ay tumaas ng hindi bababa sa isang order ng magnitude. Ang posibilidad ng pagsasakatuparan ng mga pisikal na batas ay tumaas din. Pinangangalagaan ng CUDA ang nakagawiang pagkalkula ng pagpapatupad ng friction, gravity at iba pang bagay na pamilyar sa amin para sa mga multidimensional na bagay. Ngayon, hindi lamang ang mga bayani at ang kanilang mga kagamitan ang akmang-akma sa mga batas ng pisikal na mundo na pamilyar sa atin, kundi pati na rin ang alikabok, fog, blast wave, apoy at tubig.

CUDA na bersyon ng NVIDIA Texture Tools 2 texture compression package

Gusto mo ba ng mga makatotohanang bagay sa mga modernong laro? Ito ay nagkakahalaga ng pagsasabi ng salamat sa mga developer ng texture. Ngunit mas maraming katotohanan ang nasa texture, mas malaki ang volume nito. Lalong kumukuha ito ng mahalagang alaala. Upang maiwasan ito, ang mga texture ay na-pre-compress at dynamic na na-decompress kung kinakailangan. At ang compression at decompression ay purong kalkulasyon. Upang gumana sa mga texture, inilabas ng nVidia ang pakete ng NVIDIA Texture Tools. Sinusuportahan nito ang mahusay na compression at decompression ng DirectX texture (ang tinatawag na HF format). Ipinagmamalaki ng pangalawang bersyon ng package na ito ang suporta para sa mga algorithm ng compression ng BC4 at BC5 na ipinatupad sa teknolohiya ng DirectX 11. Ngunit ang pangunahing bagay ay ang NVIDIA Texture Tools 2 ay may kasamang suporta sa CUDA. Ayon sa nVidia, nagbibigay ito ng 12-tiklop na pagtaas sa pagganap sa mga gawain sa texture compression at decompression. Nangangahulugan ito na ang mga gameplay frame ay maglo-load nang mas mabilis at magpapasaya sa player sa kanilang pagiging totoo.

Ang NVIDIA Texture Tools 2 package ay idinisenyo upang gumana sa CUDA. Kitang-kita ang performance gain kapag nag-compress at nagde-decompress ng mga texture.

Ang paggamit ng CUDA ay maaaring makabuluhang mapabuti ang kahusayan ng video surveillance.

Real-time na pagproseso ng video stream

Anuman ang maaaring sabihin, ang kasalukuyang mundo, mula sa punto ng view ng espiya, ay mas malapit sa mundo ng Big Brother ni Orwell kaysa sa tila. Parehong nararamdaman ng mga driver ng kotse at mga bisita sa mga pampublikong lugar ang titig ng mga video camera.

Ang mga umaagos na ilog ng impormasyon ng video ay dumadaloy sa mga sentro ng pagproseso nito at... tumakbo sa isang makitid na link - isang tao. Sa karamihan ng mga kaso, siya ang huling awtoridad na sumusubaybay sa mundo ng video. Bukod dito, ang awtoridad ay hindi ang pinaka-epektibo. Kumurap-kurap, nadidistract at sinusubukang makatulog.

Salamat sa CUDA, naging posible na ipatupad ang mga algorithm para sa sabay-sabay na pagsubaybay sa maraming bagay sa isang video stream. Sa kasong ito, ang proseso ay nangyayari sa real time, at ang video ay puno ng 30 fps. Kung ikukumpara sa pagpapatupad ng naturang algorithm sa mga modernong multi-core na CPU, ang CUDA ay nagbibigay ng dalawa o tatlong beses na pagtaas sa pagganap, at ito, makikita mo, ay napakarami.

Pag-convert ng video, pag-filter ng audio

Ang Badaboom video converter ang unang gumamit ng CUDA para pabilisin ang conversion.

Masarap manood ng bagong produkto sa pagrenta ng video sa kalidad ng FullHD at sa malaking screen. Ngunit hindi ka maaaring kumuha ng isang malaking screen kasama mo sa kalsada, at ang FullHD video codec ay hiccup sa mababang-power na processor ng isang mobile gadget. Ang pagbabalik-loob ay sumagip. Ngunit karamihan sa mga nakatagpo nito sa pagsasanay ay nagreklamo tungkol sa mahabang panahon ng conversion. Ito ay naiintindihan, ang proseso ay nakagawian, angkop para sa parallelization, at ang pagpapatupad nito sa CPU ay hindi masyadong optimal.

Ngunit ang CUDA ay nakayanan ito ng isang putok. Ang unang sign ay ang Badaboom converter mula sa Elevental. Ang mga developer ng Badaboom ay gumawa ng tamang desisyon kapag pumipili ng CUDA. Ipinapakita ng mga pagsubok na kino-convert nito ang karaniwang oras at kalahating pelikula sa iPhone/iPod Touch na format sa wala pang dalawampung minuto. At ito sa kabila ng katotohanan na kapag gumagamit lamang ng CPU, ang prosesong ito ay tumatagal ng higit sa isang oras.

Tumutulong sa CUDA at mga propesyonal na mahilig sa musika. Ang sinuman sa kanila ay magbibigay ng kalahating kaharian para sa isang epektibong FIR crossover - isang hanay ng mga filter na naghahati sa sound spectrum sa ilang mga banda. Ang prosesong ito ay napakahirap sa paggawa at, na may malaking volume ng audio material, pinipilit ang sound engineer na "usok" sa loob ng ilang oras. Ang pagpapatupad ng CUDA-based na FIR crossover ay nagpapabilis ng operasyon nito nang daan-daang beses.

Kinabukasan ng CUDA

Dahil ginawang realidad ang teknolohiya ng GPGPU, hindi nagpapahinga ang CUDA sa mga tagumpay nito. Tulad ng nangyayari sa lahat ng dako, gumagana ang prinsipyo ng pagmuni-muni sa CUDA: ngayon hindi lamang ang arkitektura ng mga video processor ng nVidia ang nakakaimpluwensya sa pagbuo ng mga bersyon ng CUDA SDK, ngunit ang teknolohiya ng CUDA mismo ay pinipilit ang nVidia na muling isaalang-alang ang arkitektura ng mga chips nito. Ang isang halimbawa ng naturang pagmuni-muni ay ang nVidia ION platform. Ang pangalawang bersyon nito ay espesyal na na-optimize para sa paglutas ng mga problema sa CUDA. Nangangahulugan ito na kahit na sa medyo murang mga solusyon sa hardware, matatanggap ng mga mamimili ang lahat ng kapangyarihan at makikinang na kakayahan ng CUDA.

At ito ay idinisenyo upang i-translate ang host code (pangunahing, control code) at device code (hardware code) (mga file na may extension na .cu) sa mga object file na angkop para sa proseso ng pag-assemble ng final program o library sa anumang programming environment, halimbawa. sa NetBeans.

Gumagamit ang arkitektura ng CUDA ng grid memory model, cluster thread modeling, at mga tagubilin sa SIMD. Naaangkop hindi lamang para sa high-performance graphics computing, kundi pati na rin para sa iba't ibang scientific computing gamit ang nVidia video card. Malawakang ginagamit ng mga siyentipiko at mananaliksik ang CUDA sa iba't ibang larangan, kabilang ang astrophysics, computational biology at chemistry, fluid dynamics modelling, electromagnetic interaction, computed tomography, seismic analysis, at higit pa. Ang CUDA ay may kakayahang kumonekta sa mga application gamit ang OpenGL at Direct3D. Ang CUDA ay cross-platform software para sa mga operating system gaya ng Linux, Mac OS X at Windows.

Noong Marso 22, 2010, inilabas ng nVidia ang CUDA Toolkit 3.0, na naglalaman ng suporta para sa OpenCL.

Kagamitan

Ang platform ng CUDA ay unang lumitaw sa merkado sa paglabas ng ikawalong henerasyong NVIDIA G80 chip at naging naroroon sa lahat ng kasunod na serye ng mga graphics chip, na ginagamit sa mga pamilya ng GeForce, Quadro at NVidia Tesla accelerator.

Ang unang serye ng hardware na sumusuporta sa CUDA SDK, ang G8x, ay may 32-bit single-precision vector processor gamit ang CUDA SDK bilang isang API (sinusuportahan ng CUDA ang C double type, ngunit ang katumpakan nito ay nabawasan na ngayon sa 32-bit lumulutang na punto). Mamaya GT200 processors ay may suporta para sa 64-bit precision (SFU lamang), ngunit ang pagganap ay makabuluhang mas masahol pa kaysa sa 32-bit precision (dahil sa ang katunayan na mayroon lamang dalawang SFUs bawat stream multiprocessor, habang may walong scalar processor). Ang GPU ay nag-aayos ng hardware multithreading, na nagbibigay-daan sa iyong gamitin ang lahat ng mga mapagkukunan ng GPU. Kaya, ang prospect ay bubukas upang ilipat ang mga function ng pisikal na accelerator sa graphics accelerator (isang halimbawa ng pagpapatupad ay nVidia PhysX). Nagbubukas din ito ng malawak na posibilidad para sa paggamit ng computer graphics hardware upang magsagawa ng mga kumplikadong di-graphical na kalkulasyon: halimbawa, sa computational biology at iba pang sangay ng agham.

Mga kalamangan

Kung ikukumpara sa tradisyunal na diskarte sa pag-aayos ng general-purpose computing sa pamamagitan ng mga graphics API, ang arkitektura ng CUDA ay may mga sumusunod na pakinabang sa lugar na ito:

Mga paghihigpit

  • Ang lahat ng mga function na maipapatupad sa device ay hindi sumusuporta sa recursion (CUDA Toolkit 3.1 ay sumusuporta sa mga pointer at recursion) at may ilang iba pang mga limitasyon

Mga sinusuportahang GPU at graphics accelerators

Ang listahan ng mga device mula sa tagagawa ng kagamitan na Nvidia na may ipinahayag na buong suporta para sa teknolohiya ng CUDA ay ibinibigay sa opisyal na website ng Nvidia: Mga Produktong GPU na Pinagana ng CUDA (Ingles).

Sa katunayan, ang mga sumusunod na peripheral ay kasalukuyang sumusuporta sa teknolohiya ng CUDA sa merkado ng PC hardware:

bersyon ng pagtutukoy GPU Mga video card
1.0 G80, G92, G92b, G94, G94b GeForce 8800GTX/Ultra, 9400GT, 9600GT, 9800GT, Tesla C/D/S870, FX4/5600, 360M, GT 420
1.1 G86, G84, G98, G96, G96b, G94, G94b, G92, G92b GeForce 8400GS/GT, 8600GT/GTS, 8800GT/GTS, 9600 GSO, 9800GTX/GX2, GTS 250, GT 120/30/40, FX 4/570, 3/580, 17/580, 3700x, 3700x, 370x18 /370M, 3/5/770M, 16/17/27/28/36/37/3800M, NVS420/50
1.2 GT218, GT216, GT215 GeForce 210, GT 220/40, FX380 LP, 1800M, 370/380M, NVS 2/3100M
1.3 GT200, GT200b GeForce GTX 260, GTX 275, GTX 280, GTX 285, GTX 295, Tesla C/M1060, S1070, Quadro CX, FX 3/4/5800
2.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 40, GTX5, GTX5
2.1 GF104, GF114, GF116, GF108, GF106 GeForce 610M, GT 430, GT 440, GTS 450, GTX 460, GTX 550 Ti, GTX 560, GTX 560 Ti, 500M, Quadro 600, 2000
3.0 GK104, GK106, GK107 GeForce GTX 690, GTX 680, GTX 670, GTX 660 Ti, GTX 660, GTX 650 Ti, GTX 650, GT 640, GeForce GTX 680MX, GeForce GTX 680M, GeForce GTX 675MX, GeForce GTX 670MX, GTX 660M, GeForce GT 650M GeForce GT 645M, GeForce GT 640M
3.5 GK110
Nvidia GeForce para sa mga desktop computer
GeForce GTX 590
GeForce GTX 580
GeForce GTX 570
GeForce GTX 560 Ti
GeForce GTX 560
GeForce GTX 550 Ti
GeForce GTX 520
GeForce GTX 480
GeForce GTX 470
GeForce GTX 465
GeForce GTX 460
GeForce GTS 450
GeForce GTX 295
GeForce GTX 285
GeForce GTX 280
GeForce GTX 275
GeForce GTX 260
GeForce GTS 250
GeForce GT 240
GeForce GT 220
GeForce 210
GeForce GTS 150
GeForce GT 130
GeForce GT 120
GeForce G100
GeForce 9800 GX2
GeForce 9800 GTX+
GeForce 9800 GTX
GeForce 9800 GT
GeForce 9600 GSO
GeForce 9600 GT
GeForce 9500 GT
GeForce 9400 GT
GeForce 9400 mGPU
GeForce 9300 mGPU
GeForce 8800 GTS 512
GeForce 8800 GT
GeForce 8600 GTS
GeForce 8600 GT
GeForce 8500 GT
GeForce 8400GS
Nvidia GeForce para sa mga mobile na computer
GeForce GTX 580M
GeForce GTX 570M
GeForce GTX 560M
GeForce GT 555M
GeForce GT 540M
GeForce GT 525M
GeForce GT 520M
GeForce GTX 485M
GeForce GTX 480M
GeForce GTX 470M
GeForce GTX 460M
GeForce GT 445M
GeForce GT 435M
GeForce GT 425M
GeForce GT 420M
GeForce GT 415M
GeForce GTX 285M
GeForce GTX 280M
GeForce GTX 260M
GeForce GTS 360M
GeForce GTS 350M
GeForce GTS 160M
GeForce GTS 150M
GeForce GT 335M
GeForce GT 330M
GeForce GT 325M
GeForce GT 240M
GeForce GT 130M
GeForce G210M
GeForce G110M
GeForce G105M
GeForce 310M
GeForce 305M
GeForce 9800M GTX
GeForce 9800M GT
GeForce 9800M GTS
GeForce 9700M GTS
GeForce 9700M GT
GeForce 9650MGS
GeForce 9600M GT
GeForce 9600MGS
GeForce 9500MGS
GeForce 9500M G
GeForce 9300MGS
GeForce 9300M G
GeForce 9200MGS
GeForce 9100M G
GeForce 8800M GTS
GeForce 8700M GT
GeForce 8600M GT
GeForce 8600MGS
GeForce 8400M GT
GeForce 8400MGS
Nvidia Tesla *
Tesla C2050/C2070
Tesla M2050/M2070/M2090
Tesla S2050
Tesla S1070
Tesla M1060
Tesla C1060
Tesla C870
Tesla D870
Tesla S870
Nvidia Quadro para sa mga desktop computer
Quadro 6000
Quadro 5000
Quadro 4000
Quadro 2000
Quadro 600
Quadro FX 5800
Quadro FX 5600
Quadro FX 4800
Quadro FX 4700 X2
Quadro FX 4600
Quadro FX 3700
Quadro FX 1700
Quadro FX 570
Quadro FX 470
Quadro FX 380 Mababang Profile
Quadro FX 370
Quadro FX 370 Mababang Profile
Quadro CX
Quadro NVS 450
Quadro NVS 420
Quadro NVS 290
Quadro Plex 2100 D4
Quadro Plex 2200 D2
Quadro Plex 2100 S4
Quadro Plex 1000 Modelo IV
Nvidia Quadro para sa mobile computing
Quadro 5010M
Quadro 5000M
Quadro 4000M
Quadro 3000M
Quadro 2000M
Quadro 1000M
Quadro FX 3800M
Quadro FX 3700M
Quadro FX 3600M
Quadro FX 2800M
Quadro FX 2700M
Quadro FX 1800M
Quadro FX 1700M
Quadro FX 1600M
Quadro FX 880M
Quadro FX 770M
Quadro FX 570M
Quadro FX 380M
Quadro FX 370M
Quadro FX 360M
Quadro NVS 5100M
Quadro NVS 4200M
Quadro NVS 3100M
Quadro NVS 2100M
Quadro NVS 320M
Quadro NVS 160M
Quadro NVS 150M
Quadro NVS 140M
Quadro NVS 135M
Quadro NVS 130M
  • Ang mga modelong Tesla C1060, Tesla S1070, Tesla C2050/C2070, Tesla M2050/M2070, Tesla S2050 ay nagbibigay-daan sa mga kalkulasyon ng GPU na may dobleng katumpakan.

Mga Tampok at Pagtutukoy ng Iba't ibang Bersyon

Suporta sa tampok (hindi nakalistang mga tampok ay
suportado para sa lahat ng kakayahan sa pag-compute)
Kakayahang mag-compute (bersyon)
1.0 1.1 1.2 1.3 2.x

32-bit na mga salita sa pandaigdigang memorya
Hindi Oo

mga halaga ng lumulutang na punto sa pandaigdigang memorya
Integer atomic function na gumagana sa
32-bit na mga salita sa nakabahaging memorya
Hindi Oo
atomicExch() na gumagana sa 32-bit
mga halaga ng lumulutang na punto sa nakabahaging memorya
Integer atomic function na gumagana sa
64-bit na mga salita sa pandaigdigang memorya
Warp vote functions
Double-precision floating-point na mga operasyon Hindi Oo
Atomic function na gumagana sa 64-bit
mga halaga ng integer sa nakabahaging memorya
Hindi Oo
Floating-point atomic na karagdagan na tumatakbo sa
32-bit na mga salita sa global at shared memory
_balota()
_threadfence_system()
_syncthreads_count(),
_syncthreads_and(),
_syncthreads_or()
Mga function sa ibabaw
3D grid ng thread block
Teknikal na mga detalye Kakayahang mag-compute (bersyon)
1.0 1.1 1.2 1.3 2.x
Pinakamataas na dimensyon ng grid ng mga bloke ng thread 2 3
Maximum na x-, y-, o z-dimension ng isang grid ng mga thread block 65535
Pinakamataas na dimensyon ng thread block 3
Pinakamataas na x- o y-dimensyon ng isang bloke 512 1024
Maximum z-dimension ng isang block 64
Pinakamataas na bilang ng mga thread bawat bloke 512 1024
Laki ng warp 32
Pinakamataas na bilang ng mga resident block bawat multiprocessor 8
Pinakamataas na bilang ng mga resident warps bawat multiprocessor 24 32 48
Maximum na bilang ng mga resident thread sa bawat multiprocessor 768 1024 1536
Bilang ng mga 32-bit na rehistro sa bawat multiprocessor 8K 16 K 32 K
Pinakamataas na halaga ng nakabahaging memorya sa bawat multiprocessor 16 KB 48 KB
Bilang ng mga nakabahaging memory bank 16 32
Dami ng lokal na memorya sa bawat thread 16 KB 512 KB
Patuloy na laki ng memorya 64 KB
Cache working set sa bawat multiprocessor para sa patuloy na memorya 8 KB
Cache working set sa bawat multiprocessor para sa texture memory Nakadepende sa device, sa pagitan ng 6 KB at 8 KB
Pinakamataas na lapad para sa 1D na texture
8192 32768
Pinakamataas na lapad para sa 1D na texture
reference na nakatali sa linear memory
2 27
Pinakamataas na lapad at bilang ng mga layer
para sa isang 1D layered texture reference
8192 x 512 16384 x 2048
Pinakamataas na lapad at taas para sa 2D
nakatali sa texture reference
linear memory o isang CUDA array
65536 x 32768 65536 x 65535
Pinakamataas na lapad, taas, at numero
ng mga layer para sa isang 2D layered texture reference
8192 x 8192 x 512 16384 x 16384 x 2048
Pinakamataas na lapad, taas at lalim
para sa isang 3D texture reference na nakatali sa linear
memorya o isang CUDA array
2048 x 2048 x 2048
Maximum na bilang ng mga texture na
maaaring itali sa isang kernel
128
Pinakamataas na lapad para sa isang 1D na ibabaw
reference na nakatali sa isang CUDA array
Hindi
suportado
8192
Pinakamataas na lapad at taas para sa isang 2D
surface reference na nakatali sa isang CUDA array
8192 x 8192
Pinakamataas na bilang ng mga ibabaw na iyon
maaaring itali sa isang kernel
8
Pinakamataas na bilang ng mga tagubilin sa bawat
kernel
2 milyon

Halimbawa

CudaArray* cu_array; texture< float , 2 >tex; // Ilaan ang array cudaMalloc( & cu_array, cudaCreateChannelDesc< float>(), lapad, taas); // Copy image data to array cudaMemcpy( cu_array, image, width* height, cudaMemcpyHostToDevice) ; // Itali ang array sa texture cudaBindTexture( tex, cu_array) ; // Run kernel dim3 blockDim(16, 16, 1) ; dim3 gridDim(lapad / blockDim.x, taas / blockDim.y, 1) ; kernel<<< gridDim, blockDim, 0 >>> (d_odata, lapad, taas); cudaUnbindTexture(tex) ; __global__ void kernel(float * odata, int height, int width) ( unsigned int x = blockIdx.x * blockDim.x + threadIdx.x ; unsigned int y = blockIdx.y * blockDim.y + threadIdx.y ; float c = texfetch(tex, x, y); odata[ y* width+ x] = c; )

Mag-import ng pycuda.driver bilang drv import numpy drv.init() dev = drv.Device(0) ctx = dev.make_context() mod = drv.SourceModule( """ __global__ void multiply_them(float *dest, float *a, float *b) ( const int i = threadIdx.x; dest[i] = a[i] * b[i]; ) """) multiply_them = mod.get_function ("multiply_them") a = numpy.random .randn (400 ) .astype (numpy.float32 ) b = numpy.random .randn (400 ) .astype (numpy.float32 ) dest = numpy.zeros_like (a) multiply_them( drv.Out (dest) , drv.In (a) , drv.In (b) , block= (400 , 1 , 1 ) ) print dest-a*b

CUDA bilang asignatura sa mga unibersidad

Noong Disyembre 2009, ang modelo ng software ng CUDA ay itinuro sa 269 na unibersidad sa buong mundo. Sa Russia, ang mga kurso sa pagsasanay sa CUDA ay ibinibigay sa St. Petersburg Polytechnic University, Yaroslavl State University. P. G. Demidov, Moscow, Nizhny Novgorod, St. Petersburg, Tver, Kazan, Novosibirsk, Novosibirsk State Technical University, Omsk at Perm State Universities, International University of the Nature of Society and Man "Dubna", Ivanovo State Energy University, Belgorod State University , MSTU sila. Bauman, Russian Chemical Technical University na pinangalanan. Mendeleev, Interregional Supercomputer Center RAS, . Bilang karagdagan, noong Disyembre 2009, inihayag na ang unang sentrong pang-agham at pang-edukasyon ng Russia na "Parallel Computing", na matatagpuan sa lungsod ng Dubna, ay nagsimulang gumana, na ang mga gawain ay kinabibilangan ng pagsasanay at mga konsultasyon sa paglutas ng mga kumplikadong problema sa computing sa mga GPU.

Sa Ukraine, ang mga kurso sa CUDA ay itinuro sa Kiev Institute of System Analysis.

Mga link

Opisyal na mapagkukunan

  • CUDA Zone (Russian) - opisyal na website ng CUDA
  • CUDA GPU Computing (English) - mga opisyal na web forum na nakatuon sa CUDA computing

Hindi opisyal na mapagkukunan

Hardware ni Tom
  • Dmitry Chekanov. nVidia CUDA: pag-compute sa isang video card o pagkamatay ng CPU? . Tom's Hardware (Hunyo 22, 2008). Na-archive
  • Dmitry Chekanov. nVidia CUDA: Pag-benchmark ng Mga Aplikasyon ng GPU para sa Mass Market. Tom's Hardware (Mayo 19, 2009) Na-archive mula sa orihinal noong Marso 4, 2012. Hinango noong Mayo 19, 2009.
iXBT.com
  • Alexey Berillo. NVIDIA CUDA - hindi graphical na computing sa mga GPU. Bahagi 1. iXBT.com (Setyembre 23, 2008). Na-archive mula sa orihinal noong Marso 4, 2012. Hinango noong Enero 20, 2009.
  • Alexey Berillo. NVIDIA CUDA - hindi graphical na computing sa mga GPU. Bahagi 2. iXBT.com (Oktubre 22, 2008). - Mga halimbawa ng pagpapatupad ng NVIDIA CUDA. Na-archive mula sa orihinal noong Marso 4, 2012. Hinango noong Enero 20, 2009.
Iba pang mga mapagkukunan
  • Boreskov Alexey Viktorovich. Mga Pangunahing Kaalaman sa CUDA (Enero 20, 2009). Na-archive mula sa orihinal noong Marso 4, 2012. Hinango noong Enero 20, 2009.
  • Vladimir Frolov. Panimula sa teknolohiya ng CUDA. Online na magazine na “Computer Graphics and Multimedia” (Disyembre 19, 2008). Na-archive mula sa orihinal noong Marso 4, 2012. Hinango noong Oktubre 28, 2009.
  • Igor Oskolkov. Ang NVIDIA CUDA ay isang abot-kayang tiket sa mundo ng malaking computing. Computerra (Abril 30, 2009). Hinango noong Mayo 3, 2009.
  • Vladimir Frolov. Panimula sa CUDA Technology (Agosto 1, 2009). Na-archive mula sa orihinal noong Marso 4, 2012. Hinango noong Abril 3, 2010.
  • GPGPU.ru. Paggamit ng mga video card para sa pag-compute
  • . Parallel Computing Center

Mga Tala

Tingnan din

Sa pag-unlad ng mga modernong processor, mayroong isang ugali patungo sa isang unti-unting pagtaas sa bilang ng mga core, na nagpapataas ng kanilang mga kakayahan sa parallel computing. Gayunpaman, matagal nang magagamit ang mga GPU na higit na nakahihigit sa mga CPU sa bagay na ito. At ang mga kakayahang ito ng mga GPU ay isinasaalang-alang na ng ilang kumpanya. Ang mga unang pagtatangka na gumamit ng mga graphics accelerator para sa hindi target na computing ay ginawa mula noong huling bahagi ng 90s. Ngunit ang paglitaw lamang ng mga shader ang naging impetus para sa pagbuo ng isang ganap na bagong teknolohiya, at noong 2003 lumitaw ang konsepto ng GPGPU (General-purpose graphics processing units). Ang isang mahalagang papel sa pagbuo ng inisyatiba na ito ay ginampanan ng BrookGPU, na isang espesyal na extension para sa wikang C. Bago ang pagdating ng BrookGPU, ang mga programmer ay maaaring gumana sa mga GPU lamang sa pamamagitan ng Direct3D o OpenGL API. Pinayagan ni Brook ang mga developer na magtrabaho sa isang pamilyar na kapaligiran, at ang compiler mismo, gamit ang mga espesyal na aklatan, ay nagpatupad ng pakikipag-ugnayan sa GPU sa mababang antas.

Ang ganitong pag-unlad ay hindi maaaring makatulong ngunit maakit ang atensyon ng mga pinuno ng industriyang ito - AMD at NVIDIA, na nagsimulang bumuo ng kanilang sariling mga platform ng software para sa hindi graphical na computing sa kanilang mga video card. Walang mas nakakaalam kaysa sa mga developer ng GPU ng lahat ng mga nuances at feature ng kanilang mga produkto, na nagbibigay-daan sa mga parehong kumpanyang ito na i-optimize ang software package para sa mga partikular na solusyon sa hardware nang mahusay hangga't maaari. Sa kasalukuyan, binubuo ng NVIDIA ang platform ng CUDA (Compute Unified Device Architecture); tinatawag ng AMD ang isang katulad na teknolohiyang CTM (Close To Metal) o AMD Stream Computing. Titingnan natin ang ilan sa mga kakayahan ng CUDA at susuriin sa pagsasanay ang mga kakayahan sa pag-compute ng G92 graphics chip ng GeForce 8800 GT video card.

Ngunit una, tingnan natin ang ilan sa mga nuances ng pagsasagawa ng mga kalkulasyon gamit ang mga GPU. Ang kanilang pangunahing bentahe ay ang graphics chip ay unang idinisenyo upang magsagawa ng maraming mga thread, habang ang bawat core ng isang maginoo na CPU ay nagsasagawa ng isang stream ng mga sunud-sunod na mga tagubilin. Ang anumang modernong GPU ay isang multiprocessor na binubuo ng ilang mga cluster ng computing, na may maraming ALU sa bawat isa. Ang pinaka-makapangyarihang modernong GT200 chip ay binubuo ng 10 tulad na mga kumpol, bawat isa ay may 24 na stream processor. Ang subok na GeForce 8800 GT video card batay sa G92 chip ay may pitong malalaking computing unit na may 16 stream processor bawat isa. Gumagamit ang mga CPU ng mga bloke ng SIMD SSE para sa mga kalkulasyon ng vector (isang pagtuturo ng maramihang data - isang pagtuturo ang isinasagawa sa maraming data), na nangangailangan ng pagbabago ng data sa 4 na vector. Pinoproseso ng GPU ang mga thread nang scalarly, i.e. isang pagtuturo ang inilalapat sa ilang mga thread (SIMT - solong pagtuturo ng maraming mga thread). Nai-save nito ang mga developer mula sa pag-convert ng data sa mga vector, at nagbibigay-daan sa arbitrary na pagsasanga sa mga stream. Ang bawat GPU compute unit ay may direktang memory access. At ang bandwidth ng memorya ng video ay mas mataas, salamat sa paggamit ng ilang hiwalay na mga controller ng memorya (sa top-end na G200 mayroong 8 64-bit na channel) at mataas na operating frequency.

Sa pangkalahatan, sa ilang partikular na gawain kapag nagtatrabaho sa malalaking halaga ng data, ang mga GPU ay mas mabilis kaysa sa mga CPU. Sa ibaba makikita mo ang isang paglalarawan ng pahayag na ito:


Ipinapakita ng chart ang dynamics ng paglago ng performance ng CPU at GPU mula noong 2003. Gustong banggitin ng NVIDIA ang data na ito bilang pag-advertise sa mga dokumento nito, ngunit ang mga ito ay mga teoretikal na kalkulasyon lamang at sa katotohanan ang puwang, siyempre, ay maaaring maging mas maliit.

Ngunit kahit na ano pa man, mayroong isang malaking potensyal ng mga GPU na maaaring magamit, at nangangailangan ng isang partikular na diskarte sa pagbuo ng software. Ang lahat ng ito ay ipinatupad sa CUDA hardware at software environment, na binubuo ng ilang mga antas ng software - ang mataas na antas ng CUDA Runtime API at ang mababang antas ng CUDA Driver API.


Ginagamit ng CUDA ang karaniwang wikang C para sa programming, na isa sa mga pangunahing bentahe nito para sa mga developer. Sa una, kasama sa CUDA ang mga library ng BLAS (basic linear algebra package) at FFT (Fourier transform). Ang CUDA ay mayroon ding kakayahang makipag-ugnayan sa mga OpenGL o DirectX graphics API, ang kakayahang bumuo sa mababang antas, at nailalarawan sa pamamagitan ng isang na-optimize na pamamahagi ng mga stream ng data sa pagitan ng CPU at GPU. Ang mga kalkulasyon ng CUDA ay isinasagawa nang sabay-sabay sa mga graphics, hindi katulad ng katulad na AMD platform, kung saan ang isang espesyal na virtual machine ay inilunsad para sa mga kalkulasyon sa GPU. Ngunit ang ganitong "cohabitation" ay puno din ng mga error kung ang isang malaking load ay nilikha ng graphics API habang ang CUDA ay tumatakbo nang sabay-sabay - pagkatapos ng lahat, ang mga graphical na operasyon ay mayroon pa ring mas mataas na priyoridad. Ang platform ay katugma sa 32- at 64-bit na operating system na Windows XP, Windows Vista, MacOS X at iba't ibang bersyon ng Linux. Bukas ang platform at sa website, bilang karagdagan sa mga espesyal na driver para sa video card, maaari kang mag-download ng mga software package na CUDA Toolkit, CUDA Developer SDK, kabilang ang isang compiler, debugger, karaniwang mga aklatan at dokumentasyon.

Tulad ng para sa praktikal na pagpapatupad ng CUDA, sa loob ng mahabang panahon ang teknolohiyang ito ay ginamit lamang para sa mataas na dalubhasang mga kalkulasyon ng matematika sa larangan ng pisika ng particle, astrophysics, gamot o pagtataya ng mga pagbabago sa merkado sa pananalapi, atbp. Ngunit ang teknolohiyang ito ay unti-unting nagiging mas malapit sa mga ordinaryong gumagamit, lalo na, ang mga espesyal na plug-in para sa Photoshop ay lumalabas na maaaring gumamit ng kapangyarihan ng pag-compute ng GPU. Sa isang espesyal na pahina maaari mong pag-aralan ang buong listahan ng mga programa na gumagamit ng mga kakayahan ng NVIDIA CUDA.

Bilang praktikal na pagsubok ng bagong teknolohiya sa MSI NX8800GT-T2D256E-OC video card, gagamitin namin ang TMPGEnc program. Ang produktong ito ay komersyal (ang buong bersyon ay nagkakahalaga ng $100), ngunit para sa mga MSI video card ito ay dumating bilang isang bonus sa isang trial na bersyon sa loob ng 30 araw. Maaari mong i-download ang bersyon na ito mula sa website ng developer, ngunit upang mai-install ang TMPGEnc 4.0 XPress MSI Special Edition kailangan mo ang orihinal na disk na may mga driver mula sa MSI card - kung wala ito ay hindi mai-install ang program.

Upang ipakita ang pinakakumpletong impormasyon tungkol sa mga kakayahan sa pag-compute sa CUDA at ihambing ang mga ito sa iba pang mga video adapter, maaari mong gamitin ang espesyal na CUDA-Z utility. Ito ang impormasyong ibinibigay nito tungkol sa aming GeForce 8800GT video card:




Kung ikukumpara sa mga reference na modelo, ang aming kopya ay gumagana sa mas mataas na frequency: ang raster domain ay 63 MHz na mas mataas kaysa sa nominal, at ang mga shader unit ay mas mabilis ng 174 MHz, at ang memory ay 100 MHz na mas mabilis.

Ihahambing namin ang bilis ng conversion ng parehong HD na video kapag kinakalkula lamang gamit ang CPU at may karagdagang pag-activate ng CUDA sa TMPGEnc program sa sumusunod na configuration:

  • Processor: Pentium Dual-Core E5200 2.5 GHz;
  • Motherboard: Gigabyte P35-S3;
  • Memorya: 2x1GB GoodRam PC6400 (5-5-5-18-2T)
  • Video card: MSI NX8800GT-T2D256E-OC;
  • Hard drive: 320GB WD3200AAKS;
  • Power supply: CoolerMaster eXtreme Power 500-PCAP;
  • Operating system: Windows XP SP2;
  • TMPGEnc 4.0 XPress 4.6.3.268;
  • Mga driver ng video card: ForceWare 180.60.
Para sa mga pagsubok, ang processor ay na-overclock sa 3 GHz (sa 11.5x261 MHz configuration) at sa 4 GHz (11.5x348 MHz) na may RAM frequency na 835 MHz sa una at pangalawang kaso. Video sa Full HD na 1920x1080 na resolution, isang minuto at dalawampung segundo ang haba. Upang lumikha ng karagdagang pag-load, naka-on ang isang filter ng pagbabawas ng ingay, na ang mga setting ay naiwan sa default.


Isinagawa ang pag-encode gamit ang DivX 6.8.4 codec. Sa mga setting ng kalidad ng codec na ito, ang lahat ng mga halaga ay naiwan sa default, pinagana ang multithreading.


Ang suporta sa multithreading sa TMPGEnc ay unang pinagana sa tab na mga setting ng CPU/GPU. Ang CUDA ay isinaaktibo din sa parehong seksyon.


Tulad ng nakikita mo mula sa screenshot sa itaas, ang pagpoproseso ng filter gamit ang CUDA ay pinagana, ngunit ang hardware video decoder ay hindi pinagana. Ang dokumentasyon ng programa ay nagbabala na ang pag-activate ng huling parameter ay nagpapataas sa oras ng pagproseso ng file.

Batay sa mga resulta ng mga pagsubok, nakuha ang sumusunod na data:


Sa 4 GHz na may naka-enable na CUDA, nakakuha lang kami ng ilang segundo (o 2%), na hindi masyadong kahanga-hanga. Ngunit sa isang mas mababang dalas, ang pagtaas mula sa pag-activate ng teknolohiyang ito ay nagbibigay-daan sa iyo upang makatipid ng halos 13% ng oras, na magiging kapansin-pansin kapag nagpoproseso ng malalaking file. Ngunit hindi pa rin kahanga-hanga ang mga resulta gaya ng inaasahan.

Ang TMPGEnc program ay may CPU at CUDA load indicator; sa pagsubok na configuration na ito, ipinakita nito ang CPU load sa humigit-kumulang 20%, at ang graphics core sa natitirang 80%. Bilang isang resulta, mayroon kaming parehong 100% tulad ng kapag nagko-convert nang walang CUDA, at maaaring walang pagkakaiba sa oras (ngunit umiiral pa rin ito). Ang maliit na kapasidad ng memorya na 256 MB ay hindi rin isang limitasyon na kadahilanan. Sa paghusga sa mga pagbabasa mula sa RivaTuner, hindi hihigit sa 154 MB ng memorya ng video ang ginamit sa panahon ng operasyon.



mga konklusyon

Ang programang TMPGEnc ay isa sa mga nagpapakilala sa teknolohiya ng CUDA sa masa. Ang paggamit ng GPU sa program na ito ay nagbibigay-daan sa iyo upang mapabilis ang proseso ng pagpoproseso ng video at makabuluhang mapawi ang gitnang processor, na magbibigay-daan sa gumagamit na kumportable na gawin ang iba pang mga gawain sa parehong oras. Sa aming partikular na halimbawa, bahagyang napabuti ng GeForce 8800GT 256MB video card ang performance ng timing kapag nagko-convert ng video batay sa overclocked na Pentium Dual-Core E5200 processor. Ngunit malinaw na nakikita na habang bumababa ang dalas, tumataas ang pakinabang mula sa pag-activate ng CUDA; sa mahinang mga processor, mas malaki ang pakinabang mula sa paggamit nito. Laban sa background ng pag-asa na ito, lubos na lohikal na ipagpalagay na kahit na may pagtaas sa pag-load (halimbawa, ang paggamit ng napakalaking bilang ng mga karagdagang filter ng video), ang mga resulta ng isang system na may CUDA ay makikilala sa pamamagitan ng mas makabuluhang delta ng pagkakaiba sa oras na ginugol sa proseso ng pag-encode. Gayundin, huwag kalimutan na ang G92 ay hindi ang pinakamalakas na chip sa ngayon, at ang mas modernong mga video card ay magbibigay ng mas mataas na pagganap sa mga naturang application. Gayunpaman, habang tumatakbo ang application, ang GPU ay hindi ganap na na-load at, malamang, ang pamamahagi ng load ay depende sa bawat configuration nang hiwalay, lalo na sa kumbinasyon ng processor/video card, na sa huli ay maaaring magbigay ng mas malaki (o mas maliit) na pagtaas bilang isang porsyento ng CUDA activation. Sa anumang kaso, para sa mga nagtatrabaho sa malalaking volume ng data ng video, ang teknolohiyang ito ay magbibigay-daan pa rin sa kanila na makabuluhang makatipid ng kanilang oras.

Totoo, ang CUDA ay hindi pa nakakakuha ng malawak na katanyagan; ang kalidad ng software na gumagana sa teknolohiyang ito ay nangangailangan ng pagpapabuti. Sa programang TMPGEnc 4.0 XPress na aming sinuri, hindi palaging gumagana ang teknolohiyang ito. Ang parehong video ay maaaring muling i-encode nang maraming beses, at pagkatapos ay biglang, sa susunod na oras na ito ay inilunsad, ang CUDA load ay 0%. At ang hindi pangkaraniwang bagay na ito ay ganap na random sa ganap na magkakaibang mga operating system. Gayundin, ang program na pinag-uusapan ay tumanggi na gumamit ng CUDA kapag nag-encode sa XviD na format, ngunit walang mga problema sa sikat na DivX codec.

Bilang isang resulta, sa ngayon ang teknolohiya ng CUDA ay maaaring makabuluhang taasan ang pagganap ng mga personal na computer lamang sa ilang mga gawain. Ngunit ang saklaw ng aplikasyon ng naturang teknolohiya ay lalawak, at ang proseso ng pagtaas ng bilang ng mga core sa maginoo na mga processor ay nagpapahiwatig ng pagtaas sa pangangailangan para sa parallel multi-threaded computing sa mga modernong software application. Ito ay hindi para sa wala na kamakailan ang lahat ng mga pinuno ng industriya ay nahuhumaling sa ideya ng pagsasama-sama ng CPU at GPU sa loob ng isang pinag-isang arkitektura (tandaan lamang ang pinaka-advertise na AMD Fusion). Marahil ang CUDA ay isa sa mga yugto sa proseso ng pagkakaisa na ito.


Nagpapasalamat kami sa mga sumusunod na kumpanya para sa pagbibigay ng kagamitan sa pagsubok:

– isang hanay ng mababang antas ng mga interface ng software ( API) para sa paglikha ng mga laro at iba pang mga application na multimedia na may mataas na pagganap. May kasamang suporta sa mataas na pagganap 2D- At 3D-graphics, tunog at input device.

Direct3D (D3D) – interface para sa pagpapakita ng three-dimensional primitives(mga geometric na katawan). Kasama sa .

OpenGL(mula sa English Buksan ang Graphics Library, literal - open graphics library) ay isang detalye na tumutukoy sa isang programming language-independent cross-platform programming interface para sa pagsusulat ng mga application gamit ang two-dimensional at three-dimensional na computer graphics. May kasamang mahigit 250 function para sa pagguhit ng mga kumplikadong 3D na eksena mula sa mga simpleng primitive. Ginagamit upang lumikha ng mga video game, virtual reality, at visualization sa siyentipikong pananaliksik. Sa plataporma Windows nakikipagkumpitensya sa .

OpenCL(mula sa English Buksan ang Computing Language, literal – isang bukas na wika ng mga kalkulasyon) – balangkas(software system framework) para sa pagsulat ng mga computer program na nauugnay sa parallel computing sa iba't ibang graphics ( GPU) At ( ). Sa balangkas OpenCL may kasamang programming language at application programming interface ( API). OpenCL nagbibigay ng paralelismo sa antas ng pagtuturo at sa antas ng data at isang pagpapatupad ng pamamaraan GPGPU.

GPGPU(pinaikling mula sa Ingles) General-P urpose G raphics P rocessing U nits, literal - GPU pangkalahatang layunin) ay isang pamamaraan para sa paggamit ng isang graphics processing unit (GPU) o video card para sa pangkalahatang computing na karaniwang ginagawa ng isang computer.

Shader(Ingles) shader) – isang programa para sa pagbuo ng mga anino sa mga synthesized na imahe, na ginagamit sa tatlong-dimensional na graphics upang matukoy ang mga huling parameter ng isang bagay o imahe. Karaniwang kinabibilangan ng mga arbitraryong kumplikadong paglalarawan ng light absorption at scattering, texture mapping, reflection at refraction, shading, surface displacement, at post-processing effect. Ang mga kumplikadong ibabaw ay maaaring makita gamit ang mga simpleng geometric na hugis.

Nagre-render(Ingles) rendering) – visualization, sa computer graphics, ang proseso ng pagkuha ng isang imahe mula sa isang modelo gamit ang software.

SDK(pinaikling mula sa Ingles) Software Development Kit) – isang set ng software development tools.

CPU(pinaikling mula sa Ingles) Central Processing Unit, literal – central/main/main computing device) – central (micro);isang device na nagsasagawa ng mga tagubilin sa makina; isang piraso ng hardware na responsable para sa pagsasagawa ng mga pagpapatakbo ng computational (tinukoy ng operating system at application software) at pag-coordinate sa pagpapatakbo ng lahat ng device.

GPU(pinaikling mula sa Ingles) Graphic Processing Unit, literal – graphic computing device) – graphic processor; isang hiwalay na device o game console na nagsasagawa ng graphic rendering (visualization). Ang mga modernong GPU ay napakahusay sa pagproseso at pagpapakita ng mga graphics ng computer sa isang makatotohanang paraan. Ang graphics processor sa mga modernong video adapter ay ginagamit bilang isang 3D graphics accelerator, ngunit sa ilang mga kaso maaari rin itong gamitin para sa mga kalkulasyon ( GPGPU).

Mga problema CPU

Sa loob ng mahabang panahon, ang pagtaas sa pagganap ng mga tradisyonal ay higit sa lahat ay naganap dahil sa isang pare-parehong pagtaas sa dalas ng orasan (mga 80% ng pagganap ay tinutukoy ng dalas ng orasan) na may sabay-sabay na pagtaas sa bilang ng mga transistor sa isang chip . Gayunpaman, ang karagdagang pagtaas sa dalas ng orasan (sa dalas ng orasan na higit sa 3.8 GHz, ang mga chips ay nag-overheat lang!) ay nakakaharap ng isang bilang ng mga pangunahing pisikal na hadlang (dahil ang teknolohikal na proseso ay halos lumalapit sa laki ng isang atom: , at ang laki ng isang silicon na atom ay humigit-kumulang 0.543 nm):

Una, habang bumababa ang laki ng kristal at tumataas ang dalas ng orasan, tumataas ang kasalukuyang pagtagas ng mga transistor. Ito ay humahantong sa pagtaas ng pagkonsumo ng kuryente at pagtaas ng mga paglabas ng init;

Pangalawa, ang mga benepisyo ng mas mataas na bilis ng orasan ay bahagyang tinatanggihan ng latency ng pag-access ng memorya, dahil ang mga oras ng pag-access ng memorya ay hindi nakakasabay sa pagtaas ng bilis ng orasan;

Pangatlo, para sa ilang mga aplikasyon, ang mga tradisyonal na serial architecture ay nagiging hindi episyente habang tumataas ang bilis ng orasan dahil sa tinatawag na "von Neumann bottleneck," isang limitasyon sa pagganap na nagreresulta mula sa sequential computation flow. Kasabay nito, ang resistive-capacitive signal transmission delays ay tumataas, na isang karagdagang bottleneck na nauugnay sa pagtaas ng clock frequency.

Pag-unlad GPU

Kasabay nito, nagkaroon (at mayroon!) na pag-unlad GPU:

Nobyembre 2008 – Intel ipinakilala ang isang linya ng 4-core Intel Core i7, na batay sa isang bagong henerasyong microarchitecture Nehalem. Gumagana ang mga processor sa dalas ng orasan na 2.6-3.2 GHz. Ginawa gamit ang 45nm process technology.

Disyembre 2008 - nagsimula ang paghahatid ng 4-core AMD Phenom II 940(code name - Deneb). Gumagana sa dalas ng 3 GHz, na ginawa gamit ang isang 45-nm na teknolohiya sa proseso.

Mayo 2009 – kumpanya AMD ipinakilala ang bersyon ng GPU ATI Radeon HD 4890 na may core clock speed ay tumaas mula 850 MHz hanggang 1 GHz. Ito ang una graphic processor na tumatakbo sa 1 GHz. Ang kapangyarihan ng pag-compute ng chip, salamat sa pagtaas ng dalas, ay tumaas mula 1.36 hanggang 1.6 teraflops. Naglalaman ang processor ng 800 (!) computing core at sumusuporta sa memory ng video GDDR5, DirectX 10.1, ATI CrossFireX at lahat ng iba pang teknolohiyang likas sa mga modernong modelo ng video card. Ang chip ay ginawa batay sa 55 nm na teknolohiya.

Mga pangunahing pagkakaiba GPU

Mga Natatanging Tampok GPU(kumpara sa ) ay:

– isang arkitektura na pinakamataas na naglalayong pataasin ang bilis ng pagkalkula ng mga texture at kumplikadong mga graphic na bagay;

– tipikal na pinakamataas na kapangyarihan GPU mas mataas kaysa doon ;

– salamat sa isang espesyal na arkitektura ng conveyor, GPU mas mahusay sa pagproseso ng graphic na impormasyon kaysa sa .

"Krisis ng genre"

"Krisis ng genre" para sa matured sa pamamagitan ng 2005 - iyon ay kapag sila ay lumitaw. Ngunit, sa kabila ng pag-unlad ng teknolohiya, ang pagtaas sa pagiging produktibo ng maginoo kapansin-pansing nabawasan. Sabay performance GPU patuloy na lumalaki. Kaya, noong 2003, ang rebolusyonaryong ideyang ito ay naging kristal - gamitin ang computing power ng mga graphics para sa iyong mga pangangailangan. Ang mga GPU ay lalong ginagamit para sa "hindi graphical" na pag-compute (simulation ng pisika, pagpoproseso ng signal, computational mathematics/geometry, database operations, computational biology, computational economics, computer vision, atbp.).

Ang pangunahing problema ay walang karaniwang interface ng programming GPU. Ginamit ng mga developer OpenGL o Direct3D, ngunit ito ay napaka-maginhawa. Korporasyon NVIDIA(isa sa pinakamalaking tagagawa ng mga graphics, media at mga processor ng komunikasyon, pati na rin ang mga wireless media processor; itinatag noong 1993) ay nagsimulang bumuo ng isang pinag-isang at maginhawang pamantayan - at ipinakilala ang teknolohiya CUDA.

Paano ito nagsimula

2006 – NVIDIA nagpapakita CUDA™; ang simula ng isang rebolusyon sa computing GPU.

2007 – NVIDIA naglalabas ng arkitektura CUDA(orihinal na bersyon CUDA SDK ay isinumite noong Pebrero 15, 2007); nominasyon na "Pinakamahusay na Bagong Produkto" mula sa magazine Popular Science at "Readers' Choice" mula sa publikasyon HPCWire.

2008 – teknolohiya NVIDIA CUDA nanalo sa kategoryang "Technical Excellence" mula sa Magasin sa PC.

Anong nangyari CUDA

CUDA(pinaikling mula sa Ingles) Compute Unified Device Architecture, literal - pinag-isang computing architecture ng mga device) - architecture (isang set ng software at hardware) na nagbibigay-daan sa iyong gumawa sa GPU pangkalahatang layunin kalkulasyon, habang GPU aktwal na gumaganap bilang isang malakas na coprocessor.

Teknolohiya NVIDIA CUDA™ ay ang tanging development environment sa isang programming language C, na nagbibigay-daan sa mga developer na lumikha ng software na lumulutas ng mga kumplikadong problema sa pag-compute sa mas kaunting oras, salamat sa kapangyarihan ng pagproseso ng mga GPU. Milyun-milyong tao na ang nagtatrabaho sa mundo GPU kasama ang suporta CUDA, at libu-libong programmer ang gumagamit na ng (libre!) na mga tool CUDA upang pabilisin ang mga aplikasyon at lutasin ang pinakamasalimuot, masinsinang mga gawain - mula sa pag-encode ng video at audio hanggang sa paggalugad ng langis at gas, pagmomodelo ng produkto, medikal na imaging at siyentipikong pananaliksik.

CUDA ay nagbibigay sa developer ng pagkakataon, sa kanyang sariling paghuhusga, upang ayusin ang pag-access sa hanay ng mga tagubilin ng graphics accelerator at pamahalaan ang memorya nito, at ayusin ang mga kumplikadong parallel na kalkulasyon dito. Suporta sa graphics accelerator CUDA nagiging isang malakas na programmable open architecture, katulad ng ngayon. Ang lahat ng ito ay nagbibigay sa developer ng mababang antas, distributed at high-speed na access sa hardware, paggawa CUDA isang kinakailangang batayan para sa pagbuo ng mga seryosong tool na may mataas na antas, tulad ng mga compiler, debugger, mathematical library, at software platform.

Uralsky, nangungunang espesyalista sa teknolohiya NVIDIA, paghahambing GPU At , sabi nito: “ - Ito ay isang SUV. Siya ay palaging nagmamaneho at kahit saan, ngunit hindi masyadong mabilis. A GPU- Ito ay isang sports car. Sa isang masamang kalsada, hindi ito mapupunta kahit saan, ngunit bigyan ito ng magandang ibabaw, at ipapakita nito ang lahat ng bilis nito, na hindi kailanman pinangarap ng isang SUV!.."

Mga kakayahan sa teknolohiya CUDA