Počítačový zdroj U SM. Kam vede cuda: praktická aplikace technologie gpgpu - nejlepší vybavení Aplikace, které běží na cuda

Po desetiletí platí Moorův zákon, který říká, že každé dva roky se počet tranzistorů na čipu zdvojnásobí. To však bylo v roce 1965 a za posledních 5 let se myšlenka fyzických vícejádrových procesorů začala rychle rozvíjet: v roce 2005 Intel představil Pentium D a AMD představilo Athlon X2. Tehdy se aplikace využívající 2 jádra daly spočítat na prstech jedné ruky. Další generace procesorů Intel, která udělala revoluci, však měla rovnou 2 fyzická jádra. Série Quad se navíc objevila v lednu 2007, kdy sám Moore připustil, že jeho zákon brzy přestane platit.

Co teď? Dvoujádrové procesory i v levných kancelářských systémech a 4 fyzická jádra se staly normou, a to za pouhé 2-3 roky. Nezvýší se frekvence procesorů, ale zlepší se architektura, zvýší se počet fyzických a virtuálních jader. Myšlenka použití video adaptérů vybavených desítkami nebo dokonce stovkami výpočetních „jednotek“ je však již dlouho.

A ačkoli jsou vyhlídky na GPU computing obrovské, nejoblíbenějším řešením je Nvidia CUDA, která je zdarma, má spoustu dokumentace a obecně se velmi snadno implementuje, aplikací využívajících tuto technologii není mnoho. V podstatě se jedná o všelijaké specializované výpočty, o které běžný uživatel ve většině případů nestojí. Existují ale i programy určené pro masového uživatele a o nich si povíme v tomto článku.

Nejprve něco o technologii samotné a s čím se používá. Protože Při psaní článku se zaměřuji na široké spektrum čtenářů, proto se jej pokusím vysvětlit přístupným jazykem bez složitých termínů a poněkud stručně.

CUDA(anglicky: Compute Unified Device Architecture) je softwarová a hardwarová architektura, která umožňuje provádět výpočty pomocí grafických procesorů NVIDIA podporujících technologii GPGPU (random computing na grafických kartách). Architektura CUDA se poprvé objevila na trhu s vydáním osmé generace čipu NVIDIA - G80 a je přítomna ve všech následujících sériích grafických čipů, které se používají v rodinách akcelerátorů GeForce, Quadro a Tesla. (c) Wikipedia.org

Příchozí toky jsou zpracovávány nezávisle na sobě, tzn. paralelní.

Je zde rozdělení do 3 úrovní:

Mřížka- jádro. Obsahuje jedno/dvou/trojrozměrné pole bloků.

Blok– obsahuje mnoho vláken. Vlákna různých bloků spolu nemohou interagovat. Proč bylo nutné zavádět bloky? Každý blok je v podstatě zodpovědný za svůj vlastní dílčí úkol. Například velký obrázek (což je matice) lze rozdělit na několik menších částí (matic) a pracovat s každou částí obrázku paralelně.

Vlákno– proudění. Vlákna v rámci jednoho bloku mohou interagovat buď prostřednictvím sdílené paměti, která je mimochodem mnohem rychlejší než globální paměť, nebo pomocí nástrojů pro synchronizaci vláken.

Warp je spojení vláken, která se vzájemně ovlivňují, pro všechny moderní GPU je velikost Warp 32. poloviční osnova, což je polovina warpu, protože Přístup do paměti se obvykle vyskytuje samostatně pro první a druhou polovinu warpu.

Jak můžete vidět, tato architektura je vynikající pro paralelizaci úloh. A přestože programování probíhá v jazyce C s jistými omezeními, ve skutečnosti není vše tak jednoduché, protože... ne všechno jde paralelizovat. Neexistují ani standardní funkce pro generování náhodných čísel (nebo inicializaci), to vše je nutné implementovat samostatně. A přestože existuje spousta hotových možností, nic z toho nepřináší radost. Možnost používat rekurzi se objevila relativně nedávno.

Pro názornost byl napsán malý konzolový program (pro minimalizaci kódu), který provádí operace se dvěma poli typu float, tzn. s neceločíselnými hodnotami. Z výše uvedených důvodů inicializaci (naplnění pole různými libovolnými hodnotami) provedl CPU. Dále bylo provedeno 25 různých operací s odpovídajícími prvky z každého pole, mezivýsledky byly zapsány do třetího pole. Velikost pole se změnila, výsledky jsou následující:

Celkem byly provedeny 4 testy:

1024 prvků v každém poli:

Je jasně vidět, že s tak malým počtem prvků je paralelní počítání málo užitečné, protože Samotné výpočty jsou mnohem rychlejší než jejich příprava.

4096 prvků v každém poli:

A nyní můžete vidět, že grafická karta provádí operace na polích 3krát rychleji než procesor. Kromě toho se doba provádění tohoto testu na grafické kartě nezvýšila (mírné snížení času lze připsat chybě).

V každém poli je nyní 12288 prvků:

Oddělení grafické karty se zvýšilo 2krát. Opět stojí za zmínku, že doba provádění na grafické kartě se zvýšila
nevýznamně, ale na procesoru více než 3x, tzn. úměrné složitosti úkolu.

A poslední test je 36864 prvků v každém poli:

V tomto případě dosahuje zrychlení působivých hodnot - téměř 22krát rychlejší na grafické kartě. A opět se doba provádění na grafické kartě mírně zvýšila, ale na procesoru - požadovaný 3krát, což je opět úměrné složitosti úlohy.

Pokud budete i nadále komplikovat výpočty, grafická karta vyhrává stále více. I když je příklad poněkud nadsazený, celková situace jasně ukazuje. Ale jak již bylo zmíněno výše, ne vše lze paralelizovat. Například výpočet Pi. Jsou zde pouze příklady psané metodou Monte Carlo, ale přesnost výpočtů je na 7 desetinných míst, tzn. pravidelný plovák. Aby se zvýšila přesnost výpočtů, je zapotřebí dlouhá aritmetika, a to je místo, kde vznikají problémy, protože Je velmi, velmi obtížné toto efektivně implementovat. Na internetu jsem nenašel příklady, které používají CUDA a počítají Pi na 1 milion desetinných míst. Byly učiněny pokusy napsat takovou aplikaci, ale nejjednodušší a nejúčinnější metodou pro výpočet Pi je Brent-Salaminův algoritmus nebo Gaussův vzorec. Známý SuperPI s největší pravděpodobností (soudě podle rychlosti operace a počtu iterací) používá Gaussův vzorec. A soudě podle
Vzhledem k tomu, že SuperPI je jednovláknové, nedostatku příkladů pod CUDA a neúspěchu mých pokusů, je nemožné efektivně paralelizovat počítání Pi.

Mimochodem, můžete si všimnout, jak se během výpočtů zvyšuje zatížení GPU a alokována je také paměť.

Nyní přejděme k praktičtějším výhodám CUDA, konkrétně k aktuálně existujícím programům, které tuto technologii využívají. Z velké části se jedná o všechny druhy audio/video převodníků a editorů.

Při testování byly použity 3 různé video soubory:

      *Historie vzniku filmu Avatar - 1920x1080, MPEG4, h.264.
      *Série "Lie to me" - 1280x720, MPEG4, h.264.
      *Série „Ve Philadelphii je vždy slunečno“ - 624x464, xvid.

Kontejner a velikost prvních dvou souborů byly .mkv a 1,55 GB a poslední byl .avi a 272 MB.

Začněme velmi senzačním a oblíbeným produktem - Badaboom. Použitá verze - 1.2.1.74 . Cena programu je $29.90 .

