Salta al contenuto
Note per Studenti Misura delle prestazioni - tempo di calcolo e indici MIPS

Misura delle prestazioni - tempo di calcolo e indici MIPS

In questa pagina 6

Un processore è veloce se esegue in poco tempo un dato programma. In un µC o in un DSP, dove di solito non c'è un sistema operativo che divide il tempo tra più processi, il tempo che il processore dedica al programma coincide con il suo tempo di calcolotempo di esecuzione del programma, indicato con TcalT_{cal}. È il parametro decisivo nelle applicazioni di signal processing e di controllo real time (Microcontrollori e DSP - definizioni e scelta del dispositivoUn microcontrollore (µC) è un microprocessore con memoria e periferiche (ADC, timer, PWM, porte seriali) sullo stesso chip, pensato per il controllo; un DSP è un processore ottimizzato per l'elaborazione numerica del segnale in tempo reale (moltiplicatore e istruzione MAC, accessi multipli alla memoria, indirizzamento circolare, DMA). Oggi le due famiglie si sovrappongono (DSC). La scelta del dispositivo si fa su costo, prestazioni, periferiche e tempo di sviluppo (time to market), non sulla sola frequenza di clock.Microcontrollori e DSP - definizioni e scelta del dispositivo →).

Stima del tempo di calcolo

Servono tre dati:

  1. il periodo di clock TclkT_{clk} (letto nel datasheet);
  2. il numero medio di cicli NCiNC_i richiesto dalle istruzioni di ciascuna classe ii (anche questo nel datasheet o nel manuale);
  3. il numero di istruzioni NiN_i di ciascuna classe che il programma contiene.

Allora Tcal=Tclk∑i=1NclNi⋅NCi.T_{cal}=T_{clk}\sum_{i=1}^{N_{cl}}N_i\cdot NC_i . La formula trascura le interruzioni del programma e i ritardi di accesso alla memoria. Il numero di istruzioni dipende dall'architetturainsieme delle risorse visibili al programmatore: repertorio delle istruzioni e modi di indirizzamento; il periodo di clock e i cicli per istruzione dipendono dall'organizzazionerealizzazione circuitale dell'architettura: bus, registri, tipo di controllo, pipeline. Una stessa architettura può avere organizzazioni molto diverse.

Tre modi di andare più veloci, con i rispettivi limiti:

  • ridurre TclkT_{clk}: aumenta la potenza dissipata, che si limita abbassando la tensione di alimentazione (per questo si va verso processori sotto 1 V); il limite è tecnologico;
  • ridurre NCiNC_i: serve un'organizzazione più complessa (controllo cablatounità di controllo realizzata con logica combinatoria e sequenziale dedicata, vedi la nota sull'unità di controllo anziché microprogrammato, parallelismo, pipelinecatena di stadi che lavorano su istruzioni diverse nello stesso momento), quindi un chip più costoso; il limite è economico;
  • ridurre NiN_i: si usano architetture con istruzioni più potenti (CISCComplex Instruction Set Computer: molte istruzioni, anche complesse invece di RISCReduced Instruction Set Computer: poche istruzioni semplici, tutte uguali nel formato), che complicano di nuovo l'organizzazione.

Le prestazioni dipendono quindi da architettura e organizzazione insieme, sotto i vincoli di costo e di consumo (Architettura del repertorio di istruzioni - RISC, CISC, VLIW e indirizzamentoL'architettura è l'insieme delle risorse visibili al programmatore (istruzioni, modi di indirizzamento). RISC: poche istruzioni semplici, di uguale lunghezza, decodifica cablata, quasi tutte a 1 ciclo; CISC: molte istruzioni complesse, decodifica microprogrammata, più cicli. I DSP sono RISC "potenziati" (MAC, saturazione, barrel shifter, arrotondamento, VLIW, SIMD); i modi di indirizzamento tipici sono immediato, a registro, diretto, indiretto, con auto-incremento, circolare e a bit rovesciati (per la FFT).Architettura del repertorio di istruzioni - RISC, CISC, VLIW e indirizzamento →).

