Pourquoi la taille du cache L1 n'a-t-elle pas beaucoup augmenté au cours des 20 dernières années?

35

L' Intel i486 possède 8 Ko de cache L1. L' Intel Nehalem dispose d'un cache d'instructions L1 de 32 Ko et d'un cache de données L1 de 32 Ko par cœur.

La quantité de cache L1 n'a pas augmenté à peu près à la vitesse à laquelle le taux d'horloge a augmenté.

Pourquoi pas?

onze81
la source
Vous comparez des pommes à des oranges. Les taux d'horloge ont augmenté, mais il n'y a pas de corrélation avec le besoin de plus de cache. Ce n'est pas parce que vous pouvez faire quelque chose plus rapidement que vous bénéficiez d'un plus grand seau.
Keltari
L'excès de cache et la surcharge de gestion peuvent ralentir un système. Ils ont trouvé le bon endroit et il le restera.
Fiasco Labs

Réponses:

17

30K de texte Wikipédia ne sont pas aussi utiles qu'une explication de la raison pour laquelle un cache trop volumineux est moins optimal. Lorsque le cache devient trop volumineux, la latence pour trouver un élément dans le cache (la factorisation dans le cache manque) commence à approcher la latence de recherche de l'élément dans la mémoire principale. Je ne sais pas dans quelles proportions les concepteurs de CPU visent, mais je pense que c'est quelque chose d'analogue à la directive 80-20: vous aimeriez trouver vos données les plus courantes dans le cache 80% du temps, et les 20 autres % du temps, vous devrez aller dans la mémoire principale pour le trouver. (ou quelles que soient les proportions prévues par les concepteurs de CPU.)

EDIT: Je suis sûr que ce n'est pas près de 80% / 20%, alors remplacez X et 1-X. :)

JMD
la source
6
"Lorsque le cache devient trop volumineux, la latence pour trouver un élément dans le cache (la factorisation dans le cache échoue) commence à approcher la latence de la recherche de l'élément dans la mémoire principale." Es-tu sûr de ça? Par exemple, doubler la quantité de RAM installée n'augmentera certainement pas sa latence, pourquoi serait-ce vrai pour le cache? Et aussi, pourquoi le cache L2 grossirait-il avec de nouveaux processeurs, si c'est un problème? Je ne suis pas un expert dans ce domaine, je veux vraiment savoir :)
sYnfo
2
J'avais préparé une longue et longue description de la mise en cache dans les logiciels et mesuré quand votre cache était devenu trop grand et devait être vidé / reconstruit, mais j'ai alors décidé qu'il serait préférable d'admettre que je ne suis pas un concepteur de matériel. :) Dans les deux cas, je soupçonne que la réponse peut être résumée par la loi des rendements décroissants. C'est à dire plus n'est pas toujours mieux.
JMD
3
D'après ma longue histoire de bidouiller du matériel à de faibles niveaux, mais n'étant pas réellement un concepteur, je dirais que la latence semble être liée au nombre de façons dont le cache est associatif, pas à la taille. Je suppose que les transistors supplémentaires qui iraient dans le cache se sont révélés plus efficaces ailleurs pour les performances globales.
Brian Knoblauch
1
@JMD Je serais néanmoins intéressé par cette description;) Bien que les commentaires ne soient probablement pas le meilleur endroit pour cela, c'est vrai. @Brian Donc, si je comprends bien, ils ont décidé de mettre moins de transistors dans le cache L1 et en même temps beaucoup plus dans L2, ce qui est beaucoup plus lent? Veuillez ne pas vous offenser, je suis juste curieux :)
sYnfo
10

Un facteur est que les récupérations L1 commencent avant que les traductions TLB ne soient terminées afin de diminuer la latence. Avec un cache suffisamment petit et suffisamment élevé, les bits d'index du cache seront les mêmes entre les adresses virtuelles et physiques. Cela diminue probablement le coût de maintien de la cohérence de la mémoire avec un cache virtuellement indexé et balisé physiquement.

AJW
la source
1
réponse la plus intéressante :)
GameDeveloper
1
Je crois que c'est la raison, mais permettez-moi de donner le nombre. La taille de page sur l'architecture x86 est de 4096 octets. Le cache souhaite choisir le compartiment de cache dans lequel rechercher l'entrée de la ligne de cache (64 octets) avant la fin de la traduction de la page. Il serait coûteux de devoir choisir entre trop d'entrées dans un compartiment, de sorte que chaque compartiment ne contient que 8 entrées. Par conséquent, au cours des dix dernières années, tous les processeurs x86 coûteux ont exactement 32 768 octets (512 lignes de cache) dans leur cache de données L1.
b_jonas
Comme cela est si difficile à augmenter, les processeurs ajoutent un niveau intermédiaire de cache, nous avons donc maintenant des caches L2 et L3 séparés. En outre, le cache de code L1 et le cache de données L1 sont séparés, car le processeur sait s'il accède au code ou aux données.
b_jonas
8

