
Un archivo de registros es una matriz de registros direccionables que tiene dos o más puertos que permiten la lectura y escritura concurrente de los registros en la matriz. [ 1 ] La lectura es no destructiva , lo que significa que el acto de leer no altera los datos almacenados.
Cada puerto es de escritura o de lectura, con señales de entrada y salida relevantes para su función. Todos los puertos tienen entradas de dirección que especifican el registro al que se va a acceder. Los puertos de escritura también tienen entradas de datos que especifican el valor que se va a escribir en el registro, y una entrada de habilitación de escritura que permite escribir los datos. Los puertos de lectura tienen salidas de datos que transmiten el valor de salida del registro. [ 1 ]
Los archivos de registro se utilizan en diversas aplicaciones, entre ellas como registros de procesador en unidades centrales de procesamiento (CPU), como memoria de datos en FIFOs y en aceleradores de hardware .
Arquitectura típica
Esquema simplificado de un banco de registros básico de 3 puertos con m registros, cada uno de n bits de ancho. Los dos puertos de lectura permiten lecturas concurrentes de registros iguales o diferentes, mientras que el puerto de escritura se utiliza para escribir en cualquier registro. Una operación de lectura se inicia al activar la dirección de un registro en el bus RADDR de un puerto de lectura, lo que provoca que el valor almacenado de dicho registro se envíe al bus de salida RDATA asociado. Una escritura en un registro se inicia activando la dirección del registro en WADDR, los datos a escribir en WDATA y la habilitación de escritura (WE); la operación de escritura se produce en el siguiente flanco ascendente del reloj.
En unidades centrales de procesamiento (CPU)
La arquitectura del conjunto de instrucciones de una CPU casi siempre define un conjunto de registros que se utilizan para transferir datos entre la memoria y las unidades funcionales del chip. El archivo de registros forma parte de la arquitectura y es visible para el programador, a diferencia del concepto de caché transparente . En las CPU más sencillas, estos registros arquitectónicos se corresponden uno a uno con las entradas de un archivo de registros físicos (PRF) dentro de la CPU. Las CPU más complejas utilizan el cambio de nombre de registros , de modo que la asignación de qué entrada física almacena un registro arquitectónico específico cambia dinámicamente durante la ejecución.
El acceso mediante registros es el método de utilizar un único nombre para acceder a múltiples registros físicos diferentes, dependiendo del modo de funcionamiento.
Cambio de banco de registros
Los archivos de registro pueden agruparse en bancos de registro. [ 2 ] Un procesador puede tener más de un banco de registro.
Los procesadores ARM tienen registros con y sin bancos. Si bien todos los modos comparten los mismos registros físicos para los primeros ocho registros de propósito general (GPR), de R0 a R7, el registro físico al que apuntan los registros con bancos, de R8 a R14, depende del modo de operación del procesador. [ 3 ] Cabe destacar que el modo de solicitud de interrupción rápida (FIQ) tiene su propio banco de registros para R8 a R12, y la arquitectura también proporciona un puntero de pila privado (R13) para cada modo de interrupción.
Los procesadores x86 utilizan el cambio de contexto y las interrupciones rápidas para alternar entre el archivo de instrucciones, el decodificador, los registros de propósito general (GPR) y los registros, si hay más de uno, antes de que se emita la instrucción. Sin embargo, esto solo existe en procesadores que admiten la ejecución superescalar. El cambio de contexto es un mecanismo totalmente diferente al banco de registros de ARM.
El MODCOMP y los procesadores posteriores compatibles con el 8051 utilizan bits en la palabra de estado del programa para seleccionar el banco de registros actualmente activo.
Implementación física

