代码中Linux时间和性能时钟之间的差异

代码中Linux时间和性能时钟之间的差异,第1张

概述我正在对一些C代码的计时进行简单的测试,我遇到了一个我不是100%肯定的工件. 建立 我的代码使用C 11 high_resolution_clock来测量经过的时间.我还使用Linux的time命令(/usr/bin/time)包装程序的执行.对于我的程序,high_resolution_clock报告~2s,而时间报告~7s(~6.5s用户和~.5s系统).同时使用详细选项表明我的程序使用了1 我正在对一些C代码的计时进行简单的测试,我遇到了一个我不是100%肯定的工件.

建立

我的代码使用C 11 high_resolution_clock来测量经过的时间.我还使用Linux的time命令(/usr/bin/time)包装程序的执行.对于我的程序,high_resolution_clock报告~2s,而时间报告~7s(~6.5s用户和~.5s系统).同时使用详细选项表明我的程序使用了100%的cpu和1个自愿上下文切换以及10个非自愿上下文切换(/usr/bin/time -v).

我的问题是在OS时间测量和性能时间测量之间产生如此显着差异的原因是什么?

我最初的想法

通过我对 *** 作系统的了解,我假设这些差异完全是由与其他程序的上下文切换引起的(如时间-v所示).

这是造成这种差异的唯一原因吗?在查看代码性能时,我应该相信我的程序或系统报告的时间吗?

同样,我的假设是相信我的程序计算的时间超过linux的时间,因为它不仅仅是我的程序的cpu使用率.

注意事项

>我不会发布代码,因为它与手头的问题无关.如果你想知道它是一个简单的测试,它可以进行100,000,000次随机浮点算术运算.
>我知道我的C代码中的其他时钟可能或多或少适合差异情况(this stack overflow question). High_resolution_clock只是一个例子.

编辑:代码按要求

#include <chrono>#include <cstdlib>#include <iostream>#include <vector>using namespace std;using namespace std::chrono;int main() {  size_t n = 100000000;  double d = 1;  auto start_hrc = high_resolution_clock::Now();  for(size_t i = 0; i < n; ++i) {    switch(rand() % 4) {      case 0: d += 0.0001; break;      case 1: d -= 0.0001; break;      case 2: d *= 0.0001; break;      case 3: d /= 0.0001; break;    }  }  auto end_hrc = high_resolution_clock::Now();  duration<double> diff_hrc = end_hrc - start_hrc;  cout << d << endl << endl;  cout << "Time-HRC: " << diff_hrc.count() << " s" << endl;}
解决方法

My question is what causes such a dramatic difference between OS time measurements and performance time measurements?

看起来您的系统需要一段时间才能启动您的应用程序.可能是资源问题:没有足够的可用内存(交换)或超额订购的cpu.

在我的桌面上没有观察到显着的差异:

Time-HRC: 1.39005 sreal    0m1.391suser    0m1.387ssys     0m0.004s
总结

以上是内存溢出为你收集整理的代码中Linux时间和性能时钟之间的差异全部内容,希望文章能够帮你解决代码中Linux时间和性能时钟之间的差异所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/1019424.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存