La taille du cache est influencée par de nombreux facteurs:

  1. Vitesse des signaux électriques (devrait être sinon la vitesse de la lumière, quelque chose du même ordre de grandeur):

    • 300 mètres en une microseconde.
    • 30 centimètres en une nanoseconde.
  2. Coût économique (les circuits à différents niveaux de cache peuvent être différents et certaines tailles de cache peuvent ne pas être valables)

    • Doubler la taille du cache ne double pas les performances (même si la physique a permis à cette taille de fonctionner) pour les petites tailles, doubler donne bien plus que doubler les performances, pour les grandes tailles, doubler la taille du cache ne donne presque pas de performances supplémentaires.
    • Sur wikipedia, vous pouvez trouver un graphique montrant par exemple à quel point indigne rend les caches plus grands que 1 Mo (en fait, des caches plus gros existent mais vous devez tenir compte du fait que ce sont des cœurs multiprocesseurs.)
    • Pour les caches L1, il devrait y avoir d'autres graphiques (que les fournisseurs ne montrent pas) qui rendent la taille de 64 Ko pratique.

Si la taille du cache L1 n'a pas changé après 64 Ko, c'est parce que cela ne valait plus. Notez également qu'il existe désormais une plus grande "culture" à propos du cache et que de nombreux programmeurs écrivent du code "compatible avec le cache" et / ou utilisent des instructions prefetech pour réduire la latence.

J'ai essayé une fois de créer un programme simple qui accédait à des emplacements aléatoires dans un tableau (de plusieurs mégaoctets): ce programme a presque gelé l'ordinateur parce que pour chaque lecture aléatoire, une page entière a été déplacée de la RAM vers le cache et puisque cela a été fait très souvent aussi simple que cela programme drainait toute la bande passante, laissant très peu de ressources pour le système d'exploitation.

Développeur de jeu
la source
6

Je pense que cela peut se résumer simplement en déclarant que plus le cache est grand, plus l'accès sera lent. Ainsi, un cache plus important n'aide pas du tout car un cache est conçu pour réduire la communication lente du bus avec la RAM.

Étant donné que la vitesse du processeur a augmenté rapidement, le cache de même taille doit fonctionner de plus en plus vite pour pouvoir le suivre. Ainsi, les caches peuvent être nettement meilleurs (en termes de vitesse) mais pas en termes de stockage.

(Je suis un logiciel, donc j'espère que ce n'est pas vraiment mal)

Andrew Flanagan
la source
3

Depuis le cache L1 :

Le cache de niveau 1, ou cache principal, se trouve sur le processeur et est utilisé pour le stockage temporaire des instructions et des données organisées en blocs de 32 octets. Le cache principal est la forme de stockage la plus rapide. Parce qu'il est intégré à la puce avec une interface à état d'attente nul (retard) vers l'unité d'exécution du processeur, sa taille est limitée .

SRAM utilise deux transistors par bit et peut contenir des données sans assistance externe, tant que le circuit est alimenté. Cela contraste avec la RAM dynamique (DRAM), qui doit être actualisée plusieurs fois par seconde afin de conserver son contenu de données.

Le processeur P55 MMX d'Intel, lancé au début de 1997, était remarquable pour l'augmentation de la taille de son cache de niveau 1 à 32 Ko. Les puces AMD K6 et Cyrix M2 lancées plus tard cette année-là ont encore augmenté la mise en fournissant des caches de niveau 1 de 64 Ko. 64 Ko est resté la taille de cache L1 standard, bien que divers processeurs multicœurs puissent l'utiliser différemment.

EDIT: Veuillez noter que cette réponse date de 2009 et que les processeurs ont énormément évolué au cours des 10 dernières années. Si vous êtes arrivé à ce poste, ne prenez pas trop au sérieux toutes nos réponses ici.

harrymc
la source
Une cellule SRAM typique est composée de six MOSFET. Chaque bit d'une mémoire SRAM est stocké sur quatre transistors (M1, M2, M3, M4) qui forment deux inverseurs à couplage croisé. Source Second Source
lukecampbell
Ceci est juste une description de la situation et n'explique rien sur pourquoi.
Eonil
@Eonil - Nous ne pourrions pas fournir la réponse «pourquoi» si nous le voulions. Cependant, la diminution des retours sur la performance est une explication raisonnable viable. Lorsque la question a été écrite il y a près d'une décennie, il était beaucoup plus coûteux d'augmenter la taille sans inclure un impact sur les performances. Cette réponse a tenté à tout le moins de répondre à la question voulue qui a été posée.
Ramhound
-4

