【发布时间】:2013-06-16 14:38:47
【问题描述】:
我有一个用 C++ 编写的高度并行化的程序,我正在努力加快它的速度。在进行了看起来很明显的修改之后,我想分析代码以查看时间花在了哪里以及我应该专注于优化的地方。但是,我遇到了一些问题,我似乎无法找到分析代码的好方法。
本来我想使用OProfile,但是这台机器上似乎没有安装内核源代码,而且内核太旧并且没有构建配置文件支持。然后我研究了使用 gprof,但了解到它不能很好地处理多线程代码。我最终选择了 gperftools,它运行良好,但由于它对堆栈帧进行采样,因此似乎只能为我提供有关我的代码时间使用情况的函数级信息。我可以看到我超过 50% 的时间(或采样时间)都花在了一个函数上。但是,我想进一步深入了解该函数/指令的哪个区域占用了大部分时间。但是,我似乎无法弄清楚如何让 gperftools 提供此信息,而且我不知道其他分析工具会(我可以在没有 root 权限的情况下使用/安装)。任何建议将不胜感激。
【问题讨论】:
-
嗯,dirty-but-effective way,使用 GDB。如果你多次打断它,一半或多或少,你就会清楚地看到发生了什么。
标签: c++ testing optimization profiling