2012-07-06 70 views
4

我想花时间使用一些C++代码,但是我得到的结果很奇怪。我写了这个测试程序来试图隔离发生了什么。任何人都可以解释结果吗?这是如果这是有关在Ubuntu 11.04和EC2中高CPU实例运行clock_gettime性能不一致

#include <iostream> 
#include <time.h> 
using namespace std; 

int main() 
{ 
    timespec startTime, currentTime; 
    long elapsed; 

    for (int i=0; i<5; i++) { 
     clock_gettime(CLOCK_REALTIME, &startTime); 
     sleep(1); 
     clock_gettime(CLOCK_REALTIME, &currentTime); 
     elapsed = currentTime.tv_nsec - startTime.tv_nsec; 
     cout << elapsed << " nanoseconds elapsed" << endl; 
     cout << "1000000000 expected" << endl; 
    } 
    return 0; 
} 

输出:

109044 nanoseconds elapsed 
1000000000 expected 
133713 nanoseconds elapsed 
1000000000 expected 
197287 nanoseconds elapsed 
1000000000 expected 
143396 nanoseconds elapsed 
1000000000 expected 
111871 nanoseconds elapsed 
1000000000 expected 

回答

4

你也必须考虑到,目前的时间可能已经结转到下一秒钟。纳秒字段只会告诉你在当前时间内你已经走了多远。

elapsed = (currentTime.tv_sec - startTime.tv_sec) * 1000000000 
       + currentTime.tv_nsec - startTime.tv_nsec; 
+1

另一种方法是:将'1000000000 expected'行改为'0 expected'。 :) – sarnold 2012-07-06 01:41:57

+0

@sarnold:嘿,我想它确实测量了'sleep(1)'调用的开销,并且进入了'clock_gettime()'调用的一半:-)。 – jxh 2012-07-06 01:44:53