Secondo il Manuale dello sviluppatore del software per le architetture Intel® 64 e IA-32, Volume 1: Architettura di base, capitolo "Programmazione con Intel Streaming SIMD Extensions (Intel SSE)":
Memorizzazione nella cache di dati temporali e non temporali
I dati a cui fa riferimento un programma possono essere temporali (i dati verranno riutilizzati) o non temporali (i dati verranno referenziati una volta e non saranno riutilizzati nell'immediato futuro). Ad esempio, il codice del programma è generalmente temporale, mentre i dati multimediali, come l'elenco di visualizzazione in un'applicazione grafica 3D, sono spesso non temporali. Per fare un uso efficiente delle cache del processore, è generalmente desiderabile memorizzare nella cache i dati temporali e non memorizzare nella cache i dati non temporali. Il sovraccarico delle cache del processore con dati non temporali viene talvolta definito "inquinamento delle cache". Le istruzioni di controllo della cache SSE e SSE2 consentono a un programma di scrivere dati non temporali in memoria in un modo che riduce al minimo l'inquinamento delle cache.
Descrizione del carico non temporale e istruzioni di memorizzazione. Fonte: manuale per sviluppatori di software per architetture Intel 64 e IA-32, volume 2: riferimento al set di istruzioni
LOAD (MOVNTDQA — Carica suggerimento allineato non temporale a doppia parola quadrupla)
Carica una doppia parola quadrupla dall'operando di origine (secondo operando) all'operando di destinazione (primo operando) utilizzando un suggerimento non temporale se la sorgente di memoria è il tipo di memoria WC (write combination) [...]
[...] il processore non legge i dati nella gerarchia della cache, né recupera la riga della cache corrispondente dalla memoria nella gerarchia della cache.
Si noti che, come commenta Peter Cordes, non è utile sulla normale memoria WB (write-back) sui processori correnti perché il suggerimento NT viene ignorato (probabilmente perché non ci sono prefetcher HW compatibili con NT) e si applica la semantica di caricamento fortemente ordinata . prefetchnta
può essere utilizzato come carico che riduce l'inquinamento dalla memoria WB
STORE (MOVNTDQ: archivia interi compressi utilizzando un suggerimento non temporale)
Sposta gli interi compressi nell'operando di origine (secondo operando) nell'operando di destinazione (primo operando) utilizzando un suggerimento non temporale per impedire la memorizzazione nella cache dei dati durante la scrittura in memoria.
[...] il processore non scrive i dati nella gerarchia della cache, né recupera la riga della cache corrispondente dalla memoria nella gerarchia della cache.
Utilizzando la terminologia definita in Criteri e prestazioni di scrittura della cache , possono essere considerati come write-around (no-write-allocate, no-fetch-on-write-miss).
Infine, potrebbe essere interessante rivedere le note di John McAlpin sui negozi non temporali .
MOVNTDQA xmmi, m128
è un carico NT, mentre tutte le altre istruzioni NT sono archivi, ad eccezione diprefetchnta
. La risposta accettata qui sembra parlare solo di negozi. Questo è quello che sono riuscito a trovare sui carichi di NT . TL: DR: si spera che la CPU faccia qualcosa di utile con il suggerimento NT per ridurre al minimo l'inquinamento della cache, ma non sovrascrive la semantica fortemente ordinata della memoria WB "normale", quindi devono usare la cache.