Università degli Studi di Napoli – “Parthenope”
Dipartimento di Scienze e Tecnologie
Corso di Laurea in Informatica
TESI DI LAUREA TRIENNALE
Relatore: Dott. Livia Marcellino
Laureando: Ivan Osato (0124/250)
Anno Accademico 2013/2014







La struttura delle immagini DWI
Il metodo PCA locale overcomplete
Introduzione al GP-GPU
Ambiente di sviluppo CUDA
Il software parallelo sviluppato
Test e risultati
Conclusioni e Sviluppi futuri
Ivan Osato - Università degli Studi di Napoli "Parthenope"
2
Le immagini DWI (Diffusion Weighted Images) sono immagini di risonanza magnetica
(MRI) pesate in diffusione, capaci di misurare il moto microscopico delle molecole di
acqua in un tessuto biologico, permettendo quindi l’analisi della microstruttura bianca
cerebrale sia in condizioni normali che patologiche.

La diffusione rappresenta il moto caotico e disordinato
delle molecole di un mezzo, dovuto all’agitazione termica.

L’elemento preponderante è l’acqua che comprende il 6590% in volume dei tessuti biologici e svolge la funzione di
mezzo di trasporto dei composti biochimici.

Strutture con diffusione normale sono rappresentate
convenzionalmente più scure (segnale di risonanza più
attenuato) mentre laddove la velocità di diffusione è
minore (ischemia) sono rappresentate più chiare.
Ivan Osato - Università degli Studi di Napoli "Parthenope"
3

Il più recente sviluppo della DWI è rappresentato dall’imaging in tensore di
diffusione (Diffusion Tensor Imaging, DTI), che è una tecnica che mette in
evidenza non soltanto l’entità della diffusione delle molecole di acqua nei tessuti
ma anche la direzione consentendo di superare i limiti di direzionalità di DWI.

Le immagini DTI si ottengono attraverso l’acquisizione di immagini pesate in
diffusione lungo diverse direzioni tramite l’applicazione di una sequenza EPI
(Echo Planar Imaging), cui viene fatta seguire in successione una serie di
gradienti con orientazioni variabili.
slice (3D)
direzioni (4D)
Ivan Osato - Università degli Studi di Napoli "Parthenope"
4

Le immagini DWI hanno per natura, un basso SNR (Signal to Noise Ratio) a
causa della scarsa ampiezza del segnale ed il pronunciato rumore termico.

Questo basso rapporto rende l’analisi estremamente complessa, pregiudicando
la stima dei parametri di diffusione quantitativi.
Esistono diverse tecniche di denoising
che possono migliorare la qualità dei
dati DWI come step di postelaborazione
Ivan Osato - Università degli Studi di Napoli "Parthenope"
5
Il metodo PCA locale per la rimozione del rumore Rician da immagini DWI, sfrutta la
ridondanza multi-direzionale delle immagini pesate in diffusione multicomponente,
per ridurre localmente le componenti principali meno significative attraverso un
approccio overcomplete.
L’elaborazione di ogni singolo voxel avviene localmente, all’interno di finestre locali
che possono sovrapporsi a quelle dei voxel adiacenti. In seguito alla sovrapposizione
delle patch (overlapping), elaborate separatamente, si ottengono diverse stime per
alcuni voxel da processare attraverso una media (overcomplete).
Ivan Osato - Università degli Studi di Napoli "Parthenope"
6
La Principal Component Analysis (PCA, Analisi per Componenti Principali) è una
trasformazione lineare ortogonale dei dati che vengono mappati in un nuovo sistema di
riferimento ortogonale in modo da massimizzare la varianza (rispetto ad ogni altra proiezione)
associata alla prima coordinata, poi quella associata alla seconda coordinata e così via. Le
proiezioni, considerate nell’ordine, prendono il nome di componenti principali.
.
La PCA consiste nel calcolo degli autovalori e degli autovettori della matrice di covarianza XTX
dei dati centrati:


