Où exactement les caches L1, L2 et L3 se trouvent-ils dans l'ordinateur?


32

Où exactement les caches L1, L2 et L3 sont-ils situés dans l'ordinateur?

Je sais, nous utilisons Cache pour augmenter les performances en choisissant DATA et INSTRUCTIONS dans Cache plutôt que dans la mémoire principale.

Voici mes questions

  1. Où se trouve exactement le cache L1? . est sur la puce CPU?
  2. Où se trouve exactement le cache L2?

  3. Où se trouve exactement le cache L3? est sur la carte mère?

Je pense que les derniers processeurs SMP utilisent des caches à 3 niveaux, donc je veux comprendre la hiérarchie au niveau du cache et leur architecture.


1
La hiérarchie exacte varie selon les différents processeurs. Pour connaître la hiérarchie du cache sur votre propre ordinateur, vous pouvez utiliser l'utilitaire CoreInfo.exe de SysInternal ( technet.microsoft.com/en-us/sysinternals/cc835722.aspx )

2
De plus, plus le cache est grand (L3> L2> 1), plus il est éloigné du cœur lui-même (la latence d'accès à L3 est supérieure à L1 par exemple).

Réponses:


48

Commençons par ceci:

Je pense que les derniers processeurs SMP utilisent des caches à 3 niveaux, donc je veux comprendre la hiérarchie au niveau du cache et leur architecture.

Pour comprendre les caches, vous devez savoir certaines choses:

Une CPU a des registres. Les valeurs qui peuvent être directement utilisées. Rien n'est plus rapide.

Cependant, nous ne pouvons pas ajouter de registres infinis à une puce. Ces choses prennent de la place. Si nous agrandissons la puce, elle devient plus chère. Cela est dû en partie au fait que nous avons besoin d'une puce plus grande (plus de silicium), mais aussi parce que le nombre de puces présentant des problèmes augmente.

(Imaginez une plaquette imaginaire de 500 cm 2. J'en ai coupé 10 jetons, chaque jeton de 50 cm 2. L'un d'eux est cassé. Je le jette et il me reste 9 jetons de travail. Maintenant, prenez la même plaquette et je coupe 100 jetons, chacun dix fois plus petit. L'un d'eux s'il est cassé. Je jette le jeton cassé et il me reste 99 jetons de travail. C'est une fraction de la perte que j'aurais autrement subie. Pour compenser le plus gros puces, je devrais demander des prix plus élevés. Plus que le prix du silicium supplémentaire)

C'est l'une des raisons pour lesquelles nous voulons de petites puces abordables.

Cependant, plus le cache est proche du CPU, plus il est accessible rapidement.

Ceci est également facile à expliquer; Les signaux électriques se déplacent près de la vitesse de la lumière. C'est rapide mais toujours une vitesse finie. Le processeur moderne fonctionne avec des horloges GHz. C'est aussi rapide. Si je prends un processeur 4 GHz, un signal électrique peut parcourir environ 7,5 cm par tick d'horloge. C'est 7,5 cm en ligne droite. (Les puces sont tout sauf des connexions directes). En pratique, vous aurez besoin de beaucoup moins que ces 7,5 cm car cela ne laisse pas de temps aux puces pour présenter les données demandées et au signal pour revenir.

En bout de ligne, nous voulons que le cache soit le plus proche possible physiquement. Ce qui signifie de gros jetons.

Ces deux doivent être équilibrés (performance vs coût).

Où se trouvent exactement les caches L1, L2 et L3 dans un ordinateur?

En supposant que le matériel de style PC uniquement (les mainframes sont très différents, y compris dans le rapport performances / coûts);

IBM XT
Celui d'origine de 4,77 MHz: pas de cache. Le CPU accède directement à la mémoire. Une lecture de mémoire suivrait ce modèle:

  • Le CPU place l'adresse qu'il veut lire sur le bus mémoire et affirme le drapeau de lecture
  • La mémoire place les données sur le bus de données.
  • La CPU copie les données du bus de données dans ses registres internes.

80286 (1982)
Toujours pas de cache. L'accès à la mémoire n'était pas un gros problème pour les versions à faible vitesse (6Mhz), mais le modèle plus rapide fonctionnait jusqu'à 20Mhz et devait souvent retarder lors de l'accès à la mémoire.

Vous obtenez alors un scénario comme celui-ci:

  • Le CPU place l'adresse qu'il veut lire sur le bus mémoire et affirme le drapeau de lecture
  • La mémoire commence à placer les données sur le bus de données. Le CPU attend.
  • La mémoire a fini de récupérer les données et elle est maintenant stable sur le bus de données.
  • La CPU copie les données du bus de données dans ses registres internes.

C'est une étape supplémentaire passée à attendre la mémoire. Sur un système moderne qui peut facilement compter 12 étapes, c'est pourquoi nous avons du cache .

80386 : (1985)
Les CPU deviennent plus rapides. À la fois par horloge et en fonctionnant à des vitesses d'horloge plus élevées.
La RAM devient plus rapide, mais pas autant que les CPU.
En conséquence, davantage d'états d'attente sont nécessaires. Certaines cartes mères travaillent autour en ajoutant cache (ce serait 1 er cache de niveau) sur la carte mère.

Une lecture dans la mémoire commence maintenant par une vérification si les données sont déjà dans le cache. Si c'est le cas, il est lu à partir du cache beaucoup plus rapide. Si ce n'est pas la même procédure que celle décrite avec le 80286

80486 : (1989)
Il s'agit du premier processeur de cette génération qui dispose d'un cache sur le processeur.
Il s'agit d'un cache unifié de 8 Ko, ce qui signifie qu'il est utilisé pour les données et les instructions.

À cette époque, il devient courant de mettre 256 Ko de mémoire statique rapide sur la carte mère en tant que cache de 2 e niveau. Ainsi 1 er cache de niveau sur le CPU, 2 e cache de niveau sur la carte mère.

Carte mère 486 avec emplacement CPU et cache de 2e niveau marqué

80586 (1993)
Le 586 ou Pentium-1 utilise un cache de niveau 1 divisé. 8 Ko chacun pour les données et les instructions. Le cache a été divisé afin que les caches de données et d'instructions puissent être réglés individuellement pour leur utilisation spécifique. Vous avez toujours un 1 er cache petit mais très rapide près du CPU, et un 2 ème cache plus grand mais plus lent sur la carte mère. (À une plus grande distance physique).

Dans la même zone Pentium 1, Intel a produit le Pentium Pro («80686»). Selon le modèle, cette puce avait un cache intégré de 256 Ko, 512 Ko ou 1 Mo. C'était aussi beaucoup plus cher, ce qui est facile à expliquer avec l'image suivante.

Image d'un processeur Pentium Pro, modèle de cache de 256 Ko

Notez que la moitié de l'espace dans la puce est utilisée par le cache. Et c'est pour le modèle 256 Ko. Plus de cache était techniquement possible et certains modèles étaient produits avec des caches de 512 Ko et 1 Mo. Le prix du marché pour ces derniers était élevé.

Notez également que cette puce contient deux matrices. Un avec le CPU réel et le 1 er cache, et un second avec 256 Ko de 2 e cache.

Pentium-2

Le pentium 2 est un noyau pentium pro. Pour des raisons d'économie, aucun 2 e cache n'est dans le processeur. Au lieu de cela, ce qui est vendu un CPU nous un PCB avec des puces séparées pour le CPU (et 1 er cache) et 2 ème cache.

Au fur et à mesure que la technologie progresse et que nous commençons à créer des puces avec des composants plus petits, il est financièrement possible de replacer le 2 e cache dans la puce CPU réelle. Cependant, il y a toujours une scission. 1 ère cache très rapide blottie contre le CPU. Avec un 1 er cache par cœur de processeur et un 2 e cache plus grand mais moins rapide à côté du cœur.

Image d'un Pentium 2 'CPU' (avec et sans capot)

Pentium-3
Pentium-4
Cela ne change pas pour le pentium-3 ou le pentium-4.

À cette époque, nous avons atteint une limite pratique sur la vitesse à laquelle nous pouvons synchroniser les processeurs. Un 8086 ou un 80286 n'a pas eu besoin de refroidissement. Un pentium-4 fonctionnant à 3,0 GHz produit tellement de chaleur et utilise autant d'énergie qu'il devient plus pratique de mettre deux CPU distincts sur la carte mère plutôt qu'un rapide.

(Deux processeurs 2,0 GHz utiliseraient moins d'énergie qu'un seul processeur 3,0 GHz identique, mais pourraient faire plus de travail).

Cela pourrait être résolu de trois manières:

  1. Rendez les processeurs plus efficaces pour qu'ils travaillent plus à la même vitesse.
  2. Utiliser plusieurs processeurs
  3. Utilisez plusieurs processeurs dans la même «puce».

1) Est un processus continu. Ce n'est pas nouveau et ça ne s'arrêtera pas.

