Come può un compilatore influenzare le prestazioni della CPU?
Nei primi compilatori, come visto in altre risposte, il codice macchina generato includeva istruzioni extra. Se si confrontavano le prestazioni della CPU usando quel codice con il codice generato accuratamente a mano, la CPU con il codice generato dal compilatore sembrava essere molto più lenta. Nel tempo, i compilatori hanno aggiunto fasi di ottimizzazione che identificavano i modelli comuni e li semplificavano. Alla fine, con abbastanza funzioni di ottimizzazione, il tipico codice generato dal compilatore era migliore di tutto il codice ottimizzato a mano, tranne il più attentamente studiato. La maggior parte dei programmatori generici smise di pensare all'ottimizzazione del codice e si concentrò invece sul miglioramento degli algoritmi.
Ancora, la gente voleva confrontare le prestazioni della CPU per sapere chi aveva le macchine migliori. Quando lavoravo alla Convex computers (un'azienda di macchine vettoriali), applicare la vettorizzazione (una caratteristica molto avanzata all'epoca) poteva migliorare le prestazioni da 2x a 5x per il codice adatto ad essere vettorizzato. Questo vantaggio nell'ottimizzazione del compilatore ha aiutato Convex ad essere un leader/sopravvissuto nella sua nicchia di mercato in un momento in cui più dell'80% dei suoi concorrenti è fallito.
Storia a margine: in un caso, un cliente non aveva incluso l'interruttore del compilatore "vectorize" nel codice di produzione. Il nostro ingegnere di vendita scoprì questa svista e aiutò il programmatore del cliente a diventare un eroe all'interno della sua azienda dimostrando il grande miglioramento ottenuto usando le migliori caratteristiche del compilatore per ottenere prestazioni 5 volte superiori su un'importante applicazione del cliente.
Negli anni 2000, i miglioramenti della velocità di clock stavano rallentando e l'enfasi nell'architettura dei computer era sul miglioramento della pipeline della CPU, sulla messa a punto del funzionamento della cache di istruzioni e dati, sulla riduzione dei clock richiesti per le singole istruzioni e misure simili. Ho lavorato per Sun che costruiva e vendeva CPU con architettura Sparc. Valutavamo i nuovi processori usando la serie di benchmark SPECcpu. La differenza di prestazioni tra l'utilizzo del tuning del compilatore per il precedente processore Sparc sul nuovo processore Sparc e l'utilizzo del tuning del compilatore per il nuovo processore Sparc sul nuovo processore Sparc era spesso pari a un guadagno del 20% nelle prestazioni della CPU. Il tuning ha influenzato lo scheduling delle istruzioni e molti dettagli dell'ottimizzazione del compilatore nel codice del mondo reale. Quel guadagno del 20% ha avuto un grande impatto sulla percezione del cliente del nuovo processore e ha contribuito a incoraggiarne l'accettazione.
Si può vedere da questi esempi che le differenze del compilatore hanno fatto e faranno una grande differenza nelle prestazioni della CPU. Una semplice analisi basata sulle istruzioni per secondo o sul conteggio dei cicli o approcci simili può essere seriamente fuorviante.
Anche la scelta del benchmark da usare può essere un problema importante. Scegliere un benchmark che non corrisponda all'uso che intendete fare del computer spesso vi indurrà in errore circa il sistema migliore per il vostro scopo. Questo è un altro argomento di discussione.
Articoli simili
- È l'aggiornamento della CPU o della GPU che darebbe le migliori prestazioni nell'esecuzione di emulatori come PCSX2?
- La postura e il posizionamento della mano/del braccio possono influenzare i valori del pulsossimetro?
- Cosa significa 'frequenza di clock della CPU'? Come contribuisce alle prestazioni di un PC?
- Qual è la differenza tra le prese 'CPU FAN', 'CPU OPT' e 'SYS FAN' sulla scheda madre?