Kompjuterski resurs U SM. Gdje cuda vodi: praktična primjena gpgpu tehnologije - najbolja oprema Aplikacije koje rade na cudi

Decenijama je na snazi ​​Murov zakon, koji kaže da će se svake dvije godine broj tranzistora na čipu udvostručiti. Međutim, to je bilo davne 1965. godine, a u proteklih 5 godina ideja o fizičkim višejezgarima u procesorima potrošačke klase počela se ubrzano razvijati: 2005. Intel je predstavio Pentium D, a AMD Athlon X2. Tada su se aplikacije koje su koristile 2 jezgra mogle izbrojati na prste jedne ruke. Međutim, sljedeća generacija Intelovih procesora, koja je napravila revoluciju, imala je tačno 2 fizička jezgra. Štaviše, Quad serija se pojavila u januaru 2007. godine, kada je Mur sam priznao da će njegov zakon uskoro prestati da važi.

Šta sad? Dvojezgarni procesori čak i u budžetskim kancelarijskim sistemima i 4 fizička jezgra su postali norma i to za samo 2-3 godine. Frekvencija procesora nije povećana, ali je poboljšana arhitektura, povećan je broj fizičkih i virtuelnih jezgara. Međutim, ideja o korištenju video adaptera opremljenih desetinama ili čak stotinama računarskih „jedinica“ postoji već duže vrijeme.

Iako su izgledi za GPU računarstvo ogromni, najpopularnije rješenje je Nvidia CUDA, koja je besplatna, ima puno dokumentacije i općenito je vrlo jednostavna za implementaciju, nema mnogo aplikacija koje koriste ovu tehnologiju. U osnovi, to su svakakve specijalizirane kalkulacije do kojih prosječan korisnik u većini slučajeva ne mari. Ali postoje i programi dizajnirani za masovne korisnike, a o njima ćemo govoriti u ovom članku.

Prvo, malo o samoj tehnologiji i čemu se koristi. Jer Prilikom pisanja članka fokusiram se na širok krug čitatelja, pa ću pokušati da ga objasnim pristupačnim jezikom bez složenih pojmova i donekle ukratko.

CUDA(Engleski Compute Unified Device Architecture) je softverska i hardverska arhitektura koja vam omogućava da izvodite proračune koristeći NVIDIA grafičke procesore koji podržavaju GPGPU (proizvoljno računanje na video karticama) tehnologiju. CUDA arhitektura se prvi put pojavila na tržištu izdavanjem NVIDIA čipa osme generacije - G80 i prisutna je u svim narednim serijama grafičkih čipova koji se koriste u porodicama GeForce, Quadro i Tesla akceleratora. (c) Wikipedia.org

Dolazni tokovi se obrađuju nezavisno jedan od drugog, tj. paralelno.

Postoji podjela na 3 nivoa:

Grid- jezgro. Sadrži jedno/dvije/trodimenzionalni niz blokova.

Blokiraj– sadrži mnogo niti. Niti različitih blokova ne mogu međusobno komunicirati. Zašto je bilo potrebno uvesti blokove? Svaki blok je u suštini odgovoran za svoj podzadatak. Na primjer, velika slika (koja je matrica) može se podijeliti na nekoliko manjih dijelova (matrica) i raditi sa svakim dijelom slike paralelno.

Thread– protok. Niti unutar jednog bloka mogu komunicirati ili kroz dijeljenu memoriju, koja je, inače, mnogo brža od globalne memorije, ili kroz alate za sinhronizaciju niti.

Warp je unija niti koje međusobno komuniciraju, za sve moderne GPU-ove Warp veličina je 32. Sljedeće dolazi polu-osnova, što je polovina warpa, jer Pristup memoriji se obično odvija odvojeno za prvu i drugu polovinu warpa.

Kao što vidite, ova arhitektura je odlična za paralelizaciju zadataka. I iako se programiranje izvodi u jeziku C uz određena ograničenja, u stvarnosti nije sve tako jednostavno, jer... ne može se sve uporediti. Takođe ne postoje standardne funkcije za generisanje slučajnih brojeva (ili inicijalizaciju), sve se to mora implementirati zasebno. I iako postoji mnogo gotovih opcija, ništa od ovoga ne donosi radost. Mogućnost korištenja rekurzije pojavila se relativno nedavno.

Radi jasnoće, napisan je mali konzolni program (za minimiziranje koda) koji izvodi operacije sa dva niza tipa float, tj. sa necjelobrojnim vrijednostima. Iz gore navedenih razloga, inicijalizaciju (punjenje niza različitim proizvoljnim vrijednostima) izvršio je CPU. Zatim je izvedeno 25 različitih operacija sa odgovarajućim elementima iz svakog niza, a međurezultati su upisani u treći niz. Veličina niza je promijenjena, rezultati su sljedeći:

Urađena su ukupno 4 ispitivanja:

1024 elementa u svakom nizu:

Jasno se vidi da je sa tako malim brojem elemenata paralelno računanje od male koristi, jer Sami proračuni su mnogo brži od njihove pripreme.

4096 elemenata u svakom nizu:

I sada možete vidjeti da grafička kartica obavlja operacije na nizovima 3 puta brže od procesora. Štoviše, vrijeme izvršenja ovog testa na video kartici se nije povećalo (blago smanjenje vremena može se pripisati grešci).

Sada postoji 12288 elemenata u svakom nizu:

Razdvajanje video kartice je povećano za 2 puta. Opet, vrijedi napomenuti da se vrijeme izvršavanja na video kartici povećalo
beznačajno, ali na procesoru više od 3 puta, tj. proporcionalno složenosti zadatka.

I posljednji test je 36864 elementa u svakom nizu:

U ovom slučaju, ubrzanje dostiže impresivne vrijednosti - gotovo 22 puta brže na video kartici. I opet, vrijeme izvršenja na video kartici se neznatno povećalo, ali na procesoru - potrebna 3 puta, što je opet proporcionalno složenosti zadatka.

Ako nastavite da komplikujete proračune, video kartica osvaja sve više i više. Iako je primjer pomalo preuveličan, cjelokupna situacija jasno pokazuje. Ali, kao što je već spomenuto, ne može se sve paralelizirati. Na primjer, izračunavanje Pi. Postoje samo primjeri napisani metodom Monte Carlo, ali tačnost proračuna je 7 decimala, tj. regular float. Da bi se povećala tačnost proračuna potrebna je duga aritmetika i tu nastaju problemi, jer Veoma, veoma je teško ovo efikasno implementirati. Nisam mogao pronaći primjere na internetu koji koriste CUDA i izračunavaju Pi na 1 milion decimalnih mjesta. Pokušali su da se napiše ovakva aplikacija, ali najjednostavniji i najefikasniji metod za izračunavanje Pi je Brent-Salamin algoritam ili Gaussova formula. Dobro poznati SuperPI najvjerovatnije (sudeći po brzini rada i broju iteracija) koristi Gaussovu formulu. I, sudeći po
Zbog činjenice da je SuperPI jednonit, nedostatka primjera pod CUDA-om i neuspjeha mojih pokušaja, nemoguće je efikasno paralelizirati brojanje Pi.

Usput, možete primijetiti kako se opterećenje GPU-a povećava tokom proračuna, a dodjeljuje se i memorija.

Sada pređimo na praktičnije prednosti CUDA-e, odnosno na trenutno postojeće programe koji koriste ovu tehnologiju. Uglavnom, to su sve vrste audio/video pretvarača i uređivača.

U testiranju su korištena 3 različita video fajla:

      *Istorija nastanka filma Avatar - 1920x1080, MPEG4, h.264.
      *Serija "Laži me" - 1280x720, MPEG4, h.264.
      *Serija "U Filadelfiji je uvek sunčano" - 624x464, xvid.

Kontejner i veličina prva dva fajla bili su .mkv i 1,55 GB, a poslednji .avi i 272 MB.

Počnimo s vrlo senzacionalnim i popularnim proizvodom - Badaboom. Korišćena verzija - 1.2.1.74 . Cijena programa je $29.90 .

