Perché le nuove generazioni di processori sono più veloci alla stessa velocità di clock?


38

Perché, ad esempio, un Core i5 dual-core a 2,66 GHz sarebbe più veloce di un Core 2 Duo a 2,66 GHz, che è anche dual-core?

È a causa di istruzioni più recenti che possono elaborare le informazioni in meno cicli di clock? Quali altri cambiamenti architettonici sono coinvolti?

Questa domanda si presenta spesso e le risposte sono generalmente le stesse. Questo post ha lo scopo di fornire una risposta canonica definitiva a questa domanda. Sentiti libero di modificare le risposte per aggiungere ulteriori dettagli.



Wow, sia le scoperte che quelle di David sono ottime risposte ... Non so quale scegliere come corretto: P
agz

Anche un migliore set di istruzioni e più registri. ad esempio MMX (molto vecchio ora) e x86_64 (Quando AMD ha inventato x86_64 hanno aggiunto alcuni miglioramenti alla rottura della compatibilità, quando in modalità 64 bit. Si sono resi conto che la comparabilità sarebbe stata comunque interrotta).
ctrl-alt-delor,

Per veri e propri miglioramenti dell'architettura x86, è necessario un nuovo set di istruzioni, ma se ciò avvenisse, non sarebbe più un x86. Sarebbe un PowerPC, mips, Alpha, ... o ARM.
ctrl-alt-delor,

Risposte:


30

Di solito non è a causa di istruzioni più recenti. È solo perché il processore richiede meno cicli di istruzione per eseguire le stesse istruzioni. Ciò può essere dovuto a numerosi motivi:

  1. Le cache di grandi dimensioni significano meno tempo perso in attesa della memoria.

  2. Più unità di esecuzione significano meno tempo in attesa di iniziare a operare su un'istruzione.

  3. Una migliore previsione del ramo significa meno tempo sprecato nell'esecuzione di istruzioni che non devono mai essere effettivamente eseguite.

  4. I miglioramenti apportati all'unità di esecuzione significano meno tempo in attesa del completamento delle istruzioni.

  5. Tubazioni più brevi significano che le tubazioni si riempiono più velocemente.

E così via.


Credo che l'architettura Core abbia una pipeline a 14-15 stadi ( ref ), e il Nehalem / Sandy Bridge abbia approssimativamente una pipeline a 14-17 stage ( ref ).
Sfondamento

Le tubazioni più brevi sono più facili da mantenere piene e riducono le penalità per i lavaggi delle tubazioni. Tubazioni più lunghe generalmente consentono velocità di clock più elevate.
David Schwartz,

Questo è ciò che intendo, penso che la profondità della tubazione stessa sia rimasta la stessa o sia aumentata . Anche nei manuali per sviluppatori Intel 64 e IA-32 SW , l'ultima menzione di una modifica della pipeline è in Vol. 1, cap. 2.2.3 / 2.2.4 (le microarchitettura Intel Core / Atom).
Sfondamento

2
Lo sforzo per aumentare la velocità di clock ha portato a condotte più lunghe. È diventato ridicolo (ben 31 tappe!) Verso la fine dell'era NetBurst. In questi giorni, è una decisione ingegneristica delicata con vantaggi e svantaggi in entrambi i modi.
David Schwartz,

anche miglioramenti della predizione delle diramazioni, riordino / ottimizzazione delle istruzioni / miglioramenti dell'unità mux, miniaturizzazione (calore ridotto) e progettazione dello stampo (percorsi / circuiti a uno stampo migliorati, ecc.), ...
Shaun Wilson,

40

Progettare un processore per offrire prestazioni elevate è molto più che aumentare semplicemente la frequenza di clock. Esistono numerosi altri modi per aumentare le prestazioni, resi possibili dalla legge di Moore e strumentali alla progettazione di processori moderni.