Rozhraní programu je jednoduché a intuitivní - vlevo vybereme zdrojový soubor nebo disk a vpravo - požadované zařízení, pro které budeme kódovat. K dispozici je také uživatelský režim, ve kterém se parametry nastavují ručně, což jsme použili.

Nejprve se podívejme, jak rychle a efektivně je video zakódováno „do sebe“, tzn. stejné rozlišení a přibližně stejnou velikost. Rychlost budeme měřit ve fps, nikoli v uplynulém čase – takto je pohodlnější porovnávat a spočítat, jak moc bude komprimováno video libovolné délky. Protože Dnes uvažujeme o „zelené“ technologii, pak budou grafy odpovídat -)

Rychlost kódování přímo závisí na kvalitě, to je zřejmé. Za zmínku stojí, že světelné rozlišení (říkejme mu tradičně SD) není pro Badaboom problém – rychlost kódování je 5,5krát vyšší než původní (24 fps) snímková frekvence videa. A dokonce i těžké 1080p video převede program v reálném čase. Za zmínku stojí, že kvalita výsledného videa je velmi blízká původnímu videomateriálu, tzn. Badaboom kóduje velmi, velmi efektivně.

Většinou ale převádějí video do nižšího rozlišení, podívejme se, jak se věci mají v tomto režimu. S poklesem rozlišení se snížil i datový tok videa. Bylo to 9500 kbps pro výstupní soubor 1080p, 4100 kbps pro 720p a 2400 kbps pro 720x404. Volba byla provedena na základě rozumného poměru velikost/kvalita.

Komentáře nejsou potřeba. Pokud provedete rip z 720p do běžné SD kvality, pak překódování filmu trvajícího 2 hodiny zabere asi 30 minut. A zároveň bude zatížení procesoru zanedbatelné, můžete se věnovat své práci bez pocitu nepohodlí.

Co když video převedete do formátu pro mobilní zařízení? Chcete-li to provést, vyberte profil iPhone (bitrate 1 Mbit/s, 480x320) a podívejte se na rychlost kódování:

Musím něco říct? Dvouhodinový film v normální kvalitě pro iPhone je překódován za méně než 15 minut. S HD kvalitou je to obtížnější, ale stále velmi rychlé. Hlavní je, že kvalita výstupního videa zůstává na poměrně vysoké úrovni při prohlížení na displeji telefonu.

Obecně jsou dojmy z Badaboom pozitivní, rychlost ovládání potěší, rozhraní jednoduché a přehledné. Všechny druhy chyb v dřívějších verzích (použil jsem beta verzi v roce 2008) byly opraveny. Až na jednu věc - cesta ke zdrojovému souboru, stejně jako ke složce, ve které je hotové video uloženo, by neměla obsahovat ruská písmena. Ale ve srovnání s výhodami programu je tato nevýhoda zanedbatelná.

Další v řadě budeme mít Super LoiLoScope. Ptají se na běžnou verzi 3 280 rublů a za dotykovou verzi podporující dotykové ovládání ve Windows 7 si žádají tolik 4 440 rublů. Zkusme přijít na to, proč chce vývojář takové peníze a proč editor videa potřebuje multitouch podporu. Poslední použitá verze - 1.8.3.3 .

Je docela těžké popsat rozhraní programu slovy, proto jsem se rozhodl natočit krátké video. Hned řeknu, že stejně jako všechny video konvertory pro CUDA je GPU akcelerace podporována pouze pro video výstup do MPEG4 s kodekem h.264.

Během kódování je zatížení procesoru 100%, ale nezpůsobuje to nepohodlí. Prohlížeč a další lehké aplikace se nezpomalují.

Nyní přejděme k výkonu. Pro začátek je vše stejné jako u Badaboom – překódování videa do podobného v kvalitě.

Výsledky jsou mnohem lepší než Badaboom. Kvalita je také výborná, rozdíl oproti originálu lze poznat pouze porovnáním rámečků ve dvojici pod lupou.

Páni, tady LoiloScope překonává Badaboom 2,5krát. Přitom můžete jednoduše paralelně stříhat a kódovat další video, číst zprávy a třeba i sledovat filmy a bez problémů se přehrává i FullHD, i když je vytížení procesoru maximální.

Nyní zkusme udělat video pro mobilní zařízení, nazvěme profil stejně, jak se jmenoval v Badaboom – iPhone (480x320, 1 Mbit/s):

Není tam žádná chyba. Vše bylo několikrát překontrolováno, pokaždé byl výsledek stejný. S největší pravděpodobností se to stane z prostého důvodu, že soubor SD byl nahrán s jiným kodekem a v jiném kontejneru. Při překódování se video nejprve dekóduje, rozdělí na matice určité velikosti a zkomprimuje. Dekodér ASP použitý v případě xvid je při paralelním dekódování pomalejší než AVC (pro h.264). 192 snímků za sekundu je však 8krát rychlejší než rychlost původního videa; 23minutová série je komprimována za méně než 4 minuty. Situace se opakovala s dalšími soubory komprimovanými do xvid/DivX.

LoiloScope Zanechal jsem jen příjemné dojmy - rozhraní je i přes svou neobvyklost pohodlné a funkční a rychlost ovládání je mimo chválu. Poměrně špatná funkčnost je poněkud zklamáním, ale často při jednoduché instalaci stačí jen mírně upravit barvy, udělat plynulé přechody, přidat text a LoiloScope si s tím poradí na výbornou. Poněkud děsivá je i cena – více než 100 dolarů za běžnou verzi je pro zahraničí normální, ale i tak nám taková čísla připadají poněkud divoká. I když se přiznám, že kdybych třeba často natáčel a stříhal domácí videa, možná bych uvažoval o jeho koupi. Zároveň jsem si mimochodem ověřil možnost editace HD (nebo spíše AVCHD) obsahu přímo z videokamery bez předchozího převodu do jiného formátu, u souborů jako .mts LoiloScope žádné problémy neodhalil.

Nová technologie je jako nově vznikající evoluční druh. Zvláštní stvoření, na rozdíl od mnoha staromilců. Někdy trapné, někdy vtipné. A jeho nové vlastnosti se zpočátku nezdají být v žádném případě vhodné pro tento ustálený a stabilní svět.

Uběhne však trochu času a ukáže se, že začátečník běží rychleji, skáče výš a je celkově silnější. A žere víc much než jeho retrográdní sousedé. A pak tito sousedé začnou chápat, že nemá smysl se s tímto nemotorným bývalým hádat. Je lepší být s ním přáteli a ještě lepší uspořádat symbiózu. Uvidíte, že much bude víc.

Technologie GPGPU (General-Purpose Graphics Processing Units - univerzální grafický procesor) po dlouhou dobu existovala pouze v teoretických výpočtech chytrých akademiků. Jak jinak? Navrhnout radikálně změnit výpočetní proces, který se vyvíjel po desetiletí, tím, že výpočet jeho paralelních větví svěříme grafické kartě - toho jsou schopni pouze teoretici.

Logo technologie CUDA nám připomíná, že vyrostla v hlubinách
3D grafika.

Ale technologie GPGPU nehodlala na stránkách univerzitních časopisů dlouho sypat prach. Poté, co načechrala peří svých nejlepších kvalit, přitáhla pozornost výrobců. Tak se zrodila CUDA - implementace GPGPU na grafických procesorech GeForce vyráběných společností nVidia.

Díky CUDA se technologie GPGPU staly mainstreamem. A nyní jen ti nejkratší a pokrytí silnou vrstvou lenosti vývojář programovacích systémů nedeklaruje podporu CUDA svým produktem. IT publikace považovaly za čest prezentovat podrobnosti o technologii v četných obtloustlých populárně-vědeckých článcích a konkurenti se okamžitě posadili se vzory a křížovými kompilátory, aby vyvinuli něco podobného.

