Teóricamente no se requieren registros; Todos los microprocesadores seguirían funcionando sin registros. Pero esta adición aparentemente trivial ha ayudado a que los microprocesadores sean más eficientes.
¿Por qué no podemos tener más registros para extraer más beneficios de ellos? Son solo memoria en chip y uno puede imaginar que no es muy difícil de agregar. ¿Qué factor influyó en el número de registros para ser lo que son ahora y no, digamos 10 veces más?
microprocessor
Darshan Chaudhary
fuente
fuente
Respuestas:
Hay varios factores:
Las microarquitecturas de alto rendimiento utilizan el cambio de nombre de registro. Es decir, el número de registros físicos es mayor que el número de registros arquitectónicamente visibles y pueden rastrear usos independientes de ellos.
duplicar el número de registros no duplica el rendimiento. ISTR (de Computer Architecture, A Quantitative Approach ) que pasar de 16 a 32 registros trae algo así como una mejora del 10%, suponiendo que el aumento no tiene ningún efecto adverso (que es una suposición muy optimista).
los registros arquitectónicamente visibles tienen costos. Por ejemplo:
fuente
Si bien los registros y la RAM son memoria, se accede a ellos de diferentes maneras, para reflejar el costo (en el área del chip o de los ciclos de reloj ocultos) de acceder a ellos.
Los registros están estrechamente vinculados a la ALU, y pueden asumir muchos roles de fuentes de datos, sumideros, modificadores, etc. Por lo tanto, necesitan una gran cantidad de conexiones multiplexadas. En algunas arquitecturas podemos escribir R1 <= R2 + R3, y eso es exactamente lo que sucede en un solo ciclo de reloj. Cada registro se direcciona directamente en el código operativo, este direccionamiento es un recurso muy limitado.
Como los registros son caros de implementar, el número generalmente se limita al orden de 10/20 en la mayoría de las arquitecturas.
La RAM está unida a la CPU, generalmente canalizada a través de una única conexión compartida. Esto hace que sea mucho más barato implementar una gran cantidad de RAM. Las direcciones RAM generalmente provienen de una dirección almacenada en el registro, por lo que no consuma un ancho de instrucción significativo.
SPARC es una arquitectura interesante, con 72 a 640 registros de 64 bits, con un contexto de 32 registros que se puede cambiar con superposiciones para llamadas rápidas de subrutinas con paso de parámetros. Tiende a no encontrarlos en PC y servidores donde el costo es importante, como en el 99.999% de las aplicaciones.
fuente
Los registros deben ser direccionados dentro de las instrucciones. Si hay muchos registros, la instrucción es más larga. Guardar y restaurar el contenido del registro para un servicio de interrupción necesita más tiempo si hay muchos registros.
fuente
Como la mayoría de las cosas, el número de registros es un compromiso entre costo, complejidad y utilidad.
Los registros se implementan como RAM estática multipuerto, lo que los hace más costosos (área de chip) que otras opciones de almacenamiento.
Luego se combinan con el conjunto de instrucciones del procesador, al aumentar el número de registros aumenta la complejidad del conjunto de instrucciones. Entonces, si desea seguir siendo compatible con el conjunto de instrucciones, no puede simplemente aumentar la cantidad de registros disponibles en la próxima generación de procesadores para aumentar la eficiencia, los programas no los usarían.
Luego, ¿cuántos registros necesitas realmente? Hay un límite a su utilidad. Considere que escribe un algoritmo que realiza algunas operaciones matemáticas en 1024 bytes, digamos que multiplique por 5. Con el conteo de registros actual, termina con algo como:
Ahora, si tuviera 1024 registros y todos los datos almacenados allí, su programa se vería así:
Debido a que cada uno de ellos es una instrucción diferente, cada uno de ellos tiene que ser escrito. Entonces, la memoria de su programa necesario está explotando Tras darse cuenta de esto, es posible que desee introducir algunas instrucciones como,
multiply register1 with register(2 to 256)
. Pero, ¿cuándo se detendría? ¿Proporciona una instrucción para todas las combinaciones?Entonces, tal vez los números que tenemos disponibles en la actualidad son un buen equilibrio entre costo, complejidad y utilidad.
fuente
multiply Register1 with Register2 multiply Register1 with Register3
es muy poco realista, ya que los datos deben haber venido directa o indirectamente desde fuera de la computadora, por lo que los registros deben cargarse y los resultados deben usarse en algún lugar, directa o indirectamente, por lo que los registros deben almacenarse. En realidad, un compilador decente de optimización para un lenguaje de alto nivel 'desenrollará' el bucle del primer programa para crear algo como el segundo programa, optimizando el uso del registro, la latencia de la memoria, tal vez la ocupación del caché y la velocidad de ejecución.multiply register1 with register(2 to 256)
instrucciones de propósito especial . La canalización mejora significativamente el rendimiento de la CPU, especialmente para decodificar y ejecutar instrucciones de forma más sencilla. Por lo tanto, el efecto de las instrucciones de variedad complejas y masivas se puede lograr mediante el uso de varias instrucciones más simples con una tasa de ejecución más alta. Tener un mayor número de registros ayuda al permitir que el compilador genere muchas instrucciones independientes (que no comparten un registro), que se pueden completar de forma independiente, mejorando el rendimiento. Su ejemplo = más registros son mejores.Los registros son muy caros. Muy caro. No se trata tanto de los registros en sí, sino de todas las conexiones desde y hacia los registros. Digamos que tiene una instrucción reg1 = reg2 + reg3. Para implementar esto rápidamente , debe leer los datos de dos registros en un ciclo y escribir en otro registro en el segundo ciclo. Ahora, si tiene un procesador que puede ejecutar múltiples instrucciones por ciclo, digamos tres instrucciones, necesitaría poder leer datos de seis registros cada ciclo y escribir datos en 3 registros. Esa es una gran cantidad de conexiones muy rápidas.
Por supuesto, puedes usar más transistores. El problema es: la velocidad baja. Necesita más hardware para elegir entre más registros. El espacio para el archivo de registro se hace más grande. Todo eso hace las cosas más lentas. Entonces, con la misma tecnología, es posible que pueda tener 16 registros y ejecutar a 2,600 MHz o tener 32 registros y ejecutar a 2,400 MHz. Ahora los registros adicionales deben compensar una caída significativa en la velocidad del reloj.
fuente
- Jerarquía de la memoria
Los registros, la caché y la RAM se implementan con diferentes tecnologías de almacenamiento.
Diferentes tecnologías difieren en
Un ejemplo: los registros internos que se encuentran en una CPU son la memoria estática de acceso aleatorio , mientras que la memoria principal de la computadora es la memoria dinámica de acceso aleatorio
Una celda binaria RAM estática se implementa usando un circuito de 6 transistores, mientras que una celda binaria RAM dinámica se implementa usando un condensador y un transistor. Comparando SRAM y DRAM
Por lo tanto, no es práctico aumentar la cantidad de memoria rápida, costosa y de menor densidad. De hecho, podríamos usar algunos de ellos y un programa bien escrito almacenará los datos usados más frecuentes dentro de estos registros rápidos, mientras que los datos usados menos frecuentes se almacenan en la memoria más lenta.
- longitud de la instrucción
La dirección de los registros se incluye dentro de una instrucción, que limita el número de registros accesibles en función de los números de bits que pueden representar la dirección. Por ejemplo, en la arquitectura MIPS, la instrucción de longitud de 32 bits contiene solo 5 bits para representar la dirección de los registros accesibles, lo que limita el número de registros a 2 5 = 32 registros. Incrementar el número de registros requeriría aumentar la longitud de la instrucción para incluir bits suficientes que puedan acceder a todos los registros.
fuente
Si observa el conjunto de instrucciones de un procesador, hay varias formas de agruparlos. Por ejemplo, todas las
ADD
instrucciones pueden agruparse y todas lasXOR
instrucciones.Dentro de cada grupo de la misma instrucción, puede haber versiones que operan en la memoria o en los registros. Es este subgrupo lo que define efectivamente el número de registros que tiene el procesador.
Como ejemplo hipotético de 8 bits, digamos que las
$Ax
instrucciones podrían ser lasADD
instrucciones y$Cx
podrían ser lasXOR
instrucciones. ¡Con este diseño, solo quedan cuatro bits para definir los operandos!$x0
podría ser el acumulador mismo).Por supuesto, hemos pasado conjuntos de instrucciones de 8 bits. Pero aún así, esta lógica ayudó a definir conjuntos de registros en el pasado; continuará haciéndolo en el futuro.
EDITAR (según lo solicitado)
Decir la parte superior cuatro bits son para la instrucción:
ADD
,SUB
,XOR
,MOV
,CMP
etc Hay 16 posibilidades aquí. Luego, para aquellas instrucciones en las que tiene sentido registrarse para registrarse (por ejemploADD Rx,Ry
), debe especificarRx
yRy
. Digamos que los siguientes dos bits son parax
, y los dos últimos son paray
. Así:¡Con solo dos bits para definir un registro como este, solo tiene espacio para un total de cuatro registros!
Como comentario adicional, notará que algunas combinaciones de registros no tienen sentido. Por ejemplo,
MOV Rx, Rx
(no hace nada) ySUB Rx, Rx
(siempre produce0
). Estas podrían convertirse en instrucciones de casos especiales:SUB Rx, Rx
podría convertirse enNOT Rx
una instrucción de un solo operando.MOV Rx, Rx
podría convertirse en unaMOV
instrucción que toma un segundo byte como valor inmediato, interpretado comoMOV Rx, #$yy
.De esta manera, puede "jugar" con el mapa de instrucciones, completando los huecos para obtener instrucciones de otro modo inútiles o sin sentido para proporcionar un conjunto de instrucciones más amplio para el programador. Pero en última instancia, el conjunto de instrucciones define el conjunto de registros.
fuente
Intel está utilizando miles de registros hoy en día, cientos por núcleo de CPU. Pero la mayor cantidad de datos almacenados en una CPU está en caché, lo que indirectamente responde a la pregunta. La caché está organizada en capas, con una pequeña caché L1 rápida y cachés L2 y L3 más lentas más lejos. El archivo de registro en cierto sentido es L0, incluso más rápido que L1 pero también más pequeño. Por lo tanto, podría aumentar el número de registros, pero eso probablemente los ralentizaría.
fuente