Quando si vuole fare il confronto tra due CPU diverse, a parità di frequenza di clock, si utilizza il MIPS. Viene utilizzato lo stesso programma.
Il MIPS è un unità di misura intuitiva, però può essere fuorviante quando viene utilizzata a due CPU diverse con lo stesso tempo di clock.
Ad esempio prediamo un programma sorgente uguale, due CPU differenti:
Quindi nella prima macchina avremmo meno istruzioni e nella seconda di più per eseguire una stessa operazione. Quindi i MIPS risulteranno diversi, cioè più alto nella seconda macchina rispetto alla prima dato che effettua più operazioni.
Non possiamo quindi confrontare i MIPS su due architetture differenti!!
Un altro esempio è quello in cui prendo lo stesso CPU, stesso linguaggio macchina e stessa frequenza di clock e prendo due compilatori differenti.
Prendo lo stesso programma sorgente, e lo compilo con entrambi i compilatori.
Un compilatore ha poche istruzione che ci mettono pochissimi cicli di clock e un’altra serie di istruzioni che ci mettono un numero di cicli di clock medio, quindi più compatto.
L’altro compilatore ha invece tantissime istruzioni che ci mettono pochissimi cicli di clock e approssimativamente lo stesso numero di istruzioni che ci mettono un numero di cicli di clock medio.
Nella seconda macchina avremmo più MIPS, quindi sembrerebbe più performante, ma in realtà la verità è l’opposto.
MIPS non sono metriche adatte quando io voglio fare un confronto tra due processori che hanno un’architettura differente. Non lo sono neanche quando voglio vedere le prestazioni di un programma quando quest’ultimo viene compilato in maniera diversa.
L’unità di prestazione quindi è il $T_{CPU}$
Se voglio confrontare l’esecuzione di uno stesso programma su CPU che hanno livello ISA differente