C中的计时函数[重复]

Posted

技术标签:

【中文标题】C中的计时函数[重复]【英文标题】:Timing functions in C [duplicate] 【发布时间】:2011-11-14 23:56:26 【问题描述】:

可能重复:C++ Timer function to provide time in nano secondsHigh resolution timer with C++ and Linux?

我想为一些 C 函数计时,我正在尝试提出一种系统化的方法。到目前为止,我所拥有的是最简单的计时形式:

#include <sys/time.h>
struct timeval start_time, end_time;
gettimeofday(&start_time, NULL);
<my function>
gettimeofday(&end_time, NULL);
total_usecs = (end_time.tv_sec-start_time.tv_sec) * 1000000 + 
    (end_time.tv_usec-start_time.tv_usec);
printf ("parfib,%ld,%d\n",(long)res,total_usecs); 

我也找到了

timespec time1, time2;
int temp;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);
     <my function>
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);
cout<<diff(time1,time2).tv_sec<<":"<<diff(time1,time2).tv_nsec<<endl;

但即使使用std=gnu99,我也无法让它工作(我从网站复制了上面的代码,但在编译之前我确实翻译成 C :)。无论如何,我想知道你们中是否有人知道文档或博客或类似我正在尝试做的讨论计时功能的东西。 注意,我不追求gprof之类的分析器,我需要这个分析器是手工制作的。

感谢任何提示。

【问题讨论】:

我猜你需要比时间函数更好的采样? “我需要这个分析器是手工制作的”。如果目标是 测量,只需在 周围环绕一个循环即可获得所需的所有准确度。如果目标是有效地找到加速机会,那么衡量是行不通的。 This does it. 【参考方案1】:

要编译第二个示例,您需要:

gcc -Wall -Wextra -D_POSIX_C_SOURCE=199309L timer.c -lrt

_POSIX_C_SOURCE 指定您所针对的 POSIX 版本 - 需要在包含任何系统头文件之前对其进行定义,因此通过 -D 执行此操作是最安全的。 clock_gettime 也依赖于链接到 librt (-lrt)。

【讨论】:

以上是关于C中的计时函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在while循环内的函数上放置一个计时器[重复]

C# - 计时器滴答时间比指定的间隔更短,导致重复作业并行运行

C ++中的控制台程序[重复]

计时器返回到xcode中的上一个视图[重复]

从计时器更新 Winforms 控件 [重复]

C ++ Windows中的高分辨率计时器库? [复制]