Resursa informatică U SM. Unde duce cuda: aplicarea practică a tehnologiei gpgpu - cele mai bune echipamente Aplicații care rulează pe cuda

De zeci de ani este în vigoare Legea lui Moore, care spune că la fiecare doi ani numărul de tranzistori de pe un cip se va dubla. Cu toate acestea, acest lucru a fost în 1965, iar în ultimii 5 ani ideea de multi-core fizice în procesoarele de clasă consumatorilor a început să se dezvolte rapid: în 2005, Intel a introdus Pentium D, iar AMD a introdus Athlon X2. Pe atunci, aplicațiile care foloseau 2 nuclee puteau fi numărate pe degetele unei mâini. Cu toate acestea, următoarea generație de procesoare Intel, care a făcut o revoluție, avea exact 2 nuclee fizice. Mai mult, seria Quad a apărut în ianuarie 2007, moment în care Moore însuși a recunoscut că legea sa va înceta în curând să se aplice.

Ce acum? Procesoarele dual-core chiar și în sistemele de birou bugetare și 4 nuclee fizice au devenit norma, iar asta în doar 2-3 ani. Frecvența procesoarelor nu este crescută, dar arhitectura este îmbunătățită, numărul de nuclee fizice și virtuale este crescut. Cu toate acestea, ideea de a folosi adaptoare video echipate cu zeci sau chiar sute de „unități” de calcul există de mult timp.

Și deși perspectivele pentru GPU computing sunt enorme, cea mai populară soluție este Nvidia CUDA, care este gratuită, are multă documentație și este în general foarte ușor de implementat, nu există multe aplicații care folosesc această tehnologie. Practic, acestea sunt tot felul de calcule specializate, de care utilizatorul obișnuit în majoritatea cazurilor nu îi pasă. Dar există și programe concepute pentru utilizatorul de masă și despre ele vom vorbi în acest articol.

În primul rând, puțin despre tehnologia în sine și cu ce este folosită. Deoarece Când scriu un articol, mă concentrez pe o gamă largă de cititori, așa că voi încerca să-l explic într-un limbaj accesibil fără termeni complexi și oarecum pe scurt.

CUDA(Engleză: Compute Unified Device Architecture) este o arhitectură software și hardware care vă permite să efectuați calcule folosind procesoare grafice NVIDIA care acceptă tehnologia GPGPU (calcul aleatoriu pe plăcile video). Arhitectura CUDA a apărut pentru prima dată pe piață odată cu lansarea cipului NVIDIA de generația a opta - G80 și este prezentă în toate seriile ulterioare de cipuri grafice care sunt utilizate în familiile de acceleratoare GeForce, Quadro și Tesla. (c) Wikipedia.org

Fluxurile primite sunt procesate independent unul de celălalt, de exemplu. paralel.

Există o împărțire în 3 niveluri:

Grilă- miez. Conține o matrice una/două/tridimensională de blocuri.

bloc– conține multe fire. Firele diferitelor blocuri nu pot interacționa între ele. De ce a fost necesar să se introducă blocuri? Fiecare bloc este în esență responsabil pentru propria sa sarcină secundară. De exemplu, o imagine mare (care este o matrice) poate fi împărțită în mai multe părți mai mici (matrici) și lucrată cu fiecare parte a imaginii în paralel.

Fir- curgere. Firele dintr-un singur bloc pot interacționa fie prin intermediul memoriei partajate, care, apropo, este mult mai rapidă decât memoria globală, fie prin instrumente de sincronizare a firelor.

Urzeală este o uniune de fire care interacționează între ele, pentru toate GPU-urile moderne dimensiunea Warp este de 32. Urmează jumătate urzeală, care este jumătate din urzeală, pentru că Accesul la memorie are loc de obicei separat pentru prima și a doua jumătate a warp-ului.

După cum puteți vedea, această arhitectură este excelentă pentru paralelizarea sarcinilor. Și deși programarea se realizează în limbajul C cu unele restricții, în realitate nu totul este atât de simplu, pentru că... nu totul poate fi paralelizat. De asemenea, nu există funcții standard pentru generarea de numere aleatoare (sau inițializare); toate acestea trebuie implementate separat. Și deși există o mulțime de opțiuni gata făcute, nimic din toate acestea nu aduce bucurie. Capacitatea de a folosi recursiunea a apărut relativ recent.

Pentru claritate, a fost scris un mic program de consolă (pentru a minimiza codul) care efectuează operațiuni cu două matrice de tip float, adică. cu valori non-întregi. Din motivele expuse mai sus, inițializarea (umplerea matricei cu diferite valori arbitrare) a fost efectuată de CPU. În continuare, au fost efectuate 25 de operații diferite cu elementele corespunzătoare din fiecare matrice, rezultatele intermediare au fost scrise în a treia matrice. Dimensiunea matricei s-a schimbat, rezultatele sunt următoarele:

Au fost efectuate în total 4 teste:

1024 de elemente în fiecare matrice:

Se vede clar că cu un număr atât de mic de elemente, calculul paralel este de puțin folos, deoarece Calculele în sine sunt mult mai rapide decât pregătirea lor.

4096 elemente în fiecare matrice:

Și acum puteți vedea că placa video efectuează operațiuni pe matrice de 3 ori mai rapid decât procesorul. Mai mult, timpul de execuție a acestui test pe placa video nu a crescut (o scădere ușoară a timpului poate fi atribuită unei erori).

Acum există 12288 de elemente în fiecare matrice:

Separarea plăcii video a crescut de 2 ori. Din nou, este de remarcat faptul că timpul de execuție pe placa video a crescut
nesemnificativ, dar pe procesor de mai mult de 3 ori, i.e. proporțional cu complexitatea sarcinii.

Și ultimul test este de 36864 de elemente în fiecare matrice:

În acest caz, accelerația atinge valori impresionante - de aproape 22 de ori mai rapid pe o placă video. Și din nou, timpul de execuție pe placa video a crescut ușor, dar pe procesor - necesarul de 3 ori, ceea ce este din nou proporțional cu complexitatea sarcinii.

Dacă continui să complici calculele, placa video câștigă din ce în ce mai mult. Deși exemplul este oarecum exagerat, situația generală arată clar. Dar, așa cum am menționat mai sus, nu totul poate fi paralelizat. De exemplu, calcularea Pi. Există doar exemple scrise folosind metoda Monte Carlo, dar precizia calculelor este de 7 zecimale, adică. plutitor obișnuit. Pentru a crește acuratețea calculelor, este necesară o aritmetică lungă și aici apar probleme, deoarece Este foarte, foarte dificil să implementezi acest lucru în mod eficient. Nu am putut găsi exemple pe Internet care să folosească CUDA și să calculeze Pi la 1 milion de zecimale. S-au încercat să scrie o astfel de aplicație, dar cea mai simplă și eficientă metodă de calcul al Pi este algoritmul Brent-Salamin sau formula Gauss. Cunoscutul SuperPI cel mai probabil (judecând după viteza de funcționare și numărul de iterații) folosește formula Gauss. Și, judecând după
Datorită faptului că SuperPI este cu un singur thread, a lipsei de exemple sub CUDA și a eșecului încercărilor mele, este imposibil să paralelizez efectiv numărarea Pi.

Apropo, puteți observa modul în care sarcina pe GPU crește în timpul calculelor, iar memoria este, de asemenea, alocată.

Acum să trecem la beneficiile mai practice ale CUDA, și anume programele existente în prezent care folosesc această tehnologie. În cea mai mare parte, acestea sunt tot felul de convertoare și editoare audio/video.

În testare au fost utilizate 3 fișiere video diferite:

      *Istoria realizării filmului Avatar - 1920x1080, MPEG4, h.264.
      *Seria „Minți-mă” - 1280x720, MPEG4, h.264.
      *Seria „It’s Always Sunny in Philadelphia” - 624x464, xvid.

Containerul și dimensiunea primelor două fișiere a fost .mkv și 1,55 GB, iar ultimul a fost .avi și 272 MB.

Să începem cu un produs foarte senzațional și popular - Badaboom. Versiunea folosita - 1.2.1.74 . Costul programului este $29.90 .