Sučelje programa je jednostavno i intuitivno - s lijeve strane biramo izvornu datoteku ili disk, a s desne strane - potrebni uređaj za koji ćemo kodirati. Tu je i korisnički mod u kojem se parametri ručno postavljaju, što smo i koristili.

Prvo, pogledajmo koliko se brzo i efikasno video kodira "u sebe", tj. iste rezolucije i približno iste veličine. Brzinu ćemo mjeriti u fps, a ne u proteklom vremenu - tako je zgodnije uporediti i izračunati koliko će video proizvoljne dužine biti komprimiran. Jer Danas razmatramo "zelenu" tehnologiju, tada će grafikoni biti odgovarajući -)

Brzina kodiranja direktno ovisi o kvaliteti, to je očigledno. Vrijedi napomenuti da svjetlosna rezolucija (nazovimo je tradicionalno SD) nije problem za Badaboom – brzina kodiranja je 5,5 puta veća od originalne (24 fps) brzine kadrova videa. Čak i teške 1080p video zapise program konvertuje u realnom vremenu. Vrijedi napomenuti da je kvalitet finalnog videa vrlo blizak originalnom video materijalu, tj. Badaboom kodira veoma, veoma efikasno.

Ali obično prenose video na nižu rezoluciju, da vidimo kako stvari stoje u ovom načinu rada. Kako se rezolucija smanjivala, tako se smanjivala i brzina prijenosa videa. Bilo je 9500 kbps za 1080p izlaznu datoteku, 4100 kbps za 720p i 2400 kbps za 720x404. Izbor je napravljen na osnovu razumnog omjera veličina/kvalitet.

Nisu potrebni komentari. Ako napravite rip sa 720p na normalan SD kvalitet, transkodiranje filma u trajanju od 2 sata će trajati oko 30 minuta. A u isto vrijeme, opterećenje procesora će biti neznatno, možete se baviti svojim poslom bez osjećaja nelagode.

Šta ako konvertujete video u format za mobilni uređaj? Da biste to učinili, odaberite iPhone profil (bitrate 1 Mbit/s, 480x320) i pogledajte brzinu kodiranja:

Trebam li išta reći? Dvosatni film u normalnom iPhone kvalitetu se transkodira za manje od 15 minuta. Sa HD kvalitetom je teže, ali i dalje vrlo brzo. Glavna stvar je da kvalitet izlaznog videa ostaje na prilično visokom nivou kada se gleda na ekranu telefona.

Generalno, utisci sa Badaboom-a su pozitivni, brzina rada je prijatna, a interfejs je jednostavan i jasan. Sve vrste grešaka u ranijim verzijama (koristio sam beta verziju 2008.) su ispravljene. Osim jedne stvari - put do izvorne datoteke, kao i do mape u kojoj je pohranjen gotov video, ne bi trebao sadržavati ruska slova. Ali u poređenju sa prednostima programa, ovaj nedostatak je beznačajan.

Sljedeći na redu ćemo imati Super LoiLoScope. Za regularnu verziju pitaju 3.280 rubalja, a za verziju na dodir, koja podržava kontrolu dodirom u Windows 7, traže isto toliko 4.440 rubalja. Hajde da pokušamo da shvatimo zašto programer želi toliki novac i zašto je video editoru potrebna multitouch podrška. Korištena najnovija verzija - 1.8.3.3 .

Prilično je teško riječima opisati interfejs programa, pa sam odlučio napraviti kratak video. Odmah ću reći da je, kao i svi video konvertori za CUDA, GPU ubrzanje podržano samo za video izlaz u MPEG4 sa h.264 kodekom.

Tokom kodiranja, opterećenje procesora je 100%, ali to ne uzrokuje nelagodu. Pretraživač i druge lagane aplikacije ne usporavaju.

Sada pređimo na performanse. Za početak, sve je isto kao i kod Badabooma - transkodiranje videa u sličan kvalitet.

Rezultati su mnogo bolji od Badabooma. Kvalitet je također odličan, razlika u odnosu na original se može uočiti samo upoređivanjem ramova u paru pod lupom.

Vau, ovdje LoiloScope nadmašuje Badaboom za 2,5 puta. Istovremeno, možete jednostavno paralelno rezati i kodirati drugi video, čitati vijesti, pa čak i gledati filmove, a čak se i FullHD reprodukuje bez problema, iako je opterećenje procesora maksimalno.

Pokušajmo sada napraviti video za mobilni uređaj, nazovimo profil isto kako se zvao u Badaboom-u - iPhone (480x320, 1 Mbit/s):

Nema greške. Sve je provjeravano nekoliko puta, svaki put je rezultat bio isti. Najvjerovatnije se to događa iz jednostavnog razloga što je SD datoteka snimljena drugim kodekom i u drugom spremniku. Prilikom transkodiranja, video se prvo dekodira, dijeli na matrice određene veličine i kompresuje. ASP dekoder koji se koristi u slučaju xvid je sporiji od AVC (za h.264) kada se dekodira paralelno. Međutim, 192 fps je 8 puta brže od brzine originalnog videa; serija od 23 minuta se kompresuje za manje od 4 minute. Situacija se ponovila sa drugim fajlovima kompresovanim u xvid/DivX.

LoiloScope Ostavio sam samo prijatne utiske - interfejs je, uprkos svojoj neobičnosti, zgodan i funkcionalan, a brzina rada je za svaku pohvalu. Relativno loša funkcionalnost je donekle frustrirajuća, ali često uz jednostavnu instalaciju trebate samo malo prilagoditi boje, napraviti glatke prijelaze i dodati tekst, a LoiloScope radi odličan posao s tim. Cijena je također pomalo zastrašujuća – više od 100 dolara za standardnu ​​verziju je normalno za strane zemlje, ali nam se takve brojke ipak čine pomalo divlje. Mada, priznajem da bih, na primjer, često snimao i montirao kućne video zapise, možda razmišljao o kupovini. Istovremeno sam, inače, provjerio mogućnost editovanja HD (ili bolje rečeno AVCHD) sadržaja direktno sa video kamere bez prethodnog konvertovanja u drugi format, LoiloScope nije otkrio probleme sa datotekama poput .mts.

Nova tehnologija je poput novonastale evolucijske vrste. Čudno stvorenje, za razliku od mnogih oldtajmera. Nekad nezgodno, nekad smešno. I isprva se čini da njegove nove kvalitete nikako ne odgovaraju ovom staloženom i stabilnom svijetu.

Međutim, prođe malo vremena i ispostavi se da početnik trči brže, skače više i općenito je jači. I jede više muva od svojih retrogradnih komšija. A onda ti isti komšije počinju da shvataju da nema smisla svađati se sa ovim nespretnim bivšim. Bolje je biti prijatelj s njim, a još bolje organizirati simbiozu. Vidjet ćete da će biti još muva.

GPGPU tehnologija (General-Purpose Graphics Processing Units - grafički procesor opšte namene) dugo je postojala samo u teorijskim proračunima pametnih akademika. Kako drugačije? Predložiti da se radikalno promijeni računski proces koji se razvijao decenijama povjeravanjem proračuna njegovih paralelnih grana video kartici - samo teoretičari su sposobni za to.

Logo CUDA tehnologije podsjeća nas da je izrastao u dubinama
3D grafika.

Ali GPGPU tehnologija neće dugo skupljati prašinu na stranicama univerzitetskih časopisa. Napuhavši perje svojih najboljih kvaliteta, privukla je pažnju proizvođača. Tako je rođen CUDA - implementacija GPGPU-a na GeForce grafičkim procesorima proizvođača nVidia.

Zahvaljujući CUDA-i, GPGPU tehnologije su postale mainstream. A sada samo najkratkovidiji i prekriveni debelim slojem lijenosti programeri programskih sistema ne deklariraju podršku za CUDA sa svojim proizvodom. IT publikacije su smatrale za čast predstaviti detalje o tehnologiji u brojnim bujnim popularnim naučnim člancima, a konkurenti su odmah sjeli sa šablonima i unakrsnim kompajlerima kako bi razvili nešto slično.

Javno priznanje je san ne samo za nadobudne starlete, već i za tek rođene tehnologije. I CUDA je imala sreće. Poznata je, pričaju i pišu o njoj.