2) A été fait très tôt (par exemple avec deux cartes mères Pentium-1 et le chipset NX). Jusqu'à présent, c'était la seule option pour construire un PC plus rapide.

3) Nécessite des processeurs où plusieurs «cpu core» sont intégrés dans une seule puce. (Nous avons ensuite appelé ce CPU un CPU dual core pour augmenter la confusion. Merci marketing :))

De nos jours, nous nous référons simplement au CPU comme un «noyau» pour éviter toute confusion.

Vous obtenez maintenant des puces comme le pentium-D (duo), qui est essentiellement deux cœurs de pentium-4 sur la même puce.

Pentium-D précoce (2 noyaux P4)

Rappelez-vous l'image de l'ancien pentium-Pro? Avec l'énorme taille du cache?
Vous voyez les deux grandes zones sur cette image?

Il s'avère que nous pouvons partager ce 2 e cache entre les deux cœurs de processeur. La vitesse chuterait légèrement, mais un 2 e cache partagé de 512 Ko est souvent plus rapide que d'ajouter deux caches indépendants de 2 e niveau de la moitié de la taille.

Ceci est important pour votre question.

Cela signifie que si vous lisez quelque chose à partir d'un cœur de processeur et essayez plus tard de le lire à partir d'un autre cœur qui partage le même cache, vous obtiendrez un accès au cache. Il ne sera pas nécessaire d'accéder à la mémoire.

