Qu'est-ce qu'un registre ?

Si vous n'êtes pas particulièrement intéressé par les ordinateurs, vous seriez pardonné de supposer que les seules formes de mémoire dans un ordinateur étaient le disque dur et la RAM. Ceux d'entre vous qui s'intéressent aux ordinateurs savent probablement que ce n'est pas le cas, et que le Le processeur dispose également d'un ensemble de caches qui sont utilisés pour mettre en cache les données de la RAM afin que le processeur puisse y accéder. plus rapide. Toutes ces fonctionnalités sont annoncées, principalement parce que la vitesse et/ou la capacité sont un argument de vente décent et affectent généralement les niveaux de performance.

Il existe en fait une autre couche de mémoire. Même si vous pensez que le cache L1 est aussi proche que possible du cœur de traitement réel, il existe une autre couche supérieure dans la hiérarchie de la mémoire. Ce sont les registres du CPU. La raison pour laquelle ils ne sont pas vraiment annoncés ou mentionnés est qu'ils ne sont pas vraiment modifiés du tout. Techniquement, ils pourraient l'être, cependant, le nombre et la taille des registres sont en fait fondamentaux pour l'architecture. Cela signifie que tous les processeurs x86-64 ont le même nombre de registres. Ils ne sont pas commercialisés car ils ne sont pas un point concurrent.

A quoi sert un registre ?

Un registre est un emplacement de stockage rapidement disponible pour le processeur. L'accès à un registre est immédiat avec une latence nulle, alors que même le cache L1 a une latence d'environ 4 à 5 cycles dans les processeurs modernes. Cette immédiateté d'accès fait allusion au cas d'utilisation des registres. Les registres sont utilisés pour stocker les instructions activement exploitées par le CPU. Ils stockent également des points de données qui doivent être traités. Certains registres sont à usage général, tandis que d'autres ont un objectif très spécifique. Un exemple de registre à usage spécial serait le compteur de programme qui est l'endroit où le processeur suit sa position dans sa séquence de programme.

De nombreux registres sont considérés comme accessibles aux utilisateurs. Cela ne signifie pas pour autant que l'utilisateur d'un ordinateur peut choisir la valeur à y mettre. Cela signifie que le logiciel en cours d'exécution peut spécifier les données à charger dans ces registres. Un plus petit nombre de registres sont internes, ce qui signifie que le logiciel ne peut pas du tout les traiter. Le registre d'instructions, qui stocke l'instruction en cours d'exécution, est un exemple de registre interne.

Renommer le registre

Bien qu'une architecture de processeur ne permette qu'une seule configuration de registres, il y a en fait un peu de nuance à cela. Tous les processeurs modernes utilisent le renommage des registres. Il s'agit d'une technique dans laquelle vous pouvez avoir plus de registres physiques et les utiliser pour précharger des données ou stocker des données liées à une instruction dans le désordre qui aurait autrement été écrasée. Lorsque le processeur arrive au point où il a besoin des données dans les registres supplémentaires, il le renomme simplement pour qu'il soit adressable, tout en rendant un registre précédemment adressable non adressable.

Le processus de changement de nom de registre peut être très utile pour une exécution dans le désordre. Par exemple, si un emplacement mémoire est programmé pour être lu puis écrit, et que les instructions ont été exécutées dans cet ordre, tout va bien. Si, toutefois, les instructions sont réordonnées pour effectuer l'écriture en premier, l'instruction de lecture obtiendrait la mauvaise valeur. Pour éviter cela, la valeur d'origine à lire est stockée dans un registre inutilisé qui est ensuite renommé lors du traitement de l'instruction concernée.

Conclusion

Les registres constituent le niveau le plus élevé de la hiérarchie de la mémoire. Ils sont la seule partie directement adressable par le CPU et n'ont pas de latence. Les registres sont utilisés pour stocker les données activement exécutées par le CPU. Ils sont également utilisés pour stocker d'autres points de données tels que le compteur de programme qui garde une trace de l'instruction qui est la prochaine à être exécutée. Un nombre très limité de registres est disponible avec l'architecture x86-64 ayant 16 registres à usage général et 16 ou 32 registres à virgule flottante selon si AVX-512 est pris en charge.