【发布时间】:2015-07-20 13:59:42
【问题描述】:
出于基准测试的目的,我使用rdtsc 来确定我在关键循环中执行某些代码块所花费的伪时间。由于我的代码可以随时在进程之间重新调度,如果我发现我在微措施的开始和停止之间更改了 CPU,我想通过转储数据来最小化噪音。
是否有 x86 指令可以用来识别我在哪个 CPU/内核上运行?可以给我一个唯一标识符或 CPU# 和 core# 等的东西。
显然,cpuid 不再提供信息,所以我正在寻找替代方案。
【问题讨论】:
-
您使用自己的操作系统吗?因为 Windows 和 Linux 都有 API 来满足您的需求:分别为
GetCurrentProcessorNumber和sched_getcpu。 -
你应该把你的线程固定到一个核心上。另请参阅this question。
-
如果您的 CPU 将提供该信息,它将通过
cpuid提供。但这不是出于安全原因。 -
该程序使用 Intel 的 MP 初始化协议来唤醒任何可能存在的辅助处理器,并允许每个处理器显示其 APIC 本地 ID。 [链接]cs.usfca.edu/~cruse/cs630/mphello.s
-
@Jester 在实践中我不能这样做,否则我的用户会恨我:)