目前,我正在尝试测量在同一环境中通过两种不同的编程语言完成操作所需的时钟周期数。(不使用操作系统)
目前我正在使用 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