【发布时间】:2023-03-09 09:53:02
【问题描述】:
我想知道某个函数在我的 C++ 程序中在 Linux 上执行所需的时间。之后,我想做一个速度比较。我看到了几个时间函数,但最终从 boost 中得到了这个。计时:
process_user_cpu_clock, captures user-CPU time spent by the current process
现在,我不清楚如果我使用上面的函数,我会得到唯一的 CPU 花费在那个函数上的时间吗?
其次,我找不到使用上述函数的任何示例。谁能帮我看看上面的功能怎么用?
P.S:现在,我使用 std::chrono::system_clock::now() 以秒为单位获取时间,但由于每次 CPU 负载不同,这给了我不同的结果。
【问题讨论】:
-
对于 Linux 使用:
clock_gettime.. gcc 将其他时钟定义为:typedef system_clock steady_clock; typedef system_clock high_resolution_clock;在 Windows 上,使用QueryPerformanceCounter。 -
这个问题不是this one 的重复,还是场景使解决方案不同?
-
我有两个函数的实现,想找出哪个性能更好。
-
非常重要:确保启用优化。未优化的代码与正常的优化代码有不同的瓶颈,并且没有告诉你任何有意义的事情。 C loop optimization help for final assignment (with compiler optimization disabled)。总的来说,微基准测试有很多陷阱,尤其是未能首先针对 CPU 频率和页面错误进行预热循环:Idiomatic way of performance evaluation?。还有this answer
-
另请参阅How would you benchmark the performance of a function? 了解 Google Benchmark,它避免了滚动您自己的微基准测试的许多陷阱。另外Simple for() loop benchmark takes the same time with any loop bound 了解更多关于优化如何与基准循环交互以及如何处理它的信息。
标签: c++ optimization profiling