Interfața programului este simplă și intuitivă - în stânga selectăm fișierul sau discul sursă, iar în dreapta - dispozitivul necesar pentru care îl vom codifica. Există și un mod de utilizator în care parametrii sunt setați manual, ceea ce am folosit.

În primul rând, să ne uităm la cât de rapid și eficient este codificat videoclipul „în sine”, adică. aceeași rezoluție și aproximativ aceeași dimensiune. Vom măsura viteza în fps și nu în timpul scurs - în acest fel este mai convenabil să comparăm și să calculăm cât de mult va fi comprimat un videoclip de lungime arbitrară. Deoarece Astăzi luăm în considerare tehnologia „verde”, atunci graficele vor fi corespunzătoare -)

Viteza de codificare depinde direct de calitate, acest lucru este evident. Este de remarcat faptul că rezoluția luminii (să-i spunem în mod tradițional SD) nu este o problemă pentru Badaboom - viteza de codificare este de 5,5 ori mai mare decât rata de cadre video originală (24 fps). Și chiar și videoclipurile grele de 1080p sunt convertite de program în timp real. Este de remarcat faptul că calitatea videoclipului final este foarte apropiată de materialul video original, adică Badaboom codifică foarte, foarte eficient.

Dar de obicei transferă video la o rezoluție mai mică, să vedem cum stau lucrurile în acest mod. Pe măsură ce rezoluția a scăzut, a scăzut și rata de biți video. A fost 9500 kbps pentru fișierul de ieșire 1080p, 4100 kbps pentru 720p și 2400 kbps pentru 720x404. Alegerea a fost făcută pe baza unui raport rezonabil dimensiune/calitate.

Nu sunt necesare comentarii. Dacă faceți un rip de la 720p la calitate SD obișnuită, atunci transcodarea unui film care durează 2 ore va dura aproximativ 30 de minute. Și, în același timp, încărcarea procesorului va fi nesemnificativă, poți să-ți faci treaba fără a simți disconfort.

Ce se întâmplă dacă convertiți videoclipul într-un format pentru un dispozitiv mobil? Pentru a face acest lucru, selectați profilul iPhone (bitrate 1 Mbit/s, 480x320) și uitați-vă la viteza de codare:

Trebuie să spun ceva? Un film de două ore la calitate normală pentru iPhone este transcodat în mai puțin de 15 minute. Cu calitate HD este mai dificil, dar totuși foarte rapid. Principalul lucru este că calitatea videoclipului de ieșire rămâne la un nivel destul de ridicat atunci când este vizualizat pe un afișaj al telefonului.

În general, impresiile de la Badaboom sunt pozitive, viteza de operare este plăcută, iar interfața este simplă și clară. Au fost remediate tot felul de erori din versiunile anterioare (am folosit beta în 2008). Cu excepția unui singur lucru - calea către fișierul sursă, precum și către folderul în care este salvat videoclipul finalizat, nu ar trebui să conțină litere rusești. Dar în comparație cu avantajele programului, acest dezavantaj este nesemnificativ.

Următorul în rând vom avea Super LoiLoScope. Pentru versiunea obișnuită ei întreabă 3.280 de ruble, iar pentru versiunea touch, care acceptă controlul tactil în Windows 7, ei cer la fel de mult 4.440 de ruble. Să încercăm să ne dăm seama de ce dezvoltatorul dorește astfel de bani și de ce editorul video are nevoie de suport multitouch. Ultima versiune folosită - 1.8.3.3 .

Este destul de dificil să descrii interfața programului în cuvinte, așa că am decis să fac un scurt videoclip. Voi spune imediat că, la fel ca toate convertoarele video pentru CUDA, accelerarea GPU este acceptată numai pentru ieșirea video în MPEG4 cu codecul h.264.

În timpul codificării, sarcina procesorului este de 100%, dar acest lucru nu provoacă disconfort. Browserul și alte aplicații ușoare nu încetinesc.

Acum să trecem la performanță. Pentru început, totul este la fel ca și cu Badaboom - transcodând videoclipul într-unul similar în calitate.

Rezultatele sunt mult mai bune decât Badaboom. Calitatea este si ea excelenta, diferenta fata de original se observa doar prin compararea ramelor in perechi sub lupa.

Uau, aici LoiloScope îl depășește pe Badaboom de 2,5 ori. În același timp, puteți tăia și codifica cu ușurință un alt videoclip în paralel, să citiți știri și chiar să vizionați filme și chiar și FullHD se redă fără probleme, deși încărcarea procesorului este maximă.

Acum să încercăm să facem un videoclip pentru un dispozitiv mobil, să numim profilul la fel cum a fost numit în Badaboom - iPhone (480x320, 1 Mbit/s):

Nu există nicio eroare. Totul a fost reverificat de mai multe ori, de fiecare dată rezultatul a fost același. Cel mai probabil, acest lucru se întâmplă din simplul motiv că fișierul SD a fost înregistrat cu un codec diferit și într-un container diferit. La transcodare, videoclipul este mai întâi decodat, împărțit în matrice de o anumită dimensiune și comprimat. Decodorul ASP folosit în cazul xvid este mai lent decât AVC (pentru h.264) când se decodează în paralel. Cu toate acestea, 192 fps este de 8 ori mai rapidă decât viteza videoclipului original; o serie de 23 de minute este comprimată în mai puțin de 4 minute. Situația s-a repetat cu alte fișiere comprimate în xvid/DivX.

LoiloScope Am lăsat doar impresii plăcute - interfața, în ciuda caracterului său neobișnuit, este convenabilă și funcțională, iar viteza de funcționare este dincolo de laudă. Funcționalitatea relativ slabă este oarecum dezamăgitoare, dar adesea, cu o instalare simplă, trebuie doar să ajustați ușor culorile, să faceți tranziții netede, să adăugați text, iar LoiloScope face o treabă excelentă cu aceasta. Prețul este, de asemenea, oarecum înspăimântător - mai mult de 100 de dolari pentru versiunea obișnuită este normal pentru țările străine, dar astfel de cifre ni se par încă puțin sălbatice. Deși, recunosc că, dacă eu, de exemplu, am filmat și editat des videoclipuri acasă, s-ar putea să mă fi gândit să-l cumpăr. Totodată, apropo, am verificat posibilitatea de a edita conținut HD (sau mai bine zis AVCHD) direct de pe o cameră video fără a converti mai întâi într-un alt format; LoiloScope nu a dezvăluit probleme cu fișiere precum .mts.

Noua tehnologie este ca o specie evolutivă recent în curs de dezvoltare. O creatură ciudată, spre deosebire de mulți bătrâni. Uneori ciudat, alteori amuzant. Și la început noile sale calități nu par deloc potrivite pentru această lume stabilă și stabilă.

Cu toate acestea, trece puțin timp și se dovedește că începătorul aleargă mai repede, sare mai sus și este în general mai puternic. Și mănâncă mai multe muște decât vecinii săi retrograd. Și atunci aceiași vecini încep să înțeleagă că nu are rost să se ceartă cu acest fost stângaci. Este mai bine să fii prieten cu el și chiar mai bine să organizezi o simbioză. Vei vedea că vor fi mai multe muște.

Tehnologia GPGPU (General-Purpose Graphics Processing Units - procesor grafic de uz general) a existat multă vreme doar în calculele teoretice ale academicilor inteligenți. Cum altfel? A propune schimbarea radicală a procesului de calcul care s-a dezvoltat de-a lungul deceniilor, încredințând calculul ramurilor sale paralele unei plăci video - doar teoreticienii sunt capabili de acest lucru.

Logo-ul tehnologiei CUDA ne amintește că a crescut în adâncul
Grafică 3D.

Dar tehnologia GPGPU nu avea de gând să adune praf pentru mult timp pe paginile revistelor universitare. După ce a pufnit penele celor mai bune calități ale sale, ea a atras atenția producătorilor. Așa s-a născut CUDA - o implementare a GPGPU pe procesoarele grafice GeForce produse de nVidia.

Datorită CUDA, tehnologiile GPGPU au devenit mainstream. Și acum doar cel mai miop și acoperit cu un strat gros de lene dezvoltator de sisteme de programare nu declară suport pentru CUDA cu produsul lor. Publicațiile IT au considerat că este o onoare să prezinte detaliile tehnologiei în numeroase articole de știință populare, iar concurenții s-au așezat imediat cu modele și compilatoare încrucișate pentru a dezvolta ceva similar.

Recunoașterea publică este un vis nu numai pentru starletele care aspiră, ci și pentru tehnologiile nou-născute. Și CUDA a fost norocos. Este cunoscută, se vorbesc și se scriu despre ea.

Ei doar scriu de parcă ar continua să discute despre GPGPU în reviste științifice groase. Ei bombardează cititorul cu o grămadă de termeni precum „grilă”, „SIMD”, „urzeală”, „gazdă”, „textură și memorie constantă”. Îl cufundă până în vârf în diagramele de organizare ale GPU-urilor nVidia, îl conduc pe trasee sinuoase ale algoritmilor paraleli și (cea mai puternică mișcare) arată liste lungi de coduri în limbajul C. Ca urmare, se dovedește că la intrarea articolului avem un cititor proaspăt cu o dorință arzătoare de a înțelege CUDA, iar la ieșire avem același cititor, dar cu capul umflat plin de o mizerie de fapte, diagrame. , cod, algoritmi și termeni.

Între timp, scopul oricărei tehnologii este de a ne ușura viața. Și CUDA face o treabă grozavă cu asta. Rezultatele muncii ei sunt cele care vor convinge orice sceptic mai bine decât sute de scheme și algoritmi.

Nu peste tot

CUDA este susținut de supercalculatoare de înaltă performanță
nVidia Tesla.

Și totuși, înainte de a analiza rezultatele muncii CUDA în domeniul ușurării vieții utilizatorului obișnuit, merită să înțelegem toate limitările sale. Exact ca la un geniu: orice dorință, dar una. CUDA are și tocuri lui Ahile. Una dintre ele este limitările platformelor pe care poate funcționa.

Lista plăcilor video nVidia care acceptă CUDA este prezentată într-o listă specială numită Produse activate CUDA. Lista este destul de impresionantă, dar ușor de clasificat. Suportul CUDA nu este refuzat:

    Modelele nVidia GeForce din seria 8, 9, 100, 200 și 400 cu un minim de 256 de megaocteți de memorie video la bord. Suportul se extinde atât la cardurile desktop, cât și la cele mobile.

    Marea majoritate a plăcilor video desktop și mobile sunt nVidia Quadro.

    Toate soluțiile din seria de netbook-uri nvidia ION.

    Soluții de supercomputer HPC (High Performance Computing) de înaltă performanță și nVidia Tesla utilizate atât pentru calcularea personală, cât și pentru organizarea sistemelor de cluster scalabile.

Prin urmare, înainte de a utiliza produse software bazate pe CUDA, merită să verificați această listă de favorite.

Pe lângă placa video în sine, este necesar un driver adecvat pentru a suporta CUDA. Este legătura dintre procesoarele centrale și cele grafice, acționând ca un fel de interfață software pentru accesarea codului programului și a datelor la comoara multi-core a GPU-ului. Pentru a vă asigura că nu faceți o greșeală, nVidia recomandă să vizitați pagina de drivere și să obțineți cea mai recentă versiune.

...dar procesul în sine

Cum funcționează CUDA? Cum să explic procesul complex de calcul paralel pe o arhitectură hardware specială a GPU fără a arunca cititorul în abisul termenilor specifici?

Puteți încerca să faceți acest lucru imaginându-vă modul în care procesorul central execută programul în simbioză cu procesorul grafic.

Din punct de vedere arhitectural, unitatea centrală de procesare (CPU) și omologul său grafic (GPU) sunt proiectate diferit. Dacă facem o analogie cu lumea industriei auto, atunci CPU-ul este un break, unul dintre acelea care se numește „hambar”. Arată ca o mașină de pasageri, dar în același timp (din punctul de vedere al dezvoltatorilor) „este un elvețian, un secerător și un jucător pe țeavă”. Îndeplinește rolul unui camion mic, autobuz și hatchback hipertrofiat în același timp. break, pe scurt. Are puține miezuri de cilindru, dar se ocupă de aproape orice sarcină, iar memoria cache impresionantă este capabilă să stocheze o mulțime de date.

Dar GPU-ul este o mașină sport. Există o singură funcție: de a livra pilotul la linia de sosire cât mai repede posibil. Prin urmare, fără memorie mare în portbagaj, fără locuri suplimentare. Dar există de sute de ori mai multe miezuri de cilindru decât procesorul.

Datorită CUDA, dezvoltatorii de programe GPGPU nu trebuie să se aprofundeze în complexitatea programării
dezvoltare pentru motoare grafice precum DirectX și OpenGL

Spre deosebire de procesorul central, care este capabil să rezolve orice sarcină, inclusiv grafică, dar cu performanțe medii, procesorul grafic este adaptat la o soluție de mare viteză a unei singure sarcini: transformarea unui grup de poligoane la intrare într-o grămadă de pixeli la ieșirea. Mai mult, această problemă poate fi rezolvată în paralel folosind sute de nuclee de calcul relativ simple în GPU.

Deci, ce fel de tandem poate exista de la un break și o mașină sport? CUDA funcționează cam așa: programul rulează pe CPU până când există o secțiune de cod care poate fi executată în paralel. Apoi, în loc să fie executat încet pe două (sau chiar opt) nuclee ale celui mai tare procesor, este transferat pe sute de nuclee GPU. În același timp, timpul de execuție al acestei secțiuni este redus semnificativ, ceea ce înseamnă că se reduce și timpul de execuție al întregului program.

Din punct de vedere tehnologic, nu se schimbă nimic pentru programator. Codul programelor CUDA este scris în limbaj C. Mai exact, în dialectul său special „C cu râuri” (C cu râuri). Dezvoltată la Stanford, această extensie a limbajului C se numește Brook. Interfața care transferă codul Brook către GPU este driverul unei plăci video care acceptă CUDA. Acesta organizează întregul proces de procesare al acestei secțiuni a programului, astfel încât pentru programator GPU-ul să arate ca un coprocesor CPU. Foarte similar cu utilizarea unui coprocesor matematic în primele zile ale calculului personal. Odată cu apariția Brook, plăci video cu suport CUDA și drivere pentru acestea, orice programator a devenit capabil să acceseze GPU-ul în programele sale. Dar, înainte, acest șamanism era deținut de un cerc restrâns de oameni selecționați care au petrecut ani de zile perfecționând tehnici de programare pentru motoarele grafice DirectX sau OpenGL.

În butoiul acestei mieri pretențioase - laudele lui CUDA - merită să pui o muscă în unguent, adică restricții. Nu orice problemă care trebuie programată poate fi rezolvată folosind CUDA. Nu va fi posibil să accelerați rezolvarea sarcinilor de rutină de birou, dar puteți avea încredere în CUDA pentru a calcula comportamentul a mii de luptători de același tip în World of Warcraft. Dar aceasta este o sarcină inventată. Să ne uităm la exemple de ceea ce CUDA rezolvă deja foarte eficient.

Lucrări drepte

CUDA este o tehnologie foarte pragmatică. După ce și-a implementat suportul în plăcile sale video, nVidia se aștepta pe bună dreptate ca bannerul CUDA să fie preluat de mulți pasionați atât în ​​mediul universitar, cât și în comerț. Și așa s-a întâmplat. Proiectele bazate pe CUDA trăiesc și aduc beneficii.

NVIDIA PhysX

Atunci când își fac publicitate următoarea capodopera de jocuri, producătorii subliniază adesea realismul 3D. Dar oricât de reală ar fi lumea jocului 3D, dacă legile elementare ale fizicii, cum ar fi gravitația, frecarea și hidrodinamica, sunt implementate incorect, falsitatea se va simți instantaneu.

Una dintre capacitățile motorului de fizică NVIDIA PhysX este lucrul realist cu țesuturi.