.
Il primo autovettore di XTX è la prima componente principale, mentre il primo autovalore è
la varianza associata a tale componente principale, che è la massima possibile.
La varianza che rimane, è associata alle altre direzioni e quindi alle restanti componenti
principali.
Ivan Osato - Università degli Studi di Napoli "Parthenope"
7
Per ogni punto xp con p = (i, j, z, k) nel dominio dell’immagine 4D, le patch 3D
circostanti xp in ogni direzione K, sono riordinate come vettore colonna di una
matrice X di (N x K) componenti (N elementi della patch x K direzioni).
PER OGNI MATRICE X
PCA LOCALE





C = XTX
Calcolo autovettori di C in W
Y = XW
Thresholding di Y in Ŷ
con τ = γ * σ
XD = ŶW-1 + μ
OVERLAPPING DI XD
Le colonne della matrice sono riposizionate
nell’immagine di output (sommate ai valori già
presenti), nella posizione dove erano state estratte
come patch 3D dall’immagine rumorosa.
MEDIA
Ivan Osato - Università degli Studi di Napoli "Parthenope"
8
Ivan Osato - Università degli Studi di Napoli "Parthenope"
9
L’unità di elaborazione grafica (Graphics Processing Unit, GPU) è una tipologia
particolare di coprocessore composto da più multiprocessori paralleli, organizzati
secondo uno schema architetturale finalizzato al paradigma SIMD (Single Instruction
Multiple Data).
Queste unità nascono nell’ambito della Computer
Graphics per l’esecuzione di operazioni grafiche
(rendering) che lavorano su una grande quantità di
dati.
La GP-GPU (General Purpose Computing on GPU),
si propone di impiegare le GPU per applicazioni
parallele High Performance General Purpose,
sfruttando le loro capacità di elaborazione in parallelo
per compiti che vanno oltre la Computer Graphics.
Ivan Osato - Università degli Studi di Napoli "Parthenope"
10
Come usare un ambiente ideato per la grafica in
applicazioni General Purpose?
NVIDIA ha modificato la GPU rendendola interamente
programmabile
per
le
applicazioni
scentifiche
e
aggiungendovi il supporto per linguaggi ad alto livello come C
e C++ nell’ambiente di sviluppo CUDA.
Il modello architetturale CUDA considera
la CPU e la GPU come due macchine
distinte dette host
e device, che
eseguono rispettivamente la parte di
codice sequenziale e parallela (kernel).
Ivan Osato - Università degli Studi di Napoli "Parthenope"
11
L’algoritmo parallelo sviluppato, prevede una griglia computazionale 3D in
cui ad ogni thread di un blocco è associato un voxel di competenza (i, j, z, k)
in tutte le K direzioni dell’immagine DWI.
Ivan Osato - Università degli Studi di Napoli "Parthenope"
12
Versione 1 - full shared memory: uso totale di memoria condivisa in tutte le principali
operazioni di PCA locale.
VANTAGGI
SVANTAGGI
1. Bassa latenza
2. Risparmio maggiore di tempo
Capienza ridotta
KERNEL
• computeCovariance<<<-;-;->>>
• computePCA<<<-;-;->>>
• weightedAverage<<<-;-;->>>
Versione 2 - shared and global memory combination: gestione oculata della shared
memory in combinazione all’utilizzo della global memory.
VANTAGGI
SVANTAGGI
Capienza maggiore
Tempi d’accesso più alti
KERNEL
• computeCovariance<<<-;-;->>>
• computeProdYEXW<<<-;-;->>>
• computeProdXDEYWT<<<-;-;->>>
• weightedAverage <<<-;-;->>>
Ivan Osato - Università degli Studi di Napoli "Parthenope"
13
Questo kernel ha il compito di calcolare la matrice di covarianza C per ogni voxel (i, j, z).
La configurazione di thread utilizzata è la seguente:
BlockDim =
GridDim
=
Ogni thread del blocco, in parallelo, copia i dati di propria competenza dall’immagine
rumorosa per costruire la matrice X in shared memory, poi calcola la media di ciascuna
colonna della propria X (per normalizzare X) e per finire esegue il prodotto righe per
colonne per il calcolo della matrice di covarianza C.
Ivan Osato - Università degli Studi di Napoli "Parthenope"
14

Calcola la Principal Component
Analysis in maniera overcomplete
usando la shared memory.

La configurazione di griglia è la
medesima del kernel precedente.

Agisce
in
global
memory
sull’immagine di output per
eseguire l’overlapping.
Nella fase di inizializzazione, i thread del blocco in parallelo costruiscono la matrice
X, il vettore di media Mean e gli autovettori W in shared memory. Successivamente,
eseguono tutte le operazioni di PCA locale e memorizzano i dati restaurati
nell’immagine di output (overlapping).
Ivan Osato - Università degli Studi di Napoli "Parthenope"
15
Nella versione 2, il kernel computePCA<<<-;-;->>> è splittato in due kernel che
eseguono separatamente i prodotti per occupare meno spazio in shared memory.

computeProdYEXW<<<-;-;->>> Ciascun thread di un blocco, in parallelo,
prima effettua il prodotto tra matrici per generare Y, poi esegue il thresholding
per la rimozione del rumore. Il prodotto fa un uso combinato di shared memory
(X, W) e global memory (Y).

computeProdXDEYWT<<<-;-;->>> Ciascun thread di un blocco, in parallelo,
prima esegue il prodotto tra matrici per la determinazione della matrice XD
restaurata, poi effettua overlapping per collocare i dati restaurati nell’immagine
di output. Il prodotto fa un uso combinato di shared memory (MEAN, W) e
global memory (Y, XD).
Ivan Osato - Università degli Studi di Napoli "Parthenope"
16

Calcola la media pesata per ogni
voxel dell’immagine di output
restaurata.

La configurazione di griglia è la
medesima dei kernel precedenti.