Le frequenze non possono aumentare indefinitamente.

  • A prima vista, può sembrare che un processore esegua semplicemente un flusso di istruzioni uno dopo l'altro, con aumenti delle prestazioni raggiunti attraverso frequenze di clock più elevate. Tuttavia, aumentare la frequenza di clock da sola non è sufficiente. Il consumo di energia e la potenza termica aumentano all'aumentare della frequenza.

  • Con frequenze di clock molto elevate, diventa necessario un aumento significativo della tensione del core della CPU . Poiché il TDP aumenta con il quadrato del core V , alla fine raggiungiamo un punto in cui i consumi eccessivi di energia, la potenza termica e i requisiti di raffreddamento impediscono ulteriori aumenti della frequenza di clock. Questo limite è stato raggiunto nel 2004, ai tempi del Pentium 4 Prescott . Mentre i recenti miglioramenti nell'efficienza energetica hanno aiutato, significativi aumenti della frequenza di clock non sono più possibili. Vedi: Perché i produttori di CPU hanno smesso di aumentare le velocità di clock dei loro processori?

Grafico delle velocità di clock di serie nei PC entusiasti all'avanguardia nel corso degli anni.
Grafico delle velocità di clock di serie nei PC entusiasti all'avanguardia nel corso degli anni. Fonte immagine

  • Attraverso la legge di Moore , un'osservazione che afferma che il numero di transistor su un circuito integrato raddoppia ogni 18-24 mesi, principalmente a causa della riduzione degli stampi , sono state implementate una varietà di tecniche che aumentano le prestazioni. Queste tecniche sono state perfezionate e perfezionate nel corso degli anni, consentendo di eseguire più istruzioni in un determinato periodo di tempo. Queste tecniche sono discusse di seguito.

I flussi di istruzioni apparentemente sequenziali possono spesso essere parallelizzati.

  • Sebbene un programma possa consistere semplicemente in una serie di istruzioni per l'esecuzione una dopo l'altra, queste istruzioni, o parti di esse, possono essere eseguite molto spesso simultaneamente. Questo si chiama parallelismo a livello di istruzione (ILP) . Lo sfruttamento dell'ILP è fondamentale per ottenere prestazioni elevate e i moderni processori utilizzano numerose tecniche per farlo.

La pipeline spezza le istruzioni in pezzi più piccoli che possono essere eseguiti in parallelo.

  • Ogni istruzione può essere suddivisa in una sequenza di passaggi, ognuno dei quali viene eseguito da una parte separata del processore. Il pipelining delle istruzioni consente a più istruzioni di eseguire queste fasi una dopo l'altra senza dover attendere il completamento completo di ciascuna istruzione. Il pipelining consente frequenze di clock più elevate: avendo una fase di ciascuna istruzione completa in ciascun ciclo di clock, sarebbe necessario meno tempo per ciascun ciclo rispetto a se le istruzioni complete dovessero essere completate una alla volta.

  • La pipeline RISC classica contiene cinque fasi: recupero delle istruzioni, decodifica delle istruzioni, esecuzione delle istruzioni, accesso alla memoria e writeback. I processori moderni suddividono l'esecuzione in molti più passaggi, producendo una pipeline più profonda con più fasi (e aumentando le frequenze di clock ottenibili poiché ogni fase è più piccola e richiede meno tempo per il completamento), ma questo modello dovrebbe fornire una comprensione di base di come funziona la pipeline.

Schema di una pipeline di istruzioni in cinque fasi
Fonte immagine

Tuttavia, il pipelining può presentare pericoli che devono essere risolti per garantire la corretta esecuzione del programma.

  • Poiché diverse parti di ciascuna istruzione vengono eseguite contemporaneamente, è possibile che si verifichino conflitti che interferiscono con la corretta esecuzione. Questi sono chiamati pericoli . Esistono tre tipi di pericoli: dati, struttura e controllo.

  • I pericoli dei dati si verificano quando le istruzioni leggono e modificano gli stessi dati contemporaneamente o nell'ordine sbagliato, portando potenzialmente a risultati errati. Pericoli strutturali si verificano quando più istruzioni devono utilizzare una parte particolare del processore contemporaneamente. I rischi di controllo si verificano quando si incontra un'istruzione di ramo condizionale.

  • Questi pericoli possono essere risolti in vari modi. La soluzione più semplice è semplicemente arrestare la pipeline, mettendo temporaneamente in attesa l'esecuzione di una o delle istruzioni nella pipeline per garantire risultati corretti. Questo è evitato quando possibile perché riduce le prestazioni. Per i rischi relativi ai dati, tecniche come l' inoltro dell'operando vengono utilizzate per ridurre le stalle. I rischi di controllo sono gestiti attraverso la previsione del ramo , che richiede un trattamento speciale ed è trattato nella sezione successiva.

