6 votos

¿Qué impide la construcción de una CPU con toda la memoria necesaria representada en registros?

Las CPUs modernas emplean una jerarquía de tecnologías de memoria. Los registros, integrados en el chip, tienen los tiempos de acceso más bajos, pero son caros y volátiles. La caché es un intermediario entre la RAM y los registros para almacenar estructuras de datos y reducir la latencia entre la RAM y los registros. La RAM contiene, para el ámbito de esta consulta, el código de programa activo y sus estructuras de datos. El almacenamiento no volátil es utilizado por los programas para guardar sus datos y mantener el SO y sus programas.

La latencia de acceso a los datos en la memoria ha sido un importante cuello de botella a la hora de crear CPUs más rápidas que no permanezcan inactivas, a la espera de nuevas instrucciones. Por ello, se han diseñado varios métodos para paralelizar las cargas de trabajo, las CPUs para predecir las bifurcaciones y ocultar la sobrecarga de acceso a la memoria, entre otros. Sin embargo, la complejidad de todo esto ha ignorado aparentemente otra posibilidad: un archivo de registro de toda la memoria.

Una CPU de este tipo se construye con 4, 8, 16, 32 GB o más, de registros. Sin caché. No hay RAM. Sólo la CPU, los registros del chip y el almacenamiento externo no volátil (SSD/Flash, HDD, etc.).

Comprendo que es poco probable que la demanda de un chip de este tipo justifique su coste, pero me sigue sorprendiendo que nadie parezca haber diseñado un dispositivo sencillo, como una MCU o SoC de alto rendimiento con una pequeña cantidad de memoria de sólo registro. ¿Existen otros retos (quizás, de ingeniería) para el diseño y la construcción de un chip de este tipo?

EDITAR para aclarar. No me refiero a una CPU en la que toda la memoria (tecnología DRAM) esté integrada en la matriz de la CPU, ni a una caché que se amplíe a varios Gigabytes. Me refiero a un diseño en el que los registros sigan siendo la tecnología existente... sólo que ampliada en unos cuantos órdenes de magnitud para poder albergar múltiples gigabytes de datos.

0 votos

¿Qué aplicación se te ocurre que requiera tanta velocidad pero muy poca memoria? Creo que también hay mucha más circuitería auxiliar por registro que por SRAM. Lo más parecido es probablemente una FPGA.

4 votos

El diseño del procesador SPARC permite algo así como 520 registros. Lo dividen en una variedad de "ventanas" que son secciones más pequeñas de esto. (Por cierto, no conozco ningún SPARC que implemente todos los 520.) La implementación de registros de lectura/escritura de doble puerto es costosa en términos de espacio. Y estos tienen que funcionar a la máxima velocidad de reloj. Los arreglos de memoria más grandes requieren más tiempo y superan rápidamente la velocidad del reloj, requiriendo retrasos. En algún momento, se vuelve al sistema de caché. Se puede disponer de una caché L1 más rápida (más pequeña) con menores retrasos en el ciclo de reloj y añadir una L2 y una L3 con mayor tiempo de funcionamiento.

5 votos

¿Has intentado calcular cuánto espacio de hardware lógico y de silicio se necesitaría para direccionar (y acceder) a 32 GB de registros individualmente? ¿Y cuál sería la latencia de acceso asociada?

15voto

GetFree Puntos 495

Hay dos factores que van en contra de tu idea:

  • los procesos óptimos de producción de chips para (D)RAM y lógica (CPU) son diferentes. Combinar ambas cosas en un mismo chip da lugar a compromisos, y el resultado es mucho menos óptimo que el que se puede conseguir con chips separados, cada uno construido con su propio proceso óptimo.

  • La memoria rápida (registros) ocupa más superficie de la matriz y consume más corriente (energía) que la memoria lenta. En consecuencia, cuando la matriz de la CPU está llena de memoria realmente rápida (velocidad de la CPU), el tamaño de esa memoria no se acercaría a los GB que mencionas. Sería más bien el tamaño actual de las cachés más rápidas en el chip.

1 votos

Una pregunta anterior mía sobre las diferencias exactas del proceso: electronics.stackexchange.com/questions/134585/

0 votos

¿Puede dar una cifra aproximada de la diferencia de tamaño? ¿Es un factor de 2, 20, 200?

0 votos

@PeteBecker La celda DRAM utiliza 1 transistor + capacitancia, una celda SRAM (que es más parecida a un registro) utiliza unos 6 transistores. Puedes estimar la diferencia de tamaño a partir de eso.

8voto

Rob Puntos 131

No hay espacio suficiente en la matriz de la CPU para que quepa una cantidad tan grande de memoria, la memoria RAM actual se basa en DIMMs con múltiples chips.

El coste también es un problema, el espacio de la matriz de la CPU es más caro debido a un proceso de fabricación diferente.

En la actualidad disponemos de cachés de CPU (memoria en la matriz) para este fin y son lo más grandes posible. Para la mayoría de los propósitos no hay necesidad de hacer esta caché directamente direccionable.

