Počítačový zdroj U SM. Kam vedie cuda: praktická aplikácia technológie gpgpu - najlepšie vybavenie Aplikácie, ktoré bežia na cuda

Už desaťročia platí Moorov zákon, ktorý hovorí, že každé dva roky sa počet tranzistorov na čipe zdvojnásobí. Bolo to však v roku 1965 a za posledných 5 rokov sa myšlienka fyzických viacjadier v procesoroch spotrebiteľskej triedy začala rýchlo rozvíjať: v roku 2005 Intel predstavil Pentium D a AMD predstavilo Athlon X2. Vtedy sa aplikácie využívajúce 2 jadrá dali spočítať na prstoch jednej ruky. Ďalšia generácia procesorov Intel, ktorá urobila revolúciu, však mala rovno 2 fyzické jadrá. Navyše, séria Quad sa objavila v januári 2007, v tom čase samotný Moore priznal, že jeho zákon čoskoro prestane platiť.

Čo teraz? Dvojjadrové procesory aj v rozpočtových kancelárskych systémoch a 4 fyzické jadrá sa stali normou, a to len za 2-3 roky. Frekvencia procesorov sa nezvyšuje, ale zlepšuje sa architektúra, zvyšuje sa počet fyzických a virtuálnych jadier. Myšlienka použitia video adaptérov vybavených desiatkami alebo dokonca stovkami výpočtových „jednotiek“ však existuje už dlho.

A hoci sú vyhliadky GPU computingu obrovské, najpopulárnejším riešením je Nvidia CUDA, ktorá je zadarmo, má veľa dokumentácie a je vo všeobecnosti veľmi jednoduchá na implementáciu, nie je veľa aplikácií využívajúcich túto technológiu. V podstate ide o všetky druhy špecializovaných výpočtov, o ktoré sa bežný používateľ vo väčšine prípadov nestará. Existujú však aj programy určené pre masového používateľa a o nich si povieme v tomto článku.

Najprv trochu o samotnej technológii a s čím sa používa. Pretože Pri písaní článku sa zameriavam na široké spektrum čitateľov, preto sa ho pokúsim vysvetliť prístupným jazykom bez zložitých pojmov a trochu stručne.

CUDA(anglicky: Compute Unified Device Architecture) je softvérová a hardvérová architektúra, ktorá vám umožňuje vykonávať výpočty pomocou grafických procesorov NVIDIA, ktoré podporujú technológiu GPGPU (random computing na grafických kartách). Architektúra CUDA sa prvýkrát objavila na trhu s vydaním ôsmej generácie čipu NVIDIA - G80 a je prítomná vo všetkých nasledujúcich sériách grafických čipov, ktoré sa používajú v rodinách akcelerátorov GeForce, Quadro a Tesla. (c) Wikipedia.org

Prichádzajúce toky sú spracovávané nezávisle na sebe, t.j. paralelný.

Je rozdelené do 3 úrovní:

Mriežka- jadro. Obsahuje jedno/dvoj/trojrozmerné pole blokov.

Blokovať– obsahuje veľa vlákien. Vlákna rôznych blokov nemôžu navzájom interagovať. Prečo bolo potrebné zaviesť bloky? Každý blok je v podstate zodpovedný za svoju vlastnú podúlohu. Napríklad veľký obrázok (ktorý je maticou) možno rozdeliť na niekoľko menších častí (matíc) a pracovať s každou časťou obrázka paralelne.

Niť– prúdiť. Vlákna v rámci jedného bloku môžu interagovať buď prostredníctvom zdieľanej pamäte, ktorá je mimochodom oveľa rýchlejšia ako globálna pamäť, alebo prostredníctvom nástrojov na synchronizáciu vlákien.

Warp je spojenie vlákien vzájomne interagujúcich, pre všetky moderné GPU je veľkosť Warp 32. polovičná osnova, čo je polovica warpu, pretože Prístup do pamäte sa zvyčajne vyskytuje oddelene pre prvú a druhú polovicu osnovy.

Ako vidíte, táto architektúra je vynikajúca na paralelizáciu úloh. A hoci programovanie prebieha v jazyku C s istými obmedzeniami, v skutočnosti nie je všetko také jednoduché, pretože... nie všetko sa dá paralelizovať. Neexistujú ani štandardné funkcie na generovanie náhodných čísel (alebo inicializáciu), to všetko je potrebné implementovať samostatne. A hoci existuje dostatok hotových možností, nič z toho neprináša radosť. Schopnosť používať rekurziu sa objavila pomerne nedávno.

Pre prehľadnosť bol napísaný malý konzolový program (na minimalizáciu kódu), ktorý vykonáva operácie s dvoma poľami typu float, t.j. s neceločíselnými hodnotami. Z vyššie uvedených dôvodov inicializáciu (naplnenie poľa rôznymi ľubovoľnými hodnotami) vykonal CPU. Ďalej bolo vykonaných 25 rôznych operácií so zodpovedajúcimi prvkami z každého poľa, medzivýsledky boli zapísané do tretieho poľa. Veľkosť poľa sa zmenila, výsledky sú nasledovné:

Celkovo boli vykonané 4 testy:

1024 prvkov v každom poli:

Je jasne vidieť, že s tak malým počtom prvkov je paralelné počítanie málo užitočné, pretože Samotné výpočty sú oveľa rýchlejšie ako ich príprava.

4096 prvkov v každom poli:

A teraz môžete vidieť, že grafická karta vykonáva operácie na poliach 3-krát rýchlejšie ako procesor. Okrem toho sa čas vykonania tohto testu na grafickej karte nezvýšil (mierne zníženie času možno pripísať chybe).

V každom poli je teraz 12288 prvkov:

Oddelenie grafickej karty sa zvýšilo 2-krát. Opäť stojí za zmienku, že čas vykonania na grafickej karte sa zvýšil
nepodstatne, ale na procesore viac ako 3x, t.j. úmerné zložitosti úlohy.

A posledný test je 36 864 prvkov v každom poli:

V tomto prípade dosahuje zrýchlenie pôsobivé hodnoty - takmer 22-krát rýchlejšie na grafickej karte. A opäť sa čas vykonávania na grafickej karte mierne zvýšil, ale na procesore - požadovaný 3-krát, čo je opäť úmerné zložitosti úlohy.

Ak budete naďalej komplikovať výpočty, grafická karta vyhráva čoraz viac. Hoci je príklad trochu prehnaný, celková situácia jasne ukazuje. Ale ako už bolo spomenuté vyššie, nie všetko sa dá paralelizovať. Napríklad výpočet Pi. Sú tam len príklady napísané metódou Monte Carlo, ale presnosť výpočtov je na 7 desatinných miest, t.j. pravidelný plavák. Na zvýšenie presnosti výpočtov je potrebná dlhá aritmetika a tu vznikajú problémy, pretože Je veľmi, veľmi ťažké to efektívne implementovať. Na internete som nenašiel príklady, ktoré používajú CUDA a počítajú Pi na 1 milión desatinných miest. Boli urobené pokusy napísať takúto aplikáciu, ale najjednoduchšou a najefektívnejšou metódou na výpočet Pi je Brent-Salaminov algoritmus alebo Gaussov vzorec. Známy SuperPI s najväčšou pravdepodobnosťou (súdiac podľa rýchlosti prevádzky a počtu iterácií) používa Gaussov vzorec. A súdiac podľa
Vzhľadom na skutočnosť, že SuperPI je jednovláknové, nedostatok príkladov pod CUDA a zlyhanie mojich pokusov, nie je možné efektívne paralelizovať počítanie Pi.

Mimochodom, môžete si všimnúť, ako sa počas výpočtov zvyšuje zaťaženie GPU a prideľuje sa aj pamäť.

Teraz prejdime k praktickejším výhodám CUDA, a to k aktuálne existujúcim programom, ktoré túto technológiu využívajú. Väčšinou ide o všetky druhy audio/video prevodníkov a editorov.

Pri testovaní boli použité 3 rôzne video súbory:

      *História vzniku filmu Avatar - 1920x1080, MPEG4, h.264.
      *Séria "Lie to me" - 1280 x 720, MPEG4, h.264.
      *Séria „Vo Philadelphii je vždy slnečno“ – 624 x 464, xvid.

Kontajner a veľkosť prvých dvoch súborov boli .mkv a 1,55 GB a posledný bol .avi a 272 MB.

