
Un registre de processeur est un emplacement rapidement accessible disponible pour le processeur d'un ordinateur . Les registres se composent généralement d'une petite quantité de stockage rapide , bien que certains registres aient des fonctions matérielles spécifiques et puissent être en lecture seule ou en écriture seule. Dans l'architecture informatique , les registres sont généralement adressés par des mécanismes autres que la mémoire principale , mais peuvent dans certains cas se voir attribuer une adresse mémoire , par exemple DEC PDP-10 , ICT 1900. [
Presque tous les ordinateurs, qu'ils soient dotés ou non d'une architecture de chargement/stockage , chargent des éléments de données d'une mémoire plus grande dans des registres où ils sont utilisés pour des opérations arithmétiques , des opérations binaires et d'autres opérations, et sont manipulés ou testés par des instructions machine . Les éléments manipulés sont ensuite souvent stockés dans la mémoire principale, soit par la même instruction, soit par une instruction ultérieure. Les processeurs modernes utilisent soit une RAM statique , soit une RAM dynamique comme mémoire principale, cette dernière étant généralement accessible via un ou plusieurs niveaux de cache .
Les registres du processeur se situent normalement au sommet de la hiérarchie de la mémoire et constituent le moyen le plus rapide d'accéder aux données. Le terme désigne normalement uniquement le groupe de registres directement codés dans le cadre d'une instruction, comme défini par le jeu d'instructions . Cependant, les processeurs modernes à hautes performances ont souvent des doublons de ces « registres architecturaux » afin d'améliorer les performances via le renommage des registres , ce qui permet une exécution parallèle et spéculative . La conception x86 moderne a acquis ces techniques vers 1995 avec les sorties de Pentium Pro , Cyrix 6x86 , Nx586 et AMD K5 .
Lorsqu'un programme informatique accède aux mêmes données de manière répétée, on parle de localité de référence . Le stockage des valeurs fréquemment utilisées dans des registres peut être essentiel aux performances d'un programme. L'allocation des registres est effectuée soit par un compilateur lors de la phase de génération de code , soit manuellement par un programmeur en langage assembleur .
Taille
Les registres sont normalement mesurés par le nombre de bits qu'ils peuvent contenir, par exemple, un « registre 8 bits », un « registre 32 bits », un « registre 64 bits », voire plus. Dans certains jeux d'instructions , les registres peuvent fonctionner selon différents modes, décomposant leur mémoire de stockage en parties plus petites (32 bits en quatre parties de 8 bits, par exemple) dans lesquelles plusieurs données (vecteur ou tableau unidimensionnel de données) peuvent être chargées et traitées en même temps. En général, cela est mis en œuvre en ajoutant des registres supplémentaires qui mappent leur mémoire dans un registre plus grand. Les processeurs qui ont la capacité d'exécuter des instructions uniques sur plusieurs données sont appelés processeurs vectoriels .
Types
Un processeur contient souvent plusieurs types de registres, qui peuvent être classés en fonction des types de valeurs qu'ils peuvent stocker ou des instructions qui fonctionnent sur eux :
- Les registres accessibles à l'utilisateur peuvent être lus ou écrits par des instructions machine. La division la plus courante des registres accessibles à l'utilisateur est une division en registres de données et registres d'adresses.
- Les registres de données peuvent contenirdes valeurs de données numériquestelles quedes entierset, dans certaines architectures,des nombres à virgule flottante, ainsi quedes caractères,des tableaux de petits bitset d'autres données. Dans certaines architectures plus anciennes, telles que l'IBM 704, l'IBM 709et ses successeurs, lePDP-1, lePDP-4/PDP-7/PDP-9/PDP-15, lePDP-5/PDP-8et leHP 2100, un registre de données spécial appeléaccumulateurest utilisé implicitement pour de nombreuses opérations.
- Les registres d'adresses contiennentdesadresseset sont utilisés par les instructions qui accèdent indirectement àla mémoire primaire.
- Certains processeurs contiennent des registres qui ne peuvent être utilisés que pour contenir une adresse ou uniquement des valeurs numériques (dans certains cas, utilisés comme registre d'index dont la valeur est ajoutée comme décalage à partir d'une adresse) ; d'autres permettent aux registres de contenir l'un ou l'autre type de quantité. Il existe une grande variété de modes d'adressage possibles , utilisés pour spécifier l'adresse effective d'un opérande.
- Le pointeur de pile est utilisé pour gérer la pile d'exécution . Rarement, d'autres piles de données sont adressées par des registres d'adresses dédiés (voir machine à pile ).
- Registres à usage général (Les GPR peuvent stocker à la fois des données et des adresses, c'est-à-dire qu'ils sont des registres de données/adresses combinés ; dans certaines architectures, lefichier de registresestunifiéafin que les GPR puissent également stocker des nombres à virgule flottante.
- Les registres d'état contiennentdes valeurs de véritésouvent utilisées pour déterminer si une instruction doit ou non être exécutée.
- Les registres à virgule flottante (FPR) stockent des nombres à virgule flottante dans de nombreuses architectures.
- Les registres constants contiennent des valeurs en lecture seule telles que zéro, un oupi.
- Les registres vectoriels contiennent des données pourle traitement vectorieleffectué parSIMD(Single Instruction, Multiple Data).
- Les registres à usage spécifique ( SPR ) contiennent certains éléments de l' état du programme ; ils comprennent généralement le compteur de programme , également appelé pointeur d'instruction, et le registre d'état ; le compteur de programme et le registre d'état peuvent être combinés dans un registre de mot d'état de programme (PSW). Le pointeur de pile susmentionné est parfois également inclus dans ce groupe. Les microprocesseurs intégrés peuvent également avoir des registres correspondant à des éléments matériels spécialisés.
- Les registres spécifiques au modèle (également appelésregistres spécifiques à la machine) stockent les données et les paramètres liés au processeur lui-même. Étant donné que leur signification est liée à la conception d'un processeur spécifique, il n'est pas prévu qu'ils restent standard d'une génération de processeur à l'autre.
- Registres de plage de types de mémoire (MTRR)
- Les registres internes ne sont pas accessibles par les instructions et sont utilisés en interne pour les opérations du processeur.
- Le registre d'instructions contient l'instruction en cours d'exécution.
- Registres liés à la récupération d'informations à partir de la RAM , un ensemble de registres de stockage situés sur des puces distinctes du processeur :
- Registre tampon de mémoire (MBR), également appeléregistre de données de mémoire(MDR)
- Registre d'adresses mémoire (MAR)
- Registres d'architecturesont les registres visibles par le logiciel et sont définis par une architecture. Ils peuvent ne pas correspondre au matériel physique si le renommage des registres est effectué par le matériel sous-jacent.
Les registres matériels sont similaires, mais se produisent en dehors des processeurs.
Dans certaines architectures (telles que SPARC et MIPS ), le premier ou le dernier registre du fichier de registres entiers est un pseudo-registre dans la mesure où il est programmé pour toujours renvoyer zéro lors de la lecture (principalement pour simplifier les modes d'indexation), et il ne peut pas être écrasé. Dans Alpha , cela est également fait pour le fichier de registres à virgule flottante. En conséquence, les fichiers de registres sont généralement cités comme ayant un registre de plus que le nombre d'entre eux réellement utilisables ; par exemple, 32 registres sont cités alors que seulement 31 d'entre eux correspondent à la définition ci-dessus d'un registre.
Exemples
Le tableau suivant indique le nombre de registres dans plusieurs architectures de processeurs classiques. Notez que dans les processeurs compatibles x86 , le pointeur de pile ( ESP) est compté comme un registre entier, même s'il existe un nombre limité d'instructions pouvant être utilisées pour opérer sur son contenu. Des mises en garde similaires s'appliquent à la plupart des architectures.
Bien que toutes les architectures listées ci-dessous soient différentes, presque toutes sont dans une configuration de base connue sous le nom d' architecture von Neumann , proposée pour la première fois par le mathématicien américano-hongrois John von Neumann . Il convient également de noter que le nombre de registres sur les GPU est bien plus élevé que sur les CPU.
Usage
Le nombre de registres disponibles sur un processeur et les opérations qui peuvent être effectuées à l'aide de ces registres ont un impact significatif sur l' efficacité du code généré par les compilateurs optimisants . Le nombre de Strahler d'un arbre d'expression donne le nombre minimum de registres requis pour évaluer cet arbre d'expression.