La palabra banco se usa en dos sentidos diferentes cuando se aplica a los registros.
Registros bancarios para manejo de interrupciones
El sentido que concierne a la pregunta de StackOverflow es similar al uso en la conmutación de bancos (memoria) (utilizada por algunos procesadores de 8 y 16 bits) en función . Los nombres de una colección de registros se asignan a una colección diferente de registros físicos. ARMv7 proporciona un banco adicional para 7 de sus 16 GPR y cinco bancos más para el registro de puntero de pila y el registro de enlace (ARM utiliza el registro de enlace para guardar la PC que se utilizará para regresar de la interrupción). Itanium proporciona un banco adicional para 16 de sus 31 GPR estáticos. (MIPS proporciona conjuntos completos de 31 GPR, llamándolos "conjuntos de registro de sombra").
A diferencia del cambio de banco de memoria, el propósito principal de este tipo de banco de registros es (típicamente) no extender el almacenamiento direccionable sino proporcionar un manejo de interrupciones más rápido al evitar la necesidad de guardar valores de registro, cargar valores utilizados por el manejador de interrupciones y restaurar el original registrar valores y simplificar el manejo de interrupciones.
(El uso de la pila de la aplicación para guardar el estado del registro abre la posibilidad de desbordar la memoria asignada para esta pila, generando una excepción que luego debe manejar el estado de guardar de alguna manera. Peor aún, si la página de la memoria inmediatamente más allá del límite de la pila es grabable por el privilegio escalado del controlador de interrupciones pero no por la aplicación, entonces la aplicación está escribiendo efectivamente en una página en la que no tiene permiso de escritura. Algunos ABI evitaron este problema definiendo uno o más registros como volátiles entre interrupciones. Esto permite la interrupción controlador para cargar un puntero para guardar el estado sin bloquear el estado de la aplicación, pero a diferencia de los registros almacenados, no se puede confiar en que los registros volátiles de interrupción definidos por el software no se modifiquen).
(Se ha propuesto el uso de bancos de registros como ventanas fijas para ampliar el número de registros disponibles, por ejemplo, "Aumento del número de registros efectivos en un procesador de baja potencia usando un archivo de registro en ventana", Rajiv A. Ravindran et al., 2003. También podría notarse una similitud con la pila de registros utilizada para evitar guardar registros y restaurar la sobrecarga para las llamadas a funciones como en Itanium y SPARC [que usa el término "ventanas de registro"], aunque estos mecanismos generalmente cambian los nombres de registro en lugar de intercambiarlos. fuera.)
En términos de hardware, los registros almacenados se pueden implementar cambiando el nombre de los registros en la decodificación de instrucciones. Para el sistema bancario relativamente complejo de ARM, este sería probablemente el mecanismo preferido. Para un sistema bancario más simple como el utilizado por Itanium con un solo banco adicional con potencia de dos registros, puede ser práctico incorporar el cambio de nombre en la indexación del archivo de registro. (Por supuesto, esto no sería compatible con ciertas formas de cambio de nombre utilizadas para admitir la ejecución fuera de orden).
Al reconocer que no se accede a diferentes bancos al mismo tiempo, una optimización inteligente que utiliza este mecanismo puede reducir la sobrecarga del área (limitada por cable) de un archivo de registro altamente portado mediante el uso de "registros 3D". (Esta técnica se propuso en el contexto de las ventanas de registro de SPARC - "Un archivo de registro tridimensional para procesadores superescalares", Tremblay et al., 1995 - y Intel usó una variante para SoEMT - "El multihilo, protegido por paridad Archivos de registro de 128 palabras en un procesador Itanium-Family de doble núcleo ", Fetzer et al., 2005.)
Banca para aumentar el número de accesos posibles
El segundo sentido en el que se utiliza el término banca para los registros se refiere a la división de un conjunto de registros en grupos (bancos) a los que se puede acceder en paralelo. El uso de cuatro bancos aumenta el número máximo de accesos admitidos por un factor de cuatro, lo que permite que cada banco admita menos puertos de acceso (reduciendo el área y el uso de energía) para un recuento de acceso efectivo dado. Sin embargo, en la medida en que los accesos en un ciclo dado no se distribuyan uniformemente entre los bancos, no se alcanzará el número máximo de accesos. Incluso con un gran número de bancos en relación con el recuento de acceso deseado, los conflictos bancarios pueden, en el peor de los casos, limitar el recuento de acceso real al número de puertos proporcionados por un solo banco.
Ha habido muchos trabajos académicos sobre archivos de registro bancarios ( búsqueda de Google Scholar), y se han propuesto varias técnicas generales para reducir el impacto de los conflictos bancarios. La técnica más obvia es almacenar las instrucciones (como se hace para la ejecución fuera de orden) proporcionando un promedio estadístico de los conflictos bancarios. También es posible leer un operando de registro antes de que la instrucción esté lista para ejecutarse (por ejemplo, si otro operando aún no está listo o un peligro estructural retrasa la ejecución). La asignación de registros a los bancos puede explotar la información sobre el uso esperado para reducir la probabilidad de conflictos. (El software puede ayudar utilizando preferentemente registros de la manera esperada). Usando nombres de registros físicos virtuales, es posible retrasar la asignación de nombres de registros físicos (y por lo tanto bancos) hasta que el valor se almacene en el registro;
Este tipo de banca a veces se llama pseudo-multipuerto ya que proporciona la ilusión de un mayor número de puertos de acceso. Esta técnica se usa comúnmente para cachés ya que la estructura física a menudo se divide en matrices de memoria separadas por otras razones.
(Una alternativa a dicha banca es replicar el archivo de registro. El uso de dos copias del archivo de registro permite que cada copia requiera la mitad de los puertos de lectura, aunque se requiere la misma cantidad de puertos de escritura. Esta técnica se utilizó en POWER2 y Alpha 21264 y se usa comúnmente en procesadores de alto rendimiento).
Resumen
Puede ser útil distinguir estos dos tipos de banca como banca temporal en la que la selección bancaria se extiende a lo largo del tiempo (como los registros bancarios de ARM para interrupciones rápidas) y la banca espacial en la que el acceso al banco puede ser concurrente en el tiempo pero está distribuido espacialmente.
La banca temporal generalmente está expuesta al software y se usa para reducir la sobrecarga (y la complejidad) de las interrupciones. (Conceptualmente, el cambio de subprocesos en un procesador Switch-on-Event-MultiThreaded es muy similar al manejo de interrupciones y puede usar mecanismos similares para reducir la sobrecarga).
La banca espacial es con menos frecuencia parte de la ISA (aunque Itanium requirió cargar y almacenar pares de registros de punto flotante para usar números de registro pares e impares, lo que no está garantizado dado el uso de la rotación de registros), lo que permite un diseño trivial de dos bancos para proporcionar el extra requisitos de acceso a archivos de registro) y se utiliza para reducir el costo de proporcionar un mayor número de accesos de registro por ciclo.