Začnime s veľmi senzačným a obľúbeným produktom - Badaboom. Použitá verzia - 1.2.1.74 . Cena programu je $29.90 .

Rozhranie programu je jednoduché a intuitívne - vľavo vyberieme zdrojový súbor alebo disk a vpravo - požadované zariadenie, pre ktoré budeme kódovať. K dispozícii je aj užívateľský režim, v ktorom sa parametre nastavujú manuálne, čo sme použili.

Najprv sa pozrime, ako rýchlo a efektívne je video zakódované „do seba“, t.j. rovnaké rozlíšenie a približne rovnakú veľkosť. Rýchlosť budeme merať v fps, a nie v uplynutom čase – takto je pohodlnejšie porovnávať a počítať, do akej miery bude komprimované video ľubovoľnej dĺžky. Pretože Dnes uvažujeme o „zelenej“ technológii, potom budú grafy zodpovedať -)

Rýchlosť kódovania priamo závisí od kvality, to je zrejmé. Za zmienku stojí, že svetelné rozlíšenie (nazvime ho tradične SD) nie je pre Badaboom problém – rýchlosť kódovania je 5,5-krát vyššia ako pôvodná (24 fps) snímková frekvencia videa. A dokonca aj ťažké 1080p video program konvertuje v reálnom čase. Stojí za zmienku, že kvalita výsledného videa je veľmi blízka pôvodnému video materiálu, t.j. Badaboom kóduje veľmi, veľmi efektívne.

Väčšinou ale prenesú video do nižšieho rozlíšenia, pozrime sa, ako sa veci majú v tomto režime. So znížením rozlíšenia sa znížil aj bitový tok videa. Bolo to 9500 kbps pre výstupný súbor 1080p, 4100 kbps pre 720p a 2400 kbps pre 720x404. Výber bol urobený na základe rozumného pomeru veľkosť/kvalita.

Nie sú potrebné žiadne komentáre. Ak urobíte rip zo 720p na bežnú SD kvalitu, potom prekódovanie filmu trvajúceho 2 hodiny bude trvať asi 30 minút. A zároveň bude zaťaženie procesora zanedbateľné, môžete podnikať bez pocitu nepohodlia.

Čo ak skonvertujete video do formátu pre mobilné zariadenie? Ak to chcete urobiť, vyberte profil iPhone (bitová rýchlosť 1 Mbit/s, 480 x 320) a pozrite sa na rýchlosť kódovania:

Musím niečo povedať? Dvojhodinový film v bežnej kvalite pre iPhone je prekódovaný za menej ako 15 minút. S HD kvalitou je to náročnejšie, no stále veľmi rýchle. Hlavná vec je, že kvalita výstupného videa zostáva na pomerne vysokej úrovni pri prezeraní na displeji telefónu.

Vo všeobecnosti sú dojmy z Badaboom pozitívne, rýchlosť prevádzky poteší a rozhranie je jednoduché a prehľadné. Všetky druhy chýb v predchádzajúcich verziách (používal som beta v roku 2008) boli opravené. Až na jednu vec - cesta k zdrojovému súboru, ako aj k priečinku, v ktorom je uložené hotové video, by nemala obsahovať ruské písmená. V porovnaní s výhodami programu je však táto nevýhoda zanedbateľná.

Ďalší v poradí budeme mať Super LoiLoScope. Pýtajú sa na bežnú verziu 3 280 rubľov a za dotykovú verziu, ktorá podporuje dotykové ovládanie vo Windows 7, si pýtajú toľko 4 440 rubľov. Skúsme prísť na to, prečo chce vývojár také peniaze a prečo editor videa potrebuje multitouch podporu. Najnovšia použitá verzia - 1.8.3.3 .

Je dosť ťažké opísať rozhranie programu slovami, preto som sa rozhodol urobiť krátke video. Hneď poviem, že ako všetky video konvertory pre CUDA, aj GPU akcelerácia je podporovaná len pre video výstup v MPEG4 s kodekom h.264.

Počas kódovania je zaťaženie procesora 100%, ale to nespôsobuje nepohodlie. Prehliadač a ďalšie ľahké aplikácie sa nespomalia.

Teraz prejdime k výkonu. Na začiatok je všetko rovnaké ako pri Badaboom – prekódovanie videa do podobného videa v kvalite.

Výsledky sú oveľa lepšie ako Badaboom. Výborná je aj kvalita, rozdiel oproti originálu spoznáte len pri porovnávaní rámikov vo dvojici pod lupou.

Páni, tu LoiloScope prekonáva Badaboom 2,5-krát. Zároveň môžete jednoducho paralelne strihať a kódovať ďalšie video, čítať správy a dokonca pozerať filmy a bez problémov sa prehrá aj FullHD, aj keď je zaťaženie procesora maximálne.

Teraz skúsme spraviť video pre mobilné zariadenie, nazvime profil rovnako ako sa volal v Badaboom – iPhone (480x320, 1 Mbit/s):

Nie je tam žiadna chyba. Všetko bolo niekoľkokrát prekontrolované, zakaždým bol výsledok rovnaký. S najväčšou pravdepodobnosťou sa to stane z jednoduchého dôvodu, že súbor SD bol zaznamenaný s iným kodekom a v inom kontajneri. Pri transkódovaní sa video najskôr dekóduje, rozdelí na matice určitej veľkosti a skomprimuje. ASP dekodér použitý v prípade xvid je pri paralelnom dekódovaní pomalší ako AVC (pre h.264). 192 fps je však 8-krát rýchlejšie ako rýchlosť pôvodného videa; 23-minútová séria je komprimovaná za menej ako 4 minúty. Situácia sa opakovala s ďalšími súbormi komprimovanými do xvid/DivX.

LoiloScope Zanechal som len príjemné dojmy - rozhranie je napriek svojej nezvyčajnosti pohodlné a funkčné a rýchlosť prevádzky je mimo chvály. Relatívne slabá funkčnosť je trochu frustrujúca, ale často pri jednoduchej inštalácii stačí mierne upraviť farby, urobiť plynulé prechody a pridať text a LoiloScope to robí vynikajúco. Trochu desivá je aj cena – viac ako 100 dolárov za bežnú verziu je pre zahraničie normálne, no aj tak sa nám takéto čísla zdajú trochu divoké. Aj keď priznávam, že keby som napríklad často natáčal a strihal domáce videá, možno by som rozmýšľal nad kúpou. Zároveň som si mimochodom overil možnosť úpravy HD (alebo skôr AVCHD) obsahu priamo z videokamery bez predchádzajúcej konverzie do iného formátu, LoiloScope neodhalil žiadne problémy so súbormi ako .mts.

Nová technológia je ako novovznikajúci evolučný druh. Zvláštne stvorenie, na rozdiel od mnohých staromládencov. Niekedy trápne, niekedy vtipné. A spočiatku sa jeho nové vlastnosti nezdajú byť v žiadnom prípade vhodné pre tento ustálený a stabilný svet.

Prejde však trochu času a ukáže sa, že začiatočník beží rýchlejšie, skáče vyššie a celkovo je silnejší. A žerie viac múch ako jeho retrográdni susedia. A potom tí istí susedia začnú chápať, že nemá zmysel sa hádať s týmto nemotorným bývalým. Je lepšie byť s ním priateľmi a ešte lepšie zorganizovať symbiózu. Uvidíte, že múch bude viac.

Technológia GPGPU (General-Purpose Graphics Processing Units - univerzálny grafický procesor) dlho existovala iba v teoretických výpočtoch šikovných akademikov. Ako inak? Navrhnúť radikálne zmeniť výpočtový proces, ktorý sa vyvíjal v priebehu desaťročí, zverením výpočtu jeho paralelných vetiev grafickej karte - to dokážu iba teoretici.

Logo technológie CUDA nám pripomína, že vyrástla v hĺbke
3D grafika.

Technológia GPGPU však na stránkach univerzitných časopisov dlho nezapadala. Po načechraní peria svojich najlepších vlastností upútala pozornosť výrobcov. Tak sa zrodila CUDA - implementácia GPGPU na grafických procesoroch GeForce vyrábaných spoločnosťou nVidia.

Vďaka CUDA sa technológie GPGPU stali hlavným prúdom. A teraz len ten najkratkozraký a pokrytý hrubou vrstvou lenivosti vývojár programovacích systémov nedeklaruje podporu CUDA svojim produktom. IT publikácie považovali za česť prezentovať podrobnosti o technológii v mnohých obsiahlych populárno-vedeckých článkoch a konkurenti sa okamžite posadili so vzormi a krížovými kompilátormi, aby vyvinuli niečo podobné.

