pag..

Transcript

pag..
Corso di Architettura
degli Elaboratori
Valutazione delle prestazioni
DOCENTE Luigi Palopoli
AA. 2011/2012
Valutare le
Prestazioni
•
•
La complessita’ di un moderno calcolatore rende la
valutazione delle prestazioni tutt’altro che banale
Quando si parla di prestazioni, e’ importante capire:
★ Di quali prestazioni parliamo
★ Come si misurano
Definizione di
Prestazioni
•
Consideriamo i seguenti aereoplani
•
Supponiamo che la metrica di interesse sia la velocita’.
Definizione delle
Prestazioni
•
•
Cosa intendiamo per velocita’?
Possibili definizioni:
★ Trasportare un singolo passegero da un luogo a un altro nel
minor tempo possibile
(Vincitore Concorde)
★ Trasportare 450 passegeri nel minor tempo possibile
(Vincitore Boeing 747)
Definizione delle
Prestazioni
•
Analogamente per un calcolatore desktop possiamo avere
due tipi di prestazioni.
★ Per il singolo utente interessa sapere quanto e’ il tempo medio
di risposta (tempo che intercorre tra avvio e terminazione di
un task)
★ Per il gestore di un centro di calcolo, interessa di piu’ il
throughput, cioe’ quanti task sono in grado di completare
nell’unita’ di tempo
Esempio
•
Se scelgo un processore piu’ veloce miglioro il throughput
o il tempo di risposta?
Entrambi
•
Se uso un multiprocessore miglioro il throughput o il tempo
di risposta?
Il throughput
almeno a
parita’ di processore
Tuttavia, se il sistema
e’ molto carico,
diminuisco il tempo di
attesa, e quindi
il tempo di risposta
•
•
Tempo di
Esecuzione
In questo corso, definiremo le prestazioni sopratutto in
termini di tempo di esecuzione
Per un calcolatore X
PrestazioniX =
•
1
Tempo di esecuzioneX
Quindi, dati due calcolatori diremo:
PrestazioniX ≥ PrestazioniY ↔
Tempo di esecuzioneX ≤ Tempo di esecuzioneY
•
Tempo di
Esecuzione
Analogamente diremo che il calcolatore X e’ n volte
superiore (piu’ veloce) del calcolatore Y se e solo se:
PrestazioniX
=n
PrestazioniY
•
Ma cosa si intende per tempo di esecuzione?
Il tempo di esecuzione di un
programma e’ il suo tempo di risposta:
cioe’ quanto tempo occorre per il
completamento di un task (mettendo
insieme esecuzione, IO, latenze di sistema
operativo, ecc. )
•
•
•
Tempo di
Esecuzione
In una macchina multiprogrammata il tempo di risposta dipende anche
dagli altri task attivi e dalle loro priorita’
Il tempo di esecuzione della CPU tiene conto solo del tempo
effettivamente speso per il task
Tale tempo e’ in parte dedicato al programma utente e in parte al sistema
operativo
Interferenza
dovuta
Tempo di CPU
Agli altri task
Tempo di Risposta
Utente
Tempo di
esecuzione
Tempo di CPU
della CPU
Sistema
Capire le Prestazini
•
•
•
•
I moderni processori, come vedremo, sono costruiti usando un
segnale periodico che ne sincronizza le operazioni
Il ciclo di clock e’ l’intervallo di tempo che intercorre tra due
colpi di clock (la frequenza ne e’ l’inverso)
Il ciclo di clock e’ misurato in secondi (o in frazioni di secondo), la
frequenza in Hertz (o equivalentemente in cicli al secondo)
Ad esempio un clock che va a un Gigahertz (10^9 Hertz) equivale
a un periodo di clock pari a 10^-9 secondi (un miliardesimo di
secondo)
Calcolo del
Tempo di CPU
•
Il tempo di calcolo di un programma puo’ essere espresso
nella seguente maniera
Tempo CPU Programma = Cicli di clock della CPU × Periodo del Clock
Cicli di clock della CPU
=
Frequenza del Clock
Esempio
Il nostro programma esegue in 10s sul calcolatore
A che e’ dotato di un clock che funziona a 2GhZ. Un
progettista vuole proporci una nuova architettura
che puo’ operare a frequenze significativamente
piu’ alte. Propone una modifica al processore che
porterebbe ad aumentare di un fattore 1.2 i cicli
macchina necessari a eseguire le varie istruzioni.
A che frequenza dovrebbe operare la macchina per
portare il nostro programma a eseguire in 6s?
Esempio
•
Come prima cosa calcoliamo i cicli di clock sul computer A
Cicli di clock della CPUA
Frequenza del ClockA
Cicli di clock della CPUA
10s =
2 × 109
Cicli di clock della CPUA = 20 × 109 cicli
Tempo CPU ProgrammaA =
•
Ora possiamo calcolare la frequenza di clock necessaria
1.2 × Cicli di clock della CPUA
Frequenza del ClockB
1.2 × 20109
6s =
Frequenza del ClockB
1.2 × 20109
Frequenza del ClockB =
6s
= 4Ghz
Tempo CPU ProgrammaB =
Numero di cicli
•
Il numero di cicli richiesto da un programma e’
influenzato dal numero di istruzioni che compongono il
programma
Tale numero viene moltiplicato per il numero di cicli
medio richiesto da ciascuna istruzione
•
Cicli di clock della CPU = Istruzioni del Programma
Numero medio di cicli per istruzione
•
×
Il numero medio di cicli per istruzione viene denotato da
CPI
Esempio
Siano date due diverse implementazioni della stessa
ISA. La prima (A) ha un ciclo di clock di 250ps, la
seconda (B) di 500ps. Nel programma di riferimento
che ha numero di istruzioni I
il CPI e’ pari a 2.0 per A e a 1.2 per B. Quale delle due
architetture esegue piu’ rapidamente il nostro
programma?
Esempio
•
Architettura A
Tempo di CPUA = Cicli di ClockA × Periodo di ClockA
= Istruzioni del Programma × CPIA × Periodo di ClockA
= I × 2.0 × 250ps
•
= I × 500ps
Architettura B
Tempo di CPUB = Cicli di ClockB × Periodo di ClockB
= Istruzioni del Programma × CPIB × Periodo di ClockB
= I × 1.2 × 500ps
= I × 600ps
Esempio
•
Da questo concludiamo
Prestaz. CPUA
Tempo CPUB
600
=
=
= 1.2
Prestaz. CPUB
Tempo CPUA
500
Equazione Classica
•
Siamo ora in grado di scrivere l’equazione classica delle
prestazioni
Tempo CPU = Numero Istruzioni × CPI × Periodo Clock
Numero Istruzioni × CPI
=
Frequenza Clock
Esempio di Uso
•
Un progettista di compilatori deve scegliere tra due
sequenze di codice per implementare un certo tipo di
programma
CPI per tipo
di Istruzione
Istruzioni di
ciascun tipo
Istr/ A B C
CPI
1 2 3
Sequenza A B C
Seq. 1
Seq. 2
2 1 2
4 1 1
Soluzione
•
Possiamo calcolare il numero di cicli richieste da ciascuna
sequenza usando la formula:
Cicli CPUi =
n
�
i=1
(CP Ii × Ci )
Cicli CPU1 = (2 × 1) + (1 × 2) + (2 × 3) = 10
Cicli CPU2 = (4 × 1) + (1 × 2) + (1 × 3) = 9
10
CPI1 =
=2
5
9
CPI2 = = 1.5
6
•
Quindi conviene l’architettura 2
•
•
Tirando un
po’ di somme...
La maniera migliore di valutare le prestazioni di una computer e’
di misurare il tempo necessario per l’esecuzione di un
programma
Tale tempo e’ il risultato di tre fattori:
★ Numero istruzioni
★ CPI
★ Frequenza di clock
Componenti delle
prestazioni
•
•
Nessuna delle tre componenti puo’ essere trascurata
★ Non ha nessun senso dire che un processore e’ piu’ veloce di
un altro perche’ ha un clockrate piu’ alto
Ha dunque senso cercare di capire come i diversi
componenti e gli strumenti usati nello sviluppo abbiano
impatto sulle prestazioni (in particolare su ciascuna dei tre
fattori)
Algoritmo
•
•
L’algoritmo adottato certamente influenza il numero di
istruzioni ed eventualmente il CPI
Perche’?
★ Un algoritmo piu’ efficiente puo’ essere strutturato in modo da
risparmiare istruzioni
★ Un algoritmo ben pensato (per una particolare architettura)
andra’ ad usare le istruzioni pi’ efficienti (quelle con un basso
Linguaggio di
programmazione
•
•
Il linguaggio di programmazione influenza il numero di
istruzioni e il CPI
Perche’?
★ I costrutti ad alto livello vengono tradotti in sequenze di
istruzioni macchina
★ Un linguaggio con molte chiamate indirette (es. Java) ha in
generale un valore di CPI piu’ alto
Compilatore
•
•
Il compilatore sicuramente influenza sia il numero di
istruzioni che il CPI
Perche’?
★ Un compilatore piu’ o meno efficiente genera un numero di
istruzioni macchina diverso per ogni istruzione
★ Un compilatore ottimizzante puo’ tenere conto di una serie di
effetti piuttosto complessi per ridurre il CPI
ISA
•
•
•
L’architettura del set di istruzioni (ISA) consiste nell’”interfaccia”
che la macchina offre al software (in questo corso ne vedremo
due)
Essa ha impatto sul numero di istruzioni, sulla frequenza di clock e
sul CPI
Perche’?
★ Numero di istruzioni: l’ISA puo’ fornire istruzioni di alto o
basso livello (quindi piu’ o meno istruzioni per eseguire
un’operazione)
★ CPI: il modo in cui un’ISA e’ progettata influenza il numero di
cicli per eseguire ciascuna istruzione
★ Un’ISA ben disegnata permette di avere frequenze piu’ spinte
•
•
La scalata
delle prestazioni
Negli scorsi anni le prestazioni dei calcolatori sono
aumentati costantemente
Di recente si e’ assistito a una diminuzione dell’incremento
tra una generazione e l’altra
•
•
•
•
La barriea
dell’energia
Il nostro processore e’ costituito di moltissimi interruttori che
dissipano energia quando sono in fase di conduzione
(commutazioni tra zero e uno)
C’e’ un limite alla capacita’ di estrarre la potenza prodotta
tramite ventole o radiatori (diciamo intorno ai 100W)
Superato questo limite la refigerazione diventa molto costosa e
non e’ attuabile in un normale desktop (per non parlare del
laptop)
La potenza e’ data da:
Potenza = capacitá × tensione2 × Frequenza di commutazione
La barriera
dell’energia
•
•
La frequenza di commutazione e’ legata alla frequenza di clock ...
Eppure negli scorsi anni si e’ riusciti in un miracolo: aumentare in
20 anni la frequenza di 1000 volte a spese di un aumento di
consumi di un fattore 30
Come hanno fatto?
•
•
•
•
Il ‘trucco” e’ stato quello di abbassare la tensione di
alimentazione che agisce in maniera quadratica
Si e’ passati in venti anni da tensioni di alimentazioni di 5V
ai circa 1.2V attuali
Questo ha permesso di incrementare la frequenza con
impatti limitati sui consumi
Sfortunatamente non ci si puo’ spingere oltre lungo questa
direzione perche’ se si abbassa la tensione sotto il Volt ci
sono dei fenomeni di scarica in condizioni statiche che
aumentano la dissipazione anche lontani dalle fasi di
commutazione
Una nuova strada
•
•
•
Nell’impossibilita’ di riuscire a drenare una grossa quantita’ di
calore si e’ giunti a una sostanziale saturazioe delle prestazioni del
processore
La nuova strada che allora viene esplorata e’ quella di aumentare
il parallelismo (architetture multicore)
Questo crea molte difficolta’ al programmatore per i seguenti
motivi:
★ correttezza: e’ molto piu’ difficiule fare un programma che operi
in maniera sequnziale rispetto a uno che opera in maniera
“parallela”
★ Effficienza:occore che il carico di lavoro sulle CPU si mantenga
bilanciato
Pitfall 1
•
•
•
•
Ci sono frequenti errori nell’analisi delle performance
Primo errore:
★ “Aumentando le prestazioni di un componente si riesce ad
ottenere un aumento corrispondente delle prestazioni”
Consideriamo ad esempio un programma che impiega 80s
per operazioni di moltiplicazione e 20s in altre operazioni.
Di quanto si deve migliorare la moltiplicazione per ridurre
a 1/5 il tempo di calcolo?
Non si PUO’. Dovremmo scendere
sotto i 20s ma 20s sono dovuti ad
altre operazioni
Pitfall 2
•
•
•
Errore
★ “non tenere conto di tutti i termini dell’equazione delle
prestazioni”
Ad esempio spesso viene usato il MIPS (Mega instructions
per second) per valutare le prestazioni
Numero Istruzioni
MIPS =
Tempo di Esecuzione × 106
Si conclude che un calcolatore e’ piu’ veloce di un altro
perche’ esegue piu’ istruzioni al secondo.
Pitfall 2
•
•
Questo e’ sbagliato!
In primo luogo il MIPS non tiene conto della complessita’
delle istruzioni
★ Puo’ darsi che un’architettura esegua piu’ istruzioni al secondo
di un’altra ma che queste ultime siano piu’ potenti
★ Anche nello stesso calcolatore i MIPS variano molto con il
programma
Numero Istruzioni
Il CPI puo’
MIPS =
6
Tempo di Esecuzione × 10
variare anche di
Numero Istruzioni
= Numero istruzioni×CP I
un Ordine di grandezza
× 106
Frequenza di Clock
per i vari benchmark.
Frequenza di Clock
=
Cosi’ il MIPS
CP I × 106
Pitfall 2 (Esempio)
•
•
•
Consideriamo i seguenti calcolatori che eseguono lo stesso
programma
Misura
Calcolatore A
Calcolatore B
Numero Istruzioni
Frequenza di Clock
CPI
10 10^9
4Ghz
1
8 10^9
4 Ghz
1,1
Quale dei due ha MIPS piu’ alto?
E quale prestazioni migliori?
MIPS: A
Prestazioni: B