Implementarea algoritmilor pentru simularea pe calculator a legilor fizice de bază este o sarcină foarte intensivă în muncă. Cele mai cunoscute companii din acest domeniu sunt compania irlandeză Havok cu Havok Physics fizică multiplatformă și Ageia californiană - precursorul primului procesor fizic din lume (PPU - Physics Processing Unit) și motorul fizic PhysX corespunzător. Primul dintre ele, deși achiziționat de Intel, lucrează acum activ în domeniul optimizării motorului Havok pentru plăcile video ATI și procesoarele AMD. Dar Ageia cu motorul său PhysX a devenit parte a nVidia. În același timp, nVidia a rezolvat problema destul de dificilă a adaptării PhysX la tehnologia CUDA.

Acest lucru a devenit posibil datorită statisticilor. S-a dovedit statistic că, indiferent cât de complexă este redarea unui GPU, unele dintre nucleele sale sunt încă inactive. Pe aceste nuclee rulează motorul PhysX.

Datorită CUDA, cea mai mare parte a calculelor legate de fizica lumii jocurilor a început să fie efectuată pe placa video. Puterea eliberată a procesorului central a fost folosită pentru a rezolva alte probleme de joc. Rezultatul nu a întârziat să apară. Potrivit experților, câștigul de performanță în joc cu PhysX care rulează pe CUDA a crescut cu cel puțin un ordin de mărime. Probabilitatea realizării legilor fizice a crescut, de asemenea. CUDA se ocupă de calculul de rutină al implementării frecării, gravitației și a altor lucruri familiare nouă pentru obiectele multidimensionale. Acum, nu numai eroii și echipamentul lor se încadrează perfect în legile lumii fizice cu care suntem familiarizați, ci și praf, ceață, val de explozie, flacără și apă.

Versiunea CUDA a pachetului de compresie a texturii NVIDIA Texture Tools 2

Îți plac obiectele realiste din jocurile moderne? Merită să le mulțumim dezvoltatorilor de texturi. Dar cu cât există mai multă realitate în textură, cu atât este mai mare volumul acesteia. Cu atât ocupă mai multă memorie prețioasă. Pentru a evita acest lucru, texturile sunt pre-comprimate și decomprimate dinamic după cum este necesar. Iar compresia și decompresia sunt calcule pure. Pentru a lucra cu texturi, nVidia a lansat pachetul NVIDIA Texture Tools. Acceptă compresia și decompresia eficientă a texturilor DirectX (așa-numitul format HF). A doua versiune a acestui pachet se laudă cu suport pentru algoritmii de compresie BC4 și BC5 implementați în tehnologia DirectX 11. Dar principalul lucru este că NVIDIA Texture Tools 2 include suport CUDA. Potrivit nVidia, acest lucru oferă o creștere de 12 ori a performanței în sarcinile de compresie și decompresie a texturii. Aceasta înseamnă că cadrele de joc se vor încărca mai repede și vor încânta jucătorul cu realismul lor.

Pachetul NVIDIA Texture Tools 2 este proiectat să funcționeze cu CUDA. Câștigul de performanță la comprimarea și decomprimarea texturilor este evident.

Utilizarea CUDA poate îmbunătăți semnificativ eficiența supravegherii video.

Procesare în timp real a fluxului video

Orice s-ar putea spune, lumea actuală, din punctul de vedere al spionajului, este mult mai aproape de lumea Fratelui Mare al lui Orwell decât pare. Atât șoferii de mașini, cât și vizitatorii locurilor publice simt privirea camerelor video.

Râuri pline de informații video curg în centrele procesării sale și... se lovesc de o legătură îngustă - o persoană. În cele mai multe cazuri, el este ultima autoritate care monitorizează lumea video. Mai mult, autoritatea nu este cea mai eficientă. Clipește, este distras și încearcă să adoarmă.

Datorită CUDA, a devenit posibilă implementarea algoritmilor pentru urmărirea simultană a mai multor obiecte într-un flux video. În acest caz, procesul are loc în timp real, iar videoclipul este plin de 30 fps. În comparație cu implementarea unui astfel de algoritm pe procesoarele moderne multi-core, CUDA oferă o creștere de două sau trei ori a performanței, iar acest lucru, vedeți, este destul de mult.

Conversie video, filtrare audio

Convertorul video Badaboom este primul care folosește CUDA pentru a accelera conversia.

Este plăcut să vizionezi un nou produs de închiriere video la calitate FullHD și pe un ecran mare. Dar nu poți lua cu tine un ecran mare pe drum, iar codecul video FullHD va sughița procesorul cu putere redusă al unui gadget mobil. Conversia vine în ajutor. Dar cei mai mulți dintre cei care l-au întâlnit în practică se plâng de timpul lung de conversie. Acest lucru este de înțeles, procesul este de rutină, potrivit pentru paralelizare, iar execuția lui pe CPU nu este foarte optimă.

Dar CUDA se descurcă cu el. Primul semn este convertorul Badaboom de la Elevental. Dezvoltatorii Badaboom au luat decizia corectă atunci când au ales CUDA. Testele arată că convertește un film standard de oră și jumătate în format iPhone/iPod Touch în mai puțin de douăzeci de minute. Și asta în ciuda faptului că atunci când utilizați doar procesorul, acest proces durează mai mult de o oră.

Ajută CUDA și iubitorii de muzică profesioniști. Oricare dintre ele ar oferi o jumătate de regn pentru un crossover FIR eficient - un set de filtre care împart spectrul de sunet în mai multe benzi. Acest proces necesită multă muncă și, cu un volum mare de material audio, îl obligă pe inginerul de sunet să facă „fum” timp de câteva ore. Implementarea unui crossover FIR bazat pe CUDA îi accelerează funcționarea de sute de ori.

CUDA Viitorul

După ce tehnologia GPGPU devine realitate, CUDA nu se odihnește pe lauri. Așa cum se întâmplă peste tot, principiul reflectării funcționează în CUDA: acum nu doar arhitectura procesoarelor video nVidia influențează dezvoltarea versiunilor CUDA SDK, ci tehnologia CUDA însăși obligă nVidia să reconsidere arhitectura cipurilor sale. Un exemplu de astfel de reflecție este platforma nVidia ION. A doua versiune este optimizată special pentru rezolvarea problemelor CUDA. Aceasta înseamnă că, chiar și în soluțiile hardware relativ ieftine, consumatorii vor primi toată puterea și capabilitățile strălucitoare ale CUDA.

Și este conceput pentru a traduce codul gazdă (principal, codul de control) și codul dispozitivului (codul hardware) (fișiere cu extensia .cu) în fișiere obiect adecvate procesului de asamblare a programului sau bibliotecii finale în orice mediu de programare, de exemplu în NetBeans.

Arhitectura CUDA utilizează un model de memorie grilă, modelarea firelor de cluster și instrucțiuni SIMD. Aplicabil nu numai pentru calculul grafic de înaltă performanță, ci și pentru diferite calcule științifice folosind plăcile video nVidia. Oamenii de știință și cercetătorii folosesc pe scară largă CUDA într-o varietate de domenii, inclusiv astrofizică, biologie și chimie computațională, modelare dinamică a fluidelor, interacțiuni electromagnetice, tomografie computerizată, analiză seismică și multe altele. CUDA are capacitatea de a se conecta la aplicații folosind OpenGL și Direct3D. CUDA este un software multiplatform pentru sisteme de operare precum Linux, Mac OS X și Windows.

Pe 22 martie 2010, nVidia a lansat CUDA Toolkit 3.0, care conținea suport pentru OpenCL.

Echipamente

Platforma CUDA a apărut pentru prima dată pe piață odată cu lansarea cipului NVIDIA G80 de generația a opta și a devenit prezentă în toate seriile ulterioare de cipuri grafice, care sunt utilizate în familiile de acceleratoare GeForce, Quadro și NVidia Tesla.

Prima serie de hardware care suportă SDK-ul CUDA, G8x, avea un procesor vectorial cu precizie simplă pe 32 de biți, folosind SDK-ul CUDA ca API (CUDA acceptă tipul dublu C, dar precizia sa a fost acum redusă la 32 de biți punctul de plutire). Procesoarele GT200 ulterioare au suport pentru precizie de 64 de biți (numai SFU), dar performanța este semnificativ mai slabă decât pentru precizia de 32 de biți (datorită faptului că există doar două SFU-uri pe multiprocesor de flux, în timp ce există opt procesoare scalare). GPU-ul organizează multithreading hardware, ceea ce vă permite să utilizați toate resursele GPU-ului. Astfel, se deschide perspectiva de a transfera funcțiile acceleratorului fizic către acceleratorul grafic (un exemplu de implementare este nVidia PhysX). De asemenea, deschide posibilități largi de utilizare a hardware-ului de grafică pe computer pentru a efectua calcule complexe non-grafice: de exemplu, în biologia computațională și în alte ramuri ale științei.