Verejné uznanie je snom nielen pre ašpirujúce hviezdy, ale aj pre novonarodené technológie. A CUDA mal šťastie. Je známa, hovoria a píšu o nej.

Len píšu, akoby pokračovali v diskusii o GPGPU v hustých vedeckých časopisoch. Bombardujú čitateľa množstvom výrazov ako „mriežka“, „SIMD“, „warp“, „hostiteľ“, „textúra a konštantná pamäť“. Ponoria ho až na samý vrchol do organizačných schém GPU nVidia, vedú ho kľukatými cestami paralelných algoritmov a (najsilnejší ťah) ukazujú dlhé zoznamy kódov v jazyku C. V dôsledku toho sa ukazuje, že na vstupe článku máme čerstvého čitateľa s horiacou túžbou pochopiť CUDA a na výstupe máme toho istého čitateľa, ale s opuchnutou hlavou naplnenou zmätkom faktov, diagramov kód, algoritmy a termíny.

Medzitým je cieľom akejkoľvek technológie uľahčiť nám život. A CUDA s tým robí skvelú prácu. Výsledky jej práce presvedčia každého skeptika lepšie ako stovky schém a algoritmov.

Nie všade

CUDA podporujú vysokovýkonné superpočítače
nVidia Tesla.

A predsa, skôr ako sa pozrieme na výsledky práce CUDA v oblasti uľahčenia života priemerného používateľa, stojí za to pochopiť všetky jeho obmedzenia. Rovnako ako s džinom: akákoľvek túžba, ale jedna. Aj CUDA má svoje Achillove päty. Jednou z nich sú obmedzenia platforiem, na ktorých môže fungovať.

Zoznam grafických kariet nVidia, ktoré podporujú CUDA, je uvedený v špeciálnom zozname s názvom CUDA Enabled Products. Zoznam je celkom pôsobivý, ale ľahko sa klasifikuje. Podpora CUDA sa neodmieta:

    Modely série nVidia GeForce 8., 9., 100., 200. a 400. s minimálne 256 MB video pamäte na doske. Podpora sa rozširuje na stolné aj mobilné karty.

    Prevažná väčšina stolných a mobilných grafických kariet sú nVidia Quadro.

    Všetky riešenia zo série netbookov nvidia ION.

    Vysokovýkonné superpočítačové riešenia HPC (High Performance Computing) a nVidia Tesla používané ako pre osobné počítače, tak aj pre organizáciu škálovateľných klastrových systémov.

Preto sa pred použitím softvérových produktov založených na CUDA oplatí skontrolovať tento zoznam obľúbených.

Okrem samotnej grafickej karty je potrebný vhodný ovládač na podporu CUDA. Je to spojenie medzi centrálnym a grafickým procesorom, ktoré funguje ako druh softvérového rozhrania na prístup k programovému kódu a údajom do viacjadrovej pokladnice GPU. Aby ste sa nepomýlili, nVidia odporúča navštíviť stránku ovládačov a získať najnovšiu verziu.

...ale samotný proces

Ako CUDA funguje? Ako vysvetliť zložitý proces paralelných výpočtov na špeciálnej hardvérovej architektúre GPU bez toho, aby ste čitateľa ponorili do priepasti konkrétnych pojmov?

Môžete to skúsiť urobiť tak, že si predstavíte, ako centrálny procesor vykonáva program v symbióze s grafickým procesorom.

Architektonicky sú centrálna procesorová jednotka (CPU) a jej grafický náprotivok (GPU) navrhnuté inak. Ak nakreslíme analógiu so svetom automobilového priemyslu, potom je CPU kombi, jedno z tých, ktoré sa nazývajú „stodola“. Vyzerá to ako osobné auto, ale zároveň (z pohľadu vývojárov) „je to Švajčiar, kosec a hráč na fajku“. Plní úlohu malého nákladného auta, autobusu a hypertrofovaného hatchbacku súčasne. Skrátka kombi. Má málo valcových jadier, ale zvládajú takmer akúkoľvek úlohu a pôsobivá vyrovnávacia pamäť je schopná uložiť veľa údajov.

Ale GPU je športové auto. Existuje len jedna funkcia: doviesť pilota do cieľa čo najrýchlejšie. Preto žiadna veľká pamäť kufra, žiadne extra sedadlá. Ale jadier valca je stokrát viac ako CPU.

Vďaka CUDA sa vývojári programov GPGPU nemusia ponoriť do zložitosti programovania
vývoj pre grafické motory ako DirectX a OpenGL

Na rozdiel od centrálneho procesora, ktorý je schopný riešiť akúkoľvek úlohu, vrátane grafiky, ale s priemerným výkonom, je grafický procesor prispôsobený na vysokorýchlostné riešenie jednej úlohy: premena zväzku polygónov na vstupe na zväzok pixelov pri výstup. Navyše, tento problém možno riešiť paralelne pomocou stoviek relatívne jednoduchých výpočtových jadier v GPU.

Aký tandem teda môže byť z kombi a športového auta? CUDA funguje asi takto: program beží na CPU, kým neexistuje časť kódu, ktorú je možné vykonávať paralelne. Potom, namiesto toho, aby sa pomaly vykonával na dvoch (alebo dokonca ôsmich) jadrách najlepšieho CPU, sa prenesie na stovky jadier GPU. Zároveň sa výrazne skráti čas vykonávania tejto časti, čo znamená, že sa zníži aj čas vykonávania celého programu.

Technologicky sa pre programátora nič nemení. Kód programov CUDA je napísaný v jazyku C. Presnejšie, vo svojom špeciálnom dialekte „C s potokmi“ (C s potokmi). Toto rozšírenie jazyka C, vyvinuté v Stanforde, sa nazýva Brook. Rozhranie, ktoré prenáša Brook kód do GPU, je ovládač grafickej karty, ktorá podporuje CUDA. Organizuje celý proces spracovania tejto časti programu tak, že pre programátora GPU vyzerá ako koprocesor CPU. Veľmi podobné používaniu matematického koprocesora v prvých dňoch osobných počítačov. S príchodom Brooka, grafických kariet s podporou CUDA a ovládačov pre ne sa každý programátor stal schopným pristupovať k GPU vo svojich programoch. Predtým však tento šamanizmus vlastnil úzky okruh vybraných ľudí, ktorí roky zdokonaľovali programovacie techniky pre grafické motory DirectX alebo OpenGL.

Do suda tohto honosného medu - chváli CUDA - sa oplatí nastrčiť muchu, teda obmedzenia. Nie každý problém, ktorý je potrebné naprogramovať, je možné vyriešiť pomocou CUDA. Riešenie rutinných kancelárskych úloh nebude možné urýchliť, ale môžete dôverovať CUDA, že vypočíta správanie tisícov bojovníkov rovnakého typu vo World of Warcraft. Ale toto je vymyslená úloha. Pozrime sa na príklady toho, čo už CUDA veľmi efektívne rieši.

Spravodlivé skutky

CUDA je veľmi pragmatická technológia. Po implementácii podpory do svojich grafických kariet nVidia celkom oprávnene očakávala, že banner CUDA zaujme mnoho nadšencov v univerzitnom prostredí aj v komerčnom prostredí. A tak sa aj stalo. Projekty založené na CUDA žijú a prinášajú výhody.

NVIDIA PhysX

Pri reklame na svoje ďalšie herné majstrovské dielo výrobcovia často zdôrazňujú jeho 3D realizmus. Ale bez ohľadu na to, aký skutočný môže byť svet 3D hier, ak sa nesprávne implementujú základné fyzikálne zákony, ako je gravitácia, trenie a hydrodynamika, klamstvo pocítime okamžite.

Jednou zo schopností fyzikálneho enginu NVIDIA PhysX je realistická práca s tkanivami.

Implementácia algoritmov na počítačovú simuláciu základných fyzikálnych zákonov je veľmi náročná úloha. Najznámejšími spoločnosťami v tejto oblasti sú írska spoločnosť Havok so svojim multiplatformovým fyzickým Havok Physics a kalifornská Ageia - predchodca prvého fyzického procesora na svete (PPU - Physics Processing Unit) a zodpovedajúceho fyzikálneho enginu PhysX. Prvý z nich, hoci ho získal Intel, teraz aktívne pracuje v oblasti optimalizácie motora Havok pre grafické karty ATI a procesory AMD. Ale Ageia s motorom PhysX sa stala súčasťou nVidie. nVidia zároveň vyriešila pomerne zložitý problém prispôsobenia PhysX technológii CUDA.