Non fa uso di shared memory.
Ogni thread di un blocco accede in memoria globale ai suoi K voxel di
competenza ed esegue la media dividendo il valore del voxel (calcolato
come somma delle stime di voxel dal processo di overlapping) per il numero
di sovrapposizioni.
Ivan Osato - Università degli Studi di Napoli "Parthenope"
17
In questo primo test, si riportano i risultati numerici dell’errore di approssimazione
commesso sulle immagine restaurate rispetto alle immagini originali (ground-truth).
L’errore viene calcolato attraverso l’indice PSNR (Peak Signal-Noise Ratio) che è
in grado di valutare la qualità delle immagini.
ground-truth
(z = 0, k = 0)
ground-truth
(z = 0, k = 5)
ground-truth
(z = 0, k = 9)
Simulated DW-MRI Brain Data Sets: http://www.nitrc.org/projects/sim_dwi_brain/
Ivan Osato - Università degli Studi di Napoli "Parthenope"
18
Si riportano i valori di PSNR per le tre immagini campione utilizzate, al variare del
livello di rumore.
Immagine K = 5
Immagine K = 0
Livello
Rumore
Fattore
Threshold
Truth/Noise
Truth/Denoise
Livello
Rumore
Fattore
Threshold
Truth/Noise
Truth/Denoise
3%
3,5
39,3627
40,4992
3%
3,5
40,0504
46,4654
5%
4
35,1357
36,0129
5%
4
36,5721
43,7716
7%
5,5
32,5834
33,3899
7%
5,5
33,606
42,1731
9%
5,5
30,676
32,8739
9%
5,5
31,471
40,4865
Immagine K = 9
I valori tabellari dimostrano
che l’algoritmo è in grado di
produrre risultati di output
con un discreto grado di
accuratezza.
Livello
Rumore
Fattore
Threshold
Truth/Noise
Truth/Denoise
3%
3,5
40,2151
46,8808
5%
4
36,6531
44,0942
7%
5,5
33,7361
42,1145
9%
5,5
31,5565
40,5904
Aumentando il livello di rumore,
il PSNR tende a diminuire
poichè
l’immagine
è
più
degradata.
I valori (Truth/Denoise) sono più
alti rispetto a (Truth/Noise) dato
che l’immagine è restaurata ed
ha una qualità maggiore.
Ivan Osato - Università degli Studi di Napoli "Parthenope"
19
Risultati di output che si ottengono dall’esecuzione dell’algoritmo per un z fissato (z = 0),
esaminando le direzioni k = 0, 5, 9 con i livelli di rumore 3% e 5%.
LIVELLO RUMORE 3%
LIVELLO RUMORE 5%
Ivan Osato - Università degli Studi di Napoli "Parthenope"
20
nvprof --print-gpu-trace ./myApp
Lo strumento di profiling nvprof consente di raccogliere e visualizzare i dati relativi alle
caratteristiche di esecuzione di un software parallelo eseguito su GPU in ambiente CUDA.
Duration
Grid size
Block size
DSMem
Kernel Name
1.10s
(88, 88, 7)
(2, 2, 3)
8.48 KB
computeCovariance
7.21s
(88, 88, 7)
(2, 2, 3)
34.40 KB
computePCA
7.32ms
(88, 88, 7)
(2, 2, 3)
0 KB
weightedAverage
Output del tool, eseguendo la
seconda versione dell’algoritmo
parallelo su 10 direzioni, con la
configurazione di (2, 2, 3) thread
per blocco e (88, 88, 7) blocchi per
un confronto diretto con la prima
versione.
Output del tool, eseguendo la prima
versione dell’algoritmo parallelo su 10
direzioni, con l’unica configurazione
possibile di (2, 2, 3) thread per blocco
e (88, 88, 7) blocchi.
Duration
Grid size
Block size
DSMem
Kernel Name
1.10s
(88, 88, 7)
(2, 2, 3)
8.48 KB
computeCovariance
1.04s
(88, 88, 7)
(2, 2, 3)
8.48 KB
computeProdYEXW
5.42s
(88, 88, 7)
(2, 2, 3)
8.48 KB
computeProdXDEYWT
7.27ms
(88, 88, 7)
(2, 2, 3)
0 KB
weightedAverage
La differenza sostanziale tra le due versioni dell’algoritmo parallelo, sta nel numero di kernel
utilizzati per ottenere il risultato, nella quantità di shared memory utilizzata e nel numero di
copie dati da host a device e viceversa.
Ivan Osato - Università degli Studi di Napoli "Parthenope"
21
Sono stati effettuati vari test, variando per
ogni esecuzione il numero di direzioni
dell’immagine DWI (partendo da 2 direzioni
ed arrivando fino a un massimo di 10
direzioni entro i limiti di memoria della
macchina utilizzata).
Dataset size
(voxel)
GFlops CPU
GFlops GPU
1300992
0,03
0,33
1951488
0,05
0,63
2601984
0,13
1,6
3252480
0,31
3,8
3902976
0,7
8,16
4553472
1,41
17
5203968
2,6
31
5854464
4,3
51,51
6504960
7
83,14
Per 10 direzioni, le performance della CPU sono
pari a 7 GFlops mentre per la GPU sono 83,14
GFlops, ovvero circa 12 volte maggiori rispetto a
quelle della CPU ottenendo un guadagno
prestazionale pari a 91,6%.
Ivan Osato - Università degli Studi di Napoli "Parthenope"
22
Nei diversi test, si è variato il numero di direzioni dell’immagine DWI (numero di voxel
processati). Le due versioni parallele sono state eseguite con la stessa configurazione
confrontabile (per motivi di spazio) di (2, 2, 3) thread per blocco e (88, 88, 7) blocchi di griglia.
Dataset
size
(voxel)
Time
CPU
1300992
17
1,04
1,35
1951488
25
1,72
2,03
2601984
31
2,82
3,1
3252480
39
4,23
4,61
3902976
49
6,6
6,7
4553472
57
9,1
9,74
5203968
68
15,01
12,8
5854464
82
18,4
17,4
6504960
95
23,55
24
Time
Time
GPU v1 GPU v2
Con 10 direzioni, il tempo impiegato dalla CPU è di 95 secondi
contro i 24 secondi della GPU (i tempi delle due versioni sono
approssimativamente uguali). Pertanto, il tempo impiegato dalla
GPU è circa 4 volte minore rispetto al tempo impiegato dalla CPU,
con un guadagno pari al 75%.
Ivan Osato - Università degli Studi di Napoli "Parthenope"
23
Thread
per
blocco
Direzioni
Time
GPU
v2
Time
GPU
v1
2x2x3
2
1,35
1,04
3x3x3
2
1,43
1,1
4x4x3
2
1,45
1,04
5x5x3
2
1,5
1,27
2x2x3
10
24
23,55
3x3x3
10
31,8
-
4x4x3
10
35,6
-
5x5x3
10
29,30
-
L’algoritmo parallelo è stato eseguito al variare
delle direzioni, processando i voxel dell’immagine
con diverse configurazioni di griglia, nei limiti dello
spazio a disposizione sulla macchina utilizzata.
Aumentando le direzioni, il carico di lavoro
aumenta a prescindere dalla configurazione
utilizzata. Per ogni direzione, la configurazione
ottimale è sempre quella che utilizza 2 x 2 x 3
thread per blocco.
Ivan Osato - Università degli Studi di Napoli "Parthenope"
24
CONCLUSIONI
Con il lavoro svolto in questa tesi, si è realizzata una implementazione parallela del
metodo “PCA Locale Overcomplete (OLPCA)” per la rimozione del rumore Rician
da immagini pesate in diffusione, in ambiente GPU-CUDA. Sono state sviluppate
due versioni parallele, per sopperire alle limitazioni dell’architettura utilizzata. I
risultati sperimentali, di confronto con l’algoritmo sequenziale, hanno evidenziato un
guadagno in termini di GFlops addirittura pari al 91,6% ed una riduzione del tempo di
esecuzione uguale al 75%.
SVILUPPI FUTURI


