对 C++ 中的函数进行计时在Linux上运行的程序

发布于 10-18 03:13 字数 183 浏览 6 评论 0原文

我正在尝试使用在用户空间中执行所需的时间来对 C++ 程序的函数进行计时。我在程序内部尝试了clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start) 命令,但恐怕这是CPU时间,而不是我实际需要的用户时间。在这种情况下,时间“程序名称”将不起作用,因为我只是对一个函数进行计时。任何帮助都会很棒。 谢谢!

I am trying to time a function of my C++ program using the amount of time that it takes to execute in user space. I tried the clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start) command from inside the program but I am afraid that this is the CPU time and not the User Time that I actually need. The time "program name" will not work in this case because I am only timing a function. Any help would be great.
Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

怎樣才叫好2024-10-25 03:13:17

使用times()函数,参见:http://linux.die .net/man/2/times

这将为您提供进程的当前用户和系统时间。您可以在子例程进入和退出时调用它,然后进行减法。

您还可以使用 gprof 等分析器,它会自动为您完成这一切(但会产生开销)。

Use the times() function, see: http://linux.die.net/man/2/times

This will give you current user and system time for your process. You can call it on entry and exit from your subroutine, and subtract.

You can also use a profiler like gprof, which will do this all automatically for you (but will incur overhead).

墨洒年华2024-10-25 03:13:17

您可以使用 gettimeofday() 作为示例 这里

将此函数添加到您的代码中:

#include <sys/time.h> 

long myclock()
{
    struct timeval tv;
    gettimeofday(&tv, NULL);
    return (tv.tv_sec * 1000000) + tv.tv_usec;
}

并使用它来检索时间:

long start = myclock();

// do something
// ...

long end = myclock() - start;

std::cout << "[" << time->tm_hour << ":"<< time->tm_min << ":" << time->tm_sec << 
             "] time:" << std::setprecision(3) << end/1000000.0 << std::endl;

You could use gettimeofday() as exemplified here.

Add this function to your code:

#include <sys/time.h> 

long myclock()
{
    struct timeval tv;
    gettimeofday(&tv, NULL);
    return (tv.tv_sec * 1000000) + tv.tv_usec;
}

and use it to retrieve the time:

long start = myclock();

// do something
// ...

long end = myclock() - start;

std::cout << "[" << time->tm_hour << ":"<< time->tm_min << ":" << time->tm_sec << 
             "] time:" << std::setprecision(3) << end/1000000.0 << std::endl;
梦初启2024-10-25 03:13:17

尝试 boost:timer 库。它便于携带且易于使用。 Boost 计时器分别为您提供挂钟时间、用户时间和系统时间。

http://www.boost.org/doc/libs /1_53_0/libs/timer/doc/cpu_timers.html

Try the boost:timer library. It is portable and easy to use. The Boost timers separately give you wall clock time, user time and system time.

http://www.boost.org/doc/libs/1_53_0/libs/timer/doc/cpu_timers.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文