Gemäß dem Softwareentwicklerhandbuch für Intel® 64- und IA-32-Architekturen, Band 1: Grundlegende Architektur, Kapitel "Programmieren mit Intel Streaming SIMD Extensions (Intel SSE)":
Caching von zeitlichen und nicht-zeitlichen Daten
Daten, auf die von einem Programm verwiesen wird, können zeitlich (Daten werden erneut verwendet) oder nicht zeitlich (Daten werden einmal referenziert und in naher Zukunft nicht wiederverwendet) sein. Beispielsweise ist Programmcode im Allgemeinen zeitlich begrenzt, wohingegen Multimediadaten wie die Anzeigeliste in einer 3D-Grafikanwendung häufig nicht zeitlich begrenzt sind. Um die Caches des Prozessors effizient zu nutzen, ist es im Allgemeinen wünschenswert, zeitliche Daten und nicht nicht-zeitliche Daten zwischenzuspeichern. Das Überladen der Caches des Prozessors mit nicht-zeitlichen Daten wird manchmal als "Verschmutzung der Caches" bezeichnet. Die Anweisungen zur Steuerung der Cachefähigkeit von SSE und SSE2 ermöglichen es einem Programm, nicht-zeitliche Daten auf eine Weise in den Speicher zu schreiben, die die Verschmutzung von Caches minimiert.
Beschreibung der nicht-zeitlichen Lade- und Speicheranweisungen. Quelle: Intel 64- und IA-32-Architekturen Software-Entwicklerhandbuch, Band 2: Befehlssatzreferenz
LOAD (MOVNTDQA - Nicht zeitlich ausgerichteten Doppelquadword-Hinweis laden)
Lädt ein Doppelquadwort vom Quelloperanden (zweiter Operand) zum Zieloperanden (erster Operand) unter Verwendung eines nicht-zeitlichen Hinweises, wenn die Speicherquelle vom WC-Speichertyp (... Schreibkombination) ist [...]
[...] Der Prozessor liest weder die Daten in die Cache-Hierarchie, noch holt er die entsprechende Cache-Zeile aus dem Speicher in die Cache-Hierarchie.
Beachten Sie, dass es, wie Peter Cordes kommentiert, im normalen WB-Speicher (Write-Back) auf aktuellen Prozessoren nicht nützlich ist, da der NT-Hinweis ignoriert wird (wahrscheinlich, weil es keine NT-fähigen HW-Prefetcher gibt) und die vollständige, stark geordnete Ladesemantik gilt . prefetchnta
kann als verschmutzungsreduzierende Last aus dem WB-Speicher verwendet werden
STORE (MOVNTDQ - Gepackte Ganzzahlen mit nicht-zeitlichem Hinweis speichern)
Verschiebt die gepackten Ganzzahlen im Quelloperanden (zweiter Operand) unter Verwendung eines nicht-zeitlichen Hinweises zum Zieloperanden (erster Operand), um das Zwischenspeichern der Daten während des Schreibens in den Speicher zu verhindern.
[...] Der Prozessor schreibt weder die Daten in die Cache-Hierarchie, noch ruft er die entsprechende Cache-Zeile aus dem Speicher in die Cache-Hierarchie.
Verwenden der in Cache Write Policies and Performance definierten Terminologie können sie als Write-Around (No-Write-Allocate, No-Fetch-On-Write-Miss) betrachtet werden.
Schließlich kann es interessant sein, John McAlpins Notizen zu nicht-temporären Speichern zu lesen .
MOVNTDQA xmmi, m128
eine NT-Last ist, während alle anderen NT-Anweisungen außer gespeichert sindprefetchnta
. Die akzeptierte Antwort hier scheint nur über Geschäfte zu sprechen. Dies ist, was ich über NT-Lasten auftauchen konnte . TL: DR: Hoffentlich macht die CPU mit dem NT-Hinweis etwas Nützliches, um die Cache-Verschmutzung zu minimieren, aber sie überschreibt nicht die stark geordnete Semantik des "normalen" WB-Speichers, so dass sie den Cache verwenden müssen.