GCCでCPUクロックをカウントする


このエントリーをはてなブックマークに追加

c++ - clock cycle count wth GCC - Stack Overflowに書いてあるコードをそのまま試してみました。環境はWindows 7 + Cygwin + g++ 4.8.2です。

#include <iostream>

#ifdef __i386
__inline__ uint64_t rdtsc() {
    uint64_t x;
    __asm__ volatile ("rdtsc" : "=A" (x));
    return x;
}
#elif __amd64
__inline__ uint64_t rdtsc() {
    uint64_t a, d;
    __asm__ volatile ("rdtsc" : "=a" (a), "=d" (d));
    return (d<<32) | a;
}
#endif


#include <iostream>
using namespace std;

int main(){
    uint64_t t;

    t = rdtsc();
    int sum = 0;
    for(int i = 0; i < 10000; ++i)
    {
        sum += i;
    }
    t = rdtsc() - t;

    cout << "t = " << t << endl;

    return 0;
}

ビルドコマンドは以下です。

$ g++ gcc_cpu_clock.cpp

結果は以下の通りです。実行するたび値は変わります。18万近い値になることもあります。

$ ./a.exe
t = 59654