SlideShare a Scribd company logo
1 of 20
Facoltà degli studi
di Modena e Reggio Emilia
Facoltà di ingegneria
Impatto prestazionale delle GPU relativamente
all'ambito del connected components labeling
Relatore: Studente:
Prof. Costantino Grana Riccardo Galanti
A.A 2015 - 2016
Contributo del lavoro di tesi / Sommario
Studio dell'algoritmo delle componenti connesse operante
esclusivamente su CPU in modo sequenziale
Studio delle differenze architetturali CPU / GPU
Implementazione dell'algoritmo delle componenti
connesse utilizzando linguaggio CUDA su GPU
OBIETTIVO
Il riadattamento su GPU con
architettura Cuda dell'algoritmo sequenziale
del labeling delle componenti connesse
Labeling delle componenti connesse
Usato in visione artificiale per rilevare regioni connesse in
immagini digitali binarie
Raggruppa i pixel di un'immagine in componenti basati
sulla connettività dei pixel
Ogni pixel sarà marcato con un numero o con un colore
diverso in base al diverso gruppo di appartenenza
Caratteristiche immagine
Formato PGM
Aperta in blocco note
Righe iniziali indicanti commenti e/o caratteristiche utili
Ogni pixel ha un numero rappresentante il colore
Implementazione sequenziale
Ricorsiva
Ogni pixel analizza se non è già stato marcato e se non fa
parte dello sfondo
Se la risposta è positiva si marca il pixel e si procede ad
analizzare ricorsivamente i vicini per vedere se fanno parte
di un'unica componente connessa
La connettività dei vicini può essere 4-way o 8-way
Si deve usare uno stratagemma per non riempire lo stack
con le varie chiamate ricorsive
Implementazione sequenziale (2)
image
Scan pixel by pixel
Pixel is not background
Check neighbours
Neighbours already labelled
Assign min label to main label
None of neighbours is labelled
Assign new label to pixel
Implementazione sequenziale (3)
Risultato finale:
CUDA
Compute Unified Device Architecture
Architettura hardware incentrata sul calcolo parallelo e
rivolta in particolare alla programmazione general-purpose
Parallelismo implementato suddividendo ogni processo in
thread, eseguibili in parallelo
I thread vengono eseguiti e schedulati a gruppi di 32
(warp)
I thread possono essere raggruppati in blocchi, che a loro
volta possono essere raggruppati in griglie
Organizzazione logica
Organizzazione fisica
Implementazione parallela
Problema: lanciare subito l'algoritmo in CUDA porterebbe
a risultati errati
occorre una prima fase di pre-labeling
Implementazione parallela (2)
Alla fine del primo giro (scorrendo l'immagine in modo
sequenziale) il risultato dovrebbe essere questo:
Implementazione parallela (3)
Passaggi restanti da fare:
Allocare spazio per l'immagine sulla GPU
Spostare l'immagine dalla CPU alla GPU
Lanciare il kernel, che sarà il cuore vero e proprio della
nostra applicazione in CUDA
Spostare l'immagine elaborata dalla GPU alla CPU
Implementazione parallela (4)
1) cudaMalloc((void**)&inputdevice, sizeof(int)* N);
2) cudaMemcpy(inputdevice, img.data, sizeof(int)* N,
cudaMemcpyHostToDevice);
3) kernel <<<grid,threads>>> (inputdevice,md, N, img.width);
4) cudaMemcpy(img.data, inputdevice, sizeof(int)* N,
cudaMemcpyDeviceToHost);
Immagini di input
“image.pgm”
“cani.pgm”
“spirale.pgm”
Connected components labeling-tempi
4-way
Algoritmo sequenziale
Image spirale cani
~0.1 ms 31 ms 31 ms
Algoritmo parallelo
~0.1 ms 31 ms 31 ms
160 ms 610 ms 140ms
Connected components labeling-tempi(2)
8-way
Algoritmo sequenziale
Image spirale cani
1 ms 44 ms 47 ms
Algoritmo parallelo
~0.1 ms 31 ms 31 ms
160 ms 453 ms 140ms
Conclusioni
Implementato efficacemente algoritmo in CUDA
Algoritmo parallelo notevolmente più lento
Evitare pre-labeling farebbe risparmiare tempo
Algoritmo sequenziale 8-way più lento di 4-way
Tempo algoritmo parallelo spirale 8-way molto inferiore a
4-way, altri tempi uguali
Immagine di input notevolmente più grande porterebbe
molti vantaggi all'algoritmo in CUDA
Grazie per l'attenzione

More Related Content

Similar to Algoritmo delle componenti connesse

Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...Francesco Cucari
 
Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...LeonardoIurada
 
Avogadro: calcolo e visualizzazione per la chimica quantistica
Avogadro: calcolo e visualizzazione per la chimica quantisticaAvogadro: calcolo e visualizzazione per la chimica quantistica
Avogadro: calcolo e visualizzazione per la chimica quantisticaPorfirina
 
