如何在 GCC x86 中使用 RDTSC 计算时钟周期? [复制]

2024-04-14

使用 Visual Studio,我可以从处理器读取时钟周期计数,如下所示。 我如何对 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

其他答案有效,但您可以通过使用 GCC 来避免内联汇编__rdtsc内在的,可通过包括x86intrin.h.

它定义于:gcc/config/i386/ia32intrin.h https://github.com/gcc-mirror/gcc/blob/gcc-7_3_0-release/gcc/config/i386/ia32intrin.h#L109:

/* rdtsc */
extern __inline unsigned long long
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
__rdtsc (void)
{
  return __builtin_ia32_rdtsc ();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 GCC x86 中使用 RDTSC 计算时钟周期? [复制] 的相关文章

随机推荐