To bolo možné vďaka štatistikám. Štatisticky bolo dokázané, že bez ohľadu na to, aké zložité vykresľovanie GPU vykonáva, niektoré jeho jadrá sú stále nečinné. Práve na týchto jadrách beží PhysX engine.

Vďaka CUDA sa leví podiel na výpočtoch súvisiacich s fyzikou herného sveta začal vykonávať na grafickej karte. Uvoľnená sila centrálneho procesora bola využitá na vyriešenie ďalších herných problémov. Výsledok na seba nenechal dlho čakať. Podľa odborníkov sa nárast výkonu v hrateľnosti s PhysX spusteným na CUDA zvýšil minimálne o rád. Zvýšila sa aj pravdepodobnosť uvedomenia si fyzikálnych zákonov. CUDA sa stará o rutinný výpočet implementácie trenia, gravitácie a ďalších vecí, ktoré sú nám známe pre viacrozmerné objekty. Teraz nielen hrdinovia a ich vybavenie dokonale zapadajú do zákonitostí fyzického sveta, ktorý poznáme, ale aj prach, hmla, tlaková vlna, plameň a voda.

CUDA verzia balíka kompresie textúr NVIDIA Texture Tools 2

Máte radi realistické predmety v moderných hrách? Stojí za to povedať vďaka vývojárom textúr. Ale čím viac reality je v textúre, tým väčší je jej objem. O to viac zaberá vzácnu pamäť. Aby sa tomu zabránilo, textúry sú predkomprimované a dynamicky dekomprimované podľa potreby. A kompresia a dekompresia sú čisté výpočty. Pre prácu s textúrami vydala nVidia balík NVIDIA Texture Tools. Podporuje efektívnu kompresiu a dekompresiu DirectX textúr (tzv. HF formát). Druhá verzia tohto balíka sa môže pochváliť podporou pre kompresné algoritmy BC4 a BC5 implementované v technológii DirectX 11. Ale hlavné je, že NVIDIA Texture Tools 2 obsahuje podporu CUDA. Podľa nVidie to poskytuje 12-násobný nárast výkonu pri úlohách kompresie a dekompresie textúr. To znamená, že herné snímky sa budú načítavať rýchlejšie a potešia hráča svojou realitou.

Balík NVIDIA Texture Tools 2 je navrhnutý pre prácu s CUDA. Nárast výkonu pri kompresii a dekompresii textúr je zrejmý.

Použitie CUDA môže výrazne zlepšiť efektivitu video sledovania.

Spracovanie streamu videa v reálnom čase

Čokoľvek sa dá povedať, súčasný svet je z pohľadu špionáže oveľa bližšie k svetu Orwellovho Veľkého brata, ako sa zdá. Pohľady videokamier cítia tak vodiči áut, ako aj návštevníci verejných priestranstiev.

Plné rieky videoinformácií prúdia do centier jej spracovania a... narážajú na úzky článok – osobu. Vo väčšine prípadov je poslednou autoritou monitorujúcou svet videa. Okrem toho autorita nie je najefektívnejšia. Bliká, rozptyľuje sa a snaží sa zaspať.

Vďaka CUDA bolo možné implementovať algoritmy pre simultánne sledovanie viacerých objektov vo video streame. V tomto prípade proces prebieha v reálnom čase a video má plných 30 fps. V porovnaní s implementáciou takéhoto algoritmu na moderných viacjadrových CPU poskytuje CUDA dvoj- alebo trojnásobné zvýšenie výkonu, a to je, ako vidíte, dosť veľa.

Konverzia videa, filtrovanie zvuku

Video konvertor Badaboom je prvý, ktorý používa CUDA na urýchlenie konverzie.

Je príjemné sledovať nový produkt videopožičovne vo FullHD kvalite a na veľkej obrazovke. Na cesty si však so sebou nemôžete vziať veľkú obrazovku a video kodek FullHD bude škytat na nízkoenergetickom procesore mobilného gadgetu. Na pomoc prichádza konverzia. No väčšina z tých, ktorí sa s tým v praxi stretli, sa sťažuje na dlhý čas konverzie. Je to pochopiteľné, proces je rutinný, vhodný na paralelizáciu a jeho vykonávanie na CPU nie je príliš optimálne.

Ale CUDA sa s tým vyrovná s ofinou. Prvým znakom je prevodník Badaboom od Elevental. Vývojári Badaboom urobili správne rozhodnutie pri výbere CUDA. Testy ukazujú, že štandardnú hodinu a pol filmu prevedie do formátu iPhone/iPod Touch za menej ako dvadsať minút. A to aj napriek tomu, že pri použití iba CPU tento proces trvá viac ako hodinu.

Pomáha CUDA a profesionálnym milovníkom hudby. Ktorýkoľvek z nich by dal pol kráľovstva za efektnú FIR výhybku – sadu filtrov, ktoré rozdeľujú zvukové spektrum do niekoľkých pásiem. Tento proces je veľmi náročný na prácu a pri veľkom objeme zvukového materiálu núti zvukára „fajčiť“ niekoľko hodín. Implementácia crossoveru FIR založeného na CUDA stonásobne zrýchľuje jeho prevádzku.

Budúcnosť CUDA

Po tom, čo sa technológia GPGPU stala realitou, CUDA nespí na vavrínoch. Ako všade, aj v CUDA funguje princíp odrazu: vývoj verzií CUDA SDK už neovplyvňuje len architektúra videoprocesorov nVidia, ale samotná technológia CUDA núti nVidiu prehodnotiť architektúru svojich čipov. Príkladom takejto reflexie je platforma nVidia ION. Jeho druhá verzia je špeciálne optimalizovaná pre riešenie problémov CUDA. To znamená, že aj v relatívne lacných hardvérových riešeniach získajú spotrebitelia všetok výkon a vynikajúce schopnosti CUDA.

A je navrhnutý tak, aby preložil kód hostiteľa (hlavný, riadiaci kód) a kód zariadenia (hardvérový kód) (súbory s príponou .cu) do objektových súborov vhodných pre proces zostavovania finálneho programu alebo knižnice v akomkoľvek programovacom prostredí, napr. v NetBeans.

Architektúra CUDA využíva model mriežkovej pamäte, modelovanie klastrových vlákien a inštrukcie SIMD. Použiteľné nielen pre vysokovýkonné grafické výpočty, ale aj pre rôzne vedecké výpočty pomocou grafických kariet nVidia. Vedci a výskumníci široko používajú CUDA v rôznych oblastiach vrátane astrofyziky, výpočtovej biológie a chémie, modelovania dynamiky tekutín, elektromagnetických interakcií, počítačovej tomografie, seizmickej analýzy a ďalších. CUDA má schopnosť pripojiť sa k aplikáciám pomocou OpenGL a Direct3D. CUDA je multiplatformový softvér pre operačné systémy ako Linux, Mac OS X a Windows.

22. marca 2010 nVidia vydala CUDA Toolkit 3.0, ktorý obsahoval podporu pre OpenCL.

Vybavenie

Platforma CUDA sa prvýkrát objavila na trhu s vydaním čipu NVIDIA G80 ôsmej generácie a stala sa prítomnou vo všetkých nasledujúcich sériách grafických čipov, ktoré sa používajú v rodinách akcelerátorov GeForce, Quadro a NVidia Tesla.

Prvá séria hardvéru s podporou CUDA SDK, G8x, mala 32-bitový vektorový procesor s jednoduchou presnosťou využívajúci CUDA SDK ako API (CUDA podporuje typ C double, ale jeho presnosť bola teraz znížená na 32-bitové s pohyblivou rádovou čiarkou). Neskoršie procesory GT200 majú podporu pre 64-bitovú presnosť (iba SFU), ale výkon je výrazne horší ako pre 32-bitovú presnosť (kvôli skutočnosti, že na stream multiprocesoru sú len dve SFU, zatiaľ čo skalárnych procesorov je osem). GPU organizuje hardvérové ​​multithreading, čo vám umožňuje využívať všetky zdroje GPU. Tým sa otvára perspektíva preniesť funkcie fyzického akcelerátora na grafický akcelerátor (príkladom implementácie je nVidia PhysX). Otvára tiež široké možnosti využitia počítačového grafického hardvéru na vykonávanie zložitých negrafických výpočtov: napríklad vo výpočtovej biológii a iných vedných odboroch.

