#include #include double RDTSC(void) { LARGE_INTEGER cycle; double CPU_Clock; int i; for(i = 0; i < 5;i++ ) { __asm { // 中括弧内はアセンブラ命令でしょう! cpuid rdtsc mov cycle.LowPart, eax mov cycle.HighPart, edx } // 現在のクロック数をcycleに格納します. Sleep(1000); // スレッドを1秒間停止させるためにSleep(1000)を実行します. (パラメータは[ms]の単位で指定) __asm { // 中括弧内はアセンブラ命令でしょう! cpuid rdtsc sub eax, cycle.LowPart sub edx, cycle.HighPart mov cycle.LowPart, eax mov cycle.HighPart, edx } // (1)を実行してから約1秒が経過した時点でのクロック数と, 1秒前のクロック数を引いてcycleに格納します. CPU_Clock = (double)cycle.LowPart; CPU_Clock /= 1000000; // CPU_Clockを1000000で割るとこによって, CPUのクロックの単位を[MHz]に変換しています. printf("%4.2lf[MHz]\n", CPU_Clock ); } return 0; }