Art. 08 – Vol. 21 – Nr. 2 – 2011

APLICAŢII PENTRU PROCESAREA DE IMAGINI
PE PLATFORMA CUDA – STUDIU DE CAZ

Ramona Din
din.ramona@yahoo.com
Andrei Grumăzescu
andrei.grum@yahoo.com
Daniela Saru
saru@aii.pub.ro
Ştefan Mocanu
smocanu@rdslink.ro
Radu Dobrescu
radud@isis.pub.roo
Universitatea “Politehnica” Bucureşti

Rezumat: Procesoarele grafice (GPUs – Graphical Processing Units) au cunoscut în ultimii ani o evoluţie spectaculoasă, apropiindu-se din ce în ce mai mult de statutul de co-procesor al unităţii centrale de prelucrare. Pe lângă funcţiile specializate de prelucrare/redare a imaginilor, plăcile video oferă în prezent facilităţi performante pentru realizarea calculelor matematice complexe şi rularea unor aplicaţii ce necesită putere ridicată de procesare. Exploatarea platformelor asociate plăcilor video a devenit accesibilă tuturor programatorilor odată cu lansarea arhitecturilor dedicate GPGPU. Această lucrare îşi propune evidenţierea performanţelor pe care le oferă una dintre cele mai competitive arhitecturi ale momentului, CUDA, pentru elaborarea unor algoritmi optimizaţi de prelucrare a imaginilor. Studiul de caz prezintă rezultatele obţinute în urma implementării unui algoritm de calcul paralel al histogramei unei imagini pe 256 niveluri de gri şi o analiză comparativă a performanţelor obţinute în urma prelucrării pe CPU, respectiv pe GPU.

Cuvinte cheie: procesor grafic (GPU), CUDA, procesare paralelă, GPGPU, histogramă

Introducere: În contextul cerinţelor pieţei pentru o putere de calcul din ce în ce mai mare, dar şi ca urmare a evoluţiei din punct de vedere tehnologic, prelucrarea de tip secvenţial a informaţiei a fost înlocuită cu algoritmi proiectaţi pentru rularea în paralel a mai multor fire de execuţie, în special în cazul volumelor mari de date ce necesită prelucrări complexe. Dacă în urmă cu câţiva ani exploatarea puterii de calcul a unui sistem se rezuma la paralelizarea algoritmilor pentru nucleele procesoarelor unităţii centrale, în ultimul timp s-a urmărit proiectarea unor arhitecturi hardware care să permită procesare în paralel şi în afara acestora. Astfel, a apărut conceptul General-Purpose computation on Graphics Processing Units (GPGPU) [4]. Spre deosebire de arhitectura procesorului central, procesorul grafic (GPU) a fost proiectat pentru execuţia foarte rapidă a unui set redus de instrucţiuni, având la bază mai multe nuclee de procesare pe care pot rula în paralel diferite taskuri. În timp ce în cazul CPU se acordă o atenţie deosebită accesului la memorie sau transferului de date, proiectarea GPU a pus accentul pe optimizarea operaţiilor ce implică procesarea efectivă a datelor [1]. Mai mult, trebuie menţionat faptul că memoria video GDDR3 (accesată si utilizată de GPU pentru stocarea informaţiilor) este mult mai rapidă decât memoria unităţii centrale, DDR2 sau DDR3.

Odată cu dezvoltarea puterii de calcul din punct de vedere tehnologic, producătorii de pe piaţa componentelor hardware au înţeles că este necesară crearea unor platforme care să permită exploatarea puterii GPU. Soluţia celor de la NVIDIA pentru GPGPU este CUDA (Compute Unified Device Architecture). Arhitectură dedicată procesării paralele, CUDA oferă programatorilor pasionaţi atât suportul hardware cât şi uneltele software necesare implementării algortimilor, dar şi exemple şi documentaţie, ce pot fi descărcate gratuit de pe site-ul producătorului [5].

