Lorsque mon programme exécute une opération de chargement avec acquisition de la sémantique/opération de stockage avec une sémantique de libération ou une clôture complète, elle invalide le cache de la CPU.
Ma question est la suivante: quelle partie du cache est réellement invalidée? seule la ligne de cache qui contenait la variable que j'ai utilisée acquiert/libère? ou peut-être le cache entier est-il invalidé? (L1 + L2 + L3 .. et ainsi de suite?). Y a-t-il une différence dans ce sujet quand j'utilise une sémantique d'acquisition/libération, ou quand j'utilise une clôture complète?Invalidation de la mémoire cache du processeur
Répondre
Je ne suis pas un expert, mais je suis tombé sur ce document, peut-être il est utile http://www.rdrop.com/users/paulmck/scalability/paper/whymb.2009.04.05a.pdf
Lorsque vous effectuez une charge sans clôtures ou mutex, la valeur chargée pourrait potentiellement venir de partout, à savoir , caches, registres (au moyen d'optimisations de compilateur), ou RAM ... mais à partir de votre question, vous le saviez déjà.
Dans la plupart des implémentations de mutex, lorsque vous acquérez un mutex, une clôture est toujours appliquée, explicitement (par exemple, mfence, barrière, etc.) ou implicitement (par exemple, verrouiller le bus sur x86). Cela provoque l'invalidation des lignes de cache de tous les caches du chemin.
Notez que le cache entier n'est pas invalidé, juste les lignes de cache respectives pour l'emplacement de mémoire. Cela inclut également les lignes pour le mutex (qui est généralement implémenté en tant que valeur dans la mémoire).
Bien sûr, il existe des détails spécifiques à l'architecture, mais c'est ainsi que cela fonctionne en général. Notez également que ce n'est pas la seule raison pour invalider les caches, car il peut y avoir des opérations sur une CPU qui nécessiteraient l'invalidation de caches sur une autre. Faire une recherche google pour "protocoles de cohérence de cache" vous fournira beaucoup d'informations sur ce sujet.
- 1. invalidation automatique du cache de requêtes
- 2. Invalidation du cache entre deux applications Web
- 3. Détermination de l'efficacité du cache processeur du code C
- 4. Invalidation un objet cache dans ASP.NET
- 5. Utilisation de la mémoire VS. Utilisation du processeur dans l'iphone
- 6. Méthode multiplate-forme pour l'utilisation du processeur/de la mémoire
- 7. Reproduire "Galerie des effets de cache du processeur"
- 8. Hibernate invalidation de cache de second niveau lorsqu'un autre processus modifie la base de données
- 9. Impact du cache Opcode sur l'utilisation de la mémoire
- 10. performances de mémoire cache
- 11. Optimisation de la mémoire et de la consommation du processeur Tomcat
- 12. Suivi de la mémoire des threads et de la consommation du processeur
- 13. Effacer le cache mémoire du serveur apache
- 14. Invalidation de session aléatoire
- 15. Voir invalidation
- 16. Invalidation du cache HTTP sur les serveurs frontaux en lecture seule
- 17. Mise en cache et invalidation de la réponse XHR/Ajax par programme
- 18. Surveillance de la température du processeur
- 19. Comment puis-je connaître l'utilisation du processeur et l'utilisation de la mémoire de l'iPhone?
- 20. Limitation de la mémoire de processus/utilisation du processeur sous Linux
- 21. mémoire de stockage de cache
- 22. Le modèle de mémoire Java (JSR-133) implique-t-il que la saisie d'un moniteur entraîne le vidage du (des) cache (s) de données du processeur?
- 23. Utilisation de PerformanceCounter pour suivre la mémoire et l'utilisation du processeur par processus?
- 24. Comment obtenir les statistiques d'utilisation du processeur et de la mémoire dans Windows Phone 7?
- 25. Mémoire cache L2
- 26. Mesure de l'utilisation d'un processeur et d'une mémoire de processus
- 27. Mysql Abaissement de l'utilisation du processeur par buffering
- 28. La DLL consomme 100% de l'utilisation du processeur
- 29. Mise en mémoire cache du jeu de données
- 30. Utilisation du processeur non mesurable?
Qu'est-ce que vous utilisez pour invalider le cache CPU (Assembler, appel OS?) Et aussi quel type d'architecture/cpu s'applique-t-il? –
@Johannes Rudolph, Disons que le code actuel est écrit en C# (volatiles, Interlocked opérations, MemoryBarriers), mais finalement il est traduit en l'opcode assembleur approprié. Dans ma situation personnelle, je travaille avec une machine SMP avec chipset Intel (Xeon, en particulier). Mais j'aimerais savoir comment se déroule ce processus d'invalidation dans un spectre plus "général" (AMD/Intel, SMP/NUMA etc.) –