Számítógépes erőforrás U SM. Ahová a cuda vezet: a gpgpu technológia gyakorlati alkalmazása – a legjobb felszerelés Cuda-n futó alkalmazások

Évtizedek óta érvényben van a Moore-törvény, amely kimondja, hogy kétévente megduplázódik egy chipen lévő tranzisztorok száma. Ez azonban még 1965-ben volt, és az elmúlt 5 évben rohamosan fejlődni kezdett a fizikai többmagos fogyasztói osztályú processzorok ötlete: 2005-ben az Intel bemutatta a Pentium D-t, az AMD pedig az Athlon X2-t. Akkoriban a 2 magot használó alkalmazásokat egy kéz ujján meg lehetett számolni. Az Intel processzorok következő generációja azonban, amely forradalmat csinált, pontosan 2 fizikai magot tartalmazott. Sőt, a Quad sorozat 2007 januárjában jelent meg, ekkor Moore maga is elismerte, hogy törvénye hamarosan hatályát veszti.

És most? Kétmagos processzorok még költségvetési irodai rendszerekben is, és 4 fizikai mag lett a norma, és ez alig 2-3 év alatt. A processzorok frekvenciáját nem növelik, de az architektúrát javítják, a fizikai és virtuális magok számát növelik. A több tíz vagy akár több száz számítási „egységgel” felszerelt videoadapterek használatának ötlete azonban már régóta létezik.

És bár a GPU számítástechnika kilátásai óriásiak, a legnépszerűbb megoldás az Nvidia CUDA, amely ingyenes, sok dokumentációval rendelkezik, és általában nagyon könnyen megvalósítható, nem sok alkalmazás használja ezt a technológiát. Alapvetően ezek mindenféle speciális számítások, amelyek az átlagos felhasználót a legtöbb esetben nem törődnek. De vannak olyan programok is, amelyeket tömeges felhasználók számára terveztek, és ebben a cikkben róluk fogunk beszélni.

Először is egy kicsit magáról a technológiáról és arról, hogy mire használják. Mert Egy cikk írásakor az olvasók széles körére koncentrálok, ezért megpróbálom egy érthető nyelven, bonyolult kifejezések nélkül és kissé röviden elmagyarázni.

CUDA(angolul: Compute Unified Device Architecture) egy szoftver- és hardverarchitektúra, amely lehetővé teszi a számítások elvégzését olyan NVIDIA grafikus processzorok használatával, amelyek támogatják a GPGPU technológiát (véletlenszerű számítás a videokártyákon). A CUDA architektúra először a nyolcadik generációs NVIDIA chip - G80 kiadásával jelent meg a piacon, és jelen van az összes későbbi grafikus chip-sorozatban, amelyet a GeForce, Quadro és Tesla gyorsítócsaládokban használnak. (c) Wikipedia.org

A bejövő streamek feldolgozása egymástól függetlenül történik, azaz. párhuzamos.

3 szintre osztható:

Rács- mag. Egy/két/háromdimenziós blokktömböt tartalmaz.

Blokk– sok szálat tartalmaz. A különböző blokkokból álló szálak nem tudnak kölcsönhatásba lépni egymással. Miért volt szükség blokkok bevezetésére? Minden blokk alapvetően felelős a saját részfeladatáért. Például egy nagy kép (ami egy mátrix) több kisebb részre (mátrixra) osztható, és a kép egyes részeivel párhuzamosan dolgozható fel.

cérna- folyam. Az egy blokkon belüli szálak vagy megosztott memórián keresztül, ami egyébként sokkal gyorsabb, mint a globális memórián, vagy szálszinkronizáló eszközökön keresztül léphetnek kapcsolatba.

Warp az egymással kölcsönhatásba lépő szálak uniója, minden modern GPU esetében a Warp mérete 32. Következő félláncú, ami a vetemedés fele, mert A memória hozzáférés általában külön történik a vetemítés első és második felében.

Mint látható, ez az architektúra kiválóan alkalmas a feladatok párhuzamosítására. És bár a programozás bizonyos megszorításokkal C nyelven történik, a valóságban nem minden olyan egyszerű, mert... nem lehet mindent párhuzamosítani. Véletlen számok generálására (vagy inicializálására) szintén nincsenek szabványos függvények, mindezt külön kell megvalósítani. És bár rengeteg kész lehetőség létezik, ezek egyike sem okoz örömet. A rekurzió használatának lehetősége viszonylag nemrég jelent meg.

Az érthetőség kedvéért egy kis konzolprogramot írtak (a kód minimalizálására), amely két float típusú tömbbel hajt végre műveleteket, pl. nem egész értékekkel. A fent említett okok miatt az inicializálást (a tömb kitöltését különböző tetszőleges értékekkel) a CPU végezte. Ezt követően 25 különböző műveletet végeztünk az egyes tömbök megfelelő elemeivel, a köztes eredményeket a harmadik tömbbe írtuk. A tömb mérete megváltozott, az eredmények a következők:

Összesen 4 tesztet végeztek:

1024 elem minden tömbben:

Jól látható, hogy ilyen kis elemszám mellett a párhuzamos számításnak kevés haszna van, mert Maguk a számítások sokkal gyorsabbak, mint az előkészítésük.

4096 elem minden tömbben:

És most láthatja, hogy a videokártya háromszor gyorsabban hajtja végre a műveleteket a tömbökön, mint a processzor. Ráadásul ennek a tesztnek a végrehajtási ideje a videokártyán nem nőtt (az idő enyhe csökkenése hibának tulajdonítható).

Most minden tömbben 12288 elem található:

A videokártya szétválasztása 2-szeresére nőtt. Ismét érdemes megjegyezni, hogy a videókártya végrehajtási ideje megnőtt
jelentéktelen mértékben, de a processzoron több mint 3-szor, i.e. arányos a feladat összetettségével.

És az utolsó teszt 36864 elemet tartalmaz minden tömbben:

Ebben az esetben a gyorsulás lenyűgöző értékeket ér el - majdnem 22-szer gyorsabb egy videokártyán. És ismét, a videókártya végrehajtási ideje kissé nőtt, de a processzoron - a szükséges 3-szor, ami ismét arányos a feladat összetettségével.

Ha tovább bonyolítja a számításokat, a videokártya egyre jobban nyer. Bár a példa kissé eltúlzott, az általános helyzet jól mutatja. De amint fentebb említettük, nem lehet mindent párhuzamosítani. Például a Pi kiszámítása. Csak Monte Carlo módszerrel írt példák vannak, de a számítások pontossága 7 tizedesjegy, i.e. rendes úszó. A számítások pontosságának növelése érdekében hosszú aritmetika szükséges, és itt adódnak problémák, mert Ezt nagyon-nagyon nehéz hatékonyan megvalósítani. Nem találtam példát az interneten, amely CUDA-t használ, és 1 millió tizedesjegyig számítja a Pi-t. Próbálkoztak már ilyen alkalmazással, de a Pi kiszámításának legegyszerűbb és leghatékonyabb módja a Brent-Salamin algoritmus vagy a Gauss-képlet. A jól ismert SuperPI nagy valószínűséggel (a művelet sebességéből és az iterációk számából ítélve) a Gauss-képletet használja. És ebből ítélve
A SuperPI egyszálúsága, a CUDA alatti példák hiánya és a kísérleteim sikertelensége miatt lehetetlen a Pi számlálás hatékony párhuzamosítása.

A számítások során egyébként észrevehető, hogyan növekszik a GPU terhelése, és a memória is le van foglalva.

Most térjünk át a CUDA gyakorlatiasabb előnyeire, nevezetesen a jelenleg létező programokra, amelyek ezt a technológiát használják. Ezek többnyire mindenféle audio/video konverter és szerkesztő.

3 különböző videófájlt használtak a tesztelés során:

      *Az Avatar film készítésének története - 1920x1080, MPEG4, h.264.
      * "Hazudj nekem" sorozat – 1280x720, MPEG4, h.264.
      * „Philadelphiában mindig süt a nap” sorozat – 624x464, xvid.

Az első két fájl tárolója és mérete .mkv és 1,55 GB volt, az utolsóé pedig .avi és 272 MB.

Kezdjük egy nagyon szenzációs és népszerű termékkel - Badaboom. Használt verzió - 1.2.1.74 . A program költsége $29.90 .

A program felülete egyszerű és intuitív - a bal oldalon kiválasztjuk a forrásfájlt vagy a lemezt, a jobb oldalon pedig a szükséges eszközt, amelyhez kódolni fogunk. Van egy felhasználói mód is, amelyben a paramétereket manuálisan állítjuk be, ezt használtuk.

Először is nézzük meg, hogy a videó milyen gyorsan és hatékonyan kódolódik „magába”, azaz. azonos felbontású és megközelítőleg azonos méretű. A sebességet fps-ben mérjük, és nem az eltelt időben - így kényelmesebb összehasonlítani és kiszámolni, hogy egy tetszőleges hosszúságú videó mennyivel lesz tömörítve. Mert Ma a „zöld” technológián gondolkodunk, akkor a grafikonok megfelelőek lesznek -)

A kódolási sebesség közvetlenül a minőségtől függ, ez nyilvánvaló. Érdemes megjegyezni, hogy a könnyű felbontás (nevezzük hagyományosan SD-nek) nem jelent problémát a Badaboom számára - a kódolási sebesség 5,5-szerese az eredeti (24 fps) videó képkocka sebességének. És még a nehéz, 1080p felbontású videókat is valós időben konvertálja a program. Érdemes megjegyezni, hogy a végleges videó minősége nagyon közel áll az eredeti videóanyaghoz, pl. A Badaboom nagyon-nagyon hatékonyan kódol.

De általában kisebb felbontásra viszik át a videót, nézzük meg, hogy állnak a dolgok ebben a módban. A felbontás csökkenésével a videó bitráta is csökkent. 9500 kbps volt az 1080p kimeneti fájlnál, 4100 kbps a 720p-nél és 2400 kbps a 720x404-nél. A választás ésszerű méret/minőség arány alapján történt.

Nincs szükség megjegyzésekre. Ha 720p-ről normál SD-minőségre másol, akkor egy 2 órán át tartó film átkódolása körülbelül 30 percet vesz igénybe. Ugyanakkor a processzor terhelése jelentéktelen lesz, kellemetlen érzés nélkül folytathatja a dolgát.

Mi a teendő, ha a videót egy mobileszköz formátumára konvertálja? Ehhez válassza ki az iPhone profilt (bitráta 1 Mbit/s, 480x320), és nézze meg a kódolási sebességet:

Kell-e mondanom valamit? Egy kétórás film normál iPhone-minőségben kevesebb, mint 15 perc alatt átkódolódik. HD minőségben nehezebb, de még mindig nagyon gyors. A lényeg az, hogy a kimeneti videó minősége meglehetősen magas szinten maradjon a telefon kijelzőjén.

Általánosságban elmondható, hogy a Badaboom benyomásai pozitívak, a működés sebessége kellemes, a felület pedig egyszerű és világos. A korábbi verziókban (2008-ban használtam a bétát) mindenféle hibát javítottak. Egy dolog kivételével - a forrásfájl elérési útja, valamint a kész videó mentési mappája nem tartalmazhat orosz betűket. De a program előnyeihez képest ez a hátrány jelentéktelen.

Mi lesz a következő a sorban Super LoiLoScope. A normál verzióhoz kérik 3280 rubel, a Windows 7 érintéses vezérlését támogató érintős verzióért pedig annyit kérnek 4440 rubel. Próbáljuk meg kitalálni, hogy a fejlesztő miért akar ennyi pénzt, és miért van szüksége a videószerkesztőnek multitouch támogatásra. Legutóbb használt verzió - 1.8.3.3 .

A program felületét elég nehéz szavakkal leírni, ezért úgy döntöttem, készítek egy rövid videót. Azonnal elmondom, hogy mint minden CUDA videokonverterhez, a GPU-gyorsítás csak az MPEG4 videókimenethez támogatott a h.264 kodekkel.

A kódolás során a processzor terhelése 100%, de ez nem okoz kényelmetlenséget. A böngésző és más könnyű alkalmazások nem lassulnak le.

Most pedig térjünk át a teljesítményre. Kezdetben minden ugyanaz, mint a Badaboom esetében – a videó átkódolása egy hasonló minőségűre.

Az eredmények sokkal jobbak, mint a Badaboom. A minőség is kiváló, a különbséget az eredetihez képest csak a nagyító alatti páros képkockák összehasonlításával lehet észrevenni.

Hú, itt a LoiloScope 2,5-szer felülmúlja a Badaboomot. Ezzel párhuzamosan könnyedén vághatunk és kódolhatunk párhuzamosan másik videót, olvashatunk híreket és akár filmeket is nézhetünk, sőt a FullHD lejátszása is gond nélkül megy, pedig a processzorterhelés maximális.

Most próbáljunk meg videót készíteni egy mobileszközre, nevezzük a profilt ugyanúgy, mint a Badaboomban - iPhone (480x320, 1 Mbit/s):

Nincs hiba. Mindent többször ellenőriztek, minden alkalommal ugyanaz volt az eredmény. Valószínűleg ez abból az egyszerű okból következik be, hogy az SD-fájlt egy másik kodekkel és egy másik tárolóban rögzítették. Átkódoláskor a videót először dekódolja, meghatározott méretű mátrixokra osztja és tömöríti. Az xvid esetén használt ASP dekóder párhuzamos dekódolásnál lassabb, mint az AVC (h.264 esetén). A 192 fps azonban 8-szor gyorsabb az eredeti videó sebességénél; egy 23 perces sorozatot kevesebb mint 4 perc alatt tömörítenek. A helyzet megismétlődött más xvid/DivX-be tömörített fájlokkal is.

LoiloScope Csak kellemes benyomásokat hagytam - az interfész szokatlansága ellenére kényelmes és funkcionális, a működés sebessége pedig dicséretre méltó. A viszonylag gyenge funkcionalitás némileg elkeserítő, de az egyszerű telepítésnél gyakran csak kicsit módosítani kell a színeket, sima átmeneteket és szöveget kell hozzáadni, és a LoiloScope kiváló munkát végez ezzel. Az ára is némiképp ijesztő – több mint 100 dollár a normál verzióért normális külföldön, de ezek a számok még mindig kissé vadnak tűnnek számunkra. Bár bevallom, ha én például gyakran forgattam és szerkesztettem házi videókat, akkor meggondolhattam volna, hogy megvegyem. Ezzel egyidejűleg ellenőriztem a HD (vagy inkább AVCHD) tartalom közvetlen videokameráról történő szerkesztésének lehetőségét anélkül, hogy először konvertáltam volna más formátumba; a LoiloScope nem tárt fel semmilyen problémát az olyan fájlokkal, mint az .mts.

Az új technológia olyan, mint egy újonnan kialakuló evolúciós faj. Különös lény, ellentétben a sok régi emberrel. Néha kínos, néha vicces. És elsőre úgy tűnik, hogy új tulajdonságai semmiképpen sem alkalmasak ebbe a letelepedett és stabil világba.

Azonban eltelik egy kis idő, és kiderül, hogy a kezdő gyorsabban fut, magasabbra ugrik és általában erősebb. És több legyet eszik, mint retrográd szomszédai. És akkor ugyanezek a szomszédok kezdik megérteni, hogy nincs értelme veszekedni ezzel az ügyetlen korábbival. Jobb barátkozni vele, és még jobb szimbiózist szervezni. Majd meglátod, hogy több legy lesz.

A GPGPU technológia (General-Purpose Graphics Processing Units – általános célú grafikus processzor) sokáig csak az eszes akadémikusok elméleti számításaiban létezett. Hogyan másképp? Javasolni az évtizedek alatt kialakult számítási folyamat gyökeres megváltoztatását úgy, hogy annak párhuzamos ágainak kiszámítását videokártyára bízzák - erre csak a teoretikusok képesek.

A CUDA technológia logója arra emlékeztet bennünket, hogy a technológia mélyén nőtt
3D grafika.

De a GPGPU technológia nem sokáig gyűjti a port az egyetemi folyóiratok oldalain. Legjobb tulajdonságainak tollait felpörgetve felkeltette a gyártók figyelmét. Így született meg a CUDA – a GPGPU megvalósítása az nVidia által gyártott GeForce grafikus processzorokon.

A CUDA-nak köszönhetően a GPGPU technológiák általánossá váltak. És most már csak a legrövidlátóbb és vastag lusta réteggel borított programozórendszer-fejlesztők nem nyilatkoznak termékükkel a CUDA támogatásáról. Az informatikai kiadványok megtiszteltetésnek tartották, hogy számos kövérkés népszerű tudományos cikkben bemutatják a technológia részleteit, a versenytársak pedig azonnal leültek a mintákkal és a keresztfordítókkal, hogy valami hasonlót dolgozzanak ki.

A nyilvános elismerés nem csak a feltörekvő sztárok álma, hanem az újonnan született technológiák számára is. És a CUDA-nak szerencséje volt. Ismert, beszélnek és írnak róla.

Csak úgy írnak, mintha továbbra is sűrű tudományos folyóiratokban tárgyalnák a GPGPU-t. Egy csomó olyan kifejezéssel bombázzák az olvasót, mint a „grid”, „SIMD”, „warp”, „host”, „textúra és állandó memória”. A legtetejére merítik az nVidia GPU-k szervezeti diagramjaiban, végigvezetik a párhuzamos algoritmusok kanyargós útjain, és (a legerősebb lépés) hosszú kódlistákat mutatnak be C nyelven. Ennek eredményeként kiderül, hogy a cikk bemeneténél van egy friss olvasónk, aki égető vágya van a CUDA megértésére, a kimenetnél pedig ugyanaz az olvasónk, de dagadt fejjel tele van tényekkel, diagramokkal. , kód, algoritmusok és kifejezések.

Eközben minden technológia célja az, hogy megkönnyítse életünket. És a CUDA remek munkát végez ezzel. Munkája eredményei minden szkeptikust jobban meggyőznek, mint több száz séma és algoritmus.

Nem mindenhol

A CUDA-t nagy teljesítményű szuperszámítógépek támogatják
nVidia Tesla.

Mégis, mielőtt megvizsgálnánk a CUDA munkájának eredményeit az átlagos felhasználó életének megkönnyítése terén, érdemes megérteni minden korlátját. Akárcsak egy dzsinnnél: bármilyen vágy, csak egy. A CUDA-nak is megvan az Achilles-sarka. Az egyik a platformok korlátai, amelyeken működhet.

A CUDA-t támogató nVidia videokártyák listája a CUDA Enabled Products nevű speciális listában található. A lista meglehetősen lenyűgöző, de könnyen besorolható. A CUDA támogatása nincs megtagadva:

    nVidia GeForce 8., 9., 100., 200. és 400. sorozatú modellek minimum 256 megabájt videomemóriával a fedélzeten. A támogatás kiterjed az asztali és mobil kártyákra is.

    Az asztali és mobil videokártyák túlnyomó többsége nVidia Quadro.

    Az nvidia ION netbook sorozat összes megoldása.

    A nagy teljesítményű HPC (High Performance Computing) és az nVidia Tesla szuperszámítógép-megoldások személyi számítógépekhez és skálázható fürtrendszerek szervezéséhez egyaránt használhatók.

Ezért a CUDA-alapú szoftvertermékek használata előtt érdemes átnézni ezt a kedvencek listáját.

A CUDA támogatásához magán a videokártyán kívül egy megfelelő illesztőprogram is szükséges. Ez a kapcsolat a központi és a grafikus processzorok között, egyfajta szoftveres interfészként működik a programkód és az adatok eléréséhez a GPU többmagos kincsesbányájához. A hiba elkerülése érdekében az nVidia azt javasolja, hogy látogassa meg az illesztőprogramok oldalát, és szerezze be a legújabb verziót.

...de maga a folyamat

Hogyan működik a CUDA? Hogyan magyarázható meg a párhuzamos számítások bonyolult folyamata egy speciális GPU-hardverarchitektúrán anélkül, hogy az olvasót konkrét kifejezések szakadékába sodornánk?

Megpróbálhatjuk ezt úgy, hogy elképzeljük, hogyan hajtja végre a központi processzor a programot szimbiózisban a grafikus processzorral.

Építészetileg a központi feldolgozó egység (CPU) és grafikus megfelelője (GPU) eltérő kialakítású. Ha analógiát vonunk az autóipar világával, akkor a CPU egy kombi, egyike azoknak, amelyeket „pajtának” neveznek. Úgy néz ki, mint egy személyautó, ugyanakkor (a fejlesztők szemszögéből) „egy svájci, egy arató és egy játékos a csövön”. Egyszerre tölti be egy kis teherautó, busz és hipertróf ferdehátú szerepét. Kombi, röviden. Kevés hengermagot tartalmaz, de szinte bármilyen feladatot megoldanak, a lenyűgöző cache memória pedig rengeteg adat tárolására képes.

De a GPU egy sportautó. Egyetlen funkciója van: a pilótát a lehető leggyorsabban célba juttatni. Ezért nincs nagy csomagtartó memória, nincsenek extra ülések. De több százszor több hengermag van, mint a CPU.

A CUDA-nak köszönhetően a GPGPU programfejlesztőknek nem kell belemerülniük a programozás bonyolultságába
fejlesztés grafikus motorokhoz, mint például a DirectX és az OpenGL

Ellentétben a központi processzorral, amely képes bármilyen feladat megoldására, beleértve a grafikát is, de átlagos teljesítménnyel, a grafikus processzor egy feladat nagy sebességű megoldására van adaptálva: a bemeneten lévő sokszögek csomópontjai pixelekké alakíthatók. a kimenet. Sőt, ez a probléma párhuzamosan is megoldható több száz viszonylag egyszerű számítási mag használatával a GPU-ban.

Tehát milyen tandem lehet egy kombiból és egy sportautóból? A CUDA valahogy így működik: a program addig fut a CPU-n, amíg nincs párhuzamosan végrehajtható kódrészlet. Ezután ahelyett, hogy a legmenőbb CPU két (vagy akár nyolc) magján lassan végrehajtaná, több száz GPU magra kerül. Ugyanakkor ennek a szakasznak a végrehajtási ideje jelentősen lecsökken, ami azt jelenti, hogy a teljes program végrehajtási ideje is csökken.

Technológiailag semmi sem változik a programozó számára. A CUDA programok kódja C nyelven íródott. Pontosabban a maga speciális nyelvjárásában „C with streams” (C with streams). A Stanfordban kifejlesztett C nyelvnek ezt a kiterjesztését Brook-nak hívják. A Brook kódot a GPU-ra továbbító interfész egy CUDA-t támogató videokártya illesztőprogramja. A program ezen szakaszának teljes feldolgozási folyamatát úgy szervezi meg, hogy a programozó számára a GPU úgy nézzen ki, mint egy CPU társprocesszor. Nagyon hasonló a matematikai társprocesszor használatához a személyi számítástechnika korai napjaiban. A Brook, a CUDA-támogatással rendelkező videokártyák és a hozzájuk tartozó illesztőprogramok megjelenésével bármely programozó képessé vált a programjaiban lévő GPU-hoz való hozzáférésre. De korábban ez a sámánizmus a kiválasztott emberek szűk körének tulajdonában volt, akik éveket töltöttek a DirectX vagy OpenGL grafikus motorok programozási technikáinak csiszolásával.

Ennek az igényes méznek a hordójába – a CUDA dicsérete – érdemes legyet tenni, vagyis megszorításokat. Nem minden programozandó probléma oldható meg a CUDA segítségével. A rutin irodai feladatok megoldását nem lehet majd felgyorsítani, de megbízhat a CUDA-ban, hogy kiszámolja több ezer azonos típusú vadászgép viselkedését a World of Warcraftban. De ez egy kitalált feladat. Nézzünk példákat arra, amit a CUDA már nagyon hatékonyan megold.

Igazságos munkák

A CUDA egy nagyon pragmatikus technológia. Az nVidia, miután megvalósította támogatását a videokártyáiban, joggal számított arra, hogy a CUDA bannert sok érdeklődő megragadja mind az egyetemi környezetben, mind a kereskedelemben. És így történt. A CUDA-alapú projektek élnek és hasznot hoznak.

NVIDIA PhysX

A következő játék remekművük reklámozása során a gyártók gyakran hangsúlyozzák annak 3D-s valósághűségét. De bármennyire is valóságos a 3D-s játékvilág, ha a fizika olyan elemi törvényeit, mint a gravitáció, a súrlódás és a hidrodinamika helytelenül hajtják végre, a hamisság azonnal érezhető lesz.

Az NVIDIA PhysX fizikai motorjának egyik képessége a szövetekkel való valósághű munka.

Az alapvető fizikai törvények számítógépes szimulációjára szolgáló algoritmusok megvalósítása nagyon munkaigényes feladat. A leghíresebb cégek ezen a területen az ír Havok cég a többplatformos fizikai Havok Physics-szel és a kaliforniai Ageia - a világ első fizikai processzorának (PPU - Physics Processing Unit) és a megfelelő PhysX fizikai motornak az ősa. Az első közülük, bár az Intel felvásárolta, most aktívan dolgozik a Havok motor ATI videokártyákra és AMD processzorokra való optimalizálása terén. De az Ageia a PhysX motorjával az nVidia része lett. Ezzel egy időben az nVidia megoldotta a PhysX CUDA technológiához való adaptálásának meglehetősen nehéz problémáját.

Ez a statisztikáknak köszönhetően vált lehetségessé. Statisztikailag bebizonyosodott, hogy bármilyen bonyolult renderelést is teljesít a GPU, egyes magjai továbbra is tétlenek. Ezeken a magokon fut a PhysX motor.

A CUDA-nak köszönhetően a játékvilág fizikájával kapcsolatos számítások oroszlánrészét a videokártyán kezdték elvégezni. A központi processzor felszabaduló erejét más játékmeneti problémák megoldására használták fel. Az eredmény nem váratott sokáig magára. A szakértők szerint a CUDA-n futó PhysX játékmenet teljesítménynövekedése legalább egy nagyságrenddel nőtt. A fizikai törvények megvalósításának valószínűsége is megnőtt. A CUDA gondoskodik a többdimenziós objektumok súrlódási, gravitációs és egyéb számunkra ismert dolgok megvalósításának rutin számításairól. Most már nemcsak a hősök és felszereléseik illeszkednek tökéletesen az általunk ismert fizikai világ törvényeibe, hanem a por, a köd, a robbanáshullám, a láng és a víz is.

Az NVIDIA Texture Tools 2 textúratömörítő csomag CUDA verziója

Szereted a valósághű tárgyakat a modern játékokban? Érdemes köszönetet mondani a textúrafejlesztőknek. De minél több valóság van a textúrában, annál nagyobb a térfogata. Minél többet foglal el értékes memóriát. Ennek elkerülése érdekében a textúrákat előre tömörítik és szükség szerint dinamikusan kicsomagolják. A tömörítés és a dekompresszió pedig tiszta számítás. A textúrák kezeléséhez az nVidia kiadta az NVIDIA Texture Tools csomagot. Támogatja a DirectX textúrák hatékony tömörítését és kicsomagolását (az úgynevezett HF formátum). A csomag második verziója támogatja a DirectX 11 technológiával megvalósított BC4 és BC5 tömörítési algoritmusokat, de a lényeg az, hogy az NVIDIA Texture Tools 2 tartalmazza a CUDA támogatást. Az nVidia szerint ez 12-szeres teljesítménynövekedést eredményez a textúra tömörítési és kitömörítési feladatokban. Ez azt jelenti, hogy a játék keretei gyorsabban töltődnek be, és valósághűségükkel örvendeztetik meg a játékost.

Az NVIDIA Texture Tools 2 csomagot a CUDA-val való együttműködésre tervezték. Nyilvánvaló a teljesítménynövekedés a textúrák tömörítése és kicsomagolása során.

A CUDA használata jelentősen javíthatja a videó megfigyelés hatékonyságát.

Valós idejű videofolyam feldolgozás

Bármit is mondjunk, a jelenlegi világ a kémkedés szempontjából sokkal közelebb áll Orwell Big Brother világához, mint amilyennek látszik. Az autósok és a nyilvános helyekre látogatók egyaránt érzik a videokamerák pillantását.

A videó információ teljes folyású folyói ömlenek a feldolgozásának központjaiba, és... belefutnak egy szűk láncszembe - egy személybe. A legtöbb esetben ő az utolsó hatóság, aki figyeli a videó világát. Ráadásul a hatóság nem a leghatékonyabb. Pislog, elterelődik és megpróbál elaludni.

A CUDA-nak köszönhetően lehetővé vált algoritmusok megvalósítása több objektum egyidejű követésére egy videofolyamban. Ebben az esetben a folyamat valós időben megy végbe, és a videó teljes 30 fps. Egy ilyen algoritmus modern többmagos CPU-kon való megvalósításához képest a CUDA kétszeres-háromszoros teljesítménynövekedést ad, és ez, látod, elég sok.

Videó konvertálás, hangszűrés

A Badaboom videó konverter az első, amely a CUDA-t használja a konverzió felgyorsítására.

Jó nézni egy új videókölcsönző terméket FullHD minőségben és nagy képernyőn. De nagy képernyőt nem vihetünk magunkkal útra, és a FullHD videokodek megakad a mobil kütyü alacsony fogyasztású processzorán. A megtérés segít. De a legtöbben, akik a gyakorlatban találkoztak vele, panaszkodnak a hosszú átalakítási időre. Ez érthető, a folyamat rutinszerű, párhuzamosításra alkalmas, a CPU-n történő végrehajtása nem túl optimális.

De a CUDA nagy lendülettel megbirkózik vele. Az első jel az Elevental Badaboom átalakítója. A Badaboom fejlesztői jól döntöttek, amikor a CUDA-t választották. A tesztek azt mutatják, hogy egy normál másfél órás filmet konvertál iPhone/iPod Touch formátumba kevesebb mint húsz perc alatt. És ez annak ellenére, hogy ha csak a CPU-t használja, ez a folyamat több mint egy órát vesz igénybe.

Segít a CUDA-nak és a professzionális zene szerelmeseinek. Bármelyikük fél királyságot adna egy hatékony FIR crossoverért – egy olyan szűrőkészletért, amely több sávra osztja a hangspektrumot. Ez a folyamat nagyon munkaigényes, és nagy mennyiségű hanganyag mellett több órán át „füstölni” kényszeríti a hangmérnököt. A CUDA alapú FIR crossover megvalósítása több százszorosára gyorsítja a működését.

CUDA jövő

A GPGPU technológiát megvalósító CUDA nem nyugszik bele a babérjain. Mint mindenhol, a CUDA-ban is működik a tükrözés elve: most már nemcsak az nVidia videoprocesszorok architektúrája befolyásolja a CUDA SDK-verziók fejlesztését, hanem maga a CUDA technológia is arra kényszeríti az nVidiát, hogy újragondolja chipjei architektúráját. Ilyen tükröződésre példa az nVidia ION platform. Második verziója kifejezetten a CUDA problémák megoldására van optimalizálva. Ez azt jelenti, hogy a fogyasztók még a viszonylag olcsó hardvermegoldásokban is megkapják a CUDA minden erejét és ragyogó képességeit.

Arra tervezték, hogy a gazdagép kódot (fő, vezérlőkód) és az eszközkódot (hardverkódot) (.cu kiterjesztésű fájlok) objektumfájlokká fordítsa, amelyek alkalmasak a végső program vagy könyvtár összeállítására bármilyen programozási környezetben, például a NetBeansben.

A CUDA architektúra grid memóriamodellt, fürtszál-modellezést és SIMD utasításokat használ. Nemcsak a nagy teljesítményű grafikus számítástechnikára alkalmazható, hanem a különféle tudományos számítástechnikákra is nVidia videokártyákat használva. A tudósok és kutatók széles körben használják a CUDA-t számos területen, beleértve az asztrofizikát, a számítógépes biológiát és a kémiát, a folyadékdinamikai modellezést, az elektromágneses kölcsönhatásokat, a számítógépes tomográfiát, a szeizmikus elemzést stb. A CUDA képes OpenGL és Direct3D használatával alkalmazásokhoz csatlakozni. A CUDA egy többplatformos szoftver olyan operációs rendszerekhez, mint a Linux, Mac OS X és Windows.

2010. március 22-én az nVidia kiadta a CUDA Toolkit 3.0-t, amely támogatja az OpenCL-t.

Felszerelés

A CUDA platform először a nyolcadik generációs NVIDIA G80 chip kiadásával jelent meg a piacon, és jelen lett minden további grafikus chip-sorozatban, amelyeket a GeForce, Quadro és NVidia Tesla gyorsítócsaládokban használnak.

A CUDA SDK-t támogató első hardversorozat, a G8x egy 32 bites egyprecíziós vektorprocesszorral rendelkezett, amely API-ként a CUDA SDK-t használta (a CUDA támogatja a C double típust, de a pontossága mára 32 bitesre csökkent lebegőpont). A későbbi GT200-as processzorok támogatják a 64 bites pontosságot (csak SFU), de a teljesítmény lényegesen rosszabb, mint a 32 bitesé (annak köszönhetően, hogy stream-multiprocesszoronként csak két SFU, míg skalárprocesszoronként nyolc). A GPU megszervezi a hardveres többszálú feldolgozást, amely lehetővé teszi a GPU összes erőforrásának használatát. Így megnyílik a lehetőség a fizikai gyorsító funkcióinak átvitelére a grafikus gyorsítóra (a megvalósításra példa az nVidia PhysX). Szintén széles lehetőségeket nyit meg a számítógépes grafikai hardverek alkalmazásában összetett, nem grafikus számítások elvégzésére: például a számítási biológiában és más tudományágakban.

Előnyök

Az általános célú számítástechnika grafikus API-kon keresztül történő szervezésének hagyományos megközelítéséhez képest a CUDA architektúra a következő előnyökkel rendelkezik ezen a területen:

