Como posso carregar valores da memória sem poluir o cache?
Eu quero ler um local de memória sem poluir o cache. Eu estou trabalhando na máquina Linux X86. Eu tentei usar o MOVNTDQA assembler instruction:
asm("movntdqa %[source], %[dest] \n\t"
: [dest] "=x" (my_var) : [source] "m" (my_mem[0]) : "memory");
my_mem é um int * alocado com new, my_var é um int.
Eu tenho dois problemas com essa abordagem:
O código compila, mas estou recebendo o erro "Instrução Ilegal" ao executá-lo. Alguma idéia por quê?Não tenho certeza de que tipo de memória é alocada com o novo. Eu diria que WB. De acordo com a documentação, a instrução MOVNTDQA funcionará apenas com o tipo de memória USWC. Como posso saber em qual tipo de memória estou trabalhando?Para resumir, minha pergunta é:
Como posso ler um local de memória sem poluir o cache em uma máquina X86? A minha abordagem está na direção certa e pode ser corrigida para funcionar?
Obrigado.