Avantaje

În comparație cu abordarea tradițională de organizare a calculului de uz general prin API-uri grafice, arhitectura CUDA are următoarele avantaje în acest domeniu:

Restricții

  • Toate funcțiile executabile pe dispozitiv nu acceptă recursiunea (CUDA Toolkit 3.1 acceptă pointeri și recursivitate) și au alte limitări

GPU-uri și acceleratoare grafice acceptate

Lista dispozitivelor de la producătorul de echipamente Nvidia cu suport deplin declarat pentru tehnologia CUDA este furnizată pe site-ul oficial Nvidia: Produse GPU CUDA-Enabled (engleză).

De fapt, următoarele periferice suportă în prezent tehnologia CUDA pe piața hardware pentru PC:

Versiune specificație GPU Plăci video
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/4700, 17/18/4700x, 4700x /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 (GF15480,TX GTX GTX 5480, TX GTX 7000, 6000, 6000) 590
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, GEFORCE GTX T 650m, GeForce GT 645M, GeForce GT 640M
3.5 GK110
Nvidia GeForce pentru computere desktop
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 pentru computere mobile
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 pentru computere desktop
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 Low Profile
Quadro FX 370
Quadro FX 370 Low Profile
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 pentru computere mobile
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
  • Modelele Tesla C1060, Tesla S1070, Tesla C2050/C2070, Tesla M2050/M2070, Tesla S2050 permit calcule GPU cu dublă precizie.

Caracteristici și specificații ale diferitelor versiuni

Suport pentru funcții (funcțiile nelistate sunt
acceptat pentru toate capabilitățile de calcul)
Capacitate de calcul (versiune)
1.0 1.1 1.2 1.3 2.x

Cuvinte de 32 de biți în memoria globală
Nu da

valori în virgulă mobilă în memoria globală
Funcții atomice întregi care operează
Cuvinte pe 32 de biți în memoria partajată
Nu da
atomicExch() funcționează pe 32 de biți
valori în virgulă mobilă în memoria partajată
Funcții atomice întregi care operează
Cuvinte pe 64 de biți în memoria globală
Funcții de vot Warp
Operații în virgulă mobilă cu dublă precizie Nu da
Funcții atomice care funcționează pe 64 de biți
valori întregi în memoria partajată
Nu da
Adunarea atomică în virgulă mobilă funcționează
Cuvinte pe 32 de biți în memorie globală și partajată
_vot()
_sistem_threadfence()
_syncthreads_count(),
_syncthreads_and(),
_syncthreads_or()
Funcții de suprafață
Grilă 3D de bloc de filet
Specificatii tehnice Capacitate de calcul (versiune)
1.0 1.1 1.2 1.3 2.x
Dimensiunea maximă a rețelei blocurilor de filet 2 3
Dimensiunea maximă x, y sau z a unei rețele de blocuri de filet 65535
Dimensiunea maximă a blocului de filet 3
Dimensiunea maximă x sau y a unui bloc 512 1024
Dimensiunea z maximă a unui bloc 64
Numărul maxim de fire pe bloc 512 1024
Dimensiunea urzelii 32
Numărul maxim de blocuri rezidente per multiprocesor 8
Numărul maxim de warps rezidenți per multiprocesor 24 32 48
Numărul maxim de fire rezidente per multiprocesor 768 1024 1536
Numărul de registre pe 32 de biți per multiprocesor 8K 16K 32 K
Cantitatea maximă de memorie partajată per multiprocesor 16 KB 48 KB
Numărul de bănci de memorie partajată 16 32
Cantitatea de memorie locală per fir 16 KB 512 KB
Dimensiunea memoriei constantă 64 KB
Set de lucru cache per multiprocesor pentru memorie constantă 8 KB
Set de lucru cache per multiprocesor pentru memoria texturii În funcție de dispozitiv, între 6 KB și 8 KB
Lățimea maximă pentru textura 1D
8192 32768
Lățimea maximă pentru textura 1D
referință legată de memoria liniară
2 27
Lățimea maximă și numărul de straturi
pentru o referință de textură stratificată 1D
8192 x 512 16384 x 2048
Lățimea și înălțimea maximă pentru 2D
referință de textură legată de
memorie liniară sau o matrice CUDA
65536 x 32768 65536 x 65535
Lățimea, înălțimea și numărul maxim
de straturi pentru o referință de textură stratificată 2D
8192 x 8192 x 512 16384 x 16384 x 2048
Latime, inaltime si adancime maxime
pentru o referință de textură 3D legată la liniar
memorie sau o matrice CUDA
2048 x 2048 x 2048
Număr maxim de texturi care
poate fi legat de un nucleu
128
Lățimea maximă pentru o suprafață 1D
referință legată de o matrice CUDA
Nu
sprijinit
8192
Lățimea și înălțimea maximă pentru un 2D
referință de suprafață legată la o matrice CUDA
8192 x 8192
Numar maxim de suprafete care
poate fi legat de un nucleu
8
Numărul maxim de instrucțiuni per
nucleu
2 milioane

Exemplu

CudaArray* cu_array; textură< float , 2 >tex; // Alocați matrice cudaMalloc( & cu_array, cudaCreateChannelDesc< float>(), latime inaltime) ; // Copiați datele imaginii în matrice cudaMemcpy( cu_array, imagine, width* height, cudaMemcpyHostToDevice) ; // Legați matricea la textură cudaBindTexture( tex, cu_array) ; // Rulați nucleul dim3 blockDim(16, 16, 1) ; dim3 gridDim(lățime / blocDim.x, înălțime / blocDim.y, 1) ; nucleu<<< gridDim, blockDim, 0 >>> (d_odata, latime, inaltime) ; cudaUnbindTexture(tex) ; __global__ void kernel(float * odata, int înălțime, int lățime) ( unsigned int x = blockIdx.x * blockDim.x + threadIdx.x ; unsigned int y = blockIdx.y * blockDim.y + threadIdx.y ; float c = textfetch(tex, x, y) ; odata[ y* width+ x] = c; )

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

CUDA ca subiect în universități

În decembrie 2009, modelul software CUDA este predat în 269 de universități din întreaga lume. În Rusia, cursurile de formare despre CUDA sunt susținute la Universitatea Politehnică din Sankt Petersburg, Universitatea de Stat din Yaroslavl. P. G. Demidov, Moscova, Nijni Novgorod, Sankt Petersburg, Tver, Kazan, Novosibirsk, Universitatea Tehnică de Stat Novosibirsk, Universitățile de Stat Omsk și Perm, Universitatea Internațională a Naturii Societății și Man „Dubna”, Universitatea de Stat de Energie Ivanovo, Universitatea de Stat Belgorod , MSTU-i. Bauman, Universitatea Tehnică Chimică Rusă numită după. Mendeleev, Centrul Interregional de Supercomputer RAS, . În plus, în decembrie 2009, a fost anunțat că a început să funcționeze primul centru științific și educațional rus „Parallel Computing”, situat în orașul Dubna, ale cărui sarcini includ instruire și consultări privind rezolvarea problemelor complexe de calcul pe GPU-uri.

În Ucraina, cursurile despre CUDA sunt predate la Institutul de Analiză de Sistem din Kiev.

Legături

Resurse oficiale

  • Zona CUDA (rusă) - site-ul oficial CUDA
  • CUDA GPU Computing (engleză) - forumuri web oficiale dedicate calculului CUDA

Resurse neoficiale

Hardware-ul lui Tom
  • Dmitri Cekanov. nVidia CUDA: calcul pe o placă video sau moartea procesorului? . Tom's Hardware (22 iunie 2008).Arhivat
  • Dmitri Cekanov. nVidia CUDA: Benchmarking aplicații GPU pentru piața de masă. Tom's Hardware (19 mai 2009). Arhivat din original pe 4 martie 2012. Consultat la 19 mai 2009.
