【问题标题】:How to measure the amount of time taken by program如何衡量程序花费的时间
【发布时间】:2012-07-02 02:17:57
【问题描述】:

我想测量我的 C++ 程序所花费的时间,但如果我使用:

time_t begin, end;
time_t(&begin);
func(); //my function...it contains the code whose elapsed time I want to measure
time(&end);
cout<<"\n Time elapsed:"<<difftime(end, begin) <<" seconds"<<endl;

我得到的时间是 0 秒。

gprof 在我的情况下也不起作用,因为它表明它无法分配我的程序所需的内存量。

是否有其他方法可以测量我的程序所需的时间量。 Valgrind 的地块工具确实显示了快照所用的时间,但文档没有提到它是以毫秒还是微秒为单位。

请推荐一个合适的方法?

如果我能以毫秒为单位测量时间就好了。

【问题讨论】:

  • 在 shell 中使用 time 实用程序?假设您正在运行 *nix。或者你可以使用 C 函数 clock() 来计算时钟滴答声。
  • 我用过,但它仍然给我..经过的时间是 0
  • 你必须在函数之前和函数之后调用一次时间。好像忘记记录函数前的时间了。
  • 抱歉……我的错……打错字了:(但问题依旧。
  • time shell 中的实用程序通常会给你以毫秒为单位的时间,假设你想要计时的函数是程序中唯一的东西。不过,它也会计算程序在函数之外花费的时间。

标签: c++ valgrind


【解决方案1】:

使用 std::chrono。
http://en.cppreference.com/w/cpp/chrono/duration

您可能还想查看 facebook 的基准测试实用程序。
https://github.com/facebook/folly/blob/master/folly/docs/Benchmark.md

【讨论】:

    【解决方案2】:

    您可以使用如下所示的代码。

    clock_t start = clock();     
     // Code here...
    clock_t ticks = clock()-start;     
    std::cout << "Time Taken:" << (double)ticks/CLOCKS_PER_SEC << "\n"; 
    

    【讨论】:

    • 它会给我以毫秒为单位的时间吗?
    • 这确实以毫秒为单位。但准确性取决于系统的粒度。在 Windows 系统上通常为 15.6 毫秒。这意味着您只会看到 15.6 毫秒的倍数的时间。
    【解决方案3】:

    一种可能性是自己生成程序(CreateProcess 在 Windows 上,fork 在类 Unix 系统上)。然后,等待孩子退出(Windows 上为WaitForSingleObject,Unix 上为waitpid)。最后,获取子进程的时间(GetProcessTimes 在 Windows 上,times 在 Unix 上)。

    这将以毫秒为单位给出时间,并将墙壁时间与 CPU 时间分开。后者在/如果您同时在同一系统上运行其他东西时特别方便(您仍然可以通过静止系统获得更好的准确性,但可以保持相当接近)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 2011-11-26
      相关资源
      最近更新 更多