Frage

Wenn mein Programm führt eine Ladeoperation mit acquire Semantik / Speicheroperation mit Release Semantik oder vielleicht einen Voll Zaun, entkräftet es die Cache der CPU.
Meine Frage ist: welcher Teil des Cache tatsächlich ungültig gemacht wird? nur die Cache-Zeile, die die Variable gehalten, die ich acquire / Release verwendet habe? oder vielleicht wird die gesamte Cache ungültig? (L1 + L2 + L3 .. usw.?). Gibt es einen Unterschied in diesem Thema, wenn ich acquire / release Semantik, oder wenn ich einen Voll Zaun?

War es hilfreich?

Lösung

Ich bin kein Experte auf diesem, aber ich zu diesem Dokument gestolpert, vielleicht ist es hilfreich http://www.rdrop.com/users/ paulmck / Skalierbarkeit / Papier / whymb.2009.04.05a.pdf

Andere Tipps

Wenn Sie eine Last ohne Zaun oder mutexes ausführen, dann könnte der geladene Wert möglicherweise von überall her kommen, das heißt, Caches, Register (zur Compiler-Optimierungen) oder RAM ... aber aus Ihrer Frage, Sie wüssten, dass dies bereits .

In den meisten Mutex-Implementierungen, wenn Sie einen Mutex erwerben, wird ein Zaun immer angewandt, entweder explizit (beispielsweise mfence, Barriere, etc.) oder implizit (zum Beispiel Lock-Präfix mit dem Bus auf x86 zu sperren). Dies bewirkt, dass die Cache-Zeilen aller Caches auf dem Pfad für ungültig erklärt werden.

Beachten Sie, dass der gesamte Cache nicht ungültig gemacht wird, sondern nur die entsprechenden Cache-Zeilen für den Speicherplatz. Dazu gehört auch die Leitungen für die Mutex (die in der Regel als ein Wert im Speicher implementiert ist).

Natürlich gibt es architekturspezifische Details, aber das ist, wie es im Allgemeinen funktioniert.

Beachten Sie auch, dass dies nicht der einzige Grund für ungültig zu machen Caches, da Operationen auf einer CPU sein, die Cache-Speicher auf einer anderen brauchen würde für ungültig erklärt werden. Doing eine Google-Suche für „Cache-Kohärenz-Protokolle“ werden Sie mit einer Vielzahl von Informationen zu diesem Thema liefern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top