La convención de diseño habitual consiste en leer una matriz simple verticalmente. Es decir, una sola línea de palabra, que se extiende horizontalmente, hace que una fila de celdas de bits coloque sus datos en líneas de bits, que se extienden verticalmente. Los amplificadores de detección , que convierten las líneas de bits de lectura de baja amplitud en niveles lógicos de amplitud completa, suelen estar en la parte inferior (por convención). En ocasiones, se construyen registros más grandes mediante la superposición de matrices simples reflejadas y rotadas.
Los archivos de registro tienen una línea de palabra por entrada por puerto, una línea de bit por bit de ancho por puerto de lectura y dos líneas de bit por bit de ancho por puerto de escritura. Cada celda de bit también tiene un Vdd y un Vss. Por lo tanto, el área del paso de cable aumenta como el cuadrado del número de puertos, y el área del transistor aumenta linealmente. [ 4 ] En algún punto, puede ser más pequeño y/o más rápido tener múltiples archivos de registro redundantes, con un número menor de puertos de lectura, en lugar de un solo archivo de registro con todos los puertos de lectura. La unidad entera del MIPS R8000 , por ejemplo, tenía un archivo de registro de 64 bits con 9 puertos de lectura y 4 de escritura, 32 entradas, implementado en un proceso de 0,7 μm, que se podía ver al mirar el chip a la distancia de un brazo.
Dos enfoques populares para dividir los registros en múltiples archivos de registro son la configuración de archivo de registro distribuido y la configuración de archivo de registro particionado. [ 4 ]
En principio, cualquier operación que se pudiera realizar con un banco de registros de 64 bits con múltiples puertos de lectura y escritura, podría realizarse con un único banco de registros de 8 bits con un solo puerto de lectura y un solo puerto de escritura. Sin embargo, el paralelismo a nivel de bits de los bancos de registros amplios con múltiples puertos les permite ser mucho más rápidos y, por lo tanto, pueden realizar en un solo ciclo operaciones que requerirían muchos ciclos con menos puertos, un ancho de bits menor o ambas cosas.
El ancho en bits del archivo de registros suele ser igual al número de bits del tamaño de palabra del procesador . En ocasiones, es ligeramente mayor para añadir bits adicionales a cada registro, como el bit de veneno. Si el ancho de la palabra de datos difiere del ancho de una dirección —o, en algunos casos, como en el 68000 , incluso cuando tienen el mismo ancho—, los registros de direcciones se encuentran en un archivo de registros separado de los registros de datos.
Descifrador
- El decodificador suele dividirse en predecodificador y decodificador propiamente dicho.
- El decodificador es una serie de puertas AND que controlan las líneas de palabra.
- Hay un decodificador por cada puerto de lectura o escritura. Si la matriz tiene cuatro puertos de lectura y dos de escritura, por ejemplo, tendrá seis líneas de palabra por celda de bit en la matriz y seis compuertas AND por fila en el decodificador. Cabe destacar que el decodificador debe tener el mismo paso que la matriz, lo que obliga a que las compuertas AND sean anchas y cortas.
Formación

