Pourquoi la mémoire cache du processeur est-elle si rapide?


58

Qu'est-ce qui rend la mémoire cache du CPU beaucoup plus rapide que la mémoire principale? Je peux voir certains avantages dans un système de cache à plusieurs niveaux. Il est logique qu'un cache plus petit soit plus rapide à rechercher. Mais il doit y avoir plus que cela.


2
Qu'entendez-vous par mémoire principale ?
Marcocs

1
@marcocs édité pour plus de clarté. Je parle de la mémoire cache du processeur et de la mémoire principale du système, c’est-à-dire des variateurs amovibles sur la plupart des cartes mères.
ConditionRacer


2
@ratchetfreak Uh ... OP demande assez clairement une cause immédiate, pas une cause finale.
Kyle Strand

1
Wow, je ne pensais pas que j'utiliserais jamais mon diplôme d'ingénieur en informatique. La réponse acceptée n'est pas vraiment une réponse. Cela est dû au fait que le cache du processeur fonctionne à une fréquence d'horloge beaucoup plus élevée (fréquence d'horloge du processeur, autour de 4 GHz), tandis que la mémoire principale fonctionne à la fréquence d'horloge du bus (environ 1600 MHz). De plus, le cache de la CPU peut lire 4 cycles d'horloge, mais la mémoire vive du système peut prendre 100 cycles d'horloge système. En outre, la mémoire vive du système est en conflit avec d'autres périphériques tels que le disque ou le réseau, alors que le cache de la CPU est dédié. Plus le fil est long, plus la fréquence d'horloge à laquelle il peut fonctionner est lente. tinyurl.com/zkdsstd
Chloe

Réponses:


115

Dans le cas d'un cache de processeur, il est plus rapide car il se trouve sur le même dé que le processeur. En d'autres termes, les données demandées ne doivent pas nécessairement être transmises au processeur; c'est déjà là.

Dans le cas du cache sur un disque dur, le processus est plus rapide car il se trouve dans la mémoire SSD et non sur les plateaux en rotation.

Dans le cas du cache sur un site Web, le processus est plus rapide car les données ont déjà été extraites de la base de données (qui, dans certains cas, peuvent être situées n'importe où dans le monde).

Il s’agit donc principalement de localité . Le cache élimine l' étape de transfert de données .

La localisation est une manière élégante de dire des données "proches", dans le temps ou dans l'espace. La mise en cache avec une mémoire plus petite, plus rapide (mais généralement plus coûteuse) fonctionne, car une quantité relativement faible de données globales correspond aux données auxquelles on accède le plus souvent.

Cache de lecture supplémentaire
(informatique) sur Wikipedia


29
Je pense que c'est une bonne réponse. Toutefois, il peut être intéressant d’ajouter qu’il existe également une hiérarchie des coûts pour le cache: le stockage réseau est meilleur marché qu'un disque dur local, moins cher que la RAM, beaucoup moins cher que le cache sur CPU. Sans cette solution, nous créerions simplement des processeurs dotés de 120 Go de mémoire intégrée, et nous en aurions terminé.
Charles E. Grant

1
@ConditionRacer: Les mêmes raisons. La L1 est plus rapide, mais plus chère, donc elle vous donne un peu de L1 très chère, et plus de la moins chère, mais plus lente. Voir aussi stackoverflow.com/questions/3699582/…
Robert Harvey

9
"Pourquoi la L1 est-elle plus rapide que la L2" - la question devient un sujet de discussion pour Programmers.SE, et devrait être posée sur Electronics.SE
mattnz

5
@ConditionRacer IIRC, il s'agit de la technologie utilisée pour implémenter la mémoire. Je pense que L2 est une mémoire DRAM intégrée, tandis que L1 est une mémoire SRAM ou quelque chose du genre. beaucoup plus cher, mais beaucoup plus rapide. Cela fait plus de dix ans que je travaille dans la conception de processeurs…
Donal Fellows

4
@ CharlesE.Grant: si la hiérarchie des coûts est un bon exemple, il existe une autre raison pour laquelle nous n’avons pas 120 Go de cache sur puce: l’adressage de mémoires plus volumineuses nécessite des adresses plus volumineuses, donc des instructions plus volumineuses ou des cycles de processeur plus longs. Donc, pour être le plus rapide, le nombre de registres doit rester relativement petit. Bien sûr, on pourrait avoir de la mémoire sur puce en plus des registres, mais le niveau le plus rapide doit rester petit, sinon il ne serait plus aussi rapide.
vsz

33

Il est plus rapide parce qu’il est plus proche et qu’il s’agit d’une mémoire SRAM et non de DRAM.

SRAM est et peut être considérablement plus rapide que la DRAM les valeurs sont conservées statiquement (S en S RAM) de sorte qu'ils ne doivent pas être rafraîchi qui enlève les cycles. La DRAM est dynamique, comme des piles rechargeables minuscules, vous devez les recharger régulièrement pour ne pas les épuiser et en faire des zéros. Cela vole le temps de cycle en plus de la façon dont vous devez accéder aux bits, etc.

Être sur le même dé que ou plus près du processeur réduit l'aller-retour, L1 et L2 sont plus rapides que la DRAM du point de vue de l'accès.

La mémoire SRAM est plus rapide d'accès que la DRAM prise de pommes en pommes, et les caches sont généralement sur puce, plus proches ou sur des bus plus rapides que la DRAM, ce qui accélère également le temps d'accès.


1
La mémoire SRAM consomme également plus d'énergie par bit. Vous devez donc y ajouter des radiateurs et tout ce qui est alimenté par batterie en souffrirait.
9000

1
Sans oublier le fait que rendre SRAM plus grand le rend beaucoup plus lent.
Darkhogg

accepté, plus de puissance, et plus lent par rapport à d'autres Sram. Je pense que c'est 4 transistors par bit pour sram et 1 par bit pour dram. dram s'appuie sur la capacité du fet, où sram s'appuie sur une bonne logique à l'ancienne. vous devez donc alimenter tous ces transistors à tout moment et ne pas simplement pomper la charge périodiquement.
old_timer

4
SRAM dans les caches est généralement 6T, pas 4T. En outre, SRAM (certainement la variante 6T) est plus économe en énergie. La puissance réelle de la DRAM est le cycle de rafraîchissement, et la SRAM n’en a tout simplement pas besoin. Les transistors SRAM consomment de l'énergie lors de la commutation, le condensateur DRAM fuit tout le temps. Si vous remplacez le bouchon qui fuit de la mémoire DRAM, vous vous retrouvez avec une mémoire EEPROM, mais ce n'est pas rapide: s'il est difficile pour la charge de s'échapper, il est également difficile de la retirer normalement.
MSalters

@dwelch Les FET CMOS ne consomment pas d'énergie s'ils sont à l'état ouvert ou fermé. Par conséquent, l'argument relatif à la consommation d'énergie n'est pas valide. De plus, c'est la commutation logique CMOS, qui fait que les processeurs consomment la plus grande partie de leur énergie - les pics de courant à l'état intermédiaire (non-1 et non-0), la situation est donc inverse de ce que vous dites :)
Ruslan

21

Une chose à mentionner explicitement est l’impact de la vitesse de la lumière. Dans cette vidéo, Grace Hopper montre un fil de fer d'environ un pied de long, qui représente la distance parcourue par un signal électrique en une nanoseconde *. Si un processeur fonctionne à 3 GHz, cela implique une distance de 4 "par cycle d'horloge. Il s'agit d'une limite physique stricte pour les vitesses d'accès à la mémoire. C'est une des raisons pour lesquelles être proche du processeur (comme le cache L1) permet la mémoire pour être plus rapide.

EDIT * La distance parcourue cuivre / silicium est inférieure à la distance parcourue par la lumière dans le vide.


2
Limite stricte pour le cuivre. Ceci est un bon point cependant, je n’ai pas considéré à quel point les processeurs modernes sont ridiculement rapides.
ConditionRacer

@ConditionRacer Je viens d'ajouter une correction, 11,8 pouces est léger dans le vide.
Matthew Finlay

2
Vous devez diviser par deux ce nombre, car vous avez besoin d'un aller-retour pour récupérer de la mémoire. C'est donc juste 5 cm et non 10 cm par cycle de latence dans le vide .
CodesInChaos

2
La vitesse de la lumière explique pourquoi l’horloge principale du bus de la mémoire a cessé de s’accélérer il ya quelques années (2000?) Ce n’est pas un effet direct - c’est que les signaux logiques CMOS ne sont plus des ondes carrées parfaites sur les fréquences de bus - mais c montre en évidence dans le calcul.
Zwol

5

D'autres réponses couvraient déjà tous les bits pertinents: localité (et le coût de transfert de données associé, largeur de bus et horloge, etc.); vitesse de la lumière (encore une fois associée aux coûts de transfert, à la largeur et au débit du bus); technologie de mémoire différente (SRAM vs. DRAM). Tout cela à la lumière de l’ équilibre coût / performance .

Un commentaire qui a été laissé de côté et qui vient d’être mentionné dans le commentaire de Darkhogg: les caches plus volumineux ont un meilleur taux de réussite, mais une latence plus longue. Plusieurs niveaux de cache ont également été introduits pour remédier à ce problème.

Il y a une excellente question et réponse sur ce point sur l' électronique SE

D'après les réponses, il me semble qu'un point à souligner est le suivant: la logique qui exécute toutes les opérations requises pour une lecture de cache n'est pas si simple (surtout si le cache est associatif, comme la plupart des caches actuels). Cela nécessite des portes et de la logique. Donc, même si nous excluons les coûts et mourons de l'espace

Si quelqu'un essayait d'implémenter un cache L1 ridiculement volumineux, la logique qui effectue toutes les opérations requises pour une lecture de cache deviendrait également volumineuse. À un moment donné, le délai de propagation dans toute cette logique serait trop long et les opérations qui n'avaient pris qu'un seul cycle d'horloge auparavant devraient être scindées en plusieurs cycles d'horloge. Cela augmentera la latence.


5

Les autres réponses soulèvent de nombreux points positifs, mais il manque un facteur: la latence de décodage d'adresse.

Ce qui suit est une vaste simplification excessive du fonctionnement du décodage d’adresses mémoire, mais il donne une bonne idée de la raison pour laquelle les grandes puces DRAM sont généralement assez lentes.

Lorsque le processeur doit accéder à la mémoire, il envoie une commande à la puce de mémoire pour sélectionner le mot spécifique qu'il souhaite utiliser. Cette commande s'appelle une sélection d'adresse de colonne (nous ignorerons les adresses de ligne pour l'instant). La puce de mémoire doit maintenant activer la colonne demandée, ce qu'elle fait en envoyant l'adresse via une cascade de portes logiques pour créer une écriture unique qui se connecte à toutes les cellules de la colonne. Selon la manière dont elle est mise en œuvre, il y aura un certain délai pour chaque bit d'adresse jusqu'à ce que le résultat apparaisse à l'autre bout. C'est ce qu'on appelle la latence CAS de la mémoire. Étant donné que ces bits doivent être examinés de manière séquentielle, ce processus prend beaucoup plus de temps qu'un cycle de processeur (qui n'a généralement que quelques transistors en attente). Cela prend également beaucoup plus de temps qu'un cycle de bus (qui est généralement quelques fois plus lent qu'un cycle de processeur). Une commande CAS sur une puce mémoire typique risque de prendre de l'ordre de 5 ns (IIRC - cela fait un moment que j'ai examiné les timings), ce qui est plus lent d'un ordre de grandeur qu'un cycle de processeur.

Heureusement, nous divisons les adresses en trois parties (colonne, ligne et banque), ce qui permet de réduire la taille de chaque partie et de les traiter simultanément, sans quoi le temps de latence serait encore plus long.

Le cache du processeur, cependant, n'a pas ce problème. Non seulement elle est beaucoup plus petite, donc la traduction d'adresse est un travail plus facile, elle n'a en fait besoin de traduire qu'un petit fragment de l'adresse (dans certaines variantes, aucune de celle-ci), car elle est associative. Cela signifie que, à côté de chaque ligne de mémoire en cache, il existe des cellules de mémoire supplémentaires qui stockent une partie (ou la totalité) de l'adresse. Évidemment, cela rend le cache encore plus cher, mais cela signifie que toutes les cellules peuvent être interrogées pour savoir si elles ont simultanément la ligne de mémoire que nous voulons, puis le seul (avec l'espoir) qui possède les bonnes données le videra. sur un bus qui relie la totalité de la mémoire au cœur du processeur principal. Cela se produit en moins d’un cycle, car c’est beaucoup plus simple.


-2

L'une des philosophies que j'ai étudiées était le mouvement matériel obtenir-maximum-débit-dans-minimum- lorsque nous parlons de toute mémoire à base de cache, qu'il s'agisse de cache CPU, cache cache ou cache mémoire. La motivation de base est atteinte lorsque le mouvement matériel nécessaire pour extraire / lire / écrire des données est minimal ou inexistant et que l'opération est effectuée plus rapidement.

Les données sont transférées du disque -> mémoire principale (RAM) (stockage temporaire) -> cache CPU (stockage temporaire plus petit à proximité de la CPU pour les données fréquemment consultées) -> CPU (traitement).

Le cache de la CPU est un espace mémoire plus petit et plus rapide qui stocke des copies des données à partir des emplacements de mémoire principale les plus récemment utilisés.

Le cache de mémoire tampon est une zone de mémoire principale dans laquelle sont stockées des copies des données des derniers emplacements de disque utilisés.

Le cache du navigateur est un répertoire ou un espace similaire qui stocke des copies des données des sites Web les plus récemment visités par les utilisateurs.

Référence: Fonctionnement de la mémoire informatique


"La philosophie des systèmes d'exploitation est ..." - s'agit-il seulement de votre opinion ou pouvez-vous la confirmer?
moucher

A été enseigné à ce sujet lors de l'étude d'Unix par Maurice Bach. Malheureusement, pas de documentation à l'appui. Édité ..
roshan4074

5
howstuffworks est notoirement peu fiable pour obtenir des informations techniques fiables. Ils sont bien pour les simplifications grossières que Joe et Jane en moyenne peuvent comprendre, mais c'est à peu près tout.
Jwenting
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.