Implementazione multi-GPU per incrementare ulteriormente il guadagno.
Testing del software parallelo su schede video con memorie più capienti.
Ivan Osato - Università degli Studi di Napoli "Parthenope"
25



Thread per
blocco
Time GPU
v1
Time GPU
v2
2x2x3
1,04
1,35
3x3x3
1,1
1,43
4x4x3
1,04
1,45
5x5x3
1,27
1,5
La differenza nei tempi d’esecuzione tra le due versioni è decisamente bassa.
I tempi della seconda versione parallela, sono influenzati dalla quantità maggiore di
trasferimenti dati in memoria e dall’accesso alla global memory.
I risultati confermano ancora una volta che la configurazione ottimale è certamente quella
che prevede l’uso di blocchi da 2 x 2 x 3 thread.
Ivan Osato - Università degli Studi di Napoli "Parthenope"
28
L’algoritmo è stato eseguito al variare delle
direzioni, rilevando per ogni test il tempo di
esecuzione necessario alla computazione
degli autovettori su host.
Dataset size
(voxel)
Direzioni
Time W
1300992
2
0,9
1951488
3
1,31
2601984
4
2
3252480
5
3,1
3902976
6
4,45
4553472
7
6,4
5203968
8
8,25
5854464
9
11,30
6504960
10
15
Il tempo d’esecuzione aumenta all’aumentare delle direzioni dell’immagine DWI con un
andamento quadratico!
Ivan Osato - Università degli Studi di Napoli "Parthenope"
29
Scarica

Il metodo PCA locale overcomplete - Università degli Studi di Napoli