La previsione del ramo viene utilizzata per risolvere i rischi di controllo che possono interrompere l'intera tubazione.

  • I pericoli di controllo, che si verificano quando si incontra un ramo condizionale , sono particolarmente gravi. I rami introducono la possibilità che l'esecuzione continui altrove nel programma piuttosto che semplicemente nell'istruzione successiva nel flusso di istruzioni, in base al fatto che una determinata condizione sia vera o falsa.

  • Poiché le successive istruzioni da eseguire non possono essere determinate fino a quando non viene valutata la condizione del ramo, non è possibile inserire alcuna istruzione nella pipeline dopo un ramo in assenza. La tubazione viene quindi svuotata ( svuotata ) che può sprecare quasi tutti i cicli di clock quanti sono gli stadi della pipeline. I rami tendono a verificarsi molto spesso nei programmi, quindi i rischi di controllo possono influire negativamente sulle prestazioni del processore.

  • La previsione del ramo affronta questo problema indovinando se verrà preso un ramo. Il modo più semplice per farlo è semplicemente supporre che i rami siano sempre presi o mai presi. Tuttavia, i processori moderni utilizzano tecniche molto più sofisticate per una maggiore precisione di previsione. In sostanza, il processore tiene traccia dei rami precedenti e utilizza queste informazioni in uno dei diversi modi per prevedere le istruzioni successive da eseguire. La pipeline può quindi essere alimentata con le istruzioni dalla posizione corretta in base alla previsione.

  • Naturalmente, se la previsione è errata, qualunque istruzione sia stata immessa attraverso la tubazione dopo che il ramo deve essere lasciato cadere, svuotando così la tubazione. Di conseguenza, l'accuratezza del predittore di diramazione diventa sempre più critica man mano che le condutture diventano sempre più lunghe. Specifiche tecniche di predizione del ramo vanno oltre lo scopo di questa risposta.

Le cache sono utilizzate per accelerare gli accessi alla memoria.

  • I processori moderni possono eseguire le istruzioni e elaborare i dati molto più velocemente di quanto sia possibile accedervi nella memoria principale. Quando il processore deve accedere alla RAM, l'esecuzione può bloccarsi per lunghi periodi di tempo fino a quando i dati non sono disponibili. Per mitigare questo effetto, sul processore sono incluse piccole aree di memoria ad alta velocità chiamate cache .

  • A causa dello spazio limitato disponibile sul die del processore, le cache hanno dimensioni molto limitate. Per sfruttare al massimo questa capacità limitata, le cache memorizzano solo i dati più recenti o con accesso frequente ( località temporale ). Poiché gli accessi alla memoria tendono ad essere raggruppati all'interno di aree particolari ( località spaziali ), anche i blocchi di dati vicini a quelli a cui si accede di recente vengono archiviati nella cache. Vedi: Località di riferimento

  • Le cache sono inoltre organizzate in più livelli di dimensioni variabili per ottimizzare le prestazioni poiché le cache più grandi tendono ad essere più lente delle cache più piccole. Ad esempio, un processore può avere una cache di livello 1 (L1) che ha solo 32 KB di dimensione, mentre la sua cache di livello 3 (L3) può avere dimensioni di diversi megabyte. La dimensione della cache, nonché l' associatività della cache, che influisce sul modo in cui il processore gestisce la sostituzione dei dati su una cache completa, influisce in modo significativo sui miglioramenti delle prestazioni ottenuti tramite una cache.

