Aplicare Filtre pe Imagini

758 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
758
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Aplicare Filtre pe Imagini

  1. 1. Aplicarea filtrelor de imagine POSTERIZE + GREYSCALE + PIXELIZE asupra unui Bitmap. Vlad-Ştefan PETRE 341C1 vlad@vladpetre.com http://twitter.com/vladpetre88 http://www.linkedin.com/in/vladpetre881 12.01.2011
  2. 2. Efectul Filtrelor2 12.01.2011
  3. 3. Implementarea Serială • Citirea header-ului bmp din fişierul de intrare într-o structură de date. • Citirea informaţiilor despre pixeli (secvenţe de [R,G,B]) din fişierul de intrare într-un vector. • Aplicarea filtrelor pixel cu pixel asupra secvenţelor de [R,G,B]. • Scrierea header-ului bmp într-un fişier de ieşire. • Scrierea noii secvenţe de [R,G,B] în fişierul de ieşire.3 12.01.2011
  4. 4. Implementarea OpenMP • Paralelizarea for-ului care aplică filtrele pixel cu pixel prin inserarea directivei: #pragma omp parallel for • Vectorul care stochează informaţiile despre pixeli rămâne global (deci partajat) între firele de execuţie.4 12.01.2011
  5. 5. Implementarea Pthreads • Vectorul care stochează informaţiile despre pixeli rămâne global (deci partajat) între firele de execuţie. • Codul care aplică filtrele asupra imaginii este scris într-o rutină pthreads. • Fiecare thread, în funcţie de id-ul său, va aplica filtrul asupra unei fâşii din imagine.5 12.01.2011
  6. 6. Implementarea MPI • Vectorul care stochează informaţiile despre pixeli nu mai poate să fie partajat între firele de execuţie. • Threadul 0 (master) se va ocupa doar de citirea/scrierea în fişiere, de împărţirea imaginii în bucăţi şi de comunicarea/transferurile cu thread- urile slave. • Imaginea se împarte într-un număr de bucăţi egal cu numărul de thread- uri. Fiecare bucată trebuie să aibă un număr par de linii de pixeli (exceptând ultima), aceasta fiind o constrângere a filtrului pixelize. • Fiecare thread primeşte o astfel de bucată împreună cu dimensiunile ei. • Fiecare thread va aplica filtrele asupra bucăţii lui de imagine, după care va trimite noua bucată de imagine thread-ului master.6 12.01.2011
  7. 7. Rezultate Serial OpenMP Pthreads MPI Test 1 0m1.470s 0m1.346s 0m1.425s 0m2.859s Test 2 0m1.482s 0m1.405s 0m1.384s 0m2.961s Test 3 0m1.481s 0m1.390s 0m1.395s 0m3.137s Notă: • Toate testele au fost rulate pe un procesor AMD Turion TL-58 X2 Dual-Core 1900MHz, având ca sistem de operare Ubuntu 10.04 32bit. • Toate binarele au fost compilate cu optiunea –g (exemplu: gcc –g). • Fişierul de intrare este un bitmap cu dimensiunea 5616x3744 pixeli (60 MB). • Pentru paralelizarea OpenMP am folosit schedule guided.7 12.01.2011
  8. 8. Concluzii • Aplicarea efectivă a acestor 3 filtre nu este o operaţie computaţional intensivă. • Viteza nu poate fi îmbunătăţită cu mult datorită acceselor la memorie (se observă foarte bine în acest caz cum memoria este mai lentă decât procesorul). • Varianta MPI este cea mai ineficientă datorită faptului că trebuiesc transferate bucăţile de imagine către şi de la thread-urile slave. • Variantele OpenMP şi Pthreads se dovedesc a fi cele mai potrivite pentru implementarea de faţă datorită faptului că imaginea este partajată între thread-uri (nu se pierde astfel timp cu transferuri de date între thread-uri), doar calculele în sine fiind paralelizate.8 12.01.2011
  9. 9. Mulţumesc! Întrebări?9 12.01.2011

×