Oni samo pišu kao da nastavljaju da raspravljaju o GPGPU u debelim naučnim časopisima. Oni bombarduju čitaoca gomilom termina kao što su “mreža”, “SIMD”, “warp”, “host”, “tekstura i konstantna memorija”. Oni ga uranjaju do samog vrha u organizacione dijagrame nVidia GPU-a, vode ga krivudavim stazama paralelnih algoritama i (najjači potez) pokazuju dugačke liste kodova u C jeziku. Kao rezultat toga, ispada da na ulazu u članak imamo svježeg čitača sa gorućom željom da razumije CUDA, a na izlazu imamo isti čitač, ali s natečenom glavom ispunjenom zbrkom činjenica, dijagrama , kod, algoritmi i termini.

U međuvremenu, cilj svake tehnologije je da nam olakša život. I CUDA radi odličan posao s ovim. Rezultati njenog rada su ono što će svakog skeptika uvjeriti bolje od stotina shema i algoritama.

Ne svuda

CUDA je podržana od strane superračunara visokih performansi
nVidia Tesla.

Pa ipak, prije nego što pogledamo rezultate rada CUDA-e na polju olakšavanja života prosječnog korisnika, vrijedi razumjeti sva njegova ograničenja. Baš kao sa duhom: svaka želja, samo jedna. CUDA takođe ima svoje Ahilove pete. Jedna od njih su ograničenja platformi na kojima može raditi.

Lista nVidia video kartica koje podržavaju CUDA predstavljena je na posebnoj listi pod nazivom CUDA Enabled Products. Lista je prilično impresivna, ali je lako klasificirati. CUDA podrška nije odbijena:

    Modeli nVidia GeForce 8., 9., 100., 200. i 400. serije sa minimalno 256 megabajta video memorije na ploči. Podrška se proteže i na desktop i na mobilne kartice.

    Velika većina desktop i mobilnih video kartica su nVidia Quadro.

    Sva rješenja iz nvidia ION netbook serije.

    HPC visokih performansi (High Performance Computing) i nVidia Tesla superkompjuterska rješenja koja se koriste i za personalno računarstvo i za organiziranje skalabilnih klaster sistema.

Stoga, prije korištenja softverskih proizvoda zasnovanih na CUDA-i, vrijedi provjeriti ovu listu favorita.

Pored same video kartice, potreban je i odgovarajući drajver koji podržava CUDA. To je veza između centralnog i grafičkog procesora, djelujući kao neka vrsta softverskog interfejsa za pristup programskom kodu i podacima u višejezgrenu riznicu GPU-a. Kako biste bili sigurni da nećete pogriješiti, nVidia preporučuje da posjetite stranicu s drajverima i preuzmete najnoviju verziju.

...već sam proces

Kako funkcioniše CUDA? Kako objasniti složeni proces paralelnog računanja na posebnoj GPU hardverskoj arhitekturi bez uranjanja čitaoca u ponor specifičnih pojmova?

Možete pokušati to učiniti tako što ćete zamisliti kako centralni procesor izvršava program u simbiozi sa grafičkim procesorom.

Arhitektonski, centralna procesorska jedinica (CPU) i njen grafički pandan (GPU) su dizajnirani drugačije. Ako povučemo analogiju sa svijetom automobilske industrije, onda je CPU karavan, jedan od onih koji se nazivaju "štala". Izgleda kao putnički automobil, ali u isto vrijeme (sa stanovišta programera) "to je Švicarac, žetelac i igrač na lulu". U isto vrijeme igra ulogu malog kamiona, autobusa i hipertrofiranog hatchbacka. Karavan, ukratko. Ima nekoliko cilindričnih jezgri, ali se bave gotovo svim zadatkom, a impresivna keš memorija je sposobna pohraniti gomilu podataka.

Ali GPU je sportski automobil. Postoji samo jedna funkcija: isporučiti pilota na cilj što je prije moguće. Dakle, nema velike memorije prtljažnika, nema dodatnih sedišta. Ali ima stotine puta više cilindričnih jezgri nego CPU.

Zahvaljujući CUDA-i, programeri GPGPU programa ne moraju ulaziti u složenost programiranja
razvoj za grafičke mašine kao što su DirectX i OpenGL

Za razliku od centralnog procesora, koji je sposoban da riješi bilo koji zadatak, uključujući i grafičku, ali sa prosječnim performansama, grafički procesor je prilagođen brzom rješenju jednog zadatka: pretvaranje gomile poligona na ulazu u gomilu piksela na izlaz. Štaviše, ovaj problem se može rešiti paralelno korišćenjem stotina relativno jednostavnih računarskih jezgara u GPU-u.

Dakle, kakav tandem može biti od karavana i sportskog automobila? CUDA radi otprilike ovako: program radi na CPU-u dok ne postoji dio koda koji se može izvršiti paralelno. Zatim, umjesto da se polako izvršava na dvije (ili čak osam) jezgara najhladnijeg CPU-a, prenosi se na stotine GPU jezgara. Istovremeno, vrijeme izvršenja ovog odjeljka je značajno smanjeno, što znači i vrijeme izvršenja cijelog programa.

Tehnološki se ništa ne mijenja za programera. Kod CUDA programa je napisan u C jeziku. Preciznije, na svom posebnom dijalektu “C sa potocima” (C sa potocima). Razvijeno na Stanfordu, ovo proširenje jezika C zove se Brook. Interfejs koji prenosi Brook kod na GPU je drajver za video karticu koja podržava CUDA. On organizira cijeli proces obrade ovog dijela programa tako da za programera GPU izgleda kao CPU koprocesor. Vrlo slično korištenju matematičkog koprocesora u ranim danima personalnog računarstva. Sa pojavom Brooka, video kartica sa podrškom za CUDA i drajvera za njih, svaki programer je postao u mogućnosti da pristupi GPU-u u svojim programima. Ali prije je ovaj šamanizam bio u vlasništvu uskog kruga odabranih ljudi koji su godinama usavršavali tehnike programiranja za DirectX ili OpenGL grafičke mašine.

U bure ovog pretencioznog meda - CUDA-ine pohvale - vrijedi staviti muhu, odnosno ograničenja. Ne može se svaki problem koji treba programirati može riješiti korištenjem CUDA. Neće biti moguće ubrzati rješavanje rutinskih uredskih zadataka, ali možete vjerovati CUDA-i da izračuna ponašanje hiljada boraca iste vrste u World of Warcraftu. Ali ovo je izmišljen zadatak. Pogledajmo primjere onoga što CUDA već vrlo efikasno rješava.

Pravedna djela

CUDA je vrlo pragmatična tehnologija. Implementirajući svoju podršku u svoje video kartice, nVidia je sasvim opravdano očekivala da će CUDA baner biti prihvaćen od strane mnogih entuzijasta kako u univerzitetskom okruženju tako iu trgovini. I tako se dogodilo. Projekti zasnovani na CUDA-i žive i donose koristi.

NVIDIA PhysX

Prilikom reklamiranja svog sljedećeg gaming remek-djela, proizvođači često ističu njegov 3D realizam. Ali bez obzira na to koliko je stvaran svijet 3D igara, ako se elementarni zakoni fizike, kao što su gravitacija, trenje i hidrodinamika, implementiraju na pogrešan način, laž će se odmah osjetiti.

Jedna od mogućnosti NVIDIA PhysX fizičkog motora je realističan rad sa tkivima.

Implementacija algoritama za kompjutersku simulaciju osnovnih fizičkih zakona je veoma naporan zadatak. Najpoznatije kompanije u ovoj oblasti su irska kompanija Havok sa svojim cross-platform fizičkim Havok Physics i kalifornijska Ageia - rodonačelnik prvog fizičkog procesora na svijetu (PPU - Physics Processing Unit) i odgovarajućeg PhysX fizičkog motora. Prvi od njih, iako ga je kupio Intel, sada aktivno radi na polju optimizacije Havok motora za ATI video kartice i AMD procesore. Ali Ageia sa svojim PhysX motorom postala je dio nVidia-e. Istovremeno, nVidia je riješila prilično težak problem prilagođavanja PhysX-a na CUDA tehnologiju.

