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

 

Les Mémoires caches - Le cache L1

 

L'architecture du Pentium 4 est capable de gérer trois niveaux de mémoire cache : les L1 et L2 que l'on trouve sur les modèles actuels, ainsi qu'un cache de troisième niveau, d'une taille comprise entre 512Ko et 4Mo. Le futur Xeon MP (Gallatin), prévu pour 2003, exploitera ainsi un cache L3 de 512Ko ou de 1Mo, cadencé à la même vitesse que le processeur mais situé en dehors du core, un peu à la façon du Pentium Pro.
Fermons cette parenthèse, et regardons en détail les caches L1 et L2 du Pentium 4.


-= Le cache L1 =-

Le cache L1 du Pentium 4 regroupe l'Instruction Trace Cache (dont nous avons parlé plus haut) et le cache de données d'une taille de 8Ko. Ce cache est de type 4-way associatif, et les lignes de cache ont une longueur de 64 octets.
Le tableau qui suit regroupe les caractéristiques comparées des caches de données L1 du Pentium !!! et du Pentium 4.

  Pentium !!! Pentium 4
Taille 16Ko 8Ko
Associativité 4-way 4-way
Taille d'une ligne 32 octets 64 octets
Mode d'écriture Write Back Write Through
Latence 3 cycles 2 cycles (ALU)
6 cycles (FPU)

La première constatation concerne la taille du L1 du Pentium 4. En effet, depuis que les processeurs embarquent du cache, la tendance est plutôt à l'augmentation de sa taille. Pour la première fois, le Pentium 4 a un cache de taille inférieure à celui de son prédécesseur. Pourquoi cette régression ?

Deux raisons majeures ont poussé Intel à intégrer un cache d'une taille aussi faible :

Tout d'abord, le Pentium 4 est le premier processeur à n'exister qu'avec un cache L2 intégré au noyau. En effet, le Pentium !!! est issu d'une architecture à cache externe (sur cartouche), pour laquelle l'inflation de cache L1 permet de pallier les faiblesses du cache L2 externe, bien que l'évolution du Pentium !!! ait permis l'intégration du L2 sur le noyau. Il en est de même pour l'Athlon, dont les premières versions utilisaient un cache L2 externe.
Dans le cas du Pentium 4, le cache L1 a été dimensionné en tenant compte de la présence d'un L2 intégré, donc rapide. L'intérêt d'un L1 de grande taille pour compenser le L2 externe a donc disparu.

D'autre part, nous avons vu que l'architecture NetBurst est conçue pour fournir un débit maximum à tous les niveaux, en évitant les goulets d'étranglement. A ce titre le cache L1 a un rôle essentiel à jouer, et pour éviter de créer des états d'attente dans le pipeline, il doit offrir un débit élevé un temps de réponse faible. Or, les temps d'accès du cache sont d'autant plus bas que sa taille est faible.

- Débit et latence

Le cache L1 supporte une lecture et une écriture à chaque cycle. Le pipeline peut donc accéder au L1 à chaque cycle d'horloge, évitant ainsi les états d'attente. Un autre facteur déterminant est la latence, c'est-à-dire le délai séparant la demande de lecture de la disponibilité effective de la donnée.

