gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:18:48 24 4
gpt4 key购买 nike

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

为什么会这样?

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

我使用#pragma optimize( "", off ) 禁用了 JIT 优化同样的事情

time: 258 time: 255 time: 253 time: 253 time: 251 time: 253 time: 251 time: 254 time: 253 time: 252

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

Windows 的量子值(value)是多少? (比如 40 微秒)一个量子是其他进程可以在 cpu 上运行的时间?

谢谢大家

最佳答案

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

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

您的进程的优先级甚至可以在执行期间发生变化。例如,如果你的进程正在使用它的整个时间片,它可能会被移动到调度队列中的较低级别,这意味着你的程序运行频率会降低(操作系统预测 future 的高使用率)。

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


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

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

就像我之前说的,每次运行它不会给你相同的结果。但是,这应该可以让您大致了解您的方法需要多长时间才能完成。

最后一点:在为平台构建代码时,无论是 Windows、Mac OSX 还是 Linux,您都不应该担心时间片有多长。您的进程无法检测到它何时从 CPU 上取下(或者至少在它重新打开之前不会)。

进程是操作系统提供的抽象,它使我们不必担心进程管理方式的复杂细节。

关于c++ - 为什么同一次执行的时间不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29705922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com