TSC

wiki上的说明:http://en.wikipedia.org/wiki/Time_Stamp_Counter

intel 有的CPU tsc的变化是固定的(不会随 cpu节电的影响)。 

判断CPU是否支持常量TSC,可以使用 “cat /proc/cpuinfo | grep constant_tsc“, 有输出就表示支持。

 

下面是tsc的读取代码,  cpuid是为了解决CPU乱序执行的问题。

GNU C++

#include <stdint.h>
extern "C" {
__inline__ uint64_t rdtsc() {
uint32_t lo, hi;
__asm__ __volatile__ (      // serialize
"xorl %%eax,%%eax \n        cpuid"
::: "%rax", "%rbx", "%rcx", "%rdx");
/* We cannot use "=A", since this would use %rax on x86_64 */
__asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
return (uint64_t)hi << 32 | lo;
}
}
POSIX 调用 clock_gettime

Microsoft Visual C++

__declspec(naked)
unsigned __int64 __cdecl rdtsc(void)
{
__asm
{
rdtsc
ret       ; return value at EDX:EAX
}
}
Windows API QueryPerformanceCounter, QueryPerformanceFrequency
 
 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-20
  • 2022-12-23
  • 2021-11-20
  • 2021-11-30
  • 2021-11-30
猜你喜欢
  • 2022-12-23
  • 2021-11-12
  • 2022-12-23
  • 2022-01-21
  • 2022-02-01
  • 2021-07-18
  • 2022-12-23
相关资源
相似解决方案