我想知道在Linux上用C ++编写的函数的执行时间。 我发现很多关于这个的post。 我尝试了这个链接计时器方法中提到的所有方法来计算时间。 以下是我的函数执行时间的结果:
time() : 0 seconds clock() : 0.01 seconds gettimeofday() : 0.002869 seconds rdtsc() : 0.00262336 seconds clock_gettime() : 0.00672151 seconds chrono : 0.002841 seconds
请帮助我哪个方法是可靠的,因为所有的结果在他们的读数不同。 我读到你的操作系统正在不同的任务之间切换,所以读数不能期望是非常准确的。 有没有一种方法可以计算cpu花在我的函数上的时间。 我听说过使用分析工具,但还没有find任何只是一个function的例子。 请指导我
是否有可能在某个二进制文件中使用vtune而不是整个二进制文件?
日志DLL由进程加载
perf事件文档
C ++vector数组运算符的高计算成本?
如何使用linux`perf`工具来生成“Off-cpu”configuration文件
阅读时间(7) 。
由于各种原因(并取决于您的实际硬件 ,即您的主板)时间不是你想要的那么准确。
所以,添加一些循环重复你的函数多次,或改变它的输入,使其运行时间更长。 确保整个程序的执行时间(由时间(1) …给出)至少为大约一秒(如果可能,请确保至少有半秒cpu时间)。
为了分析,编译并链接到g++ -Wall -pg -O1然后使用gprof(1) (有更复杂的方法来配置文件,例如oprofile …)。
另请参阅这个答案,以一个非常类似的问题 (由同一个Zara )。
如果你正在做简单的测试,试图找出哪个更好,那么任何方法都可以。 例如:
const int MAX = 10000; // times to execute the function void benchmark0() { auto begin = std::chrono::steady_clock::Now(); for (int i = 0; i < MAX; ++i) method0(); auto Now = std::chrono::steady_clock::Now(); auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(Now - begin); std::cout << "Cost of method0() is " << elapsed .count() << " milliseconds" << std::endl; } void benchmark1() { /* almost the same as benchmark0,but calls method1 */ } int main() { benchmark0(); benchmark0(); benchmark1(); benchmark1(); }
你可能已经注意到了benchmark0和benchmark1被连续调用了两次:因为会有cpu,I / O的缓存,你可能想要摆脱由于缓存而导致的性能增益/丢失,但是测量纯粹的执行时间。
当然,你也可以使用g ++来分析程序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。