我使用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上运行的时间吗?
全部谢谢。
答案 0 :(得分:1)
这是indeterminism
操作系统的一部分。您可以在(看似)相同条件下运行程序,它可以更快或更慢地运行,具体取决于:
您的流程的优先级甚至可以在执行期间更改。例如,如果您的进程正在使用其整个时间量,它可能会在调度队列中移动到较低级别,这意味着您的程序运行频率较低(操作系统预测将来会有很高的使用率)。
无法保证您的进程在某个时间在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?