AMD K8 - Partie 3 : Etude de l'Architecture | ||||
By Franck D. - 16/02/2003 | ||||
32 Vs 64 Bits : Explications
La réelle valeur ajoutée du K8 réside dans l'introduction de la technologie 64 bits, appelée x86-64 ou encore AMD64, et nous allons donc y consacrer le chapitre le plus important de cet article. L'AMD64 propose de réitérer le pas franchi avec le 386
: changer l'architecture x86. Le défi est de taille, et il faut
mesurer le temps qui a été nécessaire pour que le
32 bits se généralise, et ce plus de 10 ans après
l'avénement du 386 ! L'AMD64 soulève un certain nombre de questions, la principale étant : que peut apporter une technologie 64 bits, et en a-t-on réellement déjà besoin ? Après avoir présenté en quoi consiste l'AMD64, c'est la question à laquelle nous allons nous efforcer de répondre dans cette partie.
L'appartenance d'un processeur à une technologie 16, 32 ou 64 bits réside dans la taille de ses registres généraux, appelés également GPR pour General Purpose Registers. Les GPR sont les registres de travail du processeur : ils sont les opérandes du jeu d'instruction x86. Les GPR sont, en outre, les seuls registres qui permettent d'adresser la mémoire. Ceci a pour conséquence que la capacité de mémoire adressable dépend directement de la taille des GPR. Premier représentant de la famille x86, le 8086 possèdait huit GPR de 16 bits : ax, bx, cx, dx, si, di, bp, sp. Or, des registre de 16 bits permettent de former des adresses mémoire comprises entre 0 et 65535, ce qui nous donne 64Ko de mémoire adressable. Ce qui est peu concevable, même pour un processeur aussi ancien que le 8086. L'astuce consiste donc à étendre l'espace d'adressage en gérant la mémoire sous forme de blocs, chacun possédant une taille de 64Ko. Ce système présente un manque de souplesse certain. Ceux qui ont programmé en mode réel MS-DOS se souviendront certainement de l'impossibilité de créer des tableaux d'une taille supérieure à cette barrière de 64Ko. Le 386 a permis de s'affranchir de cette limitation. Il a étendu
la taille des GPR à 32 bits,ce qui en fait le premier processeur
IA32 (Intel Architecture 32 bits). Des GPR de 32 bits permettent d'adresser
directement jusqu'à 4Go de mémoire.
Les processeurs x86 actuels sont toujours conformes aux spécifications IA32, et cette technologie commence à montrer ses limites. La première limite, que nous appelerons limite horizontale, concerne
la taille des registres proprement dite, et plus précisément
la taille de mémoire adressable avec des GPR de 32 bits. Comme
nous l'avons vu, des GPR 32 bits permettent d'adresser 4Go, ce qui semble
encore aujourd'hui largement suffisant pour une utilisation courante,
mais risque de rapidement représenter une limite. 1Go de mémoire
vive sont dès maintenant une capacité courante, et la limitation
à 4Go risque d'être assez vite atteinte. Cette limite est
d'ailleurs déjà atteinte sur les serveurs, où 4Go
de mémoire représentent déjà une limitation. La deuxième limite de l'IA32 concerne le nombre de GPR, et nous
la nommerons limite verticale. S'il est une caractéristique qui
n'a pas évolué depuis l'émergence du x86, c'est bien
le nombre de GPR. En comparaison, les processeurs non x86 se voient lottis
de plusieurs dizaines de GPR (128 sur un Itanium), à comparer aux
huit que possède tout processeur x86. Le faible nombre de GPR a une incidence directe sur l'efficacité du code x86. En réalité, la limitation ne vient pas du processeur lui-même, mais des compilateurs. Les processeurs x86 possèdent, et depuis plusieurs générations déjà, beaucoup plus de huit GPR en interne. Cette technique s'appelle le "register renaming", et permet au processeur d'utiliser plusieurs exemplaires d'un même GPR. Cela dit, aussi efficace soit-il, un processeur n'exécute que le code qui lui est fournit par le compilateur, et ce dernier est par contre fortement limité par le faible nombre de registres. Il faut réaliser que si les processeurs ont évolué, il en a été de même des applications ; celles-ci sont toujours plus grosses, plus complexes, et n'ont pas grand chose à voir avec les premiers programmes qui tournaient sur le 8086. Les compilateurs ont ainsi vu leur tâche se complexifier, mais les outils dont ils disposaient sont restés les mêmes, à savoir huit registres de travail. La conséquence de cette complexification des programmes est que le compilateur doit opérer des trésors d'astuce pour utiliser 8 registres là où il lui en faudrait 128 ! Un grand nombre d'instructions sert donc à libérer les registres (en sauvant leur contenu sur la pile ou en mémoire) afin de pouvoir les utiliser pour les nouvelles instructions, ce qui bien entendu ralentit fortement le code. Comment pallier à cela ? La voie la plus commune consiste à compenser cette perte d'efficacité du code par une amélioration dans l'architecture du processeur. Ainsi, le Pentium M par exemple possède une gestion optimisée des instructions opérant sur la pile, qui sont très utilisées pour libérer un GPR. Mais la vraie solution est beaucoup plus simple : plus de GPR ! Mais plus de GPR signifie rupture avec l'architecture IA32, et donc définition d'une nouvelle architecture, tout comme cela s'est passé avec le mode protégé 32 bits du 386. Intel et AMD se sont bien entendu engoufrés dans cette brèche.
Si la solution d'Intel reste à ce jour encore méconnue,
celle d'AMD existe depuis plusieurs mois déjà : l'AMD64.
|
||||
Fermer |