繁体   English   中英

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

[英]why the time is different for the same execution?

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

为什么结果是这样?

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

我使用#pragmaoptimize(“”,off)禁用了JIT优化,同样的事情

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

第二个问题,我们如何只计算诸如clock()之类的方法的cpu时间,而仅计算cpu time?

窗口的量子值是多少? (例如40微秒)量子是指其他进程可以在cpu上运行的时间?

谢谢大家

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

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

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

无法保证您的进程将在特定时间在CPU上运行。


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

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

就像我之前说过的,每次运行都会给您不同的结果。 但是,这应该使您大致了解您的方法需要花费多长时间。

最后一点:在为平台(无论是Windows,Mac OSX还是Linux)构建代码时,您不必担心时间长短。 您正在处理的进程无法检测到何时将其从CPU上卸下(或者至少直到将它重新装回CPU为止)。

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

对于第一个答案,我同意约翰的看法。

对于第二个答案,请提供更多详细信息:

Clock()方法在Linux中提供cpu时间。 请访问以下答案,该答案说明:

如何在Linux / Windows上同时测量CPU时间和挂钟时间?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM