GPGPU

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Diagrama internă a unui GPU (nVidia GeForce 6800). Rețineți numărul mare de unități paralele

GPGPU ( acronim pentru calcul general pentru unități de procesare grafică , literalmente în italiană „ calcul general pentru unități de procesare grafică ”) indică în informatică utilizarea unei unități de procesare grafică ( GPU ) în alte scopuri decât utilizarea tradițională în computer grafică .

Caracteristici

GPGPU este utilizat pentru procesare extrem de solicitantă în ceea ce privește puterea de procesare și pentru care arhitecturile CPU tradiționale nu au o capacitate de procesare suficientă. Prin natura lor, aceste procese sunt extrem de paralele și, prin urmare, pot beneficia foarte mult de arhitectura tipică a GPU-urilor. La această caracteristică intrinsecă începând cu 2007 s- a adăugat programabilitatea extremă oferită de diverse soluții comerciale, care odată cu succesiunea generațiilor și-a mărit nu numai puterea de procesare, ci și versatilitatea. Această evoluție a arhitecturilor video a fost implementată treptat și pentru că aceeași grafică 3D a jocurilor video s-a transformat enorm în timp; odată ce s-au bazat pe un set de instrucțiuni fixe și predefinite, dar progresiv s-a dezvoltat o abordare în care GPU-urile sunt complet programate folosind shadere , o caracteristică care, prin urmare, a deschis noi scenarii de utilizare pentru acest tip de soluții hardware. Această programabilitate a luat numele de model Shader .

Scenarii tipice de procesare GPGPU

Aplicațiile care sunt capabile să profite în mod semnificativ de puterea de calcul a GPU-urilor moderne sunt doar o mică parte din întregul peisaj al software-ului , deoarece pentru a profita de caracteristicile acestor arhitecturi este necesară o paralelizare ridicată a codului, caracteristică tipică a unor probleme științifice dar nu tot; printre acestea putem menționa în primul rând prelucrarea imaginilor în general, precum cele medicale, sau cercetarea geologică, inclusiv căutarea câmpurilor petroliere și a surselor naturale, precum și analiza modelelor de risc financiar.

Alte categorii de aplicații sunt caracterizate în schimb de necesitatea unei logici ridicate de control al procesului de calcul, iar această funcție este îndeplinită foarte bine de procesoarele tradiționale, dar într-un mod extrem de ineficient de către arhitecturile GPU. Aceste tipuri de aplicații includ baze de date , compresie de date și algoritmi recursivi generici.

Unele sectoare științifice care beneficiază de GPGPU sunt:

Mai multe programe utilizează GPGPU, inclusiv: Adobe Photoshop , Autodesk Maya , GIMP , Autodesk Autocad, Blender , SolidWorks , Matlab , CHARMM (dinamică moleculară), AMBER (chimie de calcul), FFMpeg, X264 , LibreOffice, OpenMM (simulări moleculare) .

Principalele avantaje ale procesării GPGPU

Avantajele utilizării unui GPU pentru a efectua procesarea unui alt tip decât câmpul grafic sunt multe și printre acestea pot fi menționate următoarele:

Avantaje de performanță

Cea mai izbitoare caracteristică a acestui tip de utilizare a GPU-urilor este, așa cum am menționat, puterea teoretică enormă oferită de aceste soluții și, în consecință, timpul de procesare redus, în comparație cu procesarea similară efectuată de procesoare. Cu toate acestea, trebuie spus că trecerea procesării codului către GPU necesită optimizarea aplicațiilor în sine pentru a integra suportul pentru caracteristicile specifice acestor arhitecturi; este adesea o rescriere totală a unor bucăți întregi de cod și, evident, dezvoltatorii trebuie să țină cont de acești factori în faza de dezvoltare pentru politici comerciale evidente, dar din punct de vedere pur al performanței, creșterile de până la 100 de ori în comparație cu ceea ce este oferit pot să fie obținut de la procesoare tradiționale. Prin urmare, nu este vorba de creșteri de 20 sau 30%, nici de o dublare a puterii, ci chiar de o „centuplicare” a puterii de procesare și, în consecință, timpii de calcul sunt reduși de 100 de ori.