Výhody

V porovnaní s tradičným prístupom k organizovaniu všeobecných výpočtov pomocou grafických API má architektúra CUDA v tejto oblasti nasledujúce výhody:

Obmedzenia

  • Všetky funkcie spustiteľné na zariadení nepodporujú rekurziu (CUDA Toolkit 3.1 podporuje ukazovatele a rekurziu) a majú niektoré ďalšie obmedzenia

Podporované GPU a grafické akcelerátory

Zoznam zariadení od výrobcu zariadení Nvidia s deklarovanou plnou podporou technológie CUDA je uvedený na oficiálnej stránke Nvidia: CUDA-Enabled GPU Products (anglicky).

V skutočnosti nasledujúce periférne zariadenia v súčasnosti podporujú technológiu CUDA na trhu s počítačovým hardvérom:

Verzia špecifikácie GPU Video karty
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, 3/580, 370700x2,3 /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, GTX 000, GTX110, GTX540, GTX5508
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 675MX, 60MX0, GeForce GTX66 GeForce GT 645M, GeForce GT 640M
3.5 GK110
Nvidia GeForce pre stolné počítače
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 pre mobilné počítače
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 pre stolné počítače
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 s nízkym profilom
Quadro FX 370
Quadro FX 370 s nízkym profilom
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 Model IV
Nvidia Quadro pre mobilné počítače
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
  • Modely Tesla C1060, Tesla S1070, Tesla C2050/C2070, Tesla M2050/M2070, Tesla S2050 umožňujú výpočty GPU s dvojnásobnou presnosťou.

Vlastnosti a špecifikácie rôznych verzií

Podpora funkcií (neuvedené funkcie sú
podporované pre všetky výpočtové možnosti)
Výpočtová schopnosť (verzia)
1.0 1.1 1.2 1.3 2.x

32-bitové slová v globálnej pamäti
Nie Áno

hodnoty s pohyblivou rádovou čiarkou v globálnej pamäti
Celočíselné atómové funkcie fungujúce na
32-bitové slová v zdieľanej pamäti
Nie Áno
atomicExch() pracujúci na 32-bit
hodnoty s pohyblivou rádovou čiarkou v zdieľanej pamäti
Celočíselné atómové funkcie fungujúce na
64-bitové slová v globálnej pamäti
Funkcie warp hlasovania
Operácie s pohyblivou rádovou čiarkou s dvojitou presnosťou Nie Áno
Atómové funkcie pracujúce na 64-bit
celočíselné hodnoty v zdieľanej pamäti
Nie Áno
Atómová adícia s pohyblivou rádovou čiarkou funguje
32-bitové slová v globálnej a zdieľanej pamäti
_ballot()
_threadfence_system()
_syncthreads_count(),
_syncthreads_and(),
_syncthreads_or()
Funkcie povrchu
3D mriežka závitových blokov
Technické špecifikácie Výpočtová schopnosť (verzia)
1.0 1.1 1.2 1.3 2.x
Maximálna rozmernosť rastra závitových blokov 2 3
Maximálny rozmer x, y alebo z mriežky blokov závitov 65535
Maximálna rozmernosť závitového bloku 3
Maximálny rozmer x alebo y bloku 512 1024
Maximálny z-rozmer bloku 64
Maximálny počet vlákien na blok 512 1024
Veľkosť osnovy 32
Maximálny počet rezidentných blokov na jeden multiprocesor 8
Maximálny počet rezidentných warps na multiprocesor 24 32 48
Maximálny počet rezidentných vlákien na multiprocesor 768 1024 1536
Počet 32-bitových registrov na multiprocesor 8 tis 16 tis 32 tis
Maximálne množstvo zdieľanej pamäte na jeden multiprocesor 16 kB 48 kB
Počet bánk zdieľanej pamäte 16 32
Množstvo lokálnej pamäte na vlákno 16 kB 512 kB
Konštantná veľkosť pamäte 64 kB
Pracovná súprava vyrovnávacej pamäte na multiprocesor pre stálu pamäť 8 kB
Pracovná súprava vyrovnávacej pamäte na multiprocesor pre pamäť textúr V závislosti od zariadenia, medzi 6 KB a 8 KB
Maximálna šírka pre 1D textúru
8192 32768
Maximálna šírka pre 1D textúru
referencia viazaná na lineárnu pamäť
2 27
Maximálna šírka a počet vrstiev
pre referenciu 1D vrstvenej textúry
8192 x 512 16384 x 2048
Maximálna šírka a výška pre 2D
odkaz na textúru viazaný na
lineárna pamäť alebo pole CUDA
65536 x 32768 65536 x 65535
Maximálna šírka, výška a počet
vrstiev pre referenciu 2D vrstvenej textúry
8192 x 8192 x 512 16384 x 16384 x 2048
Maximálna šírka, výška a hĺbka
pre referenciu 3D textúry viazanú na lineárnu
pamäť alebo pole CUDA
2048 x 2048 x 2048
Maximálny počet textúr, ktoré
môžu byť viazané na jadro
128
Maximálna šírka pre 1D povrch
odkaz viazaný na pole CUDA
nie
podporované
8192
Maximálna šírka a výška pre 2D
povrchová referencia viazaná na pole CUDA
8192 x 8192
Maximálny počet plôch, ktoré
môžu byť viazané na jadro
8
Maximálny počet pokynov na
jadro
2 milióny

Príklad

CudaArray* cu_array; textúra< float , 2 >tex; // Pridelenie poľa cudaMalloc( & cu_array, cudaCreateChannelDesc< float>(), šírka výška) ; // Kopírovanie údajov obrázka do poľa cudaMemcpy( cudaMemcpy, obrázok, šírka* výška, cudaMemcpyHostToDevice) ; // Naviazať pole na textúru cudaBindTexture( tex, cu_array) ; // Spustite kernel dim3 blockDim(16, 16, 1) ; dim3 gridDim(width / blockDim.x, height / blockDim.y, 1) ; jadro<<< gridDim, blockDim, 0 >>> (d_odata, sirka, vyska) ; cudaUnbindTexture(tex) ; __global__ void kernel(float * odata, int výška, int šírka) ( 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* šírka+ x] = c; )

Importovať pycuda.driver ako 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 ) ako dest = numpy.zeros (a) multiply_them( drv.Out (dest) , drv.In (a) , drv.In (b) , block= (400 , 1 , 1 ) ) print dest-a*b

CUDA ako predmet na univerzitách

Od decembra 2009 sa softvérový model CUDA vyučuje na 269 univerzitách po celom svete. V Rusku sa školenia o CUDA poskytujú na Petrohradskej polytechnickej univerzite, Jaroslavľskej štátnej univerzite. P. G. Demidov, Moskva, Nižný Novgorod, Petrohrad, Tver, Kazaň, Novosibirsk, Novosibirská štátna technická univerzita, Štátne univerzity Omsk a Perm, Medzinárodná univerzita povahy spoločnosti a človeka „Dubna“, Štátna energetická univerzita Ivanovo, Štátna univerzita Belgorod , MSTU ich. Bauman, Ruská chemická technická univerzita pomenovaná po. Mendelejev, Medziregionálne superpočítačové centrum RAS, . Okrem toho v decembri 2009 bolo oznámené, že začalo fungovať prvé ruské vedecké a vzdelávacie centrum „Parallel Computing“, ktoré sa nachádza v meste Dubna, medzi ktorého úlohy patrí školenie a konzultácie o riešení zložitých výpočtových problémov na GPU.

Na Ukrajine sa kurzy CUDA vyučujú na Kyjevskom inštitúte systémovej analýzy.

Odkazy

Oficiálne zdroje

  • CUDA Zone (rusky) - oficiálna stránka CUDA
  • CUDA GPU Computing (anglicky) - oficiálne webové fóra venované počítačom CUDA

Neoficiálne zdroje

Tomov hardvér
  • Dmitrij Čekanov. nVidia CUDA: výpočty na grafickej karte alebo smrť CPU? . Tom's Hardware (22. júna 2008). Archivované
  • Dmitrij Čekanov. nVidia CUDA: Benchmarking GPU aplikácií pre masový trh. Tom's Hardware (19. mája 2009). Archivované z originálu 4. marca 2012. Získané 19. mája 2009.
