ebook img

Risoluzione delle equazioni di Navier Stokes su scheda grafica PDF

66 Pages·2011·1.88 MB·Italian
by  
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Risoluzione delle equazioni di Navier Stokes su scheda grafica

POLITECNICO DI MILANO FACOLTA DI INGEGNERIA DEI SISTEMI Corso di Laurea in Ingegneria Matematica Risoluzione delle equazioni di Navier Stokes su scheda grafica Progetto del Corso di Programmazione Avanzata per il Calcolo Scienti(cid:28)co Alberto CRIVELLARO Nicoletta PAPUCCI 751750 750733 Anno Accademico 2010/2011 Introduzione Questo documento descrive la realizzazione di un software per simulazioni in (cid:29)uidodinamicasviluppatonelquadrodelcorsodiProgrammazioneAvanzata per il Calcolo Scienti(cid:28)co, AA 2010/2011. Scopo di questo lavoro Ł l’imple- mentazione di un algoritmo risolutivo per le equazioni di Navier-Stokes per (cid:29)uidiincomprimibilibasatosutecnichedicalcoloparallelosuschedagra(cid:28)ca. Una scheda gra(cid:28)ca (GPU) possiede una struttura intrinsecamente paral- lela e ottimizzata per il calcolo di semplici operazioni su larghe quantit(cid:224) di dati; Ł possibile sfruttare tali caratteristiche per eseguire in parallelo operazioni che esulano dalla semplice gestione delle visualizzazione su un computer. Questo approccio, chiamato GPGPU (General Purpose computation on GPU),direcenteintroduzione,Łattualmenteinpienaespansioneinnumerosi settori. inparticolarestarivoluzionandoilmondodelcalcoloscienti(cid:28)comod- erno, o(cid:27)rendo prestazioni di calcolo molto maggiori rispetto alle tradizionali implementazioni su CPU e permettendo simulazioni real time e interattive. L’impiego del calcolo parallelo su GPU permette di aumentare notevol- mente la velocit(cid:224) di calcolo, ma Ł necessario un ripensamento degli algoritmi risolutivi tradizionali per renderli parallelizzabili e tenere in conto i vincoli legati alla struttura delle GPU, meno (cid:29)essibili delle CPU tradizionali. In questo lavoro si fa uso di CUDA, un’interfaccia di programmazione per il GPGPU su schede gra(cid:28)che NVIDIA; si tratta di una tecnologia di recen- tissima introduzione (2007) e in piena evoluzione. In particolare, si imple- mentano due algoritmi risolutivi per le equazioni di Navier-Stokes, uno per condizioni al bordo periodiche e uno per condizioni di Dirichlet. Sono im- plementate anche tutte le routines necessarie per la gestione dei dati e per la visualizzazione in tempo reale della simulazione. Nel capitolo 1 si introducono alcuni elementi di base su CUDA e su OpenGL; nel capitolo 2 si descrivono in dettaglio gli algoritmi di risoluzione per le equazioni di Navier-Stokes (in particolare si fa uso del metodo di proiezione di Chorin-Temam accoppiato con un metodo spettrale di Fourier- Galerkin). Nel capitolo 3 sono descritti la struttura del codice e gli aspetti implementativi piø importanti. In(cid:28)ne nel capitolo 4 si e(cid:27)ettua un’analisi del simulatore basata sui risultati di prove numeriche. iii Indice Introduzione iii 1 Elementi di CUDA e OpenGL 1 1.1 Struttura di una GPU . . . . . . . . . . . . . . . . . . . . . . 1 1.2 CUDA per il calcolo scienti(cid:28)co . . . . . . . . . . . . . . . . . 2 1.3 Installazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.4 Elementi di base: kernels . . . . . . . . . . . . . . . . . . . . . 3 1.5 Memoria della GPU . . . . . . . . . . . . . . . . . . . . . . . 4 1.6 Coalescenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.7 Compilazione . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.8 OpenGL - compatibilit(cid:224) con CUDA . . . . . . . . . . . . . . . 7 2 Equazioni di riferimento e algoritmo di risoluzione 11 2.1 Le equazioni di Navier-Stokes per (cid:29)uidi incomprimibili . . . . 11 2.2 Il metodo di proiezione di Chorin-Temam . . . . . . . . . . . 12 2.3 Il metodo di Fourier Galerkin . . . . . . . . . . . . . . . . . . 13 3 Aspetti implementativi 17 3.1 Installazione di Offf. . . . . . . . . . . . . . . . . . . . . . . 17 3.1.1 Compilazione automatica su sistemi Linux-based . . . 18 3.2 Strutture dati e organizzazione del codice . . . . . . . . . . . 18 3.2.1 Overview del programma . . . . . . . . . . . . . . . . 18 3.3 Struttura a oggetti: classi . . . . . . . . . . . . . . . . . . . . 19 3.3.1 Alcune scelte stilistiche . . . . . . . . . . . . . . . . . 26 3.4 Kernels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.5 Funzioni e routines per la gestione della visualizzazione . . . . 29 3.6 Lettura di parametri a runtime: il (cid:28)le config.txt . . . . . . 31 3.7 Librerie e plug-in esterni . . . . . . . . . . . . . . . . . . . . . 32 v 4 Risultati numerici 35 4.1 Settaggio parametri . . . . . . . . . . . . . . . . . . . . . . . . 35 4.2 Test e(cid:27)ettuati . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4.2.1 Test di convergenza . . . . . . . . . . . . . . . . . . . 36 4.2.2 Confronto CUDA vs Matlab . . . . . . . . . . . . . . . 37 4.2.3 Confronto su GPU diverse . . . . . . . . . . . . . . . . 38 4.3 Il pro(cid:28)ler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.4 Conclusioni. Prospettive . . . . . . . . . . . . . . . . . . . . . 41 A FFT, DCT e DST 45 B Codice Matlab 55 Bibliogra(cid:28)a 57 vi Elenco delle (cid:28)gure 1.1 Operazioni (cid:29)oating point al secondo: paragone tra CPU e GPU. 2 1.2 Struttura di una griglia . . . . . . . . . . . . . . . . . . . . . 3 1.3 Organizzazione gerarchica della memoria di una GPU (da [1]). 5 2.1 Schema di risoluzione per condizioni al bordo periodiche. . . . 14 2.2 Schema di risoluzione per condizioni al bordo di Dirichlet. . . 16 3.1 Diagramma UML delle classi di Offf. . . . . . . . . . . . . . 19 3.2 I due tipi di visualizzazione . . . . . . . . . . . . . . . . . . . 30 4.1 Norma L2 della velocit(cid:224) orizzontale dopo 100 iterazioni(sin.) e dopo 500 iterazioni (dx.). . . . . . . . . . . . . . . . . . . . 37 4.2 Screenshot dell’output del CUDA pro(cid:28)ler. . . . . . . . . . . . 39 4.3 OFFF periodico: non coalescente vs coalescente. . . . . . . . 40 4.4 GPU-time per inizializzare BC_periodic . . . . . . . . . . . . 40 4.5 BC_dirichlet : utilizzazione della GPU . . . . . . . . . . . . . 41 A.1 Schema della DST ottimizzata. . . . . . . . . . . . . . . . . . 54 vii 1 Capitolo Elementi di CUDA e OpenGL CUDA Ł un’architettura hardware per l’elaborazione parallela creata da NVIDIA nel novembre del 2006. Tramite il suo ambiente di sviluppo, Ł possibile scrivere codici general pourpose che sfruttano le capacit(cid:224) di calcolo parallelo delle GPU (Graphics Processing Units) Nvidia. CUDA Ł stato sviluppato in modo da supportare vari linguaggi di programmazione, come Fortran, Matlab o Java. Quello maggiormente utilizzato Ł il CUDA C. CUDA fornisce due di(cid:27)erenti API (Application Programming Interface), una di basso livello e una di livello superiore, le cui caratteristiche sono dettagliate nella sezione 1.7. Il primo CUDA SDK (Software Development Kit) Ł stato reso pubblico nel febbraio del 2007 per Microsoft Windows e Linux. Da allora ogni anno ne esce una nuova versione, ed Ł stato aggiunto il supporto per Mac OS X. Le moderne GPU sono dei sistemi multi-core altamente parallelizzati, ed Ł possibile sfruttare la loro struttura intrinsecamente parallela per e(cid:27)ettuare calcoli estremamente esigenti per i quali le tradizionali architetture CPU non hanno una capacit(cid:224) di elaborazione su(cid:30)ciente. Per questo motivo si Ł sviluppatonegliultimianniunsettoredellaricercainformatica, laGPGPU (General-Purpose computing on Graphics Processing Units) che ha come obiettivo l’utilizzo del processore della scheda gra(cid:28)ca per scopi diversi dalla tradizionale gestione di immagini sullo schermo. 1.1 Struttura di una GPU In questa sede non entriamo nei dettagli dell’architettura di una GPU. Ai (cid:28)ni della trattazione Ł comunque utile sapere che : • una GPU possiede un’architettura specializzata per e(cid:27)ettuare calcoli intensivi e altamente paralleli; • rispettoadunaCPU,moltipiøtransistorisonooccupatidalprocessing dei dati, e molti meno dalla gestione della memoria; 1 Capitolo 1 Elementi di CUDA e OpenGL Figura 1.1: Operazioni (cid:29)oating point al secondo: paragone tra CPU e GPU. • una GPU esegue un programma in parallelo su ogni dato, quindi non necessita alcun controllo accurato di (cid:29)usso; • in una GPU l’intensit(cid:224) aritmetica, cioŁ il rapporto tra le operazioni aritmetiche e quelle di memoria, Ł molto alta; per questo la latenza di accesso alla memoria pu(cid:242) essere notevolmente ridotta. Queste caratteristiche intrinseche delle schede gra(cid:28)che spiegano il loro crescente utilizzo nell’analisi di grandi quantit(cid:224) di dati con la program- mazione parallela. 1.2 CUDA per il calcolo scienti(cid:28)co La programmazione su GPU spalanca orizzonti allettanti per il calcolo sci- enti(cid:28)co. L’esecuzione in parallelo degli algoritmi di risoluzione di equazioni alle derivate parziali permette un notevole incremento della velocit(cid:224) di cal- colo tanto da permettere simulazioni non stazionarie in real time, con la possibilit(cid:224) di modi(cid:28)care in ogni momento forzanti, condizioni al contorno, etc.. D’altro canto, proprio in virtø della peculiare struttura della GPU, Ł spesso necessario un ripensamento degli algoritmi di calcolo per bene(cid:28)ciare di tutte le sue potenzialit(cid:224). Questo sforzo di ri-concepimento degli algoritmi Ł eseguito da anni nell’ambito dei videogiochi e dell’intrattenimento, dove per(cid:242) lo scopo Ł quello di ottenere nel modo piø rapido possibile simulazioni verosimili piuttosto che accurate. Il lavoro di adattamento dei tradizionali strumenti dell’analisi numerica per il GPGPU Ł ancora un processo in pieno svolgimento, dicui questoprogettovuoleessereun modestissimocontributo. 1.3 Installazione Perpotersfruttarelecapacit(cid:224)diCUDAŁnecessarioavereunaschedagra(cid:28)ca Nvidia compatibile, il cui elenco Ł presente all’indirizzo http://developer. 2

Description:
mentazione di un algoritmo risolutivo per le equazioni di Navier-Stokes per fluidi incomprimibili basato su . Le moderne GPU sono dei sistemi multi-core altamente parallelizzati, ed è possibile sfruttare la loro struttura Springer. [7] A. J. Chorin. Numerical solution of the navier-stokes equatio
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.