【问题标题】:Measuring CPU time in c++在 C++ 中测量 CPU 时间
【发布时间】:2013-12-08 16:20:01
【问题描述】:

如果我有以下代码

clock_t t;
t = clock();
//algorithm
t = clock() - t;

t 将等于运行程序的滴答数。这和CPU时间一样吗?有没有其他方法可以测量 C++ 中的 CPU 时间?

操作系统 -- Debian GNU/Linux 我对任何可行的事情持开放态度。我想比较两种算法的 CPU 时间。

【问题讨论】:

  • 请说明您是否正在寻找 C/C++ 标准和可移植方法,或者操作系统库和 CPU 特定机器指令是否可以接受。
  • 另外这个问题肯定是重复的。

标签: c++ time runtime cpu-usage cpu-time


【解决方案1】:

clock() 指定用于测量 CPU 时间,但并非所有实现都这样做。特别是微软在 VS 中的实现不会在多个线程运行时计算额外的时间,或者在程序的线程处于休眠/等待状态时计算更少的时间。

还要注意clock() 应该测量整个程序使用的 CPU 时间,所以虽然//algorithm 中的多个线程使用的 CPU 时间会被测量,但不属于//algorithm 的其他线程也会被计算在内。

clock() 是标准中指定的唯一测量 CPU 时间的方法,但当然还有其他特定于平台的测量 CPU 时间的方法。

std::chrono 不包括任何用于测量 CPU 时间的时钟。它只有一个与系统时间同步的时钟,一个相对于实时以稳定速率前进的时钟,以及一个“高分辨率”但不一定测量 CPU 时间的时钟。

【讨论】:

    【解决方案2】:

    如何测量使用的 CPU 时间?

    #include <ctime>
    
    std::clock_t c_start = std::clock();
    // your_algorithm
    std::clock_t c_end = std::clock();
    
    long_double time_elapsed_ms = 1000.0 * (c_end-c_start) / CLOCKS_PER_SEC;
    std::cout << "CPU time used: " << time_elapsed_ms << " ms\n";
    

    当然,如果你以秒为单位显示时间:

    std::cout << "CPU time used: " << time_elapsed_ms / 1000.0 << " s\n";
    

    来源:http://en.cppreference.com/w/cpp/chrono/c/clock

    【讨论】:

      【解决方案3】:

      C++ 有一个计时库。见http://en.cppreference.com/w/cpp/chrono。通常也有依赖于平台的方法来获得高分辨率计时器(显然因平台而异)。

      【讨论】:

      • 注意 chrono 库是 C++11 标准的一部分可能会有所帮助。
      • chrono 不测量 CPU 时间。
      猜你喜欢
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多