Veřejné uznání je snem nejen pro aspirující hvězdičky, ale také pro nově zrozené technologie. A CUDA měl štěstí. Je známá, mluví se o ní a píše se o ní.

Prostě píšou, jako by pokračovali v diskuzi o GPGPU v tlustých vědeckých časopisech. Bombardují čtenáře řadou termínů jako „mřížka“, „SIMD“, „warp“, „hostitel“, „textura a konstantní paměť“. Ponoří ho až na samý vrchol do organizačních diagramů GPU nVidia, vedou ho klikatými cestami paralelních algoritmů a (nejsilnější tah) ukazují dlouhé výpisy kódů v jazyce C. Ve výsledku se ukazuje, že na vstupu článku máme čerstvého čtenáře se spalující touhou porozumět CUDA a na výstupu máme stejného čtenáře, ale s oteklou hlavou plnou změtí faktů, schémat , kód, algoritmy a termíny.

Mezitím je cílem jakékoli technologie usnadnit nám život. A CUDA s tím dělá skvělou práci. Výsledky její práce přesvědčí každého skeptika lépe než stovky schémat a algoritmů.

Ne všude

CUDA je podporována vysoce výkonnými superpočítači
nVidia Tesla.

A přesto, než se podíváme na výsledky práce CUDA v oblasti usnadnění života průměrného uživatele, stojí za to pochopit všechna jeho omezení. Stejně jako u džina: jakákoli touha, ale jedna. CUDA má také své Achillovy paty. Jedním z nich je omezení platforem, na kterých může fungovat.

Seznam grafických karet nVidia, které podporují CUDA, je uveden ve speciálním seznamu nazvaném CUDA Enabled Products. Seznam je docela působivý, ale snadno se klasifikuje. Podpora CUDA není odepřena:

    Modely nVidia GeForce 8., 9., 100., 200. a 400. řady s minimálně 256 MB video paměti na desce. Podpora se rozšiřuje na stolní i mobilní karty.

    Drtivá většina stolních a mobilních grafických karet je nVidia Quadro.

    Všechna řešení z řady netbooků nvidia ION.

    Vysoce výkonná řešení HPC (High Performance Computing) a superpočítačová řešení nVidia Tesla používaná jak pro osobní počítače, tak pro organizaci škálovatelných clusterových systémů.

Proto se před použitím softwarových produktů na bázi CUDA vyplatí zkontrolovat tento seznam oblíbených.

Kromě samotné grafické karty je pro podporu CUDA vyžadován příslušný ovladač. Je to spojení mezi centrálním a grafickým procesorem, které funguje jako jakési softwarové rozhraní pro přístup k programovému kódu a datům do vícejádrového pokladu GPU. Abyste neudělali chybu, nVidia doporučuje navštívit stránku s ovladači a stáhnout si nejnovější verzi.

...ale samotný proces

Jak CUDA funguje? Jak vysvětlit složitý proces paralelního počítání na speciální hardwarové architektuře GPU, aniž byste čtenáře uvrhli do propasti konkrétních pojmů?

Můžete se o to pokusit tak, že si představíte, jak centrální procesor provádí program v symbióze s grafickým procesorem.

Architektonicky jsou centrální procesorová jednotka (CPU) a její grafický protějšek (GPU) navrženy odlišně. Pokud nakreslíme analogii se světem automobilového průmyslu, pak je CPU kombi, jedno z těch, kterým se říká „stodola“. Vypadá to jako osobní auto, ale zároveň (z pohledu vývojářů) „je to Švýcar, sekačka a hráč na dýmku“. Plní roli malého náklaďáku, autobusu a hypertrofovaného hatchbacku zároveň. Zkrátka kombi. Má málo válcových jader, ale zvládnou téměř jakýkoli úkol a působivá mezipaměť je schopna uložit spoustu dat.

Ale GPU je sportovní auto. Existuje pouze jedna funkce: dopravit pilota do cíle co nejrychleji. Proto žádná velká paměť kufru, žádná sedadla navíc. Ale válcových jader je stokrát více než CPU.

Díky CUDA se vývojáři programů GPGPU nemusí ponořit do složitosti programování
vývoj pro grafické motory jako DirectX a OpenGL

Na rozdíl od centrálního procesoru, který je schopen řešit jakoukoli úlohu včetně grafiky, ale s průměrným výkonem, je grafický procesor uzpůsoben pro vysokorychlostní řešení jedné úlohy: přeměnu hromady polygonů na vstupu na hromadu pixelů při výstup. Tento problém lze navíc řešit paralelně pomocí stovek relativně jednoduchých výpočetních jader v GPU.

Jaký tandem tedy může být z kombíku a sporťáku? CUDA funguje asi takto: program běží na CPU, dokud neexistuje část kódu, kterou lze provádět paralelně. Poté, místo toho, aby byl pomalu spouštěn na dvou (nebo dokonce osmi) jádrech toho nejlepšího CPU, je přenesen na stovky jader GPU. Zároveň se výrazně zkrátí doba provádění této sekce, což znamená, že se zkrátí i doba provádění celého programu.

Technologicky se pro programátora nic nemění. Kód programů CUDA je napsán v jazyce C. Přesněji ve svém zvláštním dialektu „C with streams“ (C with streams). Toto rozšíření jazyka C, vyvinuté ve Stanfordu, se nazývá Brook. Rozhraní, které přenáší Brook kód do GPU, je ovladač grafické karty, která podporuje CUDA. Organizuje celý proces zpracování této části programu tak, aby pro programátora GPU vypadalo jako koprocesor CPU. Velmi podobné použití matematického koprocesoru v počátcích osobních počítačů. S příchodem Brook, grafických karet s podporou CUDA a ovladačů pro ně, se každý programátor stal schopen přistupovat ke GPU ve svých programech. Než však tento šamanismus vlastnil úzký okruh vybraných lidí, kteří strávili roky zdokonalováním programovacích technik pro grafické motory DirectX nebo OpenGL.

Do sudu tohoto domýšlivého medu – chválí CUDA – stojí za to dát mouchu, tedy omezení. Ne každý problém, který je třeba naprogramovat, lze vyřešit pomocí CUDA. Řešení rutinních kancelářských úkolů nebude možné urychlit, ale můžete důvěřovat CUDA, že spočítá chování tisíců bojovníků stejného typu ve World of Warcraft. Ale to je vymyšlený úkol. Podívejme se na příklady toho, co již CUDA velmi efektivně řeší.

Spravedlivé skutky

CUDA je velmi pragmatická technologie. Po implementaci podpory do svých grafických karet nVidia zcela oprávněně očekávala, že banner CUDA zaujme mnoho nadšenců jak v univerzitním prostředí, tak v komerci. A tak se také stalo. Projekty založené na CUDA žijí a přinášejí výhody.

NVIDIA PhysX

Při propagaci svého dalšího herního mistrovského díla výrobci často zdůrazňují jeho 3D realismus. Ale bez ohledu na to, jak skutečný může být svět 3D her, pokud jsou základní fyzikální zákony, jako je gravitace, tření a hydrodynamika, implementovány nesprávně, klam se okamžitě projeví.

Jednou ze schopností fyzikálního enginu NVIDIA PhysX je realistická práce s tkáněmi.

Implementace algoritmů pro počítačovou simulaci základních fyzikálních zákonů je velmi pracný úkol. Nejznámějšími společnostmi v této oblasti jsou irská společnost Havok se svou multiplatformní fyzickou Havok Physics a kalifornská Ageia - předchůdce prvního fyzického procesoru na světě (PPU - Physics Processing Unit) a odpovídajícího fyzikálního enginu PhysX. První z nich, ačkoliv jej získal Intel, nyní aktivně pracuje v oblasti optimalizace enginu Havok pro grafické karty ATI a procesory AMD. Ageia se svým PhysX enginem se ale stala součástí nVidie. nVidia zároveň vyřešila poměrně složitý problém přizpůsobení PhysX technologii CUDA.

