代码中Linux时间和性能时钟之间的差异
我正在对一些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次随机浮点算术运算. 编辑:代码按要求 #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; } 解决方法
看起来您的系统需要一段时间才能启动您的应用程序.可能是资源问题:没有足够的可用内存(交换)或超额订购的CPU. 在我的桌面上没有观察到显着的差异: Time-HRC: 1.39005 s real 0m1.391s user 0m1.387s sys 0m0.004s (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |