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 |
|
|
|
|
|
- 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.
- 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..
- 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
Nvidia | ||||||
---|---|---|---|---|---|---|
Grafikus processzorok |
|
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 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