To je postalo moguće zahvaljujući statistici. Statistički je dokazano da bez obzira koliko složeno renderiranje GPU izvodi, neke od njegovih jezgara su i dalje mirne. Na ovim jezgrama radi PhysX motor.

Zahvaljujući CUDA-i, lavovski dio proračuna vezanih za fiziku svijeta igara počeo se izvoditi na video kartici. Oslobođena snaga centralnog procesora korištena je za rješavanje drugih problema u igri. Rezultat nije dugo čekao. Prema mišljenju stručnjaka, povećanje performansi u igri s PhysX-om koji radi na CUDA-i se povećalo barem za red veličine. Vjerovatnoća realizacije fizičkih zakona također je povećana. CUDA vodi računa o rutinskom proračunu implementacije trenja, gravitacije i drugih nama poznatih stvari za višedimenzionalne objekte. Sada se ne samo heroji i njihova oprema savršeno uklapaju u zakone fizičkog svijeta koji nam je poznat, već i prašina, magla, udarni val, plamen i voda.

CUDA verzija paketa za kompresiju tekstura NVIDIA Texture Tools 2

Volite li realistične objekte u modernim igrama? Vrijedi se zahvaliti programerima tekstura. Ali što je više stvarnosti u teksturi, to je veći njen volumen. Što više zauzima dragocjenu memoriju. Kako bi se to izbjeglo, teksture se prethodno kompresuju i dinamički dekompresuju po potrebi. A kompresija i dekompresija su čiste kalkulacije. Za rad sa teksturama, nVidia je izdala paket NVIDIA Texture Tools. Podržava efikasnu kompresiju i dekompresiju DirectX tekstura (tzv. HF format). Druga verzija ovog paketa ima podršku za BC4 i BC5 algoritme kompresije implementirane u tehnologiji DirectX 11. Ali glavna stvar je da NVIDIA Texture Tools 2 uključuje CUDA podršku. Prema nVidia-i, ovo daje 12 puta povećanje performansi u zadacima kompresije teksture i dekompresije. To znači da će se okviri za igranje brže učitavati i oduševiti igrača svojim realizmom.

NVIDIA Texture Tools 2 paket je dizajniran za rad sa CUDA-om. Dobitak performansi pri kompresiji i dekompresiji tekstura je očigledan.

Upotreba CUDA može značajno poboljšati efikasnost video nadzora.

Obrada video toka u realnom vremenu

Šta god da se kaže, sadašnji svet, sa stanovišta špijuniranja, mnogo je bliži svetu Orvelovog Velikog brata nego što se čini. I vozači automobila i posjetioci javnih mjesta osjećaju pogled video kamera.

Pune rijeke video informacija teku u centre njihove obrade i... nailaze na usku kariku - osobu. U većini slučajeva, on je posljednji autoritet koji nadgleda video svijet. Štaviše, vlast nije najefikasnija. Trepće, ometa se i pokušava zaspati.

Zahvaljujući CUDA-i, postalo je moguće implementirati algoritme za istovremeno praćenje više objekata u video streamu. U ovom slučaju, proces se odvija u realnom vremenu, a video je punih 30 fps. U poređenju sa implementacijom takvog algoritma na modernim procesorima sa više jezgara, CUDA daje dvostruko ili trostruko povećanje performansi, a to je, vidite, dosta.

Video konverzija, audio filtriranje

Badaboom video konverter je prvi koji koristi CUDA za ubrzavanje konverzije.

Lijepo je gledati novi proizvod za iznajmljivanje videa u FullHD kvaliteti i na velikom ekranu. Ali ne možete ponijeti veliki ekran sa sobom na put, a FullHD video kodek će zastati na procesoru male potrošnje mobilnog uređaja. Konverzija dolazi u pomoć. Ali većina onih koji su se s tim susreli u praksi žale se na dugo vrijeme konverzije. To je razumljivo, proces je rutinski, pogodan za paralelizaciju, a njegovo izvođenje na CPU-u nije baš optimalno.

Ali CUDA se s tim nosi sa praskom. Prvi znak je Badaboom konverter iz Eleventala. Badaboom programeri su donijeli pravu odluku kada su odabrali CUDA. Testovi pokazuju da standardni film od sat i po vremena pretvara u iPhone/iPod Touch format za manje od dvadeset minuta. I to uprkos činjenici da kada se koristi samo CPU, ovaj proces traje više od sat vremena.

Pomaže CUDA-i i profesionalnim ljubiteljima muzike. Bilo koji od njih bi dao pola kraljevstva za efikasan FIR crossover - set filtera koji dijele zvučni spektar u nekoliko opsega. Ovaj proces je vrlo radno intenzivan i, uz veliku količinu audio materijala, tjera tonskog inženjera da "puši" nekoliko sati. Implementacija CUDA baziranog FIR crossovera ubrzava njegov rad stotinama puta.

CUDA Future

Pošto je GPGPU tehnologiju pretvorio u stvarnost, CUDA ne počiva na lovorikama. Kao što se svuda dešava, princip refleksije funkcioniše u CUDA-i: sada ne samo da arhitektura nVidia video procesora utiče na razvoj CUDA SDK verzija, već i sama CUDA tehnologija primorava nVidiju da preispita arhitekturu svojih čipova. Primjer takve refleksije je nVidia ION platforma. Njegova druga verzija je posebno optimizirana za rješavanje CUDA problema. To znači da će čak iu relativno jeftinim hardverskim rješenjima potrošači dobiti svu snagu i briljantne mogućnosti CUDA-e.

I dizajniran je da prevede kod hosta (glavni, kontrolni kod) i kod uređaja (hardverski kod) (datoteke sa ekstenzijom .cu) u objektne datoteke pogodne za proces sastavljanja konačnog programa ili biblioteke u bilo kojem programskom okruženju, na primjer u NetBeans.

CUDA arhitektura koristi mrežni memorijski model, modeliranje niti klastera i SIMD instrukcije. Primjenjivo ne samo za grafičko računarstvo visokih performansi, već i za razna naučna računala koja koriste nVidia video kartice. Naučnici i istraživači naširoko koriste CUDA u raznim oblastima, uključujući astrofiziku, računarsku biologiju i hemiju, modeliranje dinamike fluida, elektromagnetne interakcije, kompjutersku tomografiju, seizmičku analizu i još mnogo toga. CUDA ima mogućnost povezivanja na aplikacije koristeći OpenGL i Direct3D. CUDA je softver za više platformi za operativne sisteme kao što su Linux, Mac OS X i Windows.

22. marta 2010. nVidia je objavila CUDA Toolkit 3.0, koji je sadržavao podršku za OpenCL.

Oprema

CUDA platforma se prvi put pojavila na tržištu izdavanjem NVIDIA G80 čipa osme generacije i postala je prisutna u svim narednim serijama grafičkih čipova, koji se koriste u porodicama GeForce, Quadro i NVidia Tesla akceleratora.

Prva serija hardvera za podršku CUDA SDK, G8x, imala je 32-bitni vektorski procesor jednostruke preciznosti koji koristi CUDA SDK kao API (CUDA podržava C double tip, ali je njegova preciznost sada smanjena na 32-bitni s pomičnim zarezom). Kasniji GT200 procesori imaju podršku za 64-bitnu preciznost (samo SFU), ali su performanse znatno lošije nego za 32-bitnu preciznost (zbog činjenice da postoje samo dva SFU-a po stream multiprocesoru, dok postoji osam skalarnih procesora). GPU organizira hardversku multithreading, što vam omogućava da koristite sve resurse GPU-a. Dakle, otvara se mogućnost da se funkcije fizičkog akceleratora prenesu na grafički akcelerator (primer implementacije je nVidia PhysX). Takođe otvara široke mogućnosti za korišćenje hardvera kompjuterske grafike za izvođenje složenih negrafičkih proračuna: na primer, u računarskoj biologiji i drugim granama nauke.

Prednosti

U poređenju sa tradicionalnim pristupom organizovanju računarstva opšte namene kroz grafičke API-je, CUDA arhitektura ima sledeće prednosti u ovoj oblasti:

