現在、同じ環境で 2 つの異なるプログラミング言語による操作を完了するのにかかるクロック サイクル数を測定しようとしています。(OSを使用しない場合)
現在、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;
しかし、数百回以上の繰り返しを行っても、その差は一定ではなく、数千サイクルごとに異なります。
クロックサイクルを測定するより良い方法はありますか?
また、Qemu の入力パラメーターとして周波数を提供する方法はありますか? 現在、私は使用しています
qemu-system-i386 -kernel out.elf