Korlátozások

  • Az eszközön végrehajtható összes funkció nem támogatja a rekurziót (a CUDA Toolkit 3.1 támogatja a mutatókat és a rekurziót), és van néhány egyéb korlátozás is.

Támogatott GPU-k és grafikus gyorsítók

Az Nvidia berendezésgyártó termékeinek listája, amelyek teljes mértékben támogatják a CUDA technológiát, az Nvidia hivatalos webhelyén található: CUDA-Enabled GPU Products (angolul).

Valójában jelenleg a következő perifériák támogatják a CUDA technológiát a PC-hardverpiacon:

Specifikációs verzió GPU Videokártyák
1.0 G80, G92, G92b, G94, G94b GeForce 8800GTX/Ultra, 9400GT, 9600GT, 9800GT, Tesla C/D/S870, FX4/5600, 360M, GT 420
1.1 G86, G84, G98, G96, G96b, G94, G94b, G92, G92b GeForce 8400GS/GT, 8600GT/GTS, 8800GT/GTS, 9600 GSO, 9800GTX/GX2, GTS 250, GT 120/30/40, FX 4/570, 3/580, 17/18/370,2x470 /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 (GF1000, 6000, GTX574, GTX580, GTX 560) 0
2.1 GF104, GF114, GF116, GF108, GF106 GeForce 610M, GT 430, GT 440, GTS 450, GTX 460, GTX 550 Ti, GTX 560, GTX 560 Ti, 500M, Quadro 600, 2000
3.0 GK104, GK106, GK107 GEFORCE GTX 690, GTX 680, GTX 670, GTX 660 TI, GTX 660, GTX 650 TI, GTX 650, GT 640, GEFORCE GTX 680MX, GEFORCE GTX 680M, GEFORCE GTX 675MX, GEFORCE GTX 670MX, GTX 660M, GTX 675MX, GEFORCE GTX 670MX, GTX 680M, GEFORCE 675MX, GEFORCE 670MX, GTX 680M GeForce GT 645M, GeForce GT 640M
3.5 GK110
Nvidia GeForce asztali számítógépekhez
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 mobil számítógépekhez
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 asztali számítógépekhez
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 alacsony profilú
Quadro FX 370
Quadro FX 370 alacsony profilú
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 mobil számítástechnikához
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
  • A Tesla C1060, Tesla S1070, Tesla C2050/C2070, Tesla M2050/M2070, Tesla S2050 modellek dupla pontosságú GPU-számítást tesznek lehetővé.

Különböző verziók jellemzői és specifikációi

Funkciótámogatás (a listán nem szereplő funkciók
minden számítási képességhez támogatott)
Számítási képesség (verzió)
1.0 1.1 1.2 1.3 2.x

32 bites szavak a globális memóriában
Nem Igen

lebegőpontos értékek a globális memóriában
Egész számú atomi függvények működése
32 bites szavak megosztott memóriában
Nem Igen
32 biten működő atomicExch().
lebegőpontos értékek a megosztott memóriában
Egész számú atomi függvények működése
64 bites szavak a globális memóriában
Warp szavazási funkciók
Dupla pontosságú lebegőpontos műveletek Nem Igen
64 biten működő atomi függvények
egész értékek a megosztott memóriában
Nem Igen
Lebegőpontos atomi összeadás működik
32 bites szavak a globális és megosztott memóriában
_szavazás()
_threadfence_system()
_syncthreads_count(),
_syncthreads_and(),
_syncthreads_or()
Felületi funkciók
Menetblokkok 3D rácsja
Műszaki adatok Számítási képesség (verzió)
1.0 1.1 1.2 1.3 2.x
A menetblokkok rácsának maximális mérete 2 3
A menetblokkok rácsának maximális x-, y- vagy z-dimenziója 65535
A menetblokk maximális mérete 3
Egy blokk maximális x- vagy y-dimenziója 512 1024
Egy blokk maximális z-mérete 64
A szálak maximális száma blokkonként 512 1024
Warm mérete 32
A rezidens blokkok maximális száma többprocesszoronként 8
A rezidens vetemítések maximális száma többprocesszoronként 24 32 48
A rezidens szálak maximális száma többprocesszoronként 768 1024 1536
32 bites regiszterek száma többprocesszoronként 8K 16K 32K
A megosztott memória maximális mennyisége többprocesszoronként 16 KB 48 KB
Megosztott memóriabankok száma 16 32
A helyi memória mennyisége szálanként 16 KB 512 KB
Állandó memóriaméret 64 KB
Gyorsítótár munkakészlet többprocesszoronként az állandó memória érdekében 8 KB
Gyorsítótár munkakészlet többprocesszoronként textúra memóriához Eszközfüggő, 6 KB és 8 KB között
Maximális szélesség 1D textúrához
8192 32768
Maximális szélesség 1D textúrához
lineáris memóriához kötött referencia
2 27
Maximális szélesség és rétegek száma
1D réteges textúra referenciához
8192 x 512 16384 x 2048
Maximális szélesség és magasság 2D-hez
textúra hivatkozás kötött
lineáris memória vagy CUDA tömb
65536 x 32768 65536 x 65535
Maximális szélesség, magasság és szám
rétegek 2D réteges textúra referenciához
8192 x 8192 x 512 16384 x 16384 x 2048
Maximális szélesség, magasság és mélység
lineárishoz kötött 3D textúra referenciához
memória vagy CUDA tömb
2048 x 2048 x 2048
A textúrák maximális száma, amely
kernelhez köthető
128
Maximális szélesség 1D felülethez
hivatkozás CUDA tömbhöz van kötve
Nem
támogatott
8192
Maximális szélesség és magasság egy 2D-hez
CUDA tömbhöz kötött felületi hivatkozás
8192 x 8192
A felületek maximális száma
kernelhez köthető
8
Az utasítások maximális száma per
kernel
2 millió

Példa

CudaArray* cu_array; struktúra< float , 2 >tex; // Tömb lefoglalása cudaMalloc( & cu_array, cudaCreateChannelDesc< float>(), szélesség magasság) ; // Képadatok másolása a tömbbe cudaMemcpy( cu_array, image, width* height, cudaMemcpyHostToDevice) ; // Kösd a tömböt a textúrához cudaBindTexture( tex, cu_array) ; // Kernel dim3 futtatása blockDim(16, 16, 1) ; dim3 gridDim(width / blockDim.x, height / blockDim.y, 1) ; kernel<<< gridDim, blockDim, 0 >>> (d_adat, szélesség, magasság) ; cudaUnbindTexture(text) ; __global__ void kernel(float * odata, int magasság, int szélesség) ( 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* szélesség+ x] = c; )

A pycuda.driver importálása drv-ként 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 (a) multiply_them( drv.Out (dest) , drv.In (a) , drv.In (b) , block= (400 , 1 , 1 ) ) print dest-a*b

A CUDA mint tantárgy az egyetemeken

2009 decemberétől a CUDA szoftvermodellt a világ 269 egyetemén oktatják. Oroszországban a CUDA-val kapcsolatos képzéseket a Szentpétervári Politechnikai Egyetemen, a Jaroszlavli Állami Egyetemen tartják. P. G. Demidov, Moszkva, Nyizsnyij Novgorod, Szentpétervár, Tver, Kazan, Novoszibirszk, Novoszibirszki Állami Műszaki Egyetem, Omszki és Permi Állami Egyetemek, Nemzetközi Társadalomtermészet Egyetem és Ember „Dubna”, Ivanovo Állami Energia Egyetem, Belgorodi Állami Egyetem , MSTU őket. Bauman, az Orosz Kémiai Műszaki Egyetemről elnevezett. Mengyelejev, Interregional Supercomputer Center RAS, . Ezenkívül 2009 decemberében bejelentették, hogy megkezdte működését az első orosz tudományos és oktatási központ, a „Parallel Computing”, amely Dubna városában található, és amelynek feladatai közé tartozik a GPU-k bonyolult számítási problémáinak megoldására vonatkozó képzés és konzultáció.

Ukrajnában a CUDA-val kapcsolatos kurzusokat a Kijevi Rendszerelemző Intézetben tartanak.

Linkek

Hivatalos források

  • CUDA Zone (orosz) - a CUDA hivatalos webhelye
  • CUDA GPU Computing (angol) – a CUDA számítástechnikával foglalkozó hivatalos webfórumok

Nem hivatalos források

