Visual Studioでは、以下のようにプロセッサからのクロックサイクル数を読み取ることができます。 GCCで同じことをするにはどうしたらいいですか?クロックサイクル数wth GCC
#ifdef _MSC_VER // Compiler: Microsoft Visual Studio
#ifdef _M_IX86 // Processor: x86
inline uint64_t clockCycleCount()
{
uint64_t c;
__asm {
cpuid // serialize processor
rdtsc // read time stamp counter
mov dword ptr [c + 0], eax
mov dword ptr [c + 4], edx
}
return c;
}
#elif defined(_M_X64) // Processor: x64
extern "C" unsigned __int64 __rdtsc();
#pragma intrinsic(__rdtsc)
inline uint64_t clockCycleCount()
{
return __rdtsc();
}
#endif
#endif
はい、本当にRDTSCが必要ですが、今は持っています。ありがとうございました。 – user763305
このコードにはシリアル化命令がないため、最新のプロセッサ(順序が間違っている)では間違った結果が得られます。通常はcpuidが使用されます。 – markhahn
64ビットバージョンでは、gccでアセンブリが正しく生成されません。これを改善するには、 'rdx'を32ビット左にシフトするか、または' rax'を手動でシフトします。結果は 'rax'です。 –