Las variables de registro son una forma bien conocida de obtener acceso rápido (register int i
). ¿Pero por qué los registros están en la parte superior de la jerarquía (registros, caché, memoria principal, memoria secundaria)? ¿Cuáles son todas las cosas que hacen que acceder a los registros sea tan rápido?¿Por qué los registros de la CPU son rápidos de acceder?
Respuesta
Los registros son una parte central de la CPU, y gran parte del conjunto de instrucciones de una CPU se diseñará para funcionar contra registros en lugar de ubicaciones de memoria. Acceder al valor de un registro generalmente requerirá muy pocos ciclos de reloj (probablemente solo 1), tan pronto como se acceda a la memoria, las cosas se vuelven más complejas y los controladores de caché/buses de memoria se involucren y la operación tomará considerablemente más tiempo.
Los registros son esencialmente memoria interna de la CPU. Por lo tanto, los accesos a los registros son más fáciles y rápidos que cualquier otro tipo de acceso a la memoria.
Los registros son circuitos que están literalmente conectados directamente a la ALU, que contiene los circuitos para la aritmética. Cada ciclo de reloj, la unidad de registro del núcleo de la CPU puede alimentar una media docena de variables en los otros circuitos. En realidad, las unidades dentro de la ruta de datos (ALU, etc.) pueden alimentar datos entre sí directamente, a través de la red de omisión , que de alguna manera forma un nivel de jerarquía por encima de los registros, pero aún usan números de registro para dirigirse entre sí. . (La sección de control de una CPU totalmente segmentada mapea dinámicamente las unidades de ruta de datos para registrar números.)
La palabra clave register
en C no hace nada útil y no debe usarla. El compilador decide qué variables deben estar en los registros y cuándo.
Los cables (y MUXes) que conectan las unidades de ejecución directamente entre sí se denominan red de reenvío o desvío, ya que elude la latencia de la escritura regresiva en los registros y luego lee desde el archivo de registro. Así es como una instrucción 'add' puede tener latencia 1c, incluso en una CPU segmentada. (Ver el artículo [Wikipedia's Classic RISC pipeline] (https://en.wikipedia.org/wiki/Classic_RISC_pipeline#Solution_A._Bypassing). La idea es la misma incluso en una CPU superescalar fuera de servicio, pero múltiples unidades de ejecución pueden reenviar el uno al otro en paralelo.) –
Cada microcontrolador tiene una CPU como se menciona en Bill, que tiene los componentes básicos de ALU, algo de RAM y otras formas de memoria para ayudar en sus operaciones. La RAM es a lo que te refieres como memoria principal.
La ALU maneja todas las operaciones lógicas arthiméticas y para operar en cualquier operando para realizar estos cálculos, carga los operandos en registros, realiza las operaciones en ellos, y luego su programa accede al resultado almacenado en estos registros directamente o indirectamente.
Dado que los registros están más cerca del corazón de la CPU (es decir, el cerebro de su procesador), están más arriba en la cadena y por supuesto las operaciones realizadas directamente en registros toman la menor cantidad de ciclos de reloj.
Las memorias más pequeñas son generalmente más rápidas que las más grandes; también pueden requerir menos bits para abordar. Una palabra de instrucción de 32 bits puede contener tres direcciones de registro de cuatro bits y tiene mucho espacio para el código de operación y otras cosas; una dirección de memoria de 32 bits llenaría por completo una palabra de instrucciones sin dejar espacio para nada más. Además, el tiempo requerido para abordar una memoria aumenta a una velocidad más que proporcional al registro del tamaño de la memoria. El acceso a una palabra de un espacio de memoria de 4 gig tardará docenas, sino cientos de veces más que el acceso a uno desde un archivo de registro de 16 palabras.
Una máquina que puede manejar la mayoría de las solicitudes de información desde un pequeño archivo de registro rápido será más rápida que una que utiliza una memoria más lenta para todo.
- 1. ¿Por qué los tipos sellados son más rápidos?
- 2. ¿Son los const_iterators más rápidos?
- 3. ¿por qué los tipos sin firmar son más eficientes en la CPU del brazo?
- 4. Endianidad dentro de los registros de la CPU
- 5. ¿Qué son los analizadores XML rápidos para Ruby?
- 6. ¿Por qué se nombran los registros x86 tal como son?
- 7. ¿Cómo acceder a los sensores de calor de la CPU?
- 8. ¿Qué son los registros de llamadas y de llamadas guardadas?
- 9. ¿Por qué los campos públicos son más rápidos que las propiedades?
- 10. ¿Por qué los procesadores de juegos son tan rápidos en comparación con los procesadores de aplicaciones 3D?
- 11. ¿Los dobles son más rápidos que los flotadores en C#?
- 12. ¿Por qué algunos lenguajes de programación son más rápidos que otros?
- 13. ¿Por qué el casting y la comparación en PHP son más rápidos que is_ *?
- 14. ¿Los selectores css de atributo de datos son más rápidos que los selectores de clase?
- 15. CUDA: ¿Por qué los operadores bit a bit son a veces más rápidos que los operadores lógicos?
- 16. IE8 en Localhost realmente lento - Firefox, Opera, Chrome y Safari son todos rápidos, ¿por qué?
- 17. ¿Por qué hay solo cuatro registros?
- 18. ¿Por qué los registros de Delphi no tienen herencia?
- 19. Algoritmo de intersección de los elipsoides rápidos
- 20. ¿Por qué no usar GPU como CPU?
- 21. ¿Alguna biblioteca de Python para acceder a libros rápidos?
- 22. ¿Utiliza Powershell para acceder a los registros de IIS?
- 23. ¿Por qué los objetos Joda son inmutables?
- 24. ¿Por qué los iframes son tan lentos?
- 25. Por qué los puntos son lentos
- 26. ¿Por qué los globales son malos?
- 27. ¿Los registros de origen son frecuentes o infrecuentes?
- 28. ¿Por qué los vectores son tan superficiales?
- 29. ¿Por qué son importantes los árboles binarios?
- 30. por qué los marcos son malos
No entiendo muy bien lo que está preguntando. Los registros están en la parte superior porque están en la parte superior. No hay nada más cerca de la ALU donde se realiza el trabajo. Mantener los datos en un registro significa que no hay gastos generales de transferencia de datos. Por cierto, la palabra clave no hace mucho con los compiladores optimizadores modernos. –
¡Un registro se almacena directamente en la CPU! – NoName
Más información sobre ALU: https: //en.wikipedia.org/wiki/Arithmetic_logic_unit –