Un archivo de registro es una matriz de registros de procesador en una unidad central de procesamiento (CPU). La arquitectura del conjunto de instrucciones de una CPU casi siempre definirá un conjunto de registros que se utilizan para organizar los datos entre la memoria y las unidades funcionales del chip. El archivo de registro es parte de la arquitectura y es visible para el programador, a diferencia del concepto de cachés transparentes . En las CPU más simples, estos registros arquitectónicos corresponden uno a uno a las entradas en un archivo de registro físico (PRF) dentro de la CPU. Las CPU más complicadas utilizan el cambio de nombre de registros , de modo que la asignación de qué entrada física almacena un registro arquitectónico particular cambia dinámicamente durante la ejecución.
Los archivos de registro basados en circuitos integrados modernos se implementan generalmente mediante memorias RAM estáticas rápidas con múltiples puertos. Dichas memorias RAM se distinguen por tener puertos de lectura y escritura dedicados, mientras que las memorias RAM multipuerto comunes generalmente leen y escriben a través de los mismos puertos. El banco de registros es el método de usar un solo nombre para acceder a múltiples registros físicos diferentes según el modo operativo.
Los archivos de registro pueden agruparse en bancos de registros. [1] Un procesador puede tener más de un banco de registros.
Los procesadores ARM tienen registros tanto bancarios como no bancarios. Si bien todos los modos siempre comparten los mismos registros físicos para los primeros ocho registros de propósito general, R0 a R7, el registro físico al que apuntan los registros bancarios, R8 a R14, depende del modo operativo en el que se encuentre el procesador. [2] Cabe destacar que el modo Fast Interrupt Request (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 cambiar entre instrucciones, decodificadores, GPR y archivos de registro, si hay más de uno, antes de que se emita la instrucción, pero esto solo existe en procesadores que admiten la ejecución superescalar. Sin embargo, el cambio de contexto es un mecanismo totalmente diferente al banco de registros de ARM dentro de los registros.
Los procesadores MODCOMP y los posteriores compatibles con 8051 utilizan bits en la palabra de estado del programa para seleccionar el banco de registros actualmente activo.
La convención de diseño habitual es que una matriz simple se lea 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 bajo nivel en niveles lógicos de nivel completo, suelen estar en la parte inferior (por convención). A veces, los archivos de registro más grandes se construyen colocando en mosaico 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 de paso de cable aumenta con el cuadrado del número de puertos, y el área del transistor aumenta linealmente. [3] En algún momento, 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 de números enteros del MIPS R8000 , por ejemplo, tenía un archivo de registro de 64 bits de 32 entradas con 9 puertos de lectura y 4 de escritura implementado en un proceso de 0,7 μm, que se podía ver al mirar el chip desde la distancia del brazo.
Dos enfoques populares para dividir 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. [3]
En principio, cualquier operación que se pudiera realizar con un archivo de registro de 64 bits de ancho con muchos puertos de lectura y escritura se podría realizar con un solo archivo de registro de 8 bits de ancho con un solo puerto de lectura y un solo puerto de escritura. Sin embargo, el paralelismo a nivel de bits de los archivos de registro anchos con muchos puertos les permite ejecutarse mucho más rápido y, por lo tanto, pueden realizar operaciones en un solo ciclo que tomarían muchos ciclos con menos puertos o un ancho de bits más estrecho o ambos.
El ancho en bits del archivo de registro es generalmente el número de bits en el tamaño de palabra del procesador . Ocasionalmente es ligeramente más ancho para agregar bits "adicionales" a cada registro, como el bit de veneno. Si el ancho de la palabra de datos es diferente al ancho de una dirección (o en algunos casos, como el 68000 , incluso cuando tienen el mismo ancho), los registros de dirección están en un archivo de registro separado de los registros de datos.
El esquema básico para una celda de bits:
Son posibles muchas optimizaciones:
La mayoría de los archivos de registro no tienen disposiciones especiales para evitar que varios puertos de escritura escriban en la misma entrada simultáneamente. En cambio, el hardware de programación de instrucciones garantiza que solo una instrucción en cualquier ciclo particular escriba una entrada en particular. Si se emiten varias instrucciones dirigidas al mismo registro, todas menos una tienen sus habilitaciones de escritura desactivadas.
Los inversores cruzados tardan un tiempo finito en asentarse después de una operación de escritura, durante el cual una operación de lectura tardará más o devolverá basura. Es común tener multiplexores de derivación que derivan 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 ser parte de una red de derivación más grande que reenvía resultados que aún no se han confirmado entre unidades funcionales.
El archivo de registro suele tener un paso de bits coincidente con la ruta de datos a la que sirve. El paso de bits coincidente evita que muchos buses que pasan por la ruta de datos giren en las esquinas, lo que utilizaría una gran cantidad de área. Pero como cada unidad debe tener el mismo paso de bits, cada unidad en la ruta de datos termina con el paso de bits forzado por la unidad más ancha, lo que puede desperdiciar área en las otras unidades. Los archivos de registro, debido a que tienen dos cables por bit por puerto de escritura y debido a que todas las líneas de bits deben contactar el silicio en cada celda de bit, a menudo pueden establecer el paso de una ruta de datos.
En ocasiones, se puede ahorrar espacio en máquinas con varias unidades en una ruta de datos si se tienen dos rutas de datos una al lado de la otra, cada una de las cuales tiene un paso de bits menor que el que tendría una ruta de datos única. Este caso suele obligar a realizar varias copias de un archivo de registro, una para cada ruta de datos.
Por ejemplo, el Alpha 21264 (EV6) fue la primera gran microarquitectura en implementar una "arquitectura de archivo de registro de sombra". Tenía dos copias del archivo de registro de enteros y dos copias del registro de punto flotante ubicadas en su extremo frontal (archivo futuro y escalado, cada uno con 2 puertos de lectura y 2 de escritura), y necesitaba un ciclo adicional para propagar datos entre los dos durante un cambio de contexto. La lógica de emisión intentó reducir la cantidad de operaciones que reenvían datos entre los dos y mejoró enormemente su rendimiento de enteros, y ayudó a reducir el impacto de la cantidad limitada de registros de propósito general en arquitecturas superescalares con ejecución especulativa. Este diseño fue adaptado más tarde por SPARC , MIPS y algunas de las implementaciones x86 posteriores.
El MIPS también utiliza archivos de registro múltiples. La unidad de punto flotante R8000 tenía dos copias del archivo de registro de punto flotante, cada una con cuatro puertos de escritura y cuatro de lectura, y escribía ambas copias al mismo tiempo con un cambio de contexto. Sin embargo, no admitía operaciones con números enteros, y el archivo de registro de números enteros seguía siendo así. Más tarde, los archivos de registro de sombra se abandonaron en los diseños más nuevos en favor del mercado integrado.
SPARC también utiliza una "arquitectura de archivos de registros de sombra" para su línea de alta gama. Tiene hasta 4 copias de archivos de registros enteros (futuros, retirados, escalados y eliminados, cada uno con 7 puertos de lectura y 4 de escritura) y 2 copias del archivo de registros de punto flotante. Sin embargo, a diferencia de Alpha y x86, se encuentran en el backend como una unidad de retiro justo después de la unidad fuera de servicio y el cambio de nombre de los archivos de registros. Los registros de sombra no cargan instrucciones durante las etapas de obtención y decodificación de instrucciones y un cambio de contexto es innecesario en este diseño.
IBM utiliza el mismo mecanismo que muchos microprocesadores importantes, fusionando profundamente el archivo de registros con el decodificador, pero sus archivos de registros funcionan independientemente del lado del decodificador y no involucran cambio de contexto, lo cual es diferente de Alpha y x86. La mayoría de sus archivos de registros no solo sirven a su decodificador dedicado, sino que también sirven hasta el nivel de subproceso. Por ejemplo, POWER8 tiene hasta 8 decodificadores de instrucciones, pero hasta 32 archivos de registros de 32 registros de propósito general cada uno (4 puertos de lectura y 4 de escritura) para facilitar el multithreading simultáneo , ya que sus instrucciones paralelas no se pueden usar en ningún otro archivo de registros debido a la falta de un cambio de contexto.
En la línea de procesadores x86 , una CPU típica anterior a 486 no tenía un archivo de registro individual, ya que todos los registros de propósito general trabajaban directamente con el decodificador y la pila de inserción x87 estaba ubicada dentro de la propia unidad de punto flotante. A partir del Pentium , un procesador x86 compatible con Pentium típico está integrado con una copia de un archivo de registro arquitectónico de puerto único 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 de 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 utilizó en su lugar la pila push del x87. Sin embargo, esto provocó que la FPU quedara inutilizable mientras se usaba MMX , y el procesador tenía 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 canalización antes de decodificarla en microoperaciones y renombrarla en la ejecución fuera de orden. A partir de P6 , todos los archivos de registro no requieren un ciclo adicional para propagar los datos, los archivos de registro como los de arquitectura y de punto flotante se encuentran entre el búfer de código y los decodificadores, llamados "búfer de retiro", búfer de reordenamiento y OoOE y se conectan dentro del bus de anillo (16 bytes). El archivo de registro en sí sigue siendo un archivo de registro x86 y una pila x87 y ambos sirven como almacenamiento de retiro. Su archivo de registro x86 se amplió a doble puerto para aumentar el ancho de banda para el almacenamiento de resultados. Los registros como debug/condition code/control/unnamed/flag fueron eliminados del archivo de registro principal y colocados en archivos individuales entre la micro-op ROM y el secuenciador de instrucciones. Solo los registros inaccesibles como el registro de segmento ahora están separados del archivo de registro de propósito general (excepto el puntero de instrucción); ahora están ubicados entre el programador 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ó más tarde con el archivo de registro de punto flotante después de que debutara un registro XMM de 128 bits en Pentium III, pero el archivo de registro XMM aún se encuentra separado de los archivos de registro de enteros x86.
Las implementaciones posteriores de P6 (Pentium M, Yonah) introdujeron una "arquitectura de archivo de registro de sombra" que se expandió a 2 copias de archivos de registro arquitectónicos de enteros de doble puerto y que consisten en un cambio de contexto (entre el archivo futuro y retirado y el archivo escalado utilizando el mismo truco utilizado entre el entero y el punto flotante). Esto se hizo para resolver el cuello de botella de registro que existía en la arquitectura x86 después de que se introdujera la fusión de microoperaciones, pero todavía tiene 8 entradas de registros arquitectónicos de 32 bits para un total de 32 bytes de 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 se sirve como un archivo de registro de sombra escalado, que sin un cambio de contexto, el archivo escalado no puede almacenar alguna instrucción de forma independiente. Algunas instrucciones de SSE2/SSE3/SSSE3 requieren esta característica para la operación de números 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 hiciera uso de otro archivo de registro con la misma instrucción. La mayoría de las veces, el segundo archivo se sirve como un archivo retirado de escala. La arquitectura Pentium M todavía tiene un archivo de registro de punto flotante de doble puerto (8 entradas MM/XMM) compartido con tres decodificadores, y el archivo de registro FP no tiene un archivo de registro de sombra junto con él, ya que su arquitectura de archivo de registro de sombra no incluía funciones de punto flotante. En los procesadores posteriores a P6, los archivos de registro arquitectónicos son externos y se encuentran en el backend 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 cambio de nombre/reordenamiento de registros. Sin embargo, en Core 2 ahora está alojado dentro de una unidad llamada "tabla de alias de registro" (RAT), ubicada con el asignador de instrucciones pero tiene el mismo tamaño de registro que el retiro. Core 2 aumentó el bus de anillo interno a 24 bytes (permite decodificar más de 3 instrucciones) y extendió su archivo de registro de puerto doble (una lectura / una escritura) a puerto cuádruple (dos lecturas / dos escrituras), el registro aún permanece con 8 entradas en 32 bits y 32 bytes (sin incluir el registro de 6 segmentos y un puntero de instrucción, ya que no se puede acceder a ellos en el archivo por ningún código / instrucción) en tamaño de archivo total y se expandió a 16 entradas en x64 para un tamaño total de 128 bytes por archivo. Desde Pentium M, ya que su puerto de canalización y decodificador aumentaron, pero están ubicados con la tabla de asignadores en lugar del búfer de código. Su archivo de registro FP XMM también se incrementó a cuatro puertos (2 de lectura/2 de escritura), el registro aún permanece con 8 entradas en 32 bits y se amplió a 16 entradas en modo x64 y el número aún permanece en 1 ya que su arquitectura de archivo de registro de sombra no incluye funciones de punto flotante/SSE.
En implementaciones x86 posteriores, como Nehalem y procesadores posteriores, tanto los registros de números enteros como los de punto flotante se incorporan ahora en un archivo de registro de propósito general unificado de ocho puertos (seis lecturas y dos escrituras) (8 + 8 en 32 bits y 16 + 16 en x64 por archivo), mientras que el archivo de registro se amplió a 2 con una "arquitectura de archivo de registro de sombra" mejorada para ejecutar hiperprocesamiento y cada hilo utiliza archivos de registro independientes para su decodificador. Más tarde, Sandy Bridge y posteriores reemplazaron la tabla de registro de sombra y los registros arquitectónicos con un archivo de registro físico mucho más grande y aún más avanzado antes de decodificar al búfer de reordenamiento. Se informó que Sandy Bridge y posteriores ya no tienen un registro arquitectónico.
En la línea Atom se encontraba la revisión simplificada moderna de P5. Incluye copias individuales del archivo de registro compartido con subproceso y decodificador. El archivo de registro tiene un diseño de puerto dual, 8/16 entradas GPRS, 8/16 entradas de registro de depuración y 8/16 entradas de código de condición están integradas en el mismo archivo. Sin embargo, tiene un registro basado en sombra de 64 bits de ocho entradas y un registro sin nombre de 64 bits de ocho entradas que ahora están separados de los GPR principales a diferencia del diseño P5 original y ubicados después de la unidad de ejecución, y el archivo de estos registros tiene un solo puerto y no está expuesto a instrucciones como el archivo de registro de sombra escalado que se encuentra en Core/Core2 (el archivo de registro de sombra está hecho de registros arquitectónicos y Bonnell no debido a que no tiene "Arquitectura de archivo de registro de sombra"), sin embargo, el archivo se puede usar para cambiar el nombre 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 subproceso. La diferencia con Nehalem es que Bonnell no tiene un archivo de registro unificado y no tiene un archivo de registro dedicado para su hiperprocesamiento. En cambio, Bonnell usa un registro de cambio de nombre separado para su subproceso a pesar de que no está fuera de servicio. Al igual que Bonnell, Larrabee y Xeon Phi también tienen solo un archivo de registro de enteros de propósito general, pero Larrabee tiene hasta 16 archivos de registro XMM (8 entradas por archivo) y Xeon Phi tiene hasta 128 archivos de registro 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.
Hay otras líneas x86 de Intel que no tienen un archivo de registro en su diseño interno, Geode GX y Vortex86 y muchos procesadores embebidos que no son compatibles con Pentium o que fueron diseñados a la inversa para los primeros procesadores 80x86. Por lo tanto, la mayoría de ellos no tienen un archivo de registro para sus decodificadores, pero sus GPR se utilizan individualmente. Pentium 4 (basado en la microarquitectura NetBurst ), por otro lado, no tiene un archivo de registro para su decodificador, ya que sus GPR x86 no existían dentro de su estructura, debido a la introducción de un archivo de registro de renombramiento unificado físico (similar a Sandy Bridge, pero ligeramente diferente debido a la incapacidad de Pentium 4 de usar el registro antes de nombrar) para intentar reemplazar el archivo de registro arquitectónico y omitir el esquema de decodificación x86. En lugar de ello, utiliza SSE para la ejecución y el almacenamiento de números enteros antes de la ALU y después del resultado; SSE2/SSE3/SSSE3 también utilizan el mismo mecanismo para su operación de números enteros.
Los primeros diseños de AMD , como el K6, no tienen un archivo de registro como Intel y no admiten la "arquitectura de archivo de registro de sombra" debido a su falta de cambio de contexto e inversor de derivación, que son necesarios para que un archivo de registro funcione correctamente. En su lugar, utilizan un GPR independiente que se vincula directamente a una tabla de registro de cambio de nombre para su CPU OoOE con un decodificador de enteros dedicado y un decodificador flotante. 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 registro temporal de ocho entradas + un archivo de registro futuro de ocho entradas + un archivo de registro obtenido de ocho entradas + un archivo de registro sin nombre de ocho entradas) y dos archivos de registro de cambio de nombre FP (dos archivos ST x87 de ocho entradas, uno va fadd y uno va fmov) que se vinculan directamente con su EAX x86 para el cambio de nombre de enteros y registro XMM0 para el cambio de nombre de punto flotante, pero más tarde Athlon incluyó "registro sombra" en su frontend, se escaló hasta un archivo de registro unificado de 40 entradas para la operación de enteros en orden antes de la decodificación, el archivo de registro contiene 8 entradas de registro scratch + 16 archivo de registro GPR futuros + 16 archivo de registro GPR sin nombre. En diseños posteriores de AMD abandona el diseño de registro sombra y favorece la arquitectura K6 con diseño de enlace directo de GPR individuales. 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 vinculado directamente 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. La operación de enteros SSE de AMD funciona de una manera diferente a Core 2 y Pentium 4; utiliza su registro entero de renombrado separado 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, pero generalmente el costo de la predicción de bifurcación es mucho mayor y la tasa de faltantes más alta que Intel, y tendría que tomar al menos dos ciclos para que su instrucción SSE se ejecute independientemente de la instrucción amplia, ya que las primeras implementaciones de AMD no podían ejecutar FP e Int 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 registro cargue/obtenga un operando a la vez, se necesitarían varios archivos de registro para lograr la superescala. El procesador ARM , por otro lado, no integra varios archivos de registro para cargar/obtener instrucciones. Los GPR de ARM no tienen un propósito especial para el conjunto de instrucciones (el ISA de ARM no requiere acumulador, índice y puntos de pila/base. Los registros no tienen un acumulador y el punto de pila/base solo se puede usar en modo miniatura). Cualquier GPR puede propagar y almacenar múltiples instrucciones de forma independiente en un tamaño de código más pequeño que es lo suficientemente pequeño como para caber en un registro y su registro arquitectónico actúa como una tabla y se comparte con todos los decodificadores/instrucciones con un simple cambio de banco entre decodificadores. La principal diferencia entre ARM y otros diseños es que ARM permite ejecutarse en el mismo registro de propósito general con un cambio rápido de banco sin requerir un archivo de registro adicional en superescalar. A pesar de que x86 comparte el mismo mecanismo con ARM de que 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 registro para alimentar a su decodificador (el código x86 es grande y complejo en comparación con ARM). Porque 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 (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 tenían una arquitectura de archivo de registro dedicada. En particular, AMD, Cyrix y VIA no pueden ofrecer un rendimiento razonable sin renombrar los registros y ejecutarlos fuera de orden, lo que deja a Intel Atom como el único núcleo de procesador x86 en orden en la competencia móvil. Esto fue así hasta que el procesador x86 Nehalem fusionó sus registros de números enteros y de punto flotante en un solo archivo y se introdujo una gran tabla de registros físicos y una tabla de asignación mejorada en su interfaz antes de renombrar su núcleo interno fuera de orden.
Los procesadores que realizan el cambio de nombre de registros pueden hacer que cada unidad funcional escriba en un subconjunto del archivo de registros físicos. Esta disposición puede eliminar la necesidad de múltiples puertos de escritura por celda de bit, lo que permite un gran ahorro de espacio. El archivo de registros resultante, que en realidad es una pila de archivos de registros con un solo puerto de escritura, se beneficia de la replicación y la creación de subconjuntos de los puertos de lectura. En el límite, esta técnica colocaría una pila de archivos de registro de 1 escritura y 2 lecturas en las entradas de cada unidad funcional. Dado que los archivos de registro con una pequeña cantidad de puertos suelen estar dominados por el área de transistores, es mejor no llevar esta técnica hasta este límite, pero es útil de todos modos.
SPARC ISA define ventanas de registro , en las que los nombres arquitectónicos de 5 bits de los registros en realidad apuntan a una ventana en un archivo de registro mucho más grande, con cientos de entradas. La implementación de archivos de registro multipuerto con cientos de entradas requiere un área grande. La ventana de registro se desliza 16 registros cuando se mueve, de modo que cada nombre de registro arquitectónico puede hacer referencia solo a una pequeña cantidad de registros en la matriz más grande, por ejemplo, el registro arquitectónico r20 solo puede hacer referencia a los registros físicos #20, #36, #52, #68, #84, #100, #116, si solo hay siete ventanas en el archivo físico.
Para ahorrar espacio, algunas implementaciones de SPARC implementan un archivo de registro de 32 entradas, en el que 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 realiza en un solo ciclo un movimiento de la ventana de registro. Debido a que la mayoría de los cables que realizan el movimiento de estado son locales, es posible lograr un ancho de banda enorme con poca energía.
Esta misma técnica se utiliza en el archivo de asignación de cambio de nombre de registro R10000 , que almacena un número de registro virtual de 6 bits para cada uno de los registros físicos. En el archivo de cambio de nombre, el estado de cambio de nombre se verifica cada vez que se toma una bifurcación, de modo que cuando se detecta que una bifurcación se predijo incorrectamente, el estado de cambio de nombre anterior se puede recuperar en un solo ciclo. (Consulte Cambio de nombre de registro ).