Angelo Impedovo, Linux Day 2016, Programmazione Parallela in openCL
Angelo Impedovo, Linux Day 2016, Programmazione Parallela in openCLAngelo Impedovo, Linux Day 2016, Programmazione Parallela in openCL
Angelo Impedovo, Linux Day 2016, Programmazione Parallela in openCLAngelo Impedovo
 
Sviluppo di tool di gestione ed analisi di un simulatore Neuro-Fuzzy
Sviluppo di tool di gestione ed analisi di un simulatore Neuro-FuzzySviluppo di tool di gestione ed analisi di un simulatore Neuro-Fuzzy
Sviluppo di tool di gestione ed analisi di un simulatore Neuro-FuzzyStefano Ficcadenti
 
Generazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGenerazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGiacomoZorzin
 
Tesi Marco Ventura
Tesi Marco VenturaTesi Marco Ventura
Tesi Marco Venturaguest335584
 
Un sistema di persistenza per motori di workflow business-oriented BPMN
Un sistema di persistenza per motori di workflow business-oriented BPMNUn sistema di persistenza per motori di workflow business-oriented BPMN
Un sistema di persistenza per motori di workflow business-oriented BPMNAlessandro Segatto
 
Design Pattern Creazionali
Design Pattern CreazionaliDesign Pattern Creazionali
Design Pattern CreazionaliRiccardo Cardin
 
Kunos Simulazioni and Assetto Corsa, behind the scenes- Alessandro Piva, Fabr...
Kunos Simulazioni and Assetto Corsa, behind the scenes- Alessandro Piva, Fabr...Kunos Simulazioni and Assetto Corsa, behind the scenes- Alessandro Piva, Fabr...
Kunos Simulazioni and Assetto Corsa, behind the scenes- Alessandro Piva, Fabr...Codemotion
 
Graduation Thesis Presentation
Graduation Thesis PresentationGraduation Thesis Presentation
Graduation Thesis Presentationperceval84
 

Similar to Algoritmo delle componenti connesse (20)

Tesi andrea cingolani
Tesi andrea cingolaniTesi andrea cingolani
Tesi andrea cingolani
 
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
 
Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...
 
Avogadro: calcolo e visualizzazione per la chimica quantistica
Avogadro: calcolo e visualizzazione per la chimica quantisticaAvogadro: calcolo e visualizzazione per la chimica quantistica
Avogadro: calcolo e visualizzazione per la chimica quantistica
 
Angelo Impedovo, Linux Day 2016, Programmazione Parallela in openCL
Angelo Impedovo, Linux Day 2016, Programmazione Parallela in openCLAngelo Impedovo, Linux Day 2016, Programmazione Parallela in openCL
Angelo Impedovo, Linux Day 2016, Programmazione Parallela in openCL
 
Sviluppo di tool di gestione ed analisi di un simulatore Neuro-Fuzzy
Sviluppo di tool di gestione ed analisi di un simulatore Neuro-FuzzySviluppo di tool di gestione ed analisi di un simulatore Neuro-Fuzzy
Sviluppo di tool di gestione ed analisi di un simulatore Neuro-Fuzzy
 
Generazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGenerazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptx
 
Tesi Marco Ventura
Tesi Marco VenturaTesi Marco Ventura
Tesi Marco Ventura
 
Diagrammi di Sequenza
Diagrammi di SequenzaDiagrammi di Sequenza
Diagrammi di Sequenza
 
Game Engine
Game EngineGame Engine
Game Engine
 
Un sistema di persistenza per motori di workflow business-oriented BPMN
Un sistema di persistenza per motori di workflow business-oriented BPMNUn sistema di persistenza per motori di workflow business-oriented BPMN
Un sistema di persistenza per motori di workflow business-oriented BPMN
 
Design Pattern Creazionali
Design Pattern CreazionaliDesign Pattern Creazionali
Design Pattern Creazionali
 
3DD 1e Salomone
3DD 1e Salomone3DD 1e Salomone
3DD 1e Salomone
 
Kunos Simulazioni and Assetto Corsa, behind the scenes- Alessandro Piva, Fabr...
Kunos Simulazioni and Assetto Corsa, behind the scenes- Alessandro Piva, Fabr...Kunos Simulazioni and Assetto Corsa, behind the scenes- Alessandro Piva, Fabr...
Kunos Simulazioni and Assetto Corsa, behind the scenes- Alessandro Piva, Fabr...
 
3rd 3DDRESD: VGA Core
3rd 3DDRESD: VGA Core3rd 3DDRESD: VGA Core
3rd 3DDRESD: VGA Core
 
3rd 3DDRESD: DB
3rd 3DDRESD: DB3rd 3DDRESD: DB
3rd 3DDRESD: DB
 
