0

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

为什么 ?

任何帮助将不胜感激。

4

2 回答 2

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;
于 2012-11-02T19:34:07.457 回答
2

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

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

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

于 2012-11-02T19:25:05.400 回答