Ograničenja

  • Sve izvršne funkcije na uređaju ne podržavaju rekurziju (CUDA Toolkit 3.1 podržava pokazivače i rekurziju) i imaju neka druga ograničenja

Podržani GPU-ovi i grafički akceleratori

Spisak uređaja proizvođača opreme Nvidia sa deklarisanom punom podrškom za CUDA tehnologiju nalazi se na službenoj Nvidia web stranici: CUDA-Enabled GPU Products (engleski).

Zapravo, sljedeće periferne jedinice trenutno podržavaju CUDA tehnologiju na tržištu PC hardvera:

Verzija specifikacije GPU Video kartice
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/18x, 17/18/3 /370M, 3/5/770M, 16/17/27/28/36/37/3800M, NVS420/50
1.2 GT218, GT216, GT215 GeForce 210, GT 220/40, FX380 LP, 1800M, 370/380M, NVS 2/3100M
1.3 GT200, GT200b GeForce GTX 260, GTX 275, GTX 280, GTX 285, GTX 295, Tesla C/M1060, S1070, Quadro CX, FX 3/4/5800
2.0 GF100, GF110 GeForce (GF100) GTX 465, GTX 470, GTX 480, Tesla C2050, C2070, S/M2050/70, Quadro Plex 7000, Quadro 4000, 5000, 6000, GeForce (GF110) GTX5, GTX 540 GTX 580
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, GeForce GTX 670MX0, GeForce GTX 670MX0, GeForce GTX 670MX0 GeForce GT 645M, GeForce GT 640M
3.5 GK110
Nvidia GeForce za desktop računare
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 za mobilne računare
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 za desktop računare
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 niskog profila
Quadro FX 370
Quadro FX 370 niskog profila
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 za mobilno računarstvo
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
  • Modeli Tesla C1060, Tesla S1070, Tesla C2050/C2070, Tesla M2050/M2070, Tesla S2050 omogućavaju GPU proračune sa dvostrukom preciznošću.

Karakteristike i specifikacije različitih verzija

Podrška za funkcije (nenavedene funkcije su
podržano za sve računarske mogućnosti)
Računarska sposobnost (verzija)
1.0 1.1 1.2 1.3 2.x

32-bitne riječi u globalnoj memoriji
br Da

vrijednosti s pomičnim zarezom u globalnoj memoriji
Cjelobrojne atomske funkcije koje rade na
32-bitne riječi u zajedničkoj memoriji
br Da
atomicExch() radi na 32-bitnoj verziji
vrijednosti s pomičnim zarezom u zajedničkoj memoriji
Cjelobrojne atomske funkcije koje rade na
64-bitne riječi u globalnoj memoriji
Warp funkcije glasanja
Operacije s pomičnim zarezom dvostruke preciznosti br Da
Atomske funkcije koje rade na 64-bitu
cjelobrojne vrijednosti u zajedničkoj memoriji
br Da
Operativno atomsko sabiranje s pomičnim zarezom
32-bitne riječi u globalnoj i zajedničkoj memoriji
_ballot()
_threadfence_system()
_syncthreads_count(),
_syncthreads_and(),
_syncthreads_or()
Površinske funkcije
3D mreža blokova niti
Tehničke specifikacije Računarska sposobnost (verzija)
1.0 1.1 1.2 1.3 2.x
Maksimalna dimenzionalnost mreže blokova navoja 2 3
Maksimalna x-, y- ili z-dimenzija mreže blokova niti 65535
Maksimalna dimenzionalnost bloka navoja 3
Maksimalna x- ili y-dimenzija bloka 512 1024
Maksimalna z-dimenzija bloka 64
Maksimalan broj niti po bloku 512 1024
Veličina osnove 32
Maksimalni broj rezidentnih blokova po multiprocesoru 8
Maksimalan broj rezidentnih iskrivljenja po multiprocesoru 24 32 48
Maksimalan broj rezidentnih niti po multiprocesoru 768 1024 1536
Broj 32-bitnih registara po multiprocesoru 8K 16K 32K
Maksimalna količina dijeljene memorije po multiprocesoru 16 KB 48 KB
Broj banaka dijeljene memorije 16 32
Količina lokalne memorije po niti 16 KB 512 KB
Konstantna veličina memorije 64 KB
Radni set keš memorije po multiprocesoru za konstantnu memoriju 8 KB
Radni set keš memorije po multiprocesoru za memoriju tekstura Ovisno o uređaju, između 6 KB i 8 KB
Maksimalna širina za 1D teksturu
8192 32768
Maksimalna širina za 1D teksturu
referenca vezana za linearnu memoriju
2 27
Maksimalna širina i broj slojeva
za referencu 1D slojevite teksture
8192 x 512 16384 x 2048
Maksimalna širina i visina za 2D
referenca teksture vezana za
linearnu memoriju ili CUDA niz
65536 x 32768 65536 x 65535
Maksimalna širina, visina i broj
slojeva za referencu 2D slojevite teksture
8192 x 8192 x 512 16384 x 16384 x 2048
Maksimalna širina, visina i dubina
za referencu 3D teksture vezanu za linearnu
memoriju ili CUDA niz
2048 x 2048 x 2048
Maksimalan broj tekstura koji
može biti vezan za kernel
128
Maksimalna širina za 1D površinu
referenca vezana za CUDA niz
Ne
podržano
8192
Maksimalna širina i visina za 2D
površinska referenca vezana za CUDA niz
8192 x 8192
Maksimalan broj površina koje
može biti vezan za kernel
8
Maksimalan broj instrukcija po
kernel
2 miliona

Primjer

CudaArray* cu_array; tekstura< float , 2 >tex; // Dodijeli niz cudaMalloc( & cu_array, cudaCreateChannelDesc< float>(), širina visina) ; // Kopiraj podatke slike u niz cudaMemcpy( cu_array, image, width* height, cudaMemcpyHostToDevice) ; // Vezi niz na teksturu cudaBindTexture(tex, cu_array) ; // Pokreni kernel dim3 blockDim(16, 16, 1) ; dim3 gridDim(širina / blockDim.x, visina / blockDim.y, 1) ; kernel<<< gridDim, blockDim, 0 >>> (d_odata, širina, visina) ; cudaUnbindTexture(tex) ; __global__ void kernel(float * odata, int visina, int širina) ( 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* širina+ x] = c; )

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

CUDA kao predmet na univerzitetima

Od decembra 2009. CUDA softverski model se predaje na 269 univerziteta širom svijeta. U Rusiji se kursevi obuke o CUDA održavaju na Politehničkom univerzitetu u Sankt Peterburgu, Jaroslavskom državnom univerzitetu. P. G. Demidov, Moskva, Nižnji Novgorod, Sankt Peterburg, Tver, Kazanj, Novosibirsk, Novosibirski državni tehnički univerzitet, Omsk i Permski državni univerziteti, Međunarodni univerzitet prirode društva i čovjeka "Dubna", Ivanovo državni energetski univerzitet, Belgorodski državni univerzitet , MSTU im. Bauman, Ruski hemijsko-tehnički univerzitet po imenu. Mendeljejev, Međuregionalni superkompjuterski centar RAS, . Osim toga, u decembru 2009. godine objavljeno je da je počeo sa radom prvi ruski naučno-obrazovni centar „Parallelno računanje“, koji se nalazi u gradu Dubni, čiji zadaci uključuju obuku i konsultacije o rješavanju složenih računarskih problema na GPU-ima.

U Ukrajini se kursevi o CUDA-i održavaju na Kijevskom institutu za sistemsku analizu.

Linkovi

Zvanični resursi

  • CUDA zona (ruski) - službena CUDA web stranica
  • CUDA GPU Computing (engleski) - službeni web forumi posvećeni CUDA računarstvu

Nezvanični izvori

Tomov hardver
  • Dmitry Chekanov. nVidia CUDA: računanje na video kartici ili smrt CPU-a? . Tom's Hardware (22. jun 2008.). Arhivirano
  • Dmitry Chekanov. nVidia CUDA: Benchmarking GPU aplikacija za masovno tržište. Tom's Hardware (19. maja 2009.). Arhivirano iz originala 4. marta 2012. Pristupljeno 19. maja 2009.
