Informática: ¿Por qué hay tan poca información que se puede almacenar en el registro de una CPU?

Un registro de CPU debe corresponder directamente con el tamaño de sus datos y palabra de dirección: 32 bits, 64 bits, etc. Los registros deben vivir en la parte más rápida de la CPU, están codificados en la mayoría de las instrucciones de la CPU, y son operados por las operaciones fundamentales de la CPU.

De manera realista, solo puede hacer tanto trabajo en un solo ciclo informático. Agregue dos o registros juntos, tal vez multiplique, cambie, haga otra coincidencia básica. Las CPU modernas tienen registros “vectoriales”, generalmente más largos (128 bits o 256 bits) que funcionan en conjuntos de valores de 8, 16, 32, 64 bits. Pero aún así, solo puede suceder mucho en un solo ciclo.


Así que aquí hay un núcleo de CPU en un chip Tegra 5 de nVidia. Vea el bloque “4x Registros enteros” … ese es el archivo básico de registro de la máquina. Cada registro tiene 64 bits. ¿Ves todas esas flechas al archivo de registro? Esos son puertos de entrada y salida del archivo: los registros tienen que estar conectados a todo tipo de unidades de cómputo en el chip (esto está un poco simplificado, pero debes entender la idea). Entonces son una parte relativamente costosa de la CPU.

También está la cuestión de, si tuviera más de 64 bits de datos en un registro entero, qué haría con él. Nadie realmente necesita multiplicar enteros de 128 o 256 bits con tanta frecuencia … tal vez en criptografía de vez en cuando. Algunas CPU tienen instrucciones especializadas para el cifrado, no es necesario que toda la CPU responda a esa necesidad.

Y lo intentamos. Hace siglos, cuando la tecnología del compilador apestaba, las CPU se denominaron computadoras de conjunto de instrucciones complejas (CISC), y había todo tipo de instrucciones especializadas. El problema era que estos estaban microcodificados … a diferencia de la mayoría de los procesadores modernos, no había preocupación por ejecutar una instrucción por ciclo, usted ejecutó una microinstrucción por ciclo. Entonces, algunas instrucciones tardaron 20, 40 o más ciclos en ejecutarse. Eventualmente, se descubrió que si simplificamos el núcleo central del chip (por ejemplo, REDUCIRON el número y tal vez la complejidad de las instrucciones), toda la CPU podría ir más rápido. Esa es la arquitectura de CPU “moderna”, que solía llamarse RISC. Pero en estos días, incluso los chips x86, que tienen instrucciones algo complejas, son en realidad RISC: las instrucciones más complejas que escribes se convierten en múltiples instrucciones dentro del chip … las más simples no.

Entonces, si no podemos tener registros más grandes, ¿qué tal más de ellos? Bueno, eso ha sido probado. Los primeros 68K chips tenían 16 registros, x86 originalmente solo tenía 8, la mayoría de los nuevos diseños RISC tenían alrededor de 32, y algunos, como SPARC, a veces tenían cientos (aunque solo se usaba un pequeño número a la vez). Pero el número de registros está integrado en su conjunto de instrucciones. Cambie esto, y todos sus viejos códigos se rompen. Por lo tanto, x86 no obtuvo registros adicionales hasta el modelo x86-64 de AMD, que introdujo instrucciones de 64 bits y, en ese modelo, ofreció más. El código se iba a romper de todos modos.

Pero había otro truco empleado en estos chips, llamado “cambio de nombre de registro”. Básicamente, lo que eso significa es que la computadora real tiene más de 8, 16 o 32 registros que se ven en el modelo de software, que son registros “virtuales”. Cuando se ejecuta el código, uno de los registros virtuales puede ser R1, digamos, por un tiempo. Ahora, utilizando un análisis de instrucciones inteligente, la cola de captación previa de la CPU está mirando varias instrucciones a la vez. Si encuentra una reutilización de R1 de una manera que no depende del uso actual de R1, puede dar a esa instrucción un R1 diferente y ejecutar ambos al mismo tiempo.

Sin embargo, en algún momento, agregar registros adicionales no hace que las cosas vayan más rápido, porque los compiladores o el mecanismo de registro virtual tienen que analizar cómo usar efectivamente los registros. Y como mencioné, los registros son el tipo de memoria más costoso: multipuerto, muchas veces más rápido que la velocidad de una sola instrucción, etc. Por lo tanto, no agregue estos si no se van a utilizar.

Entonces, las computadoras agregan memoria caché, que no es tan rápida como los registros, pero es mucho más rápida que la memoria sin chip. Algunas CPU, particularmente los chips integrados, ofrecen una pequeña cantidad de SRAM muy rápido a bordo … tampoco tan rápido como los registros, pero muy rápido y, a diferencia de un caché, muy confiable para que la CPU acceda (por ejemplo, siempre es exactamente la misma cantidad de tiempo, no es necesario, como con la memoria caché o la memoria externa, lidiar con el arbitraje del bus, las fallas de la memoria caché, etc. Muchas CPU de escritorio tienen, de hecho, tres memorias caché diferentes. Una memoria caché de nivel uno probablemente es propiedad de un núcleo de CPU específico, y puede estar en un bus muy rápido hacia el núcleo de la CPU. A veces se comparte un caché de nivel 2 entre otra CPU, a veces más, y está en un bus más lento. Un caché de nivel 3 se comparte entre todas las CPU y, al menos en el antiguo días, a veces múltiples CPU. Todavía es más lento, pero aún más rápido que su DRAM. Y, por supuesto, DRAM es muchas veces más rápido que SSD o HDD, al menos a veces muchas veces más rápido que el almacenamiento en red, que es más rápido que el almacenamiento en Internet.

En la parte inferior, encontrará la velocidad de la unidad de disquete Commodore 64, la unidad de cinta Commodore PET y la escritura a mano. Esas son las formas más lentas posibles de almacenar y mover datos.

Cuanto más cerca esté de la CPU y más rápido sea, más caro será. Puede tener una gran caché y registros, pero sería más costoso en términos de hardware. Aumentar el número de registros específicamente causaría tamaños de instrucciones más grandes (ya que las instrucciones contienen la dirección de los registros utilizados), lo que aumentaría el tamaño de todos los programas, por lo tanto, los cachés almacenan menos instrucciones y necesitaría más ram y cachés para almacenar el mismo número de instrucciones. se vuelve mucho más caro muy rápido.

Hoy en día, los compiladores son lo suficientemente inteligentes como para usar lo que tenemos ahora y obtener programas realmente rápidos y para producir mejoras significativas en la velocidad, tendrías que pagar mucho más

Esa memoria muy rápida (los registros) es bastante cara, difícil de hacer y fácil de romper. Agregue un poco de eso, unos 32 kB de caché que es igual de rápido, luego vaya con la memoria más lenta y menos sujeta a mecánica cuántica como el caché L2 o la RAM.