L'esecuzione fuori servizio riduce le stalle a causa di pericoli consentendo l'esecuzione dapprima di istruzioni indipendenti.

  • Non tutte le istruzioni in un flusso di istruzioni dipendono l'una dall'altra. Ad esempio, anche se a + b = cdeve essere eseguito prima c + d = e, a + b = ce d + e = fsono indipendenti e possono essere eseguiti contemporaneamente.

  • L'esecuzione fuori ordine sfrutta questo fatto per consentire l'esecuzione di altre istruzioni indipendenti mentre un'istruzione è in stallo. Invece di richiedere istruzioni per l'esecuzione una dopo l'altra in lockstep, l'hardware di pianificazione viene aggiunto per consentire l'esecuzione di istruzioni indipendenti in qualsiasi ordine. Le istruzioni sono spediti a una coda istruzione ed emesso per la parte appropriata del processore quando i dati richiesti diventa disponibile. In questo modo, le istruzioni bloccate in attesa di dati da un'istruzione precedente non collegano istruzioni successive che sono indipendenti.

Diagramma dell'esecuzione fuori servizio
Fonte immagine

  • Sono necessarie diverse strutture dati nuove ed espanse per eseguire l'esecuzione fuori servizio. La suddetta coda di istruzioni, la stazione di prenotazione , viene utilizzata per conservare le istruzioni fino a quando non saranno disponibili i dati richiesti per l'esecuzione. Il buffer di riordino (ROB) viene utilizzato per tenere traccia dello stato delle istruzioni in corso, nell'ordine in cui sono state ricevute, in modo che le istruzioni vengano completate nell'ordine corretto. Un file di registro che si estende oltre il numero di registri forniti dall'architettura stessa è necessario per rinominare i registri , il che aiuta a prevenire la dipendenza da istruzioni altrimenti indipendenti a causa della necessità di condividere la serie limitata di registri forniti dall'architettura.