To bylo možné díky statistikám. Statisticky bylo prokázáno, že bez ohledu na to, jak složité vykreslování GPU provádí, některá jeho jádra jsou stále nečinná. Právě na těchto jádrech běží engine PhysX.

Díky CUDA se lví podíl výpočtů souvisejících s fyzikou herního světa začal provádět na grafické kartě. Uvolněný výkon centrálního procesoru byl využit k řešení dalších herních problémů. Výsledek na sebe nenechal dlouho čekat. Podle odborníků se nárůst výkonu při hraní s PhysX běžícím na CUDA zvýšil minimálně o řád. Zvýšila se také pravděpodobnost realizace fyzikálních zákonů. CUDA se stará o rutinní výpočet implementace tření, gravitace a dalších věcí nám známých u vícerozměrných objektů. Nyní nejen hrdinové a jejich vybavení dokonale zapadají do zákonitostí nám známého fyzického světa, ale také prach, mlha, tlaková vlna, plamen a voda.

CUDA verze balíčku pro kompresi textur NVIDIA Texture Tools 2

Máte rádi realistické předměty v moderních hrách? Stojí za to říci díky vývojářům textur. Ale čím více reality je v textuře, tím větší je její objem. O to více zabírá drahocennou paměť. Aby se tomu zabránilo, jsou textury předkomprimovány a dynamicky dekomprimovány podle potřeby. A komprese a dekomprese jsou čisté výpočty. Pro práci s texturami vydala nVidia balíček NVIDIA Texture Tools. Podporuje efektivní kompresi a dekompresi DirectX textur (tzv. HF formát). Druhá verze tohoto balíčku se může pochlubit podporou pro kompresní algoritmy BC4 a BC5 implementované v technologii DirectX 11. Ale hlavní je, že NVIDIA Texture Tools 2 obsahuje podporu CUDA. Podle společnosti nVidia to poskytuje 12násobný nárůst výkonu v úlohách komprese a dekomprese textur. To znamená, že herní snímky se budou načítat rychleji a potěší hráče svou realističností.

Balíček NVIDIA Texture Tools 2 je navržen pro práci s CUDA. Nárůst výkonu při kompresi a dekompresi textur je zřejmý.

Použití CUDA může výrazně zlepšit efektivitu video dohledu.

Zpracování streamu videa v reálném čase

Ať už se dá říct cokoli, současný svět je z pohledu špionáže mnohem blíže světu Orwellova Velkého bratra, než se zdá. Jak řidiči aut, tak návštěvníci veřejných prostranství cítí pohledy videokamer.

Plné řeky videoinformací proudí do center jejich zpracování a... narážejí na úzký článek – osobu. Ve většině případů je to poslední autorita, která monitoruje svět videa. Navíc autorita není nejúčinnější. Bliká, rozptyluje se a snaží se usnout.

Díky CUDA bylo možné implementovat algoritmy pro současné sledování více objektů ve video streamu. V tomto případě proces probíhá v reálném čase a video má plných 30 snímků za sekundu. Ve srovnání s implementací takového algoritmu na moderních vícejádrových CPU poskytuje CUDA dvojnásobný nebo trojnásobný nárůst výkonu, a to je, jak vidíte, docela hodně.

Konverze videa, filtrování zvuku

Video konvertor Badaboom je první, který používá CUDA k urychlení převodu.

Je příjemné sledovat nový produkt videopůjčovny ve FullHD kvalitě a na velké obrazovce. Ale nemůžete si s sebou vzít na cesty velkou obrazovku a video kodek FullHD bude škytat na nízkoenergetickém procesoru mobilního gadgetu. Na pomoc přichází konverze. Většina těch, kteří se s tím v praxi setkali, si ale stěžuje na dlouhou dobu převodu. Je to pochopitelné, proces je rutinní, vhodný pro paralelizaci a jeho provádění na CPU není příliš optimální.

Ale CUDA se s tím vyrovnává. První známkou je převodník Badaboom od Eleventalu. Vývojáři Badaboom se při výběru CUDA rozhodli správně. Testy ukazují, že převede standardní hodinu a půl filmu do formátu iPhone/iPod Touch za méně než dvacet minut. A to i přesto, že při použití pouze CPU tento proces trvá déle než hodinu.

Pomáhá CUDA a profesionálním milovníkům hudby. Každý z nich by dal půl království za efektivní FIR crossover - sadu filtrů, které rozdělují zvukové spektrum do více pásem. Tento proces je velmi pracný a při velkém objemu zvukového materiálu nutí zvukaře „kouřit“ na několik hodin. Implementace FIR crossoveru založeného na CUDA stokrát zrychlí jeho provoz.

Budoucnost CUDA

Díky tomu, že se technologie GPGPU stala realitou, CUDA neusíná na vavřínech. Jako všude, i v CUDA funguje princip odrazu: vývoj verzí CUDA SDK nyní ovlivňuje nejen architektura videoprocesorů nVidia, ale samotná technologie CUDA nutí nVidii přehodnotit architekturu svých čipů. Příkladem takové reflexe je platforma nVidia ION. Jeho druhá verze je speciálně optimalizována pro řešení problémů CUDA. To znamená, že i v relativně levných hardwarových řešeních získají spotřebitelé veškerý výkon a skvělé schopnosti CUDA.

A je navržen tak, aby překládal hostitelský kód (hlavní, řídicí kód) a kód zařízení (hardwarový kód) (soubory s příponou .cu) do objektových souborů vhodných pro proces sestavení finálního programu nebo knihovny v jakémkoli programovacím prostředí, např. v NetBeans.

Architektura CUDA využívá model mřížkové paměti, modelování vláken clusteru a instrukce SIMD. Použitelné nejen pro vysoce výkonné grafické výpočty, ale také pro různé vědecké výpočty pomocí grafických karet nVidia. Vědci a výzkumníci široce používají CUDA v různých oblastech, včetně astrofyziky, výpočetní biologie a chemie, modelování dynamiky tekutin, elektromagnetických interakcí, počítačové tomografie, seismické analýzy a dalších. CUDA má schopnost připojit se k aplikacím pomocí OpenGL a Direct3D. CUDA je multiplatformní software pro operační systémy jako Linux, Mac OS X a Windows.

22. března 2010 nVidia vydala CUDA Toolkit 3.0, který obsahoval podporu pro OpenCL.

Zařízení

Platforma CUDA se poprvé objevila na trhu s vydáním čipu NVIDIA G80 osmé generace a stala se přítomnou ve všech následujících řadách grafických čipů, které se používají v rodinách akcelerátorů GeForce, Quadro a NVidia Tesla.

První řada hardwaru s podporou CUDA SDK, G8x, měla 32bitový vektorový procesor s jednoduchou přesností využívající CUDA SDK jako API (CUDA podporuje typ C double, ale jeho přesnost byla nyní snížena na 32bitové plovoucí bod). Pozdější procesory GT200 mají podporu pro 64bitovou přesnost (pouze SFU), ale výkon je výrazně horší než u 32bitové přesnosti (kvůli skutečnosti, že na stream multiprocesoru jsou pouze dvě SFU, zatímco skalárních procesorů je osm). GPU organizuje hardwarové multithreading, což vám umožňuje využívat všechny zdroje GPU. Otevírá se tak možnost přenést funkce fyzického akcelerátoru do grafického akcelerátoru (příkladem implementace je nVidia PhysX). Otevírá také široké možnosti využití hardwaru počítačové grafiky k provádění složitých negrafických výpočtů: například ve výpočetní biologii a dalších vědních oborech.