En fait, la taille du cache L1 est le plus gros goulot d'étranglement pour la vitesse dans les ordinateurs modernes. Les tailles de cache L1 pathétiquement minuscules peuvent être le point idéal pour le prix, mais pas les performances. Le cache L1 est accessible à des fréquences GHz, identiques aux opérations du processeur, contrairement à l'accès RAM 400x plus lent. Il est coûteux et difficile à mettre en œuvre dans la conception bidimensionnelle actuelle, mais il est techniquement faisable, et la première entreprise qui le fera avec succès, aura des ordinateurs 100 fois plus rapides et fonctionnera toujours cool, ce qui produirait des innovations majeures dans de nombreux actuellement accessibles uniquement via des configurations ASIC / FPGA coûteuses et difficiles à programmer. Certains de ces problèmes sont liés aux problèmes de propriété intellectuelle / IP et à la cupidité des entreprises qui s'étend sur des décennies, où un cadre d'ingénieurs chétifs et inefficaces sont les seuls à avoir accès aux rouages ​​internes, et à qui on donne principalement l'ordre de marcher pour évincer les bêtises protectionnistes obscures et rentables. Une recherche trop privatisée mène toujours à une telle stagnation technologique ou étranglement (comme nous l'avons vu dans l'aérospatiale et l'automobile par les grands fabricants et bientôt la pharma). Une réglementation open source et plus sensible des brevets et des secrets commerciaux bénéficiant aux inventeurs et au public (plutôt qu'aux chefs d'entreprise et aux actionnaires) aiderait beaucoup ici. Cela devrait être une évidence pour le développement de créer des caches L1 beaucoup plus grandes et cela aurait dû et aurait pu être développé il y a des décennies. Nous serions beaucoup plus avancés dans les ordinateurs et dans de nombreux domaines scientifiques en les utilisant si nous en avions. et qui reçoivent pour la plupart des ordres de marche pour évincer les bêtises protectionnistes obscures et rentables. Une recherche trop privatisée mène toujours à une telle stagnation technologique ou étranglement (comme nous l'avons vu dans l'aérospatiale et l'automobile par les grands fabricants et bientôt la pharma). Une réglementation open source et plus sensible des brevets et des secrets commerciaux bénéficiant aux inventeurs et au public (plutôt qu'aux chefs d'entreprise et aux actionnaires) aiderait beaucoup ici. Cela devrait être une évidence pour le développement de créer des caches L1 beaucoup plus grandes et cela aurait dû et aurait pu être développé il y a des décennies. Nous serions beaucoup plus avancés dans les ordinateurs et dans de nombreux domaines scientifiques en les utilisant si nous en avions. et qui reçoivent pour la plupart des ordres de marche pour évincer les bêtises protectionnistes obscures et rentables. Une recherche trop privatisée mène toujours à une telle stagnation technologique ou étranglement (comme nous l'avons vu dans l'aérospatiale et l'automobile par les grands fabricants et bientôt la pharma). Une réglementation open source et plus sensible des brevets et des secrets commerciaux bénéficiant aux inventeurs et au public (plutôt qu'aux chefs d'entreprise et aux actionnaires) aiderait beaucoup ici. Cela devrait être une évidence pour le développement de créer des caches L1 beaucoup plus grandes et cela aurait dû et aurait pu être développé il y a des décennies. Nous serions beaucoup plus avancés dans les ordinateurs et dans de nombreux domaines scientifiques en les utilisant si nous en avions. Une recherche trop privatisée mène toujours à une telle stagnation technologique ou étranglement (comme nous l'avons vu dans l'aérospatiale et l'automobile par les grands fabricants et bientôt la pharma). Une réglementation open source et plus sensible des brevets et des secrets commerciaux bénéficiant aux inventeurs et au public (plutôt qu'aux chefs d'entreprise et aux actionnaires) aiderait beaucoup ici. Cela devrait être une évidence pour le développement de créer des caches L1 beaucoup plus grandes et cela aurait dû et aurait pu être développé il y a des décennies. Nous serions beaucoup plus avancés dans les ordinateurs et dans de nombreux domaines scientifiques en les utilisant si nous en avions. Une recherche trop privatisée mène toujours à une telle stagnation technologique ou étranglement (comme nous l'avons vu dans l'aérospatiale et l'automobile par les grands fabricants et bientôt la pharma). Une réglementation open source et plus sensible des brevets et des secrets commerciaux bénéficiant aux inventeurs et au public (plutôt qu'aux chefs d'entreprise et aux actionnaires) aiderait beaucoup ici. Cela devrait être une évidence pour le développement de créer des caches L1 beaucoup plus grandes et cela aurait dû et aurait pu être développé il y a des décennies. Nous serions beaucoup plus avancés dans les ordinateurs et dans de nombreux domaines scientifiques en les utilisant si nous en avions. Cela devrait être une évidence pour le développement de créer des caches L1 beaucoup plus grandes et cela aurait dû et aurait pu être développé il y a des décennies. Nous serions beaucoup plus avancés dans les ordinateurs et dans de nombreux domaines scientifiques en les utilisant si nous en avions. Cela devrait être une évidence pour le développement de créer des caches L1 beaucoup plus grandes et cela aurait dû et aurait pu être développé il y a des décennies. Nous serions beaucoup plus avancés dans les ordinateurs et dans de nombreux domaines scientifiques en les utilisant si nous en avions.

Zack Barkley
la source