iXBT.com
  • Alexey Berillo. NVIDIA CUDA - negrafické výpočty na GPU. Časť 1 . iXBT.com (23. september 2008). Archivované z originálu 4. marca 2012. Získané 20. januára 2009.
  • Alexey Berillo. NVIDIA CUDA - negrafické výpočty na GPU. Časť 2 . iXBT.com (22. októbra 2008). - Príklady implementácie NVIDIA CUDA. Archivované z originálu 4. marca 2012. Získané 20. januára 2009.
Iné zdroje
  • Boreskov Alexej Viktorovič. Základy CUDA (20. januára 2009). Archivované z originálu 4. marca 2012. Získané 20. januára 2009.
  • Vladimír Frolov.Úvod do technológie CUDA. Online časopis „Počítačová grafika a multimédiá“ (19. decembra 2008). Archivované z originálu 4. marca 2012. Získané 28. októbra 2009.
  • Igor Oskolkov. NVIDIA CUDA je cenovo dostupná vstupenka do sveta veľkých počítačov. Computerra (30. apríla 2009). Získané 3. mája 2009.
  • Vladimír Frolov.Úvod do technológie CUDA (1. august 2009). Archivované z originálu 4. marca 2012. Získané 3. apríla 2010.
  • GPGPU.ru. Používanie grafických kariet na prácu s počítačom
  • . Centrum paralelných výpočtov

Poznámky

pozri tiež

Vo vývoji moderných procesorov je tendencia k postupnému zvyšovaniu počtu jadier, čím sa zvyšujú ich možnosti pri paralelných výpočtoch. Už dlho sú však dostupné GPU, ktoré v tomto smere výrazne prevyšujú CPU. A tieto schopnosti GPU už niektoré spoločnosti brali do úvahy. Prvé pokusy o využitie grafických akcelerátorov pre necieľové výpočty sa uskutočnili od konca 90. rokov. Ale až vznik shaderov sa stal impulzom pre vývoj úplne novej technológie a v roku 2003 sa objavil koncept GPGPU (General-purpose graphics processing units). Dôležitú úlohu pri vývoji tejto iniciatívy zohral BrookGPU, čo je špeciálne rozšírenie pre jazyk C. Pred príchodom BrookGPU mohli programátori pracovať s GPU len cez Direct3D alebo OpenGL API. Brook umožnil vývojárom pracovať so známym prostredím a samotný kompilátor pomocou špeciálnych knižníc implementoval interakciu s GPU na nízkej úrovni.

Takýto pokrok nemohol pritiahnuť pozornosť lídrov tohto odvetvia - AMD a NVIDIA, ktorí začali vyvíjať svoje vlastné softvérové ​​platformy pre negrafické výpočty na svojich grafických kartách. Nikto nepozná lepšie ako vývojári GPU všetky nuansy a vlastnosti svojich produktov, čo tým istým spoločnostiam umožňuje čo najefektívnejšie optimalizovať softvérový balík pre konkrétne hardvérové ​​riešenia. V súčasnosti NVIDIA vyvíja platformu CUDA (Compute Unified Device Architecture), AMD podobnú technológiu nazýva CTM (Close To Metal) alebo AMD Stream Computing. Pozrieme sa na niektoré možnosti CUDA a v praxi zhodnotíme výpočtové možnosti grafického čipu G92 grafickej karty GeForce 8800 GT.

Najprv sa však pozrime na niektoré nuansy vykonávania výpočtov pomocou GPU. Ich hlavnou výhodou je, že grafický čip je pôvodne navrhnutý na vykonávanie viacerých vlákien, zatiaľ čo každé jadro bežného CPU vykonáva prúd sekvenčných inštrukcií. Každý moderný GPU je multiprocesor pozostávajúci z niekoľkých výpočtových klastrov s mnohými ALU v každom. Najvýkonnejší moderný čip GT200 pozostáva z 10 takýchto klastrov, z ktorých každý má 24 stream procesorov. Testovaná grafická karta GeForce 8800 GT založená na čipe G92 má sedem veľkých výpočtových jednotiek so 16 stream procesormi. CPU používajú SIMD SSE bloky na vektorové výpočty (jedna inštrukcia viac dát - jedna inštrukcia je vykonaná na viacerých dátach), čo vyžaduje transformáciu dát do 4 vektorov. GPU spracováva vlákna skalárne, t.j. jedna inštrukcia je aplikovaná cez niekoľko vlákien (SIMT - single inštrukcie multiple threads). To šetrí vývojárov od konverzie údajov na vektory a umožňuje ľubovoľné vetvenie v prúdoch. Každá výpočtová jednotka GPU má priamy prístup do pamäte. A šírka pásma videopamäte je vyššia vďaka použitiu niekoľkých samostatných pamäťových radičov (na špičkovom G200 je 8 64-bitových kanálov) a vysokým prevádzkovým frekvenciám.

Vo všeobecnosti sú pri určitých úlohách pri práci s veľkým množstvom údajov GPU oveľa rýchlejšie ako CPU. Nižšie vidíte ilustráciu tohto vyhlásenia:


Graf ukazuje dynamiku rastu výkonu CPU a GPU od roku 2003. NVIDIA vo svojich dokumentoch rada uvádza tieto údaje ako reklamu, no ide len o teoretické výpočty a v skutočnosti sa môže rozdiel, samozrejme, ukázať oveľa menší.

Nech je to však akokoľvek, je tu obrovský potenciál GPU, ktorý sa dá využiť a ktorý si vyžaduje špecifický prístup k vývoju softvéru. To všetko je implementované v hardvérovom a softvérovom prostredí CUDA, ktoré pozostáva z niekoľkých softvérových úrovní – vysokoúrovňové CUDA Runtime API a nízkoúrovňové CUDA Driver API.


CUDA používa na programovanie štandardný jazyk C, čo je jedna z jeho hlavných výhod pre vývojárov. Spočiatku CUDA obsahuje knižnice BLAS (balík základnej lineárnej algebry) a FFT (Fourierova transformácia). CUDA má tiež schopnosť interagovať s grafickými API OpenGL alebo DirectX, schopnosťou vývoja na nízkej úrovni a vyznačuje sa optimalizovanou distribúciou dátových tokov medzi CPU a GPU. Výpočty CUDA sa vykonávajú súčasne s grafickými, na rozdiel od podobnej platformy AMD, kde sa na výpočty na GPU spúšťa špeciálny virtuálny stroj. Takéto „spolužitie“ je však tiež plné chýb, ak grafické rozhranie API vytvára veľké zaťaženie počas súčasného spustenia CUDA - koniec koncov, grafické operácie majú stále vyššiu prioritu. Platforma je kompatibilná s 32- a 64-bitovými operačnými systémami Windows XP, Windows Vista, MacOS X a rôznymi verziami Linuxu. Platforma je otvorená a na webovej stránke si okrem špeciálnych ovládačov pre grafickú kartu môžete stiahnuť softvérové ​​balíky CUDA Toolkit, CUDA Developer SDK vrátane kompilátora, debuggeru, štandardných knižníc a dokumentácie.

Čo sa týka praktickej implementácie CUDA, dlho sa táto technológia používala len na vysoko špecializované matematické výpočty v oblasti časticovej fyziky, astrofyziky, medicíny či predpovedania zmien na finančnom trhu a pod. No táto technológia sa postupne približuje aj bežným používateľom, objavujú sa najmä špeciálne plug-iny pre Photoshop, ktoré dokážu využiť výpočtový výkon GPU. Na špeciálnej stránke si môžete preštudovať celý zoznam programov, ktoré využívajú možnosti NVIDIA CUDA.

Ako praktický test novej technológie na grafickej karte MSI NX8800GT-T2D256E-OC použijeme program TMPGEnc. Tento produkt je komerčný (plná verzia stojí 100 USD), ale pre grafické karty MSI prichádza ako bonus v skúšobnej verzii na obdobie 30 dní. Túto verziu si môžete stiahnuť z webovej stránky vývojára, ale na inštaláciu TMPGEnc 4.0 XPress MSI Special Edition potrebujete originálny disk s ovládačmi z karty MSI - bez neho sa program nenainštaluje.

Ak chcete zobraziť najúplnejšie informácie o výpočtových schopnostiach v CUDA a porovnať ich s inými grafickými adaptérmi, môžete použiť špeciálny nástroj CUDA-Z. Toto sú informácie, ktoré poskytuje o našej grafickej karte GeForce 8800GT:




