Performance dei calcolatori
Negli ultimi anni i miglioramenti nella tecnologia dei semiconduttori (dimensione e velocità di clock) e i miglioramenti nell'architettura dei computer (compilatori HLL, UNIX, architetture RISC) hanno permesso lo sviluppo di computer lightweight e linguaggi di programmazione interpretati.
In questa lezione vedremo quali sono le metriche e le tecniche comunemente usate per valutare le prestazioni di una macchina, concentrandosi in particolare sui tempi di calcolo.
Valutazione delle performance
[modifica]Per definire "quale computer è più veloce dell'altro" dobbiamo decidere alcune metriche. Solitamente sono due le metriche considerate, che dipendono dai soggetti coinvolti del sistema:
- Computer system user: obiettivo minimizzare il tempo di risposta
- Computer center manager: obiettivo massimizzare il rateo di completamento (throughput)
Si ricorda che solo se non ci sono sovrapposizioni tra i task (parallelismo), altrimenti risulta maggiore.
Esempio:
- Un buffet con 5 stazioni, ogni persona impegna ogni stazione per 2 minuti. Ogni persona impiega 10 minuti a riempire il vassoio. Se consideriamo che al buffet ci accede una persona alla volta il throughput è 1/10, altrimenti è ½ perché 5 persone occupano contemporaneamente le 5 stazioni.
Funzione di speedup
[modifica]Diciamo che "X è n% più veloce di Y" se:
inoltre definiamo:
da cui:
Infine possiamo definire la funzione di speedup come:
Se dobbiamo decidere cosa ottimizzare nel sistema come facciamo? Usiamo il buon senso: spesso ci si trova a dover valutare un trade-off, dobbiamo favorire il caso frequente rispetto a quello infrequente. Ad esempio: in una CPU le operazioni di fetch e decode sono più utilizzate della moltiplicazione, conviene quindi ottimizzare le prime.
Per selezionare il caso frequente e valutare l'impatto si usa la Legge di Amdahl, spiegata nella prossima sezione.
Amdahl's Law
[modifica]Sia E un miglioramento del sistema, allora possiamo scrivere:
Solitamente il miglioramento non coinvolge tutto il sistema, allora si ricorre alla formula:
da cui:
Il miglioramento massimo ottenibile (situazione ideale) è quindi:
Esempio:
Si vuole valutare l'impatto di una nuova CPU 10x più veloce, su un server che rimane bloccato per il 60% del tempo in operazioni di I/O.
Abbiamo allora:
Corollario
[modifica]Se un miglioramento è usabile solo per una frazione di un task, non possiamo velocizzare il task più del reciproco di 1 meno la frazione.
Computer performance
[modifica]Concentriamoci ora sulle performance di un processore. Possiamo identificare due parametriche o metriche applicabili:
- Tempo di risposta: è il tempo di latenza per completare un task, inclusi accessi a disco, altri I/O, tempi del sistema operativo, ecc. Dipende quindi da molti fattori e spesso è difficilmente calcolabile in maniera precisa.
- Tempo di CPU: non include i tempi di I/O e corrisponde al tempo per il quale la CPU lavora effettivamente a eseguire un determinato programma. Dato un programma P, si calcola come:
Analizziamo ora in dettaglio come calcolare il tempo di CPU, scomponendolo nelle sue componenti:
Dove:
- IC (Instruction Count): numero di istruzioni nel programma P. Dipende dall'algoritmo, dal compilatore utilizzato e dall'ISA del processore.
- CPI (Clock per Instruction): numero medio di clock necessari per eseguire un'istruzione. È determinato dall'ISA e dall'organizzazione della CPU (il programmatore non può farci niente). Per ridurre questo valore si utilizza la pipelining.
- : è il tempo che intercorre tra un fronte del clock e l'altro. L'inverso determina la frequenza del processore. Dipende dalla tecnologia hardware usata, dall'organizzazione e dal design del circuito.
Riassumiamo i parametri e da cosa sono influenzati:
Algoritmo | Compilatore | ISA | Organizzazione HW | Tecnologia HW | |
---|---|---|---|---|---|
IC | SI | SI | SI | NO | NO |
CPI | NO | (parzialmente) | SI | SI | NO |
NO | NO | NO | SI | SI |
NOTA BENE: Per minimizzare il tempo di CPU (quindi migliorare le performance) non è importante minimizzare il singolo termine, ma tutto il prodotto. Inoltre i tre termini sono spesso correlati tra di loro (es. se modifico l'ISA per diminuire IC, devo prevedere un'organizzazione del circuito più complessa e quindi aumentare il tempo di clock).
Altre metriche
[modifica]Sono spesso utilizzate altre metriche, tra cui il throughput che utilizza diverse unità di misura, ad esempio:
- MIPS = Millions of Instructions Per Second = IC/(execution time * 10^6) = clock frequency / (CPI * 10^6)
- Execution time = Instruction count / (MIPS* 10^6)
- MFLOPS = Milions of Floating point Operation Per Second = Floating Point operations in program / (CPU time * 10^6)
- Più "sicuro" per determinare la potenza di calcolo perché le operazioni in virgola mobile (FP) sono solitamente indipendenti dal compilatore e dall'ISA.
- Casi in cui non sono comunque indipendenti: forti ottimizzazioni del compilatore, confronto tra architetture in cui mancano delle istruzioni (es. sin, cos, radice quadrata, ecc.)
Benchmarks
[modifica]Per valutare nella realtà la potenza di calcolo di un computer si fa riferimento ad appositi software, costruiti per testare le prestazioni secondo determinate metriche.
I benchmarks si dividono principalmente in quattro tipi:
- Real programs: programmi reali che rappresentano un workload reale. Esempi: un compilatore, un editor di testo, ecc.
- Kernels or microbenchmarks: sono un frammento di un programma, utili per concentrarsi su particolari caratteristiche (del processore, del disco, ecc.)
- Synthetic benchmarks: stessa filosofia dei precedenti, ma costruiti appositamente, di solito partendo da basi statistiche (frequenza delle operazioni e operandi presi da un largo insieme di programmi)
- Instruction mixes: benchmark particolari per valutare CPI.
Tuttavia i benchmark potrebbero non essere rappresentativi (ad esempio un benchmark per la CPU che conteggia anche le operazioni di I/O) e invecchiano presto: le aziende di compilatori, di hardware e di software ottimizzano i loro software per far raggiungere un valore alto a uno specifico benchmark, senza che questo coincida con un vero miglioramento delle performance. Per questo i benchmark devono essere periodicamente rivisti.
Quando si deve valutare, come fanno i benchmark, su più campioni le prestazioni, punto cruciale è capire che tipologie di metrica utilizzare:
- media aritmetica: è valida solamente se i programmi sono eseguiti con la stessa frequenza;
- media armonica: si usa quando velocizzare i benchmark lenti dà più vantaggi rispetto a velocizzare dello stesso modo i benchmark veloci. (Esempio: se in auto percorro 10 km a 30 km/h e 10 km a 70 km/h, la media non è 50 km/h!);
- media geometrica: si usa quando sono dati i ratei e non i tempi.
Potenza ed Energia
[modifica]La metrica Thermal Design Power (TDP) rappresenta un'indicazione del calore (energia) dissipato da un processore. Caratterizza sostanzialmente la potenza consumata e si utilizza per calcolare l'alimentatore e il sistema di raffreddamento necessari. Oggigiorno rappresenta un indicatore fondamentale per valutare la qualità di un sistema, soprattutto nei grandi centri di calcolo e supercomputer. Bisogna tenere sempre presente che però non rappresenta la potenza di picco reale che in certe occasioni si può ottenere. Per misurare il TDP si ricorre solitamente a energy-per-task, ovvero l'energia consumata per eseguire uno specifico task.
La velocità di clock influisce notevolmente sul TDP (quindi sui consumi e sulle temperature) ed è il principale motivo del perché la frequenza di clock ha smesso di crescere.
Potenza dinamica e statica
[modifica]Definiamo energia dinamica (dynamic energy) l'energia necessaria per portare un transistor dallo stato 1 allo stato 0 o viceversa. È calcolabile dalla formula:
a partire da questa definiamo anche la potenza dinamica:
Definiamo poi il consumo di potenza statico (static power consumption), e indica la corrente consumata naturalmente dalle imperfezioni dei transistor, anche quando non avviene alcuna transizione (legge di ohm):
Le principali tecniche per ridurre la potenza sono:
- Dynamic Voltage-Frequency Scaling: si abbassa e si alza la tensione di alimentazione o la frequenza del clock a seconda di una politica.
- Low power state: alcuni dispositivi (es. DRAM, disks) si pongono in stand-by quando non usati
- Power-gating: si spengono selettivamente alcuni cores o parti del circuito se non usati