Thesis Magnone Slides IT
Thesis Magnone Slides ITThesis Magnone Slides IT
Thesis Magnone Slides IT
 
Algoritmo di Dijkstra
Algoritmo di DijkstraAlgoritmo di Dijkstra
Algoritmo di Dijkstra
 
Graduation Thesis Presentation
Graduation Thesis PresentationGraduation Thesis Presentation
Graduation Thesis Presentation
 
Scheda video
Scheda videoScheda video
Scheda video
 

Algoritmo delle componenti connesse

  • 1. Facoltà degli studi di Modena e Reggio Emilia Facoltà di ingegneria Impatto prestazionale delle GPU relativamente all'ambito del connected components labeling Relatore: Studente: Prof. Costantino Grana Riccardo Galanti A.A 2015 - 2016
  • 2. Contributo del lavoro di tesi / Sommario Studio dell'algoritmo delle componenti connesse operante esclusivamente su CPU in modo sequenziale Studio delle differenze architetturali CPU / GPU Implementazione dell'algoritmo delle componenti connesse utilizzando linguaggio CUDA su GPU
  • 3. OBIETTIVO Il riadattamento su GPU con architettura Cuda dell'algoritmo sequenziale del labeling delle componenti connesse
  • 4. Labeling delle componenti connesse Usato in visione artificiale per rilevare regioni connesse in immagini digitali binarie Raggruppa i pixel di un'immagine in componenti basati sulla connettività dei pixel Ogni pixel sarà marcato con un numero o con un colore diverso in base al diverso gruppo di appartenenza
  • 5. Caratteristiche immagine Formato PGM Aperta in blocco note Righe iniziali indicanti commenti e/o caratteristiche utili Ogni pixel ha un numero rappresentante il colore
  • 6. Implementazione sequenziale Ricorsiva Ogni pixel analizza se non è già stato marcato e se non fa parte dello sfondo Se la risposta è positiva si marca il pixel e si procede ad analizzare ricorsivamente i vicini per vedere se fanno parte di un'unica componente connessa La connettività dei vicini può essere 4-way o 8-way Si deve usare uno stratagemma per non riempire lo stack con le varie chiamate ricorsive
  • 7. Implementazione sequenziale (2) image Scan pixel by pixel Pixel is not background Check neighbours Neighbours already labelled Assign min label to main label None of neighbours is labelled Assign new label to pixel
  • 9. CUDA Compute Unified Device Architecture Architettura hardware incentrata sul calcolo parallelo e rivolta in particolare alla programmazione general-purpose Parallelismo implementato suddividendo ogni processo in thread, eseguibili in parallelo I thread vengono eseguiti e schedulati a gruppi di 32 (warp) I thread possono essere raggruppati in blocchi, che a loro volta possono essere raggruppati in griglie
  • 12. Implementazione parallela Problema: lanciare subito l'algoritmo in CUDA porterebbe a risultati errati occorre una prima fase di pre-labeling
  • 13. Implementazione parallela (2) Alla fine del primo giro (scorrendo l'immagine in modo sequenziale) il risultato dovrebbe essere questo:
  • 14. Implementazione parallela (3) Passaggi restanti da fare: Allocare spazio per l'immagine sulla GPU Spostare l'immagine dalla CPU alla GPU Lanciare il kernel, che sarà il cuore vero e proprio della nostra applicazione in CUDA Spostare l'immagine elaborata dalla GPU alla CPU
  • 15. Implementazione parallela (4) 1) cudaMalloc((void**)&inputdevice, sizeof(int)* N); 2) cudaMemcpy(inputdevice, img.data, sizeof(int)* N, cudaMemcpyHostToDevice); 3) kernel <<<grid,threads>>> (inputdevice,md, N, img.width); 4) cudaMemcpy(img.data, inputdevice, sizeof(int)* N, cudaMemcpyDeviceToHost);
  • 17. Connected components labeling-tempi 4-way Algoritmo sequenziale Image spirale cani ~0.1 ms 31 ms 31 ms Algoritmo parallelo ~0.1 ms 31 ms 31 ms 160 ms 610 ms 140ms
  • 18. Connected components labeling-tempi(2) 8-way Algoritmo sequenziale Image spirale cani 1 ms 44 ms 47 ms Algoritmo parallelo ~0.1 ms 31 ms 31 ms 160 ms 453 ms 140ms
  • 19. Conclusioni Implementato efficacemente algoritmo in CUDA Algoritmo parallelo notevolmente più lento Evitare pre-labeling farebbe risparmiare tempo Algoritmo sequenziale 8-way più lento di 4-way Tempo algoritmo parallelo spirale 8-way molto inferiore a 4-way, altri tempi uguali Immagine di input notevolmente più grande porterebbe molti vantaggi all'algoritmo in CUDA