De acordo com o Manual do desenvolvedor de software das arquiteturas Intel® 64 e IA-32, Volume 1: Arquitetura básica, capítulo "Programação com extensões Intel Streaming SIMD (Intel SSE)":
Cache de dados temporais vs. não temporais
Os dados referenciados por um programa podem ser temporais (os dados serão usados novamente) ou atemporais (os dados serão referenciados uma vez e não reutilizados no futuro imediato). Por exemplo, o código do programa é geralmente temporal, enquanto os dados de multimídia, como a lista de exibição em um aplicativo gráfico 3-D, costumam ser atemporais. Para fazer uso eficiente dos caches do processador, geralmente é desejável armazenar em cache os dados temporais e não os dados não temporais. Sobrecarregar os caches do processador com dados não temporais é algumas vezes referido como "poluir os caches". As instruções de controle de capacidade de cache SSE e SSE2 permitem que um programa grave dados não temporais na memória de uma maneira que minimiza a poluição de caches.
Descrição das instruções de carregamento e armazenamento não temporais. Fonte: Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 2: Instruction Set Reference
CARGA (MOVNTDQA - Carregar Dica de Alinhamento Não Temporal de Duas Palavras Quadword)
Carrega uma palavra quádrupla dupla do operando de origem (segundo operando) para o operando de destino (primeiro operando) usando uma dica não temporal se a fonte de memória for do tipo de memória WC (combinação de gravação) [...]
[...] o processador não lê os dados na hierarquia de cache, nem busca a linha de cache correspondente da memória na hierarquia de cache.
Observe que, como Peter Cordes comenta, não é útil na memória WB (write-back) normal nos processadores atuais porque a dica do NT é ignorada (provavelmente porque não há pré-buscadores HW compatíveis com o NT) e a semântica de carga totalmente ordenada se aplica . prefetchnta
pode ser usado como uma carga de redução de poluição da memória WB
STORE (MOVNTDQ - Armazenar Inteiros Empacotados Usando Dica Não Temporal)
Move os inteiros compactados no operando de origem (segundo operando) para o operando de destino (primeiro operando) usando uma dica não temporal para evitar o armazenamento em cache dos dados durante a gravação na memória.
[...] o processador não grava os dados na hierarquia de cache, nem busca a linha de cache correspondente da memória para a hierarquia de cache.
Usando a terminologia definida em Políticas e desempenho de gravação de cache , eles podem ser considerados como write-around (no-write-alocate, no-fetch-on-write-miss).
Finalmente, pode ser interessante revisar as notas de John McAlpin sobre armazenamentos não temporais .
MOVNTDQA xmmi, m128
é uma carga NT, enquanto todas as outras instruções NT são armazenadas, exceto paraprefetchnta
. A resposta aceita aqui parece ser apenas sobre lojas. Isso é o que descobri sobre cargas do NT . TL: DR: espero que a CPU faça algo útil com a dica do NT para minimizar a poluição do cache, mas eles não sobrescrevem a semântica fortemente ordenada da memória WB "normal", então eles têm que usar o cache.