Intel Core 2 Duo

Publié le 22/06/2006 par et
Imprimer
Les caches de Core
L’architecture Core introduit de nouvelles contraintes à son sous-système de cache. De fait, l’IPC élevé nécessite d’une part un sous-système de cache présentant un de taux de succès élevé, et ce afin de masquer efficacement les latences mémoire ; mais également un débit élevé afin de faire face à l’augmentation en demande de données qui accompagne celle de l’IPC.

Le tableau ci-dessous regroupe les principales caractéristiques des caches de la nouvelle architecture, et inclut les latences d’accès ainsi que les débits obtenus avec le test de bande passante SSE2 (128 bits) de RightMark Memory Analyzer (RMMA)  :


Les caches L1 de l’architecture Core partagent les mêmes caractéristiques de taille et d’associativité que ceux qui équipent Mobile. En revanche, la bande passante offerte est doublée, comme le montre le test de débit en lecture 128 bits de RMMA. Nous retrouvons ce résultat si nous regardons le débit de l’instructions de lecture mémoire 128 bits SSE2 movapd : une lecture 128 bits par cycle, soit 16 octets / cycle.


L’accès au cache L2 nécessite un cycle supplémentaire, ce qui porte son débit à 8 octets par cycle.

A la différence des Pentium D et Athlon 64 X2, Core utilise la technique de l’Advanced Smart Cache inaugurée sur le Yonah et qui consiste à partager le cache L2 entre les deux cores d’exécution. En comparaison à un cache L2 dédié à chaque core, cette méthode présente le principal avantage de partager des données entre les deux cores, et ce sans passer par le bus mémoire. Cela réduit les accès mémoire (et les latences qui l’accompagnent) et optimise le remplissage du L2 (les redondances disparaissent).


Le cache partagé offre également la possibilité d’être dynamiquement alloué par chacun des deux cores, jusqu’à devenir accessible dans son intégralité par un seul des deux cores. Ainsi, cette technique développée spécifiquement pour une implémentation dual core s’avère paradoxalement plus efficace que les caches séparés lorsqu’un seul des deux cores est utilisé, c’est-à-dire pour toutes les applications mono-thread.
Un accès intelligent à la mémoire
En plus des améliorations apportées sur les mémoires caches, Intel a développé de nouvelles techniques visant à améliorer les accès à la mémoire, techniques que le fondeur regroupe sous le terme un peu pompeux de Smart Memory Access.

L’idée consiste à répondre à deux critères visant, encore et toujours, à masquer les latences d’accès à la mémoire :
  • s’assurer qu’une donnée peut être utilisée le plus tôt possible (contrainte du « quand »).
  • s’assurer qu’une donnée est la plus proche possible (sous-entendu dans la hiérarchie mémoire) du noyau d’exécution (contrainte du « où »).
  • La contrainte du « quand » réfère à la façon dont un processeur planifie les opérations de lecture et d’écriture mémoire. En effet, lorsque survient une instruction de lecture mémoire dans le moteur out-of-order, celui-ci ne peut la mener à terme avant que toutes les instructions d’écriture en cours soient complétées. S’il ne le faisait pas, le risque serait de lire une donnée qui n’a pas encore été mise à jour dans la hiérarchie mémoire. Cette contrainte impose donc des états d’attente, et donc un ralentissement.

    Core a donc introduit un mécanisme spéculatif visant à prédire si une instruction de lecture est susceptible de dépendre des écritures en cours, c’est-à-dire si elle peut être traitée sans attendre. Le rôle du prédicateur est ainsi de lever les ambiguïtés, et donne son nom de Memory Disambiguation à la technique utilisée. Outre la réduction des attentes, l’intérêt de la méthode est de réduire les dépendances entre instructions, augmentant par là-même l´efficacité du moteur out-of-order.
    Prefetch hardware
    Répondre à la contrainte du « où », c’est-à-dire s’efforcer de rapprocher les données du noyau d’exécution, est la fonction du sous-système de cache. Afin de lui donner un coup de pouce dans cette tâche, Core a recours au prefetch hardware. Cette technique, rappelons-le, consiste à mettre à profit les moments d’inactivité du bus mémoire afin de précharger code et données de la mémoire vers le sous-système de cache.

    Le prefetch hardware n’est pas une technique inédite, loin s’en faut. Elle a été inaugurée sur le Pentium III Tualatin, mais c’est surtout Netburst qui l’a fondamentalement améliorée. De fait, la différence importante entre la fréquence du processeur et celle du bus rend Netburst particulièrement sensible aux effets néfastes d’un cache miss, augmentant ainsi l’intérêt d’un prefetch performant. Une fois n’est pas coutume, Core hérite ainsi des techniques de prefetch de Netburst, et les améliore quelque peu.

    Plusieurs types de prefetcher équipent Core :

  • Le prefetcher d’instructions précharge les instructions dans le cache L1 d’instructions en se basant sur les résultats de la prédiction de branchement. Chacun des deux cores en possède un.
  • Le prefetcher IP scrute l’historique des lectures afin d’en dégager un schéma, et charger les données ainsi « prévues » dans le cache L1. Chaque core en possède un également.
  • Le prefetcher DCU détecte quant à lui les lectures multiples depuis une même ligne de cache sur une période donnée, et décide le cas échéant de charger la ligne suivante dans le L1. Toujours un par core.
  • Le prefetcher DPL a un fonctionnement proche du DCU, à ceci près qu’il détecte les requêtes sur deux lignes de cache successives (N et N+1), et déclenche le cas échéant la lecture de la ligne N+2 de la mémoire centrale dans le cache L2. Le cache L2 en comprend deux, qui sont partagés de façon dynamique entre les deux cores.
  • Ce qui nous donne un total de pas moins de 8 prefetchers sur un Core 2 Duo.


    Les petits soleils représentent les huit prefetchers du Core 2 Duo.

    Les mécanismes de prefetch hardware se montrent généralement très efficaces, et se traduisent en pratique par une augmentation du taux de succès du sous-système de cache. Hélas, il peut arriver que le prefetch se traduise par l’effet inverse de celui escompté, car si les erreurs sont fréquentes elles tendent à polluer le cache avec des données inutiles, donc réduire son taux de succès. Pour cette raison la plupart des mécanismes de prefetch hardware sont désactivables. Intel préconise même de désactiver le prefetch DCU sur les processeurs destinées à un usage dans un server (en l’occurrence le Woodcrest), son utilisation étant susceptible de réduire la performance dans certaines applications.
    Vos réactions

    Top articles