首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何测量Linux下C程序的实际执行时间?

如何测量Linux下C程序的实际执行时间?
EN

Stack Overflow用户
提问于 2011-08-27 16:21:42
回答 3查看 43.3K关注 0票数 23

我知道这个问题以前可能经常被问到,但似乎大多数问题都是关于一段代码的经过的时间(基于墙时钟)。一段代码的经过的时间不太可能等于实际的执行时间,因为其他进程可能在感兴趣的的经过的时间期间执行。

我使用getrusage()获取进程的用户时间和系统时间,然后按(用户时间+系统时间)计算实际执行时间。我正在Ubuntu上运行我的程序。以下是我的问题:

  1. 我如何知道getrusage()的精度?
  2. 还有其他方法可以提供比getrusage()更高的精度吗?
EN

回答 3

Stack Overflow用户

发布于 2011-08-27 18:51:03

您可以通过使用内核的CPU时间功能来检查linux上进程的实际CPU时间:

代码语言:javascript
运行
复制
 #include <time.h>

 clock_t start, end;
 double cpu_time_used;

 start = clock();
 ... /* Do the work. */
 end = clock();
 cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;

来源:http://www.gnu.org/s/hello/manual/libc/CPU-Time.html#CPU-Time

这样,您就可以计算CPU在进程中执行的指令的数量,从而得到实际的工作时间。

票数 19
EN

Stack Overflow用户

发布于 2011-08-27 18:43:14

getrusage()函数是我所知道的获得“消耗CPU时间”的唯一标准/可移植方式。

没有一种简单的方法来确定返回值的精度。我会尝试调用getrusage()一次以获得初始值,然后反复调用它,直到返回的值/s与初始值不同,然后假设有效精度是初始值和最终值之间的差异。这是一次黑客攻击(它可能比此方法确定的精度更高,而且结果可能被认为是最坏的估计),但它总比没有好。

我还会担心返回值的准确性。在某些内核中,对于发生计时器IRQ时碰巧运行的任何代码,都会增加计数器;因此,进程可能非常幸运(并在计时器IRQ发生之前持续阻塞)或非常不幸(并且在计时器IRQ发生之前解除阻塞)。在这种情况下,“幸运”可能意味着CPU占用时间看起来不需要CPU时间,而“不幸”可能意味着使用很少CPU时间的进程看起来像占用CPU时间的进程。

对于特定架构/s上特定版本的特定内核(可能取决于内核在某些情况下使用特定配置选项编译的情况),在某些情况下,可能会有更高精度的替代方案,这些选项不是可移植的,也不是标准的。

票数 5
EN

Stack Overflow用户

发布于 2016-07-14 11:21:25

您可以使用以下代码:

代码语言:javascript
运行
复制
#include <sys/time.h>
struct timeval start, end;
gettimeofday(&start, NULL);
.
.
.
gettimeofday(&end, NULL);
delta = ((end.tv_sec  - start.tv_sec) * 1000000u +
         end.tv_usec - start.tv_usec) / 1.e6;
printf("Time is : %f\n",delta);

它将显示代码段的执行时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7215764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档