De acuerdo con el Manual del desarrollador de software de arquitecturas Intel® 64 e IA-32, Volumen 1: Arquitectura básica, capítulo "Programación con Intel Streaming SIMD Extensions (Intel SSE)":
Almacenamiento en caché de datos temporales frente a no temporales
Los datos a los que hace referencia un programa pueden ser temporales (los datos se volverán a utilizar) o no temporales (los datos se referenciarán una vez y no se reutilizarán en el futuro inmediato). Por ejemplo, el código de programa es generalmente temporal, mientras que los datos multimedia, como la lista de visualización en una aplicación de gráficos 3D, a menudo no son temporales. Para hacer un uso eficiente de las cachés del procesador, generalmente es deseable almacenar en caché los datos temporales y no los datos no temporales. La sobrecarga de las cachés del procesador con datos no temporales a veces se denomina "contaminar las cachés". Las instrucciones de control de capacidad de caché SSE y SSE2 permiten que un programa escriba datos no temporales en la memoria de una manera que minimiza la contaminación de los cachés.
Descripción de las instrucciones de almacenamiento y carga intemporal. Fuente: Manual del desarrollador de software de arquitecturas Intel 64 e IA-32, volumen 2: referencia del conjunto de instrucciones
LOAD (MOVNTDQA — Cargar pista alineada no temporal de cuatro palabras dobles)
Carga una palabra cuádruple doble desde el operando de origen (segundo operando) al operando de destino (primer operando) utilizando una sugerencia no temporal si la fuente de memoria es el tipo de memoria WC (combinación de escritura) [...]
[...] el procesador no lee los datos en la jerarquía de caché, ni busca la línea de caché correspondiente de la memoria en la jerarquía de caché.
Tenga en cuenta que, como comenta Peter Cordes, no es útil en la memoria WB (escritura diferida) normal en los procesadores actuales porque se ignora la sugerencia de NT (probablemente porque no hay precapturadores de HW compatibles con NT) y se aplica la semántica de carga completa fuertemente ordenada . prefetchnta
se puede utilizar como carga reductora de contaminación desde la memoria WB
ALMACENAR (MOVNTDQ — Almacenar enteros empaquetados usando una pista no temporal)
Mueve los enteros empaquetados en el operando de origen (segundo operando) al operando de destino (primer operando) usando una sugerencia no temporal para evitar el almacenamiento en caché de los datos durante la escritura en la memoria.
[...] el procesador no escribe los datos en la jerarquía de caché, ni busca la línea de caché correspondiente de la memoria en la jerarquía de caché.
Usar la terminología definida en Rendimiento y políticas de escritura en caché , se pueden considerar como de escritura indirecta (sin asignación de escritura, sin recuperación al escribir).
Finalmente, puede ser interesante revisar las notas de John McAlpin sobre las tiendas intemporales .
MOVNTDQA xmmi, m128
es una carga NT, mientras que todas las demás instrucciones NT son tiendas, exceptoprefetchnta
. La respuesta aceptada aquí solo parece estar hablando de tiendas. Esto es lo que he podido encontrar sobre las cargas NT . TL: DR: es de esperar que la CPU haga algo útil con la sugerencia de NT para minimizar la contaminación del caché, pero no anulan la semántica fuertemente ordenada de la memoria WB "normal", por lo que tienen que usar el caché.