我想读取内存位置而不污染缓存。我正在使用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。
我有两个问题,这种方法:
- 代码编译,但在运行它时我收到“非法指令”的错误。任何想法为什么?
- 我不确定什么类型的内存分配新的。我会假设WB。根据文档,MOVNTDQA指令将只能使用USWC存储器类型。我怎么知道我正在使用哪种内存类型?
总之,我的问题是:
我怎么能不污染的X86机器上的缓存读取一个存储器位置?我的方法是否朝着正确的方向发展,是否可以固定下来?
谢谢。
与此问题相关吗? HTTP://计算器。COM /问题/ 851286 /如何使用的,movntdqa到避免缓存污染 – sharptooth 2009-08-12 10:57:11
我想这是相关的:),但不幸的是,这个问题/答案并不能帮助我这个问题。 – Anna 2009-08-12 11:04:49
哦,还有一件事:我不确定甚至有可能做到这一点: - /我当然希望它是。 – Anna 2009-08-12 11:06:42