Я хочу прочитать ячейку памяти, не загрязняя кеш. Я работаю над машиной 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.
У меня есть две проблемы с этим подходом:
- Код компилируется, но при запуске я получаю сообщение об ошибке "Недопустимая инструкция". Любые идеи, почему?
- Я не уверен, какой тип памяти выделяется новым. Я бы предположил, что ВБ. Согласно документации, инструкция MOVNTDQA будет работать только с типом памяти USWC. Как я могу узнать, на какой тип памяти я работаю?
Подводя итог, мой вопрос:
Как я могу прочитать ячейку памяти без загрязнения кэша на машине X86? Является ли мой подход в правильном направлении и может ли он быть исправлен для работы?
Спасибо.