Výhody

Ve srovnání s tradičním přístupem k organizaci univerzálního počítání prostřednictvím grafických API má architektura CUDA v této oblasti následující výhody:

Omezení

  • Všechny funkce spustitelné na zařízení nepodporují rekurzi (CUDA Toolkit 3.1 podporuje ukazatele a rekurzi) a mají některá další omezení

Podporované GPU a grafické akcelerátory

Seznam zařízení od výrobce zařízení Nvidia s deklarovanou plnou podporou technologie CUDA je uveden na oficiálních stránkách Nvidie: CUDA-Enabled GPU Products (anglicky).

Ve skutečnosti následující periferie aktuálně podporují technologii CUDA na trhu s PC hardwarem:

Verze specifikace 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, 3700x1x8,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, GeForce (GF110, GF110, GTX580, GTX54TX 560)
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, GeTX0MX, GeForce GTX660, GeForce GTX 675MX, GeForce GTX 606 GeForce GT 645M, GeForce GT 640M
3.5 GK110
Nvidia GeForce pro 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 pro 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 pro 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ízkým profilem
Quadro FX 370
Quadro FX 370 s nízkým profilem
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 pro 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 přesností.

Vlastnosti a specifikace různých verzí

Podpora funkcí (neuvedené funkce jsou
podporováno pro všechny výpočetní schopnosti)
Výpočetní schopnost (verze)
1.0 1.1 1.2 1.3 2.x

32bitová slova v globální paměti
Ne Ano

hodnoty s plovoucí desetinnou čárkou v globální paměti
Celočíselné atomické funkce fungující na
32bitová slova ve sdílené paměti
Ne Ano
atomicExch() pracující na 32bit
hodnoty s pohyblivou řádovou čárkou ve sdílené paměti
Celočíselné atomické funkce fungující na
64bitová slova v globální paměti
Funkce warp hlasování
Operace s plovoucí desetinnou čárkou s dvojitou přesností Ne Ano
Atomové funkce fungující na 64-bit
celočíselné hodnoty ve sdílené paměti
Ne Ano
Atomová adice s plovoucí desetinnou čárkou funguje
32bitová slova v globální a sdílené paměti
_hlasování()
_threadfence_system()
_syncthreads_count(),
_syncthreads_and(),
_syncthreads_or()
Funkce povrchu
3D mřížka bloku závitů
Technické specifikace Výpočetní schopnost (verze)
1.0 1.1 1.2 1.3 2.x
Maximální rozměrnost rastru závitových bloků 2 3
Maximální rozměr x, y nebo z mřížky bloků závitů 65535
Maximální rozměrnost závitového bloku 3
Maximální rozměr x nebo y bloku 512 1024
Maximální z-rozměr bloku 64
Maximální počet vláken na blok 512 1024
Velikost osnovy 32
Maximální počet rezidentních bloků na multiprocesor 8
Maximální počet rezidentních warps na multiprocesor 24 32 48
Maximální počet rezidentních vláken na víceprocesor 768 1024 1536
Počet 32bitových registrů na multiprocesor 8 tis 16 K 32 K
Maximální množství sdílené paměti na víceprocesor 16 kB 48 kB
Počet bank sdílené paměti 16 32
Množství místní paměti na vlákno 16 kB 512 kB
Konstantní velikost paměti 64 kB
Pracovní sada mezipaměti na multiprocesor pro konstantní paměť 8 kB
Mezipaměť pracovní sady na víceprocesor pro texturovou paměť V závislosti na zařízení, mezi 6 KB a 8 KB
Maximální šířka pro 1D texturu
8192 32768
Maximální šířka pro 1D texturu
reference vázaná na lineární paměť
2 27
Maximální šířka a počet vrstev
pro referenci 1D vrstvené textury
8192 x 512 16384 x 2048
Maximální šířka a výška pro 2D
odkaz na texturu vázaný na
lineární paměť nebo pole CUDA
65536 x 32768 65536 x 65535
Maximální šířka, výška a počet
vrstev pro referenci 2D vrstvené textury
8192 x 8192 x 512 16384 x 16384 x 2048
Maximální šířka, výška a hloubka
pro referenci 3D textury vázanou na lineární
paměti nebo pole CUDA
2048 x 2048 x 2048
Maximální počet textur, které
lze vázat na jádro
128
Maximální šířka pro 1D povrch
odkaz vázaný na pole CUDA
Ne
podporováno
8192
Maximální šířka a výška pro 2D
povrchová reference vázaná na pole CUDA
8192 x 8192
Maximální počet povrchů, které
lze vázat na jádro
8
Maximální počet instrukcí za
jádro
2 miliony

Příklad

CudaArray* cu_array; textura< float , 2 >tex; // Přidělení pole cudaMalloc( & cu_array, cudaCreateChannelDesc< float>(), šířka výška) ; // Kopírování dat obrázku do pole cudaMemcpy( cudaMemcpy( cuda_array, image, width* height, cudaMemcpyHostToDevice) ; // Svázat pole s texturou cudaBindTexture( tex, cu_array) ; // Spustit kernel dim3 blockDim(16, 16, 1) ; dim3 gridDim(width / blockDim.x, height / blockDim.y, 1) ; jádro<<< gridDim, blockDim, 0 >>> (d_odata, sirka, vyska) ; cudaUnbindTexture(tex) ; __global__ void kernel(float * odata, int výška, int šířka) ( 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* šířka+ x] = c; )

Import pycuda.driver jako 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 (a) multiply_them( drv.Out (dest) , drv.In (a) , drv.In (b) , block= (400 , 1 , 1 ) ) print dest-a*b

CUDA jako předmět na vysokých školách

Od prosince 2009 se softwarový model CUDA vyučuje na 269 univerzitách po celém světě. V Rusku probíhají školení o CUDA na Petrohradské polytechnické univerzitě, Jaroslavské státní univerzitě. P. G. Demidov, Moskva, Nižnij Novgorod, Petrohrad, Tver, Kazaň, Novosibirsk, Novosibirská státní technická univerzita, Omské a Permské státní univerzity, Mezinárodní univerzita přírody společnosti a člověka „Dubna“, Ivanovská státní energetická univerzita, Bělgorodská státní univerzita , MSTU je. Bauman, Ruská chemická technická univerzita pojmenovaná po. Mendělejev, Meziregionální superpočítačové centrum RAS, . Kromě toho bylo v prosinci 2009 oznámeno, že začalo fungovat první ruské vědecké a vzdělávací centrum „Parallel Computing“, které se nachází ve městě Dubna, jehož úkoly zahrnují školení a konzultace o řešení složitých výpočetních problémů na GPU.

Na Ukrajině se kurzy CUDA vyučují na Kyjevském institutu systémové analýzy.

Odkazy

Oficiální zdroje

  • CUDA Zone (rusky) - oficiální stránky CUDA
  • CUDA GPU Computing (anglicky) - oficiální webová fóra věnovaná CUDA computingu

Neoficiální zdroje

Tomův hardware
  • Dmitrij Čekanov. nVidia CUDA: výpočty na grafické kartě nebo smrt CPU? . Tom's Hardware (22. června 2008). Archivováno
  • Dmitrij Čekanov. nVidia CUDA: Benchmarking GPU aplikací pro masový trh. Tom's Hardware (19. května 2009). Archivováno z originálu 4. března 2012. Získáno 19. května 2009.