Indici di prestazione e perché ingannano

  • MIPS (Million Instructions Per Secondmilioni di istruzioni eseguite in un secondo): è il valore di picco di istruzioni eseguibili nell'unità di tempo. Ma il lavoro svolto da una istruzione cambia da CPU a CPU e dipende dal compilatore, quindi l'indice confronta al più dispositivi con la stessa architettura.
  • DMIPS: MIPS misurati su un programma di prova specifico, il benchmark Dhrystoneprogramma di prova sintetico del 1984, nato per confrontare processori generici (del 1984), talvolta normalizzati alla frequenza di clock (DMIPS/MHz). Significatività bassa.
  • FLOPS: operazioni a virgola mobilesomme e prodotti tra numeri in notazione scientifica, vedi la nota sulla virgola mobile al secondo (valore di picco); ha senso solo per processori con aritmetica a virgola mobile.

Nessuno considera aspetti essenziali come la velocità degli accessi in memoria. Si usa allora il benchmarkingmisura del tempo di esecuzione su programmi campione, uguali per tutti i dispositivi confrontati: si misura il tempo su programmi campione. Per i processori generici si usano applicazioni complete (metodo SPECinsieme di applicazioni complete usato per confrontare processori per uso generico), ma per i DSP questo valuterebbe l'insieme compilatore-processore: si fa kernel benchmarkingmisura di soli nuclei di calcolo, come la FFT o un filtro, senza includere il compilatore, cioè si misurano algoritmi tipici del signal processing (FFT, filtri FIR e IIR). Un buon benchmark per DSP deve essere rilevante per le applicazioni, definibile in modo univoco, semplice e rapidamente ottimizzabile. Per i processori ARM il benchmark CoreMarktest sintetico per i microcontrollori con algoritmi di ricerca, ordinamento, matrici e CRC (ricerca e ordinamento, matrici, stringhe, CRC) sta sostituendo Dhrystone.

Esempio 1: MIPS contro tempo di calcolo

Un processore ha tre classi di istruzioni con NC=1,2,3NC=1,2,3 cicli. Due compilatori producono due codici con (in centinaia) N=(5,1,1)N=(5,1,1) e N=(10,1,1)N=(10,1,1) istruzioni per classe.

  • Tcal,1=Tclk⋅100⋅(5⋅1+1⋅2+1⋅3)=1000 TclkT_{cal,1}=T_{clk}\cdot100\cdot(5\cdot1+1\cdot2+1\cdot3)=1000\,T_{clk}.
  • Tcal,2=Tclk⋅100⋅(10⋅1+1⋅2+1⋅3)=1500 TclkT_{cal,2}=T_{clk}\cdot100\cdot(10\cdot1+1\cdot2+1\cdot3)=1500\,T_{clk}.

Il secondo codice è il 50% più lento. Ma i MIPS sono 7001000 Tclk=0,7 Fclk\frac{700}{1000\,T_{clk}}=0{,}7\,F_{clk} per il primo e 12001500 Tclk=0,8 Fclk\frac{1200}{1500\,T_{clk}}=0{,}8\,F_{clk} per il secondo: l'indice dice che il secondo è "più veloce". Conclusione: a parità di processore l'indice MIPS può premiare il codice peggiore.

Esempio 2: due datasheet

Un costruttore dichiara 30 MIPS con Fclk=40F_{clk}=40 MHz (circa 0,75 istruzioni per periodo, quindi un'istruzione per ciclo con qualche perdita). Un altro dichiara 8000 MIPS ma con Fclk=1000F_{clk}=1000 MHz: sono "MIPS di picco" ottenuti con più unità in parallelo. Un terzo usa i DMIPS/MHz. I tre numeri non si possono mettere in fila.

Esempio 3: numeri

Con Fclk=25F_{clk}=25 MHz (Tclk=40T_{clk}=40 ns) e un mix 60% istruzioni da 1 ciclo, 30% da 2 cicli, 10% da 3 cicli, i cicli medi sono 0,6+0,6+0,3=1,50{,}6+0{,}6+0{,}3=1{,}5. Un programma di 10610^6 istruzioni dura 106⋅1,5⋅4010^6\cdot1{,}5\cdot40 ns =60=60 ms.

Errori comuni

  • Confrontare due processori di famiglie diverse dai MIPS del datasheet.
  • Dimenticare che TcalT_{cal} vale solo se il programma non viene interrotto e se la memoria è abbastanza veloce.
  • Ridurre il numero di istruzioni senza considerare che le istruzioni "più potenti" richiedono più cicli.

Versione ripasso

Teoria collegata