Pentium 4 : Voyage au cœur du CPU
By Franck
Sommaire:

 

L'Architecture NetBurst


Le Pentium 4 est un processeur résolument tourné vers le multimédia, c'est-à-dire qu'il doit être en mesure de traiter rapidement de grosses quantités d'informations (flux audio, vidéo). Comme nous le verrons en étudiant son architecture, celle-ci a été pensée pour limiter au maximum les goulets d'étranglements, tant au niveau de la capacité de calcul que du transfert des données dans le processeur et entre le processeur et le reste du système. L'objectif principal du Pentium 4 est donc le débit.

NetBurst a ainsi été créée avec deux lignes directrices :

  • Permettre technologiquement l'utilisation de fréquences élevées (avec les moyens actuels).
  • Exploiter cette fréquence, en limitant au maximum les goulets d'étranglements.

La contrainte technologique pour les hautes fréquences réside dans le découpage du pipeline. Le principe est le suivant : plus le pipeline comprend d'étapes, plus simples sont les étapes, et d'un point de vue physique du transistor, plus vite elles s'effectuent, permettant ainsi une fréquence de fonctionnement élevée.
L'architecture NetBurst repose sur une technologie de pipeline à 20 niveaux de profondeurs (à comparer avec les pipelines à 5 niveaux du Pentium et à 10 niveaux des Pentium Pro/II/ !!!) et qui lui vaut le nom Hyper Pipelined.

Les 20 étapes du pipeline couvrent les quatre grandes étapes du traitement des instructions :

  • Le « in-order front end » charge les instructions et les décode. Elle nécessite 5 étages du pipeline (1 à 5).
  • Le « out-of-order (OOO) execution logic » réordonne les instructions et les répartit vers les unités de calcul. Il occupe 7 étapes du pipeline (6 à 12).
  • La phase d'exécution fait intervenir les unités de calcul proprement dites : 5 étapes (13 à 17).
  • La phase de « retirement » réordonne les résultats du calcul de façon cohérente : 3 étapes
  • (18 à 20).



Le principal défaut d'un pipeline est qu'il fournit un débit optimal s'il est constamment alimenté en instructions et jamais interrompu.
Or, en pratique, le pipeline est régulièrement soumis à des conflits qui interrompent son fonctionnement. Parmi ces conflits, on distingue :

  • Les conflits de ressources matérielles. Une instruction nécessite une ressource du pipeline déjà occupée par une autre instruction.
  • Les conflits de dépendances. Une instruction attend le résultat d'une autre pour poursuivre son exécution.
  • Les conflits de branchements.

Les deux premiers types de conflits engendrent des états d'attente dans le pipeline (ou « bulles »). La méthode utilisée pour pallier à ces conflits réside dans l'exécution dans le désordre, ou Out-Of-Order Execution (OOO). Cette solution existe déjà sur le noyau P6.

Le conflit de branchement est en revanche beaucoup plus pénalisant car en cas d'échec cas il nécessite de vider complètement le pipeline, opération d'autant plus pénalisante que le pipeline est long, et de le remplir à nouveau. Afin de limiter les effets néfastes des conflits de branchement, le Pentium 4 utilise deux mécanismes de prédiction de branchement, tout comme sur le Pentium !!! :

  • un mécanisme dynamique, qui stocke un historique des branches prises, et dont la capacité de stockage de branches est passée de 512 entrées sur Pentium !!! à 4096 entrées sur Pentium 4.

  • Un mécanisme statique, utilisé en cas d'échec du précédent ; il est dit « statique » car il n'utilise pas un historique de branchement mais fonctionne selon un algorithme constant.

La prédiction de branchement est un facteur de performances important, car le remplissage du pipeline est une opération très coûteuse en cycles processeur ; en effet, le pipeline n'est capable de traiter que des micro-opérations (µops), elles-mêmes étant le résultat du décodage des instructions plus complexes arrivant dans le bus du processeur.

Afin d'accélérer cette phase de décodage, les processeurs modernes multiplient les unités de décodage. Ainsi le Pentium !!! et l'Athlon sont capables de décoder jusqu'à trois instructions IA-32 par cycle. Le Pentium 4 quant à lui utilise une technique différente : il n'est capable de décoder qu'une seule instruction IA-32 par cycle, mais en revanche il dispose d'une mémoire tampon permettant de stocker le résultat des décodages ; il s'agit du Trace Cache.
A la différence d'un cache code classique qui contient des instructions non décodées, le Trace Cache est inséré dans les premières étapes du pipeline, il contient donc des µops directement utilisables par les étapes suivantes du pipeline.

Ce système présente deux intérêts majeurs :

  • Réduire les cycles de pénalités en cas d'échec de branchement. En effet, dans une telle situation, le pipeline doit être vidé puis remplit à nouveau avec les bonnes instructions, qui avec un peu de chance sont contenues dans le cache code. Un cache code classique contient des instructions IA-32 qui doivent alors être à nouveau décodées pour être utilisables par le pipeline. Le Trace Cache, contenant des µops déjà décodées, permet d'éviter cette phase de décodage.

  • Par rapport à un cache code classique, le Trace Cache se situe après l'unité de prédiction de branchement (BPU) ; cela implique que les µops contenues dans le Trace Cache sont celles prévues par la prédiction de branchement, alors qu'un cache code classique contient les instructions des deux branches, dont une seule sera prise.

Cependant le Trace Cache présente quelques désagréments, liés au fait qu'il est une mémoire insérée dans le pipeline. En effet, rechercher une information dans une mémoire n'est pas immédiat, et la latence engendrée dépend directement de sa taille et de son organisation. Afin de ne pas insérer trop de latences au sein même du pipeline, le Trace Cache se doit d'avoir une taille limitée. Et plus la taille est faible, moins les chances d'y trouver l'information sont grandes, c'est là l'éternel dilemme des mémoires caches.
L'autre désavantage est lié à l'architecture physique de la mémoire qui occupe une surface assez importante dans la puce. Le fonctionnement optimal du pipeline nécessite que les unités impliquées dans les étapes successives soient le plus rapprochées possible d'un point de vue physique, afin de réduire la distance de parcourt des signaux. A ce titre, le Trace Cache représente une importante quantité de transistors, et propager une donnée jusqu'à l'étape suivante du pipeline peut s'avérer problématique en terme de distance. Le résultat est que le pipeline possède une étape dédiée à la propagation du signal depuis le Trace Cache vers l'étape suivante, justement nommée étape Drive. Le pipeline du Pentium 4 possède en tout deux étapes Drive dédiées à la propagation du signal.

Au final, le Trace Cache s'avère plus efficace qu'un cache code classique, et Intel prétend qu'un Trace Cache de 12K µops équivaut à un cache code L1 de 16 à 18Ko.

Les µops fournies par le Trace Cache continuent leur chemin dans le pipeline du P4 pour arriver dans l'unité de réordonnancement, ou « Out-of-Oder execution logic ». Le rôle de cette unité, déjà présente dans l'architecture P6, est d'optimiser l'ordre d'exécution des µops afin d'éviter les conflits de ressources et de dépendances, nuisibles au pipeline. Les µops sont alors réparties vers les unités de calcul.

 

Suite ( Les unités de calculs )

Close