Nicht-zeitliche SSE-Anweisungen (MOVNTI, MOVNTQ usw.) folgen nicht den normalen Cachekohärenzregeln. Daher muss den nicht temporären Speichern eine Anweisung von SFENCE folgen, damit ihre Ergebnisse von anderen Prozessoren rechtzeitig gesehen werden können.
Wenn Daten erzeugt werden und nicht (sofort) wieder konsumiert werden, ist die Tatsache, dass Speicheroperationen zuerst eine vollständige Cachezeile lesen und dann die zwischengespeicherten Daten ändern, nachteilig für die Leistung. Diese Operation schiebt Daten aus den Caches, die möglicherweise erneut benötigt werden, zugunsten von Daten, die nicht bald verwendet werden. Dies gilt insbesondere für große Datenstrukturen wie Matrizen, die gefüllt und später verwendet werden. Bevor das letzte Element der Matrix gefüllt wird, werden durch die schiere Größe die ersten Elemente entfernt, wodurch das Zwischenspeichern der Schreibvorgänge unwirksam wird.
Für diese und ähnliche Situationen bieten Prozessoren Unterstützung für nicht-temporale Schreiboperationen. Zeitlich bedeutet in diesem Zusammenhang, dass die Daten nicht bald wiederverwendet werden, daher gibt es keinen Grund, sie zwischenzuspeichern. Diese nicht temporalen Schreiboperationen lesen keine Cachezeile und modifizieren sie dann; stattdessen wird der neue Inhalt direkt in den Speicher geschrieben.
Quelle: http://lwn.net/Articles/255364/
Beachten Sie, dass SSE4.1 'MOVNTDQA xmmi, m128' eine NT-Ladung ist, während alle anderen NT-Anweisungen gespeichert sind, mit Ausnahme von' prefetchnta'. Die akzeptierte Antwort hier scheint nur über Geschäfte zu sprechen. [Dies ist, was ich in der Lage gewesen, über NT-Lasten zu zeigen] (http://stackoverflow.com/questions/32103968/non-temporal-loads-and-the-hardware-prefetcher-do-they-work-together). TL: DR: Hoffentlich tut die CPU etwas Nützliches mit dem NT-Hinweis, 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. –
Update: NT * Lasten * möglicherweise nichts nützliches außer auf UCSW Speicherbereiche auf den meisten CPUs (z. B. Intel SnB-Familie). NT/streaming * stores * funktionieren jedoch definitiv auf normalem Speicher. –
@Peter: Du meinst USWC Speicher richtig?Ich habe noch nie von UCSW oder USWC Speicher gehört. Das falsche Akronym zu googeln war nicht hilfreich :-) –