Le variabili di registro sono un modo ben noto per ottenere un accesso rapido (register int i
). Ma perché i registri sono in cima alla gerarchia (registri, cache, memoria principale, memoria secondaria)? Quali sono le cose che rendono l'accesso ai registri così veloce?Perché i registri CPU sono rapidamente accessibili?
risposta
I registri sono una parte fondamentale della CPU e gran parte del set di istruzioni di una CPU sarà adattato per funzionare rispetto ai registri piuttosto che alle posizioni di memoria. L'accesso al valore di un registro in genere richiede pochissimi cicli di clock (probabilmente solo 1), non appena si accede alla memoria, le cose diventano più complesse ei controller di cache/bus di memoria vengono coinvolti e l'operazione richiederà molto più tempo.
I registri sono essenzialmente memoria della CPU interna. Quindi gli accessi ai registri sono più facili e veloci di qualsiasi altro tipo di accesso alla memoria.
I registri sono circuiti che sono letteralmente cablati direttamente all'ALU, che contiene i circuiti per l'aritmetica. Ogni ciclo di clock, l'unità di registro del core della CPU può alimentare una mezza dozzina di variabili negli altri circuiti. In realtà, le unità all'interno del datapath (ALU, ecc.) Possono alimentare i dati tra loro direttamente, tramite la rete di bypass , che in qualche modo forma un livello gerarchico sopra i registri - ma usano ancora i numeri di registro per rivolgersi tra loro . (La sezione di controllo di una CPU completamente pipeline mappa dinamicamente unità di dati per registrare i numeri.)
La parola chiave register
in C non fa nulla di utile e non dovresti usarla. Il compilatore decide quali variabili dovrebbero essere nei registri e quando.
I fili (e MUX) che collegano le unità di esecuzione direttamente tra loro sono chiamati rete di inoltro o di bypass, poiché ignorano la latenza di write-back ai registri e quindi la lettura dal file di registro. Ecco come un'istruzione 'add' può avere latenza 1c anche in una CPU pipeline. (Vedi l'articolo [Wikipedia Pipeline Classic RISC] (https://en.wikipedia.org/wiki/Classic_RISC_pipeline#Solution_A._Bypassing). L'idea è la stessa anche in una CPU superscalare out-of-order, ma più unità di esecuzione possono si stanno inoltrando l'un l'altro in parallelo.) –
Ogni microcontrollore ha una CPU menzionata da Bill, che ha i componenti di base di ALU, alcune RAM e altre forme di memoria per facilitare le operazioni. La RAM è ciò a cui ti stai riferendo come memoria principale.
L'ALU gestisce tutte le operazioni logiche aritmetiche e per operare su qualsiasi operando per eseguire questi calcoli, carica gli operandi in registri, esegue le operazioni su questi e quindi il programma accede direttamente ai risultati memorizzati in questi registri o indirettamente.
Poiché i registri sono più vicini al cuore della CPU (ad esempio il cervello del processore), sono più in alto nella catena e le operazioni eseguite direttamente sui registri richiedono la minor quantità di cicli di clock.
Le memorie più piccole sono generalmente più veloci di quelle più grandi; possono anche richiedere meno bit da indirizzare. Una parola di istruzioni a 32 bit può contenere tre indirizzi di registro a quattro bit e avere molto spazio per l'opcode e altre cose; un indirizzo di memoria a 32 bit riempirebbe completamente una parola di istruzioni senza lasciare spazio a nient'altro. Inoltre, il tempo richiesto per indirizzare una memoria aumenta ad una velocità più che proporzionale al log delle dimensioni della memoria. L'accesso a una parola da uno spazio di memoria di 4 gig richiederà decine se non centinaia di volte in più rispetto all'accesso da un file di registro di 16 parole.
Una macchina in grado di gestire la maggior parte delle richieste di informazioni da un piccolo file di registro veloce sarà più veloce di una che utilizza una memoria più lenta per tutto.
- 1. Perché i registri x86 sono nominati come sono?
- 2. I vecchi dati sono accessibili in CouchDB?
- 3. Dove sono i registri Gradle?
- 4. Perché alcuni oggetti non sono accessibili da thread diversi?
- 5. Perché le proprietà statiche non sono accessibili da "->" ma accessibili da "::"?
- 6. eventi C#: come le variabili sono accessibili
- 7. I registri non sono nidificati sotto Richieste in VM flessibile
- 8. Dove sono registrati i registri per un'app Rails usando Warbler?
- 9. Cosa sono i registri salvati di Call e Caller?
- 10. Dove sono i registri per couchdb su iriscouch?
- 11. Utilizzo elevato della CPU nell'applicazione java - perché?
- 12. Disabilita i registri nginx
- 13. Quali registri sono sicuri da utilizzare in una funzione (x86)
- 14. Quali sono i limiti pratici dei thread per CPU?
- 15. I registri PTX "bit bucket"
- 16. Perché gli operatori di assegnazione della classe genitore non sono accessibili dalla classe derivata oggetti
- 17. EventLog - ottenere i registri disponibili
- 18. Le istanze di Google Container Engine sono accessibili tramite DNS?
- 19. strumenti studio Android per mostrare i registri e le istruzioni
- 20. Perché i tratti sono istantanei?
- 21. Perché i globali sono cattivi?
- 22. Perché i pixel sono mobili?
- 23. Quali sono le migliori librerie audio C++ a prezzi accessibili?
- 24. Le classi non sono accessibili dal pacchetto esterno
- 25. Quante fotocamere USB sono accessibili da un PC
- 26. Winston: come ruotare i registri
- 27. I socket di dominio UNIX non sono accessibili tra gli utenti?
- 28. I metodi ES6 ottengono null "questo" e le variabili di classe non sono accessibili
- 29. Calllogs che restituiscono tutte le chiamate dei registri e i registri sms, come posso filtrare solo i registri delle chiamate?
- 30. Come posso rendere accessibili i tooltip di Twitter Bootstrap?
Non capisco cosa stai chiedendo. I registri sono in cima perché sono in cima. Non c'è nulla di più vicino alla ALU in cui il lavoro è fatto. Mantenere i dati in un registro significa che nessun sovraccarico di trasferimento dati. Tra l'altro la parola chiave non fa molto con i moderni compilatori di ottimizzazione. –
Un registro è memorizzato direttamente nella CPU! – NoName
Ulteriori informazioni su ALU: https: //en.wikipedia.org/wiki/Arithmetic_logic_unit –