iXBT.com
  • Alexey Berillo. NVIDIA CUDA - calcul non-grafic pe GPU-uri. Partea 1 . iXBT.com (23 septembrie 2008). Arhivat din original pe 4 martie 2012. Consultat la 20 ianuarie 2009.
  • Alexey Berillo. NVIDIA CUDA - calcul non-grafic pe GPU-uri. Partea 2 . iXBT.com (22 octombrie 2008). - Exemple de implementare a NVIDIA CUDA. Arhivat din original pe 4 martie 2012. Consultat la 20 ianuarie 2009.
Alte resurse
  • Boreskov Alexey Viktorovici. Bazele CUDA (20 ianuarie 2009). Arhivat din original pe 4 martie 2012. Consultat la 20 ianuarie 2009.
  • Vladimir Frolov. Introducere în tehnologia CUDA. Revista online „Computer Graphics and Multimedia” (19 decembrie 2008). Arhivat din original pe 4 martie 2012. Consultat la 28 octombrie 2009.
  • Igor Oskolkov. NVIDIA CUDA este un bilet accesibil în lumea computerelor mari. Computerra (30 aprilie 2009). Preluat la 3 mai 2009.
  • Vladimir Frolov. Introducere în Tehnologia CUDA (1 august 2009). Arhivat din original pe 4 martie 2012. Consultat la 3 aprilie 2010.
  • GPGPU.ru. Utilizarea plăcilor video pentru calcul
  • . Centrul de calcul paralel

Note

Vezi si

În dezvoltarea procesoarelor moderne, există o tendință spre o creștere treptată a numărului de nuclee, ceea ce le crește capacitățile în calculul paralel. Cu toate acestea, GPU-urile sunt disponibile de mult timp, care sunt semnificativ superioare CPU-urilor în acest sens. Și aceste capacități ale GPU-urilor au fost deja luate în considerare de unele companii. Primele încercări de utilizare a acceleratoarelor grafice pentru calcularea non-țintă au fost făcute încă de la sfârșitul anilor 90. Dar doar apariția shader-urilor a devenit impulsul dezvoltării unei tehnologii complet noi, iar în 2003 a apărut conceptul de GPGPU (Unități de procesare grafică de uz general). Un rol important în dezvoltarea acestei inițiative l-a jucat BrookGPU, care este o extensie specială pentru limbajul C. Înainte de apariția BrookGPU, programatorii puteau lucra cu GPU-uri doar prin intermediul API-ului Direct3D sau OpenGL. Brook a permis dezvoltatorilor să lucreze cu un mediu familiar, iar compilatorul însuși, folosind biblioteci speciale, a implementat interacțiunea cu GPU-ul la un nivel scăzut.

Un astfel de progres nu a putut să nu atragă atenția liderilor acestei industrii - AMD și NVIDIA, care au început să dezvolte propriile platforme software pentru calcul non-grafic pe plăcile lor video. Nimeni nu cunoaște mai bine decât dezvoltatorii GPU toate nuanțele și caracteristicile produselor lor, ceea ce permite acestor companii să optimizeze pachetul software pentru soluții hardware specifice cât mai eficient posibil. În prezent, NVIDIA dezvoltă platforma CUDA (Compute Unified Device Architecture); AMD numește o tehnologie similară CTM (Close To Metal) sau AMD Stream Computing. Ne vom uita la unele dintre capacitățile CUDA și vom evalua în practică capacitățile de calcul ale cipului grafic G92 al plăcii video GeForce 8800 GT.

Dar mai întâi, să ne uităm la unele dintre nuanțele efectuării calculelor folosind GPU-uri. Principalul lor avantaj este că cipul grafic este proiectat inițial pentru a executa mai multe fire, în timp ce fiecare nucleu al unui procesor convențional execută un flux de instrucțiuni secvențiale. Orice GPU modern este un multiprocesor format din mai multe clustere de calcul, cu multe ALU-uri în fiecare. Cel mai puternic cip GT200 modern este format din 10 astfel de clustere, fiecare dintre ele având 24 de procesoare de flux. Placa video GeForce 8800 GT testată bazată pe cipul G92 are șapte unități de calcul mari cu 16 procesoare de flux fiecare. CPU-urile folosesc blocuri SIMD SSE pentru calcule vectoriale (o singură instrucțiune date multiple - o instrucțiune este executată pe date multiple), ceea ce necesită transformarea datelor în 4 vectori. GPU-ul procesează firele de execuție scalar, de exemplu. o instrucțiune este aplicată peste mai multe fire (SIMT - single instruction multiple threads). Acest lucru scutește dezvoltatorii de a converti datele în vectori și permite ramificarea arbitrară în fluxuri. Fiecare unitate de calcul GPU are acces direct la memorie. Și lățimea de bandă a memoriei video este mai mare, datorită utilizării mai multor controlere de memorie separate (pe G200 de top sunt 8 canale pe 64 de biți) și frecvențe de operare înalte.

În general, în anumite sarcini atunci când lucrați cu cantități mari de date, GPU-urile sunt mult mai rapide decât procesoarele. Mai jos vedeți o ilustrare a acestei afirmații:


Graficul arată dinamica creșterii performanței CPU și GPU începând cu 2003. NVIDIA îi place să citeze aceste date ca reclame în documentele sale, dar sunt doar calcule teoretice și, în realitate, decalajul, desigur, se poate dovedi a fi mult mai mic.

Dar oricum ar fi, există un potențial uriaș al GPU-urilor care pot fi utilizate și care necesită o abordare specifică a dezvoltării software. Toate acestea sunt implementate în mediul hardware și software CUDA, care constă din mai multe niveluri software - API-ul CUDA Runtime de nivel înalt și API-ul CUDA Driver de nivel scăzut.


CUDA folosește limbajul standard C pentru programare, care este unul dintre principalele sale avantaje pentru dezvoltatori. Inițial, CUDA include bibliotecile BLAS (pachetul de algebră liniară de bază) și FFT (transformată Fourier). CUDA are, de asemenea, capacitatea de a interacționa cu API-urile grafice OpenGL sau DirectX, capacitatea de a se dezvolta la un nivel scăzut și se caracterizează printr-o distribuție optimizată a fluxurilor de date între CPU și GPU. Calculele CUDA sunt efectuate simultan cu cele grafice, spre deosebire de platforma similară AMD, unde este lansată o mașină virtuală specială pentru calcule pe GPU. Dar o astfel de „coabitare” este, de asemenea, plină de erori dacă API-ul grafic creează o încărcare mare în timp ce CUDA rulează simultan - la urma urmei, operațiunile grafice au încă o prioritate mai mare. Platforma este compatibilă cu sistemele de operare pe 32 și 64 de biți Windows XP, Windows Vista, MacOS X și diferite versiuni de Linux. Platforma este deschisă și pe site, pe lângă driverele speciale pentru placa video, puteți descărca pachete software CUDA Toolkit, CUDA Developer SDK, inclusiv compilator, depanator, biblioteci standard și documentație.

În ceea ce privește implementarea practică a CUDA, multă vreme această tehnologie a fost folosită doar pentru calcule matematice de înaltă specializare în domeniul fizicii particulelor, astrofizicii, medicinei sau prognozării schimbărilor de pe piața financiară etc. Dar această tehnologie se apropie treptat de utilizatorii obișnuiți, în special, apar plug-in-uri speciale pentru Photoshop care pot folosi puterea de calcul a GPU-ului. Pe o pagină specială puteți studia întreaga listă de programe care folosesc capabilitățile NVIDIA CUDA.

Ca test practic al noii tehnologii de pe placa video MSI NX8800GT-T2D256E-OC vom folosi programul TMPGEnc. Acest produs este comercial (versiunea completă costă 100 USD), dar pentru plăcile video MSI vine ca bonus într-o versiune de probă pentru o perioadă de 30 de zile. Puteți descărca această versiune de pe site-ul dezvoltatorului, dar pentru a instala TMPGEnc 4.0 XPress MSI Special Edition aveți nevoie de discul original cu drivere de pe cardul MSI - fără el, programul nu va fi instalat.

Pentru a afișa cele mai complete informații despre capabilitățile de calcul din CUDA și pentru a le compara cu alte adaptoare video, puteți utiliza utilitarul special CUDA-Z. Acestea sunt informațiile pe care le oferă despre placa noastră video GeForce 8800GT:




În comparație cu modelele de referință, copia noastră funcționează la frecvențe mai mari: domeniul raster este cu 63 MHz mai mare decât cel nominal, iar unitățile shader sunt mai rapide cu 174 MHz, iar memoria este cu 100 MHz mai rapidă.

Vom compara viteza de conversie a aceluiași videoclip HD atunci când calculăm numai folosind CPU și cu activarea suplimentară a CUDA în programul TMPGEnc pe următoarea configurație:

  • Procesor: Pentium Dual-Core E5200 2,5 GHz;
  • Placa de baza: Gigabyte P35-S3;
  • Memorie: 2x1GB GoodRam PC6400 (5-5-5-18-2T)
  • Placa video: MSI NX8800GT-T2D256E-OC;
  • Hard disk: WD3200AAKS de 320 GB;
  • Alimentare: CoolerMaster eXtreme Power 500-PCAP;
  • Sistem de operare: Windows XP SP2;
  • TMPGEnc 4.0 XPress 4.6.3.268;
  • Drivere pentru placa video: ForceWare 180.60.
Pentru teste, procesorul a fost overclockat la 3 GHz (în configurația 11,5x261 MHz) și la 4 GHz (11,5x348 MHz) cu o frecvență RAM de 835 MHz în primul și al doilea caz. Video cu rezoluție Full HD 1920x1080, durată de un minut și douăzeci de secunde. Pentru a crea încărcare suplimentară, a fost activat un filtru de reducere a zgomotului, ale cărui setări au fost lăsate implicite.


Codificarea a fost efectuată folosind codecul DivX 6.8.4. În setările de calitate ale acestui codec, toate valorile sunt lăsate implicite, multithreading-ul este activat.


Suportul multithreading în TMPGEnc este inițial activat în fila de setări CPU/GPU. CUDA este, de asemenea, activat în aceeași secțiune.


După cum puteți vedea din captura de ecran de mai sus, procesarea filtrului folosind CUDA este activată, dar decodorul video hardware nu este activat. Documentația programului avertizează că activarea ultimului parametru crește timpul de procesare a fișierului.

Pe baza rezultatelor testelor au fost obținute următoarele date:


La 4 GHz cu CUDA activat, am câștigat doar câteva secunde (sau 2%), ceea ce nu este deosebit de impresionant. Dar la o frecvență mai mică, creșterea de la activarea acestei tehnologii vă permite să economisiți aproximativ 13% din timp, ceea ce va fi destul de vizibil la procesarea fișierelor mari. Dar totuși rezultatele nu sunt atât de impresionante pe cât se aștepta.

Programul TMPGEnc are un indicator de încărcare CPU și CUDA; în această configurație de testare, a arătat încărcarea procesorului la aproximativ 20%, iar nucleul grafic la restul de 80%. Ca rezultat, avem aceeași 100% ca atunci când facem conversie fără CUDA și este posibil să nu existe deloc o diferență de timp (dar încă există). Capacitatea mică de memorie de 256 MB nu este, de asemenea, un factor limitativ. Judecând după citirile de la RivaTuner, nu a fost folosit mai mult de 154 MB de memorie video în timpul funcționării.



concluzii

Programul TMPGEnc este unul dintre cele care introduce tehnologia CUDA în masă. Utilizarea GPU-ului în acest program vă permite să accelerați procesul de procesare video și să ușurați în mod semnificativ procesorul central, ceea ce va permite utilizatorului să facă confortabil și alte sarcini în același timp. În exemplul nostru specific, placa video GeForce 8800GT 256MB a îmbunătățit ușor performanța de sincronizare la conversia video pe baza unui procesor Pentium Dual-Core E5200 overclockat. Dar este clar că, pe măsură ce frecvența scade, câștigul din activarea CUDA crește; pe procesoarele slabe, câștigul din utilizarea acestuia va fi mult mai mare. Pe fondul acestei dependențe, este destul de logic să presupunem că, chiar și cu o creștere a sarcinii (de exemplu, utilizarea unui număr foarte mare de filtre video suplimentare), rezultatele unui sistem cu CUDA se vor distinge printr-un delta semnificativă a diferenței de timp petrecut procesului de codificare. De asemenea, nu uitați că G92 nu este cel mai puternic cip în acest moment, iar plăcile video mai moderne vor oferi performanțe semnificativ mai mari în astfel de aplicații. Totuși, în timp ce aplicația rulează, GPU-ul nu este încărcat complet și, probabil, distribuția încărcării depinde de fiecare configurație separat, și anume de combinația procesor/placă video, care în cele din urmă poate da o creștere mai mare (sau mai mică) ca procent. de activare CUDA. În orice caz, pentru cei care lucrează cu volume mari de date video, această tehnologie le va permite totuși să-și economisească semnificativ timpul.

Adevărat, CUDA nu a câștigat încă popularitate pe scară largă; calitatea software-ului care funcționează cu această tehnologie necesită îmbunătățiri. În programul TMPGEnc 4.0 XPress pe care l-am revizuit, această tehnologie nu a funcționat întotdeauna. Același videoclip ar putea fi recodificat de mai multe ori, iar apoi brusc, data viitoare când a fost lansat, încărcarea CUDA era deja de 0%. Și acest fenomen a fost complet aleatoriu pe sisteme de operare complet diferite. De asemenea, programul în cauză a refuzat să folosească CUDA la codificarea în format XviD, dar nu au existat probleme cu popularul codec DivX.

Drept urmare, până acum tehnologia CUDA poate crește semnificativ performanța computerelor personale doar în anumite sarcini. Însă domeniul de aplicare a unei astfel de tehnologii se va extinde, iar procesul de creștere a numărului de nuclee în procesoarele convenționale indică o creștere a cererii de calcul paralel cu mai multe fire în aplicațiile software moderne. Nu degeaba, recent, toți liderii din industrie au devenit obsedați de ideea de a combina procesorul și GPU-ul într-o arhitectură unificată (doar amintiți-vă de mult-reclamatul AMD Fusion). Poate că CUDA este una dintre etapele procesului acestei unificări.


Mulțumim următoarelor companii pentru furnizarea echipamentelor de testare:

– un set de interfețe software de nivel scăzut ( API) pentru crearea de jocuri și alte aplicații multimedia de înaltă performanță. Include suport de înaltă performanță 2D- Și 3D-dispozitive grafice, de sunet și de intrare.

Direct3D (D3D) – interfață pentru afișarea tridimensională primitivi(corpuri geometrice). Inclus în .

OpenGL(din engleza Deschideți Biblioteca grafică, literalmente - bibliotecă grafică deschisă) este o specificație care definește o interfață de programare multiplatformă independentă de limbajul de programare pentru scrierea de aplicații folosind grafica computerizată bidimensională și tridimensională. Include peste 250 de funcții pentru desenarea scenelor 3D complexe din primitive simple. Folosit pentru a crea jocuri video, realitate virtuală și vizualizare în cercetarea științifică. Pe platformă Windows concurează cu .

OpenCL(din engleza Limbajul de calcul deschis, la propriu – un limbaj deschis al calculelor) – cadru(cadru de sistem software) pentru scrierea de programe de calculator legate de calculul paralel pe diverse grafice ( GPU) Și ( ). La cadru OpenCL include un limbaj de programare și o interfață de programare a aplicațiilor ( API). OpenCL oferă paralelism la nivel de instrucție și la nivel de date și este o implementare a tehnicii GPGPU.

GPGPU(abreviat din engleză) Unităţi de procesare grafică cu uz general, literalmente - GPU scop general) este o tehnică de utilizare a unei unități de procesare grafică (GPU) sau a unei plăci video pentru calcul general, care este realizată de obicei de un computer.

