我在 C++ 中计时多个 NOP 指令和单个 NOP 指令,使用rdtsc
. 但是,我没有得到执行 NOP 所需的周期数与执行的 NOP 数量成比例的增加。我很困惑为什么会这样。我的 CPU 是 Intel Core i7-5600U @ 2.60Ghz。
这是代码:
#include <stdio.h>
int main() {
unsigned long long t;
t = __rdtsc();
asm volatile("nop");
t = __rdtsc() - t;
printf("rdtsc for one NOP: %llu\n", t);
t = __rdtsc();
asm volatile("nop; nop; nop; nop; nop; nop; nop;");
t = __rdtsc() - t;
printf("rdtsc for seven NOPs: %llu\n", t);
}
我得到的值如下:
rdtsc for one NOP: 78
rdtsc for seven NOPs: 91
rdtsc for one NOP: 78
rdtsc for seven NOPs: 78
在未设置处理器亲和性的情况下运行时。设置处理器亲和性$ taskset -c 0 ./nop$
时,结果是:
rdtsc for one NOP: 78
rdtsc for seven NOPs: 78
rdtsc for one NOP: 130
rdtsc for seven NOPs: 169
rdtsc for one NOP: 78
rdtsc for seven NOPs: 143
为什么会这样?