iXBT.com
  • Alexey Berillo. NVIDIA CUDA - negrafičko računarstvo na GPU-ovima. Dio 1. iXBT.com (23. septembar 2008.). Arhivirano iz originala 4. marta 2012. Pristupljeno 20. januara 2009.
  • Alexey Berillo. NVIDIA CUDA - negrafičko računarstvo na GPU-ovima. Dio 2 . iXBT.com (22. oktobar 2008.). - Primeri implementacije NVIDIA CUDA. Arhivirano iz originala 4. marta 2012. Pristupljeno 20. januara 2009.
Ostali resursi
  • Boreskov Aleksej Viktorovič. Osnove CUDA (20. januar 2009.). Arhivirano iz originala 4. marta 2012. Pristupljeno 20. januara 2009.
  • Vladimir Frolov. Uvod u CUDA tehnologiju. Online magazin “Kompjuterska grafika i multimedija” (19. decembar 2008.). Arhivirano iz originala 4. marta 2012. Pristupljeno 28. oktobra 2009.
  • Igor Oskolkov. NVIDIA CUDA je pristupačna ulaznica u svijet velikog računarstva. Computerra (30. april 2009.). Pristupljeno 3. maja 2009.
  • Vladimir Frolov. Uvod u CUDA tehnologiju (1. avgust 2009). Arhivirano iz originala 4. marta 2012. Pristupljeno 3. aprila 2010.
  • GPGPU.ru. Korišćenje video kartica za računar
  • . Parallel Computing Center

Bilješke

vidi takođe

U razvoju savremenih procesora postoji tendencija postepenog povećanja broja jezgara, čime se povećavaju njihove mogućnosti u paralelnom računarstvu. Međutim, odavno su dostupni GPU-ovi koji su značajno superiorniji od CPU-a u tom pogledu. A ove mogućnosti GPU-a su neke kompanije već uzele u obzir. Prvi pokušaji upotrebe grafičkih akceleratora za neciljano računanje napravljeni su od kasnih 90-ih. Ali tek je pojava shadera postala poticaj za razvoj potpuno nove tehnologije, a 2003. godine pojavio se koncept GPGPU (Grafičke procesorske jedinice opće namjene). Važnu ulogu u razvoju ove inicijative odigrao je BrookGPU, koji je posebna ekstenzija za jezik C. Prije pojave BrookGPU-a, programeri su mogli raditi sa GPU-ovima samo preko Direct3D ili OpenGL API-ja. Brook je omogućio programerima da rade sa poznatim okruženjem, a sam kompajler je, koristeći posebne biblioteke, implementirao interakciju sa GPU-om na niskom nivou.

Takav napredak nije mogao a da ne privuče pažnju lidera ove industrije - AMD-a i NVIDIA-e, koji su počeli razvijati vlastite softverske platforme za negrafičko računanje na svojim video karticama. Niko bolje od GPU programera ne zna sve nijanse i karakteristike svojih proizvoda, što ovim istim kompanijama omogućava da što efikasnije optimizuju softverski paket za određena hardverska rešenja. Trenutno, NVIDIA razvija CUDA (Compute Unified Device Architecture) platformu; AMD sličnu tehnologiju naziva CTM (Close To Metal) ili AMD Stream Computing. Pogledaćemo neke od mogućnosti CUDA-e i u praksi proceniti računarske mogućnosti G92 grafičkog čipa GeForce 8800 GT video kartice.

Ali prvo, pogledajmo neke od nijansi izvođenja proračuna pomoću GPU-a. Njihova glavna prednost je što je grafički čip inicijalno dizajniran za izvršavanje više niti, dok svaka jezgra konvencionalnog CPU-a izvršava niz uzastopnih instrukcija. Svaki moderni GPU je multiprocesor koji se sastoji od nekoliko računarskih klastera, sa mnogo ALU-ova u svakom. Najmoćniji moderni GT200 čip se sastoji od 10 takvih klastera, od kojih svaki ima 24 stream procesora. Testirana GeForce 8800 GT video kartica bazirana na G92 čipu ima sedam velikih računarskih jedinica sa po 16 stream procesora. CPU koriste SIMD SSE blokove za vektorske proračune (jedna instrukcija više podataka - jedna instrukcija se izvršava na više podataka), što zahtijeva transformaciju podataka u 4 vektora. GPU obrađuje niti skalarno, tj. jedna instrukcija se primjenjuje na nekoliko niti (SIMT - pojedinačna instrukcija više niti). Ovo štedi programere od pretvaranja podataka u vektore i omogućava proizvoljno grananje u tokovima. Svaka GPU računarska jedinica ima direktan pristup memoriji. A propusni opseg video memorije je veći, zahvaljujući upotrebi nekoliko odvojenih memorijskih kontrolera (na top-end G200 postoji 8 64-bitnih kanala) i visokim radnim frekvencijama.

Općenito, u određenim zadacima kada se radi s velikim količinama podataka, GPU-ovi su mnogo brži od CPU-a. U nastavku vidite ilustraciju ove izjave:


Grafikon prikazuje dinamiku rasta CPU i GPU performansi od 2003. godine. NVIDIA voli da citira ove podatke kao reklame u svojim dokumentima, ali to su samo teoretske kalkulacije i u stvarnosti bi se jaz, naravno, mogao pokazati mnogo manjim.

Ali kako god bilo, postoji ogroman potencijal GPU-a koji se može koristiti, a koji zahtijeva specifičan pristup razvoju softvera. Sve ovo je implementirano u CUDA hardverskom i softverskom okruženju, koje se sastoji od nekoliko softverskih nivoa - CUDA Runtime API visokog nivoa i CUDA Driver API niskog nivoa.


CUDA koristi standardni C jezik za programiranje, što je jedna od njegovih glavnih prednosti za programere. U početku, CUDA uključuje BLAS (osnovni paket linearne algebre) i FFT (Fourierova transformacija) biblioteke. CUDA takođe ima mogućnost interakcije sa OpenGL ili DirectX grafičkim API-jima, mogućnost razvoja na niskom nivou, a karakteriše ga optimizovana distribucija tokova podataka između CPU-a i GPU-a. CUDA proračuni se izvode istovremeno s grafičkim, za razliku od slične AMD platforme, gdje se pokreće posebna virtuelna mašina za proračune na GPU-u. Ali takva "kohabitacija" je također prepuna grešaka ako grafički API stvara veliko opterećenje dok CUDA radi istovremeno - na kraju krajeva, grafičke operacije i dalje imaju veći prioritet. Platforma je kompatibilna sa 32- i 64-bitnim operativnim sistemima Windows XP, Windows Vista, MacOS X i raznim verzijama Linuxa. Platforma je otvorena i na web stranici, pored posebnih drajvera za video karticu, možete preuzeti softverske pakete CUDA Toolkit, CUDA Developer SDK, uključujući kompajler, debuger, standardne biblioteke i dokumentaciju.

Što se tiče praktične implementacije CUDA-e, dugo vremena ova tehnologija se koristila samo za visokospecijalizirane matematičke proračune iz oblasti fizike čestica, astrofizike, medicine ili predviđanja promjena na finansijskom tržištu itd. Ali ova tehnologija postupno postaje bliža običnim korisnicima, a posebno se pojavljuju posebni dodaci za Photoshop koji mogu koristiti računsku snagu GPU-a. Na posebnoj stranici možete proučiti cijelu listu programa koji koriste mogućnosti NVIDIA CUDA.

Kao praktični test nove tehnologije na MSI NX8800GT-T2D256E-OC video kartici, koristićemo program TMPGEnc. Ovaj proizvod je komercijalan (puna verzija košta 100$), ali za MSI video kartice dolazi kao bonus u probnoj verziji u trajanju od 30 dana. Ovu verziju možete preuzeti sa web stranice programera, ali da biste instalirali TMPGEnc 4.0 XPress MSI Special Edition potreban vam je originalni disk sa drajverima sa MSI kartice - bez njega program neće biti instaliran.

