52 votes

Cache mémoire L1 sur processeurs Intel x86

Je suis en train de profil et optimiser les algorithmes et j'aimerais comprendre l'impact spécifique des caches sur les différents processeurs. Pour les récents processeurs Intel x 86 (p. ex. Q9300), il est très difficile de trouver des informations détaillées concernant le cache de la structure. En particulier, la plupart des sites web (y compris Intel.com) qui postent des spécifications du processeur ne comportent pas de référence pour le cache L1. Est-ce parce que le cache L1 n'existe pas ou est ces informations pour quelque raison, considéré comme sans importance? Existe-il des articles ou des discussions à propos de l'élimination de la cache L1?

[modifier] Après l'exécution de divers tests et des programmes de diagnostic (surtout ceux qui sont abordés dans les réponses ci-dessous), j'ai conclu que mon Q9300 semble avoir un 32 KO cache de données L1. Je n'ai toujours pas trouvé une explication claire des raisons pour lesquelles ce renseignement est si difficile à trouver. Mon hypothèse de travail est que les détails de la mise en cache L1 sont maintenant traités comme des secrets commerciaux par Intel.

67voto

Norman Ramsey Points 115730

Il est presque impossible de trouver les specs Intel caches. Lorsque j'ai été l'enseignement d'une classe sur les caches de l'année dernière, j'ai demandé à des amis à l'intérieur de Intel (dans le compilateur groupe) et ils ne pouvaient pas trouver les spécifications.

Mais attendez!!! Jed, bénisse son âme, nous dit que sur les systèmes Linux, que l'on peut extraire beaucoup d'informations à partir du noyau:

grep . /sys/devices/system/cpu/cpu0/cache/index*/*

Cela vous donnera l'associativité et taille de l'ensemble, et un tas d'autres informations (mais pas de latence). Par exemple, j'ai appris que, bien que AMD annonce de leur 128 ko de cache L1, mon AMD machine a une fraction de I et D cache de 64 ko.


Deux suggestions qui sont maintenant pour la plupart obsolètes grâce à Sam:

  • AMD publie beaucoup plus d'informations à propos de ses caches, de sorte que vous pouvez au moins obtenu quelques informations sur un moderne cache. Par exemple, l'année dernière, AMD L1 caches livrés deux mots par cycle (période de pointe).

  • L'outil open-source valgrind a toutes sortes de cache modèles à l'intérieur, et il est précieux pour le profilage et la compréhension comportement du cache. Il est livré avec un très bel outil de visualisation kcachegrind qui fait partie de KDE SDK.

Comme la base de données: en T3 2008 une ligne de cache de 64 octets, le cache L1 est à 2 voies associatives et de temps de latence est de 1/2 cycle, le cache L2 est 16 associative et le temps de latence est d'environ 10 cycles. (Toutes les données sont d'AMD, mais des collègues de confiance me dire que Intel modèles sont similaires. Jed technique montre un split I et D cache L1, 8-voie associative, 32 KO chacun.)

31voto

RocketRoy Points 444

Cette Intel Manuel: Intel® 64 et IA-32 Optimisation des Architectures Manuel a une bonne discussion de cache considérations.

enter image description here

Page 46, Section 2.2.5.1 Intel® 64 et IA-32 Optimisation des Architectures Manuel

Même MicroSlop est de réveiller le besoin de plus d'outils pour surveiller l'utilisation du cache et de la performance, et a un GetLogicalProcessorInformation() function exemple (...tout en explorant de nouveaux sentiers dans la création ridiculement longue noms de fonction dans le processus) je pense que je vais le code.

Mise à JOUR: Hazwell augmente cache les performances de chargement 2X, à partir de l'Intérieur de la Tac; l'Architecture Haswell

Haswell's URS (Unified Reservation Station)

8voto

Norman Ramsey Points 115730

J'ai fait un peu plus d'enquête. Il y a un groupe à l'ETH de Zurich, qui a construit une mémoire-l'évaluation de la performance de l'outil qui pourrait être en mesure d'obtenir des informations sur la taille au moins (et peut-être aussi l'associativité) des caches L1 et L2. Le programme fonctionne en essayant différentes de lire les traces expérimentalement et à mesure de l'résultant de débit. Une version simplifiée a été utilisée pour le populaire, un ouvrage de Bryant et O''Hallaron.

8voto

Not Sure Points 3128

Vous êtes à la recherche à la consommation spécifications, pas le développeur cahier des charges. Voici la documentation que vous souhaitez. Le cache tailles varient par un processeur de la famille des sous-modèles, de sorte qu'ils ne le sont habituellement pas dans les IA-32 manuels, mais vous pouvez facilement regarder sur NewEgg et ces.

Edit: Plus précisément: le Chapitre 10 du Volume 3A (Systèmes de Guide de Programmation), le Chapitre 7 de l'Optimisation Manuel de Référence, et potentiellement quelque chose dans le TLB page-manuel de mise en cache, même si je suppose que l'on est plus loin de la L1 que vous vous souciez.

2voto

Michael Points 34110

L1 caches existent sur ces plateformes. Ce sera presque certainement rester fidèle jusqu'à ce que la mémoire et le front side bus vitesses de dépasser la vitesse de la CPU, qui est très probablement un long chemin.

Sur Windows, vous pouvez utiliser le GetLogicalProcessorInformation pour obtenir un certain niveau de cache des informations (taille, taille, associativité, etc.) La version Ex sur Win7 donnera encore plus de données, à l'instar de ce qui cœurs part qui le cache. CpuZ donne également cette information.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X