Quiero leer una ubicación de memoria sin contaminar la memoria caché. Estoy trabajando en la máquina X86 Linux. He intentado utilizar la instrucción ensamblador MOVNTDQA:¿Cómo puedo cargar valores desde la memoria sin contaminar la caché?
asm("movntdqa %[source], %[dest] \n\t"
: [dest] "=x" (my_var) : [source] "m" (my_mem[0]) : "memory");
my_mem es un int * asignado con el nuevo, my_var es un int.
Tengo dos problemas con este enfoque:
- El código se compila, pero me estoy haciendo "instrucción ilegal" error al ejecutarlo. ¿Alguna idea de por qué?
- No estoy seguro de qué tipo de memoria se asigna con nueva. Yo asumiría que WB. De acuerdo con la documentación, la instrucción MOVNTDQA funcionará solo con el tipo de memoria USWC. ¿Cómo puedo saber en qué tipo de memoria estoy trabajando?
Para resumir, mi pregunta es:
¿Cómo puedo leer una posición de memoria sin contaminar el caché en un equipo x86? ¿Mi enfoque está en la dirección correcta y se puede arreglar para trabajar?
Gracias.
¿Esta pregunta está relacionada? http: // stackoverflow.com/questions/851286/how-to-use-movntdqa-to-avoid-cache-pollution – sharptooth
Supongo que está relacionado :), pero lamentablemente, esa pregunta/respuesta no me ayuda con esta pregunta. – Anna
Oh, una cosa más: no estoy seguro de que sea posible hacerlo: -/Espero que así sea. – Anna