V porovnaní s referenčnými modelmi naša kópia pracuje na vyšších frekvenciách: rastrová doména je o 63 MHz vyššia ako nominálna a shader jednotky sú rýchlejšie o 174 MHz a pamäť je o 100 MHz rýchlejšia.

Rýchlosť konverzie rovnakého HD videa porovnáme pri výpočte len s použitím CPU a s dodatočnou aktiváciou CUDA v programe TMPGEnc na nasledujúcej konfigurácii:

  • Procesor: Pentium Dual-Core E5200 2,5 GHz;
  • Základná doska: Gigabyte P35-S3;
  • Pamäť: 2x1GB GoodRam PC6400 (5-5-5-18-2T)
  • Grafická karta: MSI NX8800GT-T2D256E-OC;
  • Pevný disk: 320 GB WD3200AAKS;
  • Napájanie: CoolerMaster eXtreme Power 500-PCAP;
  • Operačný systém: Windows XP SP2;
  • TMPGEnc 4.0 XPress 4.6.3.268;
  • Ovládače grafickej karty: ForceWare 180.60.
Pre testy bol procesor pretaktovaný na 3 GHz (v konfigurácii 11,5x261 MHz) a na 4 GHz (11,5x348 MHz) s frekvenciou RAM 835 MHz v prvom a druhom prípade. Video v rozlíšení Full HD 1920 x 1080 s dĺžkou jednej minúty a dvadsať sekúnd. Na vytvorenie dodatočného zaťaženia bol zapnutý filter redukcie šumu, ktorého nastavenia boli ponechané v predvolenom nastavení.


Kódovanie bolo vykonané pomocou kodeku DivX 6.8.4. V nastaveniach kvality tohto kodeku sú všetky hodnoty ponechané v predvolenom nastavení, multithreading je povolený.


Podpora viacerých vlákien v TMPGEnc je pôvodne povolená na karte nastavení CPU/GPU. V rovnakej sekcii sa aktivuje aj CUDA.


Ako môžete vidieť na obrázku vyššie, spracovanie filtra pomocou CUDA je povolené, ale hardvérový dekodér videa nie je povolený. Programová dokumentácia upozorňuje, že aktivácia posledného parametra zvyšuje čas spracovania súboru.

Na základe výsledkov testov sa získali nasledujúce údaje:


Pri 4 GHz s povolenou CUDA sme získali len pár sekúnd (alebo 2 %), čo nie je nijak zvlášť pôsobivé. Ale pri nižšej frekvencii vám zvýšenie aktivácie tejto technológie umožňuje ušetriť asi 13% času, čo bude dosť viditeľné pri spracovaní veľkých súborov. Výsledky však stále nie sú také pôsobivé, ako sa očakávalo.

Program TMPGEnc má indikátor záťaže CPU a CUDA, v tejto testovacej konfigurácii ukázal záťaž CPU na cca 20% a grafické jadro na zvyšných 80%. Vo výsledku máme rovnakých 100% ako pri prevode bez CUDA a vôbec nemusí byť časový rozdiel (ale stále existuje). Limitujúcim faktorom nie je ani malá kapacita pamäte 256 MB. Súdiac podľa údajov z RivaTuner, počas prevádzky nebolo použitých viac ako 154 MB video pamäte.



závery

Program TMPGEnc je jedným z tých, ktoré predstavujú technológiu CUDA masám. Použitie GPU v tomto programe umožňuje zrýchliť proces spracovania videa a výrazne odbremeniť centrálny procesor, čo používateľovi umožní pohodlne vykonávať iné úlohy súčasne. V našom konkrétnom príklade grafická karta GeForce 8800GT 256 MB mierne zlepšila výkon časovania pri konverzii videa na základe pretaktovaného procesora Pentium Dual-Core E5200. Ale je jasne viditeľné, že so znižovaním frekvencie sa zvyšuje zisk z aktivácie CUDA, na slabých procesoroch bude zisk z jeho používania oveľa väčší. Na pozadí tejto závislosti je celkom logické predpokladať, že aj pri zvýšení zaťaženia (napríklad pri použití veľmi veľkého počtu dodatočných videofiltrov) sa výsledky systému s CUDA budú líšiť o viac významný rozdiel rozdielu v čase strávenom procesom kódovania. Nezabudnite tiež, že G92 nie je momentálne najvýkonnejší čip a modernejšie grafické karty poskytnú v takýchto aplikáciách výrazne vyšší výkon. Kým je však aplikácia spustená, GPU nie je plne vyťažené a rozloženie záťaže pravdepodobne závisí od každej konfigurácie zvlášť, konkrétne od kombinácie procesor/grafická karta, čo môže v konečnom dôsledku spôsobiť väčšie (alebo menšie) zvýšenie v percentách. aktivácie CUDA. Každopádne tým, ktorí pracujú s veľkými objemami video dát, táto technológia predsa len umožní výrazne ušetriť čas.

Je pravda, že CUDA si zatiaľ nezískal veľkú popularitu, kvalita softvéru pracujúceho s touto technológiou si vyžaduje zlepšenie. V programe TMPGEnc 4.0 XPress, ktorý sme recenzovali, táto technológia nie vždy fungovala. To isté video bolo možné niekoľkokrát prekódovať a potom zrazu pri ďalšom spustení bolo zaťaženie CUDA už 0 %. A tento jav bol úplne náhodný na úplne iných operačných systémoch. Dotyčný program tiež odmietol použiť CUDA pri kódovaní do formátu XviD, ale s populárnym kodekom DivX neboli žiadne problémy.

Výsledkom je, že doteraz technológia CUDA dokáže výrazne zvýšiť výkon osobných počítačov len v určitých úlohách. Rozsah použitia takejto technológie sa však bude rozširovať a proces zvyšovania počtu jadier v konvenčných procesoroch naznačuje zvýšenie dopytu po paralelných viacvláknových výpočtoch v moderných softvérových aplikáciách. Nie nadarmo sú v poslednej dobe všetci lídri v tomto odvetví posadnutí myšlienkou spojenia CPU a GPU v rámci jednej zjednotenej architektúry (len si spomeňte na toľko propagovaný AMD Fusion). Možno je CUDA jednou z etáp v procese tohto zjednotenia.


Za poskytnutie testovacieho zariadenia ďakujeme nasledujúcim spoločnostiam:

– súbor nízkoúrovňových softvérových rozhraní ( API) na vytváranie hier a iných vysokovýkonných multimediálnych aplikácií. Zahŕňa podporu vysokého výkonu 2D- A 3D-grafika, zvuk a vstupné zariadenia.

Direct3D (D3D) – rozhranie na zobrazenie trojrozmerného priestoru primitívov(geometrické telesá). Zahrnuté v .

OpenGL(z angličtiny Otvorte grafickú knižnicu, doslova - otvorená grafická knižnica) je špecifikácia, ktorá definuje multiplatformové programovacie rozhranie nezávislé na programovacom jazyku na písanie aplikácií pomocou dvojrozmernej a trojrozmernej počítačovej grafiky. Obsahuje viac ako 250 funkcií na kreslenie zložitých 3D scén z jednoduchých primitív. Používa sa na vytváranie videohier, virtuálnej reality a vizualizácií vo vedeckom výskume. Na platforme Windows súťaží s .

OpenCL(z angličtiny Otvorte počítačový jazyk, doslova – otvorený jazyk výpočtov) – rámec(softvérový systémový framework) na písanie počítačových programov súvisiacich s paralelným výpočtom na rôznych grafických ( GPU) A ( ). Do rámca OpenCL obsahuje programovací jazyk a aplikačné programovacie rozhranie ( API). OpenCL poskytuje paralelizmus na úrovni inštrukcie a na úrovni údajov a je implementáciou tejto techniky GPGPU.

GPGPU(skrátené z angličtiny) G rafické spracovateľské jednotky na všeobecné použitie, doslova - GPU všeobecný účel) je technika na použitie grafickej procesorovej jednotky (GPU) alebo grafickej karty na všeobecné výpočty, ktoré zvyčajne vykonáva počítač.

Shader(Angličtina) shader) – program na vytváranie tieňov na syntetizovaných obrázkoch, používaný v trojrozmernej grafike na určenie konečných parametrov objektu alebo obrázku. Typicky zahŕňa ľubovoľne zložité popisy absorpcie a rozptylu svetla, mapovanie textúr, odraz a lom, tieňovanie, posun povrchu a efekty následného spracovania. Zložité povrchy je možné vizualizovať pomocou jednoduchých geometrických tvarov.