Le architetture superscalari consentono l'esecuzione simultanea di più istruzioni all'interno di un flusso di istruzioni.

  • Le tecniche discusse sopra aumentano solo le prestazioni della pipeline di istruzioni. Queste tecniche da sole non consentono di completare più di un'istruzione per ciclo di clock. Tuttavia, è spesso possibile eseguire in parallelo singole istruzioni all'interno di un flusso di istruzioni, ad esempio quando non dipendono l'una dall'altra (come discusso nella precedente sezione sull'esecuzione fuori servizio).

  • Le architetture superscalari sfruttano questo parallelismo a livello di istruzione consentendo l'invio simultaneo di istruzioni a più unità funzionali. Il processore può avere più unità funzionali di un particolare tipo (come ALU intere) e / o diversi tipi di unità funzionali (come unità a virgola mobile e intere) a cui possono essere inviate contemporaneamente istruzioni.

  • In un processore superscalare, le istruzioni sono programmate come in un progetto fuori servizio, ma ora ci sono più porte di emissione , che consentono di impartire ed eseguire diverse istruzioni contemporaneamente. I circuiti di decodifica delle istruzioni espansi consentono al processore di leggere diverse istruzioni alla volta in ciascun ciclo di clock e determinare le relazioni tra di esse. Un moderno processore ad alte prestazioni può programmare fino a otto istruzioni per ciclo di clock, a seconda di ciò che ogni istruzione fa. Ecco come i processori possono completare più istruzioni per ciclo di clock. Vedi: motore di esecuzione Haswell su AnandTech

Diagramma del motore di esecuzione Haswell
Fonte immagine

  • Tuttavia, le architetture superscalari sono molto difficili da progettare e ottimizzare. Il controllo delle dipendenze tra le istruzioni richiede una logica molto complessa le cui dimensioni possono ridimensionarsi in modo esponenziale all'aumentare del numero di istruzioni simultanee. Inoltre, a seconda dell'applicazione, all'interno di ogni flusso di istruzioni è possibile eseguire contemporaneamente un numero limitato di istruzioni che possono essere eseguite contemporaneamente, pertanto gli sforzi per sfruttare maggiormente l'ILP risentono di rendimenti decrescenti.

Vengono aggiunte istruzioni più avanzate che eseguono operazioni complesse in meno tempo.

  • Con l'aumentare del budget dei transistor, diventa possibile implementare istruzioni più avanzate che consentono di eseguire operazioni complesse in una frazione del tempo che altrimenti richiederebbero. Esempi includono set di istruzioni vettoriali come SSE e AVX che eseguono calcoli su più dati contemporaneamente e il set di istruzioni AES che accelera la crittografia e la decrittografia dei dati.

  • Per eseguire queste complesse operazioni, i moderni processori utilizzano micro-operazioni (μops) . Le istruzioni complesse sono decodificate in sequenze di μops, che sono memorizzate in un buffer dedicato e programmate per l'esecuzione individualmente (nella misura consentita dalle dipendenze dei dati). Ciò fornisce più spazio al processore per sfruttare ILP. Per migliorare ulteriormente le prestazioni, è possibile utilizzare una speciale cache μop per memorizzare μops decodificati di recente, in modo che i μops per le istruzioni eseguite di recente possano essere cercati rapidamente.

  • Tuttavia, l'aggiunta di queste istruzioni non migliora automaticamente le prestazioni. Le nuove istruzioni possono aumentare le prestazioni solo se un'applicazione è stata scritta per usarle. L'adozione di queste istruzioni è ostacolata dal fatto che le applicazioni che le utilizzano non funzionano su processori meno recenti che non le supportano.


In che modo queste tecniche migliorano le prestazioni del processore nel tempo?

  • Le condutture sono diventate più lunghe nel corso degli anni, riducendo il tempo necessario per completare ogni fase e quindi consentendo frequenze di clock più elevate. Tuttavia, tra l'altro, condutture più lunghe aumentano la penalità per una previsione del ramo errata, quindi una tubazione non può essere troppo lunga. Nel tentativo di raggiungere velocità di clock molto elevate, il processore Pentium 4 ha utilizzato condutture molto lunghe, fino a 31 fasi in Prescott . Per ridurre i deficit di prestazioni, il processore tenterebbe di eseguire le istruzioni anche se potrebbero non funzionare e continuerebbe a provare fino a quando non avrà esito positivo . Ciò ha comportato un consumo energetico molto elevato e ridotto le prestazioni ottenute dall'hyper-threading . I processori più recenti non usano più le condutture così a lungo, soprattutto perché il ridimensionamento della frequenza di clock ha raggiunto un muro;Haswell utilizza una pipeline che varia tra 14 e 19 fasi e le architetture a basso consumo utilizzano tubazioni più brevi (Intel Atom Silvermont ha da 12 a 14 fasi).

  • L'accuratezza della previsione delle diramazioni è migliorata con architetture più avanzate, riducendo la frequenza di scarichi della tubazione causati da errori di previsione e consentendo l'esecuzione simultanea di più istruzioni. Considerando la lunghezza delle tubazioni nei processori di oggi, questo è fondamentale per mantenere alte prestazioni.

  • Con l'aumento del budget dei transistor, è possibile incorporare nel processore cache più grandi ed efficaci, riducendo le stalle a causa dell'accesso alla memoria. Gli accessi alla memoria possono richiedere più di 200 cicli per essere completati su sistemi moderni, quindi è importante ridurre il più possibile l'accesso alla memoria principale.

  • I processori più recenti sono in grado di sfruttare meglio l'ILP attraverso una logica di esecuzione superscalare più avanzata e progetti "più ampi" che consentono di decodificare ed eseguire più istruzioni contemporaneamente. L' architettura Haswell può decodificare quattro istruzioni e inviare 8 micro-operazioni per ciclo di clock. L'aumento dei budget dei transistor consente di includere nel core del processore più unità funzionali come ALU intere. Le strutture di dati chiave utilizzate nell'esecuzione fuori ordine e superscalare, come la stazione di prenotazione, il buffer di riordino e il file di registro, sono espanse in progetti più recenti, che consente al processore di cercare una finestra più ampia di istruzioni per sfruttare il proprio ILP. Questa è una delle principali forze trainanti dietro l'aumento delle prestazioni nei processori di oggi.

  • Istruzioni più complesse sono incluse nei processori più recenti e un numero crescente di applicazioni utilizza queste istruzioni per migliorare le prestazioni. I progressi nella tecnologia del compilatore, inclusi i miglioramenti nella selezione delle istruzioni e nella vettorializzazione automatica , consentono un uso più efficace di queste istruzioni.

  • Oltre a quanto sopra, una maggiore integrazione di parti precedentemente esterne alla CPU come northbridge, controller di memoria e corsie PCIe riduce l'I / O e la latenza della memoria. Ciò aumenta la produttività riducendo le bancarelle causate da ritardi nell'accesso ai dati da altri dispositivi.


6
Questo potrebbe essere un buon post sul blog.
Mokubai

I miglioramenti nell'efficienza energetica sono anche un fattore dato dal muro di potere.
Paul A. Clayton,

Non si tratta più di quanto sia veloce l'orologio, ma di quante istruzioni per ciclo di clock possono essere elaborate. Se un processore ha la larghezza di banda per elaborare 4x quanti più dati dalla memoria alla cache, quel processore è effettivamente 4x più veloce anche se avesse un clock più lento. Questo è il motivo per cui AMD ha avuto così tanti problemi nel tentativo di eguagliare le prestazioni dei prodotti Intel
Ramhound,

18

Il riferimento assoluto assoluto sono i manuali per sviluppatori di software per architetture Intel 64 e IA-32 . Descrivono in dettaglio i cambiamenti tra le architetture e sono un'ottima risorsa per comprendere l'architettura x86.

Consiglio di scaricare i volumi combinati da 1 a 3C (primo link per il download in quella pagina). Volume 1 Il capitolo 2.2 contiene le informazioni desiderate.


Alcune differenze generali che vedo elencate in quel capitolo, che vanno dalle microarchitetture Core a Nehalem / Sandy Bridge sono:

  • miglioramento della predizione del ramo, recupero più rapido dall'errore di previsione
  • Tecnologia HyperThreading
  • controller di memoria integrato, nuova cache hirearchy
  • gestione delle eccezioni in virgola mobile più veloce (solo Sandy Bridge)
  • Miglioramento della larghezza di banda LEA (solo Sandy Bridge)
  • Estensioni istruzioni AVX (solo Sandy Bridge)

L'elenco completo è disponibile nel link fornito sopra (Vol. 1, Ch. 2.2).


0

Tutto quanto detto in precedenza è vero, ma fino a un certo punto. La mia risposta è breve: i processori di nuova generazione sono "più veloci" principalmente perché hanno cache più grandi e meglio organizzate . Questo è il fattore principale nelle prestazioni del computer. Per ulteriori considerazioni quantitative, consultare " Rivista Linux: cosa guida le prestazioni in HPC "

In breve, per le applicazioni più comuni (come nella raccolta SPEC), il fattore limitante è la memoria. Quando è in esecuzione un calcolo realmente sostenuto, le cache sono tutte caricate di dati, ma ogni mancata cache provoca l'arresto e l'attesa della pipe di esecuzione della CPU. Il problema è che non importa quanto sia sofisticata la pipeline della CPU, o migliori istruzioni, il parallelismo a livello di istruzione è ancora piuttosto limitato (tranne alcuni casi precaricati altamente ottimizzati speciali). Una volta trovata una dipendenza critica, tutto il parallelismo termina in cinque-dieci clock della CPU, mentre ci vogliono centinaia di clock della CPU per sfrattare una caheline e caricarne una nuova dalla memoria principale. Quindi il processore attende di non fare nulla. L'intero concetto è vero anche per i multicore.

Quindi, se si desidera un PC "più veloce", acquistarlo con una CPU che ha la cache più grande che ci si possa permettere.


-1

Poiché migliorano la quantità di istruzioni per ogni ciclo (clock) che la CPU può fare includendo unità di esecuzione più elevate (unità di calcolo), per questo motivo migliorando l'IPC, inoltre, riducono cache, ram, decodifica, recupera latenze, migliora operazioni fuori servizio e previsione del ramo, dopo di che aggiungere più cache pur avendo una latenza inferiore. Cache di larghezza di banda superiore. Aggiungi nuove istruzioni di tanto in tanto. Ridurre i cicli desiderati per istruzione (CPI)

Le velocità di clock sono solo una parte delle prestazioni di una CPU, un componente essenziale, ma sfortunatamente i nodi del metodo hanno colpito un muro negli ultimi dieci anni o giù di lì, non tutto può superare i cinque,0–5,2 Ghz nonostante il raffreddamento ad acqua di qualità , senza ricorrere a ghiaccio secco o azoto liquido.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.