gpt4 book ai didi

c++ - RDTSCP 和指令顺序

转载 作者:搜寻专家 更新时间:2023-10-31 02:10:37 31 4
gpt4 key购买 nike

<分区>

我正在使用 rdtscp 指令读取 ecx 寄存器以检测 cpu 和 numa 节点 ID(我正在开发一个操作系统)。

代码如下所示

inline static long get(unsigned char *node_id = 0, unsigned char *cpu_id = 0)
{
unsigned int p;
__asm__ __volatile__("rdtscp\n" : "=c" (p) : : "memory");

if (node_id) {
*node_id = p >> 12;
}

if (cpu_id) {
*cpu_id = p & 0xfff;
}

return 0;
}

在使用这个函数时,我有一个无法理解的行为:CPU 告诉我很多异常(页面错误、一般保护错误……)。这向我表明,cpu 或节点 id 未被读取,但如果我记录 id,一切似乎都是正确的,没有出现异常。

所以在代码中:

// ...
unsigned char cpu, numa;
get(&numa, &cpu);
// use cpu and numa id creates exception

但是

// ...
unsigned char cpu, numa;
get(&numa, &cpu);
print(cpu); // <--- this makes cpu reading ok?
// use cpu and numa id is ok

cpu 是不是在重新排序我的指令,让他在读取之前使用 cpu_id/numa_id?

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com