Shader(Engleză) shader) – un program pentru construirea de umbre pe imagini sintetizate, utilizat în grafica tridimensională pentru a determina parametrii finali ai unui obiect sau a unei imagini. De obicei, include descrieri arbitrar complexe ale absorbției și împrăștierii luminii, cartografierea texturii, reflexia și refracția, umbrirea, deplasarea suprafeței și efectele de post-procesare. Suprafețele complexe pot fi vizualizate folosind forme geometrice simple.

Redare(Engleză) redare) – vizualizarea, în grafică computerizată, a procesului de obținere a unei imagini dintr-un model folosind software.

SDK(abreviat din engleză) Kit de dezvoltare software) – un set de instrumente de dezvoltare software.

CPU(abreviat din engleză) Unități centrale de procesare, literalmente – dispozitiv de calcul central/principal/principal) – central (micro); un dispozitiv care execută instrucțiunile mașinii; o piesă hardware responsabilă cu efectuarea operațiilor de calcul (specificate de sistemul de operare și software-ul aplicației) și de coordonarea funcționării tuturor dispozitivelor.

GPU(abreviat din engleză) Unitate de procesare grafică, literalmente – dispozitiv de calcul grafic) – procesor grafic; un dispozitiv separat sau o consolă de jocuri care realizează randarea grafică (vizualizarea). GPU-urile moderne sunt foarte eficiente la procesarea și afișarea graficii computerizate într-o manieră realistă. Procesorul grafic din adaptoarele video moderne este folosit ca accelerator grafic 3D, dar în unele cazuri poate fi folosit și pentru calcule ( GPGPU).

Probleme CPU

Pentru o lungă perioadă de timp, creșterea performanței celor tradiționale s-a produs în principal datorită creșterii consistente a frecvenței de ceas (aproximativ 80% din performanță a fost determinată de frecvența de ceas) cu o creștere simultană a numărului de tranzistori pe un cip. . Cu toate acestea, o creștere suplimentară a frecvenței de ceas (la o frecvență de ceas mai mare de 3,8 GHz, cipurile pur și simplu se supraîncălzesc!) întâmpină o serie de bariere fizice fundamentale (deoarece procesul tehnologic s-a apropiat aproape de dimensiunea unui atom: , iar dimensiunea unui atom de siliciu este de aproximativ 0,543 nm):

În primul rând, pe măsură ce dimensiunea cristalului scade și frecvența ceasului crește, curentul de scurgere al tranzistorilor crește. Acest lucru duce la un consum crescut de energie și la creșterea emisiilor de căldură;

În al doilea rând, beneficiile vitezei de ceas mai mari sunt parțial anulate de latența accesului la memorie, deoarece timpii de acces la memorie nu țin pasul cu viteza de ceas în creștere;

În al treilea rând, pentru unele aplicații, arhitecturile seriale tradiționale devin ineficiente pe măsură ce vitezele de ceas cresc din cauza așa-numitului „bloc von Neumann”, o limitare a performanței rezultată din fluxul de calcul secvențial. În același timp, întârzierile transmisiei semnalului rezistiv-capacitiv cresc, ceea ce este un blocaj suplimentar asociat cu o creștere a frecvenței de ceas.

Dezvoltare GPU

În paralel cu aceasta a existat (și este!) dezvoltare GPU:

noiembrie 2008 - Intel a introdus o linie de 4 nuclee Intel Core i7, care se bazează pe o microarhitectură de nouă generație Nehalem. Procesoarele funcționează la o frecvență de ceas de 2,6-3,2 GHz. Realizat folosind o tehnologie de proces de 45 nm.

Decembrie 2008 – au început livrările de 4-core AMD Phenom II 940(nume de cod - Deneb). Funcționează la o frecvență de 3 GHz, produsă folosind o tehnologie de proces de 45 nm.

mai 2009 – firma AMD a introdus versiunea GPU ATI Radeon HD 4890 cu viteza de ceas de bază a crescut de la 850 MHz la 1 GHz. Acesta este primul grafic procesor care rulează la 1 GHz. Puterea de calcul a cipului, datorită creșterii frecvenței, a crescut de la 1,36 la 1,6 teraflopi. Procesorul conține 800 (!) nuclee de calcul și acceptă memorie video GDDR5, DirectX 10.1, ATI CrossFireXși toate celelalte tehnologii inerente modelelor moderne de plăci video. Cipul este fabricat pe baza tehnologiei de 55 nm.

Principalele diferențe GPU

Trăsături distinctive GPU(comparat cu ) sunt:

– o arhitectură care vizează maxim creșterea vitezei de calcul a texturilor și a obiectelor grafice complexe;

– putere de vârf tipică GPU mult mai sus decât atât ;

– datorită unei arhitecturi de transport specializate, GPU mult mai eficient în prelucrarea informaţiilor grafice decât .

„Criza genului”

„Criza de gen” pentru s-au maturizat până în 2005 - atunci au apărut. Dar, în ciuda dezvoltării tehnologiei, creșterea productivității convenționale a scazut simtitor. În același timp, performanță GPU continuă să crească. Deci, până în 2003, această idee revoluționară s-a cristalizat - utilizați puterea de calcul a graficii pentru nevoile dvs. GPU-urile au devenit din ce în ce mai utilizate pentru calculul „non-grafic” (simulare fizică, procesare a semnalului, matematică/geometrie computațională, operațiuni cu baze de date, biologie computațională, economie computațională, viziune computerizată etc.).

Problema principală a fost că nu exista o interfață de programare standard GPU. Dezvoltatorii au folosit OpenGL sau Direct3D, dar a fost foarte convenabil. corporație NVIDIA(unul dintre cei mai mari producători de procesoare grafice, media și de comunicații, precum și procesoare media wireless; fondat în 1993) a început să dezvolte un standard unificat și convenabil - și a introdus tehnologia CUDA.

Cum a început

2006 – NVIDIA demonstreaza CUDA™; începutul unei revoluții în calcul GPU.

2007 – NVIDIA eliberează arhitectura CUDA(versiunea originala CUDA SDK a fost depus la 15 februarie 2007); nominalizare „Cel mai bun produs nou” din reviste Știința Popularăși „Alegerea cititorilor” din publicație HPCWire.

2008 – tehnologie NVIDIA CUDA a câștigat categoria „Excelență tehnică” din Revista PC.

Ce s-a întâmplat CUDA

CUDA(abreviat din engleză) Arhitectura dispozitivului unificat de calcul, literalmente - arhitectura de calcul unificată a dispozitivelor) - arhitectură (un set de software și hardware) care vă permite să produceți pe GPU calcule de uz general, în timp ce GPU acționează de fapt ca un coprocesor puternic.

Tehnologie NVIDIA CUDA™ este singurul mediu de dezvoltare într-un limbaj de programare C, care permite dezvoltatorilor să creeze software care rezolvă probleme complexe de calcul în mai puțin timp, datorită puterii de procesare a GPU-urilor. Milioane de oameni lucrează deja în lume GPU cu sprijinul CUDA, iar mii de programatori folosesc deja instrumente (gratuite!). CUDA pentru a accelera aplicațiile și pentru a rezolva cele mai complexe sarcini care necesită mult resurse - de la codificare video și audio la explorarea petrolului și gazelor, modelarea produselor, imagistica medicală și cercetarea științifică.

CUDA oferă dezvoltatorului posibilitatea, la propria discreție, de a organiza accesul la setul de instrucțiuni ale acceleratorului grafic și de a gestiona memoria acestuia și de a organiza calcule paralele complexe pe acesta. Suport accelerator grafic CUDA devine o arhitectură deschisă programabilă puternică, similară cu cea de astăzi. Toate acestea oferă dezvoltatorului acces la nivel scăzut, distribuit și de mare viteză la hardware, realizarea CUDA o bază necesară pentru construirea de instrumente serioase de nivel înalt, cum ar fi compilatoare, depanare, biblioteci matematice și platforme software.

Uralsky, specialist de top în tehnologie NVIDIA, comparând GPUȘi , spune asta: „ - Acesta este un SUV. Conduce mereu și peste tot, dar nu foarte repede. A GPU- Aceasta este o mașină sport. Pe un drum prost, pur și simplu nu va merge nicăieri, dar îi va oferi o suprafață bună și își va arăta toată viteza, la care un SUV nici măcar nu a visat!...”

Capabilitati tehnologice CUDA