Le mot banque est utilisé dans deux sens différents lorsqu'il est appliqué aux registres.
Registres en banque pour le traitement des interruptions
Le sens avec lequel la question StackOverflow est concernée est similaire à l'utilisation dans la commutation de banque (mémoire) (utilisée par certains processeurs 8 bits et 16 bits) en fonction . Les noms d'une collection de registres sont mappés à une autre collection de registres physiques. ARMv7 fournit une banque supplémentaire pour 7 de ses 16 GPR et cinq banques supplémentaires pour le registre de pointeur de pile et le registre de liaison (ARM utilise le registre de liaison pour enregistrer le PC à utiliser pour le retour de l'interruption). Itanium fournit une banque supplémentaire pour 16 de ses 31 GPR statiques. (MIPS fournit des ensembles entiers de 31 GPR, les appelant «ensembles de registres fantômes».)
Contrairement à la commutation de banque de mémoire, le principal objectif de ce type de banque de registres n'est pas (généralement) d'étendre le stockage adressable mais de fournir une gestion plus rapide des interruptions en évitant d'avoir à sauvegarder les valeurs de registre, de charger les valeurs utilisées par le gestionnaire d'interruption et de restaurer l'original. enregistrer des valeurs et simplifier la gestion des interruptions.
(L'utilisation de la pile de l'application pour sauvegarder l'état du registre ouvre la possibilité de déborder la mémoire allouée à cette pile, générant une exception qui doit alors gérer l'enregistrement de l'état d'une manière ou d'une autre. Pire, si la page de mémoire immédiatement après la limite de la pile est accessible en écriture par le privilège accru du gestionnaire d'interruptions mais pas par l'application, l'application écrit alors sur une page sur laquelle elle n'a pas l'autorisation d'écriture. Certains ABI ont évité ce problème en définissant un ou plusieurs registres comme volatils entre les interruptions. Cela permet l'interruption pour charger un pointeur pour l'enregistrement de l'état sans altérer l'état de l'application, mais contrairement aux registres en banque, de tels registres volatils d'interruption définis par logiciel ne peuvent pas être approuvés comme étant inchangés par le logiciel d'application.)
(Il a été proposé d'utiliser ces banques de registres comme fenêtres fixes pour augmenter le nombre de registres disponibles, par exemple, "Augmenter le nombre de registres efficaces dans un processeur basse consommation à l'aide d'un fichier de registre fenêtré", Rajiv A. Ravindran et al., 2003. On peut également noter une similitude entre la pile de registres utilisée pour éviter la sauvegarde du registre et la restauration de la surcharge pour les appels de fonction comme dans Itanium et SPARC [qui utilise le terme "fenêtres de registre"], bien que ces mécanismes décalent généralement les noms de registre plutôt que de les permuter. en dehors.)
En termes de matériel, les registres en banque peuvent être implémentés en renommant les registres en décodage d'instructions. Pour le système bancaire relativement complexe d'ARM, ce serait probablement le mécanisme préféré. Pour un système bancaire plus simple comme celui utilisé par Itanium avec une seule banque supplémentaire avec une puissance de deux nombres de registres, il peut être pratique d'incorporer le renommage dans l'indexation du fichier de registre lui-même. (Bien sûr, cela ne serait pas compatible avec certaines formes de changement de nom utilisées pour prendre en charge l'exécution dans le désordre.)
En reconnaissant que différentes banques ne sont pas accessibles en même temps, une optimisation intelligente utilisant ce mécanisme peut réduire la surcharge (limitée par le fil) d'un fichier de registre à portage élevé en utilisant des "registres 3D". (Cette technique a été proposée dans le cadre des fenêtres de registre de SPARC - "Un fichier de registre tridimensionnel pour les processeurs superscalaires", Tremblay et al., 1995 - et une variante a été utilisée par Intel pour SoEMT - "The Multi-Threaded, Parity-Protected Fichiers de registre de 128 mots sur un processeur à deux cœurs de la famille Itanium ", Fetzer et al., 2005.)
Des services bancaires pour augmenter le nombre d'accès possibles
Le deuxième sens dans lequel le terme banque est utilisé pour les registres fait référence à la division d'un ensemble de registres en groupes (banques) dont chacun est accessible en parallèle. L'utilisation de quatre banques augmente le nombre maximal d'accès pris en charge par un facteur de quatre, permettant à chaque banque de prendre en charge moins de ports d'accès (réduction de la superficie et de la consommation d'énergie) pour un nombre d'accès effectif donné. Cependant, dans la mesure où les accès d'un cycle donné ne sont pas répartis également entre les banques, le nombre maximal d'accès ne sera pas atteint. Même avec un grand nombre de banques par rapport au nombre d'accès souhaité, les conflits bancaires peuvent, dans le pire des cas, limiter le nombre réel d'accès au nombre de ports fournis par une seule banque.
Il y a eu de nombreux articles universitaires sur les fichiers de registres bancaires ( recherche Google Scholar), et plusieurs techniques générales ont été proposées pour réduire l'impact des conflits bancaires. La technique la plus évidente consiste à mettre en mémoire tampon des instructions (comme c'est le cas pour l'exécution dans le désordre) fournissant une moyenne statistique des conflits bancaires. Il est également possible de lire un opérande de registre avant que l'instruction ne soit prête à s'exécuter (par exemple, si un autre opérande n'est pas encore prêt ou qu'un risque structurel retarde l'exécution). L'attribution de registres aux banques peut exploiter les informations sur l'utilisation prévue pour réduire la probabilité de conflits. (Le logiciel peut aider en utilisant de préférence les registres de la manière attendue.) En utilisant des noms de registres physiques virtuels, il est possible de retarder l'allocation des noms de registres physiques (et donc des banques) jusqu'à ce que la valeur soit stockée dans le registre;
Ce type de banque est parfois appelé pseudo-multiportage car il donne l'illusion d'un plus grand nombre de ports d'accès. Cette technique est couramment utilisée pour les caches, car la structure physique est souvent partitionnée en matrices de mémoire distinctes pour d'autres raisons.
(Une alternative à une telle banque consiste à répliquer le fichier de registre. L'utilisation de deux copies du fichier de registre permet à chaque copie de nécessiter deux fois moins de ports de lecture, bien que le même nombre de ports d'écriture soit requis. Cette technique a été utilisée dans POWER2 et l'Alpha 21264. et est couramment utilisé dans les processeurs hautes performances.)
Sommaire
Il peut être utile de distinguer ces deux types de services bancaires comme des services bancaires temporels dans lesquels la sélection des banques est répartie dans le temps (comme les registres en banque d'ARM pour les interruptions rapides) et des services bancaires spatiaux dans lesquels l'accès aux banques peut être simultané dans le temps mais distribué spatialement.
La banque temporelle est généralement exposée aux logiciels et est utilisée pour réduire les frais généraux (et la complexité) des interruptions. (Conceptuellement, la commutation de threads dans un processeur Switch-on-Event-MultiThreaded est très similaire à la gestion des interruptions et peut utiliser des mécanismes similaires pour réduire la surcharge.)
Les opérations bancaires spatiales font moins souvent partie de l'ISA (bien qu'Itanium exigeait de charger et de stocker des paires de registres à virgule flottante pour utiliser des numéros de registre pairs et impairs - ce qui n'est pas garanti compte tenu de la rotation des registres - ce qui permet une conception banale à deux banques pour fournir le supplément registre d'accès aux fichiers) et est utilisé pour réduire le coût de fournir un plus grand nombre d'accès au registre par cycle.