C中的轻量计时器

时间:2011-03-31 14:02:34

标签: c timer

我正在寻找一个轻量级计时器来测量C代码的几个部分的时间。此计时器实现不应该增加整个程序执行时间。

3 个答案:

答案 0 :(得分:3)

查看符合POSIX标准的clock_gettime平台;你可以通过比较一个时间戳和稍后生成的时间戳来轻松地自己完成。

请记住使用CLOCK_PROCESS_CPUTIME_IDCLOCK_THREAD_CPUTIME_ID参数来指定您希望仅通过进程(及其子代)或线程获取CPU时间,而不是更宽,绝对的,“墙”时间。

Windows上的alternative可能是GetProcessTimes

答案 1 :(得分:2)

现在是什么时候?

想象一下你的代码需要3毫秒......但是它运行在3个核心上...它在核心1上使用了2毫秒;核心2上1.5毫秒;核心3上有1.2毫秒,总共4.7毫秒。

所以...是3毫秒,相同的是4.7毫秒?

哦,不要忘记那些4.7毫秒实际上也用于过滤传入的互联网连接和下载反病毒数据库。

使用分析器,即便如此,也不要相信结果:)


对于POSIX,请尝试 gettimeofday() (过时) clock_gettime()
对于Windows,显然,您可以使用GetSystemTime()

答案 2 :(得分:0)

没有观察干扰的最接近分析是oprofile。但它不能直接测量间隔;它只为您提供整个程序(或整个系统)花费时间的统计图。

如果你真的想要便宜的间隔时间,在x86上你可以使用inline asm中的rdtsc指令。

static inline unsigned rdtsc()
{
    unsigned x;
    __asm__ __volatile__ ( "rdtsc" : "=a"(x) : : "edx" );
    return x;
}

使用此选项可以保存前后的时间戳并获取差异。您可以修改此代码以保存完整的64位结果,但我选择了32位结果,假设您的时序间隔短于40亿个周期,并且不想在64位减法上浪费时间。