如何在Linux上获得C 代码块的时钟刻度?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,而总计为5000,则势力始终为0。

我只是跟随:http://www.cplusplus.com/reference/clibrary/ctime/clock/

为什么?

任何帮助将不胜感激。

尝试使用C 11 <chrono>标头。

typedef std::chrono::high_resolution_clock Clock;
auto start = Clock::now();
/* do work */
auto end = Clock::now();
auto timeTaken = end - start;

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

在Linux上,CPU时间是IIRC的,具体取决于config_hz设置,通常是如今100-1000 Hz。因此,1-10毫秒的分辨率是您获得的最好的。

使用clock_getTime(...,clock_monotonic),您可以获得纳秒分辨率壁接时间,尽管当然,在这种分辨率下,您可能想考虑到呼叫本身需要一些时间(iirc左右20 ns左右,我检查了)。

最新更新