为什么同一次执行的时间不同
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;
}
我使用#pragma optimize(",off)禁用JIT优化同样的事情
时间:258时间:255时间:253时间:253时间:254时间:253时间:252
第二个问题是,我们如何只计算clock()等方法的cpu时间,而只计算cpu时间?
窗口的量子值是多少?(大约40微秒)量子是其他进程可以在cpu上运行的时间?
谢谢大家。
这是操作系统的indeterminism
的一部分。你可以在(看似)相同的条件下运行你的程序,它可以更快或更慢地运行,这取决于:
- 有多少个可运行的进程
- 可运行进程的行为如何?(高IO?高CPU?)
在执行过程中,进程的优先级甚至可能发生变化。例如,如果您的进程正在使用其整个时间段,则它可能会被移动到调度队列中的较低级别,这意味着您的程序运行频率将降低(操作系统预测未来会有很高的使用率)。
无法保证您的进程在某个特定时间会在CPU上运行。
我对第二个问题的回答是:与其考虑方法的开始和结束时间,为什么不计算开始和结束之间的差异?
int start = clock();
methodCall();
int elapsedTime = clock() - start;
正如我之前所说,这不会在每次运行时都给你相同的结果。但是,这应该会给你一个完成方法所需时间的近似值。
最后一点:当为一个平台构建代码时,无论是Windows、Mac OSX还是Linux,你都不应该担心你的时间段有多长。你的进程无法检测到它何时从CPU上取下(或者至少在它重新启动之前不会检测到)。
流程是操作系统提供的抽象,它使我们不必担心如何管理流程的复杂细节。
对于第一个答案,我同意约翰的观点。
关于第二个答案,更多细节:
Clock()方法在Linux中提供cpu时间。访问以下解释答案:
如何在Linux/Windows上测量CPU时间和挂钟时间?
- 为什么我的信号处理程序只执行一次?
- For循环在cpp中仅执行一次
- 在可变函数调用中执行一次语句
- cppUnit:针对多个测试方法执行一次的设置函数
- For 循环是否总是至少执行一次?
- 如何确保方法在该对象的生存期内仅执行一次?
- 线程仅执行一次
- while(getline(myReadFile, temp, ':')) 执行一次迭代太多导致向量越界
- Qt - 解决一个插槽上的两个顺序调用,并且仅执行一次操作
- 函数执行一次
- 共享/独占锁定,其中共享工作只能执行一次
- C++执行一次序列的最佳方法
- Linux/c++ 定时方法,尽管有漂移,但每 N 秒执行一次
- 每 t 毫秒执行一次 c++ 代码
- Winsock:回显服务器回复两次,当时我刚刚将其编程为执行一次send()调用
- 我在循环时遇到困难。它只执行一次
- QTimer 每秒执行一次方法
- 阿西奥:为什么计时器只执行一次
- 每秒执行一次的函数,它是有效的,但喜欢每0.5秒执行一次
- 在没有默认构造函数的OpenMP中,每个线程执行一次代码