Tom hardvere
  • Dmitrij Csekanov. nVidia CUDA: számítástechnika videokártyán vagy a CPU halála? . Tom's Hardware (2008. június 22.) Archivált
  • Dmitrij Csekanov. nVidia CUDA: GPU-alkalmazások benchmarkingja a tömegpiac számára. Tom's Hardware (2009. május 19.) Az eredetiből archiválva: 2012. március 4. Letöltve: 2009. május 19.
iXBT.com
  • Alekszej Berillo. NVIDIA CUDA – nem grafikus számítástechnika GPU-kon. 1. rész . iXBT.com (2008. szeptember 23.). Az eredetiből archiválva: 2012. március 4. Letöltve: 2009. január 20..
  • Alekszej Berillo. NVIDIA CUDA – nem grafikus számítástechnika GPU-kon. 2. rész . iXBT.com (2008. október 22.). - Példák az NVIDIA CUDA megvalósítására. Az eredetiből archiválva: 2012. március 4. Letöltve: 2009. január 20..
Egyéb források
  • Boreskov Alekszej Viktorovics. CUDA alapok (2009. január 20.). Az eredetiből archiválva: 2012. március 4. Letöltve: 2009. január 20..
  • Vlagyimir Frolov. Bevezetés a CUDA technológiába. „Számítógépes grafika és multimédia” online magazin (2008. december 19.). Az eredetiből archiválva: 2012. március 4. Letöltve: 2009. október 28..
  • Igor Oskolkov. Az NVIDIA CUDA egy megfizethető jegy a nagy számítástechnika világába. Computerra (2009. április 30.). Letöltve: 2009. május 3.
  • Vlagyimir Frolov. Bevezetés a CUDA technológiába (2009. augusztus 1.). Az eredetiből archiválva: 2012. március 4. Letöltve: 2010. április 3.
  • GPGPU.ru. Videokártyák használata számítástechnikához
  • . Párhuzamos számítástechnikai központ

Megjegyzések

Lásd még

A modern processzorok fejlesztése során a magok számának fokozatos növekedése irányul, ami növeli a párhuzamos számítástechnikai képességeiket. Már régóta rendelkezésre állnak azonban olyan GPU-k, amelyek e tekintetben jelentősen felülmúlják a CPU-kat. A GPU-k ezen képességeit pedig egyes cégek már figyelembe vették. A 90-es évek vége óta megtörténtek az első kísérletek a grafikus gyorsítók nem célszámításhoz való használatára. De csak a shaderek megjelenése vált lendületet egy teljesen új technológia kifejlesztéséhez, és 2003-ban megjelent a GPGPU (General-purpose grafikus feldolgozó egységek) koncepciója. A kezdeményezés kidolgozásában fontos szerepet játszott a BrookGPU, amely a C nyelv speciális kiterjesztése, a BrookGPU megjelenése előtt a programozók csak Direct3D vagy OpenGL API-n keresztül dolgozhattak GPU-kkal. Brook lehetővé tette a fejlesztők számára, hogy egy ismerős környezettel dolgozzanak, és maga a fordító speciális könyvtárakat használva alacsony szinten valósította meg a GPU-val való interakciót.

Az ilyen haladás nem tudta felkelteni az iparág vezetőinek figyelmét - az AMD-t és az NVIDIA-t, akik elkezdték fejleszteni saját szoftverplatformjaikat videokártyáikon a nem grafikus számításokhoz. Senki sem ismeri jobban, mint a GPU-fejlesztők termékeik minden árnyalatát és jellemzőjét, ami lehetővé teszi, hogy ugyanezek a cégek a lehető leghatékonyabban optimalizálják a szoftvercsomagot az adott hardvermegoldásokhoz. Az NVIDIA jelenleg a CUDA (Compute Unified Device Architecture) platformot fejleszti; az AMD egy hasonló technológiát CTM-nek (Close To Metal) vagy AMD Stream Computing-nak nevez. Megnézzük a CUDA néhány képességét, és a gyakorlatban értékeljük a GeForce 8800 GT videokártya G92 grafikus chipjének számítási képességeit.

De először nézzük meg a GPU-k használatával végzett számítások néhány árnyalatát. Fő előnyük, hogy a grafikus chipet eredetileg több szál végrehajtására tervezték, míg a hagyományos CPU minden magja szekvenciális utasítások folyamát hajtja végre. Bármely modern GPU több processzor, amely több számítási klaszterből áll, mindegyikben sok ALU-val. A legerősebb modern GT200 chip 10 ilyen klaszterből áll, amelyek mindegyike 24 stream processzorral rendelkezik. A tesztelt G92 chipre épülő GeForce 8800 GT videokártya hét nagy számítási egységgel rendelkezik, egyenként 16 stream processzorral. A CPU-k SIMD SSE blokkokat használnak a vektorszámításokhoz (egy utasítás több adat – egy utasítás több adaton hajtódik végre), amihez az adatokat 4 vektorba kell átalakítani. A GPU skalárisan dolgozza fel a szálakat, azaz. egy utasítás több szálon keresztül érvényesül (SIMT - egyetlen utasítás több szál). Ez megkíméli a fejlesztőket attól, hogy az adatokat vektorokká alakítsák, és tetszőleges elágazást tesz lehetővé a folyamokban. Minden GPU számítási egység közvetlen memória-hozzáféréssel rendelkezik. A videomemória sávszélessége pedig nagyobb, köszönhetően a több különálló memóriavezérlő használatának (a felső kategóriás G200-on 8 db 64 bites csatorna) és a magas működési frekvenciáknak köszönhetően.

Általánosságban elmondható, hogy bizonyos feladatokban, amikor nagy mennyiségű adattal dolgozik, a GPU-k sokkal gyorsabbak, mint a CPU-k. Az alábbiakban ennek az állításnak az illusztrációja látható:


A diagram a CPU és a GPU teljesítménynövekedésének dinamikáját mutatja 2003 óta. Az NVIDIA ezeket az adatokat előszeretettel említi reklámként a dokumentumaiban, de ezek csak elméleti számítások, és a valóságban a különbség persze jóval kisebbnek bizonyulhat.

De akárhogy is legyen, hatalmas potenciál rejlik a felhasználható GPU-kban, amelyek speciális megközelítést igényelnek a szoftverfejlesztésben. Mindez a CUDA hardver és szoftver környezetben valósul meg, amely több szoftverszintből áll - a magas szintű CUDA Runtime API-ból és az alacsony szintű CUDA Driver API-ból.


A CUDA a szabványos C nyelvet használja a programozáshoz, ami az egyik fő előnye a fejlesztők számára. Kezdetben a CUDA tartalmazza a BLAS (alap lineáris algebra csomag) és az FFT (Fourier transzformáció) könyvtárakat. A CUDA képes együttműködni az OpenGL vagy DirectX grafikus API-kkal, képes alacsony szinten fejleszteni, és az adatfolyamok optimalizált elosztása jellemzi a CPU és a GPU között. A CUDA számításokat a grafikus számításokkal egyidejűleg hajtják végre, ellentétben a hasonló AMD platformmal, ahol egy speciális virtuális gépet indítanak el a számításokhoz a GPU-n. De az ilyen „együttélés” hibákkal is jár, ha a grafikus API nagy terhelést hoz létre, miközben a CUDA egyidejűleg fut – elvégre a grafikus műveletek még mindig magasabb prioritást élveznek. A platform kompatibilis a 32 és 64 bites Windows XP, Windows Vista, MacOS X operációs rendszerekkel és a Linux különböző verzióival. A platform nyitott, és a weboldalon a videokártya speciális illesztőprogramjain kívül letöltheti a CUDA Toolkit, CUDA Developer SDK szoftvercsomagokat, beleértve a fordítót, a hibakeresőt, a szabványos könyvtárakat és a dokumentációt.

Ami a CUDA gyakorlati megvalósítását illeti, ezt a technológiát sokáig csak a részecskefizika, az asztrofizika, az orvostudomány vagy a pénzügyi piaci változások előrejelzésére stb. használták nagyon speciális matematikai számításokhoz. De ez a technológia fokozatosan közelebb kerül a hétköznapi felhasználókhoz, különösen a Photoshop speciális beépülő moduljai jelennek meg, amelyek felhasználhatják a GPU számítási teljesítményét. Egy speciális oldalon tanulmányozhatja az NVIDIA CUDA képességeit használó programok teljes listáját.

Az új technológia gyakorlati teszteléseként az MSI NX8800GT-T2D256E-OC videokártyán a TMPGEnc programot fogjuk használni. Ez a termék kereskedelmi jellegű (a teljes verzió 100 dollárba kerül), de az MSI videokártyákhoz bónuszként 30 napos próbaverzióban érkezik. Ezt a verziót letöltheti a fejlesztő webhelyéről, de a TMPGEnc 4.0 XPress MSI Special Edition telepítéséhez szükség van az eredeti lemezre az MSI kártya illesztőprogramjaival - enélkül a program nem települ.