Esquema básico para una celda de bits:
- El estado se almacena en un par de inversores.
- Los datos son leídos por un transistor NMOS y almacenados en una línea de bits.
- Los datos se escriben cortocircuitando uno de los lados a tierra a través de una pila de dos transistores NMOS.
- Entonces: los puertos de lectura usan un transistor por celda de bit, los puertos de escritura usan cuatro.
Son posibles muchas optimizaciones:
- Compartir líneas entre celdas, por ejemplo, Vdd y Vss.
- Las líneas de bits de lectura suelen estar precargadas a un valor entre Vdd y Vss.
- Las líneas de bits leídas suelen oscilar solo una fracción del camino hacia Vdd o Vss. Un amplificador de detección convierte esta señal de oscilación reducida en un nivel lógico completo. Las señales de oscilación reducida son más rápidas porque la línea de bits tiene poca excitación, pero una gran capacitancia parásita.
- Las líneas de bits de escritura pueden entrelazarse para que se acoplen de forma uniforme a las líneas de bits de lectura cercanas. Dado que las líneas de bits de escritura tienen un rango de oscilación completo, pueden causar perturbaciones significativas en las líneas de bits de lectura.
- Si Vdd es una línea horizontal, se puede desactivar mediante otro decodificador si alguno de los puertos de escritura está escribiendo en esa línea durante ese ciclo. Esta optimización aumenta la velocidad de escritura.
- Las técnicas que reducen la energía utilizada por los archivos de registro son útiles en la electrónica de bajo consumo . [ 5 ]
Microarquitectura
La mayoría de los registros de transacciones no incluyen medidas especiales para evitar que varios puertos de escritura accedan simultáneamente a la misma entrada. En cambio, el hardware de planificación de instrucciones garantiza que solo una instrucción en cada ciclo escriba en una entrada específica. Si se emiten varias instrucciones dirigidas al mismo registro, todas, excepto una, tienen desactivada la escritura.
Los inversores cruzados tardan un tiempo finito en estabilizarse tras una operación de escritura, durante el cual una operación de lectura tardará más o devolverá datos basura. Es común encontrar multiplexores de derivación que envían los datos escritos a los puertos de lectura cuando se ordena una lectura y escritura simultáneas en la misma entrada. Estos multiplexores de derivación suelen formar parte de una red de derivación más amplia que reenvía los resultados que aún no se han confirmado entre las unidades funcionales.
El registro de archivos suele tener un paso de bit que coincide con la ruta de datos a la que sirve. Esta coincidencia de paso evita que muchos buses que pasan por la ruta de datos giren en las esquinas, lo que consumiría mucha área. Sin embargo, dado que cada unidad debe tener el mismo paso de bit, todas las unidades de la ruta de datos terminan teniendo el paso de bit impuesto por la unidad más ancha, lo que puede desperdiciar área en las demás unidades. Los registros de archivos, debido a que tienen dos cables por bit por puerto de escritura y a que todas las líneas de bits deben contactar con el silicio en cada celda de bit, a menudo pueden establecer el paso de una ruta de datos.
En máquinas con varias unidades en una ruta de datos, a veces se puede ahorrar espacio utilizando dos rutas de datos contiguas, cada una con un paso de bits menor que el de una sola ruta. Esto suele requerir varias copias del archivo de registros, una para cada ruta de datos.
El Alpha 21264 (EV6), por ejemplo, fue la primera microarquitectura de gran tamaño en implementar una "Arquitectura de Registro en Sombra". Contaba con dos copias del registro de enteros y dos del registro de punto flotante ubicadas en su interfaz (registro futuro y registro escalado, cada uno con dos puertos de lectura y dos de escritura), y requería un ciclo adicional para propagar datos entre ambos durante un cambio de contexto. La lógica de emisión buscaba reducir el número de operaciones de reenvío de datos entre los dos registros, mejorando notablemente su rendimiento con enteros y mitigando el impacto del número limitado de registros de propósito general en arquitecturas superescalares con ejecución especulativa. Este diseño fue posteriormente adaptado por SPARC , MIPS y algunas de las implementaciones x86 posteriores.
El MIPS también utiliza varios bancos de registros. La unidad de punto flotante R8000 dispone de dos copias del banco de registros de punto flotante, cada una con cuatro puertos de escritura y cuatro de lectura, y escribía en ambas copias simultáneamente mediante un cambio de contexto. Sin embargo, no admitía operaciones con enteros, y el banco de registros de enteros permaneció sin cambios. Posteriormente, debido a las exigencias del mercado de sistemas embebidos, los bancos de registros de sombra se abandonaron en diseños más recientes.
SPARC también utiliza una arquitectura de registro en la sombra para su gama alta. Dispone de hasta cuatro copias de registros de enteros (futuro, retirado, escalado y borrado, cada uno con siete puertos de lectura y cuatro de escritura) y dos copias del registro de punto flotante. Sin embargo, a diferencia de Alpha y x86, se ubican en la parte posterior como una unidad de retiro justo después de la unidad de ejecución fuera de orden y la unidad de cambio de nombre de registros. Los registros en la sombra no cargan instrucciones durante las etapas de búsqueda y decodificación de instrucciones, por lo que no se requiere un cambio de contexto en este diseño.
IBM utiliza el mismo mecanismo que muchos microprocesadores importantes, integrando profundamente el banco de registros con el decodificador, pero sus bancos de registros funcionan independientemente del decodificador y no implican cambio de contexto, a diferencia de Alpha y x86. La mayoría de sus bancos de registros no solo sirven a su decodificador dedicado, sino que también sirven hasta el nivel de hilo. Por ejemplo, POWER8 tiene hasta ocho decodificadores de instrucciones, pero hasta 32 bancos de registros de 32 registros de propósito general cada uno (cuatro puertos de lectura y cuatro de escritura) para facilitar la multihilo simultánea , ya que sus instrucciones paralelas no se pueden usar en ningún otro banco de registros debido a la falta de un cambio de contexto.
En la línea de procesadores x86 , una CPU típica anterior al 486 no tenía un archivo de registros individual, ya que todos los registros de propósito general trabajaban directamente con el decodificador, y la pila de empuje x87 estaba ubicada dentro de la propia unidad de punto flotante. A partir del Pentium , un procesador x86 típico compatible con Pentium integra una copia de un archivo de registros arquitectónico de un solo puerto que contiene 6 registros de propósito general, 4 registros de control, 8 registros de depuración (dos reservados), 1 registro de puntero de pila, 1 registro base de pila, 1 puntero de instrucción, 1 registro de indicadores y 6 registros de segmento.
Los procesadores no tenían registros dedicados para MMX , por lo que Intel usó la pila push de x87. Sin embargo, esto provocó que la FPU no se pudiera usar mientras se usaba MMX , y el procesador tuvo que ejecutar las instrucciones por sí mismo. En P6, la instrucción se puede almacenar y ejecutar de forma independiente en paralelo en las primeras etapas de la tubería antes de decodificarla en microoperaciones y renombrarla en ejecución fuera de orden. A partir de P6 , todos los archivos de registros no requieren ciclos adicionales para propagar los datos; los archivos de registros como los arquitectónicos y de punto flotante se ubican entre el búfer de código y los decodificadores, llamados "búfer de retiro", búfer de reordenamiento y OoOE y conectados dentro del bus de anillo (16 bytes). El archivo de registros en sí sigue siendo un archivo de registros x86 y una pila x87 y ambos sirven para almacenar el retiro. Su archivo de registros x86 se amplió a doble puerto para aumentar el ancho de banda para el almacenamiento de resultados. Registros como debug/condition code/control/unnamed/flag se eliminaron del archivo de registros principal y se colocaron en archivos individuales entre la ROM de microoperaciones y el secuenciador de instrucciones. Solo los registros inaccesibles, como el registro de segmento, ahora están separados del archivo de registros de propósito general (excepto el puntero de instrucción); ahora se ubican entre el planificador y el asignador de instrucciones, para facilitar el cambio de nombre de los registros y la ejecución fuera de orden. La pila x87 se fusionó posteriormente con el archivo de registros de punto flotante después de que un registro XMM de 128 bits debutara en Pentium III, pero el archivo de registros XMM todavía se encuentra separado de los archivos de registros enteros x86.
Las implementaciones posteriores de P6 (Pentium M, Yonah) introdujeron una "Arquitectura de Archivo de Registro Sombra" que se expandió a dos copias de archivos de registro arquitectónicos de enteros de doble puerto y consistía en un cambio de contexto (entre el archivo futuro y el retirado y el archivo escalado usando el mismo truco usado entre enteros y punto flotante). Esto se hizo para resolver el cuello de botella de registros que existía en la arquitectura x86 después de la introducción de la fusión de microoperaciones, pero aún tiene ocho registros arquitectónicos de 32 bits de entrada para un total de 32 bytes en capacidad por archivo (el registro de segmento y el puntero de instrucción permanecen dentro del archivo, aunque son inaccesibles para el programa) como archivo especulativo. El segundo archivo sirve como un archivo de registro sombra escalado, que sin cambio de contexto el archivo escalado no puede almacenar algunas instrucciones de forma independiente. Algunas instrucciones de SSE2/SSE3/SSSE3 requieren esta característica para operaciones con enteros; por ejemplo, instrucciones como PSHUFB, PMADDUBSW, PHSUBW, PHSUBD, PHSUBSW, PHADDW, PHADDD, PHADDSW requerirían cargar EAX/EBX/ECX/EDX desde ambos archivos de registro, aunque era poco común que un procesador x86 utilizara otro archivo de registro con la misma instrucción. La mayoría de las veces, el segundo archivo sirve como archivo de escala retirado. La arquitectura Pentium M todavía tiene un archivo de registro de punto flotante de doble puerto (ocho entradas MM/XMM) compartido con tres decodificadores, y el archivo de registro FP no tiene un archivo de registro sombra junto con él, ya que su arquitectura de archivo de registro sombra no incluía funciones de punto flotante. En los procesadores posteriores al P6, los archivos de registro arquitectónicos son externos y se encuentran en el back-end del procesador después del archivo retirado, a diferencia del archivo de registro interno ubicado en el núcleo interno para el búfer de renombrado/reordenamiento de registros. Sin embargo, en Core 2 ahora se encuentra dentro de una unidad llamada "tabla de alias de registro" (RAT), ubicada con el asignador de instrucciones pero con el mismo tamaño de registro que el retiro. Core 2 aumentó el bus de anillo interno a 24 bytes (para permitir que se decodifiquen más de tres instrucciones) y extendió su archivo de registros de puerto doble (una lectura/una escritura) a puerto cuádruple (dos lecturas/dos escrituras). El recuento de registros sigue siendo de ocho entradas en 32 bits y 32 bytes (sin incluir seis registros de segmento y un puntero de instrucción ya que no pueden ser accedidos en el archivo por ningún código/instrucción) en el tamaño total del archivo y se expande a 16 entradas en x64 para un tamaño total de 128 bytes por archivo. Desde Pentium M, su puerto de pipeline y decodificador aumentaron, pero están ubicados con la tabla de asignador en lugar del búfer de código. Su archivo de registros FP XMM también se ha ampliado a cuatro puertos (dos de lectura/dos de escritura), los registros siguen teniendo ocho entradas en 32 bits y se han ampliado a 16 entradas en modo x64.
En implementaciones posteriores de x86, como Nehalem y procesadores posteriores, tanto los registros de enteros como los de punto flotante se incorporan a un archivo de registros de propósito general unificado de ocho puertos (seis de lectura y dos de escritura) (8 + 8 en 32 bits y 16 + 16 en x64 por archivo), mientras que el archivo de registros se amplió a dos con una "Arquitectura de Archivo de Registros en Sombra" mejorada para admitir la ejecución de hyper-threading, ya que cada hilo utiliza archivos de registros independientes para su decodificador. Posteriormente, Sandy Bridge y versiones posteriores reemplazaron la tabla de registros en sombra y los registros arquitectónicos con un archivo de registros físicos mucho más grande y avanzado antes de la codificación en el búfer de reordenamiento.
La línea Atom fue la revisión moderna y simplificada de P5. Incluye copias únicas del archivo de registros compartidas con el hilo y el decodificador. El archivo de registros tiene un diseño de doble puerto, con 8/16 entradas de GPR, 8/16 entradas de registro de depuración y 8/16 entradas de código de condición integradas en el mismo archivo. Sin embargo, tiene un registro basado en sombra de 64 bits y ocho entradas y un registro sin nombre de 64 bits y ocho entradas que ahora están separados de los GPR principales, a diferencia del diseño original de P5. Se encuentra después de la unidad de ejecución, y el archivo de estos registros es de puerto único y no está expuesto a instrucciones como los archivos de registro de sombra escalados que se encuentran en Core/Core2 (los archivos de registro de sombra están hechos de registros arquitectónicos y Bonnell no implementó esto ya que no tiene "Arquitectura de archivo de registro de sombra"), sin embargo, el archivo puede usarse para renombrar debido a la falta de ejecución fuera de orden que se encuentra en la arquitectura Bonnell. También tenía una copia del archivo de registro de punto flotante XMM por hilo. La diferencia con Nehalem es que Bonnell no tiene un archivo de registros unificado ni un archivo de registros dedicado para su hyper-threading. En cambio, Bonnell usa un registro de renombrado separado para su hilo, aunque no esté fuera de orden. De forma similar a Bonnell, Larrabee y Xeon Phi también tienen cada uno un solo archivo de registros enteros de propósito general, pero Larrabee tiene hasta 16 archivos de registros XMM (ocho entradas por archivo), y Xeon Phi tiene hasta 128 archivos de registros AVX-512, cada uno con 32 registros ZMM de 512 bits para el almacenamiento de instrucciones vectoriales, que pueden ser tan grandes como la caché L2.
Existen otras líneas x86 de Intel que no tienen un archivo de registros en su diseño interno, como Geode GX y Vortex86 , y muchos procesadores embebidos que no son compatibles con Pentium o que son procesadores 80x86 de ingeniería inversa. Por lo tanto, la mayoría de ellos no tienen un archivo de registros para sus decodificadores, pero sus GPR se utilizan individualmente. Por otro lado, Pentium 4 (basado en la microarquitectura NetBurst ) no tiene un archivo de registros para su decodificador, ya que sus GPR x86 no existían dentro de su estructura, debido a la introducción de un archivo de registros de renombrado unificado físico. Es similar a Sandy Bridge, pero ligeramente diferente debido a la incapacidad de Pentium 4 para usar el registro antes del renombrado. En su lugar, utiliza SSE para la ejecución de enteros y el almacenamiento antes de la ALU y después del resultado; SSE2/SSE3/SSSE3 también utiliza el mismo mecanismo para su operación de enteros.
Los primeros diseños de AMD , como el K6, no tienen un archivo de registros como Intel y no admiten la "Arquitectura de Archivo de Registros Sombra" debido a la falta de un interruptor de contexto y un inversor de derivación necesarios para que un archivo de registros funcione correctamente. En su lugar, utilizan GPR separados que se enlazan directamente a una tabla de registros de renombrado para su CPU OoOE con un decodificador de enteros y un decodificador de punto flotante dedicados. El mecanismo es similar a la línea de procesadores pre-Pentium de Intel. Por ejemplo, el procesador K6 tiene cuatro int (un archivo de registros temporales de ocho entradas + un archivo de registros futuros de ocho entradas + un archivo de registros obtenidos de ocho entradas + un archivo de registros sin nombre de ocho entradas) y dos archivos de registros de renombrado FP (dos archivos x87 ST de ocho entradas, uno va a FADD y el otro a FMOV) que se enlazan directamente con su EAX x86 para el renombrado de enteros y el registro XMM0 para el renombrado de punto flotante. Posteriormente, Athlon incluyó un "registro sombra" en su front-end. Se escala hasta un archivo de registro unificado de 40 entradas para operación de enteros en orden antes de la decodificación. El archivo de registro contiene ocho entradas de registro temporal + 16 archivos de registro GPR futuros + 16 archivos de registro GPR sin nombre. En diseños posteriores de AMD, abandona el diseño de registro de sombra y favorece la arquitectura K6 con un diseño de GPR individuales directamente vinculados. Al igual que Phenom , tiene tres archivos de registro int y dos archivos de registro SSE que se encuentran en el archivo de registro físico directamente vinculado con GPR. Sin embargo, se reduce a un entero + un punto flotante en Bulldozer . Al igual que los primeros diseños de AMD, la mayoría de los fabricantes de x86 como Cyrix, VIA, DM&P y SIS también utilizaron el mismo mecanismo, lo que resultó en una falta de rendimiento de enteros sin renombrar registros para su CPU en orden. Empresas como Cyrix y AMD tuvieron que aumentar el tamaño de la caché con la esperanza de reducir el cuello de botella. Las operaciones de enteros SSE de AMD funcionan de una manera diferente a Core 2 y Pentium 4; Utiliza su registro de enteros de renombrado independiente para cargar el valor directamente antes de la etapa de decodificación. Aunque teóricamente solo necesitará una tubería más corta que la implementación SSE de Intel, en general el costo de la predicción de bifurcaciones es mucho mayor y la tasa de fallos es más alta que en Intel, y se necesitan al menos dos ciclos para que se ejecute su instrucción SSE independientemente del ancho de la instrucción, ya que las primeras implementaciones de AMD no podían ejecutar tanto números de coma flotante como enteros en un conjunto de instrucciones SSE como lo hacía la implementación de Intel.
A diferencia de Alpha , SPARC y MIPS, que solo permiten que un archivo de registros cargue/recupere un operando a la vez, se requerirían múltiples archivos de registros para lograr la superescalaridad. El procesador ARM, por otro lado, no integra múltiples archivos de registros para cargar/recuperar instrucciones. Los registros de propósito general (GPR) de ARM no tienen un propósito especial definido para el conjunto de instrucciones (la arquitectura ARM ISA no requiere acumulador, índice ni puntos de pila/base. El punto de pila/base solo se puede usar en modo Thumb). La principal diferencia entre ARM y otros diseños es que ARM permite ejecutar en los mismos registros de propósito general con conmutación rápida de bancos sin requerir un archivo de registros adicional en superescalar. A pesar de que x86 comparte el mismo mecanismo que ARM, donde sus GPR pueden almacenar cualquier dato individualmente, x86 se enfrentará a la dependencia de datos si se almacenan más de tres instrucciones no relacionadas, ya que sus GPR por archivo son demasiado pequeños (ocho en modo de 32 bits y 16 en 64 bits, en comparación con los 13 de ARM en 32 bits y 31 en 64 bits) para los datos, y es imposible tener superescalar sin múltiples archivos de registros para alimentar su decodificador. En comparación, el código x86 es grande y complejo en comparación con ARM. Esto se debe a que la mayoría de los front-ends de x86 se han vuelto mucho más grandes y consumen mucha más energía que el procesador ARM para ser competitivos (por ejemplo: Pentium M y Core 2 Duo, Bay Trail). Algunos procesadores x86 equivalentes de terceros incluso dejaron de ser competitivos con ARM debido a que no tienen una arquitectura de archivo de registros dedicada. En particular para AMD, Cyrix y VIA, que no pueden ofrecer un rendimiento razonable sin renombrar registros y ejecutar fuera de orden, lo que deja al Intel Atom como el único núcleo de procesador x86 con ejecución en orden en la competencia móvil. Esto cambió cuando el procesador x86 Nehalem fusionó sus registros de enteros y de punto flotante en un solo archivo, e introdujo una tabla de registros físicos grande y una tabla de asignación mejorada en su interfaz antes de renombrar su núcleo interno con ejecución fuera de orden.
Cambio de nombre del registro
Los procesadores que realizan el cambio de nombre de registros pueden configurar cada unidad funcional para que escriba en un subconjunto del archivo de registros físico. Esta configuración puede eliminar la necesidad de múltiples puertos de escritura por celda de bit, lo que supone un gran ahorro de área. El archivo de registros resultante, que en la práctica es una pila de archivos de registros con un único puerto de escritura, se beneficia de la replicación y la subdivisión de los puertos de lectura. En el límite, esta técnica colocaría una pila de archivos de registros con un puerto de escritura y dos de lectura en las entradas de cada unidad funcional. Dado que los archivos de registros con un número reducido de puertos suelen estar dominados por el área del transistor, es mejor no llevar esta técnica hasta este límite, pero aun así resulta útil.
Ventanas de registro
La arquitectura SPARC define ventanas de registro , en las que los nombres arquitectónicos de 5 bits de los registros apuntan a una ventana en un archivo de registro mucho mayor, con cientos de entradas. Implementar archivos de registro multipuerto con cientos de entradas requiere una gran área. La ventana de registro se desplaza 16 registros al moverse, de modo que cada nombre de registro arquitectónico solo puede referirse a un número reducido de registros en la matriz más grande; por ejemplo, el registro arquitectónico r20 solo puede referirse a los registros físicos n.° 20, n.° 36, n.° 52, n.° 68, n.° 84, n.° 100 y n.° 116, si solo hay siete ventanas en el archivo físico.
Para ahorrar espacio, algunas implementaciones de SPARC utilizan un archivo de registros de 32 entradas, donde cada celda tiene siete bits. Solo uno se puede leer y escribir a través de los puertos externos, pero el contenido de los bits se puede rotar. Una rotación permite, en un solo ciclo, el desplazamiento de la ventana del registro. Dado que la mayoría de los cables que realizan el desplazamiento del estado son locales, se logra un ancho de banda enorme con un consumo de energía mínimo.
Esta misma técnica se utiliza en el archivo de asignación de renombramiento de registros R10000 , que almacena un número de registro virtual de 6 bits para cada uno de los registros físicos. En el archivo de renombramiento, el estado de renombramiento se guarda en un punto de control cada vez que se toma una bifurcación, de modo que cuando se detecta una predicción errónea de una bifurcación, se puede recuperar el estado de renombramiento anterior en un solo ciclo. (Véase Renombrado de registros ).
Véase también
Referencias
- 1 2 Patterson, David; Hennessey, John L. Organización y diseño de computadoras: la interfaz hardware/software (Tercera ed.). Morgan Kaufmann Publishers. ISBN 1-55860-604-1.
- ↑ Wikibooks: Diseño de microprocesadores/Archivo de registros#Banco de registros .
- ↑ "Manual de referencia de la arquitectura ARM" (PDF) . ARM Limited. Julio de 2005. Archivado del original (PDF) el 22 de octubre de 2021. Consultado el 13 de octubre de 2021 .
- 1 2 Johan Janssen. "Estrategias de compilación para arquitecturas activadas por transporte" . 2001. pág. 169. págs. 171-173.
- ↑ "Archivos de registro portados asimétricamente y energéticamente eficientes" por Aneesh Aggarwal y M. Franklin. 2003.
Enlaces externos
- Consideraciones sobre el diseño del archivo de registros en procesadores con planificación dinámica - Farkas, Jouppi , Chow - 1995
- Arquitectura de computadoras
- electrónica digital
- Registros digitales