Aquí está la matriz de un i7-5960X con 20 MB de caché L3:

img

fuente: https://www.anandtech.com/show/8426/the-intel-haswell-e-cpu-review-core-i7-5960x-i7-5930k-i7-5820k-tested

2 votos

Una imagen muy interesante. ¿Qué es la zona de la derecha? No puedo creer que sea un espacio no utilizado.

0 votos

@Gp2mv3 -- la zona de la derecha es una protoboard. Puedes personalizar tu chip.

2 votos

Por favor, facilite un enlace, o al menos una cita, de la fuente original de la imagen que incluya en su respuesta.

4voto

Ozzyprv Puntos 1

Creo que la principal razón por la que no se ha hecho es porque el rendimiento podría no mejorar tanto como se podría pensar.

1) Una CPU con un conjunto de registros enorme probablemente tendría que funcionar a una velocidad de reloj más baja que una con un conjunto de registros pequeño.

a) Las memorias son esencialmente muxes muy grandes. Cuanto más grande es el mux, más transistores se necesitan para realizar un acceso. Cuantos más transistores se necesiten, más lento será su funcionamiento, ya sea porque hay más niveles de lógica o porque hay más transistores conectados al mismo nodo (por tanto, mayor capacitancia). Hay una razón por la que las memorias no funcionan a la misma velocidad que la lógica de la CPU.

b) Implementar tanta memoria requiere mucho espacio en el silicio. Las señales tardan en propagarse físicamente a través de una pieza de silicio más grande (retardo de enrutamiento). Sólo porque sea más grande es poco probable que el dispositivo pueda funcionar a la misma velocidad que una CPU físicamente más pequeña.

2) Las codificaciones binarias de las instrucciones de la máquina serían mucho menos eficientes si se añaden más registros. Por ejemplo, si tu CPU tiene 4 registros, necesitas 2 bits para codificar una selección de registro. Si su CPU tiene 4 mil millones de registros de 64 bits (haciendo 32GB) entonces necesita 32 bits para seleccionar cada registro.

Tomemos por ejemplo una instrucción que calcula el OR lógico de dos registros y almacena el resultado en un tercer registro.

Para una CPU que tiene 4 registros hay que reservar 6 bits para codificar el operando y las selecciones de destino.

Para una CPU con 4.000 millones de registros es necesario utilizar 96 bits de espacio de operandos para codificar las selecciones de registros.

Las instrucciones que antes ocupaban 16 bits ahora pueden ocupar 128 bits. El tamaño de los programas aumentaría mucho en términos de uso de la memoria sin que necesariamente se añada funcionalidad a los mismos.

Por supuesto, se puede ser inteligente y crear algunas codificaciones de instrucciones que sólo utilicen las primeras X ubicaciones de registro para ahorrar bits. Pero entonces volvemos al concepto original de registro.

Hay dispositivos que tienen acceso a la memoria en un solo ciclo, pero son microcontroladores o sistemas en un chip y suelen tener velocidades de reloj mucho más bajas que la CPU de un PC. Suelen estar limitados a unos pocos 10s a 100s de MHz para el acceso a la memoria de ciclo único. E incluso en esos casos, el tamaño de la memoria no suele ser de GB.

3voto

gnasher729 Puntos 111

A medida que se añaden más registros a una CPU, el tiempo de acceso se hace cada vez más lento, porque se necesita la lógica para elegir, por ejemplo, uno de 1024 registros en lugar de uno de 16.

Y los registros son rápidos porque se conectan directamente a varias cosas de entrada y salida de las ALUs principalmente). Puedes hacer eso con 16 registros, no con 1024.

La caché L1 es más o menos tan rápida como los registros, pero pierde velocidad debido a los problemas de selección de los datos correctos y de transferencia de datos. La caché L1 también se vuelve más lenta con el tamaño. Y luego está el coste, por supuesto. Mira los precios de las CPU con 20 MB de caché L3; eso te permite adivinar cuánto costarían 64 GB de caché L3.

2 votos

Se necesitan campos de dirección de registro más largos dentro del formato de la instrucción para direccionar más registros. Una instrucción de 16 bits que se dirija a dos registros diferentes de un total de 256 registros sería imposible, no quedan bits para la instrucción.

0 votos

@Uwe A menos que sea un TTA ¡! :P

0voto

bakytn Puntos 850

En cierto modo, depende de lo que se entienda por "registros". Hay compensaciones naturales entre:

  • Coste: el acceso rápido es más caro
  • Calor: el acceso rápido produce más calor
  • Tamaño: el acceso a los bloques de datos más grandes es más lento, por lo que, incluso sin tener en cuenta el coste, no se puede aumentar el tamaño de los registros y esperar que mantengan la misma velocidad, ya que hay que ir a "coger los datos" de donde sea que estén almacenados en el chip.

Una de las primeras CPUs, la Intel 4004, podía usarse (y a menudo se usaba) sin RAM, y no tenía caché, por lo que la CPU que quieres existe (aunque todavía usaba una ROM para almacenar el programa).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X