iXBT.com
  • Alexey Berillo. NVIDIA CUDA - negrafické výpočty na GPU. Část 1 . iXBT.com (23. září 2008). Archivováno z originálu 4. března 2012. Získáno 20. ledna 2009.
  • Alexey Berillo. NVIDIA CUDA - negrafické výpočty na GPU. Část 2 . iXBT.com (22. října 2008). - Příklady implementace NVIDIA CUDA. Archivováno z originálu 4. března 2012. Získáno 20. ledna 2009.
Jiné zdroje
  • Boreskov Alexej Viktorovič. Základy CUDA (20. ledna 2009). Archivováno z originálu 4. března 2012. Získáno 20. ledna 2009.
  • Vladimír Frolov.Úvod do technologie CUDA. Online časopis „Počítačová grafika a multimédia“ (19. prosince 2008). Archivováno z originálu 4. března 2012. Získáno 28. října 2009.
  • Igor Oskolkov. NVIDIA CUDA je cenově dostupná vstupenka do světa velkých počítačů. Computerra (30. dubna 2009). Staženo 3. května 2009.
  • Vladimír Frolov.Úvod do technologie CUDA (1. srpna 2009). Archivováno z originálu 4. března 2012. Získáno 3. dubna 2010.
  • GPGPU.ru. Použití grafických karet pro výpočetní techniku
  • . Paralelní výpočetní centrum

Poznámky

viz také

Ve vývoji moderních procesorů je tendence k postupnému navyšování počtu jader, což zvyšuje jejich schopnosti v paralelních výpočtech. Již dlouho jsou však k dispozici GPU, které v tomto ohledu výrazně převyšují CPU. A s těmito schopnostmi GPU již některé společnosti počítaly. První pokusy o využití grafických akcelerátorů pro necílové výpočty byly činěny od konce 90. let. Ale teprve vznik shaderů se stal impulsem pro vývoj zcela nové technologie a v roce 2003 se objevil koncept GPGPU (General-purpose graphics processing units). Důležitou roli ve vývoji této iniciativy sehrál BrookGPU, což je speciální rozšíření pro jazyk C. Před příchodem BrookGPU mohli programátoři pracovat s GPU pouze přes Direct3D nebo OpenGL API. Brook umožnil vývojářům pracovat se známým prostředím a samotný kompilátor pomocí speciálních knihoven implementoval interakci s GPU na nízké úrovni.

Takový pokrok nemohl přitáhnout pozornost vůdců tohoto odvětví - AMD a NVIDIA, kteří začali vyvíjet vlastní softwarové platformy pro negrafické výpočty na svých grafických kartách. Nikdo nezná lépe než vývojáři GPU všechny nuance a funkce svých produktů, což stejným společnostem umožňuje co nejúčinněji optimalizovat softwarový balík pro konkrétní hardwarová řešení. V současné době NVIDIA vyvíjí platformu CUDA (Compute Unified Device Architecture), AMD podobnou technologii nazývá CTM (Close To Metal) nebo AMD Stream Computing. Podíváme se na některé možnosti CUDA a v praxi zhodnotíme výpočetní možnosti grafického čipu G92 grafické karty GeForce 8800 GT.

Nejprve se však podívejme na některé nuance provádění výpočtů pomocí GPU. Jejich hlavní výhodou je, že grafický čip je zpočátku navržen tak, aby spouštěl více vláken, zatímco každé jádro běžného CPU vykonává proud sekvenčních instrukcí. Každý moderní GPU je multiprocesor skládající se z několika výpočetních clusterů s mnoha ALU v každém. Nejvýkonnější moderní čip GT200 se skládá z 10 takových clusterů, z nichž každý má 24 stream procesorů. Testovaná grafická karta GeForce 8800 GT založená na čipu G92 má sedm velkých výpočetních jednotek, každá se 16 stream procesory. CPU používají SIMD SSE bloky pro vektorové výpočty (jedna instrukce více dat - jedna instrukce je provedena na více datech), což vyžaduje transformaci dat do 4 vektorů. GPU zpracovává vlákna skalárně, tzn. jedna instrukce je aplikována na několik vláken (SIMT - single instrukce multiple threads). To šetří vývojářům převod dat na vektory a umožňuje libovolné větvení v proudech. Každá výpočetní jednotka GPU má přímý přístup do paměti. A šířka pásma videopaměti je vyšší díky použití několika samostatných paměťových řadičů (u špičkového G200 je 8 64bitových kanálů) a vysokým provozním frekvencím.

Obecně platí, že v určitých úlohách při práci s velkým množstvím dat jsou GPU mnohem rychlejší než CPU. Níže vidíte ilustraci tohoto prohlášení:


Graf ukazuje dynamiku růstu výkonu CPU a GPU od roku 2003. NVIDIA tato data ve svých dokumentech ráda uvádí jako reklamu, ale jedná se pouze o teoretické výpočty a ve skutečnosti se mezera samozřejmě může ukázat jako mnohem menší.

Ale ať je to jak chce, existuje obrovský potenciál GPU, který lze využít a který vyžaduje specifický přístup k vývoji softwaru. To vše je implementováno v hardwarovém a softwarovém prostředí CUDA, které se skládá z několika softwarových úrovní – vysokoúrovňového CUDA Runtime API a nízkoúrovňového CUDA Driver API.


CUDA používá pro programování standardní jazyk C, což je jedna z jeho hlavních výhod pro vývojáře. Zpočátku CUDA obsahuje knihovny BLAS (balík základní lineární algebry) a FFT (Fourierova transformace). CUDA má také schopnost interakce s grafickými API OpenGL nebo DirectX, schopnost vyvíjet se na nízké úrovni a vyznačuje se optimalizovanou distribucí datových toků mezi CPU a GPU. Výpočty CUDA se provádějí současně s grafickými, na rozdíl od podobné platformy AMD, kde je pro výpočty na GPU spuštěn speciální virtuální stroj. Ale takové „soužití“ je také plné chyb, pokud grafické API vytváří velké zatížení, zatímco CUDA běží současně - koneckonců grafické operace mají stále vyšší prioritu. Platforma je kompatibilní s 32- a 64-bitovými operačními systémy Windows XP, Windows Vista, MacOS X a různými verzemi Linuxu. Platforma je otevřená a na webu si kromě speciálních ovladačů pro grafickou kartu můžete stáhnout softwarové balíčky CUDA Toolkit, CUDA Developer SDK včetně kompilátoru, debuggeru, standardních knihoven a dokumentace.

Pokud jde o praktickou implementaci CUDA, dlouhou dobu byla tato technologie využívána pouze pro vysoce specializované matematické výpočty v oblasti částicové fyziky, astrofyziky, medicíny nebo předpovídání změn na finančním trhu apod. Běžným uživatelům se ale tato technologie postupně přibližuje, objevují se zejména speciální plug-iny pro Photoshop, které dokážou využívat výpočetní výkon GPU. Na speciální stránce si můžete prostudovat celý seznam programů, které využívají možnosti NVIDIA CUDA.

Jako praktický test nové technologie na grafické kartě MSI NX8800GT-T2D256E-OC použijeme program TMPGEnc. Tento produkt je komerční (plná verze stojí 100 USD), ale pro grafické karty MSI je dodáván jako bonus ve zkušební verzi po dobu 30 dnů. Tuto verzi si můžete stáhnout z webu vývojáře, ale k instalaci TMPGEnc 4.0 XPress MSI Special Edition potřebujete originální disk s ovladači z karty MSI – bez něj se program nenainstaluje.

Chcete-li zobrazit nejúplnější informace o výpočetních schopnostech v CUDA a porovnat je s jinými grafickými adaptéry, můžete použít speciální nástroj CUDA-Z. Toto jsou informace, které poskytuje o naší grafické kartě GeForce 8800GT:




