用于在C中查找函数调用中的已用时间的计时器

M.N*_*M.N 1 c profiling timer

我想计算在C中函数调用期间经过的时间,精度为1纳秒.

C中是否有可用的定时器功能?

如果是,请提供示例代码段.

伪代码

Timer.Start()
foo();
Timer.Stop()
Display time elapsed in execution of foo()
Run Code Online (Sandbox Code Playgroud)

环境细节: - 在RHEL机器上使用gcc 3.4编译器

Fre*_*ory 5

请问您使用的是哪种处理器?如果您使用的是x86处理器,则可以查看时间戳计数器(tsc).此代码段:

#define rdtsc(low,high) \
     __asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high))
Run Code Online (Sandbox Code Playgroud)

将使CPU已经运行周期的数目lowhigh分别(预计2个longS;可以将结果存储在一个long long int)如下:

inline void getcycles (long long int * cycles)
{
  unsigned long low;
  long high;
  rdtsc(low,high);
  *cycles = high; 
  *cycles <<= 32; 
  *cycles |= low; 
}
Run Code Online (Sandbox Code Playgroud)

请注意,这将返回CPU执行的周期数.您需要获得CPU速度,然后计算出每ns的循环次数,以获得经过的ns数.

为了做到这一点,我已经解析了"cpu MHz"字符串/proc/cpuinfo,并将其转换为小数.在那之后,它只是一点数学,并记住1MHz =每秒1,000,000个周期,并且有10亿ns /秒.