En effet, le cache est une mémoire, et comme toute mémoire il ne répond pas instantanément à une requête. Le temps de réponse (la latence) dépend de la taille, de sa technologie de fabrication (un cache gravé en 0,13µ aura des temps d'accès inférieurs à un cache gravé en 0,35µ), et également de l'algorithme de gestion du cache (l'augmentation du niveau d'associativité augmente le temps de recherche).
En outre, la latence s'exprime en cycles processeurs, car c'est la valeur la plus représentative de l'attente qu'elle impose au microprocesseur. De ce fait, plus la fréquence de fonctionnement est élevée, plus la latence exprimée en cycle est élevée.

Le cache L1 du Pentium !!! Coppermine a une latence de 3 cycles, ce qui correspond à un temps d'accès de 3ns à la fréquence de 1GHz. Supposons pour simplifier que le L1 du Pentium 4 dispose du même temps d'accès de 3ns, celui-ci étant prévu pour fonctionner à 2GHz en 0,18µ, ce temps de réponse correspond ainsi à 6 cycles de latence à cette fréquence, et c'est environ le temps de réponse du cache L1 depuis la FPU.

En résumé, les fréquences élevées du Pentium 4 imposent une latence de cache assez élevée, ce qui peut nuire très fortement aux performances du pipeline, lui imposant de nombreux temps d'attente. Ceci est d'autant plus critique pour les ALUs double vitesse, dont l'utilisation nécessite des temps d'accès très rapide. Intel a donc imaginé un mécanisme pour réduire la latence du cache L1 depuis les unités de l'ALU et la ramener à seulement deux cycles. Comment ont-ils fait ? Par spéculation. En fait, l'accès au cache repose sur un mécanisme complexe de prédiction, c'est-à-dire que le L1 est interrogé avant de savoir quelle donnée est requise.
Comme tout mécanisme de prédiction, il possède un taux d'erreurs. En cas d'échec, c'est-à-dire si la donnée « pré-extraite » est mauvaise, seules les instructions concernées sont exécutées à nouveau. Ce mécanisme porte le nom de « replay, logic-tracks, re-execute ».

- Les lignes de cache

La seconde nouveauté du cache L1 du Pentium 4 réside dans la longueur des lignes de cache : 64 octets, en comparaison à 32 octets sur Pentium !!!. Quelles sont les conséquences de lignes plus longues ?

  • Une ligne de taille plus importante signifie moins de lignes, à tailles de cache égales. Le cache du Pentium 4 est associatif à 4 voies, ce qui signifie de les 8Ko sont découpés en 4 blocs de 2Ko, chaque bloc comportant alors 32 lignes de 64 octets. En comparaison, sur le Pentium !!!, chaque bloc comporte 128 lignes. Or, moins le cache comporte de lignes, plus le taux d'échec est élevé. Avec quatre fois moins de lignes, on peut donc s'attendre à ce que le taux de succès du cache L1 du Pentium 4 soit plus faible que celui du Pentium !!!. Intel annonce un taux de succès de 90% pour le cache L1 du Pentium 4, contre 95% pour les 32Ko du Pentium !!!.

  • Tout « saut » dans la lecture dans le cache engendre des zones non exploitées dans les lignes, on parle alors de « pollution » du cache. Un cache utilisant des lignes de 64 octets tend ainsi à être plus facilement pollué que dans le cas de lignes de 32 octets.

  • Une ligne de 64 octets est plus longue à remplacer qu'une ligne de 32 octets. Cela se produit notamment en cas d'échec en lecture L1, lorsqu'une nouvelle ligne de cache est chargée depuis le L2. La conséquence est alors une augmentation du temps d'accès au cache L2.

  • L'avantage (enfin !) est qu'une même zone mémoire est mise en cache avec deux fois moins d'accès lorsque la taille de la ligne double, diminuant ainsi les chargements depuis le cache de niveau inférieur. Ceci est surtout évident dans le cas de lectures séquentielles, c'est-à-dire quand les données exploitées sont contiguës en mémoire. Et ceci tend à se produire plus souvent lors de l'utilisations de jeux d'instructions SIMD tels que le SSE. Ainsi, une ligne de 64 octets permet de charger directement 4 registres SSE (128 bits), en ne subissant qu'une seule fois le temps de latence.

- Le mode d'écriture

Le dernier changement du cache L1 du Pentium 4 par rapport à celui du Pentium !!! concerne son mode d'écriture de type « Write Through » (WT), en comparaison au mode « Write Back » (WB) utilisé depuis le 486. Avant de commenter ce choix, commençons par expliquer en quoi consistent ces modes d'écriture.

Lorsque le processeur doit effectuer une écriture en mémoire, il effectue celle-ci dans le cache L1. Afin d'obtenir une cohérence entre les données présentes dans les différents niveaux de cache, la donnée nouvellement modifiée également être mise à jour dans le cache de second niveau (et dans tous les niveaux de cache suivant le cas échéant, et ce jusqu'à la mémoire centrale), ce qui peut prendre beaucoup de temps et ralentit le fonctionnement du processeur. Afin d'éviter cela, une technique consiste à n'écrire la donnée que dans le cache L1, sans répercuter tout de suite le changement dans le cache L2. L'écriture dans le L2 ne se fait alors que si la ligne de cache L1 contenant la donnée modifiée est remplacée. Dans ce cas, le cache L1 fonctionne en mode Write Back. Ce mode est le plus efficace, d'autant plus que l'accès au cache L2 est lent.
En mode Write Through, chaque écriture dans le L1 est systématiquement mise à jour dans le cache L2. « Through » signifie « à travers », et donne une image précise de cet algorithme : l'écriture se fait dans le L2, en passant au travers du L1.

Pourquoi le cache L1 du Pentium 4 utilise-t-il le mode WT plutôt que le WB, à priori plus rapide ? Tout d'abord, il faut souligner que le mode WB est d'autant plus efficace que l'accès au cache L2 est lent, et donc l'effet est moins notable dans le cas d'un L2 intégré, qui est un postulat sur le Pentium 4 comme nous l'avons dit précédemment.
Ensuite, le mode WB présente un défaut, en ce sens qu'il ralentit l'accès en lecture. En effet, en cas d'échec en lecture dans le cache L1, une nouvelle ligne de cache doit être chargée, ce qui signifie le remplacement d'une ancienne ligne, et donc une éventuelle écriture dans le L2 pour mettre à jour la donnée en mode WB. Qui plus est, compte tenu du faible nombre de ligne du cache L1 du Pentium 4, un remplacement de ligne est plus fréquent que sur Pentium !!!.
Le Pentium 4 qui est à la recherche des temps d'accès en lecture les plus bas possibles ne peut s'accommoder de ce défaut, et préfère donc un mode WT pour des temps en lecture optimaux, au détriment des temps en écriture.

En résumé, à la différence des autres processeurs, le cache L1 du Pentium 4 n'est pas fait pour fonctionner seul, mais épaulé par un cache L2 rapide. Et comme tout le reste de l'architecture NetBurst, il a été conçu pour fournir un débit maximum en lecture.

 

 

Suite ( Les mémoires caches : Le cache L2 )

Close