Ve srovnání s referenčními modely naše kopie pracuje na vyšších frekvencích: rastrová doména je o 63 MHz vyšší než nominální, shader jednotky jsou rychlejší o 174 MHz a paměť je o 100 MHz rychlejší.

Porovnáme rychlost převodu stejného HD videa při výpočtu pouze s použitím CPU a s dodatečnou aktivací CUDA v programu TMPGEnc na následující konfiguraci:

  • Procesor: Pentium Dual-Core E5200 2,5 GHz;
  • Základní deska: Gigabyte P35-S3;
  • Paměť: 2x1GB GoodRam PC6400 (5-5-5-18-2T)
  • Grafická karta: MSI NX8800GT-T2D256E-OC;
  • Pevný disk: 320GB WD3200AAKS;
  • Napájení: CoolerMaster eXtreme Power 500-PCAP;
  • Operační systém: Windows XP SP2;
  • TMPGEnc 4.0 XPress 4.6.3.268;
  • Ovladače grafické karty: ForceWare 180.60.
Pro testy byl procesor v prvním a druhém případě přetaktován na 3 GHz (v konfiguraci 11,5x261 MHz) a na 4 GHz (11,5x348 MHz) s frekvencí RAM 835 MHz. Video v rozlišení Full HD 1920x1080 o délce jedné minuty a dvaceti sekund. Pro vytvoření dodatečné zátěže byl zapnut filtr redukce šumu, jehož nastavení bylo ponecháno ve výchozím nastavení.


Kódování bylo provedeno pomocí kodeku DivX 6.8.4. V nastavení kvality tohoto kodeku jsou všechny hodnoty ponechány ve výchozím nastavení, multithreading je povolen.


Podpora multithreadingu v TMPGEnc je zpočátku povolena na kartě nastavení CPU/GPU. Ve stejné sekci se také aktivuje CUDA.


Jak můžete vidět na výše uvedeném snímku obrazovky, zpracování filtrů pomocí CUDA je povoleno, ale není povolen hardwarový dekodér videa. Dokumentace programu upozorňuje, že aktivace posledního parametru prodlužuje dobu zpracování souboru.

Na základě výsledků testů byly získány následující údaje:


Na 4 GHz s povoleným CUDA jsme získali jen pár sekund (nebo 2 %), což není nijak zvlášť působivé. Ale při nižší frekvenci vám nárůst aktivací této technologie umožňuje ušetřit asi 13 % času, což bude docela patrné při zpracování velkých souborů. Výsledky však stále nejsou tak působivé, jak se očekávalo.

Program TMPGEnc má indikátor zatížení CPU a CUDA, v této testovací konfiguraci ukázal zatížení CPU na cca 20 %, grafické jádro na zbylých 80 %. Ve výsledku to máme stejně 100% jako při převodu bez CUDA a nemusí tam být vůbec žádný časový rozdíl (ale pořád existuje). Limitujícím faktorem není ani malá kapacita paměti 256 MB. Soudě podle údajů z RivaTuner nebylo během provozu použito více než 154 MB video paměti.



závěry

Program TMPGEnc je jedním z těch, které představují technologii CUDA masám. Použití GPU v tomto programu umožňuje urychlit proces zpracování videa a výrazně odlehčit centrálnímu procesoru, což uživateli umožní pohodlně dělat další úkoly současně. V našem konkrétním příkladu grafická karta GeForce 8800GT 256 MB mírně zlepšila výkon časování při konverzi videa na základě přetaktovaného dvoujádrového procesoru Pentium E5200. Je ale jasně vidět, že s klesající frekvencí roste zisk z aktivace CUDA, na slabých procesorech bude zisk z jeho použití mnohem větší. Na pozadí této závislosti je zcela logické předpokládat, že i při zvýšení zátěže (například použití velmi velkého počtu dalších videofiltrů) se výsledky systému s CUDA budou odlišovat více významný rozdíl rozdílu v čase stráveném procesem kódování. Nezapomeňte také, že G92 není v současnosti nejvýkonnějším čipem a modernější grafické karty poskytnou v takových aplikacích výrazně vyšší výkon. Při běhu aplikace však není GPU plně vytíženo a rozložení zátěže pravděpodobně závisí na každé konfiguraci zvlášť, konkrétně na kombinaci procesor/grafická karta, což v konečném důsledku může poskytnout větší (nebo menší) nárůst v procentech. aktivace CUDA. V každém případě těm, kteří pracují s velkými objemy videodat, tato technologie stále umožní výrazně ušetřit čas.

Je pravda, že CUDA ještě nezískal širokou popularitu, kvalita softwaru pracujícího s touto technologií vyžaduje zlepšení. V programu TMPGEnc 4.0 XPress, který jsme recenzovali, tato technologie vždy nefungovala. Stejné video bylo možné několikrát překódovat a pak najednou při dalším spuštění bylo zatížení CUDA již 0 %. A tento jev byl zcela náhodný na úplně jiných operačních systémech. Dotyčný program také odmítl použít CUDA při kódování do formátu XviD, ale s oblíbeným kodekem DivX nebyly žádné problémy.

Díky tomu může technologie CUDA zatím výrazně zvýšit výkon osobních počítačů pouze v určitých úlohách. Rozsah použití takové technologie se však bude rozšiřovat a proces zvyšování počtu jader v konvenčních procesorech naznačuje nárůst poptávky po paralelních vícevláknových výpočtech v moderních softwarových aplikacích. Ne nadarmo jsou v poslední době všichni lídři v oboru posedlí myšlenkou spojení CPU a GPU v rámci jedné jednotné architektury (vzpomeňte si na tolik propagovaný AMD Fusion). Možná je CUDA jednou z fází procesu tohoto sjednocení.


Za poskytnutí testovacího vybavení děkujeme následujícím společnostem:

– sada nízkoúrovňových softwarových rozhraní ( API) pro vytváření her a dalších vysoce výkonných multimediálních aplikací. Zahrnuje podporu vysokého výkonu 2D- A 3D-grafika, zvuk a vstupní zařízení.

Direct3D (D3D) – rozhraní pro zobrazování trojrozměrných primitivů(geometrická tělesa). Obsažen v .

OpenGL(z angličtiny Otevřete grafickou knihovnu, doslova - otevřená grafická knihovna) je specifikace, která definuje meziplatformní programovací rozhraní nezávislé na programovacím jazyce pro psaní aplikací využívajících dvourozměrnou a trojrozměrnou počítačovou grafiku. Obsahuje více než 250 funkcí pro kreslení složitých 3D scén z jednoduchých primitiv. Používá se k vytváření videoher, virtuální reality a vizualizací ve vědeckém výzkumu. Na platformě Okna soutěží s .

OpenCL(z angličtiny Otevřete Computing Language, doslova – otevřený jazyk výpočtů) – rámec(softwarový systémový framework) pro psaní počítačových programů souvisejících s paralelními výpočty na různých grafikách ( GPU) A ( ). Do rámce OpenCL obsahuje programovací jazyk a rozhraní pro programování aplikací ( API). OpenCL poskytuje paralelismus na úrovni instrukcí a na úrovni dat a je implementací této techniky GPGPU.

GPGPU(zkráceně z angličtiny) G rafické zpracovatelské jednotky pro všeobecné použití, doslova - GPU obecný účel) je technika pro použití grafického procesoru (GPU) nebo grafické karty pro obecné výpočty, které obvykle provádí počítač.

Shader(Angličtina) shader) – program pro konstrukci stínů na syntetizovaných obrázcích, používaný v trojrozměrné grafice k určení konečných parametrů objektu nebo obrázku. Typicky zahrnuje libovolně složité popisy absorpce a rozptylu světla, mapování textur, odraz a lom, stínování, posun povrchu a efekty následného zpracování. Složité povrchy lze vizualizovat pomocí jednoduchých geometrických tvarů.