Da biste prikazali najpotpunije informacije o računarskim mogućnostima u CUDA-i i uporedili ih sa drugim video adapterima, možete koristiti poseban CUDA-Z uslužni program. Ovo su informacije koje daje o našoj GeForce 8800GT video kartici:




U poređenju sa referentnim modelima, naša kopija radi na višim frekvencijama: rasterski domen je 63 MHz veći od nominalnog, a shader jedinice su brže za 174 MHz, a memorija je brža za 100 MHz.

Uporedićemo brzinu konverzije istog HD videa kada se računa samo pomoću CPU-a i sa dodatnom aktivacijom CUDA u programu TMPGEnc na sledećoj konfiguraciji:

  • Procesor: Pentium Dual-Core E5200 2,5 GHz;
  • Matična ploča: Gigabyte P35-S3;
  • Memorija: 2x1GB GoodRam PC6400 (5-5-5-18-2T)
  • Video kartica: MSI NX8800GT-T2D256E-OC;
  • Tvrdi disk: 320GB WD3200AAKS;
  • Napajanje: CoolerMaster eXtreme Power 500-PCAP;
  • Operativni sistem: Windows XP SP2;
  • TMPGEnc 4.0 XPress 4.6.3.268;
  • Drajveri za video karticu: ForceWare 180.60.
Za testove, procesor je overklokan na 3 GHz (u konfiguraciji 11,5x261 MHz) i na 4 GHz (11,5x348 MHz) sa frekvencijom RAM memorije od 835 MHz u prvom i drugom slučaju. Video u Full HD rezoluciji 1920x1080, jedan minut i dvadeset sekundi. Da bi se stvorilo dodatno opterećenje, uključen je filter za smanjenje buke, čije su postavke ostavljene na zadanim vrijednostima.


Kodiranje je izvršeno pomoću DivX 6.8.4 kodeka. U postavkama kvalitete ovog kodeka, sve vrijednosti su ostavljene na zadanim vrijednostima, multithreading je omogućen.


Podrška za višenitnost u TMPGEnc-u je inicijalno omogućena na kartici CPU/GPU postavke. CUDA je također aktivirana u istom dijelu.


Kao što možete vidjeti iz gornjeg snimka ekrana, obrada filtera pomoću CUDA je omogućena, ali hardverski video dekoder nije omogućen. Dokumentacija programa upozorava da aktiviranje posljednjeg parametra povećava vrijeme obrade datoteke.

Na osnovu rezultata ispitivanja dobijeni su sljedeći podaci:


Na 4 GHz sa omogućenom CUDA-om, dobili smo samo nekoliko sekundi (ili 2%), što i nije posebno impresivno. Ali na nižoj frekvenciji, povećanje od aktivacije ove tehnologije omogućava vam uštedu oko 13% vremena, što će biti prilično primjetno pri obradi velikih datoteka. Ali ipak rezultati nisu tako impresivni kako se očekivalo.

Program TMPGEnc ima indikator opterećenja CPU-a i CUDA; u ovoj test konfiguraciji pokazao je opterećenje CPU-a na oko 20%, a grafičku jezgru na preostalih 80%. Kao rezultat, imamo istih 100% kao i kod konvertiranja bez CUDA-e, i možda uopće neće biti vremenske razlike (ali ona i dalje postoji). Mali kapacitet memorije od 256 MB takođe nije ograničavajući faktor. Sudeći prema očitanjima RivaTuner-a, tokom rada nije korišteno više od 154 MB video memorije.



zaključci

Program TMPGEnc je jedan od onih koji uvodi CUDA tehnologiju u mase. Upotreba GPU-a u ovom programu omogućava vam da ubrzate proces obrade videa i značajno rasteretite centralni procesor, što će korisniku omogućiti udobno obavljanje drugih zadataka u isto vrijeme. U našem konkretnom primjeru, GeForce 8800GT 256MB video kartica je malo poboljšala performanse vremena kada je konvertirala video na osnovu overklokovanog Pentium Dual-Core E5200 procesora. Ali jasno je vidljivo da se smanjenjem frekvencije povećava dobitak od aktivacije CUDA-e; na slabim procesorima dobitak od njegove upotrebe bit će mnogo veći. U pozadini ove zavisnosti, sasvim je logično pretpostaviti da će se čak i uz povećanje opterećenja (na primjer, korištenje vrlo velikog broja dodatnih video filtera), rezultati sistema s CUDA-om razlikovati po značajna delta razlike u vremenu utrošenom na proces kodiranja. Takođe, ne zaboravite da G92 nije najmoćniji čip u ovom trenutku, a modernije video kartice će omogućiti znatno veće performanse u ovakvim aplikacijama. Međutim, dok je aplikacija pokrenuta, GPU nije u potpunosti napunjen i, vjerovatno, raspodjela opterećenja ovisi o svakoj konfiguraciji posebno, odnosno o kombinaciji procesor/video kartica, što u konačnici može dati veći (ili manji) porast u postocima CUDA aktivacije. U svakom slučaju, za one koji rade s velikim količinama video podataka, ova tehnologija će im ipak omogućiti da značajno uštede vrijeme.

Istina, CUDA još uvijek nije stekla široku popularnost; kvalitet softvera koji radi s ovom tehnologijom zahtijeva poboljšanje. U programu TMPGEnc 4.0 XPress koji smo pregledali, ova tehnologija nije uvijek radila. Isti video se mogao ponovo kodirati nekoliko puta, a onda je iznenada, sljedeći put kada je pokrenut, opterećenje CUDA već bilo 0%. I ovaj fenomen je bio potpuno nasumičan na potpuno različitim operativnim sistemima. Takođe, predmetni program je odbio da koristi CUDA prilikom kodiranja u XviD format, ali nije bilo problema sa popularnim DivX kodekom.

Kao rezultat toga, do sada CUDA tehnologija može značajno povećati performanse personalnih računara samo u određenim zadacima. Ali opseg primjene takve tehnologije će se proširiti, a proces povećanja broja jezgara u konvencionalnim procesorima ukazuje na povećanje potražnje za paralelnim višenitnim računarstvom u modernim softverskim aplikacijama. Nije uzalud da su nedavno svi lideri u industriji postali opsjednuti idejom kombiniranja CPU-a i GPU-a unutar jedne objedinjene arhitekture (sjetite se samo mnogo reklamiranog AMD Fusion-a). Možda je CUDA jedna od faza u procesu ovog ujedinjenja.


Zahvaljujemo se sljedećim kompanijama na obezbjeđenju opreme za testiranje:

– skup softverskih interfejsa niskog nivoa ( API) za kreiranje igara i drugih multimedijalnih aplikacija visokih performansi. Uključuje podršku visokih performansi 2D- I 3D-grafički, zvučni i ulazni uređaji.

Direct3D (D3D) – interfejs za trodimenzionalni prikaz primitivcima(geometrijska tijela). Uključeno u .

OpenGL(sa engleskog Otvorite grafičku biblioteku, doslovno - otvorena grafička biblioteka) je specifikacija koja definira međuplatformsko programsko sučelje neovisno o programskom jeziku za pisanje aplikacija korištenjem dvodimenzionalne i trodimenzionalne računalne grafike. Uključuje preko 250 funkcija za crtanje složenih 3D scena iz jednostavnih primitiva. Koristi se za kreiranje video igara, virtuelne stvarnosti i vizualizacije u naučnim istraživanjima. Na platformi Windows takmiči se sa .

OpenCL(sa engleskog Otvorite jezik računarstva, doslovno – otvoreni jezik proračuna) – okvir(softverski sistemski okvir) za pisanje kompjuterskih programa vezanih za paralelno računanje na različitim grafikama ( GPU) I ( ). Do okvira OpenCL uključuje programski jezik i sučelje za programiranje aplikacije ( API). OpenCL obezbeđuje paralelizam na nivou instrukcija i na nivou podataka i predstavlja implementaciju tehnike GPGPU.

GPGPU(skraćeno od engleskog) Jedinice za obradu generičkih grafičkih jedinica, bukvalno - GPU opšta namena) je tehnika za korišćenje grafičke procesorske jedinice (GPU) ili video kartice za opšte računarstvo koje obično izvodi računar.

