目前,我试图衡量采取两种不同的编程语言在相同的环境下完成操作的时钟周期数标杆的Qemu i386的系统。 (不使用OS)如何使用RDTSC
目前我使用的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;
但不同的是不恒定,甚至当我接手的迭代100S和几千个周期的变化。
有没有更好的测量时钟周期的方法?
而且是有提供频率为Qemu中输入参数的方法吗? 目前我使用
QEMU系统-I386 -kernel out.elf
一千周期为1 GHz的CPU上0.000001秒。这只是噪音。您需要增加迭代次数(例如,1,000,000次),以便噪声变得无关紧要。 –