Costul de achiziție

Costul oricărui GPU este aliniat la cel al unui CPU care aparține aceluiași segment de piață, astfel încât un GPU high-end poate costa în jur de 600 de euro, la egalitate cu un CPU din aceeași gamă. Având în vedere că, la același preț, o GPU este capabilă să ofere performanțe teoretice mult superioare, pare clar că optimizarea software-ului pentru exploatarea corectă a acestor arhitecturi permite să conțină eficient costurile prin îmbunătățirea semnificativă a așa-numitei „performanțe pe watt” și în consecință, eficiența procesării.

Rata de actualizare tehnologică

Succesiunea generațiilor de arhitecturi GPU este mult mai rapidă decât evoluțiile disponibile în domeniul CPU. Arhitecturile CPU durează adesea aproape neschimbate de ani de zile (arhitectura Intel NetBurst a durat 6 ani) și abia din 2005 tendința de a prezenta noi arhitecturi la fiecare doi ani (vezi Intel Tick-Tock ), în timp ce arhitecturile GPU durează în general de la 12 la 18 luni maximum (în trecut au existat actualizări ale acestor arhitecturi în doar 6-8 luni). Mai mult, în timp ce noile arhitecturi de procesor cresc în general performanța, la același ceas , cu 20-30% maxim, în ceea ce privește GPU-ul, am asistat de ani de zile la dublarea pură a puterii de procesare cu fiecare nouă generație.

Consum / performanță

Deși producătorii de CPU au muncit din greu în ceea ce privește eficiența energetică și limitarea consumului maxim de energie, producătorii de GPU par să fi ignorat până acum acest aspect în proiectarea de noi soluții. Cu toate acestea, puterea de procesare teoretică enormă a GPU-urilor compensează foarte mult nivelul ridicat de consum de energie și, în consecință, raportul consum / performanță al diferitelor soluții este în mod clar în avantajul GPU-urilor față de procesoare.

Generarea unei imagini tridimensionale, printr-un GPU

Procesul de creare a unei imagini tridimensionale constă din următoarele puncte:

  1. definirea punctelor (sau triunghiurilor) de trasat
  2. transformarea coordonatelor punctelor
  3. interpolând punctele pentru a crea o figură
  4. colorarea pixelilor figurii care sunt vizibile

Datorită umbrelor este posibil să instruiți GPU (Unitatea de procesare grafică) despre cum să se comporte în faza de transformare a punctelor ( Vertex shader ) și în faza de colorare a pixelilor ( Pixel shader ).

Principiile procesării GPGPU

Pentru a implementa un motor GPGPU, o mașină Turing echivalentă trebuie extrasă din arhitectura GPU.

În primul rând trebuie să vă asigurați că Shaders poate citi datele de intrare. Pentru a rezolva această problemă, vă puteți gândi să scrieți datele de intrare în unele texturi și să le faceți să fie prelevate din umbrele .

Evident, va fi necesar să se creeze funcții de adresare bune capabile să traducă coordonatele de adresare (de obicei întregi) în coordonatele de eșantionare a texturii (două valori zecimale între 0 și 1).

Apoi va fi necesar să scrieți un program care rulează pe placa grafică capabilă să proceseze datele citite și să producă rezultatele dorite.

Pentru această fază aveți mai multe opțiuni de codare:

  1. Scrieți codul într-un limbaj de asamblare acceptat de bibliotecile grafice utilizate
  2. Scrieți programul într-un limbaj de nivel înalt ( HLSL , GLSL )

În cele din urmă, va fi necesar să „redăm” datele pentru a produce rezultatele dorite cu previziune pentru a salva această ieșire pe o textură care poate fi găsită mai târziu.

Pentru a construi un motor GPGPU în prezent, trebuie să utilizați biblioteci grafice care acceptă modelul shader ( DirectX , OpenGL ). Cu toate acestea, mai multe proiecte sunt active pentru a permite programatorului să utilizeze GPGPU fără a fi nevoie să cunoască aceste biblioteci. Cele mai active proiecte pot fi găsite pe site-uri precum www.gpgpu.org sau hgpu

