Vai al contenuto
giordi

image processing on the GPU

Recommended Posts

Salve gente :D

Era un po che non mi facevo vedere! Sono qui per condividere un po gli ultimi studi che sto facendo in caso potesse interessare a qualcuno.

Ultimamente ho ripreso a studiarmi per bene il discorso massive parallel computing e GPU , ho unito il tutto anche ad un corso di image processing che sto facendo.

Per mandare la computazione su GPU ho deciso di affidarmi a PYCUDA , un python wrapper intorno alla ben nota nvidia C library.

La ragione per cui ho scelto il python e' semplicemente perche' mi veniva piu comodo per prototipare e sopratutto per leggere le immagini sotto forma di matrice.

Qualche giorno fa avevo fatto dei semplici test come la conversione in bianco e nero di un immagine, per un immagine di dimensione 1440x900 il tempo sepso nella computazione

era di circa 5-6 secondi ! Un po troppo per i miei gusti , allora ho deciso di provare a buttare il tutto su gpu e vedere che succede.

Ho dovuto smadonnare parecchio per capire le varie conversioni di dati che accadevano "under the hood" ma alla fine ne sono venuto a capo e vi mostro cosa ho ottenuto.

Qui il risultato del processing di un immagine di 1k~

image1KBW.jpg

nulla di che , operazione molto semplice , ma diamo un occhio alle performance cuda :D

Qui sotto il mio log :

----------> SERIAL CONVERSION

-----> Opening path : C:/Users/Marco/Desktop/jessTest.jpg

-----> Saving path : C:/Users/Marco/Desktop/jessTestLuminosity.jpg

Image size : (1440, 900)

get and convert Image data : 0.04000210762023926

Processing data : 4.67326807975769

Save image time : 0.03500199317932129

total Execution time : 4.748272180557251

----------> CUDA CONVERSION

-----> Saving path : C:/Users/Marco/Desktop/jessTestLuminosityCuda.jpg

Image size : (1440, 900)

get and convert Image data to gpu ready : 0.042001962661743164

allocate mem to gpu: 0.006000041961669922

Kernel execution time : 0.04200291633605957

Get data from gpu and convert : 0.010999917984008789

Save image time : 0.03200197219848633

total Execution time : 0.13300681114196777

Come si puo' notare c'e' un bel ~40X di boost in performance , nonostante la gpu per questo task non sia stata sfruttata al meglio (la gpu da il meglio di se quando ha parecchia computazione sugli stessi dati , aka tanti filtri sulla stessa foto).

Ora sto cercando di scrivermi un coder e decoder JPEG ( puro esercizio non per necessita') , anche quello sarebbe interessante da mandare su GPU essendo che iniziano ad esserci un po piu di calcoli da fare.

Se siete interessati a saperne di piu vi invito a leggere il mio blog post dove ci sono bench marsk su foto fino a 9k di risoluzione e svariati altri dati che ho raccolto.

link : http://www.marcogior...ocessing-pycuda

That s it folks! per commenti e critiche sapete dove trovarmi !


Modificato da giordi

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

si avrei potuto anche mandare la computazione in parallelo su cpu e ottenere uno speed up vicino al 4X ma ho deciso di mandare direttamente su gpu anche se potrebbe essere interessante vedere quali sono le opzioni per mandare in parallelo del python su cpu.

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora

  • Navigazione recente   0 utenti

    Non ci sono utenti registrati da visualizzare in questa pagina.

×