Shader(engleski) shader) – program za konstruisanje senki na sintetizovanim slikama, koji se koristi u trodimenzionalnoj grafici za određivanje konačnih parametara objekta ili slike. Obično uključuje proizvoljno složene opise apsorpcije i rasipanja svjetlosti, mapiranja teksture, refleksije i refrakcije, sjenčanja, pomaka površine i efekata naknadne obrade. Složene površine mogu se vizualizirati korištenjem jednostavnih geometrijskih oblika.

Rendering(engleski) rendering) – vizualizacija, u kompjuterskoj grafici, proces dobijanja slike iz modela pomoću softvera.

SDK(skraćeno od engleskog) Komplet za razvoj softvera) – skup alata za razvoj softvera.

CPU(skraćeno od engleskog) Centralna procesorska jedinica, doslovno – centralni/glavni/glavni računarski uređaj) – centralni (mikro);uređaj koji izvršava mašinske instrukcije; komad hardvera odgovoran za izvođenje računskih operacija (specificiranih operativnim sistemom i aplikativnim softverom) i koordinaciju rada svih uređaja.

GPU(skraćeno od engleskog) Jedinica za grafičku obradu, doslovno – grafički računarski uređaj) – grafički procesor; poseban uređaj ili konzolu za igru ​​koja vrši grafičko prikazivanje (vizualizaciju). Moderni GPU-ovi su veoma efikasni u obradi i prikazivanju kompjuterske grafike na realističan način. Grafički procesor u modernim video adapterima koristi se kao 3D grafički akcelerator, ali se u nekim slučajevima može koristiti i za proračune ( GPGPU).

Problemi CPU

Dugo vremena se povećanje performansi tradicionalnih uglavnom događalo zbog stalnog povećanja frekvencije takta (oko 80% performansi je određeno frekvencijom takta) uz istovremeno povećanje broja tranzistora na jednom čipu . Međutim, daljnje povećanje frekvencije takta (na frekvenciji takta većoj od 3,8 GHz, čipovi se jednostavno pregrijavaju!) nailazi na brojne fundamentalne fizičke barijere (pošto se tehnološki proces skoro približio veličini atoma: , a veličina atoma silicija je približno 0,543 nm):

Prvo, kako se veličina kristala smanjuje i frekvencija takta povećava, struja curenja tranzistora se povećava. To dovodi do povećane potrošnje energije i povećane emisije topline;

Drugo, prednosti veće brzine takta su djelimično negirane latencijom pristupa memoriji, jer vremena pristupa memoriji ne idu u korak sa povećanjem brzina takta;

Treće, za neke aplikacije, tradicionalne serijske arhitekture postaju neefikasne kako se brzina takta povećava zbog takozvanog „von Neumannova uskog grla“, ograničenja performansi koje je rezultat sekvencijalnog toka izračunavanja. Istovremeno se povećavaju kašnjenja u prijenosu otporno-kapacitivnog signala, što je dodatno usko grlo povezano s povećanjem frekvencije takta.

Razvoj GPU

Paralelno s tim, tekao je (i postoji!) razvoj GPU:

novembar 2008. – Intel predstavio liniju 4-jezgrenih Intel Core i7, koji su bazirani na mikroarhitekturi nove generacije Nehalem. Procesori rade na frekvenciji takta od 2,6-3,2 GHz. Izrađen po 45nm procesnoj tehnologiji.

Decembar 2008 – počele su isporuke 4-jezgrenih AMD Phenom II 940(šifrarno ime - Deneb). Radi na frekvenciji od 3 GHz, proizveden po 45-nm procesnoj tehnologiji.

Maj 2009 – kompanija AMD predstavio GPU verziju ATI Radeon HD 4890 sa povećanjem takta jezgre sa 850 MHz na 1 GHz. Ovo je prvi grafički procesor radi na 1 GHz. Računska snaga čipa, zahvaljujući povećanju frekvencije, porasla je sa 1,36 na 1,6 teraflopsa. Procesor sadrži 800 (!) računarskih jezgara i podržava video memoriju GDDR5, DirectX 10.1, ATI CrossFireX i sve druge tehnologije svojstvene modernim modelima video kartica. Čip je proizveden na bazi 55 nm tehnologije.

Glavne razlike GPU

Distinctive Features GPU(u odnosu na ) su:

– arhitektura maksimalno usmjerena na povećanje brzine izračunavanja tekstura i složenih grafičkih objekata;

– tipična vršna snaga GPU mnogo više od toga ;

– zahvaljujući specijalizovanoj arhitekturi transportera, GPU mnogo efikasnije u obradi grafičkih informacija od .

"Kriza žanra"

"Kriza žanra" za sazrele do 2005 - tada su se pojavile. Ali, unatoč razvoju tehnologije, povećanje produktivnosti konvencionalnih primetno smanjen. Istovremeno performanse GPU nastavlja da raste. Tako se do 2003. ova revolucionarna ideja iskristalisala - koristite računarsku snagu grafike za svoje potrebe. GPU-ovi se sve više koriste za „negrafičko” računarstvo (simulacija fizike, obrada signala, računarska matematika/geometrija, operacije baze podataka, računarska biologija, računarska ekonomija, kompjuterski vid, itd.).

Glavni problem je bio što nije postojao standardni programski interfejs GPU. Programeri su koristili OpenGL ili Direct3D, ali je bilo vrlo zgodno. Corporation NVIDIA(jedan od najvećih proizvođača grafičkih, medijskih i komunikacijskih procesora, kao i bežičnih medijskih procesora; osnovan 1993.) započeo je razvoj jedinstvenog i praktičnog standarda - i uveo tehnologiju CUDA.

Kako je počelo

2006 – NVIDIA demonstrira CUDA™; početak revolucije u računarstvu GPU.

2007 – NVIDIA izdaje arhitekturu CUDA(originalna verzija CUDA SDK dostavljena 15. februara 2007.); nominacija “Najbolji novi proizvod” časopisa Popular Science i "Izbor čitalaca" iz publikacije HPCWire.

2008 – tehnologija NVIDIA CUDA osvojio je kategoriju “Tehnička izvrsnost” iz PC Magazine.

Šta se desilo CUDA

CUDA(skraćeno od engleskog) Compute Unified Device Architecture, doslovno - objedinjena računarska arhitektura uređaja) - arhitektura (skup softvera i hardvera) koja vam omogućava da proizvodite na GPU kalkulacije opšte namene, dok GPU zapravo djeluje kao moćan koprocesor.

Tehnologija NVIDIA CUDA™ je jedino razvojno okruženje u programskom jeziku C, koji omogućava programerima da kreiraju softver koji rješava složene računarske probleme za manje vremena, zahvaljujući procesorskoj snazi ​​GPU-a. Milioni ljudi već rade u svijetu GPU uz podršku CUDA, a hiljade programera već koriste (besplatne!) alate CUDA za ubrzanje aplikacija i rješavanje najsloženijih zadataka koji zahtijevaju velike resurse - od video i audio kodiranja do istraživanja nafte i plina, modeliranja proizvoda, medicinskog snimanja i naučnog istraživanja.

CUDA daje programeru mogućnost, prema vlastitom nahođenju, da organizira pristup skupu instrukcija grafičkog akceleratora i upravlja njegovom memorijom, te organizira složene paralelne proračune na njemu. Podrška za grafički akcelerator CUDA postaje moćna programabilna otvorena arhitektura, slična današnjoj . Sve to omogućava programeru niski, distribuirani i brzi pristup hardveru, izradi CUDA neophodna osnova za izgradnju ozbiljnih alata visokog nivoa, kao što su kompajleri, debugeri, matematičke biblioteke i softverske platforme.

Uralsky, vodeći stručnjak za tehnologiju NVIDIA, upoređujući GPU I , kaže ovo: “ - Ovo je SUV. Vozi uvijek i svuda, ali ne baš brzo. A GPU- Ovo je sportski auto. Na lošem putu jednostavno neće ići nikuda, ali dajte mu dobru podlogu, i pokazaće svu svoju brzinu, o kojoj SUV nije ni sanjao!..”

Tehnološke mogućnosti CUDA