web-dev-qa-db-fra.com

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

Qu'est-ce qui rend la mémoire cache du processeur 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 en avoir plus.

59
ConditionRacer

Dans le cas d'un cache CPU, c'est plus rapide car il est sur le même dé que le processeur. En d'autres termes, les données demandées n'ont pas à être transférées au processeur; c'est déjà là.

Dans le cas du cache sur un disque dur, c'est plus rapide car il est en mémoire SSD, et pas encore sur les plateaux rotatifs.

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

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

La localité est une façon élégante de dire des données qui sont "rapprochées", dans le temps ou dans l'espace. La mise en cache avec une mémoire plus petite, plus rapide (mais généralement plus chère) fonctionne car, en règle générale, une quantité relativement faible des données globales est celle à laquelle vous accédez le plus souvent.

Lectures complémentaires
Cache (Informatique) sur Wikipedia

116
Robert Harvey

Il est plus rapide car à la fois plus proche et parce qu'il s'agit de SRAM et non de DRAM.

La SRAM est et peut être considérablement plus rapide que la DRAM, les valeurs sont conservées statiquement (le S dans S RAM) afin qu'elles n'aient pas à être actualisées, ce qui enlève cycles. La DRAM est dynamique, comme de minuscules piles rechargeables, vous devez recharger régulièrement celles-ci pour qu'elles ne se déchargent pas et ne deviennent pas des zéros. Cela vole le temps de cycle en plus de la façon dont vous devez accéder aux bits, etc.

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

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

33
old_timer

Une chose qui doit être mentionnée explicitement est l'impact de la vitesse de la lumière. Dans cette vidéoGrace Hopper montre un morceau de fil d'environ un pied de long, c'est-à-dire jusqu'où un signal électrique peut voyager 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 sur les vitesses d'accès à la mémoire. C'est en grande partie pourquoi être proche du processeur (comme le cache L1), mémoire pour être plus rapide.

EDIT * en fait, jusqu'où la lumière peut voyager dans le vide, la distance à travers le cuivre/silicium est moindre.

22
Matthew Finlay

Il y a beaucoup de bons points soulevés dans les autres réponses, mais un facteur semble manquer: la latence de décodage des adresses.

Ce qui suit est une simplification excessive du fonctionnement du décodage d'adresse 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 est appelée Sélection d'adresse de colonne (nous ignorerons les adresses de ligne pour l'instant). La puce mémoire doit maintenant activer la colonne demandée, ce qu'elle fait en envoyant l'adresse vers le bas d'une cascade de portes logiques pour effectuer une seule écriture qui se connecte à toutes les cellules de la colonne. Selon la façon dont il est implémenté, il y aura un certain délai pour chaque bit d'adresse jusqu'à ce que le résultat sorte de l'autre côté. C'est ce qu'on appelle la latence CAS de la mémoire. Parce que ces bits doivent être examinés séquentiellement, ce processus prend beaucoup plus de temps qu'un cycle de processeur (qui n'a généralement que quelques transistors en séquence à attendre). 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 de mémoire typique prendra probablement l'ordre de 5ns (IIRC - cela fait un moment que je n'ai pas regardé les timings), ce qui est plus d'un ordre de grandeur plus lent qu'un cycle de processeur.

Heureusement, nous divisons les adresses en trois parties (colonne, ligne et banque), ce qui permet à chaque partie d'être plus petite et de traiter ces parties simultanément, sinon la latence serait encore plus longue.

Le cache du processeur, cependant, n'a pas ce problème. Non seulement il est beaucoup plus petit, donc la traduction d'adresse est un travail plus facile, il n'a en fait pas besoin de traduire plus qu'un petit fragment de l'adresse (dans certaines variantes, rien du tout) car il est associatif. Cela signifie qu'à côté de chaque ligne de mémoire en cache, il y a 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 voir si elles ont la ligne de mémoire particulière que nous voulons simultanément, puis la seule (espérons-le) qui a les bonnes données la videra sur un bus qui connecte toute la mémoire au cœur du processeur principal. Cela se produit en moins d'un cycle, car c'est beaucoup plus simple.

5
Jules

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

Un bit qui a été omis et qui vient d'être mentionné dans le commentaire de Darkhogg: les caches plus grandes ont de meilleurs taux de réussite mais une latence plus longue. Plusieurs niveaux de cache ont également été introduits pour résoudre ce compromis.

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

D'après les réponses, il me semble qu'un point à souligner est: la logique qui effectue 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 aujourd'hui). Cela nécessite des portes et de la logique. Donc, même si nous excluons le coût et l'espace de dé

Si quelqu'un tentait d'implémenter un cache L1 ridiculement grand, la logique qui effectue toutes les opérations requises pour une lecture de cache deviendrait également importante. À un certain point, le retard de propagation à travers toute cette logique serait trop long et les opérations qui n'avaient pris qu'un seul cycle d'horloge auparavant devraient être divisées en plusieurs cycles d'horloge. Cela augmentera la latence.

5
Lorenzo Dematté