我使用以下代码将cr0位设置为禁用缓存.当我编译这个
#include <stdio.h>
int main()
{
__asm__("pushl %eax\n\t"
"mov %cr0,%eax;\n\t"
"orl $(1 << 30),%eax;\n\t"
"mov %eax,%cr0;\n\t"
"wbinvd\n\t"
"popl %eax"
);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到错误说操作数对mov无效.
谁能指点我做一个好的gcc x86-64指南来做这些事情?以上代码究竟出了什么问题呢?
我正在 Linux 系统(在 Intel Core i7 4500U 上运行)上分析一些代码,以获得仅执行成本的时间。该应用程序是来自 libmpeg2 的演示 mpeg2dec。我试图获得 mpeg2 执行时间的概率分布。然而,我们希望看到缓存关闭时的原始执行成本。
有没有办法通过 Linux 命令或 gcc 标志禁用系统的 cpu 缓存?或者甚至将 cpu (L1/L2) 缓存大小设置为 0KB ?或者甚至添加一些更改的代码以禁用缓存?当然,无需修改或重建内核。