A CUDA számítási képességeivel kapcsolatos legteljesebb információk megjelenítéséhez és más videoadapterekkel való összehasonlításához használhatja a speciális CUDA-Z segédprogramot. Ez az információ a GeForce 8800GT videokártyánkról:




Másolatunk a referenciamodellekhez képest magasabb frekvencián működik: a raszteres tartomány 63 MHz-cel magasabb a névlegesnél, a shader egységek pedig 174 MHz-cel, a memória pedig 100 MHz-cel gyorsabb.

Ugyanannak a HD videónak az átalakítási sebességét fogjuk összehasonlítani, ha csak a CPU-t használjuk, és a CUDA további aktiválásával a TMPGEnc programban a következő konfiguráción:

  • Processzor: Pentium Dual-Core E5200 2,5 GHz;
  • Alaplap: Gigabyte P35-S3;
  • Memória: 2x1 GB GoodRam PC6400 (5-5-5-18-2T)
  • Videókártya: MSI NX8800GT-T2D256E-OC;
  • Merevlemez: 320 GB WD3200AAKS;
  • Tápellátás: CoolerMaster eXtreme Power 500-PCAP;
  • Operációs rendszer: Windows XP SP2;
  • TMPGEnc 4.0 XPpress 4.6.3.268;
  • Videokártya illesztőprogramok: ForceWare 180.60.
A tesztekhez a processzort 3 GHz-re (11,5x261 MHz-es konfigurációban) és 4 GHz-re (11,5x348 MHz) túlhúzták, 835 MHz-es RAM-frekvenciával az első és a második esetben. Videó Full HD 1920x1080 felbontásban, egy perc húsz másodperc hosszú. További terhelés létrehozásához egy zajcsökkentő szűrőt kapcsoltak be, amelynek beállításait alapértelmezésben hagyták.


A kódolás a DivX 6.8.4 kodekkel történt. Ennek a kodeknek a minőségi beállításaiban minden érték alapértelmezésben marad, a többszálú átvitel engedélyezve van.


A TMPGEnc többszálú támogatása kezdetben a CPU/GPU beállítások lapon van engedélyezve. A CUDA is aktiválva van ugyanebben a részben.


Amint a fenti képernyőképen látható, a CUDA-val történő szűrőfeldolgozás engedélyezve van, de a hardveres videódekódoló nincs engedélyezve. A program dokumentációja figyelmeztet, hogy az utolsó paraméter aktiválása megnöveli a fájlfeldolgozási időt.

A tesztek eredményei alapján a következő adatokat kaptuk:


4 GHz-en, bekapcsolt CUDA mellett, csak pár másodpercet (vagy 2%-ot) nyertünk, ami nem különösebben lenyűgöző. De alacsonyabb frekvencián a technológia aktiválásából származó növekedés körülbelül 13% -os időt takarít meg, ami nagyon észrevehető lesz nagy fájlok feldolgozásakor. De az eredmények még mindig nem olyan lenyűgözőek, mint várták.

A TMPGEnc program CPU- és CUDA-terhelésjelzővel rendelkezik; ebben a tesztkonfigurációban a CPU-terhelést körülbelül 20%-on, a grafikus magot pedig a fennmaradó 80%-on mutatta. Ebből kifolyólag ugyanaz a 100%-unk, mint a CUDA nélküli konvertálásnál, és lehet, hogy egyáltalán nem lesz időeltolódás (de attól még létezik). A kis, 256 MB-os memória sem korlátozó tényező. A RivaTuner leolvasása alapján legfeljebb 154 MB videomemóriát használtak működés közben.



következtetéseket

A TMPGEnc program egyike azoknak, amelyek bemutatják a CUDA technológiát a tömegeknek. A GPU használata ebben a programban lehetővé teszi a videófeldolgozási folyamat felgyorsítását és a központi processzor jelentős tehermentesítését, amely lehetővé teszi a felhasználó számára, hogy kényelmesen végezzen más feladatokat egyidejűleg. Konkrét példánkban a GeForce 8800GT 256 MB videokártya némileg javította az időzítési teljesítményt a túlhúzott Pentium Dual-Core E5200 processzoron alapuló videó konvertálásakor. De jól látható, hogy a frekvencia csökkenésével a CUDA aktiválásából származó nyereség növekszik; gyenge processzorokon a használatból származó nyereség sokkal nagyobb lesz. Ennek a függőségnek a hátterében teljesen logikus azt feltételezni, hogy még a terhelés növekedésével is (például nagyon sok további videószűrő használata esetén) a CUDA-val rendelkező rendszer eredményeit jobban megkülönböztetik. a kódolási folyamatban eltöltött idő különbségének jelentős delta. Azt sem szabad elfelejteni, hogy a G92 jelenleg nem a legerősebb chip, és a modernebb videokártyák lényegesen nagyobb teljesítményt nyújtanak az ilyen alkalmazásokban. Az alkalmazás futása közben azonban a GPU nincs teljesen betöltve, és valószínűleg a terhelés eloszlása ​​minden konfigurációtól külön-külön függ, nevezetesen a processzor/videokártya kombinációtól, ami végső soron nagyobb (vagy kisebb) növekedést adhat százalékban. a CUDA aktiválásáról. Mindenesetre azok számára, akik nagy mennyiségű videóadattal dolgoznak, ez a technológia továbbra is jelentősen megtakarítja az idejét.

Igaz, a CUDA még nem tett szert széles körű népszerűségre, az ezzel a technológiával működő szoftverek minősége fejlesztést igényel. Az általunk áttekintett TMPGEnc 4.0 XPress programban ez a technológia nem mindig működött. Ugyanazt a videót többször is újra lehetett kódolni, majd hirtelen, a következő indításkor már 0% volt a CUDA terhelés. És ez a jelenség teljesen véletlenszerű volt teljesen más operációs rendszereken. Ezenkívül a szóban forgó program megtagadta a CUDA használatát, amikor XviD formátumba kódol, de nem volt probléma a népszerű DivX kodekkel.

Ennek eredményeként a CUDA technológia eddig csak bizonyos feladatokban tudja jelentősen növelni a személyi számítógépek teljesítményét. De az ilyen technológia alkalmazási köre bővülni fog, és a magok számának növelése a hagyományos processzorokban azt jelzi, hogy a modern szoftveralkalmazásokban megnőtt a párhuzamos többszálú számítástechnika iránti kereslet. Nem véletlen, hogy a közelmúltban minden iparági vezető megszállottá vált a CPU és a GPU egy egységes architektúrán belüli ötvözésének gondolatával (emlékezzünk csak a sokat hirdetett AMD Fusionra). Talán a CUDA ennek az egyesülési folyamatnak az egyik állomása.


Köszönetet mondunk az alábbi cégeknek a tesztberendezések biztosításáért:

– alacsony szintű szoftver interfészek készlete ( API) játékok és más nagy teljesítményű multimédiás alkalmazások létrehozásához. Nagy teljesítményű támogatást tartalmaz 2D- És 3D-grafika, hang és beviteli eszközök.

Direct3D (D3D) – felület a háromdimenziós megjelenítéshez primitívek(geometriai testek). Tartalmazza .

OpenGL(angolról Nyissa meg a Grafikai könyvtárat, szó szerint - nyílt grafikus könyvtár) egy olyan specifikáció, amely programozási nyelvtől független, többplatformos programozási felületet határoz meg kétdimenziós és háromdimenziós számítógépes grafikát használó alkalmazások írásához. Több mint 250 funkciót tartalmaz összetett 3D jelenetek rajzolásához egyszerű primitívekből. Videojátékok, virtuális valóság és vizualizáció létrehozására használják a tudományos kutatásban. Az emelvényen ablakok versenyez .

OpenCL(angolról Nyissa meg a Computing Language lehetőséget, szó szerint – a számítások nyitott nyelve) – keretrendszer(szoftverrendszer-keretrendszer) párhuzamos számításokkal kapcsolatos számítógépes programok írására különböző grafikákon ( GPU) És ( ). A kerethez OpenCL programozási nyelvet és alkalmazásprogramozási felületet tartalmaz ( API). OpenCL párhuzamosságot biztosít az utasítások és az adatok szintjén, és a technika megvalósítása GPGPU.

GPGPU(angolból rövidítve) Általános célú grafikus feldolgozási egységek, szó szerint – GPUáltalános célú) a grafikus feldolgozó egység (GPU) vagy videokártya általános számítástechnikai felhasználására szolgáló technika, amelyet általában számítógép hajt végre.