Propunându-şi a fi o continuare a abordării propuse în [6], această lucrare prezintă un studiu comparativ al performanţelor obţinute în urma implementării unui algoritm de prelucrare a imaginilor în vederea execuţiei pe platforma CPU, respectiv pe platforma unui GPU din clasa GTX260, cu suport CUDA. Din volumul mare de rezultate obţinute a fost selectat un eşantion considerat reprezentativ pentru ilustrarea situaţiilor în care decizia de a paraleliza algoritmul şi a-l rula pe platforma plăcii video conduce la performanţe deosebite, dar şi a celor în care o astfel de variantă nu este adecvată.

Vizualizează articolul complet

Concluzii: Scopul principal al acestei lucrări a fost cercetarea potenţialului de performanţă promis de utilizarea arhitecturii CUDA pentru calcul paralel. Rezultatele studiului de caz au confirmat faptul că utilizarea acestei tehnologii pentru rezolvarea problemei de calculare a histogramei unei imagini pe 256 tonuri de gri poate conduce la obţinerea unor performanţe deosebite. Chiar şi în urma optimizării codului sursă, rularea algoritmului pe unitatea centrală de prelucrare s-a dovedit a fi o operaţie costisitoare din punctul de vedere al duratei de execuţie. Utilizarea arhitecturii CUDA a condus la obţinerea unui factor de optimizare cu ordin de multiplicare mai mare de 20, pentru imagini cuprinse între 1 şi 4 mega-pixeli. Cu toate acestea, trebuie menţionat faptul că, în cazul procesării unui volum mic de date, utilizarea algoritmilor de calcul paralel nu este justificată. Dimensiunea de 100100 pixeli, pragul peste care performanţele obţinute pentru procesarea pe GPU au fost semnificativ mai bune decât cele pentru procesarea pe CPU, este mică faţă de dimensiunile imaginilor folosite în mod curent.

Aşadar, în acest caz, tehnologia CUDA şi-a dovedit eficienţa, chiar dacă implementarea algoritmului nu a fost concentrată pe optimizarea codului, respectiv pe managementul direct al resurselor puse la dispoziţie de NVIDIA. Acest rezultat poate fi susţinut şi de faptul că, în ultimul timp, multe companii cu nume sonor şi-au îndreptat atenţia către arhitectura paralelă, cu nuclee multiple, a unităţilor de procesare grafică Nvidia[5]. Domenii precum procesarea audio-video, modelarea şi simularea în timp real a proceselor cu grad ridicat de complexitate, proiectarea electronică automată sau prelucrarea imaginilor din diverse domenii, toate pot avea în comun suportul oferit de tehnologia CUDA pentru dezvoltarea şi utilizarea unor algortimi de o complexitate mult mai mare decât ar fi fost posibil altfel şi o durată de execuţie de zeci, chiar sute de ori mai mic. Cu toate acestea, CUDA nu este singura opţiune pentru implementarea algoritmilor de calcul şi exploatarea platformei procesorului grafic. În multe privinţe, platforma celor de la RapidMind de exemplu, Multicore Development Platform (achiziţionată de către Intel în 2009), este superioară platformei CUDA [2]. Totuşi, ca şi în trecut, concurenţa de pe piaţa microprocesoarelor nu poate decât să susţină evoluţia tehnologică din domeniul IT.

BIBLIOGRAFIE:

  1. CASTANO-DIEZ, D.; MOSER D.; SCHOENEGGER A.; PRUGGNALLER S.; FRANGAKIS A. S. Performance Evaluation of Image Processing Algorithms on the GPU. Journal of Structural Biology, Vol. 164, 2008, pp. 153 – 160.
  2. HALFHILL, T. Parallel Processing with CUDA – Nvidia’s High – Performance Computing Platform Uses Massive Multithreading, 2008, documentaţie Internet, http://www.nvidia.com/docs/IO/55972/220401_Reprint.pdf
  3. KIRK, D.; HWU W. Programming Massively Parallel Processors, Curs Universitatea din Illinois, 2007.
  4. *** General-Purpose Computation on Graphics Hardware, documentaţie Internet, http://gpgpu.org/
  5. ***  Nvidia Documentation, 2009, documentaţie Internet, http://www.nvidia.com
  6. MOCANU, Ş.; DOBRESCU R.; SARU D.; DIN R.; GRUMĂZESCU A. Arhitecturi Complexe folosite în prelucrarea paralelă a imaginilor. Revista Română de Automatică şi Informatică, vol. 20, 2010, pp. 97 – 105.

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.