SlideShare a Scribd company logo
1 of 9
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/vladpetre88


1   12.01.2011
Efectul Filtrelor




2   12.01.2011
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
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
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
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
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
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
Mulţumesc!



                 Întrebări?




9   12.01.2011

More Related Content

More from Vlad Petre

The 3-D Secure Protocol
The 3-D Secure ProtocolThe 3-D Secure Protocol
The 3-D Secure ProtocolVlad Petre
 
Founding a startup. DOs and DON'Ts.
Founding a startup. DOs and DON'Ts.Founding a startup. DOs and DON'Ts.
Founding a startup. DOs and DON'Ts.Vlad Petre
 
[Curs Android] C10 - Threaduri & Servicii (IPW 2011)
[Curs Android] C10 - Threaduri & Servicii (IPW 2011)[Curs Android] C10 - Threaduri & Servicii (IPW 2011)
[Curs Android] C10 - Threaduri & Servicii (IPW 2011)Vlad Petre
 
[Curs Android] C09 - Stocarea Datelor (IPW 2011)
[Curs Android] C09 - Stocarea Datelor (IPW 2011)[Curs Android] C09 - Stocarea Datelor (IPW 2011)
[Curs Android] C09 - Stocarea Datelor (IPW 2011)Vlad Petre
 
[Curs Android] C07 - Liste (IPW 2011)
[Curs Android] C07 - Liste (IPW 2011)[Curs Android] C07 - Liste (IPW 2011)
[Curs Android] C07 - Liste (IPW 2011)Vlad Petre
 
[Curs Android] C05 - Emulator (IPW 2011)
[Curs Android] C05 - Emulator (IPW 2011)[Curs Android] C05 - Emulator (IPW 2011)
[Curs Android] C05 - Emulator (IPW 2011)Vlad Petre
 
[Curs Android] C04 - User Interface (IPW 2011)
[Curs Android] C04 - User Interface (IPW 2011)[Curs Android] C04 - User Interface (IPW 2011)
[Curs Android] C04 - User Interface (IPW 2011)Vlad Petre
 
[Curs Android] C02 - Aplicatii (IPW 2011)
[Curs Android] C02 - Aplicatii (IPW 2011)[Curs Android] C02 - Aplicatii (IPW 2011)
[Curs Android] C02 - Aplicatii (IPW 2011)Vlad Petre
 
[Curs Android] C01 - Introducere (IPW 2011)
[Curs Android] C01 - Introducere (IPW 2011)[Curs Android] C01 - Introducere (IPW 2011)
[Curs Android] C01 - Introducere (IPW 2011)Vlad Petre
 
Diploma Project: Friloc - Retea de socializare bazata pe geolocalizare
Diploma Project: Friloc - Retea de socializare bazata pe geolocalizareDiploma Project: Friloc - Retea de socializare bazata pe geolocalizare
Diploma Project: Friloc - Retea de socializare bazata pe geolocalizareVlad Petre
 
Eneco: Energy Economy
Eneco: Energy EconomyEneco: Energy Economy
Eneco: Energy EconomyVlad Petre
 
Kickstart Project: Android+Restlet+Hibernate+PostgreSQL
Kickstart Project: Android+Restlet+Hibernate+PostgreSQLKickstart Project: Android+Restlet+Hibernate+PostgreSQL
Kickstart Project: Android+Restlet+Hibernate+PostgreSQLVlad Petre
 
[SCS]Friloc - Scientific Paper
[SCS]Friloc - Scientific Paper[SCS]Friloc - Scientific Paper
[SCS]Friloc - Scientific PaperVlad Petre
 
Critica asupra lucrarii Proactive Computing
Critica asupra lucrarii Proactive ComputingCritica asupra lucrarii Proactive Computing
Critica asupra lucrarii Proactive ComputingVlad Petre
 
Critica asupra Singularitatii lui Vernor Vinge
Critica asupra Singularitatii lui Vernor VingeCritica asupra Singularitatii lui Vernor Vinge
Critica asupra Singularitatii lui Vernor VingeVlad Petre
 
Voicenger - Software Architecture Document
Voicenger - Software Architecture DocumentVoicenger - Software Architecture Document
Voicenger - Software Architecture DocumentVlad Petre
 
Voicenger - Software Design Document
Voicenger - Software Design DocumentVoicenger - Software Design Document
Voicenger - Software Design DocumentVlad Petre
 
Voicenger - System Requirements Specification
Voicenger - System Requirements SpecificationVoicenger - System Requirements Specification
Voicenger - System Requirements SpecificationVlad Petre
 
SIM Project: Optimizing a Benchmarking Tool
SIM Project: Optimizing a Benchmarking ToolSIM Project: Optimizing a Benchmarking Tool
SIM Project: Optimizing a Benchmarking ToolVlad Petre
 
Optimizarea metodelor de sortare SIMD pentru GPU-uri NVIDIA
Optimizarea metodelor de sortare SIMD pentru GPU-uri NVIDIAOptimizarea metodelor de sortare SIMD pentru GPU-uri NVIDIA
Optimizarea metodelor de sortare SIMD pentru GPU-uri NVIDIAVlad Petre
 

