什么是C++中计算经过时间最准确的方法?我使用了clock()函数进行计算,但我有一种感觉这是错误的,因为我90%的时间得到的结果是0毫秒,其余时间得到的是15毫秒,这对我来说没有多少意义。即使它非常小并且非常接近0毫秒,是否有更准确的方法可以给我精确的值而不是四舍五入为0毫秒?
clock_t tic = clock();
/*
main programme body
*/
clock_t toc = clock();
double time = (double)(toc-tic);
cout << "\nTime taken: " << (1000*(time/CLOCKS_PER_SEC)) << " (ms)";
谢谢
RDTSC
在今天的计算机上实际上不是一个很好的用于测量墙钟时间的来源。首先,它在多个核心之间不一定同步,因此如果您的进程被重新调度到不同的核心上,减去两个值就没有意义了。此外,现代CPU具有根据负载响应的动态时钟频率。对于算法复杂度的测量,将线程固定到单个CPU并使用RDTSC
是有帮助的。但对于时间戳和测量墙钟时间来说,绝对不适用。 - Ben VoigtRDTSC
而言,它是一个耗费资源的操作,很可能是因为你的平台在多核之间进行了同步。读取HPET也很慢。 - Ben Voigt