【问题标题】:how to get clock ticks for a C++ code block on Linux ? clock() results make no sense.如何在 Linux 上获取 C++ 代码块的时钟滴答? clock() 结果没有意义。
【发布时间】:2012-11-02 19:17:32
【问题描述】:

我正在尝试测试 pow() 的时钟滴答。

clock_t startTime = clock();
for (int ii = 0 ; ii < moreIter ; ++ii)
{
   for (int i = 0 ; i < totalIte ; ++i)
   P0Table[i] = pow( 1 + baseTable[i] + baseTable1[i]  , expTablr[i]);
}
clock_t endTime = clock();
clock_t powTime = endTime - startTime;

如果 moreIter 为 1 且 totalIte 为 5000 ,则 powTime 始终为 0。

我刚刚关注: http://www.cplusplus.com/reference/clibrary/ctime/clock/

为什么?

任何帮助将不胜感激。

【问题讨论】:

  • clock() 的粒度通常很大。通常是一毫秒或更长时间。
  • 在 Linux 上,使用 clock_gettime,或者在关键的 RDTSC 中。
  • cplusplus.com 已经过时了。我更喜欢 en.cppreference.com。

标签: c++ linux time click clock


【解决方案1】:

尝试使用 C++11 &lt;chrono&gt; 标头。

typedef std::chrono::high_resolution_clock Clock;

auto start = Clock::now();
/* do work */
auto end = Clock::now();

auto timeTaken = end - start;

【讨论】:

  • 如何使用 C++11 标头?我的 gcc 版本 4.4.4 20100726 (Red Hat 4.4.4-17) (GCC)。谢谢!
  • 我认为你至少需要 g++ 4.6,甚至可能需要 4.7。
【解决方案2】:

clock() 分辨率不是特别高,您可能需要更多次迭代才能获得非零结果。

在 Linux 上,cpu 时间由 iirc 计算,具体取决于 CONFIG_HZ 设置,如今通常为 100-1000 Hz。因此,1-10 毫秒的分辨率是您可以获得的最佳分辨率。

使用 clock_gettime(..., CLOCK_MONOTONIC) 您可以获得纳秒分辨率的挂钟时间,当然在这种分辨率下您可能需要考虑到调用本身需要一些时间(IIRC 大约 20 ns 最后我检查过)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 2015-08-31
    • 2020-09-18
    相关资源
    最近更新 更多