gpt4 book ai didi

c++ - 为什么 rdtscp 不返回核心 ID?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:57:31 26 4
gpt4 key购买 nike

我有这个代码

#include <iostream>
#include <sched.h>

unsigned long long rdtscp(unsigned int* aux)
{
// For IA32
unsigned long long x;
asm volatile("rdtscp" : "=c" (*aux), "=A" (x) ::);
return x;
}

int main()
{
unsigned int aux0, aux1 = -1, aux2;
aux0 = sched_getcpu();
unsigned long long x = rdtscp(&aux1);
aux2 = sched_getcpu();
std::cout << "aux0 = " << aux0 << ", aux1 = " << aux1 << ", aux2 = " << aux2 << ", x = " << x << std::endl;
return 0;
}

它定义了一个函数rdtscp,它使用内联汇编来调用rdtscp 汇编指令。 TSC 值看起来不错,但核心 ID 始终为零,即使 sched_getcpu() 都返回了正确的核心 ID 并且它不为零。输出看起来像

# g++ test.cpp -o test ; ./test
aux0 = 2, aux1 = 0, aux2 = 2, x = 231368797247511

如何使用 rdtscp 获取 TSC 和核心 ID?

最佳答案

可能您的硬件不支持rdtscp指令。你可以检查这个:

#include <cpuid.h>
#include <stdio.h>

main()
{
unsigned a, b, c, d;
if (__get_cpuid(0x80000001, &a, &b, &c, &d))
puts("unsupported instruction rdtscp" + (d&1<<27 ? 2 : 0));
else
puts("unsupported cpuid level");
}

关于c++ - 为什么 rdtscp 不返回核心 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24488918/

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