Vykresľovanie(Angličtina) vykresľovanie) – vizualizácia, v počítačovej grafike proces získavania obrazu z modelu pomocou softvéru.

SDK(skrátené z angličtiny) Súprava na vývoj softvéru) – súbor nástrojov na vývoj softvéru.

CPU(skrátené z angličtiny) Centrálna procesorová jednotka, doslova – centrálne/hlavné/hlavné výpočtové zariadenie) – centrálne (mikro);zariadenie, ktoré vykonáva strojové inštrukcie; časť hardvéru zodpovedná za vykonávanie výpočtových operácií (špecifikovaných operačným systémom a aplikačným softvérom) a koordináciu prevádzky všetkých zariadení.

GPU(skrátené z angličtiny) Jednotka grafického spracovania, doslova – grafické výpočtové zariadenie) – grafický procesor; samostatné zariadenie alebo herná konzola, ktorá vykonáva grafické vykresľovanie (vizualizáciu). Moderné GPU sú veľmi efektívne pri spracovaní a zobrazovaní počítačovej grafiky realistickým spôsobom. Grafický procesor v moderných video adaptéroch sa používa ako 3D grafický akcelerátor, ale v niektorých prípadoch ho možno použiť aj na výpočty ( GPGPU).

Problémy CPU

K nárastu výkonu tradičných dochádzalo dlhodobo najmä v dôsledku dôsledného zvyšovania taktovacej frekvencie (asi 80 % výkonu bolo determinovaných taktovacou frekvenciou) so súčasným zvyšovaním počtu tranzistorov na jednom čipe. . Ďalšie zvýšenie taktovacej frekvencie (pri frekvencii vyššej ako 3,8 GHz sa čipy jednoducho prehrievajú!) však naráža na množstvo základných fyzických prekážok (keďže technologický proces sa takmer priblížil veľkosti atómu: , a veľkosť atómu kremíka je približne 0,543 nm):

Po prvé, keď sa veľkosť kryštálu zmenšuje a frekvencia hodín sa zvyšuje, zvodový prúd tranzistorov sa zvyšuje. To vedie k zvýšenej spotrebe energie a zvýšeným emisiám tepla;

Po druhé, výhody vyšších rýchlostí hodín sú čiastočne negované oneskorením prístupu do pamäte, pretože časy prístupu do pamäte nedržia krok so zvyšujúcou sa rýchlosťou hodín;

Po tretie, v prípade niektorých aplikácií sa tradičné sériové architektúry stávajú neefektívne, pretože rýchlosť hodín sa zvyšuje v dôsledku takzvaného „von Neumannovho úzkeho miesta“, čo je obmedzenie výkonu vyplývajúce zo sekvenčného výpočtového toku. Súčasne sa zvyšujú oneskorenia prenosu odporovo-kapacitného signálu, čo je ďalšie úzke miesto spojené so zvýšením taktovacej frekvencie.

rozvoj GPU

Paralelne s tým prebiehal (a prebieha!) vývoj GPU:

november 2008 – Intel predstavil rad 4 jadier Intel Core i7, ktoré sú založené na mikroarchitektúre novej generácie Nehalem. Procesory pracujú na taktovacej frekvencii 2,6-3,2 GHz. Vyrobené pomocou 45nm procesnej technológie.

December 2008 – začali sa dodávky 4 jadier AMD Phenom II 940(kódové meno - Deneb). Pracuje na frekvencii 3 GHz, vyrába sa pomocou 45-nm technológie.

máj 2009 – spol AMD predstavila verziu GPU Grafická karta ATI Radeon HD 4890 s taktom jadra zvýšeným z 850 MHz na 1 GHz. Toto je prvé grafický procesor s frekvenciou 1 GHz. Výpočtový výkon čipu sa vďaka zvýšeniu frekvencie zvýšil z 1,36 na 1,6 teraflopov. Procesor obsahuje 800 (!) výpočtových jadier a podporuje video pamäť GDDR5, DirectX 10.1, ATI CrossFireX a všetky ostatné technológie vlastné moderným modelom grafických kariet. Čip je vyrobený na báze 55 nm technológie.

Hlavné rozdiely GPU

Charakteristické rysy GPU(v porovnaní s ) sú:

– architektúra maximálne zameraná na zvýšenie rýchlosti výpočtu textúr a zložitých grafických objektov;

– typický špičkový výkon GPU oveľa vyššie ;

– vďaka špecializovanej architektúre dopravníka, GPU oveľa efektívnejšie pri spracovaní grafických informácií ako .

"Kríza žánru"

„Žánrová kríza“ pre dozreli v roku 2005 – vtedy sa objavili. Ale aj napriek rozvoju technológie, zvýšenie produktivity konvenčných citeľne klesla. Zároveň výkon GPU naďalej rastie. Takže v roku 2003 sa táto revolučná myšlienka vykryštalizovala - využite výpočtový výkon grafiky pre svoje potreby. GPU sa čoraz viac používajú na „negrafické“ výpočty (fyzikálna simulácia, spracovanie signálov, výpočtová matematika/geometria, operácie s databázami, výpočtová biológia, výpočtová ekonómia, počítačové videnie atď.).

Hlavným problémom bolo, že neexistovalo štandardné programovacie rozhranie GPU. Vývojári použili OpenGL alebo Direct3D, ale bolo to veľmi pohodlné. Corporation NVIDIA(jeden z najväčších výrobcov grafických, mediálnych a komunikačných procesorov, ako aj bezdrôtových mediálnych procesorov; založená v roku 1993) začala vyvíjať jednotný a pohodlný štandard - a predstavila technológiu CUDA.

Ako to začalo

2006 – NVIDIA demonštruje CUDA™; začiatok revolúcie vo výpočtovej technike GPU.

2007 – NVIDIA uvoľňuje architektúru CUDA(originálna verzia CUDA SDK bola podaná 15. februára 2007); nominácia časopisu „Najlepší nový produkt“. Populárna veda a „Voľba čitateľov“ z publikácie HPCWire.

2008 – technológia NVIDIA CUDA vyhral kategóriu „Technická dokonalosť“. PC magazín.

Čo sa stalo CUDA

CUDA(skrátené z angličtiny) Zjednotená architektúra zariadení Compute, doslova - jednotná výpočtová architektúra zariadení) - architektúra (súbor softvéru a hardvéru), ktorá umožňuje vyrábať na GPU všeobecné výpočty, zatiaľ čo GPU v skutočnosti funguje ako výkonný koprocesor.

Technológia NVIDIA CUDA™ je jediné vývojové prostredie v programovacom jazyku C, ktorá umožňuje vývojárom vytvárať softvér, ktorý rieši zložité výpočtové problémy v kratšom čase, vďaka výpočtovému výkonu GPU. Vo svete už pracujú milióny ľudí GPU s podporou CUDA a tisíce programátorov už používajú (bezplatné!) nástroje CUDA na urýchlenie aplikácií a riešenie najzložitejších úloh náročných na zdroje – od kódovania videa a zvuku až po prieskum ropy a zemného plynu, modelovanie produktov, lekárske zobrazovanie a vedecký výskum.

CUDA dáva vývojárovi možnosť podľa vlastného uváženia organizovať prístup k súboru inštrukcií grafického akcelerátora a spravovať jeho pamäť a organizovať na ňom zložité paralelné výpočty. Podpora grafického akcelerátora CUDA sa stáva výkonnou programovateľnou otvorenou architektúrou, podobnou dnešnej . To všetko poskytuje vývojárom nízkoúrovňový, distribuovaný a vysokorýchlostný prístup k hardvéru CUDA nevyhnutný základ pre budovanie serióznych nástrojov na vysokej úrovni, ako sú kompilátory, debuggery, matematické knižnice a softvérové ​​platformy.

Uralsky, popredný technologický špecialista NVIDIA, porovnávanie GPU A , hovorí toto: „ - Toto je SUV. Jazdí vždy a všade, no nie veľmi rýchlo. A GPU- Toto je športové auto. Na zlej ceste jednoducho nikam nepôjde, ale dá mu dobrý povrch a ukáže svoju rýchlosť, o akej sa SUV ani nesnívalo!...

Technologické schopnosti CUDA