相关疑难解决方法(0)

如何在linux上使用gcc汇编在x86-64中设置控制寄存器0(cr0)位

我使用以下代码将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 gcc x86-64 inline-assembly

8
推荐指数
1
解决办法
7709
查看次数

有没有办法在 Linux 系统上禁用 CPU 缓存(L1/L2)?

我正在 Linux 系统(在 Intel Core i7 4500U 上运行)上分析一些代码,以获得仅执行成本的时间。该应用程序是来自 libmpeg2 的演示 mpeg2dec。我试图获得 mpeg2 执行时间的概率分布。然而,我们希望看到缓存关闭时的原始执行成本。

有没有办法通过 Linux 命令或 gcc 标志禁用系统的 cpu 缓存?或者甚至将 cpu (L1/L2) 缓存大小设置为 0KB ?或者甚至添加一些更改的代码以禁用缓存?当然,无需修改或重建内核。

linux cpu gcc caching

5
推荐指数
1
解决办法
5896
查看次数

标签 统计

gcc ×2

linux ×2

caching ×1

cpu ×1

inline-assembly ×1

x86-64 ×1