Master II livello in calcolo scientifico Programmazione avanzata
Transcript
Master II livello in calcolo scientifico Programmazione avanzata
Master II livello in calcolo scientifico Programmazione avanzata & Librerie scientifiche Master in Calcolo Scientifico - 2008/2009 Marco Rorro [email protected] 1 Questionario Nome e cognome e-mail Laurea • Quale linguaggio di programmazione conoscete? Bene Abbastanza Per niente Fortran C Altro • In quale ambiente lavorate abitualmente? Windows Unix Linux Altro • Quale architettura conoscete? Bene Abbastanza Bene Abbastanza Poco IBM/Power Intel/AMD Mac Altra • Mai sentito parlare di... Cache Memoria virtuale TLB Pipeline registri • Esperienze di calcolo ad alte prestazioni ... 2 Per niente Finalità del corso: • Fornire strumenti per misurare e valutare le prestazioni di un codice; • Fornire conoscenze di tecniche e/o trucchi per aumentare le prestazioni; • Usare proficuamente librerie tecniche/scientifiche; • Pianificare le simulazioni ed il corretto sfruttamento delle risorse hardware; • Lo scopo finale è quello di ridurre il tempo totale della/e simulazione/i. • Non è un corso di programmazione..... • Non è un corso di software engineering 3 Prerequisiti: • Conoscenza di un linguaggio di programmazione come – fortran –C – .... • Conoscenza di sistemi operativi: – Unix – Linux • Materiali di supporto (opzionali): – http://www.star.le.ac.uk/˜cgp/fortran.html – http://www.owlnet.rice.edu/˜mech517/books – http://www.doc.ic.ac.uk/˜wjk/UnixIntro/ – http://www.faqs.org/docs/artu/ – http://unix.t-a-y-l-o-r.com/ – ... – http://www.strath.ac.uk/IT/Docs/Ccourse/ – http://www.cs.cf.ac.uk/Dave/C/CE.html • ... • Il codice da ottimizzare (se esistente) già debbuggato 4 Organizzazione corso: Argomenti principali trattati: • Architettura di un calcolatore – Gerarchia di Memoria – Pipeline di calcolo – Memoria Virtuale (cenni) • Tecniche di ottimizzazione • Profiling di un codice • Implementazione efficiente di algoritmi • Uso compilatori ed opzioni di compilazioni • Librerie matematiche – Blas e Atlas – Lapack – .... 5 Struttura delle lezioni: 1. Ottimizzazione seriale: introduzione 2. Architettura di computer: il sistema di memoria 3. Architettura di computer: pipeline 4. Architettura di computer: la memoria virtuale 5. Misura delle prestazioni: il profiling 6. Misura delle prestazioni: Hardware counters 7. Algoritmi, implementazioni e prestazioni 8. Uso efficente del compilatore 9. Librerie matematiche: pregi e difetti 10. Librerie Lapack, Atlas, .... 11. Input/Output (Cenni) 12. Calcolo floating point 13. “Buona Programmazione” 14. Calcolo vettoriale (?) 6 Argomenti trattati nella lezione: • Calcolo scientifico e calcolo ad alte prestazioni • Perché andare veloci? • Come andare più veloci? • A quale prezzo? • Esempi vari: – Uso efficiente risorse hardware/software – Uso differenti algoritmi – Uso differenti implementazioni – Uso compilatore – Uso strumenti di profiling – Uso librerie ottimizzate – Buona programmazione 7 Calcolo scentifico e calcolo ad alte prestazioni L’obiettivo è l’abbattimento del tempo di calcolo per problemi computazionalmente onerosi, ovvero: • “grande” quantità di dati • “grande” quantità di operazioni • evoluzioni temporali “lunghe” • risposte in tempo reale Esempi classici • Data mining • Meteorologia • Fisica delle alte particelle • Cosmologia (Onde gravitazionali....) • Strumenti di controllo (Medicina nucleare,....) • Fluidodinamica computazionale (CFD) • Matematica finanziaria 8 Calcolo ad alte prestazioni: strumenti Si può provare a ridurre il tempo totale: • usando differenti algoritmi; • provando nuove implementazioni; • sfruttando meglio le risorse hardware & software; • usando processori piú potenti; • facendo uso del parallelismo (argomento non trattato). È quindi necessario conoscere approfonditamente: • gli algoritmi fondamentali; • l’architettura di un processore; • gli strumenti di sviluppo software (e.g. profiling); • l’impatto di differenti implementazioni sulle prestazioni • i prodotti software presenti. 9 Calcolo ad alte prestazioni: costi Il fine è quello di raggiungere l’obiettivo fissato ed usare efficientemente le risorse. Oneri aggiuntivi: • ristrutturazione e revisione dei codici • livelli aggiuntivi di ottimizzazione • riduzione della portabilità – specializzazione sull’architettura – specializzazione sulla configurazione – specializzazione sul problema Verificare: • obiettivi • fattibilità • fin dove ha senso spingersi? (le risorse umane sono costose e limitate) 10 Calcolo ad alte prestazioni: a chi interessa? Il calcolo ad alte prestazioni è indispensabile per chi: • ha vincoli temporali: deve avere una risposta entro un certo tempo; • ha vincoli economici: non può permettersi un calcolatore piú potente; • ha vincoli tecnico-pratico: un calcolatore piú potente non é funzionale; • ha vincoli progettuali: non esiste un calcolatore cosı́ potente; • molte simulazioni brevi o poche molto lunghe; • .... Il calcolo ad alte prestazioni non è indispensabile per chi: • usa il calcolatore solo saltuariamente; • quando il tempo per analizzare i dati è superiore del tempo per ottenerli (però.....); • usa solo un word-processor... 11 Uso efficiente della CPU • eliminare operazioni inutili e dipendenze • esplicitare indipendenze e sovrapposizioni • sostituire operazioni ’leggere’ a quelle ’pesanti’ • bilanciare operazioni ed accessi in memoria • usare bene la memoria • memorizzare o ricalcolare? Strumenti: • compilatore • editor Rischi: • codice illeggibile • prestazioni non portabili.... 12 Sfruttamento risorse hardware/software Attenti ai compilatori (Linux) • P4 1300 Mhz • Trasposizione matrice 4096*4069 con blocking • Tempi in secondi • Compilatore fortran gnu (f77) • Compilatore fortran Portland Group (pgf77) • Compilatore fortran Lahey/Fujitsu (lf95) size 1 2 4 8 16 32 64 128 256 512 1024 f77 pgf77 lf95 4.210 1.809 1.230 0.949 0.860 0.789 0.770 0.829 0.829 0.840 0.979 2.810 1.580 0.889 0.579 0.430 0.360 0.320 0.439 0.420 0.409 0.510 2.640 1.619 0.909 0.579 0.449 0.380 0.350 0.470 0.460 0.449 0.570 13 Algoritmo o Macchina? Evoluzione dell’algoritmo risolutivo per equazioni ellitiche 3D Metodo Eliminazione Gaussiana SOR (suboptimal) SOR (optimal) Cyclic Reduction Multigrid Anno Complessitá 1945 N7 1954 8N 5 1960 8N 4 log(N ) 1970 8N 3 log(N ) 1978 60N 3 . Evoluzione delle macchine: Macchina Manchester Mark1 IBM 701 IBM Stretch CDC 6600 CDC 7600 Cray-1 Cray-2 14 Anno Mflops 1947 0.0002 1954 0.003 1960 0.3 1964 2 1969 5 1976 50 1985 125 Caso 643: Tratto da: Bentley, J., “More Programming Pearls: Confessions of a Coder”, Addison-Wesley, 1988 15 Differente Implementazione (I) Soluzione sistema triangolare L · x̂ = b̂ Dove: • L Matrice n ∗ n triangolare inferiore • b̂ vettore di n termini noti • x̂ vettore di n incognite Questo sistema é risolvibile tramite: • Sostituzione • Partizionamento matrice Esempio tratto da: Stewart, G. W.,“Afternotes on Numerical Analysis”, SIAM Publishing, 1996 16 Differente Implementazione (II) Soluzione sistema triangolare (forward substitution) b1 b2 b3 b4 = = = = l11 · x1 l21 · x1 + l22 · x2 l31 · x1 + l32 · x2 + l33 · x3 l41 · x1 + l42 · x2 + l43 · x3 + l44 · x4 x1 x2 x3 x4 = = = = b1/l11 (b2 − l21 · x1)/l22 (b3 − l31 · x1 − l32 · x2)/l33 (b4 − l41 · x1 − l42 · x2 − l43 · x3)/l44 parameter(n=5000) ..... do i = 1, n do j = 1, i-1 b(i) = b(i) - L(i,j)*x(j) enddo x(i) = b(i)/L(i,i) enddo ..... <amatig@vulcano SRC>diag1.sun4 Calcolo sistema L * y = b tempo risoluzione 2.6174583435059 Errore massimo 1.4489520694383D-11 17 Differente Implementazione (III) Soluzione sistema triangolare (partizionamento matrice) 0 l11 li1 L22 x1 · xi b1 = bi l11 · x1 = b1 li1 · x1 +L22 · xi = bi parameter(n=5000) ..... do j = 1, n y(j) = b(j)/L(j,j) do i = j+1,n b(i) = b(i) - L(i,j)*y(j) enddo enddo ..... <amatig@vulcano SRC>diag2.sun4 Calcolo sistema L * y = b tempo risoluzione 0.43309712409973 Errore massimo= 1.4489520694383D-11 • Perchè questa differenza tra i tempi (fattore 6)? 18 Uso librerie matematiche Prodotto matrice matrice, confonto tra: • Codice scritto a mano • Subroutine DGEMM (libreria BLAS) c--------------------------------------------------parameter(nd=1000) real*8 a(nd,nd), b(nd,nd) real*8 c(nd,nd), d(nd,nd) c---------------------------------------------------------c BLAS level 3 .... call DGEMM(’N’,’N’,nd,nd,nd,1.d0,a,nd,b,nd,0.d0,c,nd) .... c---------------------------------------------------------c Versione a manina .... do j = 1, nd do i = 1, nd do k = 1, nd d(i,j) = d(i,j) + a(i,k)*b(k,j) enddo enddo enddo .... DGEMM-------------------------Velocita (Mflops) ----> 560.841024000000 Tempo (secondi) ----> 3.566073 Manina-------------------------Velocita (Mflops) ----> 174.033072000000 Tempo (secondi) ----> 11.49207 19 Pianificazioni e misura delle prestazioni Attenzione alla taglia del problema: • Prodotto matrice-matrice usando differenti subroutine della libreria BLAS: – 1 chiamata alla routine DGEMM – n chiamate alla routine DGEMV (prodotto matrice-vettore) – n2 chiamate alla routine DDOT (prodotto scalare vettorevettore) • IBM Power3, 375 Mhz • Performance in Mflops Size DGEMM DGEMV DDOT ------------------------125 667 571 363 250 970 592 390 500 1108 552 60 1000 1152 195 28 2000 1291 230 14 20 Compilatori & Processori Tempi per prodotto matrice-matrice su differenti architetture e compilatori • IBM xlf su Power3 a 375 Mhz; • Compaq f77 su EV6 a 500 Mhz; • Portland pgf77 su AMD XP1800 a 1533 Mhz. Opzione IBM xlf (s) Compaq f77 (s) Portland pgf77 (s) -O0 176 185 32.0 -O1 237 30.9 -O2 121 115 29.6 -O3 122 98.1 -O4 3.1 98.4 -O5 3.8 4.9 - • Qual’é il processore migliore? • Qual’é il compilatore più efficiente? 21 Esercizio: • http://www.caspur.it/˜amatig/DISPENSE/dispense.html – esercitazione 1 • Calcolare il prodotto matrice-matrice di due matrici quadrate – Completate il codice (in c e/o in fortran) – Quanti MFLOPS si ottengono ? 22 Bibliografia • K. Dowd; High Perfromances computing. O’Reilly, 2nd edition (1998). • D. A. Patterson, J. L. Hennessy; Computer Organization & Design. Morgan Kaufmann Pub. Inc. (1997) • G. W. Stewart; Afternotes on Numerical Analysis. SIAM pub. (1996) • Bentley, J.; More Programming Pearls: Confessions of a Coder. Addison-Wesley (1988); 23 Materiale • Materiale Corso – http://www.caspur.it/˜rorro/DISPENSE – http://www.caspur.it/˜amatig/DISPENSE/dispense.html 24