L'architecture AMD K10

Publié le 13/09/2007 par
Imprimer
Un IPC boosté
Dans notre dossier sur l'architecture Core d'Intel, nous avons quantifié la puissance théorique d'une architecture par l'IPC (instructions par cycle) que celle-ci peut fournir sur les principaux jeux d'instructions (entiers, FPU, SSE).

Le noyau du K10 est directement hérité de celui du K8. Doté de 3 ALUs (unités arithmétiques et logiques) dédiées aux calculs entiers, le K8 offre une capacité de calcul x86 égale à celle du Core 2 Duo. En SSE entier, les deux unités de calcul 64 bits du K8 ne permettent de traiter que 8 entiers 16 bits par cycle, alors que le Core 2 Duo peut en traiter jusqu'à 24 grâce à ses 3 unités SSE 128 bits. Même constat en SSE flottant, où les deux unités flottantes du Core 2 Duo associées aux unités SSE 128 bits permettent de traiter deux fois plus de données flottantes que le K8 à chaque cycle d'horloge.

Le K10 offre la même capacité de calcul entier que son prédécesseur. En SSE entiers, il offre un pic de traitement atteignant trois opérations entières par cycle (deux opérations arithmétiques par les deux unités SSE et un déplacement par l'unité “FP Move”). En calcul flottant en revanche, son IPC théorique est propulsé au même niveau que celui du Core 2 et ce grâce à l'adoption de deux unités SSE capables de traiter 128 bits par cycle.


Afin d'alimenter les deux unités SSE 128 bits à plein régime, le K10 double le débit d'instructions en entrée (de 16 à 32 octets d'instructions par cycle) ainsi que la bande passante du cache L1 de données (de 2 x 64 bits à 2 x 128 bits par cycle).
Nouvelles unités de prédictions
A titre de rappel, les branchements et les accès mémoire constituent les deux principales sources de réduction de l'IPC (je vous renvoie au dossier sur le Core 2 Duo pour plus de détails). Il est donc normal et bienvenu qu'AMD ait doté son K10 d'optimisations spécifiques.

Une branche se traduit, dans un flux d'instructions, par un saut vers une nouvelle adresse. Ce saut a pour conséquence de perturber le fonctionnement du pipeline qui ne peut plus accueillir de nouvelle instruction avant de connaître l'adresse de destination. La solution mise en œuvre par les mécanismes classiques de prédiction de branchement consiste à essayer de deviner si une branche va être prise ou non. Pour ce faire, le processeur intègre plusieurs unités de prédiction qui différent suivant leur méthode de travail, les plus efficaces se basant sur un historique des branches prises stocké dans un buffer dédié.


Les unités de prédiction du K8 sont conçus pour prédire les branches directes, c'est-à-dire celles pour lesquelles l'adresse de destination du saut est explicitement spécifiée dans le code. Le travail de l'unité de prédiction consiste alors à deviner si le branchement sera effectué ou pas. Mais ces unités se montrent peu efficaces sur les branches indirectes, c'est-à-dire celles dont l'adresse de destination est susceptible de changer au cours de l'exécution. Ce type de branche est très courant dans les langages orientés objet qui font grand usage des pointeurs de fonctions.

Le K10 possède une unité de prédiction dédiée aux branches indirectes qui est capable de stocker plusieurs adresses de destination préférées pour chaque branche, améliorant ainsi l'efficacité de la prédiction. Il ne s'agit pas là d'un mécanisme inédit car il équipe les processeurs Intel depuis le Pentium 4 Prescott. Mais K8 a été dessiné bien avant cela !
Vos réactions

Top articles