【发布时间】:2015-11-25 20:17:59
【问题描述】:
目前我正在尝试测量在同一环境中使用两种不同的编程语言完成操作所需的时钟周期数。 (不使用操作系统)
目前我正在使用 Qemu-i386 模拟器并使用 rdtsc 来测量时钟周期。
/* Return the number of CPU ticks since boot. */
static inline u64 rdtsc(void)
{
u32 hi, lo;
// asm("cpuid");
asm("rdtsc" : "=a" (lo), "=d" (hi));
return ((u64) lo) | (((u64) hi) << 32);
}
取运行前后rdtsc的差应该提供时钟周期数。
start_time = rdtsc();
operation();
stop_time = rdtsc();
num_cycles = stop_time-start_time;
但是即使我进行了 100 多次迭代并且变化了几千个周期,差异也不是恒定的。
有没有更好的测量时钟周期的方法?
还有没有办法在 Qemu 中提供频率作为输入参数? 目前我正在使用
qemu-system-i386 -kernel out.elf
【问题讨论】:
-
一千个周期在 1 GHz CPU 上是 0.000001 秒。那只是噪音。您需要增加迭代次数(例如 1,000,000 次),以使噪音变得微不足道。
标签: assembly x86 clock qemu rdtsc