¿Por qué no tenemos más registros en microprocesadores?

18

Teóricamente no se requieren registros; Todos los microprocesadores seguirían funcionando sin registros. Pero esta adición aparentemente trivial ha ayudado a hacer que los microprocesadores sean más eficientes.

¿Por qué no podemos tener más registros para extraer más beneficios de ellos? Son solo memory on chip y uno puede imaginar que no es muy difícil agregarlos. ¿Qué factor influyó en la cantidad de registros para que sean lo que son ahora y no, digamos 10 veces más?

    

8 respuestas

32

Hay varios factores:

  • las microarquitecturas de alto rendimiento utilizan el cambio de nombre del registro. Es decir, el número de registros físicos es mayor que el número de registros visibles desde el punto de vista arquitectónico y pueden realizar un seguimiento de los usos independientes de los mismos.

  • duplicar el número de registros no duplica el rendimiento. ISTR (de Arquitectura de computadora, Un Enfoque Cuantitativo ) que pasar de 16 a 32 registros aporta algo así como una mejora del 10% suponiendo que el aumento no tiene efectos adversos (lo que es un supuesto muy optimista). p>

  • los registros arquitectónicamente visibles tienen costos. Por ejemplo:

    • Aumentar su número aumenta el número de bits tomados en el formato de instrucciones para indicar en qué registro se está actuando (duplicar el número de registros implica tener un bit más por registro en el formato, impidiendo así usar esos bits para otros). usos o forzando un tamaño de instrucción más largo).
    • Aumentar el número de registros arquitectónicos aumenta el costo de cambio de contexto (ya que deben guardarse y restaurarse en el cambio de contexto).
respondido por el AProgrammer
15

Si bien los registros y la RAM son memoria, se accede a ellos de diferentes maneras, para reflejar el costo (en el área de chip o de los ciclos de reloj ocultos) de acceder a ellos.

Los registros están estrechamente vinculados a la ALU, y pueden asumir muchas funciones de fuentes de datos, sumideros, modificadores, etc. Por lo tanto, necesitan una gran cantidad de conexiones multiplexadas de ancho. En algunas arquitecturas podemos escribir R1 < = R2 + R3, y eso es exactamente lo que sucede en un solo ciclo de reloj. Cada registro se trata directamente en el código de operación, esta dirección es un recurso muy limitado.

Como los registros son costosos de implementar, el número generalmente se limita al orden de 10/20 en la mayoría de las arquitecturas.

La RAM está ligada a la CPU, generalmente se canaliza 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 un registro, así que no consuma un ancho de instrucción significativo.

SPARC es una arquitectura interesante, con registros de 72 a 640 64 bits, con un contexto de registro de 32 que se puede desplazar con superposiciones para llamadas de subrutinas rápidas 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.

    
respondido por el Neil_UK
11

Los registros deben ser direccionados dentro de la instrucción. Si hay muchos registros, la instrucción es más larga. Guardar y restaurar el contenido del registro para un servicio de interrupción requiere más tiempo si hay muchos registros.

    
respondido por el Uwe
4

Como la mayoría de las cosas, la cantidad 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 acoplan con el conjunto de instrucciones del procesador, lo que aumenta el número de registros y 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 utilizarían.

A continuación, ¿cuántos registros necesita realmente? Hay un límite a su utilidad. Considera que escribes un algoritmo que realiza alguna operación matemática en 1024 bytes, digamos multiplicar por 5. Con los recuentos de registros actuales, terminas con algo como:

load operand1=5
load address
loop: load operand2=byte1@address
multiply Register1 with Register2
store result
increment address
if address = end goto endLoop
jump loop
endLoop:

Ahora, si tuviera 1024 registros y todos los datos almacenados allí, su programa se vería así:

multiply Register1 with Register2
multiply Register1 with Register3
multiply Register1 with Register4
multiply Register1 with Register5
multiply Register1 with Register6
...

Debido a que cada uno de ellos es una instrucción diferente, cada uno de ellos debe escribirse. Así que su memoria de programa necesaria está explotando. Después de 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 instrucciones para todas las combinaciones?

Entonces, tal vez los números que tenemos disponibles actualmente sean un buen equilibrio entre costo, complejidad y utilidad.

    
respondido por el Arsenal
3

Los registros son muy caros. Muy caro. No son tanto los registros en sí mismos, son todas las conexiones desde y hacia los registros. Digamos que tienes una instrucción reg1 = reg2 + reg3. Para implementar este rápido , necesita leer datos de dos registros en un ciclo y escribir en otro registro en el segundo ciclo. Ahora, si tiene un procesador que puede ejecutar varias instrucciones por ciclo, digamos tres instrucciones, tendría que poder leer datos de seis registros de cada ciclo y escribir datos en 3 registros. Eso es un montón de conexiones muy rápidas.

