Presentazione per prelaurea.
I risultati del lavoro aggiornati sono disponibili nell'elaborato completo: http://www.slideshare.net/kylanee/tesi-11937891
[SLIDE]Modellazione della dinamica di un liquido bifase mediante GPU CUDA
1. UNIVERSITA’ DEGLI STUDI DI TRIESTE
Facoltà di Ingegneria
Corso di Studi in Ingegneria dell’Informazione
MODELLAZIONE DELLA DINAMICA
DI UN LIQUIDO BIFASE MEDIANTE
GPU CUDA
Tesi di Laurea Triennale
Laureanda: Relatori:
Alessandra LADERCHI prof. Claudio CHIARUTTINI
prof. Gianni SCHENA
A.A. 2010-2011
2. OBBIETTIVO
Il riadattamento su GPU con
architettura CUDA di un codice scritto
in Matlab per la simulazione della
dinamica di due fluidi immiscibili.
4. GPU
Graphics Processing Units
E’ l’unità di eleaborazione delle schede
grafiche e quindi è ottimizzato per la
resa grafica di immagini.
5. GPU
Architettura di tipo SIMD
(Single Instruction, Multiple Data)
CPU GPU
6. CALCOLO PARALLELO
Consiste nell’esecuzione dello stesso
codice su più unità di calcolo
contemporaneamente, in modo tale
da migliorare le prestazioni del sistema
in termini di tempo e sfruttamento
delle risorse disponibili.
7. GPGPU
General-Purpose computing on Graphics
Processing Units
E’ una tecnica di programmazione che
consiste nell’utilizzare la GPU per
l’esecuzione di un programma di natura
non grafica, in modo tale da sfruttare iI
vantaggi della parallelizzazione.
8. CUDA
Compute Unified Device Architecture
E’ un’architettura hardware incentrata
sul calcolo parallelo e rivolta in
particolare alla programmazione
general-purpose, supportata da un
ambiente di sviluppo indirizzato a
semplificare il lavoro dei
programmatori.
9. ARCHITETTURA CUDA
Uno o più multiprocessori contenenti
decine di unità di calcolo (CUDA core).
Tutti i multiprocessori hanno accesso alla
memoria globale e ognuno ha al suo
interno degli spazi di memoria privati.
10. PARALLELISMO IN CUDA
Viene implementato attraverso la
suddivisione di ogni processo in sotto-
processi, o thread , eseguibili in parallelo.
I thread possono essere raggruppati in
blocchi, che a loro volta possono essere
raggruppati in griglie.
Ogni microprocessore può eseguire fino a
un certo numero di thread
contemporaneamente. Questo gruppo di
thread è chiamato warp.
12. TIPI DI MEMORIA
Registri: R/W, per ogni
thread, latenza molto bassa.
Locale: R/W, per ogni
thread, alta latenza,
supporto ai registri.
Condivisa: R/W, per ogni
blocco, bassa latenza.
Globale: R/W, per tutti i
blocchi, latenza molto alta.
13. TIPI DI MEMORIA
Costante: R/O, per tutti i
blocchi, caricata in cache,
bassa latenza se tutti i
thread di un warp accedono
allo stesso dato.
Texture: R/O, per tutti i
blocchi, caricata in cache,
bassa latenza se sfruttata la
località spaziale.
15. CUDA C
Per programmare in CUDA si può
utilizzare il classico C/C++ con
l’aggiunta di funzioni specifiche per
l’esecuzione del codice sulla GPU.
Questo insieme di C/C++ e funzioni
specifiche viene chiamato CUDA C.
16. KERNEL
Sono funzioni che, quando invocate,
vengono eseguite N volte in parallelo sulla
GPU da N differenti thread.
Dichiarazione:
kernel<<<gridDim,blockDim>>>(param 1,.., param n);
17. CARATTERISTICHE KERNEL
• devono avere void come tipo di ritorno
(quindi non devono tornare alcun valore);
• non possono essere ricorsivi;
• non possono avere un numero di parametri
variabile;
• non possono usare variabili di tipo statico;
• possono accedere solo alla memoria della
GPU.
19. DECOMPOSIZIONE SPINODALE
E’ un meccanismo per il quale una miscela
di due componenti si separa in due
distinte regioni (o fasi).
20. METODI RETICOLARI DI BOLTZMANN
Sono algoritmi utilizzati per la simulazione
della dinamica di fluidi, basati sulla
discretizzazione delle posizioni assumibili
dalle particelle in moto.
21. FASI DELLA DINAMICA
Propagazione: le particelle di fluido si
spostano verso le posizioni adiacenti, lungo
le direzioni.
Collisione: le particelle arrivate in un nodo
evolvono verso uno stato di equilibrio.
Ricolorazione: le particelle all’interno delle
zone di contatto tra i due fluidi vengono
redistribuite lungo le direzioni, in modo tale
da spingerle verso particelle dello stesso
fluido.
22. CODICE
Il codice prodotto in CUDA contiene 5
kernel.
I primi 4 eseguono i calcoli relativi ad ogni
pixel delle immagini, mentre l’ultimo ne
assegna la colorazione per la resa grafica.
La divisione dei kernel è risultata necessaria
per evitare dipendenze WAW, RAW o WAR.
26. CONCLUSIONI
Com’era prevedibile, i test riguardanti il confronto tra il codice scritto in
Matlab eseguito su una CPU e il corrispettivo in CUDA, hanno mostrato
una netta superiorità del secondo rispetto al primo.
Altri test sulla variazione del numero di thread hanno mostrato che andando
ad eccedere sempre più nel numero di blocchi rispetto al numero di CUDA
core disponibili, avviene un rallentamento nell’esecuzione, in quanto
rimangono troppi thread in attesa.
I test sulla scalabilità hanno mostrato, invece, che non è possibile aumentare
di molto la dimensione del modello. Questo probabilmente dovuto alla
situazione di divergenza che si viene a creare nel kernel di ricolorazione e alla
mancanza di ottimizzazione delle risorse che CUDA mette a disposizione, in
particolare le diverse memorie.