Shader(Angol) árnyékoló) – szintetizált képeken árnyékokat konstruáló program, amelyet háromdimenziós grafikában használnak egy objektum vagy kép végső paramétereinek meghatározására. Jellemzően a fényelnyelés és -szórás, a textúra-leképezés, a visszaverődés és a fénytörés, az árnyékolás, a felületelmozdulás és az utófeldolgozási hatások tetszőlegesen összetett leírását tartalmazza. Az összetett felületek egyszerű geometriai formák segítségével jeleníthetők meg.

Rendering(Angol) renderelés) – vizualizáció, számítógépes grafikában, a modellből szoftver segítségével kép kinyerésének folyamata.

SDK(angolból rövidítve) Szoftverfejlesztő készlet) – szoftverfejlesztő eszközök készlete.

CPU(angolból rövidítve) Központi feldolgozó egység, szó szerint – központi/fő/fő számítástechnikai eszköz) – központi (mikro);gépi utasításokat végrehajtó eszköz; a számítási műveletek elvégzéséért (az operációs rendszer és az alkalmazási szoftver által meghatározott) és az összes eszköz működésének koordinálásáért felelős hardver.

GPU(angolból rövidítve) Grafikus feldolgozó egység, szó szerint – grafikus számítástechnikai eszköz) – grafikus processzor; különálló eszköz vagy játékkonzol, amely grafikus megjelenítést (vizualizációt) végez. A modern GPU-k nagyon hatékonyan dolgozzák fel és valósághűen jelenítik meg a számítógépes grafikákat. A modern videoadapterekben lévő grafikus processzort 3D grafikus gyorsítóként használják, de bizonyos esetekben számításokhoz is használható ( GPGPU).

Problémák CPU

A hagyományosak teljesítményének növekedése hosszú ideig főként az órajel frekvenciájának következetes növekedése miatt következett be (a teljesítmény körülbelül 80% -át az órajel frekvencia határozta meg) az egy chipen lévő tranzisztorok számának egyidejű növekedésével. . Az órajel további növelése (3,8 GHz-nél nagyobb órajelnél a chipek egyszerűen túlmelegednek!) azonban számos alapvető fizikai akadályba ütközik (mivel a technológiai folyamat már majdnem megközelítette az atom méretét: , és a szilícium atom mérete körülbelül 0,543 nm):

Először is, a kristályméret csökkenésével és az órajel frekvenciájának növekedésével a tranzisztorok szivárgási árama nő. Ez megnövekedett energiafogyasztáshoz és fokozott hőkibocsátáshoz vezet;

Másodszor, a memóriaelérési késleltetés részben semmissé teszi a magasabb órajel előnyeit, mivel a memóriaelérési idők nem követik a növekvő órajelet;

Harmadszor, egyes alkalmazások esetében a hagyományos soros architektúrák hatástalanná válnak, mivel az órajelek növekszik az úgynevezett „von Neumann szűk keresztmetszet” miatt, amely a szekvenciális számítási folyamatból eredő teljesítménykorlátozás. Ugyanakkor az ellenállás-kapacitív jelátviteli késleltetések megnövekednek, ami további szűk keresztmetszet az órajel frekvenciájának növekedésével kapcsolatban.

Fejlesztés GPU

Ezzel párhuzamosan volt (és van!) fejlődés GPU:

2008. november – Intel bevezetett egy 4 magos sort Intel Core i7, amelyek egy új generációs mikroarchitektúrán alapulnak Nehalem. A processzorok 2,6-3,2 GHz-es órajelen működnek. 45 nm-es technológiával készült.

2008. december – megkezdődtek a 4 magos szállítások AMD Phenom II 940(kód név - Deneb). 3 GHz-es frekvencián működik, 45 nm-es folyamattechnológiával gyártva.

2009. május – cég AMD bemutatta a GPU verziót ATI Radeon HD 4890 a mag órajele 850 MHz-ről 1 GHz-re nőtt. Ez az első grafikus 1 GHz-en működő processzor. A chip számítási teljesítménye a frekvencia növekedésének köszönhetően 1,36-ról 1,6 teraflopra nőtt. A processzor 800 (!) számítási magot tartalmaz, és támogatja a videomemóriát GDDR5, DirectX 10.1, ATI CrossFireXés minden más technológia, amely a modern videokártya modellekben rejlik. A chip 55 nm-es technológia alapján készül.

Fő különbségek GPU

Megkülönböztető jellegzetességek GPU(összehasonlítva ) vannak:

– olyan architektúra, amely maximálisan a textúrák és az összetett grafikai objektumok számítási sebességének növelésére irányul;

– tipikus csúcsteljesítmény GPU sokkal magasabb annál ;

– a speciális szállítószalag architektúrának köszönhetően, GPU sokkal hatékonyabb a grafikus információk feldolgozásában, mint a .

"A műfaj válsága"

"Műfaji válság" számára 2005-re érlelődött – ekkor jelentek meg. De annak ellenére, hogy a technológia fejlődése, a termelékenység növekedése a hagyományos észrevehetően csökkent. Ugyanakkor teljesítmény GPU tovább növekszik. Így 2003-ra ez a forradalmi ötlet kikristályosodott - használja a grafika számítási teljesítményét igényeinek megfelelően. A GPU-kat egyre gyakrabban használják „nem grafikus” számítástechnikára (fizikai szimuláció, jelfeldolgozás, számítási matematika/geometria, adatbázis-műveletek, számítási biológia, számítási közgazdaságtan, számítógépes látás stb.).

A fő probléma az volt, hogy nem volt szabványos programozási felület GPU. A fejlesztők használtak OpenGL vagy Direct3D, de nagyon kényelmes volt. Vállalat NVIDIA(az egyik legnagyobb grafikus, média- és kommunikációs processzorok, valamint vezeték nélküli médiaprocesszorok gyártója; 1993-ban alapították) egységes és kényelmes szabvány kidolgozásába kezdett - és bevezette a technológiát CUDA.

Hogyan kezdődött

2006 – NVIDIA demonstrálja CUDA™; forradalom kezdete a számítástechnikában GPU.

2007 – NVIDIA kiadja az architektúrát CUDA(eredeti verzió CUDA SDK 2007. február 15-én nyújtották be); a magazin „Legjobb új termék” jelölésére Népszerű Tudományés az „Olvasók választása” című kiadványból HPCWire.

2008 – technológia NVIDIA CUDA tól nyerte a „Technical Excellence” kategóriát PC Magazin.

Mi történt CUDA

CUDA(angolból rövidítve) Számítsa ki az egyesített eszközarchitektúrát, szó szerint - eszközök egységes számítási architektúrája) - architektúra (szoftver- és hardverkészlet), amely lehetővé teszi a GPUáltalános célú számítások, míg GPU valójában erős társprocesszorként működik.

Technológia NVIDIA CUDA™ az egyetlen fejlesztői környezet a programozási nyelvben C, amely lehetővé teszi a fejlesztők számára olyan szoftverek létrehozását, amelyek a GPU-k feldolgozási teljesítményének köszönhetően rövidebb idő alatt megoldják az összetett számítási problémákat. Emberek milliói dolgoznak már a világon GPU a támogatással CUDA, és már programozók ezrei használnak (ingyenes!) eszközöket CUDA az alkalmazások felgyorsítására és a legbonyolultabb, erőforrásigényes feladatok megoldására – a videó- ​​és hangkódolástól az olaj- és gázkutatásig, a termékmodellezésig, az orvosi képalkotásig és a tudományos kutatásig.

CUDA lehetőséget ad a fejlesztőnek, hogy saját belátása szerint megszervezze a grafikus gyorsító utasításkészletéhez való hozzáférést és kezelje a memóriáját, valamint komplex párhuzamos számításokat szervezzen rajta. Grafikus gyorsító támogatás CUDA erőteljes programozható nyílt architektúrává válik, hasonlóan a mai . Mindez a fejlesztő számára alacsony szintű, elosztott és nagy sebességű hozzáférést biztosít a hardverekhez, gyártáshoz CUDA szükséges alap a komoly magas szintű eszközök, például fordítók, hibakeresők, matematikai könyvtárak és szoftverplatformok létrehozásához.

Uralsky, vezető technológiai szakember NVIDIA, összehasonlítása GPUÉs , ezt mondja: " - Ez egy terepjáró. Mindig és mindenhol vezet, de nem túl gyorsan. A GPU- Ez egy sportautó. Rossz úton egyszerűen nem megy sehova, hanem jó felületet ad neki, és megmutatja minden sebességét, amiről egy terepjáró még csak nem is álmodott!

Technológiai képességek CUDA