Suport hardware

Principalii producători de plăci video, AMD , nVidia și Intel , investesc pentru a îmbunătăți performanța arhitecturilor lor în calculele cu scop general:

  • ATI / AMD a introdus primele plăci video pentru consumatori capabile să susțină calculul de uz general în 2008 cu plăcile video din familia HD4xxx, deși se bazează încă pe tehnologia CTM. Seria de GPU-uri dedicate calculelor este cea a familiei FirePro S.
  • nVidia, pe de altă parte, cu cardurile din seria GeForce 8 a introdus posibilitatea de a efectua calcule GPGPU chiar și pe cardurile de consum. În iunie 2007 , a prezentat și tehnologia Tesla , care indică o întreagă familie de soluții hardware destinate în mod special procesării GPGPU.
  • Intel a introdus, în 2013, carduri dedicate în mod special GPGPU (Xeon Phi).

Cardurile dedicate (FirePro, Tesla și Phi) nu sunt din toate punctele de vedere plăci video, deoarece adesea nu au ieșiri video pentru a putea conecta un monitor, dar sunt comparabile cu coprocesoarele matematice foarte puternice, bazate pe arhitecturi dedicate GPU; aceste carduri sunt utilizate în sisteme HPC dedicate expres, în modul hibrid de calcul CPU / GPU.

Principalele limbaje de programare GPGPU

  • CUDA este tehnologia proprietară a Nvidia pentru calculatoare GPU.
  • ROCm și HIP sunt tehnologii similare cu CUDA, dar sunt open source și dezvoltate de AMD
  • OpenMP Target este tehnologia OpenMP utilizată pentru a calcula pe acceleratoare
  • OneAPI este noul standard promovat de Intel bazat pe standardul SyCL al lui Khronos, care își propune să devină un limbaj universal, așa cum OpenCL a încercat fără succes în trecut.
  • OpenCL (Open Computing Language) este o bibliotecă bazată pe limbajul ANSI C și C ++ 14 .
  • C ++ AMP este o bibliotecă deschisă, derivată de la Microsoft din DirectX 11.
  • OpenACC este o bibliotecă open source dezvoltată inițial de Nvidia, Cray , Caps și PGI.
  • CTM ( Close to Metal ) este o tehnologie veche abandonată de la AMD. A permis utilizarea GPU-urilor, începând din seria Radeon R5xx, ca procesoare vectoriale pe virgulă mobilă pe 32 de biți, cu performanțe superioare bibliotecilor grafice (DirectX și OpenGL). Această caracteristică l-a făcut un instrument de calcul foarte puternic pentru anumite operațiuni, inclusiv, în intențiile ATI, gestionarea motoarelor fizice de jocuri video .
  • DirectCompute este o bibliotecă Microsoft derivată, precum C ++ AMP, din bibliotecile DirectX.

Diferențe între abordarea ATI / AMD și abordarea nVidia

Abordarea NVidia cu CUDA este cu siguranță mai ușor de achiziționat de programatori decât CTM-ul ATI. Deși acesta din urmă permite interacțiunea cu GPU la un nivel mai puternic decât cel oferit de CUDA, rămâne și mai dificil de implementat, deoarece cunoașterea unui limbaj de tip asamblare este necesară, în locul tradiționalului C ++ furnizat de nVidia home soluţie. În plus, CTM, tocmai pentru că se bazează pe un limbaj de programare de nivel inferior, este specific pentru o anumită familie de GPU-uri, în timp ce CUDA are flexibilitatea de a putea muta aplicații dezvoltate în orice moment, chiar și pe generațiile viitoare de GPU-uri nVidia.

Odată cu trecerea soluțiilor ATI / AMD la soluțiile OpenCl, problema conexiunii CTM cu hardware-ul a fost depășită, oferind limbajului Opencl (bazat pe C ++) un acces la nivel înalt la cele mai diverse dispozitive hw, mult mai mult decât cele accesibile din bibliotecile CUDA.

Notă


Elemente conexe

linkuri externe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT