SlideShare a Scribd company logo
1 of 26
Download to read offline
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
OBBIETTIVO

     Il riadattamento su GPU con
architettura CUDA di un codice scritto
  in Matlab per la simulazione della
  dinamica di due fluidi immiscibili.
Introduzione

GPU & CUDA
GPU
      Graphics Processing Units

E’ l’unità di eleaborazione delle schede
 grafiche e quindi è ottimizzato per la
         resa grafica di immagini.
GPU
     Architettura di tipo SIMD
(Single Instruction, Multiple Data)




      CPU               GPU
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.
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.
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.
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.
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.
PARALLELISMO IN CUDA
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.
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.
CUDA

PROGRAMMAZIONE
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.
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);
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.
PROGRAMMA

SIMULAZIONE
DECOMPOSIZIONE SPINODALE
E’ un meccanismo per il quale una miscela
    di due componenti si separa in due
          distinte regioni (o fasi).
METODI RETICOLARI DI BOLTZMANN
Sono algoritmi utilizzati per la simulazione
   della dinamica di fluidi, basati sulla
discretizzazione delle posizioni assumibili
         dalle particelle in moto.
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.
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.
TEST & CONCLUSIONI
AMBIENTE DI LAVORO
Hardware:
- Scheda grafica NVIDIA GeForce GTX 460
(costo:200euro nel 2010)
- Processore Intel Core i7 X990
(costo: 1000euro 6 mesi fa)
Software:
- Sistema operativo Windows 7 Enterprise,
64-bit
- CUDA Toolkit 4.1
- NVIDIA Driver 295.73
TEST
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.

More Related Content

Similar to [SLIDE]Modellazione della dinamica di un liquido bifase mediante GPU CUDA

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
 
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
 
OpenCL - Introduzione al framework OpenCL
OpenCL - Introduzione al framework OpenCLOpenCL - Introduzione al framework OpenCL
OpenCL - Introduzione al framework OpenCLFrancesco Garofalo
 
Thanatos - Parallel & Distributed Computing
Thanatos -  Parallel & Distributed ComputingThanatos -  Parallel & Distributed Computing
Thanatos - Parallel & Distributed ComputingIdriss Riouak
 
A query-to-hardware compiler for FPGA architectures
A query-to-hardware compiler for FPGA architecturesA query-to-hardware compiler for FPGA architectures
A query-to-hardware compiler for FPGA architecturesEnrico Cambiaso
 
Presentazione - Algoritmo di Dijkstra
Presentazione - Algoritmo di DijkstraPresentazione - Algoritmo di Dijkstra
Presentazione - Algoritmo di DijkstraMassimoPalmisano
 
Hadoop [software architecture recovery]
Hadoop [software architecture recovery]Hadoop [software architecture recovery]
Hadoop [software architecture recovery]gioacchinolonardo
 
MITM Attack with Patching Binaries on the Fly by Adding Shellcodes
MITM Attack with Patching Binaries on the Fly by Adding ShellcodesMITM Attack with Patching Binaries on the Fly by Adding Shellcodes
MITM Attack with Patching Binaries on the Fly by Adding ShellcodesGianluca Gabrielli
 
October 2009 - JBoss Cloud
October 2009 - JBoss CloudOctober 2009 - JBoss Cloud
October 2009 - JBoss CloudJBug Italy
 
JBoss Clouds - JBug Roma october 2009
JBoss Clouds -  JBug Roma october 2009JBoss Clouds -  JBug Roma october 2009
JBoss Clouds - JBug Roma october 2009Sanne Grinovero
 
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxPIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxMarco Ferrigno
 

Similar to [SLIDE]Modellazione della dinamica di un liquido bifase mediante GPU CUDA (20)

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...
 
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
 
OpenCL - Introduzione al framework OpenCL
OpenCL - Introduzione al framework OpenCLOpenCL - Introduzione al framework OpenCL
OpenCL - Introduzione al framework OpenCL
 
Tesi
TesiTesi
Tesi
 
Assemblare un pc
Assemblare un pcAssemblare un pc
Assemblare un pc
 
Lezioni 2009
Lezioni 2009Lezioni 2009
Lezioni 2009
 
Thanatos - Parallel & Distributed Computing
Thanatos -  Parallel & Distributed ComputingThanatos -  Parallel & Distributed Computing
Thanatos - Parallel & Distributed Computing
 
Thanatos
ThanatosThanatos
Thanatos
 
A query-to-hardware compiler for FPGA architectures
A query-to-hardware compiler for FPGA architecturesA query-to-hardware compiler for FPGA architectures
A query-to-hardware compiler for FPGA architectures
 
Gpu
GpuGpu
Gpu
 
Presentazione - Algoritmo di Dijkstra
Presentazione - Algoritmo di DijkstraPresentazione - Algoritmo di Dijkstra
Presentazione - Algoritmo di Dijkstra
 
Hadoop [software architecture recovery]
Hadoop [software architecture recovery]Hadoop [software architecture recovery]
Hadoop [software architecture recovery]
 
Thesis Amicucci Slides IT
Thesis Amicucci Slides ITThesis Amicucci Slides IT
Thesis Amicucci Slides IT
 
Hadoop SAR
Hadoop SARHadoop SAR
Hadoop SAR
 
MITM Attack with Patching Binaries on the Fly by Adding Shellcodes
MITM Attack with Patching Binaries on the Fly by Adding ShellcodesMITM Attack with Patching Binaries on the Fly by Adding Shellcodes
MITM Attack with Patching Binaries on the Fly by Adding Shellcodes
 
October 2009 - JBoss Cloud
October 2009 - JBoss CloudOctober 2009 - JBoss Cloud
October 2009 - JBoss Cloud
 
JBoss Clouds - JBug Roma october 2009
JBoss Clouds -  JBug Roma october 2009JBoss Clouds -  JBug Roma october 2009
JBoss Clouds - JBug Roma october 2009
 
3rd 3DDRESD: BSS
3rd 3DDRESD: BSS3rd 3DDRESD: BSS
3rd 3DDRESD: BSS
 
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxPIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
 
Thread
ThreadThread
Thread
 

[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.
  • 24. AMBIENTE DI LAVORO Hardware: - Scheda grafica NVIDIA GeForce GTX 460 (costo:200euro nel 2010) - Processore Intel Core i7 X990 (costo: 1000euro 6 mesi fa) Software: - Sistema operativo Windows 7 Enterprise, 64-bit - CUDA Toolkit 4.1 - NVIDIA Driver 295.73
  • 25. TEST
  • 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.