我正在尝试测试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/
为什么?任何帮助将不胜感激。
答案 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)我查了一下。