Vykreslování(Angličtina) vykreslování) – vizualizace, v počítačové grafice proces získávání obrazu z modelu pomocí softwaru.

SDK(zkráceně z angličtiny) Software Development Kit) – sada nástrojů pro vývoj softwaru.

procesor(zkráceně z angličtiny) Centrální procesorová jednotka, doslova – centrální/hlavní/hlavní výpočetní zařízení) – centrální (mikro);zařízení, které provádí strojové instrukce; kus hardwaru odpovědný za provádění výpočetních operací (určených operačním systémem a aplikačním softwarem) a koordinaci provozu všech zařízení.

GPU(zkráceně z angličtiny) Grafická procesorová jednotka, doslova – grafické výpočetní zařízení) – grafický procesor; samostatné zařízení nebo herní konzole, která provádí grafické vykreslování (vizualizace). Moderní GPU jsou velmi efektivní při zpracování a zobrazení počítačové grafiky realistickým způsobem. Grafický procesor v moderních grafických adaptérech se používá jako 3D grafický akcelerátor, ale v některých případech jej lze použít i pro výpočty ( GPGPU).

Problémy procesor

Ke zvýšení výkonu tradičních docházelo dlouhou dobu především důsledným zvyšováním taktovací frekvence (cca 80 % výkonu bylo určeno taktovací frekvencí) se současným nárůstem počtu tranzistorů na jednom čipu. . Další zvýšení taktovací frekvence (při taktovací frekvenci více než 3,8 GHz se čipy jednoduše přehřívají!) však naráží na řadu zásadních fyzických překážek (protože technologický proces se téměř přiblížil velikosti atomu: , a velikost atomu křemíku je přibližně 0,543 nm):

Za prvé, jak se zmenšuje velikost krystalu a zvyšuje se frekvence hodin, zvyšuje se svodový proud tranzistorů. To vede ke zvýšené spotřebě energie a zvýšeným emisím tepla;

Za druhé, výhody vyšší rychlosti hodin jsou částečně negovány latencí přístupu do paměti, protože doba přístupu do paměti nedrží krok se zvyšující se rychlostí;

Zatřetí, pro některé aplikace se tradiční sériové architektury stávají neefektivními, protože se takty zvyšují kvůli takzvanému „von Neumannovu úzkému hrdlu“, což je omezení výkonu vyplývající ze sekvenčního výpočetního toku. Současně se zvětšují zpoždění při přenosu odporově-kapacitního signálu, což je další úzké hrdlo spojené se zvýšením taktovací frekvence.

Rozvoj GPU

Paralelně s tím probíhal (a probíhá!) vývoj GPU:

listopad 2008 – Intel představila řadu 4jádrových Intel Core i7, které jsou založeny na nové generaci mikroarchitektury Nehalem. Procesory pracují na taktovací frekvenci 2,6-3,2 GHz. Vyrobeno pomocí 45nm procesní technologie.

Prosinec 2008 – zahájeny dodávky 4jádrových AMD Phenom II 940(krycí jméno - Deneb). Pracuje na frekvenci 3 GHz, vyrobeno pomocí 45nm procesní technologie.

květen 2009 – spol AMD představila verzi GPU Grafická karta ATI Radeon HD 4890 s taktem jádra zvýšeným z 850 MHz na 1 GHz. Toto je první grafický procesor běží na 1 GHz. Výpočetní výkon čipu se díky zvýšení frekvence zvýšil z 1,36 na 1,6 teraflopů. Procesor obsahuje 800 (!) výpočetních jader a podporuje videopaměť GDDR5, DirectX 10.1, ATI CrossFireX a všechny ostatní technologie vlastní moderním modelům grafických karet. Čip je vyroben na bázi 55nm technologie.

Hlavní rozdíly GPU

Charakteristické rysy GPU(ve srovnání s ) jsou:

– architektura maximálně zaměřená na zvýšení rychlosti výpočtu textur a složitých grafických objektů;

– typický špičkový výkon GPU mnohem vyšší než to ;

– díky specializované dopravníkové architektuře, GPU mnohem efektivnější při zpracování grafických informací než .

"Krize žánru"

"Žánrová krize" pro dozrály v roce 2005 – tehdy se objevily. Ale i přes vývoj technologií, zvýšení produktivity konvenčních znatelně klesla. Zároveň výkon GPU stále roste. Takže v roce 2003 tato revoluční myšlenka vykrystalizovala - využijte výpočetní výkon grafiky pro své potřeby. GPU se stále více používají pro „negrafické“ výpočty (fyzikální simulace, zpracování signálů, výpočetní matematika/geometrie, operace s databázemi, výpočetní biologie, výpočetní ekonomika, počítačové vidění atd.).

Hlavním problémem bylo, že neexistovalo standardní programovací rozhraní GPU. Vývojáři použili OpenGL nebo Direct3D, ale bylo to velmi pohodlné. Korporace NVIDIA(jeden z největších výrobců grafických, mediálních a komunikačních procesorů a také bezdrátových mediálních procesorů; založena v roce 1993) začala vyvíjet jednotný a pohodlný standard - a představila technologii CUDA.

Jak to začalo

2006 – NVIDIA demonstruje CUDA™; začátek revoluce ve výpočetní technice GPU.

2007 – NVIDIA uvolňuje architekturu CUDA(originální verze CUDA SDK byla podána 15. února 2007); nominace časopisu „Nejlepší nový produkt“. Populární věda a "Volba čtenářů" z publikace HPCWire.

2008 – technologie NVIDIA CUDA zvítězil v kategorii „Technická dokonalost“. PC magazín.

Co se stalo CUDA

CUDA(zkráceně z angličtiny) Compute Unified Device Architecture, doslova - jednotná výpočetní architektura zařízení) - architektura (soubor softwaru a hardwaru), která umožňuje vyrábět na GPU obecné výpočty, zatímco GPU ve skutečnosti funguje jako výkonný koprocesor.

Technika NVIDIA CUDA™ je jediné vývojové prostředí v programovacím jazyce C, která umožňuje vývojářům vytvářet software, který řeší složité výpočetní problémy v kratším čase, a to díky výpočetnímu výkonu GPU. Ve světě už pracují miliony lidí GPU s podporou CUDA a tisíce programátorů již používají (bezplatné!) nástroje CUDA k urychlení aplikací a řešení nejsložitějších úkolů náročných na zdroje – od kódování videa a zvuku po průzkum ropy a zemního plynu, modelování produktů, lékařské zobrazování a vědecký výzkum.

CUDA dává vývojáři možnost podle vlastního uvážení organizovat přístup k sadě instrukcí grafického akcelerátoru a spravovat jeho paměť a organizovat na něm složité paralelní výpočty. Podpora grafického akcelerátoru CUDA se stává výkonnou programovatelnou otevřenou architekturou, podobnou dnešní . To vše poskytuje vývojářům nízkoúrovňový, distribuovaný a vysokorychlostní přístup k hardwaru CUDA nezbytný základ pro budování seriózních nástrojů na vysoké úrovni, jako jsou kompilátory, debuggery, matematické knihovny a softwarové platformy.

Uralsky, přední technologický specialista NVIDIA, srovnávání GPU A , říká toto: „ - Tohle je SUV. Jezdí vždy a všude, ale ne moc rychle. A GPU- Tohle je sportovní auto. Na špatné silnici prostě nikam nedojede, ale dá mu dobrý povrch a ukáže veškerou svou rychlost, o které se SUV ani nesnilo!...

Technologické schopnosti CUDA