为什么同一次执行的时间不同?

时间:2015-04-17 17:35:19

标签: c++ c time operating-system

我使用clock()计算方法的时间,它为同一方法提供了不同的值。

为什么结果是这样的?

for(int i=0;i<10;i++){
    start = clock();
    x=FindPrimeNumber(900);
    end = clock();
    cout << end <<" "<< start  <<endl;
}

我使用#pragma optimize禁用JIT优化(&#34;&#34;,off) 同样的事情

  

时间:258时间:255时间:253时间:253时间:251时间:253时间:251   时间:254时间:253时间:252

第二个问题我们如何计算像clock()这样的方法的cpu时间,但只计算cpu时间?

窗户的量子价值是多少? (像40微秒) 量子是其他进程在cpu上运行的时间吗?

全部谢谢。

2 个答案:

答案 0 :(得分:1)

这是indeterminism操作系统的一部分。您可以在(看似)相同条件下运行程序,它可以更快或更慢地运行,具体取决于:

  • 有多少个可运行的进程?
  • 可运行进程的行为如何? (高IO?高CPU?)

您的流程的优先级甚至可以在执行期间更改。例如,如果您的进程正在使用其整个时间量,它可能会在调度队列中移动到较低级别,这意味着您的程序运行频率较低(操作系统预测将来会有很高的使用率)。

无法保证您的进程在某个时间在CPU上运行。


我对你的第二个问题的回答:不是考虑方法的开始和结束时间,为什么不只计算开始和结束之间的差异?

int start = clock();
methodCall();
int elapsedTime = clock() - start;

就像我之前说的那样,每次运行时都不会给你相同的结果。但是,这应该可以让您近似确定方法完成的时间。

最后一点:在为平台构建代码时,无论是Windows,Mac OSX还是Linux,您都不应该担心时间量是多长。您的进程无法检测何时从CPU中取出(或者至少在它被重新启动之前)。

该流程是操作系统提供的抽象,使我们不必担心如何管理流程的复杂细节。

答案 1 :(得分:0)

对于第一个答案,我同意John的观点。

第二个答案更多细节:

Clock()方法在Linux中提供cpu时间。请访问以下解释说明:

How can I measure CPU time and wall clock time on both Linux/Windows?