Как я могу загрузить значения из памяти, не загрязняя кеш?
Я хочу прочитать место в памяти, не загрязняя кеш. Я работаю на X86 Linux машине. Я попытался с помощью инструкции ассемблера MOVNTDQA:
asm("movntdqa %[source], %[dest] \n\t"
: [dest] "=x" (my_var) : [source] "m" (my_mem[0]) : "memory");
my_mem - это int *, выделенный с новым, my_var - это int.
У меня есть две проблемы с этим подходом:
The code compiles but I am getting "Illegal Instruction" error when running it. Any ideas why? I am not sure what type of memory is allocated with new. I would assume that WB. According to documentation, the MOVNTDQA instruction will work only will USWC memory type. How can I know what memory type I am working on?Подводя итог, мой вопрос:
Как я могу прочитать ячейку памяти, не загрязняя кэш на компьютере с архитектурой X86? Мой подход в правильном направлении, и может ли это быть исправлено?
Благодарю.