我想获得部分代码的运行时间。
我的C ++代码如下:
...
time_t t1 = clock();
/*
Here is my core code.
*/
time_t t2 = clock();
cout <<"Running time: "<< (1000.0 * (t2 - t1)) / CLOCKS_PER_SEC << "ms" << endl;
...
此代码适用于我的笔记本电脑。(Opensuse,g ++和clang ++,Core i5)。
但它在部门中的群集上效果不佳。 (Ubuntu,g ++,amd Opteron和intel Xeon)
我总是得到一些整数运行时间: 喜欢:0ms或10ms或20ms。
是什么原因造成的?为什么?谢谢!
答案 0 :(得分:1)
时钟不能保证精确到~10 -44 秒(普朗克时间),它们通常具有最小分辨率。 Linux手册页暗示了这一点:
clock()函数返回程序使用的近似处理器时间。
ISO标准C11 7.27.2.1 The clock function /3
:
时钟函数返回实现的最佳近似值 ...
和7.27.1 Components of time /4
:
clock_t和time_t中可表示的时间范围和精度是实现定义的。
从您的(公认有限的)示例数据来看,您的群集计算机的最低分辨率看起来大约为10毫秒。
无论如何,如果你需要更精细的分辨率,你有几种可能性。
首先,找到一种(可能是特定于实施的)更准确地计时的方法。
其次,不要做一次。在一个紧密的循环中做一千次,然后将所用的时间除以1000.这应该粗略地将你的分辨率提高一千倍。
第三,考虑一下你的代码在外面只需50ms的含义。除非您迫切需要每秒执行超过二十次(假设您没有其他代码可以运行),否则可能不是问题。
关于最后一点,请考虑诸如&#34;用户在烦恼之前必须等待的最长时间?&#34;。对此的答案会有所不同,但在大多数情况下,半秒钟可能会很好。
由于50ms代码在此期间可能会运行十次,因此您可能希望忽略它。您最好专注于影响明显较大的代码。