Question

Quand mon programme effectue une opération de chargement avec la sémantique Acquire / opération de stockage avec la sémantique de libération ou peut-être une clôture complète, il le cache invalide la CPU.
Ma question est la suivante: quelle partie du cache est effectivement invalidée? seul le cache en ligne qui a tenu la variable que je l'ai utilisé acquérir / release? ou peut-être la totalité du cache est invalidée? (L1 + L2 + L3 .. et ainsi de suite?). Y at-il une différence dans ce sujet lorsque j'utilise la sémantique acquisition / libération, ou quand j'utiliser une clôture complète?

Était-ce utile?

La solution

Je ne suis pas un expert, mais je suis tombé sur ce document, peut-être il est utile http://www.rdrop.com/users/ paulmck / évolutivité / papier / whymb.2009.04.05a.pdf

Autres conseils

Lorsque vous effectuez une charge sans clôtures ou mutex, la valeur chargée pourrait venir de partout, par exemple, des caches, des registres (par des optimisations du compilateur), ou RAM ... mais de votre question, vous le saviez déjà ce .

Dans la plupart des implémentations de mutex, lorsque vous achetez un mutex, une clôture est toujours appliquée, soit explicitement (par exemple, mfence, barrière, etc.) ou implicitement (par exemple, le préfixe pour verrouiller les bus x86). Cela provoque le cache des lignes de tous les caches sur le chemin à invalidés.

Notez que l'ensemble du cache n'est pas invalidée, seulement les lignes de cache respectives pour l'emplacement de mémoire. Cela inclut également les lignes pour le mutex (qui est habituellement mis en œuvre en tant que valeur en mémoire).

Bien sûr, il y a des détails spécifiques à l'architecture, mais c'est comment cela fonctionne en général.

Notez également que ce n'est pas la seule raison de caches invalidantes, comme il peut y avoir des opérations sur une unité centrale de traitement qui ont besoin de caches sur un autre être invalidée. Faire une recherche Google pour « protocoles de cohérence de cache » vous donnera beaucoup d'informations sur ce sujet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top