测试 C++ 代码的性能
Posted
技术标签:
【中文标题】测试 C++ 代码的性能【英文标题】:Testing performance of C++ code 【发布时间】:2010-10-05 06:16:52 【问题描述】:我可以使用哪些免费工具来测试 Linux 中 C++ 代码的性能?基本上我想确定代码的瓶颈并提高性能。我的应用程序主要涉及使用来自网络的数据的计算代码。所以我想提高代码的执行速度。
谢谢。
【问题讨论】:
你的意思是你需要好的分析工具?可能是 OProfile,valgrind-tools? 代码是计算密集型 (CPU)、磁盘 I/O 密集型、网络 I/O 密集型、内存消耗、多线程等吗?了解一些初始方向将帮助您找到更合适的工具。 你是要计时执行还是分析代码的工作? 【参考方案1】:对于典型的性能基准测试,这是我使用的。
gprof/oprofile - 用于 CPU 密集型代码分析。 netstat/ethereal - 用于网络统计 iostat/sar - 用于 I/O vmstat - 用于内存 mpstat/sar - 用于 CPU 使用现在您可以根据这些工具的输出来隔离问题。
例如:- 如果 I/O 是恒定的并且在限制范围内,您可以消除 I/O 问题。 如果 CPU 使用率很高,如我的 mpstat 所示,则使用 gprof/oprofile 进行分析。
如果不将它们全部一起用于不同的运行,很难确定瓶颈。
注意:你可以编写一个脚本将它们全部一起运行,并将每次运行的结果存储在指定的文件夹中。
【讨论】:
+1 用于提及好的工具。 +valgrind 用于 CPU/缓存密集型任务。为了快速开始,有必要检查程序运行时 CPU 与经过时间的比率 - 可以在顶部看到。如果它非常空闲,那么您需要改进您的网络 - 考虑打包/压缩数据的替代方法。如果 CPU 已固定,请使用gprof
或其他任何内容来描述哪些功能正在花费时间,或者引入您自己的计时器(boost 具有您可以使用的高分辨率计时功能)来测量您的处理的特定部分需要多长时间才能完成.【参考方案2】:
我为
推荐 valgrind cpu使用率,callgrind子模块(源码行粒度) 内存泄漏 构建调用图 一些高级问题,例如查找多线程锁定机制中的问题callgrind 的输出可以通过 KCacheGrind 直观的显示出来。
【讨论】:
【参考方案3】:到目前为止,我所知道的最好的 Linux 分析器是 Zoom。虽然它是一种商业产品,但它并不太贵,您可以根据要求获得免费的 30 天评估许可证
【讨论】:
【参考方案4】:正如@Paul 所说,试试Zoom。
就我个人而言,我使用this method,它适用于these reasons,Zoom 近似于它。这是some programmers have independently discovered的技术。
我也被告知 OProfile 可以做到,但你必须知道你需要做什么。
【讨论】:
以上是关于测试 C++ 代码的性能的主要内容,如果未能解决你的问题,请参考以下文章