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