2013-01-24 7 views
14

Mi dispiace se questo è il posto sbagliato per chiederlo ma ho cercato e trovato sempre una risposta diversa. La mia domanda è:Cache o registri - che è più veloce?

Quale è più veloce? Registri cache o CPU?

Secondo me, i registri sono ciò che carica direttamente i dati per eseguirlo mentre la cache è solo una posizione di archiviazione chiusa o internamente nella CPU.

Qui ci sono le fonti che ho trovato che mi confonde:

2 per la cache | 1 per i registri

http://in.answers.yahoo.com/question/index?qid=20110503030537AAzmDGp

cache è più veloce.

http://wiki.answers.com/Q/Is_cache_memory_faster_than_CPU_registers

Così che è davvero?

+4

i registri saranno sempre i più veloci, perché è qui che avviene "l'esecuzione". ma i registri sono MOLTO limitati in termini di spazio di archiviazione. per esempio. I processori x86 avevano solo ** 4 ** registri di uso generale in cui si potevano archiviare le cose, e anche quelli erano a duplice scopo per certe cose. –

risposta

7

particolare sull'architettura x86:

  • lettura dal registro ha 0 o 1 latenza ciclo.
  • La scrittura sui registri ha una latenza di 0 cicli.
  • Lettura/scrittura della cache L1 ha una latenza da 3 a 5 cicli (varia in base all'età dell'architettura)
  • Le richieste di carico/archivio effettive possono essere eseguite entro 0 o 1 cicli a causa del buffer di write-back e delle funzioni di inoltro del punto vendita (dettagli di seguito)

lettura dal registro può avere una latenza di 1 ciclo su Intel core 2 CPU (ed i modelli precedenti) grazie al suo design: Se un numero sufficiente istruzioni simultaneamente-esecuzione sono la lettura da diversi registri, banco di registri della CPU sarà in grado per soddisfare tutte le richieste in un unico ciclo. Questa limitazione di progettazione non è presente in nessun chip x86 immesso sul mercato consumer dal 2010 (ma è presente in alcuni chip Xeon rilasciati nel 2010/11).

Le latenze della cache L1 sono fisse per modello, ma tendono a rallentare quando si torna indietro nel tempo ai modelli precedenti. Tuttavia, tieni a mente tre cose:

  1. chip x86 in questi giorni hanno una cache write-back che ha una latenza di 0 cicli. Quando si memorizza un valore in memoria, esso cade in quella cache e l'istruzione è in grado di ritirarsi in un singolo ciclo. La latenza della memoria diventa visibile solo se si emettono sufficienti scritture consecutive per riempire la cache di write-back. Le cache di writeback hanno avuto un ruolo preminente nel design dei chip desktop sin dal 2001, ma fino a molto tempo fa mancavano ampiamente i mercati dei chip mobili basati su ARM.

  2. chip x86 in questi giorni hanno negozio spedizioni dalla cache write-back. Se memorizzi un indirizzo nella cache del WB e poi rileggi lo stesso indirizzo diverse istruzioni successive, la CPU recupererà il valore dalla cache del WB invece di accedere alla memoria L1 per esso. Ciò riduce la latenza visibile su cosa appare come come richiesta L1 su 1 ciclo.Ma in realtà, la L1 non è referenziata in quel caso. L'inoltro del negozio ha anche altre regole per il suo corretto funzionamento, che variano anche molto tra le varie CPU disponibili sul mercato (in genere richiedono allineamento degli indirizzi a 128 bit e dimensioni degli operandi corrispondenti).

  3. Il link funzionalità di inoltro può generare falsi positivi dov'è nella CPU pensa l'indirizzo è nel buffer writeback basato su un controllo parziale-bit veloce (di solito 10-14 bit, a seconda del chip). Usa un ciclo extra per verificare con un controllo completo. In caso contrario, la CPU deve reindirizzare come richiesta di memoria normale. Questa miss può aggiungere una latenza extra di 1-2 cicli agli accessi alla cache L1 qualificanti. Nelle mie misurazioni, le missioni di inoltro dei negozi si verificano abbastanza spesso su Bulldozer di AMD, ad esempio; abbastanza in modo che il tempo di latenza della cache L1 sia superiore del 10-15% rispetto ai 3 cicli documentati. È quasi un non fattore nella serie Core di Intel.

di riferimento primario: http://www.agner.org/optimize/ e in particolare http://www.agner.org/optimize/microarchitecture.pdf

E poi graficamente manualmente informazioni da quella con i tavoli sulle architetture, i modelli e le date di uscita dai vari lista delle pagine CPU su wikipedia.

+0

È possibile fornire alcuni collegamenti/riferimenti per i tempi. – ydroneaud

+0

grazie per i collegamenti – ydroneaud

28

Cercando di rendere questo più intuitivo possibile senza perdersi nella fisica alla base della domanda: c'è una semplice correlazione tra velocità e distanza in elettronica. Più si fa viaggiare un segnale, più diventa difficile ottenere quel segnale dall'altra parte del filo senza che il segnale si corrompa. È il principio "non c'è il pranzo libero" del design elettronico.

Il corollario è che più grande è più lento. Perché se fai qualcosa di più grande, inevitabilmente le distanze aumenteranno. Qualcosa che è stato automatico per un po ', riducendo le dimensioni della feature sul chip ha prodotto automaticamente un processore più veloce.

Il file di registro in un processore è piccolo e si trova fisicamente vicino al motore di esecuzione. Il più lontano rimosso dal processore è la RAM. È possibile inserire il caso e in realtà vedere i fili tra i due. In mezzo si nascondono le cache, progettate per colmare il divario drammatico tra la velocità di quei due opposti. Ogni processore ha una cache L1, relativamente piccola (tipicamente 32 KB) e situata più vicina al core. Più in basso è la cache L2, relativamente grande (4 MB typ) e situata più lontano dal nucleo. I processori più costosi hanno anche una cache L3, più grande e più lontana.

Quindi ciò che segue è che un registro della CPU è sempre più veloce della cache L1. È il più vicino La differenza è all'incirca un fattore pari a 3.

+0

La cache generalmente ha anche lo svantaggio di essere indirizzata rispetto a un indirizzo in un registro, tipicamente con un offset; in genere l'indirizzo non è disponibile fino a quando l'indirizzo di base non è stato letto da un registro e non è stato aggiunto un offset. (L'indirizzamento relativo e relativo al PC sono eccezioni, ma l'hardware è raramente [se mai] progettato per sfruttarlo.) Inoltre, il regfile di Alpha 21464 ["occupa un'area oltre quattro volte la dimensione delle cache L1 di 64 KB"] (http://books.google.com/books?id=FQ-uGlvmSIkC&pg=PA24) ("Microprocessori multi-threading - Evoluzione o rivoluzione", Jesshope, 2003) –