Por supuesto que 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, puede 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.

    
respondido por el gnasher729
2

Si observa el conjunto de instrucciones de un procesador, hay varias formas de agruparlas. Por ejemplo, todas las instrucciones ADD podrían agruparse juntas, y todas las instrucciones XOR .

Dentro de cada grupo de la misma instrucción, puede haber versiones que operan en la memoria o en los registros. Es este subgrupo el que define efectivamente la cantidad de registros que tiene el procesador.

Como ejemplo hipotético de 8 bits, digamos que las instrucciones $Ax podrían ser las instrucciones ADD , y $Cx podrían ser las instrucciones XOR . ¡Con este diseño, solo quedan cuatro bits para definir los operandos!

  • Uno podría tener solo cuatro registros de propósito general, y usar dos bits para definir uno, y dos bits para definir el otro.
  • O, uno podría usar el primer bit para distinguir variantes "especiales", y los otros 3 bits para definir cuál de los ocho registros operarán con el acumulador ( $x0 podría ser el acumulador mismo).
  • O, uno podría tener más de este número de registros, pero luego limitar los registros a los que se puede acceder y las instrucciones.

Por supuesto, hemos pasado los 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)

Diga que los cuatro bits principales corresponden a la instrucción: ADD , SUB , XOR , MOV , CMP , etc. Hay 16 posibilidades aquí. Luego, para aquellas instrucciones en las que registrar con registro tenga sentido (por ejemplo, ADD Rx,Ry ), debe especificar Rx y Ry . Digamos que los siguientes dos bits son para x , y los últimos dos son para y . Así:

ADD R1, R2  =>  'ADD' + 'R1' + 'R2' => $A0 + $04 + $02

¡Con solo dos bits para definir un registro como este, solo tiene espacio para un total de cuatro registros!

Como nota aparte, notará que algunas combinaciones de registros no tienen sentido. Por ejemplo, MOV Rx, Rx (no hace nada) y SUB Rx, Rx (siempre produce 0 ). Estas podrían convertirse en instrucciones especiales:

  1. SUB Rx, Rx podría convertirse en NOT Rx - una instrucción de un solo operando.
  2. MOV Rx, Rx podría convertirse en una instrucción MOV que toma un segundo byte como un valor inmediato, interpretado como MOV Rx, #$yy .

De esta manera, puede "jugar" con el mapa de instrucciones, rellenando los orificios para obtener instrucciones 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.

    
respondido por el John Burger
1
  

¿Qué factor influyó en el número de registros

- Jerarquía de memoria

Registros, caché, RAM se implementan con diferentes tecnologías de almacenamiento.

Diferentes tecnologías difieren en

  1. tiempos de acceso
  2. costo
  3. Densidad

Un ejemplo: los registros internos encontrados en una CPU son Memoria estática de acceso aleatorio , mientras que la memoria principal de la computadora es Memoria de acceso aleatorio dinámico

Una celda binaria de RAM estática se implementa usando un circuito de 6 transistores mientras que una celda binaria de RAM dinámica se implementa usando un capacitor y un transistor. Comparando SRAM y DRAM

  • La memoria SRAM es mucho más rápida que la memoria DRAM [Pocos ciclos para acceder a SRAM en comparación con DRAM]
  • El circuito SRAM consume menos energía que la DRAM
  • DRAM requiere actualizar cada bit en la memoria periódicamente, a diferencia de SRAM
  • SRAM cuesta más que DRAM
  • SRAM tiene una menor densidad en comparación con la DRAM

Por lo tanto, no es una cosa práctica aumentar el número de la memoria rápida, costosa y de menor densidad. De hecho, podríamos usar algunos de ellos y un programa bien escrito almacenará los datos utilizados más frecuentemente dentro de estos registros rápidos, mientras que los datos usados menos frecuentes se almacenarán 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 bit 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 registro. Aumentar el número de registros requeriría aumentar la longitud de la instrucción para incluir suficientes bits que puedan acceder a todos los registros.

    
respondido por el Elbehery
-1

Intel está utilizando miles de registros en la actualidad, cientos por núcleo de CPU. Pero la mayor cantidad de datos almacenados en una CPU está en el caché, que responde indirectamente a la pregunta. El caché se organiza en capas, con un pequeño caché L1 rápido y otros cachés L2 y L3 más alejados. En cierto sentido, el archivo de registro 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.

    
respondido por el MSalters

Lea otras preguntas en las etiquetas