More from Vlad Petre (20)

The 3-D Secure Protocol
The 3-D Secure ProtocolThe 3-D Secure Protocol
The 3-D Secure Protocol
 
Founding a startup. DOs and DON'Ts.
Founding a startup. DOs and DON'Ts.Founding a startup. DOs and DON'Ts.
Founding a startup. DOs and DON'Ts.
 
[Curs Android] C10 - Threaduri & Servicii (IPW 2011)
[Curs Android] C10 - Threaduri & Servicii (IPW 2011)[Curs Android] C10 - Threaduri & Servicii (IPW 2011)
[Curs Android] C10 - Threaduri & Servicii (IPW 2011)
 
[Curs Android] C09 - Stocarea Datelor (IPW 2011)
[Curs Android] C09 - Stocarea Datelor (IPW 2011)[Curs Android] C09 - Stocarea Datelor (IPW 2011)
[Curs Android] C09 - Stocarea Datelor (IPW 2011)
 
[Curs Android] C07 - Liste (IPW 2011)
[Curs Android] C07 - Liste (IPW 2011)[Curs Android] C07 - Liste (IPW 2011)
[Curs Android] C07 - Liste (IPW 2011)
 
[Curs Android] C05 - Emulator (IPW 2011)
[Curs Android] C05 - Emulator (IPW 2011)[Curs Android] C05 - Emulator (IPW 2011)
[Curs Android] C05 - Emulator (IPW 2011)
 
[Curs Android] C04 - User Interface (IPW 2011)
[Curs Android] C04 - User Interface (IPW 2011)[Curs Android] C04 - User Interface (IPW 2011)
[Curs Android] C04 - User Interface (IPW 2011)
 
[Curs Android] C02 - Aplicatii (IPW 2011)
[Curs Android] C02 - Aplicatii (IPW 2011)[Curs Android] C02 - Aplicatii (IPW 2011)
[Curs Android] C02 - Aplicatii (IPW 2011)
 
[Curs Android] C01 - Introducere (IPW 2011)
[Curs Android] C01 - Introducere (IPW 2011)[Curs Android] C01 - Introducere (IPW 2011)
[Curs Android] C01 - Introducere (IPW 2011)
 
Diploma Project: Friloc - Retea de socializare bazata pe geolocalizare
Diploma Project: Friloc - Retea de socializare bazata pe geolocalizareDiploma Project: Friloc - Retea de socializare bazata pe geolocalizare
Diploma Project: Friloc - Retea de socializare bazata pe geolocalizare
 
Eneco: Energy Economy
Eneco: Energy EconomyEneco: Energy Economy
Eneco: Energy Economy
 
Kickstart Project: Android+Restlet+Hibernate+PostgreSQL
Kickstart Project: Android+Restlet+Hibernate+PostgreSQLKickstart Project: Android+Restlet+Hibernate+PostgreSQL
Kickstart Project: Android+Restlet+Hibernate+PostgreSQL
 
[SCS]Friloc - Scientific Paper
[SCS]Friloc - Scientific Paper[SCS]Friloc - Scientific Paper
[SCS]Friloc - Scientific Paper
 
Critica asupra lucrarii Proactive Computing
Critica asupra lucrarii Proactive ComputingCritica asupra lucrarii Proactive Computing
Critica asupra lucrarii Proactive Computing
 
Critica asupra Singularitatii lui Vernor Vinge
Critica asupra Singularitatii lui Vernor VingeCritica asupra Singularitatii lui Vernor Vinge
Critica asupra Singularitatii lui Vernor Vinge
 
Voicenger - Software Architecture Document
Voicenger - Software Architecture DocumentVoicenger - Software Architecture Document
Voicenger - Software Architecture Document
 
Voicenger - Software Design Document
Voicenger - Software Design DocumentVoicenger - Software Design Document
Voicenger - Software Design Document
 
Voicenger - System Requirements Specification
Voicenger - System Requirements SpecificationVoicenger - System Requirements Specification
Voicenger - System Requirements Specification
 
SIM Project: Optimizing a Benchmarking Tool
SIM Project: Optimizing a Benchmarking ToolSIM Project: Optimizing a Benchmarking Tool
SIM Project: Optimizing a Benchmarking Tool
 
Optimizarea metodelor de sortare SIMD pentru GPU-uri NVIDIA
Optimizarea metodelor de sortare SIMD pentru GPU-uri NVIDIAOptimizarea metodelor de sortare SIMD pentru GPU-uri NVIDIA
Optimizarea metodelor de sortare SIMD pentru GPU-uri NVIDIA
 

Aplicare Filtre pe Imagini

  • 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/vladpetre88 1 12.01.2011
  • 2. Efectul Filtrelor 2 12.01.2011
  • 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. 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. 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. 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. 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. 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. Mulţumesc! Întrebări? 9 12.01.2011