Étant donné que les programmes migrent entre les processeurs, selon la charge, le nombre de cœurs et le planificateur, vous pouvez gagner des performances supplémentaires en épinglant des programmes qui utilisent les mêmes données sur le même processeur (cache cache sur L1 et inférieur) ou sur les mêmes processeurs qui partager le cache L2 (et ainsi obtenir des échecs sur L1, mais des hits sur les lectures du cache L2).

Ainsi, sur les modèles ultérieurs, vous verrez des caches de niveau 2 partagés.

Image d'un processeur Core2 ouvert

Si vous programmez pour des processeurs modernes, vous avez deux options:

  1. Ne pas déranger. L'OS devrait être capable de planifier des choses. Le planificateur a un impact important sur les performances de l'ordinateur et les gens ont consacré beaucoup d'efforts à l'optimiser. À moins que vous ne fassiez quelque chose de bizarre ou que vous optimisiez pour un modèle spécifique de PC, vous êtes mieux avec l'ordonnanceur par défaut.
  2. Si vous avez besoin de toutes les performances et qu'un matériel plus rapide n'est pas une option, essayez de laisser les bandes de roulement qui accèdent aux mêmes données sur le même cœur ou sur un cœur avec accès à un cache partagé.


Je me rends compte que je n'ai pas encore mentionné le cache L3, mais ils ne sont pas différents. Un cache L3 fonctionne de la même manière. Plus grand que L2, plus lent que L2. Et il est souvent partagé entre les cœurs. S'il est présent, il est beaucoup plus grand que le cache L2 (sinon, il n'aurait pas de sens) et il est souvent partagé avec tous les cœurs.

modernCPUwithL3.png


Quelle belle rédaction!
lukas.pukenis

"mais un deuxième cache partagé de 512 Mo est" je pense que c'est 512 Ko.
lukas.pukenis

une telle excellente réponse! merci pour le partage de l'homme
samsamara

14

Que les caches sont des internes du processeur. Certains sont partagés entre les cœurs, certains sont individuels, cela dépend de la mise en œuvre. Mais tous sont situés sur puce. Quelques détails: Processeur Intel Intel® Core ™ i7, pris ici :

  • Une instruction de 32 Ko et un cache de premier niveau de données de 32 Ko (L1) pour chaque cœur
  • Un cache de second niveau (L2) de 256 Ko pour les instructions / données partagées pour chaque cœur
  • 8 Mo de mémoire partagée de dernier niveau pour les instructions / données (L3), partagée entre tous les cœurs

Photo de la puce du processeur (désolé, je ne connais pas le modèle exact). Vous pouvez voir que le cache occupe une place importante sur la puce:

texte alternatif


1
Si par puce vous entendez une puce en silicone, le dernier niveau de cache peut être hors puce. Par exemple, le zEC12 d'IBM ( en.wikipedia.org/wiki/IBM_zEC12_(microprocessor) ) utilise un module à puces multiples avec six puces de processeur et deux puces de cache partagé avec cache L4. Crystal Well d'Intel fournit également un cache hors puce L4 (également à l'aide d'eDRAM).
Paul A. Clayton

5

Le cache est presque toujours sur puce pour un accès plus rapide. Voici un joli diagramme montrant une puce CPU Intel quad core avec le cache L3 mis en évidence. Lorsque vous regardez des images comme celle d'un processeur, les grandes zones uniformes sont généralement des banques de mémoire sur puce utilisées comme cache.

Nehalem Die (http://www.legitreviews.com/article/824/1/)


5

Ces jours-ci, les caches sont tous sur le processeur. Ils étaient parfois situés sur la carte mère ou sur la carte fille du processeur, mais je ne pense pas qu'il existe de processeurs actuels qui utilisent des caches hors puce.


1
+1 pour la partie de nos jours . Autrefois, c'était différent. (par exemple cache L2 dans la carte mère à l'heure Cyrix / Pentium-1)
Hennes

0

Je ne suis pas sûr du L3, mais L1 / L2 est toujours situé sur le CPU. En termes de hiérarchie, L1 est généralement le cache d'instructions, L2 et L3 sont des caches de données.


L1 peut être un cache partagé (cache d'instructions et de données). Il existe également des CPU avec des données L1 et un cache d'instructions L1. Et le cache L2 n'est pas toujours situé sur le CPU (même L1 n'a pas besoin d'être sur le CPU, mais je ne me souviens que d'un ordinateur où c'était le cas).
Hennes

0

L1 est situé sur la puce CPU, L2 est situé entre le processeur et la mémoire principale, mais il y a un point à savoir que dans certains systèmes L2 est situé sur la puce CPU tandis que dans certains autres systèmes L2 est situé sur la carte mère elle-même, et L3 est constamment situé sur la puce de la carte principale.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.