如何在Linux上获取C ++代码块的时钟周期? clock()结果毫无意义。

时间:2012-11-02 19:17:32

标签: c++ linux time click clock

我正在尝试测试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/

为什么?

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

尝试使用C ++ 11 <chrono>标题。

typedef std::chrono::high_resolution_clock Clock;

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

auto timeTaken = end - start;

答案 1 :(得分:2)

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

在Linux上,cpu时间是根据CONFIG_HZ设置计算的,这些天通常为100-1000 Hz。所以1-10毫秒的分辨率是你能得到的最好的。

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